8#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
17#define CHECK_IF_VALID(View, Type) \
19 , TEXT("Requested fragment type not bound, type %s. Make sure it has been listed as required."), *GetNameSafe(Type))
21#define CHECK_IF_READWRITE(View) \
22 checkf(View == nullptr || View->Requirement.AccessMode == EMassFragmentAccess::ReadWrite \
23 , TEXT("Requested fragment type not bound for writing, type %s. Make sure it has been listed as required in ReadWrite mode.") \
24 , View ? *GetNameSafe(View->Requirement.StructType) : TEXT("[Not found]"))
32 template<
typename ViewType >
36 ViewType FragmentView;
67 float DeltaTimeSeconds = 0.0f;
68 int32 ChunkSerialModificationNumber = -1;
70#if WITH_MASSENTITY_DEBUG
76 struct FQueryTransientRuntime
81#if WITH_MASSENTITY_DEBUG
91 uint32 IteratorSerialNumber = 0;
94 static FQueryTransientRuntime& GetDummyInstance();
101 uint32 IteratorSerialNumberGenerator = 0;
103#if WITH_MASSENTITY_DEBUG
113 bool bFlushDeferredCommands =
true;
153#if WITH_MASSENTITY_DEBUG
182 return EntityIndex !=
Other;
192 return SerialNumber && EntityIndex < NumEntities;
197 return SerialNumber && EntityIndex !=
INDEX_NONE && EntityIndex <
Other;
203#if WITH_MASSENTITY_DEBUG
204 if (
UNLIKELY(QueryRuntime.bCheckProcessorBreaks || QueryRuntime.BreakFragmentsCount != 0)
205 && EntityIndex < NumEntities)
226 End.EntityIndex = NumEntities;
246#if WITH_MASSENTITY_DEBUG
251 const FQueryTransientRuntime& QueryRuntime;
254 const uint32 SerialNumber = 0;
287 return EntityListView[
Index];
300 return CurrentArchetypeCompositionDescriptor.
GetFragments().Contains(FragmentType);
307 return CurrentArchetypeCompositionDescriptor.
GetFragments().Contains<T>();
312 return CurrentArchetypeCompositionDescriptor.
GetTags().Contains(
TagType);
319 return CurrentArchetypeCompositionDescriptor.
GetTags().Contains<T>();
322#if WITH_MASSENTITY_DEBUG
336 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.");
355 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.");
358 const FChunkFragmentView*
FoundChunkFragmentData = ChunkFragmentViews.
FindByPredicate([Type](
const FChunkFragmentView& Element) {
return Element.Requirement.StructType == Type; } );
380 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.");
382 const FConstSharedFragmentView*
FoundSharedFragmentData = ConstSharedFragmentViews.
FindByPredicate([](
const FConstSharedFragmentView& Element) {
return Element.Requirement.StructType == T::StaticStruct(); });
397 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.");
399 FSharedFragmentView*
FoundSharedFragmentData = SharedFragmentViews.
FindByPredicate([](
const FSharedFragmentView& Element) {
return Element.Requirement.StructType == T::StaticStruct(); });
407 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.");
409 const FSharedFragmentView*
FoundSharedFragmentData = SharedFragmentViews.
FindByPredicate([](
const FSharedFragmentView& Element) {
return Element.Requirement.StructType == T::StaticStruct(); });
430 template<
typename TFragment>
433 const UScriptStruct* FragmentType = TFragment::StaticStruct();
434 const FFragmentView* View = FragmentViews.
FindByPredicate([FragmentType](
const FFragmentView& Element) {
return Element.Requirement.StructType == FragmentType; });
440 template<
typename TFragment>
443 const UScriptStruct* FragmentType = TFragment::StaticStruct();
444 const FFragmentView* View = FragmentViews.
FindByPredicate([FragmentType](
const FFragmentView& Element) {
return Element.Requirement.StructType == FragmentType; });
451 const FFragmentView* View = FragmentViews.
FindByPredicate([FragmentType](
const FFragmentView& Element) {
return Element.Requirement.StructType == FragmentType; });
458 const FFragmentView* View = FragmentViews.
FindByPredicate([FragmentType](
const FFragmentView& Element) {
return Element.Requirement.StructType == FragmentType; });
461 return View->FragmentView;
464 template<
typename TFragmentBase>
467 check(FragmentType->IsChildOf(TFragmentBase::StaticStruct()));
472 template<
typename TFragmentBase>
475 check(FragmentType->IsChildOf(TFragmentBase::StaticStruct()));
534 template<
typename TFragment>
538 return FragmentType !=
nullptr && FragmentType == TFragment::StaticStruct();
546 CurrentArchetypeCompositionDescriptor = Descriptor;
549#if WITH_MASSENTITY_DEBUG
552 DebugColor = InColor;
577 for (FFragmentView& View : FragmentViews)
581 for (FChunkFragmentView& View : ChunkFragmentViews)
583 View.FragmentView.Reset();
585 for (FConstSharedFragmentView& View : ConstSharedFragmentViews)
587 View.FragmentView.Reset();
589 for (FSharedFragmentView& View : SharedFragmentViews)
591 View.FragmentView.Reset();
601 return EntityManager.Get();
606 return EntityManager;
621 EntityCollection.
Reset();
631 return DeltaTimeSeconds;
642 return ExecutionType;
648 return *QueriesStack.
Last().Query;
653 return QueriesStack.
Num() && QueriesStack.
Last().Query == &
Query;
669#undef CHECK_IF_READWRITE
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
EMassExecutionContextType
Definition MassEntityTypes.h:612
#define CHECK_IF_VALID(View, Type)
Definition MassExecutionContext.h:17
#define CHECK_IF_READWRITE(View)
Definition MassExecutionContext.h:21
T TNotNull
Definition NotNull.h:307
const bool
Definition NetworkReplayStreaming.h:178
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr ElementType * GetData() const
Definition ArrayView.h:295
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
ElementType * FindByPredicate(Predicate Pred)
Definition Array.h:1471
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Last(SizeType IndexFromTheEnd=0) UE_LIFETIMEBOUND
Definition Array.h:1263
Definition AndroidPlatformMisc.h:14
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT ObjectType * Get() const
Definition SharedPointer.h:1065
UE_FORCEINLINE_HINT const bool IsValid() const
Definition SharedPointer.h:1085
Definition SharedPointer.h:153
Definition StaticArray.h:26
Definition SubclassOf.h:30
Definition MassProcessor.h:78
Definition MassEntityConcepts.h:26
Definition MassEntityConcepts.h:32
Definition MassEntityConcepts.h:16
Definition MassEntityConcepts.h:29
Definition MassEntityConcepts.h:23
@ Description
Definition PathFollowingComponent.h:177
U16 Index
Definition radfft.cpp:71
Definition InstancedStruct.h:32
const UScriptStruct * GetScriptStruct() const
Definition InstancedStruct.h:169
Definition MassEntityTypes.h:74
const FMassFragmentBitSet & GetFragments() const
Definition MassEntityTypes.h:907
const FMassTagBitSet & GetTags() const
Definition MassEntityTypes.h:912
Definition MassArchetypeData.h:172
Definition MassArchetypeTypes.h:93
void Reset()
Definition MassArchetypeTypes.h:189
Definition MassCommandBuffer.h:99
Definition MassEntityHandle.h:13
Definition MassEntityManager.h:96
Definition MassEntityQuery.h:51
Definition MassExecutionContext.h:174
FEntityIterator(FEntityIterator &&)=default
FEntityIterator & operator++()
Definition MassExecutionContext.h:200
bool operator!=(const int &Other) const
Definition MassExecutionContext.h:180
FEntityIterator & operator=(FEntityIterator &&)=delete
FEntityIterator & operator=(const FEntityIterator &)=delete
void operator++(int)
Definition MassExecutionContext.h:213
bool operator<(const int32 Other) const
Definition MassExecutionContext.h:195
FEntityIterator end() const
Definition MassExecutionContext.h:223
MASSENTITY_API FEntityIterator()
Definition MassExecutionContext.cpp:206
FEntityIterator(const FEntityIterator &)=delete
int32 operator*() const
Definition MassExecutionContext.h:175
FEntityIterator && begin()
Definition MassExecutionContext.h:218
Definition MassExecutionContext.h:29
const FMassEntityQuery & GetCurrentQuery() const
Definition MassExecutionContext.h:645
void ClearExecutionData()
Definition MassExecutionContext.cpp:52
void ApplyFragmentRequirements(const FMassEntityQuery &RequestingQuery)
Definition MassExecutionContext.h:656
const T & GetSubsystemChecked(const TSubclassOf< USubsystem > SubsystemClass)
Definition MassExecutionContext.h:523
FInstancedStruct & GetMutableAuxData()
Definition MassExecutionContext.h:532
const T * GetChunkFragmentPtr() const
Definition MassExecutionContext.h:353
void SetDeferredCommandBuffer(const TSharedPtr< FMassCommandBuffer > &InDeferredCommandBuffer)
Definition MassExecutionContext.h:614
TArrayView< TFragment > GetMutableFragmentView()
Definition MassExecutionContext.h:431
const T & GetSubsystemChecked()
Definition MassExecutionContext.h:499
TConstArrayView< FMassFragment > GetFragmentView(const UScriptStruct *FragmentType) const
Definition MassExecutionContext.h:449
T & GetMutableSharedFragment()
Definition MassExecutionContext.h:414
TArrayView< TFragmentBase > GetMutableFragmentView(TNotNull< const UScriptStruct * > FragmentType)
Definition MassExecutionContext.h:473
T * GetMutableSubsystem()
Definition MassExecutionContext.h:481
const FMassArchetypeEntityCollection & GetEntityCollection() const
Definition MassExecutionContext.h:529
bool DoesArchetypeHaveFragment() const
Definition MassExecutionContext.h:304
T & GetMutableChunkFragment()
Definition MassExecutionContext.h:345
const T * GetSubsystem(const TSubclassOf< USubsystem > SubsystemClass)
Definition MassExecutionContext.h:517
TConstArrayView< FMassEntityHandle > GetEntities() const
Definition MassExecutionContext.h:282
FMassExecutionContext(FMassExecutionContext &&Other)=default
void SetCurrentArchetypeCompositionDescriptor(const FMassArchetypeCompositionDescriptor &Descriptor)
Definition MassExecutionContext.h:544
int32 GetChunkSerialModificationNumber() const
Definition MassExecutionContext.h:331
float GetDeltaTimeSeconds() const
Definition MassExecutionContext.h:629
void ForEachEntityInChunk(const FMassEntityExecuteFunction &EntityExecuteFunction)
Definition MassExecutionContext.h:290
bool DoesArchetypeHaveTag(const UScriptStruct &TagType) const
Definition MassExecutionContext.h:310
bool DoesArchetypeHaveTag() const
Definition MassExecutionContext.h:316
int32 GetNumEntities() const
Definition MassExecutionContext.h:283
void SetSubsystemRequirements(const FMassSubsystemRequirements &SubsystemRequirements)
Definition MassExecutionContext.h:568
const T & GetConstSharedFragment() const
Definition MassExecutionContext.h:387
FMassEntityHandle GetEntity(const int32 Index) const
Definition MassExecutionContext.h:285
void SetFragmentRequirements(const FMassFragmentRequirements &FragmentRequirements)
Definition MassExecutionContext.cpp:84
TConstArrayView< TFragmentBase > GetFragmentView(TNotNull< const UScriptStruct * > FragmentType) const
Definition MassExecutionContext.h:465
void PushQuery(FMassEntityQuery &InQuery)
Definition MassExecutionContext.cpp:128
MASSENTITY_API void FlushDeferred()
Definition MassExecutionContext.cpp:44
const T * GetSharedFragmentPtr() const
Definition MassExecutionContext.h:405
const T & GetSharedFragment() const
Definition MassExecutionContext.h:422
void SetCurrentChunkSerialModificationNumber(const int32 SerialModificationNumber)
Definition MassExecutionContext.h:330
bool IsCurrentQuery(const FMassEntityQuery &Query) const
Definition MassExecutionContext.h:651
MASSENTITY_API UWorld * GetWorld()
Definition MassExecutionContext.cpp:123
EMassExecutionContextType GetExecutionType() const
Definition MassExecutionContext.h:640
T * GetMutableSharedFragmentPtr()
Definition MassExecutionContext.h:395
const T & GetChunkFragment() const
Definition MassExecutionContext.h:363
FMassEntityManager & GetEntityManagerChecked() const
Definition MassExecutionContext.h:599
void ClearFragmentViews()
Definition MassExecutionContext.h:575
void ClearEntityCollection()
Definition MassExecutionContext.h:619
TConstArrayView< TFragment > GetFragmentView() const
Definition MassExecutionContext.h:441
void PopQuery(const FMassEntityQuery &InQuery)
Definition MassExecutionContext.cpp:167
TArrayView< FMassFragment > GetMutableFragmentView(const UScriptStruct *FragmentType)
Definition MassExecutionContext.h:456
void SetExecutionType(EMassExecutionContextType InExecutionType)
Definition MassExecutionContext.h:634
static MASSENTITY_API FMassExecutionContext & GetDummyInstance()
Definition MassExecutionContext.cpp:187
bool ValidateAuxDataType() const
Definition MassExecutionContext.h:535
TSharedPtr< FMassCommandBuffer > GetSharedDeferredCommandBuffer() const
Definition MassExecutionContext.h:279
const T * GetConstSharedFragmentPtr() const
Definition MassExecutionContext.h:378
FMassCommandBuffer & Defer() const
Definition MassExecutionContext.h:280
T * GetMutableSubsystem(const TSubclassOf< USubsystem > SubsystemClass)
Definition MassExecutionContext.h:505
bool DoesArchetypeHaveFragment(const UScriptStruct &FragmentType) const
Definition MassExecutionContext.h:298
const void * GetConstSharedFragmentPtr(const UScriptStruct &SharedFragmentType) const
Definition MassExecutionContext.h:371
bool CacheSubsystemRequirements(const FMassSubsystemRequirements &SubsystemRequirements)
Definition MassExecutionContext.cpp:66
MASSENTITY_API ~FMassExecutionContext()
Definition MassExecutionContext.cpp:39
const TSharedRef< FMassEntityManager > & GetSharedEntityManager()
Definition MassExecutionContext.h:604
MASSENTITY_API void SetEntityCollection(const FMassArchetypeEntityCollection &InEntityCollection)
Definition MassExecutionContext.cpp:71
void SetFlushDeferredCommands(const bool bNewFlushDeferredCommands)
Definition MassExecutionContext.h:609
T & GetMutableSubsystemChecked(const TSubclassOf< USubsystem > SubsystemClass)
Definition MassExecutionContext.h:511
MASSENTITY_API FEntityIterator CreateEntityIterator()
Definition MassExecutionContext.cpp:177
const FInstancedStruct & GetAuxData() const
Definition MassExecutionContext.h:531
T * GetMutableChunkFragmentPtr()
Definition MassExecutionContext.h:334
void SetAuxData(const FInstancedStruct &InAuxData)
Definition MassExecutionContext.h:624
const T * GetSubsystem()
Definition MassExecutionContext.h:493
T & GetMutableSubsystemChecked()
Definition MassExecutionContext.h:487
Definition MassRequirements.h:51
const UScriptStruct * StructType
Definition MassRequirements.h:63
Definition MassRequirements.h:160
Definition MassEntityElementTypes.h:10
Definition MassSubsystemAccess.h:23
void SetSubsystemRequirementBits(const FMassExternalSubsystemBitSet &InConstSubsystemsBitSet, const FMassExternalSubsystemBitSet &InMutableSubsystemsBitSet)
Definition MassSubsystemAccess.h:126
const T * GetSubsystem()
Definition MassSubsystemAccess.h:51
const T & GetSubsystemChecked()
Definition MassSubsystemAccess.h:63
MASSENTITY_API void SetSubsystemRequirements(const FMassSubsystemRequirements &SubsystemRequirements)
Definition MassSubsystemAccess.cpp:115
void GetSubsystemRequirementBits(FMassExternalSubsystemBitSet &OutConstSubsystemsBitSet, FMassExternalSubsystemBitSet &OutMutableSubsystemsBitSet)
Definition MassSubsystemAccess.h:120
T * GetMutableSubsystem()
Definition MassSubsystemAccess.h:30
T & GetMutableSubsystemChecked()
Definition MassSubsystemAccess.h:43
Definition MassRequirements.h:72
Definition WeakObjectPtrTemplates.h:25