Files
UnrealEngineUWP/Engine/Source/Editor/AnimGraph/Private/AnimGraphNode_RotationOffsetBlendSpaceGraph.cpp
Thomas Sarkanen d411e1b010 Fixed unloaded assets in asset players not showing up in anim BP context menus
Unified the approach to gathering assets and spawning nodes from them. Previously each had its own slightly unique code doing similar things.
Note that with this change it is now possible to directly spawn 'evaluator' style nodes from the context menu instead of relying on a context menu conversion step.
Also tweaked icons, tooltips and titles for consistency

#rb Jurre.deBaare

[CL 16434364 by Thomas Sarkanen in ue5-main branch]
2021-05-24 06:45:16 -04:00

111 lines
3.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "AnimGraphNode_RotationOffsetBlendSpaceGraph.h"
#include "BlueprintNodeSpawner.h"
#include "BlueprintActionDatabaseRegistrar.h"
#include "Animation/AimOffsetBlendSpace.h"
#include "Animation/AimOffsetBlendSpace1D.h"
#include "AnimGraphNodeAlphaOptions.h"
#include "AnimGraphNode_AssetPlayerBase.h"
#include "DetailLayoutBuilder.h"
#include "AssetRegistry/AssetRegistryModule.h"
#define LOCTEXT_NAMESPACE "UAnimGraphNode_RotationOffsetBlendSpaceGraph"
FText UAnimGraphNode_RotationOffsetBlendSpaceGraph::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
if(BlendSpaceGraph || BlendSpace)
{
const FText BlendSpaceName = FText::FromString(BlendSpaceGraph ? GetBlendSpaceGraphName() : GetBlendSpaceName());
if(TitleType == ENodeTitleType::EditableTitle)
{
return BlendSpaceName;
}
else if (TitleType == ENodeTitleType::ListView || TitleType == ENodeTitleType::MenuTitle)
{
FFormatNamedArguments Args;
Args.Add(TEXT("BlendSpaceName"), BlendSpaceName);
return FText::Format(LOCTEXT("AimOffsetListTitle", "AimOffset '{BlendSpaceName}'"), Args);
}
else
{
FFormatNamedArguments TitleArgs;
TitleArgs.Add(TEXT("BlendSpaceName"), BlendSpaceName);
FText Title = FText::Format(LOCTEXT("AimOffsetFullTitle", "{BlendSpaceName}\nAimOffset"), TitleArgs);
if ((TitleType == ENodeTitleType::FullTitle) && (Node.GetGroupName() != NAME_None))
{
FFormatNamedArguments Args;
Args.Add(TEXT("Title"), Title);
Args.Add(TEXT("SyncGroupName"), FText::FromName(Node.GetGroupName()));
Title = FText::Format(LOCTEXT("AimOffsetNodeGroupSubtitle", "{Title}\nSync group {SyncGroupName}"), Args);
}
return Title;
}
}
else if(BlendSpaceClass.Get())
{
return BlendSpaceClass.Get()->GetDisplayNameText();
}
else
{
// Template node, so use the tooltip generated in GetMenuActions
return FText::GetEmpty();
}
}
void UAnimGraphNode_RotationOffsetBlendSpaceGraph::GetMenuActions(FBlueprintActionDatabaseRegistrar& InActionRegistrar) const
{
UAnimGraphNode_AssetPlayerBase::GetMenuActionsHelper(
InActionRegistrar,
GetClass(),
{ UAimOffsetBlendSpace::StaticClass(), UAimOffsetBlendSpace1D::StaticClass() },
{ },
[](const FAssetData& InAssetData)
{
return FText::Format(LOCTEXT("MenuDescFormat", "AimOffset '{0}'"), FText::FromName(InAssetData.AssetName));
},
[](const FAssetData& InAssetData)
{
return FText::Format(LOCTEXT("MenuDescTooltipFormat", "AimOffset\n'{0}'"), FText::FromName(InAssetData.ObjectPath));
},
[](UEdGraphNode* InNewNode, bool bInIsTemplateNode, const FAssetData InAssetData)
{
UAnimGraphNode_RotationOffsetBlendSpaceGraph* GraphNode = CastChecked<UAnimGraphNode_RotationOffsetBlendSpaceGraph>(InNewNode);
GraphNode->SetupFromAsset(InAssetData, bInIsTemplateNode);
});
}
void UAnimGraphNode_RotationOffsetBlendSpaceGraph::BakeDataDuringCompilation(FCompilerResultsLog& MessageLog)
{
UAnimBlueprint* AnimBlueprint = GetAnimBlueprint();
AnimBlueprint->FindOrAddGroup(Node.GetGroupName());
}
void UAnimGraphNode_RotationOffsetBlendSpaceGraph::CustomizePinData(UEdGraphPin* Pin, FName SourcePropertyName, int32 ArrayIndex) const
{
Super::CustomizePinData(Pin, SourcePropertyName, ArrayIndex);
FAnimGraphNodeAlphaOptions::HandleCustomizePinData(Node, Pin);
}
void UAnimGraphNode_RotationOffsetBlendSpaceGraph::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
FAnimGraphNodeAlphaOptions::HandlePostEditChangeProperty(Node, this, PropertyChangedEvent);
Super::PostEditChangeProperty(PropertyChangedEvent);
}
void UAnimGraphNode_RotationOffsetBlendSpaceGraph::CustomizeDetails(IDetailLayoutBuilder& InDetailBuilder)
{
Super::CustomizeDetails(InDetailBuilder);
TSharedRef<IPropertyHandle> NodeHandle = InDetailBuilder.GetProperty(TEXT("Node"), GetClass());
FAnimGraphNodeAlphaOptions::HandleCustomizeDetails(Node, NodeHandle, InDetailBuilder);
}
#undef LOCTEXT_NAMESPACE