2019-12-26 15:33:43 -05:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
2016-09-22 15:33:34 -04:00
|
|
|
|
2016-11-23 15:48:37 -05:00
|
|
|
#include "EditModes/ObserveBoneEditMode.h"
|
2016-09-22 15:33:34 -04:00
|
|
|
#include "AnimGraphNode_ObserveBone.h"
|
|
|
|
|
#include "IPersonaPreviewScene.h"
|
2016-11-23 15:48:37 -05:00
|
|
|
#include "Animation/DebugSkelMeshComponent.h"
|
2016-09-22 15:33:34 -04:00
|
|
|
|
|
|
|
|
void FObserveBoneEditMode::EnterMode(class UAnimGraphNode_Base* InEditorNode, struct FAnimNode_Base* InRuntimeNode)
|
|
|
|
|
{
|
|
|
|
|
RuntimeNode = static_cast<FAnimNode_ObserveBone*>(InRuntimeNode);
|
|
|
|
|
GraphNode = CastChecked<UAnimGraphNode_ObserveBone>(InEditorNode);
|
|
|
|
|
|
|
|
|
|
FAnimNodeEditMode::EnterMode(InEditorNode, InRuntimeNode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FObserveBoneEditMode::ExitMode()
|
|
|
|
|
{
|
|
|
|
|
RuntimeNode = nullptr;
|
|
|
|
|
GraphNode = nullptr;
|
|
|
|
|
|
|
|
|
|
FAnimNodeEditMode::ExitMode();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ECoordSystem FObserveBoneEditMode::GetWidgetCoordinateSystem() const
|
|
|
|
|
{
|
|
|
|
|
switch (GraphNode->Node.DisplaySpace)
|
|
|
|
|
{
|
|
|
|
|
default:
|
|
|
|
|
case BCS_ParentBoneSpace:
|
|
|
|
|
//@TODO: No good way of handling this one
|
|
|
|
|
return COORD_World;
|
|
|
|
|
case BCS_BoneSpace:
|
|
|
|
|
return COORD_Local;
|
|
|
|
|
case BCS_ComponentSpace:
|
|
|
|
|
case BCS_WorldSpace:
|
|
|
|
|
return COORD_World;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FVector FObserveBoneEditMode::GetWidgetLocation() const
|
|
|
|
|
{
|
|
|
|
|
USkeletalMeshComponent* SkelComp = GetAnimPreviewScene().GetPreviewMeshComponent();
|
2020-11-25 11:17:08 -04:00
|
|
|
USkeleton* Skeleton = SkelComp->SkeletalMesh->GetSkeleton();
|
2016-09-22 15:33:34 -04:00
|
|
|
FVector WidgetLoc = FVector::ZeroVector;
|
|
|
|
|
|
|
|
|
|
int32 MeshBoneIndex = SkelComp->GetBoneIndex(GraphNode->Node.BoneToObserve.BoneName);
|
|
|
|
|
|
|
|
|
|
if (MeshBoneIndex != INDEX_NONE)
|
|
|
|
|
{
|
|
|
|
|
const FTransform BoneTM = SkelComp->GetBoneTransform(MeshBoneIndex);
|
|
|
|
|
WidgetLoc = BoneTM.GetLocation();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return WidgetLoc;
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-07 20:36:09 -04:00
|
|
|
UE::Widget::EWidgetMode FObserveBoneEditMode::GetWidgetMode() const
|
2016-09-22 15:33:34 -04:00
|
|
|
{
|
2020-09-07 20:36:09 -04:00
|
|
|
return UE::Widget::WM_Translate;
|
2016-09-22 15:33:34 -04:00
|
|
|
}
|
|
|
|
|
|
2021-12-15 12:17:40 -05:00
|
|
|
bool FObserveBoneEditMode::UsesTransformWidget(UE::Widget::EWidgetMode InWidgetMode) const
|
|
|
|
|
{
|
|
|
|
|
return InWidgetMode == UE::Widget::WM_Translate;
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-22 15:33:34 -04:00
|
|
|
FName FObserveBoneEditMode::GetSelectedBone() const
|
|
|
|
|
{
|
|
|
|
|
return GraphNode->Node.BoneToObserve.BoneName;
|
2016-11-23 15:48:37 -05:00
|
|
|
}
|