Files
UnrealEngineUWP/Engine/Source/Editor/AnimGraph/Private/AnimGraphNode_TwoWayBlend.cpp
Thomas Sarkanen 8ba3c4c087 Merging //UE4/Dev-Main to Dev-Anim (//UE4/Dev-Anim) @ CL 4643671
#rb none
#jira none

[CL 4665410 by Thomas Sarkanen in Dev-Anim branch]
2018-12-17 06:31:16 -05:00

161 lines
5.6 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "AnimGraphNode_TwoWayBlend.h"
#include "DetailLayoutBuilder.h"
#include "ScopedTransaction.h"
#include "Kismet2/BlueprintEditorUtils.h"
/////////////////////////////////////////////////////
// UAnimGraphNode_TwoWayBlend
#define LOCTEXT_NAMESPACE "AnimGraphNode_TwoWayBlend"
UAnimGraphNode_TwoWayBlend::UAnimGraphNode_TwoWayBlend(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
FString UAnimGraphNode_TwoWayBlend::GetNodeCategory() const
{
return TEXT("Blends");
}
FLinearColor UAnimGraphNode_TwoWayBlend::GetNodeTitleColor() const
{
return FLinearColor(0.75f, 0.75f, 0.75f);
}
FText UAnimGraphNode_TwoWayBlend::GetTooltipText() const
{
return LOCTEXT("TwoWayBlendTooltip", "Blend two poses together");
}
FText UAnimGraphNode_TwoWayBlend::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
return LOCTEXT("Blend", "Blend");
}
void UAnimGraphNode_TwoWayBlend::CustomizePinData(UEdGraphPin* Pin, FName SourcePropertyName, int32 ArrayIndex) const
{
Super::CustomizePinData(Pin, SourcePropertyName, ArrayIndex);
if (Pin->PinName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, Alpha))
{
Pin->bHidden = (BlendNode.AlphaInputType != EAnimAlphaInputType::Float);
if (!Pin->bHidden)
{
Pin->PinFriendlyName = BlendNode.AlphaScaleBias.GetFriendlyName(BlendNode.AlphaScaleBiasClamp.GetFriendlyName(Pin->PinFriendlyName));
}
}
if (Pin->PinName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, bAlphaBoolEnabled))
{
Pin->bHidden = (BlendNode.AlphaInputType != EAnimAlphaInputType::Bool);
}
if (Pin->PinName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, AlphaCurveName))
{
Pin->bHidden = (BlendNode.AlphaInputType != EAnimAlphaInputType::Curve);
if (!Pin->bHidden)
{
Pin->PinFriendlyName = BlendNode.AlphaScaleBiasClamp.GetFriendlyName(Pin->PinFriendlyName);
}
}
}
void UAnimGraphNode_TwoWayBlend::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent)
{
const FName PropertyName = (PropertyChangedEvent.Property ? PropertyChangedEvent.Property->GetFName() : NAME_None);
// Reconstruct node to show updates to PinFriendlyNames.
if ((PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, AlphaScaleBias))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, bMapRange))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputRange, Min))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputRange, Max))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, Scale))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, Bias))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, bClampResult))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, ClampMin))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, ClampMax))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, bInterpResult))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, InterpSpeedIncreasing))
|| (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FInputScaleBiasClamp, InterpSpeedDecreasing)))
{
ReconstructNode();
}
if (PropertyName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, AlphaInputType))
{
FScopedTransaction Transaction(LOCTEXT("ChangeAlphaInputType", "Change Alpha Input Type"));
Modify();
// Break links to pins going away
for (int32 PinIndex = 0; PinIndex < Pins.Num(); ++PinIndex)
{
UEdGraphPin* Pin = Pins[PinIndex];
if (Pin->PinName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, Alpha))
{
if (BlendNode.AlphaInputType != EAnimAlphaInputType::Float)
{
Pin->BreakAllPinLinks();
}
}
else if (Pin->PinName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, bAlphaBoolEnabled))
{
if (BlendNode.AlphaInputType != EAnimAlphaInputType::Bool)
{
Pin->BreakAllPinLinks();
}
}
else if (Pin->PinName == GET_MEMBER_NAME_STRING_CHECKED(FAnimNode_TwoWayBlend, AlphaCurveName))
{
if (BlendNode.AlphaInputType != EAnimAlphaInputType::Curve)
{
Pin->BreakAllPinLinks();
}
}
}
ReconstructNode();
FBlueprintEditorUtils::MarkBlueprintAsStructurallyModified(GetBlueprint());
}
Super::PostEditChangeProperty(PropertyChangedEvent);
}
void UAnimGraphNode_TwoWayBlend::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
Super::CustomizeDetails(DetailBuilder);
TSharedRef<IPropertyHandle> NodeHandle = DetailBuilder.GetProperty(FName(TEXT("BlendNode")), GetClass());
if (BlendNode.AlphaInputType != EAnimAlphaInputType::Bool)
{
DetailBuilder.HideProperty(NodeHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FAnimNode_TwoWayBlend, bAlphaBoolEnabled)));
DetailBuilder.HideProperty(NodeHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FAnimNode_TwoWayBlend, AlphaBoolBlend)));
}
if (BlendNode.AlphaInputType != EAnimAlphaInputType::Float)
{
DetailBuilder.HideProperty(NodeHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FAnimNode_TwoWayBlend, Alpha)));
DetailBuilder.HideProperty(NodeHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FAnimNode_TwoWayBlend, AlphaScaleBias)));
}
if (BlendNode.AlphaInputType != EAnimAlphaInputType::Curve)
{
DetailBuilder.HideProperty(NodeHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FAnimNode_TwoWayBlend, AlphaCurveName)));
}
if ((BlendNode.AlphaInputType != EAnimAlphaInputType::Float)
&& (BlendNode.AlphaInputType != EAnimAlphaInputType::Curve))
{
DetailBuilder.HideProperty(NodeHandle->GetChildHandle(GET_MEMBER_NAME_CHECKED(FAnimNode_TwoWayBlend, AlphaScaleBiasClamp)));
}
}
#undef LOCTEXT_NAMESPACE