UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieScenePreAnimatedPropertyStorage.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "UObject/ObjectKey.h"
8#include "UObject/Object.h"
19
20
21namespace UE
22{
23namespace MovieScene
24{
25
26
30template<typename StorageType, typename ...MetaDataTypes>
44
45
49template<typename StorageType>
55
56
60template<typename PropertyTraits, typename MetaDataIndices, typename ...MetaDataTypes>
62
63template<typename PropertyTraits, int... MetaDataIndices, typename ...MetaDataTypes>
65{
67 using StorageType = TPreAnimatedPropertyValue<typename PropertyTraits::StorageType, MetaDataTypes...>;
68
69 const PropertyTraits* PropertyTraitsInstance;
70
72 : PropertyTraitsInstance(InPropertyTraitsInstance)
73 {}
74
75 void RestorePreAnimatedValue(const KeyType& InKey, StorageType& CachedValue, const FRestoreStateParams& Params)
76 {
77 UObject* Object = InKey.Get<0>().ResolveObjectPtr();
78 if (!Object)
79 {
80 return;
81 }
82
83 if (const uint16* FastOffset = CachedValue.Binding.template TryGet<uint16>())
84 {
85 PropertyTraitsInstance->SetObjectPropertyValue(Object, CachedValue.MetaData.template Get<MetaDataIndices>()..., *FastOffset, CachedValue.Data);
86 }
87 else if (const TSharedPtr<FTrackInstancePropertyBindings>* Bindings = CachedValue.Binding.template TryGet<TSharedPtr<FTrackInstancePropertyBindings>>())
88 {
89 PropertyTraitsInstance->SetObjectPropertyValue(Object, CachedValue.MetaData.template Get<MetaDataIndices>()..., Bindings->Get(), CachedValue.Data);
90 }
92 {
93 PropertyTraitsInstance->SetObjectPropertyValue(Object, CachedValue.MetaData.template Get<MetaDataIndices>()..., *CustomAccessor, CachedValue.Data);
94 }
95 }
96};
97
98
99
103template<typename PropertyTraits>
105{
108
109 const PropertyTraits* PropertyTraitsInstance;
110
112 : PropertyTraitsInstance(InPropertyTraitsInstance)
113 {}
114
115 void RestorePreAnimatedValue(const KeyType& InKey, StorageType& CachedValue, const FRestoreStateParams& Params)
116 {
117 UObject* Object = InKey.Get<0>().ResolveObjectPtr();
118 if (!Object)
119 {
120 return;
121 }
122
123 if (const uint16* FastOffset = CachedValue.Binding.template TryGet<uint16>())
124 {
125 PropertyTraitsInstance->SetObjectPropertyValue(Object, *FastOffset, CachedValue.Data);
126 }
127 else if (const TSharedPtr<FTrackInstancePropertyBindings>* Bindings = CachedValue.Binding.template TryGet<TSharedPtr<FTrackInstancePropertyBindings>>())
128 {
129 PropertyTraitsInstance->SetObjectPropertyValue(Object, Bindings->Get(), CachedValue.Data);
130 }
132 {
133 PropertyTraitsInstance->SetObjectPropertyValue(Object, *CustomAccessor, CachedValue.Data);
134 }
135 }
136};
137
138
139template<typename PropertyTraits, typename MetaDataTypes, typename MetaDataIndices>
141
142template<typename PropertyTraits, typename ...MetaDataTypes, int ...MetaDataIndices>
144 : TPreAnimatedStateStorage<TPreAnimatedPropertyTraits<PropertyTraits, TIntegerSequence<int, MetaDataIndices...>, MetaDataTypes...>>
146{
147 using StorageTraits = TPreAnimatedPropertyTraits<PropertyTraits, TIntegerSequence<int, MetaDataIndices...>, MetaDataTypes...>;
149
150 static_assert(StorageTraits::SupportsGrouping, "Pre-animated storage for properties should support grouping by object");
151
153 : TPreAnimatedStateStorage<StorageTraits>(static_cast<const PropertyTraits*>(InPropertyDefinition.TraitsInstance))
154 , PropertyTraitsInstance(static_cast<const PropertyTraits*>(InPropertyDefinition.TraitsInstance))
155 , MetaDataComponents(InPropertyDefinition.MetaDataTypes)
156 {
157 check(MetaDataComponents.Num() == sizeof...(MetaDataIndices));
158
159 if (InPropertyDefinition.CustomPropertyRegistration)
160 {
161 CustomAccessors = InPropertyDefinition.CustomPropertyRegistration->GetAccessors();
162 }
163 }
164
166 {
167 return this;
168 }
169
171 {
172 const int32 Num = Params.Num;
173 const bool bWantsRestore = Params.bWantsRestoreState;
174
175 if (!this->ParentExtension->IsCapturingGlobalState() && !bWantsRestore)
176 {
177 return;
178 }
179
180 FPreAnimatedEntityCaptureSource* EntityMetaData = this->ParentExtension->GetOrCreateEntityMetaData();
181 for (int32 Index = 0; Index < Num; ++Index)
182 {
183 UObject* BoundObject = BoundObjects[Index];
184 if (!BoundObject)
185 {
186 continue;
187 }
188
189 FPreAnimatedStateEntry Entry = this->MakeEntry(BoundObject, PropertyBindings[Index].PropertyPath);
190 EntityMetaData->BeginTrackingEntity(Entry, EntityIDs[Index], InstanceHandles[Index], bWantsRestore);
191 }
192 }
193
195 {
196 const FEntityAllocation* Allocation = Item.GetAllocation();
197
199 Allocation->ReadComponents(MetaDataComponents[MetaDataIndices].template ReinterpretCast<MetaDataTypes>())...
200 );
201
202 const uint16* Fast = Properties.Get<1>();
203 const FCustomPropertyIndex* Custom = Properties.Get<0>();
204 const TSharedPtr<FTrackInstancePropertyBindings>* Slow = Properties.Get<2>();
205
206 const int32 Num = Allocation->Num();
207 for (int32 Index = 0; Index < Num; ++Index)
208 {
209 UObject* BoundObject = BoundObjects[Index];
210 if (!BoundObject)
211 {
212 continue;
213 }
214
215 if (!this->ShouldTrackCaptureSource(EPreAnimatedCaptureSourceTracking::CacheIfTracked, BoundObject, PropertyBindings[Index].PropertyPath))
216 {
217 continue;
218 }
219
220 FPreAnimatedStateEntry Entry = this->MakeEntry(BoundObject, PropertyBindings[Index].PropertyPath);
221
222 this->TrackCaptureSource(Entry, EPreAnimatedCaptureSourceTracking::CacheIfTracked);
223
224 EPreAnimatedStorageRequirement StorageRequirement = this->ParentExtension->GetStorageRequirement(Entry);
225 if (!this->IsStorageRequirementSatisfied(Entry.ValueHandle.StorageIndex, StorageRequirement))
226 {
227 StorageType NewValue(MetaData.template Get<MetaDataIndices>()[Index]...);
228
229 if (Fast)
230 {
231 NewValue.Binding.template Set<uint16>(Fast[Index]);
232 PropertyTraitsInstance->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., Fast[Index], NewValue.Data);
233 }
234 else if (Custom)
235 {
236 const FCustomPropertyAccessor& Accessor = this->CustomAccessors[Custom[Index].Value];
237
238 NewValue.Binding.template Set<const FCustomPropertyAccessor*>(&Accessor);
239 PropertyTraitsInstance->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., Accessor, NewValue.Data);
240 }
241 else if (Slow)
242 {
244
245 NewValue.Binding.template Set<TSharedPtr<FTrackInstancePropertyBindings>>(Bindings);
246 PropertyTraitsInstance->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., Bindings.Get(), NewValue.Data);
247 }
248
249 this->AssignPreAnimatedValue(Entry.ValueHandle.StorageIndex, StorageRequirement, MoveTemp(NewValue));
250 }
251
252 if (Params.bForcePersist)
253 {
254 this->ForciblyPersistStorage(Entry.ValueHandle.StorageIndex);
255 }
256 }
257 }
258
259protected:
260
261 const PropertyTraits* PropertyTraitsInstance;
264};
265
266
267template<typename PropertyTraits>
269
270
271
272
273
274
275} // namespace MovieScene
276} // namespace UE
277
278
279
280
281
282
#define check(expr)
Definition AssertionMacros.h:314
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
@ Num
Definition MetalRHIPrivate.h:234
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition MovieScene.Build.cs:6
Definition PropertyPath.Build.cs:6
Definition ArrayView.h:139
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT ObjectType * Get() const
Definition SharedPointer.h:1065
Definition TVariant.h:48
Definition Object.h:95
EPreAnimatedStorageRequirement
Definition MovieScenePreAnimatedStateTypes.h:32
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
TCallTraitsParamTypeHelper< T, PassByValue >::ParamType ParamType
Definition UnrealTypeTraits.h:275
Definition IntegerSequence.h:9
Definition Tuple.h:652
Definition MovieScenePreAnimatedObjectStorage.h:30
Definition MovieScenePreAnimatedStateTypes.h:27
Definition MovieScenePropertySystemTypes.h:164
Definition MovieScenePropertySystemTypes.h:136
Definition MovieScenePropertySystemTypes.h:23
Definition MovieSceneEntitySystemTypes.h:977
MOVIESCENE_API const FEntityAllocation * GetAllocation() const
Definition MovieSceneEntitySystemTypes.cpp:144
Definition MovieSceneEntitySystemTypes.h:624
TComponentLock< TRead< T > > ReadComponents(TComponentTypeID< T > ComponentType) const
Definition MovieSceneEntitySystemTypes.h:877
int32 Num() const
Definition MovieSceneEntitySystemTypes.h:813
Definition MovieScenePreAnimatedCaptureSources.h:115
MOVIESCENE_API void BeginTrackingEntity(const FPreAnimatedStateEntry &Entry, FMovieSceneEntityID EntityID, FRootInstanceHandle RootInstanceHandle, bool bWantsRestoreState)
Definition MovieScenePreAnimatedCaptureSources.cpp:26
FPreAnimatedStorageIndex StorageIndex
Definition MovieScenePreAnimatedStateTypes.h:139
Definition MovieScenePreAnimatedStateTypes.h:158
FPreAnimatedStateCachedValueHandle ValueHandle
Definition MovieScenePreAnimatedStateTypes.h:162
Definition MovieScenePreAnimatedStateTypes.h:19
Definition MovieScenePropertyRegistry.h:66
Definition MovieSceneRestoreStateParams.h:21
Definition IMovieScenePreAnimatedStorage.h:68
Definition MovieSceneComponentPtr.h:439
auto * Get() const
Definition MovieSceneComponentPtr.h:457
IPreAnimatedObjectPropertyStorage * AsPropertyStorage() override
Definition MovieScenePreAnimatedPropertyStorage.h:165
TPreAnimatedPropertyStorageImpl(const FPropertyDefinition &InPropertyDefinition)
Definition MovieScenePreAnimatedPropertyStorage.h:152
void CachePreAnimatedValues(const FCachePreAnimatedValueParams &Params, FEntityAllocationProxy Item, TRead< UObject * > BoundObjects, TRead< FMovieScenePropertyBinding > PropertyBindings, FThreeWayAccessor Properties) override
Definition MovieScenePreAnimatedPropertyStorage.h:194
void BeginTrackingEntities(const FPreAnimatedTrackerParams &Params, TRead< FMovieSceneEntityID > EntityIDs, TRead< FRootInstanceHandle > InstanceHandles, TRead< UObject * > BoundObjects, TRead< FMovieScenePropertyBinding > PropertyBindings) override
Definition MovieScenePreAnimatedPropertyStorage.h:170
Definition MovieScenePreAnimatedPropertyStorage.h:140
void RestorePreAnimatedValue(const KeyType &InKey, StorageType &CachedValue, const FRestoreStateParams &Params)
Definition MovieScenePreAnimatedPropertyStorage.h:75
TPreAnimatedPropertyTraits(const PropertyTraits *InPropertyTraitsInstance)
Definition MovieScenePreAnimatedPropertyStorage.h:71
const PropertyTraits * PropertyTraitsInstance
Definition MovieScenePreAnimatedPropertyStorage.h:109
void RestorePreAnimatedValue(const KeyType &InKey, StorageType &CachedValue, const FRestoreStateParams &Params)
Definition MovieScenePreAnimatedPropertyStorage.h:115
TPreAnimatedPropertyTraits(const PropertyTraits *InPropertyTraitsInstance)
Definition MovieScenePreAnimatedPropertyStorage.h:111
Definition MovieScenePreAnimatedPropertyStorage.h:61
TVariant< const FCustomPropertyAccessor *, uint16, TSharedPtr< FTrackInstancePropertyBindings > > Binding
Definition MovieScenePreAnimatedPropertyStorage.h:53
StorageType Data
Definition MovieScenePreAnimatedPropertyStorage.h:52
Definition MovieScenePreAnimatedPropertyStorage.h:32
StorageType Data
Definition MovieScenePreAnimatedPropertyStorage.h:40
TPreAnimatedPropertyValue(typename TCallTraits< MetaDataTypes >::ParamType... InMetaData)
Definition MovieScenePreAnimatedPropertyStorage.h:36
TPreAnimatedPropertyValue()
Definition MovieScenePreAnimatedPropertyStorage.h:33
TVariant< const FCustomPropertyAccessor *, uint16, TSharedPtr< FTrackInstancePropertyBindings > > Binding
Definition MovieScenePreAnimatedPropertyStorage.h:41
TTuple< MetaDataTypes... > MetaData
Definition MovieScenePreAnimatedPropertyStorage.h:42
Definition MovieScenePreAnimatedStateStorage.h:143
Definition MovieScenePropertyMetaData.h:19
Definition MovieSceneComponentPtr.h:195