8#include "MassRequirements.generated.h"
13struct FMassRequirementAccessDetector;
111 bRequiresGameThreadExecution |= bGameThreadOnly;
115 bRequiresGameThreadExecution |= bGameThreadOnly;
129 UE_DEPRECATED(5.6,
"This flavor of FMassSubsystemRequirements::AddSubsystemRequirement is deprecated. Use one of the other flavors, or call FMassEntityQuery::AddSubsystemRequirement if applicable.")
153 bool bRequiresGameThreadExecution =
false;
181 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
183 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *
GetNameSafe(FragmentType));
214 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
216 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
247 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
276 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
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.");
299 template<EMassFragmentPresence Presence>
303 ,
"The only valid values for AddTagRequirements are All, Any and None");
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."));
316 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
339 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
341 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *
ChunkFragmentType->GetName());
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."));
368 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
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.")))
397 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
399 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *FragmentType->
GetName());
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."));
426 ,
TEXT(
"Duplicated requirements are not supported. %s already present"), *T::StaticStruct()->GetName());
458 checkf(bInitialized,
TEXT(
"Modifying requirements before initialization is not supported."));
582 mutable uint16 bPropertiesCached : 1 =
false;
583 mutable uint16 bHasPositiveRequirements : 1 =
false;
584 mutable uint16 bHasNegativeRequirements : 1 =
false;
590 mutable uint16 bHasOptionalRequirements : 1 =
false;
592 uint16 bInitialized : 1 =
false;
593 uint16 IncrementalChangesCount = 0;
595 bool bRequiresGameThreadExecution =
false;
598 UE_DEPRECATED(5.6,
"This type of FMassFragmentRequirements is no longer supported. Use one of the other constructors instead.")
628 return StructType->GetStructureSize();
633 return StructType->GetFName();
638 return RequiredConstSubsystems;
643 return RequiredMutableSubsystems;
648 return RequiredConstSubsystems.IsEmpty() && RequiredMutableSubsystems.IsEmpty();
653 return bRequiresGameThreadExecution;
809 return bHasPositiveRequirements;
814 return bHasNegativeRequirements;
819 return bHasOptionalRequirements;
824 return bRequiresGameThreadExecution;
829 ++IncrementalChangesCount;
830 bPropertiesCached =
false;
835 IncrementalChangesCount = 0;
840 return IncrementalChangesCount > 0;
#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
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
Definition NameTypes.h:617
Definition UnrealType.h:3087
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 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
FMassFragmentRequirementDescription()=default
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