UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassRequirements.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "MassEntityTypes.h"
8#include "MassRequirements.generated.h"
9
10struct FMassDebugger;
13struct FMassRequirementAccessDetector;
14class USubsystem;
15
16UENUM()
18{
20 None,
21
24
27
28 MAX
29};
30
31UENUM()
33{
35 All,
36
38 Any,
39
41 None,
42
45
46 MAX
47};
48
49
67
72{
73
76
77 template<typename T>
79 {
80 check(AccessMode != EMassFragmentAccess::None && AccessMode != EMassFragmentAccess::MAX);
81
82 // Compilation errors here like: 'GameThreadOnly': is not a member of 'TMassExternalSubsystemTraits<USmartObjectSubsystem>
83 // indicate that there is a missing header that defines the subsystem's trait or that you need to define one for that subsystem type.
84 // @see "MassExternalSubsystemTraits.h" for details
85
86 switch (AccessMode)
87 {
90 bRequiresGameThreadExecution |= TMassExternalSubsystemTraits<T>::GameThreadOnly;
91 break;
94 bRequiresGameThreadExecution |= TMassExternalSubsystemTraits<T>::GameThreadOnly;
95 break;
96 default:
97 check(false);
98 }
99
100 return *this;
101 }
102
104 {
105 check(AccessMode != EMassFragmentAccess::None && AccessMode != EMassFragmentAccess::MAX);
106
107 switch (AccessMode)
108 {
111 bRequiresGameThreadExecution |= bGameThreadOnly;
112 break;
115 bRequiresGameThreadExecution |= bGameThreadOnly;
116 break;
117 default:
118 check(false);
119 }
120
121 return *this;
122 }
123
128
129 UE_DEPRECATED(5.6, "This flavor of FMassSubsystemRequirements::AddSubsystemRequirement is deprecated. Use one of the other flavors, or call FMassEntityQuery::AddSubsystemRequirement if applicable.")
131 {
132 return AddSubsystemRequirement(SubsystemClass, AccessMode, /*bGameThreadOnly=*/true);
133 }
134
135 MASSENTITY_API void Reset();
136
139 bool IsEmpty() const;
140
143
145
146protected:
148
151
152private:
153 bool bRequiresGameThreadExecution = false;
154};
155
160{
163
167
169
171 {
172 if (UE::Mass::IsA<FMassFragment>(ElementType))
173 {
174 return AddRequirement(ElementType, AccessMode, Presence);
175 }
176 return AddTagRequirement(ElementType, Presence);
177 }
178
180 {
181 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
182 checkf(FragmentRequirements.FindByPredicate([FragmentType](const FMassFragmentRequirementDescription& Item){ return Item.StructType == FragmentType; }) == nullptr
183 , TEXT("Duplicated requirements are not supported. %s already present"), *GetNameSafe(FragmentType));
184
185 if (Presence != EMassFragmentPresence::None)
186 {
187 FragmentRequirements.Emplace(FragmentType, AccessMode, Presence);
188 }
189
190 switch (Presence)
191 {
193 RequiredAllFragments.Add(*FragmentType);
194 break;
196 RequiredAnyFragments.Add(*FragmentType);
197 break;
199 RequiredOptionalFragments.Add(*FragmentType);
200 break;
202 RequiredNoneFragments.Add(*FragmentType);
203 break;
204 }
205 // force recaching the next time this query is used or the following CacheArchetypes call.
207 return *this;
208 }
209
211 template<typename T>
213 {
214 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
215 checkf(FragmentRequirements.FindByPredicate([](const FMassFragmentRequirementDescription& Item) { return Item.StructType == T::StaticStruct(); }) == nullptr
216 , TEXT("Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
217
219
220 if (Presence != EMassFragmentPresence::None)
221 {
222 FragmentRequirements.Emplace(T::StaticStruct(), AccessMode, Presence);
223 }
224
225 switch (Presence)
226 {
228 RequiredAllFragments.Add<T>();
229 break;
231 RequiredAnyFragments.Add<T>();
232 break;
235 break;
237 RequiredNoneFragments.Add<T>();
238 break;
239 }
240 // force recaching the next time this query is used or the following CacheArchetypes call.
242 return *this;
243 }
244
246 {
247 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
248 checkf(int(Presence) != int(EMassFragmentPresence::MAX), TEXT("MAX presence is not a valid value for AddTagRequirement"));
249 switch (Presence)
250 {
253 break;
256 break;
259 break;
262 break;
263 }
265 return *this;
266 }
267
269 {
270 AddTagRequirement(&TagType, Presence);
271 }
272
273 template<typename T>
275 {
276 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
277 checkf(int(Presence) != int(EMassFragmentPresence::MAX), TEXT("MAX presence is not a valid value for AddTagRequirement"));
278 static_assert(UE::Mass::CTag<T>, "Given struct doesn't represent a valid tag type. Make sure to inherit from FMassFragment or one of its child-types.");
279 switch (Presence)
280 {
282 RequiredAllTags.Add<T>();
283 break;
285 RequiredAnyTags.Add<T>();
286 break;
288 RequiredNoneTags.Add<T>();
289 break;
291 RequiredOptionalTags.Add<T>();
292 break;
293 }
295 return *this;
296 }
297
299 template<EMassFragmentPresence Presence>
301 {
302 static_assert(Presence == EMassFragmentPresence::None || Presence == EMassFragmentPresence::All || Presence == EMassFragmentPresence::Any
303 , "The only valid values for AddTagRequirements are All, Any and None");
304 return *this;
305 }
306
309
310 template<typename T>
312 {
313 static_assert(UE::Mass::CChunkFragment<T>, "Given struct doesn't represent a valid chunk fragment type. Make sure to inherit from FMassChunkFragment or one of its child-types.");
314 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
315 checkf(ChunkFragmentRequirements.FindByPredicate([](const FMassFragmentRequirementDescription& Item) { return Item.StructType == T::StaticStruct(); }) == nullptr
316 , TEXT("Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
317 checkf(Presence != EMassFragmentPresence::Any, TEXT("\'Any\' is not a valid Presence value for AddChunkRequirement."));
318
319 switch (Presence)
320 {
323 ChunkFragmentRequirements.Emplace(T::StaticStruct(), AccessMode, Presence);
324 break;
327 ChunkFragmentRequirements.Emplace(T::StaticStruct(), AccessMode, Presence);
328 break;
331 break;
332 }
334 return *this;
335 }
336
338 {
339 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
340 checkf(ChunkFragmentRequirements.FindByPredicate([&ChunkFragmentType](const FMassFragmentRequirementDescription& Item) { return Item.StructType == ChunkFragmentType; }) == nullptr
341 , TEXT("Duplicated requirements are not supported. %s already present"), *ChunkFragmentType->GetName());
342 checkf(Presence != EMassFragmentPresence::Any, TEXT("\'Any\' is not a valid Presence value for AddChunkRequirement."));
343
344 switch (Presence)
345 {
349 break;
353 break;
356 break;
357 }
359 return *this;
360 }
361
362 template<typename T>
364 {
365 static_assert(UE::Mass::CConstSharedFragment<T>, "Given struct doesn't represent a valid const shared fragment type. Make sure to inherit from FMassConstSharedFragment or one of its child-types.");
366 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
367 checkf(ConstSharedFragmentRequirements.FindByPredicate([](const FMassFragmentRequirementDescription& Item) { return Item.StructType == T::StaticStruct(); }) == nullptr
368 , TEXT("Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
369 checkf(Presence != EMassFragmentPresence::Any, TEXT("\'Any\' is not a valid Presence value for AddConstSharedRequirement."));
370
371 switch (Presence)
372 {
376 break;
380 break;
383 break;
384 }
386 return *this;
387 }
388
390 {
392 , TEXT("Given struct doesn't represent a valid const shared fragment type. Make sure to inherit from FMassConstSharedFragment or one of its child-types.")))
393 {
394 return *this;
395 }
396
397 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
398 checkf(ConstSharedFragmentRequirements.FindByPredicate([FragmentType](const FMassFragmentRequirementDescription& Item) { return Item.StructType == FragmentType; }) == nullptr
399 , TEXT("Duplicated requirements are not supported. %s already present"), *FragmentType->GetName());
400 checkf(Presence != EMassFragmentPresence::Any, TEXT("\'Any\' is not a valid Presence value for AddConstSharedRequirement."));
401
402 switch (Presence)
403 {
405 RequiredAllConstSharedFragments.Add(*FragmentType);
407 break;
409 RequiredOptionalConstSharedFragments.Add(*FragmentType);
411 break;
413 RequiredNoneConstSharedFragments.Add(*FragmentType);
414 break;
415 }
417 return *this;
418 }
419
420 template<typename T>
422 {
423 static_assert(UE::Mass::CSharedFragment<T>, "Given struct doesn't represent a valid shared fragment type. Make sure to inherit from FMassSharedFragment or one of its child-types.");
424 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
425 checkf(SharedFragmentRequirements.FindByPredicate([](const FMassFragmentRequirementDescription& Item) { return Item.StructType == T::StaticStruct(); }) == nullptr
426 , TEXT("Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
427 checkf(Presence != EMassFragmentPresence::Any, TEXT("\'Any\' is not a valid Presence value for AddSharedRequirement."));
428
429 switch (Presence)
430 {
433 SharedFragmentRequirements.Emplace(T::StaticStruct(), AccessMode, Presence);
434 if (AccessMode == EMassFragmentAccess::ReadWrite)
435 {
436 bRequiresGameThreadExecution |= TMassSharedFragmentTraits<T>::GameThreadOnly;
437 }
438 break;
441 SharedFragmentRequirements.Emplace(T::StaticStruct(), AccessMode, Presence);
442 if (AccessMode == EMassFragmentAccess::ReadWrite)
443 {
444 bRequiresGameThreadExecution |= TMassSharedFragmentTraits<T>::GameThreadOnly;
445 }
446 break;
449 break;
450 }
452 return *this;
453 }
454
456 {
457 checkf(UE::Mass::IsA<FMassSharedFragment>(SharedFragmentType), TEXT("Given struct doesn't represent a valid shared fragment type. Make sure to inherit from FMassSharedFragment or one of its child-types."));
458 checkf(bInitialized, TEXT("Modifying requirements before initialization is not supported."));
459 checkf(SharedFragmentRequirements.FindByPredicate([&SharedFragmentType](const FMassFragmentRequirementDescription& Item) { return Item.StructType == SharedFragmentType; }) == nullptr
460 , TEXT("Duplicated requirements are not supported. %s already present"), *SharedFragmentType->GetName());
461 checkf(Presence != EMassFragmentPresence::Any, TEXT("\'Any\' is not a valid Presence value for AddSharedRequirement."));
462
463 switch (Presence)
464 {
468 if (AccessMode == EMassFragmentAccess::ReadWrite)
469 {
470 bRequiresGameThreadExecution |= IsGameThreadOnlySharedFragment(SharedFragmentType);
471 }
472 break;
476 if (AccessMode == EMassFragmentAccess::ReadWrite)
477 {
478 bRequiresGameThreadExecution |= IsGameThreadOnlySharedFragment(SharedFragmentType);
479 }
480 break;
483 break;
484 }
486 return *this;
487 }
488
489 MASSENTITY_API void Reset();
490
497 MASSENTITY_API bool CheckValidity() const;
498
507 const FMassTagBitSet& GetRequiredAllTags() const;
508 const FMassTagBitSet& GetRequiredAnyTags() const;
509 const FMassTagBitSet& GetRequiredNoneTags() const;
520
521 bool IsInitialized() const;
522 MASSENTITY_API bool IsEmpty() const;
523 bool HasPositiveRequirements() const;
524 bool HasNegativeRequirements() const;
525 bool HasOptionalRequirements() const;
526
527 MASSENTITY_API bool DoesArchetypeMatchRequirements(const FMassArchetypeHandle& ArchetypeHandle) const;
530
533
535
536protected:
538
541 bool HasIncrementalChanges() const;
542
549
551
577
579
580private:
581 MASSENTITY_API void CacheProperties() const;
582 mutable uint16 bPropertiesCached : 1 = false;
583 mutable uint16 bHasPositiveRequirements : 1 = false;
584 mutable uint16 bHasNegativeRequirements : 1 = false;
590 mutable uint16 bHasOptionalRequirements : 1 = false;
591
592 uint16 bInitialized : 1 = false;
593 uint16 IncrementalChangesCount = 0;
594
595 bool bRequiresGameThreadExecution = false;
596
597public:
598 UE_DEPRECATED(5.6, "This type of FMassFragmentRequirements is no longer supported. Use one of the other constructors instead.")
600
601 UE_DEPRECATED(5.6, "This type of FMassFragmentRequirements is no longer supported. Use one of the other constructors instead.")
603};
604
605//-----------------------------------------------------------------------------
606// INLINE
607//-----------------------------------------------------------------------------
615
617{
618 return (AccessMode != EMassFragmentAccess::None);
619}
620
622{
623 return (Presence == EMassFragmentPresence::Optional || Presence == EMassFragmentPresence::Any);
624}
625
627{
628 return StructType->GetStructureSize();
629}
630
632{
633 return StructType->GetFName();
634}
635
637{
638 return RequiredConstSubsystems;
639}
640
642{
643 return RequiredMutableSubsystems;
644}
645
647{
648 return RequiredConstSubsystems.IsEmpty() && RequiredMutableSubsystems.IsEmpty();
649}
650
652{
653 return bRequiresGameThreadExecution;
654}
655
657{
658 return HashCombine(GetTypeHash(Instance.RequiredConstSubsystems), GetTypeHash(Instance.RequiredMutableSubsystems));
659}
660
661template<>
662inline FMassFragmentRequirements& FMassFragmentRequirements::AddTagRequirements<EMassFragmentPresence::All>(const FMassTagBitSet& TagBitSet)
663{
665 // force re-caching the next time this query is used or the following CacheArchetypes call.
667 return *this;
668}
669
670template<>
671inline FMassFragmentRequirements& FMassFragmentRequirements::AddTagRequirements<EMassFragmentPresence::Any>(const FMassTagBitSet& TagBitSet)
672{
674 // force re-caching the next time this query is used or the following CacheArchetypes call.
676 return *this;
677}
678
679template<>
680inline FMassFragmentRequirements& FMassFragmentRequirements::AddTagRequirements<EMassFragmentPresence::None>(const FMassTagBitSet& TagBitSet)
681{
683 // force re-caching the next time this query is used or the following CacheArchetypes call.
685 return *this;
686}
687
688template<>
689inline FMassFragmentRequirements& FMassFragmentRequirements::AddTagRequirements<EMassFragmentPresence::Optional>(const FMassTagBitSet& TagBitSet)
690{
692 // force re-caching the next time this query is used or the following CacheArchetypes call.
694 return *this;
695}
696
701
706
711
716
721
726
731
736
741
746
751
756
761
766
771
776
781
786
791
796
801
803{
804 return bInitialized;
805}
806
808{
809 return bHasPositiveRequirements;
810}
811
813{
814 return bHasNegativeRequirements;
815}
816
818{
819 return bHasOptionalRequirements;
820}
821
823{
824 return bRequiresGameThreadExecution;
825}
826
828{
829 ++IncrementalChangesCount;
830 bPropertiesCached = false;
831}
832
834{
835 IncrementalChangesCount = 0;
836}
837
839{
840 return IncrementalChangesCount > 0;
841}
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FString GetNameSafe(const FField *InField)
Definition Field.h:1230
#define TEXT(x)
Definition Platform.h:1272
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
#define MASS_INVALID_FRAGMENT_MSG
Definition MassEntityElementTypes.h:16
EMassFragmentAccess
Definition MassRequirements.h:18
EMassFragmentPresence
Definition MassRequirements.h:33
T TNotNull
Definition NotNull.h:307
#define UENUM(...)
Definition ObjectMacros.h:749
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition Array.h:670
ElementType * FindByPredicate(Predicate Pred)
Definition Array.h:1471
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SubclassOf.h:30
UE_FORCEINLINE_HINT FString GetName() const
Definition UObjectBaseUtility.h:439
Definition Class.h:1720
Definition Subsystem.h:48
Definition MassEntityConcepts.h:26
Definition MassEntityConcepts.h:32
Definition MassEntityConcepts.h:16
Definition MassEntityConcepts.h:29
Definition MassEntityConcepts.h:23
bool IsA< FMassSharedFragment >(const UStruct *Struct)
Definition MassEntityElementTypes.h:73
bool IsA< FMassFragment >(const UStruct *Struct)
Definition MassEntityElementTypes.h:55
bool IsA< FMassConstSharedFragment >(const UStruct *Struct)
Definition MassEntityElementTypes.h:79
Definition MassEntityTypes.h:74
Definition MassArchetypeTypes.h:39
Definition MassDebugger.h:441
Definition MassProcessorDependencySolver.h:68
Definition MassRequirements.h:51
int32 GetStructureSize() const
Definition MassRequirements.h:626
const UScriptStruct * StructType
Definition MassRequirements.h:63
EMassFragmentPresence Presence
Definition MassRequirements.h:65
bool IsOptional() const
Definition MassRequirements.h:621
bool RequiresBinding() const
Definition MassRequirements.h:616
EMassFragmentAccess AccessMode
Definition MassRequirements.h:64
FName GetFName() const
Definition MassRequirements.h:631
Definition MassRequirements.h:160
const FMassSharedFragmentBitSet & GetRequiredNoneSharedFragments() const
Definition MassRequirements.h:782
TArray< FMassFragmentRequirementDescription > ChunkFragmentRequirements
Definition MassRequirements.h:553
TSharedPtr< FMassEntityManager > CachedEntityManager
Definition MassRequirements.h:578
const FMassConstSharedFragmentBitSet & GetRequiredAllConstSharedFragments() const
Definition MassRequirements.h:787
MASSENTITY_API bool DoesMatchAnyOptionals(const FMassArchetypeCompositionDescriptor &ArchetypeComposition) const
Definition MassRequirements.cpp:227
FMassFragmentRequirements()=default
TArray< FMassFragmentRequirementDescription > SharedFragmentRequirements
Definition MassRequirements.h:555
const FMassSharedFragmentBitSet & GetRequiredAllSharedFragments() const
Definition MassRequirements.h:772
FMassFragmentBitSet RequiredNoneFragments
Definition MassRequirements.h:567
const FMassTagBitSet & GetRequiredAnyTags() const
Definition MassRequirements.h:742
MASSENTITY_API void SortRequirements()
Definition MassRequirements.cpp:154
const FMassTagBitSet & GetRequiredAllTags() const
Definition MassRequirements.h:737
const FMassConstSharedFragmentBitSet & GetRequiredOptionalConstSharedFragments() const
Definition MassRequirements.h:792
FMassFragmentRequirements & AddConstSharedRequirement(const UScriptStruct *FragmentType, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:389
const FMassConstSharedFragmentBitSet & GetRequiredNoneConstSharedFragments() const
Definition MassRequirements.h:797
const FMassFragmentBitSet & GetRequiredOptionalFragments() const
Definition MassRequirements.h:727
FMassFragmentRequirements & AddChunkRequirement(TNotNull< const UScriptStruct * > ChunkFragmentType, const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:337
void ConsumeIncrementalChangesCount()
Definition MassRequirements.h:833
const FMassChunkFragmentBitSet & GetRequiredAllChunkFragments() const
Definition MassRequirements.h:757
FMassSharedFragmentBitSet RequiredNoneSharedFragments
Definition MassRequirements.h:573
MASSENTITY_API bool DoesArchetypeMatchRequirements(const FMassArchetypeHandle &ArchetypeHandle) const
Definition MassRequirements.cpp:237
const FMassFragmentBitSet & GetRequiredNoneFragments() const
Definition MassRequirements.h:732
FMassSharedFragmentBitSet RequiredOptionalSharedFragments
Definition MassRequirements.h:572
FMassConstSharedFragmentBitSet RequiredNoneConstSharedFragments
Definition MassRequirements.h:576
bool HasNegativeRequirements() const
Definition MassRequirements.h:812
FMassFragmentRequirements & AddRequirement(const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:212
TConstArrayView< FMassFragmentRequirementDescription > GetConstSharedFragmentRequirements() const
Definition MassRequirements.h:707
const FMassFragmentBitSet & GetRequiredAllFragments() const
Definition MassRequirements.h:717
bool DoesRequireGameThreadExecution() const
Definition MassRequirements.h:822
FMassFragmentRequirements & AddSharedRequirement(const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:421
FMassFragmentRequirements & AddTagRequirement(const EMassFragmentPresence Presence)
Definition MassRequirements.h:274
FMassChunkFragmentBitSet RequiredNoneChunkFragments
Definition MassRequirements.h:570
MASSENTITY_API FMassFragmentRequirements & ClearTagRequirements(const FMassTagBitSet &TagsToRemoveBitSet)
Definition MassRequirements.cpp:117
FMassTagBitSet RequiredOptionalTags
Definition MassRequirements.h:563
MASSENTITY_API void ExportRequirements(FMassExecutionRequirements &OutRequirements) const
Definition MassRequirements.cpp:279
bool HasIncrementalChanges() const
Definition MassRequirements.h:838
FMassFragmentRequirements & AddRequirement(const UScriptStruct *FragmentType, const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:179
FMassFragmentBitSet RequiredOptionalFragments
Definition MassRequirements.h:566
FMassTagBitSet RequiredAnyTags
Definition MassRequirements.h:557
FMassSharedFragmentBitSet RequiredAllSharedFragments
Definition MassRequirements.h:571
MASSENTITY_API friend uint32 GetTypeHash(const FMassFragmentRequirements &Instance)
Definition MassRequirements.cpp:127
MASSENTITY_API void Reset()
Definition MassRequirements.cpp:293
FMassFragmentRequirements & AddSharedRequirement(TNotNull< const UScriptStruct * > SharedFragmentType, const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:455
const FMassChunkFragmentBitSet & GetRequiredNoneChunkFragments() const
Definition MassRequirements.h:767
const FMassSharedFragmentBitSet & GetRequiredOptionalSharedFragments() const
Definition MassRequirements.h:777
friend FMassDebugger
Definition MassRequirements.h:161
FMassConstSharedFragmentBitSet RequiredOptionalConstSharedFragments
Definition MassRequirements.h:575
FMassFragmentRequirements & AddElementRequirement(TNotNull< const UScriptStruct * > ElementType, const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:170
FMassFragmentRequirements & AddConstSharedRequirement(const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:363
FMassChunkFragmentBitSet RequiredOptionalChunkFragments
Definition MassRequirements.h:569
TArray< FMassFragmentRequirementDescription > FragmentRequirements
Definition MassRequirements.h:552
FMassChunkFragmentBitSet RequiredAllChunkFragments
Definition MassRequirements.h:568
friend FMassRequirementAccessDetector
Definition MassRequirements.h:162
TConstArrayView< FMassFragmentRequirementDescription > GetChunkFragmentRequirements() const
Definition MassRequirements.h:702
MASSENTITY_API bool CheckValidity() const
Definition MassRequirements.cpp:212
FMassTagBitSet RequiredAllTags
Definition MassRequirements.h:556
bool HasPositiveRequirements() const
Definition MassRequirements.h:807
TConstArrayView< FMassFragmentRequirementDescription > GetSharedFragmentRequirements() const
Definition MassRequirements.h:712
void IncrementChangeCounter()
Definition MassRequirements.h:827
FMassConstSharedFragmentBitSet RequiredAllConstSharedFragments
Definition MassRequirements.h:574
MASSENTITY_API bool IsGameThreadOnlySharedFragment(TNotNull< const UScriptStruct * > SharedFragmentType) const
Definition MassRequirements.cpp:166
FMassFragmentRequirements & AddTagRequirements(const FMassTagBitSet &TagBitSet)
Definition MassRequirements.h:300
FMassFragmentRequirements & AddChunkRequirement(const EMassFragmentAccess AccessMode, const EMassFragmentPresence Presence=EMassFragmentPresence::All)
Definition MassRequirements.h:311
const FMassFragmentBitSet & GetRequiredAnyFragments() const
Definition MassRequirements.h:722
const FMassChunkFragmentBitSet & GetRequiredOptionalChunkFragments() const
Definition MassRequirements.h:762
FMassTagBitSet RequiredNoneTags
Definition MassRequirements.h:558
FMassFragmentBitSet RequiredAnyFragments
Definition MassRequirements.h:565
FMassFragmentBitSet RequiredAllFragments
Definition MassRequirements.h:564
const FMassTagBitSet & GetRequiredOptionalTags() const
Definition MassRequirements.h:752
bool IsInitialized() const
Definition MassRequirements.h:802
bool HasOptionalRequirements() const
Definition MassRequirements.h:817
const FMassTagBitSet & GetRequiredNoneTags() const
Definition MassRequirements.h:747
FMassFragmentRequirements & AddTagRequirement(TNotNull< const UScriptStruct * > TagType, const EMassFragmentPresence Presence)
Definition MassRequirements.h:245
void AddTagRequirement(const UScriptStruct &TagType, const EMassFragmentPresence Presence)
Definition MassRequirements.h:268
TConstArrayView< FMassFragmentRequirementDescription > GetFragmentRequirements() const
Definition MassRequirements.h:697
TArray< FMassFragmentRequirementDescription > ConstSharedFragmentRequirements
Definition MassRequirements.h:554
MASSENTITY_API bool IsEmpty() const
Definition MassRequirements.cpp:219
Definition MassRequirements.h:72
friend uint32 GetTypeHash(const FMassSubsystemRequirements &Instance)
Definition MassRequirements.h:656
const FMassExternalSubsystemBitSet & GetRequiredConstSubsystems() const
Definition MassRequirements.h:636
const FMassExternalSubsystemBitSet & GetRequiredMutableSubsystems() const
Definition MassRequirements.h:641
bool DoesRequireGameThreadExecution() const
Definition MassRequirements.h:651
FMassSubsystemRequirements & AddSubsystemRequirement(const TSubclassOf< USubsystem > SubsystemClass, const EMassFragmentAccess AccessMode, const TSharedRef< FMassEntityManager > &EntityManager)
Definition MassRequirements.h:124
bool IsEmpty() const
Definition MassRequirements.h:646
MASSENTITY_API void Reset()
Definition MassRequirements.cpp:65
static MASSENTITY_API bool IsGameThreadOnlySubsystem(const TSubclassOf< USubsystem > SubsystemClass, const TSharedRef< FMassEntityManager > &EntityManager)
Definition MassRequirements.cpp:72
friend FMassDebugger
Definition MassRequirements.h:74
friend FMassRequirementAccessDetector
Definition MassRequirements.h:75
FMassExternalSubsystemBitSet RequiredConstSubsystems
Definition MassRequirements.h:149
FMassSubsystemRequirements & AddSubsystemRequirement(const TSubclassOf< USubsystem > SubsystemClass, const EMassFragmentAccess AccessMode, const bool bGameThreadOnly)
Definition MassRequirements.h:103
FMassExternalSubsystemBitSet RequiredMutableSubsystems
Definition MassRequirements.h:150
FMassSubsystemRequirements & AddSubsystemRequirement(const EMassFragmentAccess AccessMode)
Definition MassRequirements.h:78
MASSENTITY_API void ExportRequirements(FMassExecutionRequirements &OutRequirements) const
Definition MassRequirements.cpp:59
Definition MassExternalSubsystemTraits.h:27
Definition MassExternalSubsystemTraits.h:44