Files
UnrealEngineUWP/Engine/Source/Editor/AnimGraph/Public/AnimGraphAttributes.h
Jurre deBaare d498271275 UStruct property default initializations
//UE5/Main - UE.EditorAutomation(RunTest=Editor) Win64 - Uninitialized script struct members found AnimGraphAttributes.h and other anim files
#jira UE-110793

//UE5/Main - UE.EditorAutomation(RunTest=Editor) Win64 - Uninitialized script struct members found DataSourceFiltering.h
#jira UE-110804

Fix BlendSpace errors in ShooterGame
#jira UE-111352

#rb Thomas.Sarkanen

[CL 15758350 by Jurre deBaare in ue5-main branch]
2021-03-22 07:53:36 -04:00

110 lines
3.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Styling/SlateBrush.h"
#include "Styling/SlateColor.h"
#include "AnimGraphAttributes.generated.h"
UENUM()
enum class EAnimGraphAttributesDisplayMode
{
// Always hide on pins
HideOnPins,
// Always show on pins
ShowOnPins,
// Automatically calculate visibility based on graph connectivity/usage
Automatic
};
UENUM()
enum class EAnimGraphAttributeBlend
{
// Attribute is subject to weighted blends as it flows through the graph
Blendable,
// Attribute is not blended. Corresponds to messaging between two nodes that are not necessarily directly connected.
NonBlendable,
};
// Description of an attribute
USTRUCT()
struct FAnimGraphAttributeDesc
{
GENERATED_BODY()
FAnimGraphAttributeDesc() = default;
FAnimGraphAttributeDesc(FName InName, EAnimGraphAttributeBlend InBlend, FSlateBrush InIcon = FSlateBrush(), FText InDisplayName = FText(), FText InToolTipText = FText(), FSlateColor InColor = FSlateColor::UseSubduedForeground(), EAnimGraphAttributesDisplayMode InDisplayMode = EAnimGraphAttributesDisplayMode::Automatic, int32 InSortOrder = INDEX_NONE)
: Name(InName)
, Icon(InIcon)
, DisplayName(InDisplayName.IsEmpty() ? FText::FromName(InName) : InDisplayName)
, ToolTipText(InToolTipText.IsEmpty() ? FText::FromName(InName) : InToolTipText)
, Color(InColor)
, DisplayMode(InDisplayMode)
, Blend(InBlend)
, SortOrder(InSortOrder)
{
}
UPROPERTY(config)
FName Name;
UPROPERTY(config)
FSlateBrush Icon;
UPROPERTY(config)
FText DisplayName;
UPROPERTY(config)
FText ToolTipText;
UPROPERTY(config)
FSlateColor Color;
// How the attribute is displayed in the graph. This overrides any settings per node type.
UPROPERTY(config)
EAnimGraphAttributesDisplayMode DisplayMode = EAnimGraphAttributesDisplayMode::Automatic;
// Blendability of the attribute
UPROPERTY(config)
EAnimGraphAttributeBlend Blend = EAnimGraphAttributeBlend::Blendable;
// How to sort the attribute
UPROPERTY(config)
int32 SortOrder = INDEX_NONE;
};
UCLASS(Config = EditorPerProjectUserSettings)
class ANIMGRAPH_API UAnimGraphAttributes : public UObject
{
GENERATED_BODY()
public:
// Register an anim graph attribute
void Register(const FAnimGraphAttributeDesc& InDesc);
// Get a previously registered attribute desc
// @param InName The name of a previously registered attribute
// @return nullptr if no desc is registered with the specified name
const FAnimGraphAttributeDesc* FindAttributeDesc(FName InName) const;
// Iterate over all attributes that are registered
// @param InFunction FUnction receiving the various attribute descriptors
void ForEachAttribute(TFunctionRef<void(const FAnimGraphAttributeDesc&)> InFunction) const;
private:
// UObject interface
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
private:
// All attributes
UPROPERTY(config)
TArray<FAnimGraphAttributeDesc> Attributes;
// Cached attribute index map for faster lookup
TMap<FName, int32> AttributesMap;
};