UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneOverlappingEntityTracker.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"
6#include "Containers/Map.h"
8#include "Algo/AnyOf.h"
9
16
17namespace UE
18{
19namespace MovieScene
20{
21
26{
27 bool bNeedsRestoration = false;
28};
29
30
32{
33 inline static constexpr bool IsGarbage(...)
34 {
35 return false;
36 }
37 template<typename T>
38 inline static std::enable_if_t<TPointerIsConvertibleFromTo<T, const UObject>::Value, bool> IsGarbage(T* InObject)
39 {
40 constexpr bool bTypeDependentFalse = !std::is_same_v<T, T>;
41 static_assert(bTypeDependentFalse, "Raw object pointers are no longer supported. Please use TObjectPtr<T> instead.");
42 }
43 inline static bool IsGarbage(FObjectKey InObject)
44 {
46 }
47 template<typename T>
48 inline static bool IsGarbage(TObjectPtr<T>& InObject)
49 {
51 }
56
57 template<typename T>
65};
66
67template<typename... T> struct TGarbageTraitsImpl;
68template<typename... T> struct TOverlappingEntityInput;
69
70template<typename... T, int... Indices>
71struct TGarbageTraitsImpl<TIntegerSequence<int, Indices...>, T...>
72{
74 {
75 return (FGarbageTraits::IsGarbage(InParam.Key.template Get<Indices>()) || ...);
76 }
77
82
83 template<typename CallbackType>
84 static void Unpack(const TTuple<T...>& InTuple, CallbackType&& Callback)
85 {
86 Callback(InTuple.template Get<Indices>()...);
87 }
88};
89
91inline void CollectGarbageForOutput(void*)
92{
93}
94
95template<typename... T>
97{
98 using GarbageTraits = TGarbageTraitsImpl<TMakeIntegerSequence<int, sizeof...(T)>, T...>;
99
100 TTuple<T...> Key;
101
102 template<typename... ArgTypes>
104 : Key(Forward<ArgTypes>(InArgs)...)
105 {}
106
108 {
109 return GetTypeHash(In.Key);
110 }
112 {
113 return A.Key == B.Key;
114 }
115
116 template<typename CallbackType>
117 void Unpack(CallbackType&& Callback)
118 {
119 GarbageTraits::Unpack(Key, MoveTemp(Callback));
120 }
121};
122
123
129template<typename OutputType, typename... InputKeyTypes>
131{
134
135 bool IsInitialized() const
136 {
137 return bIsInitialized;
138 }
139
148
153 template<typename ...ComponentTypes>
155 {
157
159
160 // Visit unlinked entities
162 .CombineFilter(InFilter)
163 .FilterAll({ BuiltInComponents->Tags.NeedsUnlink, FComponentTypeID(InKeyComponents)... })
164 .Iterate_PerAllocation(&Linker->EntityManager, [this](const FEntityAllocation* Allocation){ this->VisitUnlinkedAllocation(Allocation); });
165
166 // Visit newly or re-linked entities
168 .ReadAllOf(InKeyComponents...)
169 .CombineFilter(InFilter)
170 .FilterAll({ BuiltInComponents->Tags.NeedsLink })
171 .Iterate_PerAllocation(&Linker->EntityManager, [this](const FEntityAllocation* Allocation, TRead<ComponentTypes>... ReadKeys){ this->VisitLinkedAllocation(Allocation, ReadKeys...); });
172 }
173
178 template<typename ...ComponentTypes>
180 {
182
184
185 // Visit unlinked entities
187 .CombineFilter(InFilter)
188 .FilterAll({ BuiltInComponents->Tags.NeedsUnlink, InKeyComponent... })
189 .Iterate_PerAllocation(&Linker->EntityManager, [this](const FEntityAllocation* Allocation){ this->VisitUnlinkedAllocation(Allocation); });
190 }
191
195 template<typename ...ComponentTypes>
203 template<typename ...ComponentTypes>
208
213 {
214 VisitUnlinkedAllocationImpl(Allocation);
215 }
216
230 template<typename HandlerType>
232 {
233 if (InvalidatedOutputs.Num() != 0)
234 {
236
238 int32 NumRemoved = 0;
239
241
244 {
245 const uint16 OutputIndex = static_cast<uint16>(InvalidOutput.GetIndex());
246
247 InputArray.Reset();
248 for (auto Inputs = OutputToEntity.CreateKeyIterator(OutputIndex); Inputs; ++Inputs)
249 {
250 if (ensure(Linker->EntityManager.IsAllocated(Inputs.Value())))
251 {
252 InputArray.Add(Inputs.Value());
253 }
254 else
255 {
256 EntityToOutput.Remove(Inputs.Value());
257 Inputs.RemoveCurrent();
258 }
259 }
260
261 FOutput& Output = Outputs[OutputIndex];
262 if (InputArray.Num() > 0)
263 {
265
266 if (NewOutputs.IsValidIndex(OutputIndex) && NewOutputs[OutputIndex] == true)
267 {
269 InHandler.InitializeOutput(InKeys..., InputArray, &Output.OutputData, Output.Aggregate);
270 });
271 }
272 else
273 {
275 InHandler.UpdateOutput(InKeys..., InputArray, &Output.OutputData, Output.Aggregate);
276 });
277 }
278 }
279 else
280 {
282 InHandler.DestroyOutput(InKeys..., &Output.OutputData, Output.Aggregate);
283 });
284 }
285
286 if (InputArray.Num() == 0)
287 {
288 KeyToOutput.Remove(Outputs[OutputIndex].Key);
289 Outputs.RemoveAt(OutputIndex, 1);
290 }
291 }
292 }
293
296 }
297
298 bool IsEmpty() const
299 {
300 return Outputs.Num() != 0;
301 }
302
306 template<typename HandlerType>
308 {
309 for (FOutput& Output : Outputs)
310 {
312 InHandler.DestroyOutput(InKeys..., &Output.OutputData, Output.Aggregate);
313 });
314 }
315
316 EntityToOutput.Empty();
317 OutputToEntity.Empty();
318
319 KeyToOutput.Empty();
320 Outputs.Empty();
321
324 }
325
327 {
328 if (const uint16* OutputIndex = KeyToOutput.Find(Key))
329 {
330 OutputToEntity.MultiFind(*OutputIndex, OutEntityIDs);
331 }
332 }
333
334 const OutputType* FindOutput(FMovieSceneEntityID EntityID) const
335 {
336 if (const uint16* OutputIndex = EntityToOutput.Find(EntityID))
337 {
338 if (ensure(Outputs.IsValidIndex(*OutputIndex)))
339 {
340 return &Outputs[*OutputIndex].OutputData;
341 }
342 }
343 return nullptr;
344 }
345
346 const OutputType* FindOutput(ParamType Key) const
347 {
348 if (const uint16* OutputIndex = KeyToOutput.Find(Key))
349 {
350 if (ensure(Outputs.IsValidIndex(*OutputIndex)))
351 {
352 return &Outputs[*OutputIndex].OutputData;
353 }
354 }
355 return nullptr;
356 }
357
358 bool NeedsRestoration(ParamType Key, bool bEnsureOutput = false) const
359 {
363 if (bIsOutputValid)
364 {
365 return Outputs[ExistingOutput].Aggregate.bNeedsRestoration;
366 }
367 return false;
368 }
369
370 void SetNeedsRestoration(ParamType Key, bool bNeedsRestoration, bool bEnsureOutput = false)
371 {
375 if (bIsOutputValid)
376 {
377 Outputs[ExistingOutput].Aggregate.bNeedsRestoration = bNeedsRestoration;
378 }
379 }
380
381protected:
382
383 template<typename ...ComponentTypes>
385 {
387
388 const int32 Num = Allocation->Num();
389
390 const FMovieSceneEntityID* EntityIDs = Allocation->GetRawEntityIDs();
391
394 {
395 for (int32 Index = 0; Index < Num; ++Index)
396 {
397 const uint16 OutputIndex = MakeOutput(EntityIDs[Index], TOverlappingEntityInput<InputKeyTypes...>(Keys[Index]...), bNeedsLink);
398 Outputs[OutputIndex].Aggregate.bNeedsRestoration = true;
399 }
400 }
401 else
402 {
403 for (int32 Index = 0; Index < Num; ++Index)
404 {
406 }
407 }
408 }
409
411 {
413
414 const int32 Num = Allocation->Num();
415 const FMovieSceneEntityID* EntityIDs = Allocation->GetRawEntityIDs();
416
417 for (int32 Index = 0; Index < Num; ++Index)
418 {
419 ClearOutputByEntity(EntityIDs[Index]);
420 }
421 }
422
424 {
427
429 {
431 {
432 // Previous output is now invalidated since we're removing this entity
435 }
436
437 return DesiredOutputIndex;
438 }
439
441 {
442 // Previous output is now invalidated since we're removing this entity
445
446 // Remove the entitiy's contribution from the previous output
447 OutputToEntity.Remove(PreviousOutputIndex, EntityID);
448 EntityToOutput.Remove(EntityID);
449 }
450
451 // Invalidate the new output
454
456 OutputToEntity.Add(DesiredOutputIndex, EntityID);
457
458 return DesiredOutputIndex;
459 }
460
462 {
465 {
466 return ExistingOutput;
467 }
468
469 const int32 Index = Outputs.Add(FOutput{ Key, OutputType{} });
471
472 const uint16 NewOutput = static_cast<uint16>(Index);
473
474 NewOutputs.PadToNum(NewOutput + 1, false);
475 NewOutputs[NewOutput] = true;
476
478 return NewOutput;
479 }
480
482 {
483 const uint16* OutputIndex = KeyToOutput.Find(Key);
484 return OutputIndex ? *OutputIndex : NO_OUTPUT;
485 }
486
488 {
489 const uint16* OutputIndex = EntityToOutput.Find(EntityID);
490 return OutputIndex ? *OutputIndex : NO_OUTPUT;
491 }
492
494 {
495 const uint16 OutputIndex = FindOutputByEntity(EntityID);
496 if (OutputIndex != NO_OUTPUT)
497 {
498 OutputToEntity.Remove(OutputIndex, EntityID);
499 EntityToOutput.Remove(EntityID);
500
501 InvalidatedOutputs.PadToNum(OutputIndex + 1, false);
502 InvalidatedOutputs[OutputIndex] = true;
503 }
504 }
505
506 bool IsOutputValid(uint16 OutputIndex)
507 {
508 return OutputIndex != NO_OUTPUT &&
509 (!InvalidatedOutputs.IsValidIndex(OutputIndex) ||
510 !InvalidatedOutputs[OutputIndex]);
511 }
512
519
522
525
527
528 bool bIsInitialized = false;
529
530 static constexpr uint16 NO_OUTPUT = MAX_uint16;
531};
532
533
534template<typename OutputType, typename... InputTypes>
536{
538 {
539 this->bIsInitialized = true;
540 }
541};
542
543template<typename OutputType, typename... InputTypes>
545{
548 using typename Super::FOutput;
550
552 {
555 if (Linker)
556 {
557 Linker->Events.TagGarbage.RemoveAll(this);
558 Linker->Events.CleanTaggedGarbage.RemoveAll(this);
559 Linker->Events.AddReferencedObjects.RemoveAll(this);
560 }
561 }
562
564 {
565 if (this->bIsInitialized)
566 {
567 return;
568 }
569
570 this->bIsInitialized = true;
572
573 OwningSystem->GetLinker()->Events.TagGarbage.AddRaw(this, &ThisType::TagGarbage);
574 OwningSystem->GetLinker()->Events.CleanTaggedGarbage.AddRaw(this, &ThisType::CleanTaggedGarbage);
575 OwningSystem->GetLinker()->Events.AddReferencedObjects.AddRaw(this, &ThisType::AddReferencedObjects);
576 }
577
579 {
580 for (int32 Index = this->Outputs.GetMaxIndex()-1; Index >= 0; --Index)
581 {
582 if (!this->Outputs.IsValidIndex(Index))
583 {
584 continue;
585 }
586 const uint16 OutputIndex = static_cast<uint16>(Index);
587
588 FOutput& Output = this->Outputs[Index];
589 if (KeyType::GarbageTraits::IsGarbage(Output.Key))
590 {
591 CollectGarbageForOutput(&this->Outputs[Index].OutputData);
592
593 this->Outputs.RemoveAt(Index, 1);
594
595 // Make sure this output is not flagged as invalidated because it is being destroyed.
596 // This prevents us from blindly processing it in ProcessInvalidatedOutputs
597 if (this->InvalidatedOutputs.IsValidIndex(OutputIndex))
598 {
599 this->InvalidatedOutputs[OutputIndex] = false;
600 }
601
602 for (auto It = this->OutputToEntity.CreateKeyIterator(OutputIndex); It; ++It)
603 {
604 this->EntityToOutput.Remove(It.Value());
605 It.RemoveCurrent();
606 }
607 }
608 }
609
610 for (auto It = this->KeyToOutput.CreateIterator(); It; ++It)
611 {
612 if (KeyType::GarbageTraits::IsGarbage(It.Key()) || !this->Outputs.IsValidIndex(It.Value()))
613 {
614 It.RemoveCurrent();
615 }
616 }
617 }
618
620 {
622
623 // Check whether any of our inputs are about to be destroyed
624 for (auto EntityToOutputIt = this->EntityToOutput.CreateIterator(); EntityToOutputIt; ++EntityToOutputIt)
625 {
626 const FMovieSceneEntityID EntityID = EntityToOutputIt.Key();
627 const uint16 OutputIndex = EntityToOutputIt.Value();
628 if (OutputIndex != Super::NO_OUTPUT && Linker->EntityManager.HasComponent(EntityID, NeedsUnlink))
629 {
630 this->OutputToEntity.Remove(OutputIndex, EntityID);
631
632 this->InvalidatedOutputs.PadToNum(OutputIndex + 1, false);
633 this->InvalidatedOutputs[OutputIndex] = true;
634
635 EntityToOutputIt.RemoveCurrent();
636 }
637 }
638 }
639
641 {
644
645 if constexpr (bKeyCanBeGarbage)
646 {
647 for (TPair<KeyType, uint16>& Pair : this->KeyToOutput)
648 {
649 KeyType::GarbageTraits::AddReferencedObjects(ReferenceCollector, Pair.Key);
650 }
651 }
652
653 for (FOutput& Output : this->Outputs)
654 {
655 if constexpr (bKeyCanBeGarbage)
656 {
657 KeyType::GarbageTraits::AddReferencedObjects(ReferenceCollector, Output.Key);
658 }
659 if constexpr (bOutputCanBeGarbage)
660 {
662 }
663 }
664 }
665
666protected:
667
669};
670
671
672
673template<typename OutputType, typename... KeyType>
674using TOverlappingEntityTracker = std::conditional_t<
676 TOverlappingEntityTracker_WithGarbage<OutputType, KeyType...>,
677 TOverlappingEntityTracker_NoGarbage<OutputType, KeyType...>
678>;
679
680} // namespace MovieScene
681} // namespace UE
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
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
typename UE4IntegerSequence_Private::TMakeIntegerSequenceImpl< T, N >::Type TMakeIntegerSequence
Definition IntegerSequence.h:31
@ Num
Definition MetalRHIPrivate.h:234
#define MAX_uint16
Definition NumericLimits.h:20
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
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UObjectGlobals.h:2492
Definition MovieScene.Build.cs:6
Definition Array.h:670
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
UE_FORCEINLINE_HINT bool IsValidIndex(int32 InIndex) const
Definition BitArray.h:1450
int32 Add(const bool Value)
Definition BitArray.h:615
void Empty(int32 ExpectedNumBits=0)
Definition BitArray.h:779
int32 PadToNum(int32 DesiredNum, bool bPadValue)
Definition BitArray.h:1438
Definition BitArray.h:1944
Definition UnrealString.h.inl:34
Definition SparseArray.h:524
Definition MovieSceneEntitySystemLinker.h:113
struct UMovieSceneEntitySystemLinker::@1494 Events
FMovieSceneEntitySystemLinkerEvent TagGarbage
Definition MovieSceneEntitySystemLinker.h:388
Definition MovieSceneEntitySystem.h:62
UMovieSceneEntitySystemLinker * GetLinker() const
Definition MovieSceneEntitySystem.h:161
UE_REWRITE bool AnyOf(const RangeType &Range)
Definition AnyOf.h:20
Definition Linker.cpp:38
void CollectGarbageForOutput(void *)
Definition MovieSceneOverlappingEntityTracker.h:91
void AddReferencedObjectForComponent(FReferenceCollector *ReferenceCollector, FObjectComponent *ComponentData)
Definition BuiltInComponentTypes.cpp:250
std::conditional_t<(THasAddReferencedObjectForComponent< KeyType >::Value||...)||THasAddReferencedObjectForComponent< OutputType >::Value, TOverlappingEntityTracker_WithGarbage< OutputType, KeyType... >, TOverlappingEntityTracker_NoGarbage< OutputType, KeyType... > > TOverlappingEntityTracker
Definition MovieSceneOverlappingEntityTracker.h:678
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition ObjectKey.h:19
UObject * ResolveObjectPtr() const
Definition ObjectKey.h:126
TCallTraitsParamTypeHelper< T, PassByValue >::ParamType ParamType
Definition UnrealTypeTraits.h:275
Definition IntegerSequence.h:9
Definition ObjectPtr.h:488
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * GetEvenIfUnreachable() const
Definition WeakObjectPtrTemplates.h:189
Definition BuiltInComponentTypes.h:578
struct UE::MovieScene::FBuiltInComponentTypes::@1489 Tags
FComponentTypeID NeedsLink
Definition BuiltInComponentTypes.h:789
static bool IsBoundObjectGarbage(UObject *InObject)
Definition BuiltInComponentTypes.h:845
static MOVIESCENE_API FBuiltInComponentTypes * Get()
Definition BuiltInComponentTypes.cpp:667
FComponentTypeID RestoreState
Definition BuiltInComponentTypes.h:775
FComponentTypeID NeedsUnlink
Definition BuiltInComponentTypes.h:790
Definition MovieSceneEntityIDs.h:174
Definition MovieSceneEntitySystemTypes.h:624
int32 Num() const
Definition MovieSceneEntitySystemTypes.h:813
const FMovieSceneEntityID * GetRawEntityIDs() const
Definition MovieSceneEntitySystemTypes.h:748
bool HasComponent(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntitySystemTypes.h:678
Definition MovieSceneEntitySystemTypes.h:295
Definition MovieSceneOverlappingEntityTracker.h:26
bool bNeedsRestoration
Definition MovieSceneOverlappingEntityTracker.h:27
Definition MovieSceneEntitySystemTask.h:1045
Definition MovieSceneOverlappingEntityTracker.h:32
static bool IsGarbage(FObjectComponent &InComponent)
Definition MovieSceneOverlappingEntityTracker.h:52
static bool IsGarbage(TObjectPtr< T > &InObject)
Definition MovieSceneOverlappingEntityTracker.h:48
static void AddReferencedObjects(FReferenceCollector &ReferenceCollector, T *In)
Definition MovieSceneOverlappingEntityTracker.h:58
static constexpr bool IsGarbage(...)
Definition MovieSceneOverlappingEntityTracker.h:33
static std::enable_if_t< TPointerIsConvertibleFromTo< T, const UObject >::Value, bool > IsGarbage(T *InObject)
Definition MovieSceneOverlappingEntityTracker.h:38
static bool IsGarbage(FObjectKey InObject)
Definition MovieSceneOverlappingEntityTracker.h:43
Definition MovieSceneEntityIDs.h:302
Definition BuiltInComponentTypes.h:256
Definition MovieSceneComponentPtr.h:17
Definition MovieSceneEntityIDs.h:283
TFilteredEntityTask< T... > CombineFilter(const FEntityComponentFilter &InFilter)
Definition MovieSceneEntitySystemTask.h:268
static bool IsGarbage(TOverlappingEntityInput< T... > &InParam)
Definition MovieSceneOverlappingEntityTracker.h:73
static void Unpack(const TTuple< T... > &InTuple, CallbackType &&Callback)
Definition MovieSceneOverlappingEntityTracker.h:84
static void AddReferencedObjects(FReferenceCollector &ReferenceCollector, TOverlappingEntityInput< T... > &InParam)
Definition MovieSceneOverlappingEntityTracker.h:78
Definition MovieSceneOverlappingEntityTracker.h:67
Definition MovieSceneComponentTypeInfo.h:67
Definition MovieSceneOverlappingEntityTracker.h:97
friend bool operator==(const TOverlappingEntityInput< T... > &A, const TOverlappingEntityInput< T... > &B)
Definition MovieSceneOverlappingEntityTracker.h:111
TTuple< T... > Key
Definition MovieSceneOverlappingEntityTracker.h:100
void Unpack(CallbackType &&Callback)
Definition MovieSceneOverlappingEntityTracker.h:117
TOverlappingEntityInput(ArgTypes &&... InArgs)
Definition MovieSceneOverlappingEntityTracker.h:103
friend uint32 GetTypeHash(const TOverlappingEntityInput< T... > &In)
Definition MovieSceneOverlappingEntityTracker.h:107
Definition MovieSceneOverlappingEntityTracker.h:514
OutputType OutputData
Definition MovieSceneOverlappingEntityTracker.h:516
FEntityOutputAggregate Aggregate
Definition MovieSceneOverlappingEntityTracker.h:517
KeyType Key
Definition MovieSceneOverlappingEntityTracker.h:515
Definition MovieSceneOverlappingEntityTracker.h:131
uint16 MakeOutput(FMovieSceneEntityID EntityID, ParamType InKey, bool bAlwaysInvalidate)
Definition MovieSceneOverlappingEntityTracker.h:423
const OutputType * FindOutput(FMovieSceneEntityID EntityID) const
Definition MovieSceneOverlappingEntityTracker.h:334
void VisitUnlinkedAllocation(const FEntityAllocation *Allocation)
Definition MovieSceneOverlappingEntityTracker.h:212
bool NeedsRestoration(ParamType Key, bool bEnsureOutput=false) const
Definition MovieSceneOverlappingEntityTracker.h:358
TBitArray NewOutputs
Definition MovieSceneOverlappingEntityTracker.h:526
void VisitLinkedAllocation(const FEntityAllocation *Allocation, TComponentPtr< const ComponentTypes >... ReadKeys)
Definition MovieSceneOverlappingEntityTracker.h:204
void Destroy(HandlerType &&InHandler)
Definition MovieSceneOverlappingEntityTracker.h:307
void FindEntityIDs(ParamType Key, TArray< FMovieSceneEntityID > &OutEntityIDs) const
Definition MovieSceneOverlappingEntityTracker.h:326
const OutputType * FindOutput(ParamType Key) const
Definition MovieSceneOverlappingEntityTracker.h:346
bool IsEmpty() const
Definition MovieSceneOverlappingEntityTracker.h:298
bool IsOutputValid(uint16 OutputIndex)
Definition MovieSceneOverlappingEntityTracker.h:506
TMultiMap< uint16, FMovieSceneEntityID > OutputToEntity
Definition MovieSceneOverlappingEntityTracker.h:521
void ClearOutputByEntity(FMovieSceneEntityID EntityID)
Definition MovieSceneOverlappingEntityTracker.h:493
void SetNeedsRestoration(ParamType Key, bool bNeedsRestoration, bool bEnsureOutput=false)
Definition MovieSceneOverlappingEntityTracker.h:370
bool bIsInitialized
Definition MovieSceneOverlappingEntityTracker.h:528
TMap< FMovieSceneEntityID, uint16 > EntityToOutput
Definition MovieSceneOverlappingEntityTracker.h:520
bool IsInitialized() const
Definition MovieSceneOverlappingEntityTracker.h:135
void ProcessInvalidatedOutputs(UMovieSceneEntitySystemLinker *Linker, HandlerType &&InHandler)
Definition MovieSceneOverlappingEntityTracker.h:231
TOverlappingEntityInput< InputKeyTypes... > KeyType
Definition MovieSceneOverlappingEntityTracker.h:132
void VisitActiveAllocation(const FEntityAllocation *Allocation, TComponentPtr< const ComponentTypes >... ReadKeys)
Definition MovieSceneOverlappingEntityTracker.h:196
typename TCallTraits< KeyType >::ParamType ParamType
Definition MovieSceneOverlappingEntityTracker.h:133
void Update(UMovieSceneEntitySystemLinker *Linker, TComponentTypeID< InputKeyTypes >... InKeyComponents, const FEntityComponentFilter &InFilter)
Definition MovieSceneOverlappingEntityTracker.h:144
TBitArray InvalidatedOutputs
Definition MovieSceneOverlappingEntityTracker.h:526
TMap< KeyType, uint16 > KeyToOutput
Definition MovieSceneOverlappingEntityTracker.h:523
static constexpr uint16 NO_OUTPUT
Definition MovieSceneOverlappingEntityTracker.h:530
void VisitActiveAllocationImpl(const FEntityAllocation *Allocation, TComponentPtr< const ComponentTypes >... Keys)
Definition MovieSceneOverlappingEntityTracker.h:384
uint16 FindOutputByKey(ParamType Key) const
Definition MovieSceneOverlappingEntityTracker.h:481
void UpdateUnlinkedOnly(UMovieSceneEntitySystemLinker *Linker, TComponentTypeID< ComponentTypes >... InKeyComponent, const FEntityComponentFilter &InFilter)
Definition MovieSceneOverlappingEntityTracker.h:179
void UpdateFromComponents(UMovieSceneEntitySystemLinker *Linker, const FEntityComponentFilter &InFilter, TComponentTypeID< ComponentTypes >... InKeyComponents)
Definition MovieSceneOverlappingEntityTracker.h:154
TSparseArray< FOutput > Outputs
Definition MovieSceneOverlappingEntityTracker.h:524
void VisitUnlinkedAllocationImpl(const FEntityAllocation *Allocation)
Definition MovieSceneOverlappingEntityTracker.h:410
uint16 CreateOutputByKey(ParamType Key)
Definition MovieSceneOverlappingEntityTracker.h:461
uint16 FindOutputByEntity(FMovieSceneEntityID EntityID) const
Definition MovieSceneOverlappingEntityTracker.h:487
Definition MovieSceneOverlappingEntityTracker.h:536
void Initialize(UMovieSceneEntitySystem *OwningSystem)
Definition MovieSceneOverlappingEntityTracker.h:537
Definition MovieSceneOverlappingEntityTracker.h:545
void CleanTaggedGarbage(UMovieSceneEntitySystemLinker *Linker)
Definition MovieSceneOverlappingEntityTracker.h:619
void AddReferencedObjects(UMovieSceneEntitySystemLinker *Linker, FReferenceCollector &ReferenceCollector)
Definition MovieSceneOverlappingEntityTracker.h:640
void Initialize(UMovieSceneEntitySystem *OwningSystem)
Definition MovieSceneOverlappingEntityTracker.h:563
TWeakObjectPtr< UMovieSceneEntitySystem > WeakOwningSystem
Definition MovieSceneOverlappingEntityTracker.h:668
~TOverlappingEntityTracker_WithGarbage()
Definition MovieSceneOverlappingEntityTracker.h:551
void TagGarbage(UMovieSceneEntitySystemLinker *Linker)
Definition MovieSceneOverlappingEntityTracker.h:578
Definition MovieSceneComponentPtr.h:195