2014-12-07 19:09:38 -05:00
|
|
|
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
2014-04-23 18:11:05 -04:00
|
|
|
|
|
|
|
|
#include "AnimGraphPrivatePCH.h"
|
2014-04-24 08:49:31 -04:00
|
|
|
#include "AnimGraphNode_Fabrik.h"
|
2014-04-23 18:11:05 -04:00
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
// UAnimGraphNode_Fabrik
|
|
|
|
|
|
2014-04-23 18:30:37 -04:00
|
|
|
#define LOCTEXT_NAMESPACE "A3Nodes"
|
|
|
|
|
|
2014-10-14 10:29:11 -04:00
|
|
|
UAnimGraphNode_Fabrik::UAnimGraphNode_Fabrik(const FObjectInitializer& ObjectInitializer)
|
|
|
|
|
: Super(ObjectInitializer)
|
2014-04-23 18:11:05 -04:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-23 18:30:37 -04:00
|
|
|
FText UAnimGraphNode_Fabrik::GetControllerDescription() const
|
2014-04-23 18:11:05 -04:00
|
|
|
{
|
2014-04-23 18:30:37 -04:00
|
|
|
return LOCTEXT("Fabrik", "FABRIK");
|
2014-04-23 18:11:05 -04:00
|
|
|
}
|
|
|
|
|
|
2014-04-23 18:30:37 -04:00
|
|
|
FText UAnimGraphNode_Fabrik::GetNodeTitle(ENodeTitleType::Type TitleType) const
|
2014-04-23 18:11:05 -04:00
|
|
|
{
|
2014-04-23 18:30:37 -04:00
|
|
|
return GetControllerDescription();
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-14 05:00:37 -05:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-14 10:55:42 -05:00
|
|
|
int32 UAnimGraphNode_Fabrik::GetWidgetMode(const USkeletalMeshComponent* SkelComp)
|
2014-11-14 05:00:37 -05:00
|
|
|
{
|
|
|
|
|
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)
|
|
|
|
|
{
|
2015-03-31 20:12:31 -04:00
|
|
|
FVector Offset = ConvertCSVectorToBoneSpace(SkelComp, Drag, Fabrik->ForwardedPose, Node.EffectorTransformBone.BoneName, Node.EffectorTransformSpace);
|
|
|
|
|
|
2014-11-14 05:00:37 -05:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-23 18:30:37 -04:00
|
|
|
#undef LOCTEXT_NAMESPACE
|