Files
UnrealEngineUWP/Engine/Source/Editor/AnimGraph/Private/AnimGraphNode_Fabrik.cpp
Matthew Griffin bb70b349ce Merging CL 2804086 from //UE4/Release-4.11 to Dev-Main (//UE4/Dev-Main) to isolate copyright update
#lockdown Nick.Penwarden

[CL 2819020 by Matthew Griffin in Main branch]
2016-01-07 08:17:16 -05:00

82 lines
2.5 KiB
C++

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#include "AnimGraphPrivatePCH.h"
#include "AnimGraphNode_Fabrik.h"
/////////////////////////////////////////////////////
// UAnimGraphNode_Fabrik
#define LOCTEXT_NAMESPACE "A3Nodes"
UAnimGraphNode_Fabrik::UAnimGraphNode_Fabrik(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
FText UAnimGraphNode_Fabrik::GetControllerDescription() const
{
return LOCTEXT("Fabrik", "FABRIK");
}
FText UAnimGraphNode_Fabrik::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
return GetControllerDescription();
}
FVector UAnimGraphNode_Fabrik::GetWidgetLocation(const USkeletalMeshComponent* SkelComp, FAnimNode_SkeletalControlBase* AnimNode)
{
FName& BoneName = Node.EffectorTransformBone.BoneName;
FVector Location = Node.EffectorTransform.GetLocation();
EBoneControlSpace Space = Node.EffectorTransformSpace;
FVector WidgetLoc = ConvertWidgetLocation(SkelComp, AnimNode->ForwardedPose, BoneName, Location, Space);
return WidgetLoc;
}
int32 UAnimGraphNode_Fabrik::GetWidgetMode(const USkeletalMeshComponent* SkelComp)
{
uint32 BoneIndex = SkelComp->GetBoneIndex(Node.EffectorTransformBone.BoneName);
if (BoneIndex != INDEX_NONE)
{
return FWidget::WM_Translate;
}
return FWidget::WM_None;
}
FName UAnimGraphNode_Fabrik::FindSelectedBone()
{
return Node.EffectorTransformBone.BoneName;
}
void UAnimGraphNode_Fabrik::DoTranslation(const USkeletalMeshComponent* SkelComp, FVector& Drag, FAnimNode_Base* InOutAnimNode)
{
FAnimNode_Fabrik* Fabrik = static_cast<FAnimNode_Fabrik*>(InOutAnimNode);
if (Fabrik)
{
FVector Offset = ConvertCSVectorToBoneSpace(SkelComp, Drag, Fabrik->ForwardedPose, Node.EffectorTransformBone.BoneName, Node.EffectorTransformSpace);
Fabrik->EffectorTransform.AddToTranslation(Offset);
// copy same value to internal node for data consistency
Node.EffectorTransform.SetTranslation(Fabrik->EffectorTransform.GetTranslation());
}
}
void UAnimGraphNode_Fabrik::CopyNodeDataTo(FAnimNode_Base* AnimNode)
{
FAnimNode_Fabrik* Fabrik = static_cast<FAnimNode_Fabrik*>(AnimNode);
// copies Pin values from the internal node to get data which are not compiled yet
Fabrik->EffectorTransform = Node.EffectorTransform;
}
void UAnimGraphNode_Fabrik::CopyNodeDataFrom(const FAnimNode_Base* InNewAnimNode)
{
const FAnimNode_Fabrik* Fabrik = static_cast<const FAnimNode_Fabrik*>(InNewAnimNode);
// copies Pin data from updated values
Node.EffectorTransform = Fabrik->EffectorTransform;
}
#undef LOCTEXT_NAMESPACE