102 lines
2.3 KiB
C++
102 lines
2.3 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "Morph/AnimTimeline/SAnimEditorBase.h"
|
|
|
|
#include "AnimPreviewInstance.h"
|
|
#include "Animation/AnimSequenceBase.h"
|
|
#include "Animation/BlendSpace.h"
|
|
#include "Animation/DebugSkelMeshComponent.h"
|
|
#include "Widgets/SBoxPanel.h"
|
|
#include "Widgets/SOverlay.h"
|
|
|
|
void SAnimEditorBase::Construct(const FArguments& InArgs, const TSharedPtr<IPersonaPreviewScene>& InPreviewScene)
|
|
{
|
|
PreviewScenePtr = InPreviewScene;
|
|
OnObjectsSelectedDelegate = InArgs._OnObjectsSelected;
|
|
SetInputViewRange(0.0f, GetSequenceLength());
|
|
|
|
const TSharedRef<SWidget> TimelineWidget = InArgs._DisplayAnimTimeline
|
|
? CreateAnimTimelineWidget()
|
|
: SNullWidget::NullWidget;
|
|
|
|
TSharedPtr<SVerticalBox> RootBox;
|
|
ChildSlot
|
|
[
|
|
SAssignNew(RootBox, SVerticalBox)
|
|
+ SVerticalBox::Slot()
|
|
.FillHeight(1.0f)
|
|
[
|
|
SNew(SOverlay)
|
|
+ SOverlay::Slot()
|
|
[
|
|
SAssignNew(NonScrollEditorPanels, SVerticalBox)
|
|
]
|
|
+ SOverlay::Slot()
|
|
[
|
|
TimelineWidget
|
|
]
|
|
]
|
|
];
|
|
|
|
if (InArgs._DisplayAnimScrubBar)
|
|
{
|
|
RootBox->AddSlot()
|
|
.AutoHeight()
|
|
[
|
|
ConstructAnimScrubPanel(InArgs._DisplayAnimScrubBarEditing)
|
|
];
|
|
}
|
|
}
|
|
|
|
void SAnimEditorBase::SetInputViewRange(float InViewMinInput, float InViewMaxInput)
|
|
{
|
|
ViewMaxInput = FMath::Min(InViewMaxInput, GetSequenceLength());
|
|
ViewMinInput = FMath::Max(InViewMinInput, 0.0f);
|
|
}
|
|
|
|
float SAnimEditorBase::GetScrubValue() const
|
|
{
|
|
if (PreviewScenePtr.IsValid())
|
|
{
|
|
if (UDebugSkelMeshComponent* PreviewMesh = PreviewScenePtr.Pin()->GetPreviewMeshComponent())
|
|
{
|
|
if (PreviewMesh->PreviewInstance)
|
|
{
|
|
return PreviewMesh->PreviewInstance->GetCurrentTime();
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0.0f;
|
|
}
|
|
|
|
void SAnimEditorBase::OnSelectionChanged(const TArray<UObject*>& SelectedItems)
|
|
{
|
|
OnObjectsSelectedDelegate.ExecuteIfBound(SelectedItems);
|
|
}
|
|
|
|
TSharedRef<SWidget> SAnimEditorBase::CreateDocumentAnchor()
|
|
{
|
|
return SNullWidget::NullWidget;
|
|
}
|
|
|
|
TSharedRef<SWidget> SAnimEditorBase::ConstructAnimScrubPanel(bool bDisplayAnimScrubBarEditing)
|
|
{
|
|
return SNullWidget::NullWidget;
|
|
}
|
|
|
|
float SAnimEditorBase::GetSequenceLength() const
|
|
{
|
|
if (const UAnimSequenceBase* AnimSequence = Cast<UAnimSequenceBase>(GetEditorObject()))
|
|
{
|
|
return AnimSequence->GetPlayLength();
|
|
}
|
|
|
|
if (const UBlendSpace* BlendSpace = Cast<UBlendSpace>(GetEditorObject()))
|
|
{
|
|
return 1.0f;
|
|
}
|
|
|
|
return 0.0f;
|
|
}
|