2014-12-07 19:09:38 -05:00
|
|
|
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
2014-03-14 14:13:41 -04:00
|
|
|
|
|
|
|
|
#include "AnimGraphPrivatePCH.h"
|
2014-04-24 14:34:01 -04:00
|
|
|
#include "AnimationGraphSchema.h"
|
|
|
|
|
#include "AnimGraphNode_BlendSpaceBase.h"
|
|
|
|
|
#include "AnimGraphNode_BlendSpacePlayer.h"
|
|
|
|
|
#include "AnimGraphNode_RotationOffsetBlendSpace.h"
|
2014-03-14 14:13:41 -04:00
|
|
|
#include "GraphEditorActions.h"
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
// Action to add a sequence player node to the graph
|
|
|
|
|
struct FNewBlendSpacePlayerAction : public FEdGraphSchemaAction_K2NewNode
|
|
|
|
|
{
|
|
|
|
|
FNewBlendSpacePlayerAction(class UBlendSpaceBase* BlendSpace)
|
|
|
|
|
{
|
|
|
|
|
check(BlendSpace);
|
|
|
|
|
|
|
|
|
|
const bool bIsAimOffset = BlendSpace->IsA(UAimOffsetBlendSpace::StaticClass()) || BlendSpace->IsA(UAimOffsetBlendSpace1D::StaticClass());
|
|
|
|
|
if (bIsAimOffset)
|
|
|
|
|
{
|
|
|
|
|
UAnimGraphNode_RotationOffsetBlendSpace* Template = NewObject<UAnimGraphNode_RotationOffsetBlendSpace>();
|
|
|
|
|
Template->Node.BlendSpace = BlendSpace;
|
|
|
|
|
NodeTemplate = Template;
|
|
|
|
|
TooltipDescription = TEXT("Evaluates an aim offset at a particular coordinate to produce a pose");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
UAnimGraphNode_BlendSpacePlayer* Template = NewObject<UAnimGraphNode_BlendSpacePlayer>();
|
|
|
|
|
Template->Node.BlendSpace = BlendSpace;
|
|
|
|
|
NodeTemplate = Template;
|
|
|
|
|
TooltipDescription = TEXT("Evaluates a blend space at a particular coordinate to produce a pose");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MenuDescription = NodeTemplate->GetNodeTitle(ENodeTitleType::ListView);
|
|
|
|
|
|
|
|
|
|
Category = TEXT("Animations");
|
|
|
|
|
|
|
|
|
|
// Grab extra keywords
|
2015-04-20 12:25:37 -04:00
|
|
|
Keywords = FText::FromString(BlendSpace->GetPathName());
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
// UAnimGraphNode_BlendSpaceBase
|
|
|
|
|
|
2014-10-14 10:29:11 -04:00
|
|
|
UAnimGraphNode_BlendSpaceBase::UAnimGraphNode_BlendSpaceBase(const FObjectInitializer& ObjectInitializer)
|
|
|
|
|
: Super(ObjectInitializer)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FLinearColor UAnimGraphNode_BlendSpaceBase::GetNodeTitleColor() const
|
|
|
|
|
{
|
|
|
|
|
return FLinearColor(0.2f, 0.8f, 0.2f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UAnimGraphNode_BlendSpaceBase::CustomizePinData(UEdGraphPin* Pin, FName SourcePropertyName, int32 ArrayIndex) const
|
|
|
|
|
{
|
|
|
|
|
UBlendSpaceBase * BlendSpace = GetBlendSpace();
|
|
|
|
|
|
|
|
|
|
if (BlendSpace != NULL)
|
|
|
|
|
{
|
|
|
|
|
if (SourcePropertyName == TEXT("X"))
|
|
|
|
|
{
|
2014-04-23 18:30:37 -04:00
|
|
|
Pin->PinFriendlyName = FText::FromString(BlendSpace->GetBlendParameter(0).DisplayName);
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
else if (SourcePropertyName == TEXT("Y"))
|
|
|
|
|
{
|
2014-04-23 18:30:37 -04:00
|
|
|
Pin->PinFriendlyName = FText::FromString(BlendSpace->GetBlendParameter(1).DisplayName);
|
2014-03-14 14:13:41 -04:00
|
|
|
Pin->bHidden = (BlendSpace->NumOfDimension == 1) ? 1 : 0;
|
|
|
|
|
}
|
|
|
|
|
else if (SourcePropertyName == TEXT("Z"))
|
|
|
|
|
{
|
2014-04-23 18:30:37 -04:00
|
|
|
Pin->PinFriendlyName = FText::FromString(BlendSpace->GetBlendParameter(2).DisplayName);
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UAnimGraphNode_BlendSpaceBase::PreloadRequiredAssets()
|
|
|
|
|
{
|
|
|
|
|
PreloadObject(GetBlendSpace());
|
|
|
|
|
|
|
|
|
|
Super::PreloadRequiredAssets();
|
2014-07-23 23:32:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UAnimGraphNode_BlendSpaceBase::PostProcessPinName(const UEdGraphPin* Pin, FString& DisplayName) const
|
|
|
|
|
{
|
|
|
|
|
if(Pin->Direction == EGPD_Input)
|
|
|
|
|
{
|
|
|
|
|
UBlendSpaceBase * BlendSpace = GetBlendSpace();
|
|
|
|
|
|
|
|
|
|
if(BlendSpace != NULL)
|
|
|
|
|
{
|
|
|
|
|
if(Pin->PinName == TEXT("X"))
|
|
|
|
|
{
|
|
|
|
|
DisplayName = BlendSpace->GetBlendParameter(0).DisplayName;
|
|
|
|
|
}
|
|
|
|
|
else if(Pin->PinName == TEXT("Y"))
|
|
|
|
|
{
|
|
|
|
|
DisplayName = BlendSpace->GetBlendParameter(1).DisplayName;
|
|
|
|
|
}
|
|
|
|
|
else if(Pin->PinName == TEXT("Z"))
|
|
|
|
|
{
|
|
|
|
|
DisplayName = BlendSpace->GetBlendParameter(2).DisplayName;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Super::PostProcessPinName(Pin, DisplayName);
|
|
|
|
|
}
|