UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AttributeCurve.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "Curves/KeyHandle.h"
10
13
14#include "AttributeCurve.generated.h"
15
16namespace UE { namespace Anim { class IAttributeBlendOperator; struct Attributes; } }
17namespace UE::UAF { class FDecompressionTools; }
18
20
21USTRUCT()
23{
25public:
26
27 FAttributeKey(float InTime = 0.f) : Time(InTime) {}
28
30 UPROPERTY(EditAnywhere, Category = Key)
32
33 template<typename AttributeType>
34 const AttributeType& GetValue() const
35 {
36 return Value.GetRef<AttributeType>();
37 }
38
39 template<typename AttributeType>
40 const AttributeType* GetValuePtr() const
41 {
42 return Value.GetPtr<AttributeType>();
43 }
44
45
47 {
48 Ar << P.Time;
49 return Ar;
50 }
51
52protected:
55
56 friend struct FAttributeCurve;
57};
58
59USTRUCT(BlueprintType)
61{
63public:
66
68
70 virtual ~FAttributeCurve() { }
71
73
75 virtual int32 GetNumKeys() const override final { return Keys.Num(); }
76 virtual FAttributeCurve* Duplicate() const final { return new FAttributeCurve(*this); }
77 ENGINE_API virtual void SetKeyTime(FKeyHandle KeyHandle, float NewTime) override final;
78 ENGINE_API virtual float GetKeyTime(FKeyHandle KeyHandle) const override final;
83 const UScriptStruct* GetScriptStruct() const { return ScriptStruct; }
84
86 ENGINE_API bool CanEvaluate() const;
87
89 template<typename AttributeType>
90 AttributeType Evaluate(float Time) const
91 {
92 AttributeType EvaluatedValue;
93 EvaluateToPtr(AttributeType::StaticStruct(), Time, (uint8*)&EvaluatedValue);
94 return EvaluatedValue;
95 }
96
98 ENGINE_API bool HasAnyData() const;
99
101 ENGINE_API void Reset();
102
105
107 template<typename AttributeType>
109 {
110 check(AttributeType::StaticStruct() == ScriptStruct);
111 return AddKey(InTime, &InValue, InKeyHandle);
112 }
113
115 ENGINE_API void DeleteKey(FKeyHandle KeyHandle);
116
118 template<typename AttributeType>
120 {
121 check(AttributeType::StaticStruct() == ScriptStruct);
123 }
124
127 {
128 check(ValueType == ScriptStruct);
130 }
131
134 ENGINE_API const FAttributeKey& GetKey(FKeyHandle KeyHandle) const;
135
138
141
145
147 template<typename AttributeType>
149 {
150 for (const FAttributeKey& Key : Keys)
151 {
152 OutKeys.Add(Key.Value.GetPtr<AttributeType>());
153 }
154 }
155
159
161 ENGINE_API void ReadjustTimeRange(float NewMinTimeRange, float NewMaxTimeRange, bool bInsert/* whether insert or remove*/, float OldStartTime, float OldEndTime);
162
163protected:
166
169
172protected:
174 UPROPERTY(EditAnywhere, Category = "Custom Attributes")
176
177 /* Path to UScriptStruct to be loaded */
178 UPROPERTY(VisibleAnywhere, Category = "Custom Attributes")
180
181 /* Transient UScriptStruct instance representing the underlying value type for the curve */
182 UPROPERTY(EditAnywhere, Transient, Category = "Custom Attributes")
184
186 UPROPERTY(EditAnywhere, Transient, Category = "Custom Attributes")
188
190 const UE::Anim::IAttributeBlendOperator* Operator;
191
195};
196
197template<>
199{
200 enum
201 {
202 WithSerializer = true,
203 };
204};
#define check(expr)
Definition AssertionMacros.h:314
UE::Anim::TWrappedAttribute< FDefaultAllocator > FWrappedAttribute
Definition AttributeCurve.h:19
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition Array.h:64
Definition AnimSequence.h:203
Definition Class.h:1720
Definition AnimSequence.h:44
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition AttributeCurve.h:61
ENGINE_API FKeyHandle FindKeyBeforeOrAt(float KeyTime) const
Definition AttributeCurve.cpp:258
FKeyHandle AddTypedKey(float InTime, const AttributeType &InValue, FKeyHandle InKeyHandle=FKeyHandle())
Definition AttributeCurve.h:108
const UScriptStruct * GetScriptStruct() const
Definition AttributeCurve.h:83
FAttributeCurve()
Definition AttributeCurve.h:64
virtual ~FAttributeCurve()
Definition AttributeCurve.h:70
virtual int32 GetNumKeys() const override final
Definition AttributeCurve.h:75
AttributeType Evaluate(float Time) const
Definition AttributeCurve.h:90
ENGINE_API FKeyHandle UpdateOrAddKey(float InTime, const void *InValue, float KeyTimeTolerance=UE_KINDA_SMALL_NUMBER)
Definition AttributeCurve.cpp:194
ENGINE_API FKeyHandle AddKey(float InTime, const void *InValue, FKeyHandle InKeyHandle=FKeyHandle())
Definition AttributeCurve.cpp:170
ENGINE_API void SetKeys(TArrayView< const float > InTimes, TArrayView< const void * > InValues)
Definition AttributeCurve.cpp:385
ENGINE_API TArray< FAttributeKey > GetCopyOfKeys() const
Definition AttributeCurve.cpp:543
TObjectPtr< UScriptStruct > ScriptStruct
Definition AttributeCurve.h:183
ENGINE_API FAttributeKey & GetKey(FKeyHandle KeyHandle)
Definition AttributeCurve.cpp:218
virtual FAttributeCurve * Duplicate() const final
Definition AttributeCurve.h:76
ENGINE_API void SetScriptStruct(UScriptStruct *InScriptStruct)
Definition AttributeCurve.cpp:20
ENGINE_API void DeleteKey(FKeyHandle KeyHandle)
Definition AttributeCurve.cpp:185
FKeyHandle UpdateOrAddTypedKey(float InTime, const AttributeType &InValue, float KeyTimeTolerance=UE_KINDA_SMALL_NUMBER)
Definition AttributeCurve.h:119
ENGINE_API FKeyHandle FindKey(float KeyTime, float KeyTimeTolerance=UE_KINDA_SMALL_NUMBER) const
Definition AttributeCurve.cpp:230
FAttributeCurve(UScriptStruct *InScriptStruct)
Definition AttributeCurve.h:65
const UE::Anim::IAttributeBlendOperator * Operator
Definition AttributeCurve.h:190
ENGINE_API void ReadjustTimeRange(float NewMinTimeRange, float NewMaxTimeRange, bool bInsert, float OldStartTime, float OldEndTime)
Definition AttributeCurve.cpp:402
ENGINE_API bool CanEvaluate() const
Definition AttributeCurve.cpp:33
TArray< FAttributeKey > Keys
Definition AttributeCurve.h:175
bool bShouldInterpolate
Definition AttributeCurve.h:187
void GetTypedKeys(TArray< const AttributeType * > &OutKeys) const
Definition AttributeCurve.h:148
ENGINE_API TArray< FAttributeKey >::TConstIterator GetKeyIterator() const
Definition AttributeCurve.cpp:165
friend struct UE::Anim::Attributes
Definition AttributeCurve.h:193
FSoftObjectPath ScriptStructPath
Definition AttributeCurve.h:179
ENGINE_API const TArray< FAttributeKey > & GetConstRefOfKeys() const
Definition AttributeCurve.cpp:548
ENGINE_API bool HasAnyData() const
Definition AttributeCurve.cpp:160
ENGINE_API void EvaluateToPtr(const UScriptStruct *InScriptStruct, float Time, uint8 *InOutDataPtr) const
Definition AttributeCurve.cpp:64
FKeyHandle UpdateOrAddTypedKey(float InTime, const void *InValue, const UScriptStruct *ValueType, float KeyTimeTolerance=UE_KINDA_SMALL_NUMBER)
Definition AttributeCurve.h:126
virtual ENGINE_API void SetKeyTime(FKeyHandle KeyHandle, float NewTime) override final
Definition AttributeCurve.cpp:38
ENGINE_API void RemoveRedundantKeys()
Definition AttributeCurve.cpp:300
Definition AttributeCurve.h:23
FAttributeKey(float InTime=0.f)
Definition AttributeCurve.h:27
const AttributeType * GetValuePtr() const
Definition AttributeCurve.h:40
FWrappedAttribute Value
Definition AttributeCurve.h:54
friend FArchive & operator<<(FArchive &Ar, FAttributeKey &P)
Definition AttributeCurve.h:46
Definition IndexedCurve.h:18
virtual void virtual SetKeyTime(FKeyHandle KeyHandle, float NewTime) PURE_VIRTUAL(FIndexedCurve float GetKeyTime(FKeyHandle KeyHandle) const PURE_VIRTUAL(FIndexedCurve
Definition IndexedCurve.h:47
Definition KeyHandle.h:15
Definition SoftObjectPath.h:56
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
Definition StructOpsTypeTraits.h:46
Definition WrappedAttribute.h:16