Files
UnrealEngine/Engine/Source/Editor/AnimGraph/Private/AnimGraphNode_Fabrik.cpp
2025-05-18 13:04:45 +08:00

71 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "AnimGraphNode_Fabrik.h"
#include "Animation/AnimInstance.h"
#include "AnimNodeEditModes.h"
#include "AnimationCustomVersion.h"
#include "Components/SkeletalMeshComponent.h"
/////////////////////////////////////////////////////
// UAnimGraphNode_Fabrik
#define LOCTEXT_NAMESPACE "AnimGraphNode_Fabrik"
UAnimGraphNode_Fabrik::UAnimGraphNode_Fabrik(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
FText UAnimGraphNode_Fabrik::GetControllerDescription() const
{
return LOCTEXT("Fabrik", "FABRIK");
}
void UAnimGraphNode_Fabrik::Draw(FPrimitiveDrawInterface* PDI, USkeletalMeshComponent * PreviewSkelMeshComp) const
{
if(PreviewSkelMeshComp)
{
if(FAnimNode_Fabrik* ActiveNode = GetActiveInstanceNode<FAnimNode_Fabrik>(PreviewSkelMeshComp->GetAnimInstance()))
{
ActiveNode->ConditionalDebugDraw(PDI, PreviewSkelMeshComp);
}
}
}
FText UAnimGraphNode_Fabrik::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
return GetControllerDescription();
}
void UAnimGraphNode_Fabrik::CopyNodeDataToPreviewNode(FAnimNode_Base* InPreviewNode)
{
FAnimNode_Fabrik* Fabrik = static_cast<FAnimNode_Fabrik*>(InPreviewNode);
// copies Pin values from the internal node to get data which are not compiled yet
Fabrik->EffectorTransform = Node.EffectorTransform;
}
FEditorModeID UAnimGraphNode_Fabrik::GetEditorMode() const
{
return AnimNodeEditModes::Fabrik;
}
void UAnimGraphNode_Fabrik::Serialize(FArchive& Ar)
{
Super::Serialize(Ar);
Ar.UsingCustomVersion(FAnimationCustomVersion::GUID);
const int32 CustomAnimVersion = Ar.CustomVer(FAnimationCustomVersion::GUID);
if (CustomAnimVersion < FAnimationCustomVersion::ConvertIKToSupportBoneSocketTarget)
{
if (Node.EffectorTransformBone_DEPRECATED.BoneName != NAME_None)
{
Node.EffectorTarget = FBoneSocketTarget(Node.EffectorTransformBone_DEPRECATED.BoneName);
}
}
}
#undef LOCTEXT_NAMESPACE