// 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& InPreviewScene) { PreviewScenePtr = InPreviewScene; OnObjectsSelectedDelegate = InArgs._OnObjectsSelected; SetInputViewRange(0.0f, GetSequenceLength()); const TSharedRef TimelineWidget = InArgs._DisplayAnimTimeline ? CreateAnimTimelineWidget() : SNullWidget::NullWidget; TSharedPtr 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& SelectedItems) { OnObjectsSelectedDelegate.ExecuteIfBound(SelectedItems); } TSharedRef SAnimEditorBase::CreateDocumentAnchor() { return SNullWidget::NullWidget; } TSharedRef SAnimEditorBase::ConstructAnimScrubPanel(bool bDisplayAnimScrubBarEditing) { return SNullWidget::NullWidget; } float SAnimEditorBase::GetSequenceLength() const { if (const UAnimSequenceBase* AnimSequence = Cast(GetEditorObject())) { return AnimSequence->GetPlayLength(); } if (const UBlendSpace* BlendSpace = Cast(GetEditorObject())) { return 1.0f; } return 0.0f; }