UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneEntitySystemTask.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
16
17#include "Templates/AndOrNot.h"
18
19#include <initializer_list>
20
21namespace UE
22{
23namespace MovieScene
24{
25
28
29template<typename> struct TReadAccess;
30template<typename> struct TOptionalReadAccess;
31template<typename> struct TWriteAccess;
32template<typename> struct TOptionalWriteAccess;
33template<typename...> struct TReadOneOfAccessor;
34template<typename...> struct TReadOneOrMoreOfAccessor;
35
36template<typename...> struct TPrelockedDataOffsets;
37
38template<typename...> struct TFilteredEntityTask;
39template<typename...> struct TEntityTaskComponents;
40template<typename...> struct TEntityTaskComponentsImpl;
41
42template<typename, typename...> struct TEntityTask;
43template<typename, typename...> struct TEntityTaskBase;
44template<typename, typename...> struct TScheduledEntityTask;
45template<typename, typename...> struct TEntityAllocationTask;
46template<typename, typename...> struct TEntityAllocationTaskBase;
47template<typename> struct TUnstructuredTask;
48
49namespace Private
50{
51 template<typename...> struct TComponentTypeIDsImpl;
52}
53template<typename...T>
55
56
57template<int32 NumComponents, bool AutoExpandAccessors>
59
75
77template<typename T>
79{
80 enum
81 {
105 };
106};
107
109template<typename T>
113
116{
117 template<typename T>
119 {
120 return FEntityIterationResult { true };
121 }
122
124 {
125 return FEntityIterationResult{ In };
126 }
127
128 inline explicit operator bool() const
129 {
130 return Value;
131 }
132
133 bool Value = true;
134};
135
136template <typename TaskType>
137static FTaskID SchedulePreTask(IEntitySystemScheduler*, const FTaskParams&, const TSharedPtr<TaskType>&, void*)
138{
139 return FTaskID::None();
140}
141template <typename TaskType>
142static FTaskID SchedulePostTask(IEntitySystemScheduler*, const FTaskParams&, const TSharedPtr<TaskType>&, void*)
143{
144 return FTaskID::None();
145}
146
147template <typename TaskType, typename TaskImplType>
148static FTaskID SchedulePreTask(IEntitySystemScheduler* InScheduler, const FTaskParams& Params, const TSharedPtr<TaskType>& Context, TaskImplType* Unused, decltype(&TaskImplType::PreTask)* = 0)
149{
150 struct FCallPreTask
151 {
152 static void Run(const ITaskContext* Context, FEntityAllocationWriteContext WriteContext)
153 {
154 static_cast<const TaskType*>(Context)->PreTask();
155 }
156 };
157
159 return InScheduler->AddTask(Params, Context, Function);
160}
161template <typename TaskType, typename TaskImplType>
162static FTaskID SchedulePostTask(IEntitySystemScheduler* InScheduler, const FTaskParams& Params, const TSharedPtr<TaskType>& Context, TaskImplType* Unused, decltype(&TaskImplType::PostTask)* = 0)
163{
164 struct FCallPostTask
165 {
166 static void Run(const ITaskContext* Context, FEntityAllocationWriteContext WriteContext)
167 {
168 static_cast<const TaskType*>(Context)->PostTask();
169 }
170 };
171
173 return InScheduler->AddTask(Params, Context, Function);
174}
175
179template<typename... T>
180struct TEntityTaskComponents : TEntityTaskComponentsImpl<TMakeIntegerSequence<int, sizeof...(T)>, T...>
181{
182 using Super = TEntityTaskComponentsImpl<TMakeIntegerSequence<int, sizeof...(T)>, T...>;
183
184
189 {
190 TFilteredEntityTask< T... > Filtered(*this);
191 Filtered.FilterAll(InComponentMask);
192 return Filtered;
193 }
194
198 TFilteredEntityTask< T... > FilterAll(std::initializer_list<FComponentTypeID> InComponentTypes)
199 {
200 TFilteredEntityTask< T... > Filtered(*this);
201 Filtered.FilterAll(InComponentTypes);
202 return Filtered;
203 }
204
209 {
210 TFilteredEntityTask< T... > Filtered(*this);
211 Filtered.FilterNone(InComponentMask);
212 return Filtered;
213 }
214
218 TFilteredEntityTask< T... > FilterNone(std::initializer_list<FComponentTypeID> InComponentTypes)
219 {
220 TFilteredEntityTask< T... > Filtered(*this);
221 Filtered.FilterNone(InComponentTypes);
222 return Filtered;
223 }
224
229 {
230 TFilteredEntityTask< T... > Filtered(*this);
231 Filtered.FilterAny(InComponentMask);
232 return Filtered;
233 }
234
238 TFilteredEntityTask< T... > FilterAny(std::initializer_list<FComponentTypeID> InComponentTypes)
239 {
240 TFilteredEntityTask< T... > Filtered(*this);
241 Filtered.FilterAny(InComponentTypes);
242 return Filtered;
243 }
244
249 {
250 TFilteredEntityTask< T... > Filtered(*this);
251 Filtered.FilterOut(InComponentMask);
252 return Filtered;
253 }
254
258 TFilteredEntityTask< T... > FilterOut(std::initializer_list<FComponentTypeID> InComponentTypes)
259 {
260 TFilteredEntityTask< T... > Filtered(*this);
261 Filtered.FilterOut(InComponentTypes);
262 return Filtered;
263 }
264
269 {
270 return TFilteredEntityTask< T... >(*this, InFilter);
271 }
272
277 {
278 this->CommonParams.DesiredThread = InDesiredThread;
279 this->CommonParams.TaskParams.bForceGameThread = (InDesiredThread == ENamedThreads::GameThread || InDesiredThread == ENamedThreads::GameThread_Local);
280 return *this;
281 }
282
287 {
288 this->CommonParams.TaskParams.StatId = InStatId;
289 return *this;
290 }
291
296 {
297 this->CommonParams.TaskParams = InOtherParams;
298 return *this;
299 }
300
311 template<typename TaskImpl, typename... TaskConstructionArgs>
312 FGraphEventRef Dispatch(FEntityManager* EntityManager, const FSystemTaskPrerequisites& Prerequisites, FSystemSubsequentTasks* Subsequents, TaskConstructionArgs&&... InArgs) const
313 {
314 static_assert(sizeof...(T) == 0, "Dispatch() is only for non-structured logic, which means that any call to Read or Write (or their variants) won't do anything -- please remove them");
315
316 checkfSlow(IsInGameThread(), TEXT("Tasks can only be dispatched from the game thread."));
317
318 const bool bRunInline = !ensure(EntityManager->IsLockedDown()) || EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading;
319 if (bRunInline)
320 {
322 Task.Run();
323 return nullptr;
324 }
325 else
326 {
328 this->PopulatePrerequisites(Prerequisites, &GatheredPrereqs);
329
330 ENamedThreads::Type ThisThread = EntityManager->GetDispatchThread();
332
334 .ConstructAndDispatchWhenReady( this->CommonParams, Forward<TaskConstructionArgs>(InArgs)... );
335
336 if (Subsequents)
337 {
338 this->PopulateSubsequents(NewTask, *Subsequents);
339 }
340
341 return NewTask;
342 }
343 }
344
370 template<typename TaskImpl, typename... TaskConstructionArgs>
372 {
373 checkfSlow(IsInGameThread(), TEXT("Tasks can only be dispatched from the game thread."));
374
375 if (!this->IsValid())
376 {
377 return nullptr;
378 }
379
380 // Quick check to prevent dispatching a task that might not have any work to do. We only check the accessors
381 // here, so the task could still early-return with no work done if some custom filters end up matching
382 // nothing. Callers should in this case do their best to prevent useless tasks being dispatched.
383 if (!this->HasAnyWork(EntityManager))
384 {
385 return nullptr;
386 }
387
388 // If this ensure triggers, we are not in the evaluation phase - the callee should be using RunInline_ or Iterate_ variants
389 const bool bRunInline = !ensure(EntityManager->IsLockedDown()) || EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading;
390 if (bRunInline)
391 {
393 TEntityAllocationTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
394 return nullptr;
395 }
396 else
397 {
399 this->PopulatePrerequisites(Prerequisites, &GatheredPrereqs);
400
401 ENamedThreads::Type ThisThread = EntityManager->GetDispatchThread();
403
404 FGraphEventRef NewTask = TGraphTask< TEntityAllocationTask<TaskImpl, T...> >::CreateTask(GatheredPrereqs.Num() != 0 ? &GatheredPrereqs : nullptr, ThisThread)
405 .ConstructAndDispatchWhenReady( EntityManager, *this, Forward<TaskConstructionArgs>(InArgs)... );
406
407 if (Subsequents)
408 {
409 this->PopulateSubsequents(NewTask, *Subsequents);
410 }
411
412 return NewTask;
413 }
414 }
415
416 template<typename TaskImpl>
418 {
419 if (this->IsValid())
420 {
421 TEntityAllocationTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
422 }
423 }
424
450 template<typename TaskImpl, typename... TaskConstructionArgs>
452 {
453 checkfSlow(IsInGameThread(), TEXT("Tasks can only be dispatched from the game thread."));
454
455 if (!this->IsValid())
456 {
457 return nullptr;
458 }
459
460 // See comment in Dispatch_PerAllocation()
461 if (!this->HasAnyWork(EntityManager))
462 {
463 return nullptr;
464 }
465
466 // If this ensure triggers, we are not in the evaluation phase - the callee should be using RunInline_ or Iterate_ variants
467 const bool bRunInline = !ensure(EntityManager->IsLockedDown()) || EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading;
468 if (bRunInline)
469 {
471 TEntityTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
472 return nullptr;
473 }
474 else
475 {
477 this->PopulatePrerequisites(Prerequisites, &GatheredPrereqs);
478
479 ENamedThreads::Type ThisThread = EntityManager->GetDispatchThread();
481
482 FGraphEventRef NewTask = TGraphTask< TEntityTask<TaskImpl, T...> >::CreateTask(GatheredPrereqs.Num() != 0 ? &GatheredPrereqs : nullptr, ThisThread)
483 .ConstructAndDispatchWhenReady( EntityManager, *this, Forward<TaskConstructionArgs>(InArgs)... );
484
485 if (Subsequents)
486 {
487 this->PopulateSubsequents(NewTask, *Subsequents);
488 Subsequents->AddRootTask(NewTask);
489 }
490
491 return NewTask;
492 }
493 }
494
495 template<typename TaskImpl, typename... TaskConstructionArgs>
497 {
498 FTaskParams FinalParams = this->CommonParams.TaskParams;
500
501#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
503#endif
504
506 EntityManager,
511 }
512
513 template<typename TaskImpl, typename... TaskConstructionArgs>
515 {
516 FTaskParams FinalParams = this->CommonParams.TaskParams;
518
519#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
521#endif
522
524 EntityManager,
529 }
530
531 template<typename TaskImpl, typename... TaskConstructionArgs>
533 {
534 FTaskParams FinalParams = this->CommonParams.TaskParams;
536
537#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
539#endif
540
542 EntityManager,
547 }
548
549 template<typename TaskImpl, typename... TaskConstructionArgs>
551 {
552 FTaskParams FinalParams = this->CommonParams.TaskParams;
554
555#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
557#endif
558
560 EntityManager,
565 }
566
567 template<typename TaskImpl>
568 void RunInline_PerEntity(FEntityManager* EntityManager, TaskImpl& Task) const
569 {
570 if (this->IsValid())
571 {
572 TEntityTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
573 }
574 }
575
576public:
577
579 {
580 static_assert(sizeof...(T) == 0, "Default construction is only supported for TEntityTaskComponents<>");
581 }
582
583 template<typename... ConstructionTypes>
587
588private:
589
590 template<typename TaskImpl, typename... TaskConstructionArgs>
591 FTaskID ScheduleImpl(FEntityManager* EntityManager, IEntitySystemScheduler* InScheduler, const FTaskParams& TaskParams, TaskFunctionPtr InFunction, TaskConstructionArgs&&... InArgs) const
592 {
593 if (!this->IsValid())
594 {
595 return FTaskID::None();
596 }
597
598 if (!this->HasAnyWork(EntityManager))
599 {
600 return FTaskID::None();
601 }
602
603 using TaskType = TScheduledEntityTask<TaskImpl, T...>;
605
606 FComponentMask ReadDependencies, WriteDependencies;
607 this->PopulateReadWriteDependencies(ReadDependencies, WriteDependencies);
608
609 FEntityComponentFilter Filter;
610 this->PopulateFilter(&Filter);
611
613 {
614 this->PreLockComponentHeaders(Allocation, OutComponentHeaders);
615 };
616 FTaskID TaskID = InScheduler->CreateForkedAllocationTask(TaskParams, SharedTask, InFunction, PrelockComponentData, Filter, ReadDependencies, WriteDependencies);
617
618 if (!TaskID && TaskParams.bForcePrePostTask)
619 {
620 TaskID = InScheduler->AddNullTask();
621 }
622
623 if (TaskID)
624 {
625 FTaskID PreTask = SchedulePreTask(InScheduler, TaskParams, SharedTask, (TaskImpl*)0);
626 InScheduler->AddChildFront(TaskID, PreTask);
627
628 FTaskID PostTask = SchedulePostTask(InScheduler, TaskParams, SharedTask, (TaskImpl*)0);
629 InScheduler->AddChildBack(TaskID, PostTask);
630 }
631
632 return TaskID;
633 }
634};
635
636
637template<int... Indices, typename... T>
638struct TEntityTaskComponentsImpl<TIntegerSequence<int, Indices...>, T...>
639{
644 {
645 return TEntityTaskComponents< T..., FEntityIDAccess >( CommonParams, Accessors.template Get<Indices>()..., FEntityIDAccess{} );
646 }
647
654 template<typename U>
656 {
657 return TEntityTaskComponents<T..., TReadAccess<U> >(CommonParams, Accessors.template Get<Indices>()..., TReadAccess<U>(ComponentType));
658 }
659
666 template<typename... U>
668 {
669 return TEntityTaskComponents<T..., TReadOneOfAccessor<U...> >( CommonParams, Accessors.template Get<Indices>()..., TReadOneOfAccessor<U...>(ComponentTypes...) );
670 }
671
677 template<typename... U>
679 {
680 return TEntityTaskComponents<T..., TReadOneOrMoreOfAccessor<U...> >(CommonParams, Accessors.template Get<Indices>()..., TReadOneOrMoreOfAccessor<U...>(ComponentTypes...));
681 }
682
688 template<typename... U>
690 {
691 return TEntityTaskComponents<T..., TReadAccess<U>... >( CommonParams, Accessors.template Get<Indices>()..., TReadAccess<U>(ComponentTypes)... );
692 }
693
699 template<typename... U>
701 {
702 return ReadAllOf(TypeIDs, TMakeIntegerSequence<int, sizeof...(U)>());
703 }
704 template<typename... U, int... ExtraIndices>
706 {
707 return TEntityTaskComponents<T..., TReadAccess<U>... >( CommonParams, Accessors.template Get<Indices>()..., TReadAccess<U>(TypeIDs.GetType(ExtraIndices).template ReinterpretCast<U>())... );
708 }
709
715 template<typename... U>
717 {
718 return TEntityTaskComponents<T..., TOptionalReadAccess<U>... >( CommonParams, Accessors.template Get<Indices>()..., TOptionalReadAccess<U>(ComponentTypes)... );
719 }
720
728 {
729 return TEntityTaskComponents<T..., FErasedReadAccess >(CommonParams, Accessors.template Get<Indices>()..., FErasedReadAccess(ComponentType));
730 }
731
742
747 template<typename U>
752
759 template<typename U>
761 {
762 return TEntityTaskComponents<T..., TWriteAccess<U> >(CommonParams, Accessors.template Get<Indices>()..., TWriteAccess<U>(ComponentType));
763 }
764
770 template<typename... U>
772 {
773 return TEntityTaskComponents<T..., TWriteAccess<U>... >( CommonParams, Accessors.template Get<Indices>()..., TWriteAccess<U>(ComponentTypes)... );
774 }
775
783 {
784 return TEntityTaskComponents<T..., FErasedWriteAccess >(CommonParams, Accessors.template Get<Indices>()..., FErasedWriteAccess(ComponentType));
785 }
786
787
792 template<typename U>
797
799 {
800 return TEntityTaskComponents<T..., FFilterMatchPassthrough >(CommonParams, Accessors.template Get<Indices>()..., FFilterMatchPassthrough{ InFilter });
801 }
802
804 {
805 bool bAnyWrittenTo = true;
806
807 int Temp[] = { ( bAnyWrittenTo |= HasBeenWrittenToSince(&Accessors.template Get<Indices>(), InSystemVersion), 0)... };
808 (void)Temp;
809
810 return bAnyWrittenTo;
811 }
812
816 bool IsValid() const
817 {
818 bool bAllValid = true;
819
820 int Temp[] = { ( bAllValid &= IsAccessorValid(&Accessors.template Get<Indices>()), 0)..., 0 };
821 (void)Temp;
822
823 return bAllValid;
824 }
825
829 bool HasAnyWork(const FEntityManager* EntityManager) const
830 {
831 bool bAllHaveWork = true;
832
833 int Temp[] = { ( bAllHaveWork &= HasAccessorWork(EntityManager, &Accessors.template Get<Indices>()), 0)..., 0 };
834 (void)Temp;
835
836 return bAllHaveWork;
837 }
838
841 {
842 int Temp[] = { (AddAccessorToFilter(&Accessors.template Get<Indices>(), OutFilter), 0)..., 0 };
843 (void)Temp;
844 }
845
848 {
849 // Gather any root tasks
851
852 int Temp[] = { (UE::MovieScene::PopulatePrerequisites(&Accessors.template Get<Indices>(), InPrerequisites, OutGatheredPrereqs), 0)..., 0 };
853 (void)Temp;
854 }
855
858 {
859 OutSubsequents.AddRootTask(InEvent);
860
861 int Temp[] = { (UE::MovieScene::PopulateSubsequents(&Accessors.template Get<Indices>(), InEvent, OutSubsequents), 0)..., 0 };
862 (void)Temp;
863 }
864
866 {
868 int32 StartIndex = OutComponentHeaders.Num();
870 ( Accessors.template Get<Indices>().PreLockComponentData(Item, &OutComponentHeaders[StartIndex + PrelockedDataOffsets.StartOffset[Indices]]), ... );
871 }
872
878
885 template<typename Callback>
886 void Iterate_PerAllocation(FEntityManager* EntityManager, Callback&& InCallback) const
887 {
889 PopulateFilter(&Filter);
890 Iterate_PerAllocationImpl(EntityManager, Filter, InCallback);
891 }
892
899 template<typename Callback>
900 void Iterate_PerEntity(FEntityManager* EntityManager, Callback&& InCallback) const
901 {
903 PopulateFilter(&Filter);
904 Iterate_PerEntityImpl(EntityManager, Filter, InCallback);
905 }
906
914 template<typename Callback>
915 void Iterate_PerEntityImpl(FEntityManager* EntityManager, const FEntityComponentFilter& Filter, Callback&& InCallback) const
916 {
917 using TupleType = TTuple< decltype(Accessors.template Get<Indices>().LockComponentData(DeclVal<FEntityAllocationIteratorItem>(), DeclVal<FEntityAllocationWriteContext>()))... >;
918
919 if (IsValid())
920 {
921 FEntityAllocationWriteContext WriteContext(*EntityManager);
922
923 EComponentHeaderLockMode LockMode = EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading
926
927 for (FEntityAllocationIteratorItem Item : EntityManager->Iterate(&Filter))
928 {
930
931 FEntityAllocation* Allocation = Item.GetAllocation();
932 FEntityAllocationMutexGuard LockGuard(Allocation, LockMode);
933
934 // Lock the components we want to access
935 TupleType ComponentData( Accessors.template Get<Indices>().LockComponentData(Item, WriteContext)... );
936
937 const int32 Num = Allocation->Num();
938 for (int32 ComponentOffset = 0; ComponentOffset < Num && Result.Value; ++ComponentOffset )
939 {
940 Result = (InCallback( GetComponentAtIndex(&ComponentData.template Get<Indices>(), ComponentOffset)... ), Result);
941 }
942 }
943 }
944 }
945
953 template<typename Callback>
955 {
956 if (IsValid())
957 {
958 FEntityAllocationWriteContext WriteContext(*EntityManager);
959
960 EComponentHeaderLockMode LockMode = EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading
963
964 for (FEntityAllocationIteratorItem Item : EntityManager->Iterate(&Filter))
965 {
966 FEntityAllocationMutexGuard LockGuard(Item.GetAllocation(), LockMode);
967
968 // Lock on the components we want to access
969 auto ComponentData = MakeTuple( Accessors.template Get<Indices>().LockComponentData(Item, WriteContext)... );
970
971 FEntityIterationResult Result = (InCallback(Item, ComponentData.template Get<Indices>()...), FEntityIterationResult{});
972
973 if (!Result)
974 {
975 break;
976 }
977 }
978 }
979 }
980
981public:
982
986 template<int Index>
987 inline auto GetAccessor() const
988 {
989 static_assert(Index < sizeof...(T), "Invalid component index specified");
990 return Accessors.template Get<Index>();
991 }
992
993 FString ToString(FEntityManager* EntityManager) const
994 {
995#if UE_MOVIESCENE_ENTITY_DEBUG
996 FString Result;
997
998 int Unused[] = { (AccessorToString(&Accessors.template Get<Indices>(), EntityManager, Result), 0)... };
999 (void)Unused;
1000
1001 return Result;
1002#else
1003 return TEXT("<debug info compiled out> - enable UE_MOVIESCENE_ENTITY_DEBUG");
1004#endif
1005 }
1006
1007protected:
1008
1011
1012 template<typename... ConstructionTypes>
1017
1018protected:
1019
1020 template<typename...> friend struct TEntityTaskComponentsImpl;
1021
1023
1024public:
1025
1027};
1028
1030{
1031 template<typename... T>
1032 inline static void ForEachAllocation(T&&...)
1033 {}
1034
1035 template<typename... T>
1036 inline static void ForEachEntity(T&&...)
1037 {}
1038};
1039
1040
1048
1049
1050template<typename... T>
1052{
1054 : Components(InComponents)
1055 {
1056 Components.PopulateFilter(&Filter);
1057 }
1059 : Components(InComponents)
1060 , Filter(InFilter)
1061 {
1062 Components.PopulateFilter(&Filter);
1063 }
1064
1065
1070 {
1072 return *this;
1073 }
1074
1078 TFilteredEntityTask< T... >& FilterAll(std::initializer_list<FComponentTypeID> InComponentTypes)
1079 {
1081 return *this;
1082 }
1083
1088 {
1089 Filter.None(InComponentMask);
1090 return *this;
1091 }
1092
1096 TFilteredEntityTask< T... >& FilterNone(std::initializer_list<FComponentTypeID> InComponentTypes)
1097 {
1099 return *this;
1100 }
1101
1106 {
1108 return *this;
1109 }
1110
1114 TFilteredEntityTask< T... >& FilterAny(std::initializer_list<FComponentTypeID> InComponentTypes)
1115 {
1117 return *this;
1118 }
1119
1124 {
1125 Filter.Deny(InComponentMask);
1126 return *this;
1127 }
1128
1132 TFilteredEntityTask< T... >& FilterOut(std::initializer_list<FComponentTypeID> InComponentTypes)
1133 {
1135 return *this;
1136 }
1137
1142 {
1143 Filter.Combine(InFilter);
1144 return *this;
1145 }
1146
1151 {
1152 Components.CommonParams.DesiredThread = InDesiredThread;
1153 Components.CommonParams.TaskParams.bForceGameThread = (InDesiredThread == ENamedThreads::GameThread || InDesiredThread == ENamedThreads::GameThread_Local);
1154 return *this;
1155 }
1156
1161 {
1162 Components.CommonParams.TaskParams.StatId = InStatId;
1163 return *this;
1164 }
1165
1170 {
1171 Components.CommonParams.TaskParams = InOtherParams;
1172 return *this;
1173 }
1174
1179 {
1180 return Components.CommonParams.DesiredThread;
1181 }
1182
1187 {
1188 return Components.CommonParams.TaskParams.StatId;
1189 }
1190
1194 bool ShouldBreakOnRun() const
1195 {
1196 return Components.CommonParams.bBreakOnRun;
1197 }
1198
1203 {
1204 return Filter;
1205 }
1206
1211 {
1212 return Components;
1213 }
1214
1215 TFilteredEntityTask<T...>& AddDynamicReadDependency(std::initializer_list<FComponentTypeID> InReadDependencies)
1216 {
1217 DynamicReadMask.SetAll(InReadDependencies);
1218 return *this;
1219 }
1220 template<typename ComponentType>
1222 {
1224 {
1225 DynamicReadMask.Set(Component);
1226 }
1227 return *this;
1228 }
1234
1235 TFilteredEntityTask<T...>& AddDynamicWriteDependency(std::initializer_list<FComponentTypeID> InWriteDependencies)
1236 {
1237 DynamicWriteMask.SetAll(InWriteDependencies);
1238 return *this;
1239 }
1240 template<typename ComponentType>
1242 {
1244 {
1245 DynamicWriteMask.Set(Component);
1246 }
1247 return *this;
1248 }
1254
1280 template<typename TaskImpl, typename... TaskConstructionArgs>
1282 {
1283 checkfSlow(IsInGameThread(), TEXT("Tasks can only be dispatched from the game thread."));
1284
1285 if (!Components.IsValid())
1286 {
1287 return nullptr;
1288 }
1289
1290 // See comment in TEntityTaskComponents' Dispatch_PerAllocation()
1291 if (!Components.HasAnyWork(EntityManager))
1292 {
1293 return nullptr;
1294 }
1295
1296 // If this ensure triggers, we are not in the evaluation phase - the callee should be using RunInline_ or Iterate_ variants
1297 const bool bRunInline = !ensure(EntityManager->IsLockedDown()) || EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading;
1298 if (bRunInline)
1299 {
1301 TEntityAllocationTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
1302 return nullptr;
1303 }
1304 else
1305 {
1307 Components.PopulatePrerequisites(Prerequisites, &GatheredPrereqs);
1308
1309 ENamedThreads::Type ThisThread = EntityManager->GetDispatchThread();
1311
1312 FGraphEventRef NewTask = TGraphTask< TEntityAllocationTask<TaskImpl, T...> >::CreateTask(GatheredPrereqs.Num() != 0 ? &GatheredPrereqs : nullptr, ThisThread)
1313 .ConstructAndDispatchWhenReady( EntityManager, *this, Forward<TaskConstructionArgs>(InArgs)... );
1314
1315 if (Subsequents)
1316 {
1317 Components.PopulateSubsequents(NewTask, *Subsequents);
1318 }
1319
1320 return NewTask;
1321 }
1322 }
1323
1324 template<typename TaskImpl>
1326 {
1327 if (Components.IsValid())
1328 {
1329 TEntityAllocationTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
1330 }
1331 }
1332
1358 template<typename TaskImpl, typename... TaskConstructionArgs>
1360 {
1361 checkfSlow(IsInGameThread(), TEXT("Tasks can only be dispatched from the game thread."));
1362
1363 if (!Components.IsValid())
1364 {
1365 return nullptr;
1366 }
1367
1368 // See comment in TEntityTaskComponents' Dispatch_PerAllocation()
1369 if (!Components.HasAnyWork(EntityManager))
1370 {
1371 return nullptr;
1372 }
1373
1374 // If this ensure triggers, we are not in the evaluation phase - the callee should be using RunInline_ or Iterate_ variants
1375 const bool bRunInline = !ensure(EntityManager->IsLockedDown()) || EntityManager->GetThreadingModel() == EEntityThreadingModel::NoThreading;
1376 if (bRunInline)
1377 {
1379 TEntityTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
1380 return nullptr;
1381 }
1382 else
1383 {
1385 Components.PopulatePrerequisites(Prerequisites, &GatheredPrereqs);
1386
1387 ENamedThreads::Type ThisThread = EntityManager->GetDispatchThread();
1389
1390 FGraphEventRef NewTask = TGraphTask< TEntityTask<TaskImpl, T...> >::CreateTask(GatheredPrereqs.Num() != 0 ? &GatheredPrereqs : nullptr, ThisThread)
1391 .ConstructAndDispatchWhenReady( EntityManager, *this, Forward<TaskConstructionArgs>(InArgs)... );
1392
1393 if (Subsequents)
1394 {
1395 Components.PopulateSubsequents(NewTask, *Subsequents);
1396 }
1397
1398 return NewTask;
1399 }
1400 }
1401
1402 template<typename TaskImpl, typename... TaskConstructionArgs>
1404 {
1405 FTaskParams FinalParams = this->Components.CommonParams.TaskParams;
1406 FinalParams.bSerialTasks = false;
1407
1408#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
1410#endif
1411
1413 EntityManager,
1418 }
1419
1420 template<typename TaskImpl, typename... TaskConstructionArgs>
1422 {
1423 FTaskParams FinalParams = this->Components.CommonParams.TaskParams;
1424 FinalParams.bSerialTasks = false;
1425
1426#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
1428#endif
1429
1431 EntityManager,
1436 }
1437
1438 template<typename TaskImpl, typename... TaskConstructionArgs>
1440 {
1441 FTaskParams FinalParams = this->Components.CommonParams.TaskParams;
1442 FinalParams.bSerialTasks = true;
1443
1444#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
1446#endif
1447
1449 EntityManager,
1454 }
1455
1456 template<typename TaskImpl, typename... TaskConstructionArgs>
1458 {
1459 FTaskParams FinalParams = this->Components.CommonParams.TaskParams;
1460 FinalParams.bSerialTasks = true;
1461
1462#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
1464#endif
1465
1467 EntityManager,
1472 }
1473
1474 template<typename TaskImpl>
1476 {
1477 if (Components.IsValid())
1478 {
1479 TEntityTaskBase<TaskImpl, T...>(EntityManager, *this).Run(Task);
1480 }
1481 }
1482
1489 template<typename Callback>
1490 void Iterate_PerEntity(FEntityManager* EntityManager, Callback&& InCallback) const
1491 {
1492 Components.Iterate_PerEntityImpl(EntityManager, Filter, Forward<Callback>(InCallback));
1493 }
1494
1501 template<typename Callback>
1502 void Iterate_PerAllocation(FEntityManager* EntityManager, Callback&& InCallback) const
1503 {
1504 Components.Iterate_PerAllocationImpl(EntityManager, Filter, Forward<Callback>(InCallback));
1505 }
1506
1507private:
1508
1509 template<typename TaskImpl, typename... TaskConstructionArgs>
1510 FTaskID ScheduleImpl(FEntityManager* EntityManager, IEntitySystemScheduler* InScheduler, const FTaskParams& TaskParams, TaskFunctionPtr InFunction, TaskConstructionArgs&&... InArgs) const
1511 {
1512 if (!Components.IsValid())
1513 {
1514 return FTaskID::None();
1515 }
1516
1517 if (!Components.HasAnyWork(EntityManager))
1518 {
1519 return FTaskID::None();
1520 }
1521
1522 using TaskType = TScheduledEntityTask<TaskImpl, T...>;
1524
1525 FComponentMask ReadDependencies = DynamicReadMask, WriteDependencies = DynamicWriteMask;
1526 Components.PopulateReadWriteDependencies(ReadDependencies, WriteDependencies);
1527
1529 {
1530 this->Components.PreLockComponentHeaders(Allocation, OutComponentHeaders);
1531 };
1532
1533 FTaskID TaskID = InScheduler->CreateForkedAllocationTask(TaskParams, SharedTask, InFunction, PrelockComponentData, Filter, ReadDependencies, WriteDependencies);
1534
1535 if (!TaskID && TaskParams.bForcePrePostTask)
1536 {
1537 TaskID = InScheduler->AddNullTask();
1538 }
1539
1540 if (TaskID)
1541 {
1542 FTaskID PreTask = SchedulePreTask(InScheduler, TaskParams, SharedTask, (TaskImpl*)0);
1543 InScheduler->AddChildFront(TaskID, PreTask);
1544
1545 FTaskID PostTask = SchedulePostTask(InScheduler, TaskParams, SharedTask, (TaskImpl*)0);
1546 InScheduler->AddChildBack(TaskID, PostTask);
1547 }
1548
1549 return TaskID;
1550 }
1551
1552private:
1553
1554 TEntityTaskComponents<T...> Components;
1555
1556 FEntityComponentFilter Filter;
1557 FComponentMask DynamicReadMask;
1558 FComponentMask DynamicWriteMask;
1559};
1560
1561template<typename TaskImpl, typename... ComponentTypes>
1563{
1569
1575
1577 {
1578 return FilteredTask.GetStatId();
1579 }
1580
1585
1586 void Run(TaskImpl& TaskImplInstance)
1587 {
1588 UE_LOG(LogMovieSceneECS, VeryVerbose, TEXT("Running entity task the following components: %s"), *FilteredTask.GetComponents().ToString(EntityManager));
1589
1590 PreTask(&TaskImplInstance);
1591
1595
1597 {
1598 FEntityAllocationMutexGuard LockGuard(Item, LockMode);
1599 Caller::ForEachEntityImpl(TaskImplInstance, Item, WriteContext, FilteredTask.GetComponents());
1600 }
1601
1602 PostTask(&TaskImplInstance);
1603 }
1604
1605protected:
1606
1607 static void PreTask(void*, ...){}
1608 template <typename T> static void PreTask(T* InTask, decltype(&T::PreTask)* = 0)
1609 {
1610 InTask->PreTask();
1611 }
1612
1613 static void PostTask(void*, ...){}
1614 template <typename T> static void PostTask(T* InTask, decltype(&T::PostTask)* = 0)
1615 {
1616 InTask->PostTask();
1617 }
1618
1620
1624};
1625
1626template<typename TaskImpl, typename... ComponentTypes>
1627struct TEntityTask : TEntityTaskBase<TaskImpl, ComponentTypes...>
1628{
1629 template<typename... ArgTypes>
1632 , TaskImplInstance{ Forward<ArgTypes>(InArgs)... }
1633 {}
1634
1635 template<typename... ArgTypes>
1638 , TaskImplInstance{ Forward<ArgTypes>(InArgs)... }
1639 {}
1640
1645
1647 {
1648 if (this->FilteredTask.ShouldBreakOnRun())
1649 {
1651 }
1652
1654 {
1655 checkf(CurrentThread == this->FilteredTask.GetDesiredThread(), TEXT("MovieScene evaluation task is not being run on its desired thread"));
1656 }
1657
1658 this->Run(TaskImplInstance);
1659 }
1660
1661private:
1662
1663 TaskImpl TaskImplInstance;
1664};
1665
1666template<typename TaskImpl, typename... ComponentTypes>
1668{
1669 template<typename... ArgTypes>
1671 : TaskImplInstance{ Forward<ArgTypes>(InArgs)... }
1672 , Components(InComponents)
1673 {}
1674
1675 void PreTask() const
1676 {
1677 // This const_cast is ok because we know nothing else can touch this task in PreTask
1678 PreTaskImpl(const_cast<TaskImpl*>(&TaskImplInstance));
1679 }
1680 void PostTask() const
1681 {
1682 // This const_cast is ok because we know nothing else can touch this task in PostTask
1683 PostTaskImpl(const_cast<TaskImpl*>(&TaskImplInstance));
1684 }
1685
1687 {
1688 const TScheduledEntityTask<TaskImpl, ComponentTypes...>* This = static_cast<const TScheduledEntityTask<TaskImpl, ComponentTypes...>*>(Context);
1689 Caller::ForEachEntityImpl(This->TaskImplInstance, Item, PreLockedData, WriteContext, This->Components);
1690 }
1692 {
1693 const TScheduledEntityTask<TaskImpl, ComponentTypes...>* This = static_cast<const TScheduledEntityTask<TaskImpl, ComponentTypes...>*>(Context);
1694 Caller::ForEachAllocationImpl(This->TaskImplInstance, Item, PreLockedData, WriteContext, This->Components);
1695 }
1696private:
1697
1698 static void PreTaskImpl(void*, ...){}
1699 template <typename T> static void PreTaskImpl(T* InTask, decltype(&T::PreTask)* = 0)
1700 {
1701 InTask->PreTask();
1702 }
1703
1704 static void PostTaskImpl(void*, ...){}
1705 template <typename T> static void PostTaskImpl(T* InTask, decltype(&T::PostTask)* = 0)
1706 {
1707 InTask->PostTask();
1708 }
1709
1710 using Caller = TEntityTaskCaller<sizeof...(ComponentTypes), TEntityTaskTraits<TaskImpl>::AutoExpandAccessors >;
1711
1712 TaskImpl TaskImplInstance;
1713 TEntityTaskComponents<ComponentTypes...> Components;
1714};
1715
1716template<typename TaskImpl, typename... ComponentTypes>
1718{
1724
1730
1732 {
1733 return ComponentFilter.GetStatId();
1734 }
1735
1740
1741 void Run(TaskImpl& TaskImplInstance)
1742 {
1743 UE_LOG(LogMovieSceneECS, VeryVerbose, TEXT("Running entity task the following components: %s"), *ComponentFilter.GetComponents().ToString(EntityManager));
1744
1745 PreTask(&TaskImplInstance);
1746
1750
1752 {
1753 FEntityAllocationMutexGuard LockGuard(Item.GetAllocation(), LockMode);
1754 Caller::ForEachAllocationImpl(TaskImplInstance, Item, WriteContext, ComponentFilter.GetComponents());
1755 }
1756
1757 PostTask(&TaskImplInstance);
1758 }
1759
1760private:
1761
1762 static void PreTask(void*, ...){}
1763 template <typename T> static void PreTask(T* InTask, decltype(&T::PreTask)* = 0)
1764 {
1765 InTask->PreTask();
1766 }
1767
1768 static void PostTask(void*, ...){}
1769 template <typename T> static void PostTask(T* InTask, decltype(&T::PostTask)* = 0)
1770 {
1771 InTask->PostTask();
1772 }
1773
1774protected:
1775
1777
1781};
1782
1783template<typename TaskImpl, typename... ComponentTypes>
1784struct TEntityAllocationTask : TEntityAllocationTaskBase<TaskImpl, ComponentTypes...>
1785{
1786 template<typename... ArgTypes>
1791
1792 template<typename... ArgTypes>
1797
1802
1804 {
1806 {
1808 }
1809
1811 {
1812 checkf(CurrentThread == this->ComponentFilter.GetDesiredThread(), TEXT("MovieScene evaluation task is not being run on its desired thread"));
1813 }
1814
1815 this->Run(TaskImplInstance);
1816 }
1817
1818private:
1819
1820 TaskImpl TaskImplInstance;
1821};
1822
1823template<typename TaskImpl>
1825{
1826 template<typename... ArgTypes>
1828 : TaskImplInstance{ Forward<ArgTypes>(InArgs)... }
1829 , CommonParams(InCommonParams)
1830 {}
1831
1833 {
1834 return CommonParams.TaskParams.StatId;
1835 }
1836
1838 {
1839 return CommonParams.DesiredThread;
1840 }
1841
1846
1848 {
1849 if (CommonParams.bBreakOnRun)
1850 {
1852 }
1853
1854 if ((CommonParams.DesiredThread & ENamedThreads::AnyThread) == 0)
1855 {
1856 checkf(CurrentThread == CommonParams.DesiredThread, TEXT("MovieScene evaluation task is not being run on its desired thread"));
1857 }
1858
1859 UE_LOG(LogMovieSceneECS, VeryVerbose, TEXT("Running unstructured task"));
1860
1861 TaskImplInstance.Run();
1862 }
1863
1864private:
1865
1866 TaskImpl TaskImplInstance;
1867
1868 FCommonEntityTaskParams CommonParams;
1869};
1870
1871template<typename...> struct TEntityTaskCaller_AutoExpansion;
1872
1873
1874template<typename ...AccessorTypes>
1876{
1877 static constexpr int32 Num = (... + AccessorTypes::PreLockedDataNum);
1878
1879 int32 StartOffset[sizeof...(AccessorTypes)]={};
1880
1882 {
1883 int Index = 0, DataIndex = 0;
1884 (..., Assign(Index, DataIndex, AccessorTypes::PreLockedDataNum));
1885 }
1886 constexpr void Assign(int& Index, int& DataIndex, int DataSize)
1887 {
1888 StartOffset[Index] = DataIndex;
1889 DataIndex += DataSize;
1890 ++Index;
1891 }
1892};
1893
1894template<int... Indices>
1896{
1897 template<typename TaskImpl, typename... AccessorTypes>
1899 {
1901
1903 auto ResolvedComponentData = MakeTuple( Components.template GetAccessor<Indices>().ResolvePreLockedComponentData(Item, &PreLockedData[PrelockedDataOffsets.StartOffset[Indices]], WriteContext)... );
1904
1905 const int32 Num = Item.GetAllocation()->Num();
1906 for (int32 ComponentOffset = 0; ComponentOffset < Num && Result.Value; ++ComponentOffset )
1907 {
1908 Result = (TaskImplInstance.ForEachEntity(GetComponentAtIndex(&ResolvedComponentData.template Get<Indices>(), ComponentOffset)... ), Result);
1909 }
1910 }
1911
1912 template<typename TaskImpl, typename... AccessorTypes>
1914 {
1916
1917 // Lock the components we want to access
1918 auto LockedComponentData = MakeTuple( Components.template GetAccessor<Indices>().LockComponentData(Item, WriteContext)... );
1919
1920 const int32 Num = Item.GetAllocation()->Num();
1921 for (int32 ComponentOffset = 0; ComponentOffset < Num && Result.Value; ++ComponentOffset )
1922 {
1923 Result = (TaskImplInstance.ForEachEntity(GetComponentAtIndex(&LockedComponentData.template Get<Indices>(), ComponentOffset)... ), Result);
1924 }
1925 }
1926
1927 template<typename TaskImpl, typename... AccessorTypes>
1929 {
1931 const FEntityAllocation* Allocation = Item.GetAllocation();
1932 TaskImplInstance.ForEachAllocation(Item, Components.template GetAccessor<Indices>().ResolvePreLockedComponentData(Item, &PreLockedData[PrelockedDataOffsets.StartOffset[Indices]], WriteContext)...);
1933 }
1934
1935 template<typename TaskImpl, typename... AccessorTypes>
1937 {
1938 auto LockedComponentData = MakeTuple( Components.template GetAccessor<Indices>().LockComponentData(Item, WriteContext)... );
1939 TaskImplInstance.ForEachAllocation(Item, LockedComponentData.template Get<Indices>()...);
1940 }
1941};
1942
1943template<int NumComponents>
1944struct TEntityTaskCaller<NumComponents, true> : TEntityTaskCaller_AutoExpansion<TMakeIntegerSequence<int, NumComponents>>
1945{
1946};
1947
1948template<int32 NumComponents>
1949struct TEntityTaskCaller<NumComponents, false>
1950{
1951 template<typename TaskImpl>
1952 inline static void ForEachEntityImpl(TaskImpl& TaskImplInstance, ...)
1953 {
1954 static_assert(!std::is_same_v<TaskImpl, TaskImpl>, "non-expanded entity iteration is not supported");
1955 }
1956
1957 template<typename TaskImpl, typename... AccessorTypes>
1959 {
1960 TaskImplInstance.ForEachAllocation(Item, Components, PreLockedData);
1961 }
1962
1963 template<typename TaskImpl, typename... AccessorTypes>
1965 {
1966 TaskImplInstance.ForEachAllocation(Item, Components);
1967 }
1968};
1969
1970
1971} // namespace MovieScene
1972} // namespace UE
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define checkfSlow(expr, format,...)
Definition AssertionMacros.h:333
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define DECLARE_CYCLE_STAT(CounterName, StatId, GroupId)
Definition Stats.h:669
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
#define UE_DEBUG_BREAK()
Definition GenericPlatformMisc.h:47
typename UE4IntegerSequence_Private::TMakeIntegerSequenceImpl< T, N >::Type TMakeIntegerSequence
Definition IntegerSequence.h:31
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
@ Num
Definition MetalRHIPrivate.h:234
const bool
Definition NetworkReplayStreaming.h:178
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
constexpr TTuple< std::decay_t< Types >... > MakeTuple(Types &&... Args)
Definition Tuple.h:794
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
Definition TaskGraphInterfaces.h:598
Definition SharedPointer.h:692
Definition TVariant.h:48
Definition MovieSceneEntityManager.h:81
MOVIESCENE_API EEntityThreadingModel GetThreadingModel() const
Definition MovieSceneEntityManager.cpp:609
MOVIESCENE_API FEntityAllocationIteratorProxy Iterate(const FEntityComponentFilter *InFilter) const
Definition MovieSceneEntityManager.cpp:1027
Definition IMovieSceneTaskScheduler.h:162
Type
Definition TaskGraphInterfaces.h:57
@ GameThread
Definition TaskGraphInterfaces.h:61
@ AnyHiPriThreadHiPriTask
Definition TaskGraphInterfaces.h:101
@ GameThread_Local
Definition TaskGraphInterfaces.h:97
@ AnyThread
Definition TaskGraphInterfaces.h:67
Type
Definition TaskGraphInterfaces.h:249
@ TrackSubsequents
Definition TaskGraphInterfaces.h:251
Definition OverriddenPropertySet.cpp:45
void Run(FMassRuntimePipeline &RuntimePipeline, FProcessingContext &ProcessingContext)
Definition MassExecutor.cpp:25
TVariant< UnboundTaskFunctionPtr, AllocationFunctionPtr, AllocationItemFunctionPtr, PreLockedAllocationItemFunctionPtr > TaskFunctionPtr
Definition IMovieSceneTaskScheduler.h:159
EComponentHeaderLockMode
Definition MovieSceneEntitySystemTypes.h:112
bool IsAccessorValid(const FEntityIDAccess *)
Definition MovieSceneComponentAccessors.h:612
auto GetComponentAtIndex(T *InAccessor, int32 Index) -> decltype(DeclVal< T >().ComponentAtIndex(0))
Definition MovieSceneComponentAccessors.h:601
void PopulatePrerequisites(const FEntityIDAccess *, const FSystemTaskPrerequisites &InPrerequisites, FGraphEventArray *OutGatheredPrereqs)
Definition MovieSceneComponentAccessors.h:464
void AddAccessorToFilter(const FEntityIDAccess *, FEntityComponentFilter *OutFilter)
Definition MovieSceneComponentAccessors.h:416
bool HasAccessorWork(const FEntityManager *, const FEntityIDAccess *)
Definition MovieSceneComponentAccessors.h:651
bool HasBeenWrittenToSince(const FEntityIDAccess *In, FEntityAllocation *Allocation, uint64 InSystemSerial)
Definition MovieSceneComponentAccessors.h:563
void PopulateReadWriteDependencies(const FEntityIDAccess *, FComponentMask &OutReadDependencies, FComponentMask &OutWriteDependencies)
Definition MovieSceneComponentAccessors.h:517
FEntityAllocationProxy FEntityAllocationIteratorItem
Definition EntityAllocationIterator.h:17
void PopulateSubsequents(const FWriteAccess *In, const FGraphEventRef &InEvent, FSystemSubsequentTasks &OutSubsequents)
Definition MovieSceneComponentAccessors.h:499
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition TVariant.h:13
Definition IntegerSequence.h:9
Definition LightweightStats.h:416
Definition Tuple.h:652
Definition MovieSceneEntitySystemTask.h:61
FTaskParams TaskParams
Definition MovieSceneEntitySystemTask.h:67
FCommonEntityTaskParams()
Definition MovieSceneEntitySystemTask.h:62
ENamedThreads::Type DesiredThread
Definition MovieSceneEntitySystemTask.h:70
bool bBreakOnRun
Definition MovieSceneEntitySystemTask.h:73
Definition MovieSceneEntityIDs.h:40
void SetAll(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntityIDs.h:454
FComponentMask & CombineWithBitwiseOR(const FComponentMask &Other, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:76
void Set(FComponentTypeID InComponentType)
Definition MovieSceneEntityIDs.h:444
Definition MovieSceneEntityIDs.h:251
Definition MovieSceneEntityIDs.h:174
static FComponentTypeID Invalid()
Definition MovieSceneEntityIDs.h:179
Definition MovieSceneEntitySystemTypes.h:957
Definition MovieSceneEntitySystemTypes.h:977
MOVIESCENE_API const FEntityAllocation * GetAllocation() const
Definition MovieSceneEntitySystemTypes.cpp:144
Definition MovieSceneEntitySystemTypes.h:425
Definition MovieSceneEntitySystemTypes.h:624
int32 Num() const
Definition MovieSceneEntitySystemTypes.h:813
Definition MovieSceneEntitySystemTypes.h:295
Definition MovieSceneComponentAccessors.h:84
Definition MovieSceneEntitySystemTask.h:116
bool Value
Definition MovieSceneEntitySystemTask.h:133
friend FEntityIterationResult operator,(bool In, FEntityIterationResult)
Definition MovieSceneEntitySystemTask.h:123
friend FEntityIterationResult operator,(T, FEntityIterationResult)
Definition MovieSceneEntitySystemTask.h:118
Definition MovieSceneEntitySystemTask.h:1045
FEntityTaskBuilder()
Definition MovieSceneEntitySystemTask.h:1046
Definition MovieSceneComponentAccessors.h:187
Definition MovieSceneComponentAccessors.h:163
Definition MovieSceneComponentAccessors.h:229
Definition MovieSceneComponentAccessors.h:107
Definition MovieSceneEntitySystemTask.h:1030
static void ForEachAllocation(T &&...)
Definition MovieSceneEntitySystemTask.h:1032
static void ForEachEntity(T &&...)
Definition MovieSceneEntitySystemTask.h:1036
Definition MovieSceneSystemTaskDependencies.h:98
MOVIESCENE_API void AddRootTask(FGraphEventRef RootTask)
Definition MovieSceneSystemTaskDependencies.cpp:72
Definition MovieSceneSystemTaskDependencies.h:29
Definition IMovieSceneTaskScheduler.h:21
static FTaskID None()
Definition IMovieSceneTaskScheduler.h:32
Definition IMovieSceneTaskScheduler.h:44
uint8 bForcePrePostTask
Definition IMovieSceneTaskScheduler.h:106
TStatId StatId
Definition IMovieSceneTaskScheduler.h:103
uint8 bSerialTasks
Definition IMovieSceneTaskScheduler.h:105
Definition IMovieSceneTaskScheduler.h:113
Definition MovieSceneComponentTypeIDs.h:15
Definition MovieSceneEntityIDs.h:283
Definition MovieSceneEntitySystemTask.h:79
@ AutoExpandAccessors
Definition MovieSceneEntitySystemTask.h:104
Definition MovieSceneEntitySystemTask.h:1718
FEntityAllocationWriteContext WriteContext
Definition MovieSceneEntitySystemTask.h:1780
void Run(TaskImpl &TaskImplInstance)
Definition MovieSceneEntitySystemTask.h:1741
TFilteredEntityTask< ComponentTypes... > ComponentFilter
Definition MovieSceneEntitySystemTask.h:1778
TStatId GetStatId() const
Definition MovieSceneEntitySystemTask.h:1731
TEntityAllocationTaskBase(FEntityManager *InEntityManager, const TFilteredEntityTask< ComponentTypes... > &InComponentFilter)
Definition MovieSceneEntitySystemTask.h:1725
FEntityManager * EntityManager
Definition MovieSceneEntitySystemTask.h:1779
TEntityAllocationTaskBase(FEntityManager *InEntityManager, const TEntityTaskComponents< ComponentTypes... > &InComponents)
Definition MovieSceneEntitySystemTask.h:1719
ENamedThreads::Type GetDesiredThread() const
Definition MovieSceneEntitySystemTask.h:1736
Definition MovieSceneEntitySystemTask.h:1785
TEntityAllocationTask(FEntityManager *InEntityManager, const TFilteredEntityTask< ComponentTypes... > &InComponentFilter, ArgTypes &&... InArgs)
Definition MovieSceneEntitySystemTask.h:1793
static ESubsequentsMode::Type GetSubsequentsMode()
Definition MovieSceneEntitySystemTask.h:1798
TEntityAllocationTask(FEntityManager *InEntityManager, const TEntityTaskComponents< ComponentTypes... > &InComponents, ArgTypes &&... InArgs)
Definition MovieSceneEntitySystemTask.h:1787
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &CompletionGraphEvent)
Definition MovieSceneEntitySystemTask.h:1803
Definition MovieSceneEntitySystemTask.h:1563
TEntityTaskBase(FEntityManager *InEntityManager, const TEntityTaskComponents< ComponentTypes... > &InComponents)
Definition MovieSceneEntitySystemTask.h:1564
static void PostTask(T *InTask, decltype(&T::PostTask) *=0)
Definition MovieSceneEntitySystemTask.h:1614
TStatId GetStatId() const
Definition MovieSceneEntitySystemTask.h:1576
static void PreTask(void *,...)
Definition MovieSceneEntitySystemTask.h:1607
ENamedThreads::Type GetDesiredThread() const
Definition MovieSceneEntitySystemTask.h:1581
static void PreTask(T *InTask, decltype(&T::PreTask) *=0)
Definition MovieSceneEntitySystemTask.h:1608
TFilteredEntityTask< ComponentTypes... > FilteredTask
Definition MovieSceneEntitySystemTask.h:1621
static void PostTask(void *,...)
Definition MovieSceneEntitySystemTask.h:1613
FEntityAllocationWriteContext WriteContext
Definition MovieSceneEntitySystemTask.h:1623
TEntityTaskBase(FEntityManager *InEntityManager, const TFilteredEntityTask< ComponentTypes... > &InFilteredTask)
Definition MovieSceneEntitySystemTask.h:1570
void Run(TaskImpl &TaskImplInstance)
Definition MovieSceneEntitySystemTask.h:1586
FEntityManager * EntityManager
Definition MovieSceneEntitySystemTask.h:1622
static void ForEachAllocationImpl(TaskImpl &TaskImplInstance, FEntityAllocationIteratorItem Item, TArrayView< const FPreLockedDataPtr > PreLockedData, FEntityAllocationWriteContext WriteContext, const TEntityTaskComponents< AccessorTypes... > &Components)
Definition MovieSceneEntitySystemTask.h:1958
static void ForEachAllocationImpl(TaskImpl &TaskImplInstance, FEntityAllocationIteratorItem Item, const TEntityTaskComponents< AccessorTypes... > &Components)
Definition MovieSceneEntitySystemTask.h:1964
static void ForEachEntityImpl(TaskImpl &TaskImplInstance,...)
Definition MovieSceneEntitySystemTask.h:1952
static void ForEachEntityImpl(TaskImpl &TaskImplInstance, FEntityAllocationIteratorItem Item, FEntityAllocationWriteContext WriteContext, const TEntityTaskComponents< AccessorTypes... > &Components)
Definition MovieSceneEntitySystemTask.h:1913
static void ForEachAllocationImpl(TaskImpl &TaskImplInstance, FEntityAllocationIteratorItem Item, TArrayView< const FPreLockedDataPtr > PreLockedData, FEntityAllocationWriteContext WriteContext, const TEntityTaskComponents< AccessorTypes... > &Components)
Definition MovieSceneEntitySystemTask.h:1928
static void ForEachEntityImpl(TaskImpl &TaskImplInstance, FEntityAllocationIteratorItem Item, TArrayView< const FPreLockedDataPtr > PreLockedData, FEntityAllocationWriteContext WriteContext, const TEntityTaskComponents< AccessorTypes... > &Components)
Definition MovieSceneEntitySystemTask.h:1898
static void ForEachAllocationImpl(TaskImpl &TaskImplInstance, FEntityAllocationIteratorItem Item, FEntityAllocationWriteContext WriteContext, const TEntityTaskComponents< AccessorTypes... > &Components)
Definition MovieSceneEntitySystemTask.h:1936
Definition MovieSceneEntitySystemTask.h:1871
Definition MovieSceneEntitySystemTask.h:58
TEntityTaskComponents< T..., FErasedReadAccess > ReadErased(FComponentTypeID ComponentType) const
Definition MovieSceneEntitySystemTask.h:727
TEntityTaskComponents< T..., TReadAccess< U >... > ReadAllOf(const TComponentTypeIDs< U... > &TypeIDs, TIntegerSequence< int, ExtraIndices... > &&In) const
Definition MovieSceneEntitySystemTask.h:705
void PopulateFilter(FEntityComponentFilter *OutFilter) const
Definition MovieSceneEntitySystemTask.h:840
auto GetAccessor() const
Definition MovieSceneEntitySystemTask.h:987
TEntityTaskComponents< T..., TReadAccess< U >... > ReadAllOf(TComponentTypeID< U >... ComponentTypes) const
Definition MovieSceneEntitySystemTask.h:689
TEntityTaskComponentsImpl(const FCommonEntityTaskParams &InCommonParams, ConstructionTypes &&... InTypes)
Definition MovieSceneEntitySystemTask.h:1013
bool HasBeenWrittenToSince(uint32 InSystemVersion)
Definition MovieSceneEntitySystemTask.h:803
bool HasAnyWork(const FEntityManager *EntityManager) const
Definition MovieSceneEntitySystemTask.h:829
TEntityTaskComponents< T..., FFilterMatchPassthrough > PassthroughFilter(const FEntityComponentFilter &InFilter) const
Definition MovieSceneEntitySystemTask.h:798
TEntityTaskComponents< T..., TOptionalWriteAccess< U > > WriteOptional(TComponentTypeID< U > ComponentType, FComponentTypeIDFilter InConditionType=FComponentTypeIDFilter()) const
Definition MovieSceneEntitySystemTask.h:793
void Iterate_PerEntityImpl(FEntityManager *EntityManager, const FEntityComponentFilter &Filter, Callback &&InCallback) const
Definition MovieSceneEntitySystemTask.h:915
TEntityTaskComponents< T..., TWriteAccess< U >... > WriteAllOf(TComponentTypeID< U >... ComponentTypes) const
Definition MovieSceneEntitySystemTask.h:771
TEntityTaskComponents< T..., FEntityIDAccess > ReadEntityIDs() const
Definition MovieSceneEntitySystemTask.h:643
TEntityTaskComponents< T..., FErasedOptionalReadAccess > ReadErasedOptional(FComponentTypeID ComponentType, FComponentTypeIDFilter InConditionType=FComponentTypeIDFilter()) const
Definition MovieSceneEntitySystemTask.h:738
void Iterate_PerAllocation(FEntityManager *EntityManager, Callback &&InCallback) const
Definition MovieSceneEntitySystemTask.h:886
TTuple< T... > Accessors
Definition MovieSceneEntitySystemTask.h:1022
TEntityTaskComponents< T..., TReadAccess< U >... > ReadAllOf(const TComponentTypeIDs< U... > &TypeIDs) const
Definition MovieSceneEntitySystemTask.h:700
FString ToString(FEntityManager *EntityManager) const
Definition MovieSceneEntitySystemTask.h:993
void PreLockComponentHeaders(FEntityAllocationIteratorItem Item, TArray< FPreLockedDataPtr > &OutComponentHeaders) const
Definition MovieSceneEntitySystemTask.h:865
TEntityTaskComponents< T..., TOptionalReadAccess< U >... > ReadAnyOf(TComponentTypeID< U >... ComponentTypes) const
Definition MovieSceneEntitySystemTask.h:716
TEntityTaskComponents< T..., TOptionalReadAccess< U > > ReadOptional(TComponentTypeID< U > ComponentType, FComponentTypeIDFilter InConditionType=FComponentTypeIDFilter()) const
Definition MovieSceneEntitySystemTask.h:748
TEntityTaskComponents< T..., FErasedWriteAccess > WriteErased(FComponentTypeID ComponentType) const
Definition MovieSceneEntitySystemTask.h:782
FCommonEntityTaskParams CommonParams
Definition MovieSceneEntitySystemTask.h:1026
TEntityTaskComponents< T..., TWriteAccess< U > > Write(TComponentTypeID< U > ComponentType) const
Definition MovieSceneEntitySystemTask.h:760
void Iterate_PerAllocationImpl(FEntityManager *EntityManager, const FEntityComponentFilter &Filter, Callback &&InCallback) const
Definition MovieSceneEntitySystemTask.h:954
friend struct TEntityTaskComponentsImpl
Definition MovieSceneEntitySystemTask.h:1020
TEntityTaskComponents< T..., TReadOneOrMoreOfAccessor< U... > > ReadOneOrMoreOf(TComponentTypeID< U >... ComponentTypes) const
Definition MovieSceneEntitySystemTask.h:678
TEntityTaskComponents< T..., TReadAccess< U > > Read(TComponentTypeID< U > ComponentType) const
Definition MovieSceneEntitySystemTask.h:655
void Iterate_PerEntity(FEntityManager *EntityManager, Callback &&InCallback) const
Definition MovieSceneEntitySystemTask.h:900
void PopulateReadWriteDependencies(FComponentMask &OutReadDependencies, FComponentMask &OutWriteDependencies) const
Definition MovieSceneEntitySystemTask.h:873
void PopulatePrerequisites(const FSystemTaskPrerequisites &InPrerequisites, FGraphEventArray *OutGatheredPrereqs) const
Definition MovieSceneEntitySystemTask.h:847
TEntityTaskComponents< T..., TReadOneOfAccessor< U... > > ReadOneOf(TComponentTypeID< U >... ComponentTypes) const
Definition MovieSceneEntitySystemTask.h:667
void PopulateSubsequents(const FGraphEventRef &InEvent, FSystemSubsequentTasks &OutSubsequents) const
Definition MovieSceneEntitySystemTask.h:857
Definition MovieSceneEntitySystemTask.h:40
Definition MovieSceneEntitySystemTask.h:181
TFilteredEntityTask< T... > FilterAny(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:238
void RunInline_PerEntity(FEntityManager *EntityManager, TaskImpl &Task) const
Definition MovieSceneEntitySystemTask.h:568
TFilteredEntityTask< T... > FilterNone(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:218
TFilteredEntityTask< T... > FilterOut(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:248
TFilteredEntityTask< T... > FilterOut(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:258
TEntityTaskComponents< T... > & SetParams(const FTaskParams &InOtherParams)
Definition MovieSceneEntitySystemTask.h:295
FTaskID Schedule_PerEntity(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:532
FGraphEventRef Dispatch(FEntityManager *EntityManager, const FSystemTaskPrerequisites &Prerequisites, FSystemSubsequentTasks *Subsequents, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:312
FTaskID Fork_PerAllocation(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:514
FGraphEventRef Dispatch_PerAllocation(FEntityManager *EntityManager, const FSystemTaskPrerequisites &Prerequisites, FSystemSubsequentTasks *Subsequents, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:371
TFilteredEntityTask< T... > FilterNone(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:208
TEntityTaskComponents< T... > & SetDesiredThread(ENamedThreads::Type InDesiredThread)
Definition MovieSceneEntitySystemTask.h:276
FTaskID Schedule_PerAllocation(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:550
void RunInline_PerAllocation(FEntityManager *EntityManager, TaskImpl &Task) const
Definition MovieSceneEntitySystemTask.h:417
TFilteredEntityTask< T... > FilterAny(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:228
FTaskID Fork_PerEntity(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:496
TFilteredEntityTask< T... > FilterAll(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:188
TEntityTaskComponents< T... > & SetStat(TStatId InStatId)
Definition MovieSceneEntitySystemTask.h:286
TFilteredEntityTask< T... > CombineFilter(const FEntityComponentFilter &InFilter)
Definition MovieSceneEntitySystemTask.h:268
FGraphEventRef Dispatch_PerEntity(FEntityManager *EntityManager, const FSystemTaskPrerequisites &Prerequisites, FSystemSubsequentTasks *Subsequents, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:451
TFilteredEntityTask< T... > FilterAll(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:198
TEntityTaskComponents()
Definition MovieSceneEntitySystemTask.h:578
TEntityTaskComponents(const FCommonEntityTaskParams &InCommonParams, ConstructionTypes &&... InTypes)
Definition MovieSceneEntitySystemTask.h:584
Definition MovieSceneEntitySystemTask.h:111
Definition MovieSceneEntitySystemTask.h:1628
TEntityTask(FEntityManager *InEntityManager, const TFilteredEntityTask< ComponentTypes... > &InFilteredTask, ArgTypes &&... InArgs)
Definition MovieSceneEntitySystemTask.h:1636
TEntityTask(FEntityManager *InEntityManager, const TEntityTaskComponents< ComponentTypes... > &InComponents, ArgTypes &&... InArgs)
Definition MovieSceneEntitySystemTask.h:1630
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &CompletionGraphEvent)
Definition MovieSceneEntitySystemTask.h:1646
static ESubsequentsMode::Type GetSubsequentsMode()
Definition MovieSceneEntitySystemTask.h:1641
Definition MovieSceneEntitySystemTask.h:1052
TFilteredEntityTask< T... > & AddDynamicWriteDependency(TArrayView< ComponentType > InWriteDependencies)
Definition MovieSceneEntitySystemTask.h:1241
TFilteredEntityTask< T... > & AddDynamicWriteDependency(const FComponentMask &InDynamicWriteDependency)
Definition MovieSceneEntitySystemTask.h:1249
FTaskID Fork_PerAllocation(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:1421
TFilteredEntityTask< T... > & SetStat(TStatId InStatId)
Definition MovieSceneEntitySystemTask.h:1160
void Iterate_PerAllocation(FEntityManager *EntityManager, Callback &&InCallback) const
Definition MovieSceneEntitySystemTask.h:1502
TFilteredEntityTask< T... > & FilterNone(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:1096
ENamedThreads::Type GetDesiredThread() const
Definition MovieSceneEntitySystemTask.h:1178
void RunInline_PerEntity(FEntityManager *EntityManager, TaskImpl Task) const
Definition MovieSceneEntitySystemTask.h:1475
void Iterate_PerEntity(FEntityManager *EntityManager, Callback &&InCallback) const
Definition MovieSceneEntitySystemTask.h:1490
FTaskID Schedule_PerEntity(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:1439
TFilteredEntityTask< T... > & AddDynamicReadDependency(TArrayView< ComponentType > InReadDependencies)
Definition MovieSceneEntitySystemTask.h:1221
TFilteredEntityTask(const TEntityTaskComponents< T... > &InComponents, const FEntityComponentFilter &InFilter)
Definition MovieSceneEntitySystemTask.h:1058
const TEntityTaskComponents< T... > & GetComponents() const
Definition MovieSceneEntitySystemTask.h:1210
TFilteredEntityTask< T... > & SetParams(const FTaskParams &InOtherParams)
Definition MovieSceneEntitySystemTask.h:1169
bool ShouldBreakOnRun() const
Definition MovieSceneEntitySystemTask.h:1194
TFilteredEntityTask< T... > & AddDynamicWriteDependency(std::initializer_list< FComponentTypeID > InWriteDependencies)
Definition MovieSceneEntitySystemTask.h:1235
TFilteredEntityTask< T... > & FilterOut(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:1132
TFilteredEntityTask< T... > & FilterAll(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:1078
TFilteredEntityTask(const TEntityTaskComponents< T... > &InComponents)
Definition MovieSceneEntitySystemTask.h:1053
TFilteredEntityTask< T... > & AddDynamicReadDependency(const FComponentMask &InDynamicReadDependency)
Definition MovieSceneEntitySystemTask.h:1229
TFilteredEntityTask< T... > & CombineFilter(const FEntityComponentFilter &InFilter)
Definition MovieSceneEntitySystemTask.h:1141
FTaskID Fork_PerEntity(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:1403
void RunInline_PerAllocation(FEntityManager *EntityManager, TaskImpl &Task) const
Definition MovieSceneEntitySystemTask.h:1325
TFilteredEntityTask< T... > & SetDesiredThread(ENamedThreads::Type InDesiredThread)
Definition MovieSceneEntitySystemTask.h:1150
TFilteredEntityTask< T... > & AddDynamicReadDependency(std::initializer_list< FComponentTypeID > InReadDependencies)
Definition MovieSceneEntitySystemTask.h:1215
TFilteredEntityTask< T... > & FilterOut(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:1123
FGraphEventRef Dispatch_PerAllocation(FEntityManager *EntityManager, const FSystemTaskPrerequisites &Prerequisites, FSystemSubsequentTasks *Subsequents, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:1281
TStatId GetStatId() const
Definition MovieSceneEntitySystemTask.h:1186
FTaskID Schedule_PerAllocation(FEntityManager *EntityManager, IEntitySystemScheduler *InScheduler, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:1457
TFilteredEntityTask< T... > & FilterNone(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:1087
const FEntityComponentFilter & GetFilter() const
Definition MovieSceneEntitySystemTask.h:1202
TFilteredEntityTask< T... > & FilterAny(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:1105
FGraphEventRef Dispatch_PerEntity(FEntityManager *EntityManager, const FSystemTaskPrerequisites &Prerequisites, FSystemSubsequentTasks *Subsequents, TaskConstructionArgs &&... InArgs) const
Definition MovieSceneEntitySystemTask.h:1359
TFilteredEntityTask< T... > & FilterAny(std::initializer_list< FComponentTypeID > InComponentTypes)
Definition MovieSceneEntitySystemTask.h:1114
TFilteredEntityTask< T... > & FilterAll(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:1069
Definition MovieSceneComponentAccessors.h:282
Definition MovieSceneComponentAccessors.h:306
Definition MovieSceneEntitySystemTask.h:1876
constexpr void Assign(int &Index, int &DataIndex, int DataSize)
Definition MovieSceneEntitySystemTask.h:1886
constexpr TPrelockedDataOffsets()
Definition MovieSceneEntitySystemTask.h:1881
int32 StartOffset[sizeof...(AccessorTypes)]
Definition MovieSceneEntitySystemTask.h:1879
static constexpr int32 Num
Definition MovieSceneEntitySystemTask.h:1877
Definition MovieSceneComponentAccessors.h:142
Definition MovieSceneComponentAccessors.h:348
Definition MovieSceneComponentAccessors.h:384
Definition MovieSceneEntitySystemTask.h:1668
void PostTask() const
Definition MovieSceneEntitySystemTask.h:1680
TScheduledEntityTask(const TEntityTaskComponents< ComponentTypes... > &InComponents, ArgTypes &&... InArgs)
Definition MovieSceneEntitySystemTask.h:1670
void PreTask() const
Definition MovieSceneEntitySystemTask.h:1675
static void ScheduledRun_PerEntity(FEntityAllocationIteratorItem Item, TArrayView< const FPreLockedDataPtr > PreLockedData, const ITaskContext *Context, FEntityAllocationWriteContext WriteContext)
Definition MovieSceneEntitySystemTask.h:1686
static void ScheduledRun_PerAllocation(FEntityAllocationIteratorItem Item, TArrayView< const FPreLockedDataPtr > PreLockedData, const ITaskContext *Context, FEntityAllocationWriteContext WriteContext)
Definition MovieSceneEntitySystemTask.h:1691
Definition MovieSceneEntitySystemTask.h:1825
TUnstructuredTask(const FCommonEntityTaskParams &InCommonParams, ArgTypes &&... InArgs)
Definition MovieSceneEntitySystemTask.h:1827
ENamedThreads::Type GetDesiredThread() const
Definition MovieSceneEntitySystemTask.h:1837
static ESubsequentsMode::Type GetSubsequentsMode()
Definition MovieSceneEntitySystemTask.h:1842
TStatId GetStatId() const
Definition MovieSceneEntitySystemTask.h:1832
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &CompletionGraphEvent)
Definition MovieSceneEntitySystemTask.h:1847
Definition MovieSceneComponentAccessors.h:258