Files
UnrealEngineUWP/Engine/Source/Editor/AnimGraph/Private/EditModes/ObserveBoneEditMode.cpp
Alexis Matte 73d83c6a38 To protect the skeletalmesh when using async operations like build or re-import we deprecate all public member variables of USkeletalMesh class and create the necessary getter and setter. Those member will stay public but will be move to private in a future release.
Adding a public member to USkeletalMesh class is now prohibed since it can break asynchronous operations that will be added next to this submit.

#rb danny.couture
#jira UEENT-3936
#rnx

[CL 14812920 by Alexis Matte in ue5-main branch]
2020-11-25 11:17:08 -04:00

66 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "EditModes/ObserveBoneEditMode.h"
#include "AnimGraphNode_ObserveBone.h"
#include "IPersonaPreviewScene.h"
#include "Animation/DebugSkelMeshComponent.h"
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();
USkeleton* Skeleton = SkelComp->SkeletalMesh->GetSkeleton();
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;
}
UE::Widget::EWidgetMode FObserveBoneEditMode::GetWidgetMode() const
{
return UE::Widget::WM_Translate;
}
FName FObserveBoneEditMode::GetSelectedBone() const
{
return GraphNode->Node.BoneToObserve.BoneName;
}