UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieScenePreAnimatedStateExtension.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "Containers/Map.h"
10#include "CoreTypes.h"
18#include "Templates/Less.h"
20#include "Templates/UniquePtr.h"
21#include "UObject/ObjectKey.h"
22
25class UObject;
30
31namespace UE
32{
33namespace MovieScene
34{
35
36struct FAnimTypePreAnimatedStateObjectStorage;
37struct FAnimTypePreAnimatedStateRootStorage;
38struct FPreAnimatedEntityCaptureSource;
39struct FPreAnimatedEvaluationHookCaptureSources;
40struct FPreAnimatedStateEntry;
41struct FPreAnimatedStateExtension;
42struct FPreAnimatedTemplateCaptureSources;
43struct FPreAnimatedTrackInstanceCaptureSources;
44struct FPreAnimatedTrackInstanceInputCaptureSources;
45struct FRestoreStateParams;
46struct FSharedPlaybackState;
47struct IPreAnimatedCaptureSource;
48struct IPreAnimatedStorage;
49
60
61
73{
74public:
75
78
79public:
80
82
86 template<typename StorageType>
88 {
89 FPreAnimatedStorageID StorageID = RegisterStorageInternal();
90 return static_cast<const TPreAnimatedStorageID<StorageType>&>(StorageID);
91 }
92
93public:
94
99 template<typename StorageType>
105
106
110 template<typename StorageType>
112 {
113 check(!StorageImplementations.Contains(InStorageID));
114 StorageImplementations.Add(InStorageID, InStorage);
115 }
116
117
122 template<typename StorageType>
124 {
125 return GetOrCreateStorage(StorageType::StorageID);
126 }
127
128
132 template<typename StorageType>
145
146
151 {
152 return StorageImplementations.FindChecked(InStorageID);
153 }
154
155public:
156
157
163 template<typename GroupManagerType>
165 {
166 return StaticCastSharedPtr<GroupManagerType>(GroupManagers.FindRef(GroupManagerType::GroupManagerID).Pin());
167 }
168
169
175 template<typename GroupManagerType>
177 {
178 TSharedPtr<IPreAnimatedStateGroupManager> Existing = GroupManagers.FindRef(GroupManagerType::GroupManagerID).Pin();
179
180 if (!Existing)
181 {
183 Existing->InitializeGroupManager(this);
184 GroupManagers.Add(GroupManagerType::GroupManagerID, Existing);
185 }
186
188 }
189
194
199
200public:
201
206 {
207 return NumRequestsForGlobalState > 0;
208 }
209
215 {
216 return bEntriesInvalidated;
217 }
218
223 {
224 bEntriesInvalidated = false;
225 }
226
227public:
228
235
242
250
255
260
261
268
274
279
285
286public:
287
288 // These methods for globally saving pre-animated state shouldn't be used directly:
289 //
290 // - use FScopedPreAnimatedCaptureSource to capture from a specific source.
291 //
292 // - use the similar methods on SharedPlaybackState->GetPreAnimatedState() to save only when it's
293 // needed for that given sequence instance.
294 //
297
300
301public:
302
305
308
311
314
317
319
322
326
330
332
333private:
334
336
338
339 using FContributionRemover = TFunctionRef<void(IPreAnimatedStorage&, FPreAnimatedStorageIndex)>;
340 void HandleMetaDataToRemove(
341 const FRestoreStateParams& Params,
343 FContributionRemover RemoveFunc);
344
345public:
346
348 void OnObjectsReplaced(const TMap<UObject*, UObject*>& ReplacementMap);
349
352
353private:
354
357
360
362 TUniquePtr<FPreAnimatedTrackInstanceInputCaptureSources> TrackInstanceInputCaptureSource;
363
366
369
371 TArray<TWeakPtr<IPreAnimatedCaptureSource>> WeakExternalCaptureSources;
372
377
378private:
379
380 friend struct ::FScopedPreAnimatedCaptureSource;
381
382 struct FAggregatePreAnimatedStateMetaData
383 {
384 FAggregatePreAnimatedStateMetaData(FPreAnimatedStateCachedValueHandle InValueHandle)
385 : ValueHandle(InValueHandle)
386 {}
387
389
390 FInstanceHandle TerminalInstanceHandle;
391 uint16 NumContributors = 0;
392 uint16 NumRestoreContributors = 0;
393 bool bWantedRestore = false;
394 bool bEligibleForGlobalRestore = false;
395 };
396
397 MOVIESCENE_API FAggregatePreAnimatedStateMetaData* FindMetaData(const FPreAnimatedStateEntry& Entry);
398 MOVIESCENE_API const FAggregatePreAnimatedStateMetaData* FindMetaData(const FPreAnimatedStateEntry& Entry) const;
399
400 MOVIESCENE_API FAggregatePreAnimatedStateMetaData* GetOrAddMetaDataInternal(const FPreAnimatedStateEntry& Entry);
401
402 struct FPreAnimatedGroupMetaData
403 {
406 };
407
409
411
414
417
418 bool bEntriesInvalidated;
419
420private:
421
422 static MOVIESCENE_API FPreAnimatedStorageID RegisterStorageInternal();
423};
424
425
426template<typename KeyType>
427struct TPreAnimatedStateGroupManager : IPreAnimatedStateGroupManager, TSharedFromThis<TPreAnimatedStateGroupManager<KeyType>>
428{
433
435 {
436 KeyType Temp = StorageGroupsToKey.FindChecked(Group);
437
438 StorageGroupsByKey.Remove(Temp);
440 }
441
442
447
449 {
450 return StorageGroupsByKey.FindRef(InKey);
451 }
452
454 {
456 if (GroupHandle)
457 {
458 return GroupHandle;
459 }
460
461 GroupHandle = Extension->AllocateGroup(this->AsShared());
462 StorageGroupsByKey.Add(InKey, GroupHandle);
463 StorageGroupsToKey.Add(GroupHandle, InKey);
464 return GroupHandle;
465 }
466
467protected:
468
471
473};
474
475} // namespace MovieScene
476} // namespace UE
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UObjectGlobals.h:2492
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
TSharedRef< TPreAnimatedStateGroupManager< KeyType >, Mode > AsShared()
Definition SharedPointer.h:1650
Definition SharedPointer.h:692
Definition SortedMap.h:20
Definition SparseArray.h:524
Definition UniquePtr.h:107
Definition SharedPointer.h:1295
Definition MovieSceneEntitySystemLinker.h:113
Definition Object.h:95
Definition Linker.cpp:38
EPreAnimatedStorageRequirement
Definition MovieScenePreAnimatedStateTypes.h:32
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition MovieSceneAnimTypeID.h:20
Definition ObjectKey.h:19
Definition MovieScenePreAnimatedCaptureSource.h:40
Definition MovieSceneExecutionToken.h:82
Definition MovieSceneExecutionToken.h:38
Definition MovieSceneSequenceInstanceHandle.h:15
Definition MovieScenePreAnimatedCaptureSources.h:115
Definition MovieScenePreAnimatedCaptureSources.h:158
Definition MovieScenePreAnimatedStateTypes.h:134
Definition MovieScenePreAnimatedStateTypes.h:158
Definition MovieScenePreAnimatedStateExtension.h:73
TSharedPtr< StorageType > GetOrCreateStorage()
Definition MovieScenePreAnimatedStateExtension.h:123
MOVIESCENE_API FPreAnimatedTrackInstanceCaptureSources * GetOrCreateTrackInstanceMetaData()
Definition MovieScenePreAnimatedStateExtension.cpp:257
bool AreEntriesInvalidated() const
Definition MovieScenePreAnimatedStateExtension.h:214
MOVIESCENE_API void FreeGroup(FPreAnimatedStorageGroupHandle Index)
Definition MovieScenePreAnimatedStateExtension.cpp:53
MOVIESCENE_API FPreAnimatedTrackInstanceInputCaptureSources * GetOrCreateTrackInstanceInputMetaData()
Definition MovieScenePreAnimatedStateExtension.cpp:271
uint32 NumRequestsForGlobalState
Definition MovieScenePreAnimatedStateExtension.h:351
MOVIESCENE_API void SavePreAnimatedStateDirectly(FMovieSceneAnimTypeID InTokenType, const IMovieScenePreAnimatedGlobalTokenProducer &Producer)
Definition MovieScenePreAnimatedStateExtension.cpp:884
MOVIESCENE_API FPreAnimatedStorageGroupHandle AllocateGroup(TSharedPtr< IPreAnimatedStateGroupManager > GroupManager)
Definition MovieScenePreAnimatedStateExtension.cpp:44
MOVIESCENE_API void ReplaceObjectForGroup(FPreAnimatedStorageGroupHandle GroupHandle, const FObjectKey &OldObject, const FObjectKey &NewObject)
Definition MovieScenePreAnimatedStateExtension.cpp:68
MOVIESCENE_API FPreAnimatedTrackInstanceCaptureSources * GetTrackInstanceMetaData() const
Definition MovieScenePreAnimatedStateExtension.cpp:252
MOVIESCENE_API void DiscardStateForStorage(FPreAnimatedStorageID StorageID, FPreAnimatedStorageIndex StorageIndex)
Definition MovieScenePreAnimatedStateExtension.cpp:575
MOVIESCENE_API FPreAnimatedEvaluationHookCaptureSources * GetOrCreateEvaluationHookMetaData()
Definition MovieScenePreAnimatedStateExtension.cpp:299
MOVIESCENE_API void AddSourceMetaData(const FPreAnimatedStateEntry &Entry)
Definition MovieScenePreAnimatedStateExtension.cpp:815
TSharedPtr< GroupManagerType > FindGroupManager() const
Definition MovieScenePreAnimatedStateExtension.h:164
MOVIESCENE_API void DiscardStateForGroup(FPreAnimatedStorageGroupHandle GroupHandle)
Definition MovieScenePreAnimatedStateExtension.cpp:523
MOVIESCENE_API void DiscardTransientState()
Definition MovieScenePreAnimatedStateExtension.cpp:465
TSharedPtr< IPreAnimatedStorage > GetStorageChecked(FPreAnimatedStorageID InStorageID) const
Definition MovieScenePreAnimatedStateExtension.h:150
MOVIESCENE_API FPreAnimatedStateExtension()
Definition MovieScenePreAnimatedStateExtension.cpp:23
MOVIESCENE_API void SavePreAnimatedState(FMovieSceneAnimTypeID InTokenType, const IMovieScenePreAnimatedGlobalTokenProducer &Producer)
Definition MovieScenePreAnimatedStateExtension.cpp:876
MOVIESCENE_API void RestoreStateForGroup(FPreAnimatedStorageGroupHandle GroupHandle, const FRestoreStateParams &Params)
Definition MovieScenePreAnimatedStateExtension.cpp:318
MOVIESCENE_API void EnsureMetaData(const FPreAnimatedStateEntry &Entry)
Definition MovieScenePreAnimatedStateExtension.cpp:142
MOVIESCENE_API FPreAnimatedTrackInstanceInputCaptureSources * GetTrackInstanceInputMetaData() const
Definition MovieScenePreAnimatedStateExtension.cpp:266
MOVIESCENE_API void AddMetaData(const FPreAnimatedStateMetaData &MetaData)
Definition MovieScenePreAnimatedStateExtension.cpp:152
bool IsCapturingGlobalState() const
Definition MovieScenePreAnimatedStateExtension.h:205
void AddStorage(TPreAnimatedStorageID< StorageType > InStorageID, TSharedPtr< StorageType > InStorage)
Definition MovieScenePreAnimatedStateExtension.h:111
MOVIESCENE_API ~FPreAnimatedStateExtension()
Definition MovieScenePreAnimatedStateExtension.cpp:35
TSharedPtr< StorageType > GetOrCreateStorage(TPreAnimatedStorageID< StorageType > InStorageID)
Definition MovieScenePreAnimatedStateExtension.h:133
static TPreAnimatedStorageID< StorageType > RegisterStorage()
Definition MovieScenePreAnimatedStateExtension.h:87
MOVIESCENE_API FPreAnimatedEntityCaptureSource * GetOrCreateEntityMetaData()
Definition MovieScenePreAnimatedStateExtension.cpp:243
MOVIESCENE_API FPreAnimatedTemplateCaptureSources * GetTemplateMetaData() const
Definition MovieScenePreAnimatedStateExtension.cpp:280
void DiscardStaleObjectState()
Definition MovieScenePreAnimatedStateExtension.cpp:394
MOVIESCENE_API void UpdateMetaData(const FPreAnimatedStateMetaData &MetaData)
Definition MovieScenePreAnimatedStateExtension.cpp:221
TSharedPtr< GroupManagerType > GetOrCreateGroupManager()
Definition MovieScenePreAnimatedStateExtension.h:176
MOVIESCENE_API EPreAnimatedStorageRequirement GetStorageRequirement(const FPreAnimatedStateEntry &Entry) const
Definition MovieScenePreAnimatedStateExtension.cpp:127
MOVIESCENE_API FPreAnimatedTemplateCaptureSources * GetOrCreateTemplateMetaData()
Definition MovieScenePreAnimatedStateExtension.cpp:285
void ResetEntryInvalidation()
Definition MovieScenePreAnimatedStateExtension.h:222
void OnObjectsReplaced(const TMap< UObject *, UObject * > &ReplacementMap)
Definition MovieScenePreAnimatedStateExtension.cpp:925
TSharedPtr< StorageType > FindStorage(TPreAnimatedStorageID< StorageType > InStorageID) const
Definition MovieScenePreAnimatedStateExtension.h:100
MOVIESCENE_API void RestoreGlobalState(const FRestoreStateParams &Params)
Definition MovieScenePreAnimatedStateExtension.cpp:332
MOVIESCENE_API bool ContainsAnyStateForInstanceHandle(FRootInstanceHandle RootInstanceHandle) const
Definition MovieScenePreAnimatedStateExtension.cpp:684
MOVIESCENE_API void AddWeakCaptureSource(TWeakPtr< IPreAnimatedCaptureSource > InWeakMetaData)
Definition MovieScenePreAnimatedStateExtension.cpp:308
MOVIESCENE_API FPreAnimatedEntityCaptureSource * GetEntityMetaData() const
Definition MovieScenePreAnimatedStateExtension.cpp:238
MOVIESCENE_API void RemoveMetaData(const FPreAnimatedStateMetaData &MetaData)
Definition MovieScenePreAnimatedStateExtension.cpp:164
MOVIESCENE_API FPreAnimatedEvaluationHookCaptureSources * GetEvaluationHookMetaData() const
Definition MovieScenePreAnimatedStateExtension.cpp:294
MOVIESCENE_API bool MetaDataExists(const FPreAnimatedStateEntry &Entry) const
Definition MovieScenePreAnimatedStateExtension.cpp:147
MOVIESCENE_API void DiscardGlobalState(const FRestoreStateParams &Params)
Definition MovieScenePreAnimatedStateExtension.cpp:415
MOVIESCENE_API bool HasActiveCaptureSource() const
Definition MovieScenePreAnimatedStateExtension.cpp:807
MOVIESCENE_API void RemoveWeakCaptureSource(TWeakPtr< IPreAnimatedCaptureSource > InWeakMetaData)
Definition MovieScenePreAnimatedStateExtension.cpp:313
Definition MovieScenePreAnimatedStateTypes.h:190
Definition MovieScenePreAnimatedStateTypes.h:86
Definition MovieScenePreAnimatedStorageID.h:14
Definition MovieScenePreAnimatedStateTypes.h:42
Definition MovieScenePreAnimatedCaptureSources.h:135
Definition MovieScenePreAnimatedCaptureSources.h:182
Definition MovieScenePreAnimatedCaptureSources.h:202
Definition MovieSceneRestoreStateParams.h:21
Definition MovieSceneSequenceInstanceHandle.h:58
Definition MovieScenePreAnimatedStateExtension.h:54
virtual void OnGroupDestroyed(FPreAnimatedStorageGroupHandle Group)=0
virtual ~IPreAnimatedStateGroupManager()
Definition MovieScenePreAnimatedStateExtension.h:55
virtual void GatherStaleStorageGroups(TArray< FPreAnimatedStorageGroupHandle > &StaleGroupStorage) const =0
virtual void InitializeGroupManager(FPreAnimatedStateExtension *Extension)=0
Definition IMovieScenePreAnimatedStorage.h:32
Definition MovieScenePreAnimatedStateExtension.h:428
virtual void GatherStaleStorageGroups(TArray< FPreAnimatedStorageGroupHandle > &StaleGroupStorage) const override
Definition MovieScenePreAnimatedStateExtension.h:443
FPreAnimatedStorageGroupHandle FindGroupForKey(const KeyType &InKey) const
Definition MovieScenePreAnimatedStateExtension.h:448
FPreAnimatedStorageGroupHandle MakeGroupForKey(const KeyType &InKey)
Definition MovieScenePreAnimatedStateExtension.h:453
TMap< KeyType, FPreAnimatedStorageGroupHandle > StorageGroupsByKey
Definition MovieScenePreAnimatedStateExtension.h:469
TMap< FPreAnimatedStorageGroupHandle, KeyType > StorageGroupsToKey
Definition MovieScenePreAnimatedStateExtension.h:470
void OnGroupDestroyed(FPreAnimatedStorageGroupHandle Group) override
Definition MovieScenePreAnimatedStateExtension.h:434
FPreAnimatedStateExtension * Extension
Definition MovieScenePreAnimatedStateExtension.h:472
void InitializeGroupManager(FPreAnimatedStateExtension *InExtension) override
Definition MovieScenePreAnimatedStateExtension.h:429
Definition MovieScenePreAnimatedStorageID.h:51