UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassQueryExecutor.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Misc/NotNull.h"
6#include "MassEntityQuery.h"
8
9#define UE_API MASSENTITY_API
10
11class UMassProcessor;
12
13namespace UE::Mass
14{
15
18{
19 virtual void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) = 0;
21};
22
27{
30 {
32 Query->BoundQuery = &InQuery;
33 Query->LogOwner = InLogOwner;
34
35#if WITH_MASSENTITY_DEBUG
36 Query->DebugSize = sizeof(T);
37 Query->ValidateAccessors();
38#endif
39
40 return Query;
41 }
42
43 template<typename... Ts>
44 friend struct FQueryDefinition;
45
46 friend ::UMassProcessor;
47
49 virtual ~FQueryExecutor() = default;
50
53
54protected:
55
57 {
58 return LogOwner.Get();
59 }
60
61 template<typename TAccessors, typename TFunc>
62 inline void ForEachEntityChunk(FMassExecutionContext& ExecutionContext, TAccessors& Accessors, const TFunc&& ExecuteFunction)
63 {
64 BoundQuery->ForEachEntityChunk(ExecutionContext, [&Accessors, &ExecuteFunction](FMassExecutionContext& Context)
65 {
66 Accessors.AccessorTuple.ApplyBefore([&Context](auto&... Accessor)
67 {
68 (Accessor.SetupForChunk(Context), ...);
69 });
70 ExecuteFunction(Context, Accessors);
71 });
72 }
73
74 template<typename TAccessors, typename TFunc>
75 inline void ParallelForEachEntityChunk(FMassExecutionContext& ExecutionContext, const TAccessors& Accessors, const TFunc&& ExecuteFunction)
76 {
77 BoundQuery->ParallelForEachEntityChunk(ExecutionContext, [&Accessors, &ExecuteFunction](FMassExecutionContext& Context)
78 {
80
81 LocalAccessors.AccessorTuple.ApplyBefore([&Context](auto&... Accessor)
82 {
83 (Accessor.SetupForChunk(Context), ...);
84 });
85
86 ExecuteFunction(Context, LocalAccessors);
87 });
88 }
89
90 template<typename TAccessors, typename TFunc>
91 inline void ForEachEntity(FMassExecutionContext& ExecutionContext, TAccessors& Accessors, const TFunc&& ExecuteFunction)
92 {
93 BoundQuery->ForEachEntityChunk(ExecutionContext, [&Accessors, &ExecuteFunction](FMassExecutionContext& Context)
94 {
95 Accessors.AccessorTuple.ApplyBefore([&Context](auto&... Accessor)
96 {
97 (Accessor.SetupForChunk(Context), ...);
98 });
99
100 for (uint32 EntityIndex : Context.CreateEntityIterator())
101 {
102 ExecuteFunction(Context, Accessors, EntityIndex);
103 }
104 });
105 }
106
107 template<typename TAccessors, typename TFunc>
108 inline void ParallelForEachEntity(FMassExecutionContext& ExecutionContext, TAccessors& Accessors, const TFunc&& ExecuteFunction)
109 {
110 BoundQuery->ParallelForEachEntityChunk(ExecutionContext, [&Accessors, &ExecuteFunction](FMassExecutionContext& Context)
111 {
113 LocalAccessors.AccessorTuple.ApplyBefore([&Context](auto&... Accessor)
114 {
115 (Accessor.SetupForChunk(Context), ...);
116 });
117
118 for (uint32 EntityIndex : Context.CreateEntityIterator())
119 {
120 ExecuteFunction(Context, LocalAccessors, EntityIndex);
121 }
122 });
123 }
124
126private:
127 static UE_API FMassEntityQuery DummyQuery;
128
129 UE_API void ConfigureQuery(FMassSubsystemRequirements& ProcessorRequirements);
130 UE_API void CallExecute(FMassExecutionContext& Context);
131
134
136 FQueryDefinitionBase* AccessorsPtr;
137
138#if WITH_MASSENTITY_DEBUG
140 uint32 DebugSize = 0;
141#endif
142};
143
144template <typename...>
145inline constexpr auto IsUnique = std::true_type{};
146
147template <typename T, typename... Rest>
148inline constexpr auto IsUnique<T, Rest...> = std::bool_constant<(!std::is_same_v<typename T::FragmentType, typename Rest::FragmentType> && ...) && IsUnique<Rest...>>{};
149
150
151template <typename T, typename U, typename... Us>
152constexpr auto GetIndexRecursive()
153{
154 if constexpr (std::is_same<T, typename U::FragmentType>::value)
155 {
156 return 0;
157 }
158 else
159 {
160 static_assert(sizeof...(Us) > 0, "Type not found in accessor collection.");
161 return 1 + GetIndexRecursive<T, Us...>();
162 }
163}
164
165template <typename T, typename U, typename... Us>
166constexpr auto GetAccessorIndex()
167{
168 static_assert(IsUnique<U, Us...>, "An accessor collection must only contain a single instance of each fragment/subsystem/tag type.");
169 return GetIndexRecursive<T, U, Us...>();
170}
171
176template<typename... Accessors>
178{
180 {
181 Owner.AccessorsPtr = this;
182 }
183
184 TTuple<Accessors...> AccessorTuple{};
185
186 virtual void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) override
187 {
188 AccessorTuple.ApplyBefore([&EntityQuery, &ProcessorRequirements](auto&... Accessor)
189 {
190 (Accessor.ConfigureQuery(EntityQuery, ProcessorRequirements), ...);
191 });
192
193 }
194
196 {
197 AccessorTuple.ApplyBefore([&Context](auto&... Accessor)
198 {
199 (Accessor.SetupForExecute(Context), ...);
200 });
201 }
202
204 {
205 AccessorTuple.ApplyBefore([&Context](auto&... Accessor)
206 {
207 (Accessor.SetupForChunk(Context), ...);
208 });
209 }
210
211 template <typename TFragment>
212 inline constexpr auto& Get()
213 {
214 constexpr std::size_t Index = GetAccessorIndex<TFragment, Accessors...>();
215 return AccessorTuple.template Get<Index>();
216 }
217};
218
219template<typename TFragment>
221{
222 template<typename... Ts>
223 friend struct FQueryDefinition;
224
226
228
230 {
231 return View;
232 }
233
235 {
236 return View[Index];
237 }
238
239 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements)
240 {
242 }
243
247
249 {
250 View = Context.GetMutableFragmentView<TFragment>();
251 }
252
254};
255
256template<typename TFragment>
258{
259 template<typename... Ts>
260 friend struct FQueryDefinition;
261
263
265
266 inline const TConstArrayView<TFragment>& Get() const
267 {
268 return View;
269 }
270
271 inline const TFragment& operator[](int32 Index) const
272 {
273 return View[Index];
274 }
275
276 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
277 {
279 }
280
284
286 {
287 View = Context.GetFragmentView<TFragment>();
288 }
289
291};
292
293template<typename TFragment>
295{
296 template<typename... Ts>
297 friend struct FQueryDefinition;
298
300
302
304 {
305 return View;
306 }
307
309 {
310 return View[Index];
311 }
312
313 inline int32 Num() const
314 {
315 return View.Num();
316 }
317
318 inline operator bool() const
319 {
320 return View.Num() > 0;
321 }
322
323 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
324 {
326 }
327
331
333 {
334 View = Context.GetMutableFragmentView<TFragment>();
335 }
336
338};
339
340template<typename TFragment>
342{
343 template<typename... Ts>
344 friend struct FQueryDefinition;
345
347
349
350 inline const TConstArrayView<TFragment>& Get() const
351 {
352 return View;
353 }
354
355 inline const TFragment& operator[](int32 Index) const
356 {
357 return View[Index];
358 }
359
360 inline int32 Num() const
361 {
362 return View.Num();
363 }
364
365 inline operator bool() const
366 {
367 return View.Num() > 0;
368 }
369
370 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
371 {
373 }
374
378
380 {
381 View = Context.GetFragmentView<TFragment>();
382 }
383
385};
386
387template<typename TTag>
389{
390 template<typename... Ts>
391 friend struct FQueryDefinition;
392
394
395 FMassTagRequired() = default;
396
397 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
398 {
400 }
401
405
407 {
408 }
409};
410
411template<typename TFragment>
413{
415
416 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
417 {
419 }
420
424
426 {
427 }
428};
429
430template<typename TFragment>
432{
433 template<typename... Ts>
434 friend struct FQueryDefinition;
435
437
439
440 inline TFragment& Get() const
441 {
443 return *Fragment;
444 }
445
446 inline TFragment& operator*() const
447 {
449 return *Fragment;
450 }
451
452 inline TFragment* operator->() const
453 {
454 return Fragment;
455 }
456
457 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
458 {
460 }
461
465
467 {
468 Fragment = &(Context.GetSharedFragment<TFragment>());
469 }
470
471 TFragment* Fragment = nullptr;
472};
473
474template<typename TFragment>
476{
477 template<typename... Ts>
478 friend struct FQueryDefinition;
479
481
483
484 inline const TFragment& Get() const
485 {
487 return *Fragment;
488 }
489
490 inline const TFragment& operator*() const
491 {
493 return *Fragment;
494 }
495
496 inline const TFragment* operator->() const
497 {
498 return Fragment;
499 }
500
501 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
502 {
504 }
505
509
511 {
512 Fragment = &Context.GetConstSharedFragment<TFragment>();
513 }
514
515 const TFragment* Fragment = nullptr;
516};
517
518template<typename TFragment>
520{
521 template<typename... Ts>
522 friend struct FQueryDefinition;
523
525
527
528 inline TFragment& Get() const
529 {
531 return *Fragment;
532 }
533
534 inline TFragment& operator*() const
535 {
537 return *Fragment;
538 }
539
540 inline TFragment* operator->() const
541 {
542 return Fragment;
543 }
544
545 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
546 {
548 }
549
553
555 {
556 Fragment = Context.GetMutableChunkFragmentPtr<TFragment>();
557 }
558
559 TFragment* Fragment = nullptr;
560};
561
562template<typename TFragment>
564{
565 template<typename... Ts>
566 friend struct FQueryDefinition;
567
569
571
572 inline const TFragment& Get() const
573 {
575 return *Fragment;
576 }
577
578 inline const TFragment& operator*() const
579 {
581 return *Fragment;
582 }
583
584 inline const TFragment* operator->() const
585 {
586 return Fragment;
587 }
588
589 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
590 {
592 }
593
597
599 {
600 Fragment = Context.GetChunkFragmentPtr<TFragment>();
601 }
602
603 const TFragment* Fragment = nullptr;
604};
605
606template<typename TFragment>
608{
609 template<typename... Ts>
610 friend struct FQueryDefinition;
611
613
615
616 inline TFragment* Get() const
617 {
619 return Fragment;
620 }
621
622 inline TFragment& operator*() const
623 {
625 return *Fragment;
626 }
627
628 inline TFragment* operator->() const
629 {
630 return Fragment;
631 }
632
633 inline operator bool() { return Fragment != nullptr; }
634
639
643
645 {
646 Fragment = Context.GetMutableChunkFragmentPtr<TFragment>();
647 }
648
649 TFragment* Fragment = nullptr;
650};
651
652template<typename TFragment>
654{
655 template<typename... Ts>
656 friend struct FQueryDefinition;
657
659
661
662 inline const TFragment* Get()
663 {
665 return Fragment;
666 }
667
668 inline const TFragment& operator*() const
669 {
671 return *Fragment;
672 }
673
674 inline const TFragment* operator->() const
675 {
676 return Fragment;
677 }
678
679 inline operator bool() const
680 {
681 return Fragment != nullptr;
682 }
683
688
692
694 {
695 Fragment = Context.GetChunkFragmentPtr<TFragment>();
696 }
697
698 const TFragment* Fragment = nullptr;
699};
700
703{
704 template<typename... Ts>
705 friend struct FQueryDefinition;
706
708
710
711 inline TSubsystem* Get() const
712 {
713 return Subsystem;
714 }
715
716 inline TSubsystem& operator*() const
717 {
719 return *Subsystem;
720 }
721
722 inline TSubsystem* operator->() const
723 {
724 return Subsystem;
725 }
726
727 inline operator bool() const
728 {
729 return Subsystem != nullptr;
730 }
731
732 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
733 {
735 }
736
738 {
739 Subsystem = Context.GetMutableSubsystem<TSubsystem>();
740 }
741
743 {
744 }
745
747};
748
751{
752 template<typename... Ts>
753 friend struct FQueryDefinition;
754
756
758
759 inline const TSubsystem* Get() const
760 {
761 return Subsystem;
762 }
763
764 inline const TSubsystem& operator*() const
765 {
767 return *Subsystem;
768 }
769
770 inline const TSubsystem* operator->() const
771 {
772 return Subsystem;
773 }
774
775 inline operator bool() const
776 {
777 return Subsystem != nullptr;
778 }
779
780 inline void ConfigureQuery(FMassEntityQuery& EntityQuery, FMassSubsystemRequirements& ProcessorRequirements) const
781 {
783 }
784
786 {
787 Subsystem = Context.GetSubsystem(TSubsystem::StaticClass());
788 }
789
791 {
792 }
793
794 const TSubsystem* Subsystem = nullptr;
795};
796
797
798} // namespace UE::Mass
799
800#undef UE_API
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T TNotNull
Definition NotNull.h:307
const bool
Definition NetworkReplayStreaming.h:178
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
Definition SharedPointer.h:692
Definition MassProcessor.h:78
Definition Object.h:95
Definition MassArchetypeData.h:21
constexpr auto IsUnique
Definition MassQueryExecutor.h:145
constexpr auto GetIndexRecursive()
Definition MassQueryExecutor.h:152
constexpr auto GetAccessorIndex()
Definition MassQueryExecutor.h:166
U16 Index
Definition radfft.cpp:71
Definition MassEntityQuery.h:51
Definition MassExecutionContext.h:29
FMassFragmentRequirements & AddSharedRequirement(const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:421
FMassFragmentRequirements & AddRequirement(const UScriptStruct *FragmentType, const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:179
FMassFragmentRequirements & AddConstSharedRequirement(const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:363
FMassFragmentRequirements & AddChunkRequirement(const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:311
FMassFragmentRequirements & AddTagRequirement(TNotNull< const UScriptStruct * > TagType, const EMassFragmentPresence Presence)
Definition MassRequirements.h:245
Definition MassRequirements.h:72
FMassSubsystemRequirements & AddSubsystemRequirement(const EMassFragmentAccess AccessMode)
Definition MassRequirements.h:78
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132
Definition MassQueryExecutor.h:564
TFragment FragmentType
Definition MassQueryExecutor.h:568
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:589
const TFragment * Fragment
Definition MassQueryExecutor.h:603
const TFragment * operator->() const
Definition MassQueryExecutor.h:584
const TFragment & operator*() const
Definition MassQueryExecutor.h:578
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:594
const TFragment & Get() const
Definition MassQueryExecutor.h:572
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:598
Definition MassQueryExecutor.h:258
const TConstArrayView< TFragment > & Get() const
Definition MassQueryExecutor.h:266
const TFragment & operator[](int32 Index) const
Definition MassQueryExecutor.h:271
TConstArrayView< TFragment > View
Definition MassQueryExecutor.h:290
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:281
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:285
TFragment FragmentType
Definition MassQueryExecutor.h:262
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:276
Definition MassQueryExecutor.h:654
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:689
const TFragment * operator->() const
Definition MassQueryExecutor.h:674
TFragment FragmentType
Definition MassQueryExecutor.h:658
const TFragment & operator*() const
Definition MassQueryExecutor.h:668
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:693
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:684
const TFragment * Get()
Definition MassQueryExecutor.h:662
const TFragment * Fragment
Definition MassQueryExecutor.h:698
Definition MassQueryExecutor.h:342
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:370
TFragment FragmentType
Definition MassQueryExecutor.h:346
const TFragment & operator[](int32 Index) const
Definition MassQueryExecutor.h:355
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:375
const TConstArrayView< TFragment > & Get() const
Definition MassQueryExecutor.h:350
int32 Num() const
Definition MassQueryExecutor.h:360
TConstArrayView< TFragment > View
Definition MassQueryExecutor.h:384
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:379
Definition MassQueryExecutor.h:476
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:510
const TFragment & Get() const
Definition MassQueryExecutor.h:484
TFragment FragmentType
Definition MassQueryExecutor.h:480
const TFragment & operator*() const
Definition MassQueryExecutor.h:490
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:506
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:501
const TFragment * Fragment
Definition MassQueryExecutor.h:515
const TFragment * operator->() const
Definition MassQueryExecutor.h:496
Definition MassQueryExecutor.h:751
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:790
const TSubsystem * operator->() const
Definition MassQueryExecutor.h:770
const TSubsystem * Get() const
Definition MassQueryExecutor.h:759
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:785
TSubsystem FragmentType
Definition MassQueryExecutor.h:755
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:780
const TSubsystem * Subsystem
Definition MassQueryExecutor.h:794
const TSubsystem & operator*() const
Definition MassQueryExecutor.h:764
Definition MassQueryExecutor.h:413
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:416
TFragment FragmentType
Definition MassQueryExecutor.h:414
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:425
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:421
Definition MassQueryExecutor.h:389
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:397
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:402
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:406
TTag FragmentType
Definition MassQueryExecutor.h:393
Definition MassQueryExecutor.h:520
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:545
TFragment * operator->() const
Definition MassQueryExecutor.h:540
TFragment * Fragment
Definition MassQueryExecutor.h:559
TFragment & operator*() const
Definition MassQueryExecutor.h:534
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:554
TFragment & Get() const
Definition MassQueryExecutor.h:528
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:550
TFragment FragmentType
Definition MassQueryExecutor.h:524
Definition MassQueryExecutor.h:221
TFragment FragmentType
Definition MassQueryExecutor.h:225
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:248
TFragment & operator[](int32 Index)
Definition MassQueryExecutor.h:234
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:244
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements)
Definition MassQueryExecutor.h:239
TArrayView< TFragment > & Get()
Definition MassQueryExecutor.h:229
TArrayView< TFragment > View
Definition MassQueryExecutor.h:253
Definition MassQueryExecutor.h:608
TFragment * operator->() const
Definition MassQueryExecutor.h:628
TFragment & operator*() const
Definition MassQueryExecutor.h:622
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:640
TFragment FragmentType
Definition MassQueryExecutor.h:612
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:635
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:644
TFragment * Fragment
Definition MassQueryExecutor.h:649
TFragment * Get() const
Definition MassQueryExecutor.h:616
Definition MassQueryExecutor.h:295
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:328
TFragment & operator[](int32 Index) const
Definition MassQueryExecutor.h:308
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:323
int32 Num() const
Definition MassQueryExecutor.h:313
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:332
TFragment FragmentType
Definition MassQueryExecutor.h:299
TArrayView< TFragment > View
Definition MassQueryExecutor.h:337
TArrayView< TFragment > & Get() const
Definition MassQueryExecutor.h:303
Definition MassQueryExecutor.h:432
TFragment & operator*() const
Definition MassQueryExecutor.h:446
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:457
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:462
TFragment FragmentType
Definition MassQueryExecutor.h:436
TFragment * Fragment
Definition MassQueryExecutor.h:471
TFragment * operator->() const
Definition MassQueryExecutor.h:452
TFragment & Get() const
Definition MassQueryExecutor.h:440
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:466
Definition MassQueryExecutor.h:703
TSubsystem FragmentType
Definition MassQueryExecutor.h:707
TSubsystem * Get() const
Definition MassQueryExecutor.h:711
void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) const
Definition MassQueryExecutor.h:732
TSubsystem & operator*() const
Definition MassQueryExecutor.h:716
TSubsystem * Subsystem
Definition MassQueryExecutor.h:746
void SetupForExecute(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:737
TSubsystem * operator->() const
Definition MassQueryExecutor.h:722
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:742
Definition MassQueryExecutor.h:18
virtual void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements)=0
virtual void SetupForExecute(FMassExecutionContext &Context)=0
Definition MassQueryExecutor.h:178
virtual void ConfigureQuery(FMassEntityQuery &EntityQuery, FMassSubsystemRequirements &ProcessorRequirements) override
Definition MassQueryExecutor.h:186
TTuple< Accessors... > AccessorTuple
Definition MassQueryExecutor.h:184
void SetupForChunk(FMassExecutionContext &Context)
Definition MassQueryExecutor.h:203
FQueryDefinition(FQueryExecutor &Owner)
Definition MassQueryExecutor.h:179
constexpr auto & Get()
Definition MassQueryExecutor.h:212
virtual void SetupForExecute(FMassExecutionContext &Context) override
Definition MassQueryExecutor.h:195
Definition MassQueryExecutor.h:27
void ForEachEntityChunk(FMassExecutionContext &ExecutionContext, TAccessors &Accessors, const TFunc &&ExecuteFunction)
Definition MassQueryExecutor.h:62
static TSharedPtr< T > CreateQuery(FMassEntityQuery &InQuery, UObject *InLogOwner=nullptr)
Definition MassQueryExecutor.h:29
virtual ~FQueryExecutor()=default
UE_API FQueryExecutor()
Definition MassQueryExecutor.cpp:17
UObject * GetLogOwner()
Definition MassQueryExecutor.h:56
virtual void Execute(FMassExecutionContext &Context)=0
void ParallelForEachEntityChunk(FMassExecutionContext &ExecutionContext, const TAccessors &Accessors, const TFunc &&ExecuteFunction)
Definition MassQueryExecutor.h:75
void ParallelForEachEntity(FMassExecutionContext &ExecutionContext, TAccessors &Accessors, const TFunc &&ExecuteFunction)
Definition MassQueryExecutor.h:108
void ForEachEntity(FMassExecutionContext &ExecutionContext, TAccessors &Accessors, const TFunc &&ExecuteFunction)
Definition MassQueryExecutor.h:91