UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassRelationManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "UObject/Class.h"
6#include "MassTypeManager.h"
7#include "MassEntityHandle.h"
9
10#define UE_API MASSENTITY_API
11
15
16namespace UE::Mass
17{
18 struct FTypeRegistry;
19 struct FRelationManager;
20
22 {
24
26
28 {
30
31 bool IsEmpty() const
32 {
33 bool bIsEmpty = true;
35 {
36 bIsEmpty = bIsEmpty && Container.IsEmpty();
37 }
38 return bIsEmpty;
39 }
40
45
50
52 {
53 return (*this)[static_cast<int32>(Index)];
54 }
55
57 {
58 return (*this)[static_cast<int32>(Index)];
59 }
60 };
62
64 };
65
66
68 {
70
71 template<UE::Mass::CRelation T>
74
77
84
87
91
95
100
102
103 UE_API bool IsSubjectOfRelation(const FTypeHandle RelationTypeHandle, const FMassEntityHandle Subject, const FMassEntityHandle Object) const;
105 UE_API bool IsSubjectOfRelationRecursive(const FTypeHandle RelationTypeHandle, const FMassEntityHandle Subject, const FMassEntityHandle Object) const;
107
108
110
111 const FRelationData& GetRelationDataChecked(const FTypeHandle RelationTypeHandle) const;
112 FRelationData& GetRelationDataChecked(const FTypeHandle RelationTypeHandle);
113
114 protected:
115
116 FRelationData& CreateRelationData(const FTypeHandle RelationTypeHandle);
117
120
121 const FRelationData* GetRelationData(const FTypeHandle RelationTypeHandle) const;
122
145
147
150
152 };
153
154 //-----------------------------------------------------------------------------
155 // INLINES
156 //-----------------------------------------------------------------------------
157 template<UE::Mass::CRelation T>
163
169
171 {
172 const FTypeHandle RelationTypeHandle = TypeManager.GetRelationTypeHandle(RelationType);
173 if (!ensureMsgf(RelationTypeHandle.IsValid(), TEXT("%hs: Unknown relation type %s, make sure to register it first"), __FUNCTION__, *RelationType->GetName()))
174 {
175 return {};
176 }
177
178 return CreateRelationInstances(RelationTypeHandle, Subjects, Objects);
179 }
180
182 {
184 , TEXT("Provided RelationType, %s, is not a relation type")
185 , *RelationType->GetName());
186
188 }
189
190 inline const FRelationData* FRelationManager::GetRelationData(const FTypeHandle RelationTypeHandle) const
191 {
192 return RelationsDataMap.Find(RelationTypeHandle);
193 }
194
195 inline const FRelationData& FRelationManager::GetRelationDataChecked(const FTypeHandle RelationTypeHandle) const
196 {
197 return RelationsDataMap.FindChecked(RelationTypeHandle);
198 }
199
201 {
202 return RelationsDataMap.FindChecked(RelationTypeHandle);
203 }
204
210
216
222
228} // namespace UE::Mass
229
230#undef UE_API
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T TNotNull
Definition NotNull.h:307
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition UnrealString.h.inl:34
Definition StaticArray.h:26
ERelationRole
Definition MassEntityRelations.h:46
Definition MassArchetypeData.h:21
bool IsA< FMassRelation >(const UStruct *Struct)
Definition MassEntityRelations.h:334
U16 Index
Definition radfft.cpp:71
Definition MassEntityHandle.h:13
Definition MassEntityManager.h:96
Definition MassExecutionContext.h:29
Definition MassEntityRelations.h:240
Definition MassRelationManager.h:28
TArray< FMassRelationRoleInstanceHandle > & operator[](const ERelationRole Index)
Definition MassRelationManager.h:51
TArray< FMassRelationRoleInstanceHandle > & operator[](const int32 Index)
Definition MassRelationManager.h:41
const TArray< FMassRelationRoleInstanceHandle > & operator[](const ERelationRole Index) const
Definition MassRelationManager.h:56
const TArray< FMassRelationRoleInstanceHandle > & operator[](const int32 Index) const
Definition MassRelationManager.h:46
bool IsEmpty() const
Definition MassRelationManager.h:31
TStaticArray< TArray< FMassRelationRoleInstanceHandle >, static_cast< uint32 >(ERelationRole::MAX)> RelationEntityContainers
Definition MassRelationManager.h:29
Definition MassRelationManager.h:22
const FRelationTypeTraits Traits
Definition MassRelationManager.h:25
TMap< FMassEntityHandle, FRelationInstanceData > RoleMap
Definition MassRelationManager.h:61
TArray< FMassEntityHandle > GetParticipants(const FMassEntityManager &EntityManager, const FMassEntityHandle RoleEntity, ERelationRole QueriedRole) const
Definition MassRelationManager.cpp:82
uint32 Num() const
Definition MassRelationManager.h:137
const TArray< FMassEntityHandle > & operator[](const uint32 Depth) const
Definition MassRelationManager.h:132
TArray< FMassEntityHandle > & operator[](const uint32 Depth)
Definition MassRelationManager.h:128
void StoreUnique(const uint32 Depth, TArray< FMassEntityHandle > &InOutArray)
Definition MassRelationManager.cpp:109
TSet< FMassEntityHandle > ExistingElements
Definition MassRelationManager.h:143
TArray< TArray< FMassEntityHandle > > ContainerPerLevel
Definition MassRelationManager.h:142
Definition MassRelationManager.h:68
TArray< FMassEntityHandle > GetRelationSubjects(TNotNull< const UScriptStruct * > RelationType, const FMassEntityHandle ObjectEntity) const
Definition MassRelationManager.h:205
const FRelationData * GetRelationData(const FTypeHandle RelationTypeHandle) const
Definition MassRelationManager.h:190
const FRelationData & GetRelationDataChecked(const FTypeHandle RelationTypeHandle) const
Definition MassRelationManager.h:195
UE_API bool IsSubjectOfRelationRecursive(const FTypeHandle RelationTypeHandle, const FMassEntityHandle Subject, const FMassEntityHandle Object) const
Definition MassRelationManager.cpp:475
FRelationData & CreateRelationData(const FTypeHandle RelationTypeHandle)
Definition MassRelationManager.cpp:425
TMap< FTypeHandle, FRelationData > RelationsDataMap
Definition MassRelationManager.h:151
FTypeHandle GetRelationTypeHandle(TNotNull< const UScriptStruct * > RelationType) const
Definition MassRelationManager.h:181
FMassEntityHandle CreateRelationInstance(FMassEntityHandle Subject, FMassEntityHandle Object)
Definition MassRelationManager.h:158
TArray< FMassEntityHandle > GetRelationEntities(TConstArrayView< FMassRelationRoleInstanceHandle > RelationEntitiesContainer) const
Definition MassRelationManager.cpp:402
FMassEntityManager & EntityManager
Definition MassRelationManager.h:148
UE_API bool DestroyRelationInstance(const FTypeHandle RelationTypeHandle, const FMassEntityHandle Subject, const FMassEntityHandle Object)
Definition MassRelationManager.cpp:331
UE_API bool IsSubjectOfRelation(const FTypeHandle RelationTypeHandle, const FMassEntityHandle Subject, const FMassEntityHandle Object) const
Definition MassRelationManager.cpp:442
TArray< FMassEntityHandle > CreateRelationInstances(TNotNull< const UScriptStruct * > RelationType, TArrayView< FMassEntityHandle > Subjects, TArrayView< FMassEntityHandle > Objects)
Definition MassRelationManager.h:170
void OnRelationTypeRegistered(const FTypeHandle RegisteredTypeHandle, const FRelationTypeTraits &RelationTypeTraits)
Definition MassRelationManager.cpp:523
void GatherHierarchy(const FRelationData &RelationData, const FMassEntityHandle SubjectHandle, FHierarchyEntitiesContainer &SubSubjects, uint32 Depth=0) const
Definition MassRelationManager.cpp:376
TArray< FMassEntityHandle > GetRoleEntities(TConstArrayView< FMassRelationRoleInstanceHandle > RelationEntitiesContainer) const
Definition MassRelationManager.cpp:418
const FTypeManager & TypeManager
Definition MassRelationManager.h:149
TArray< FMassEntityHandle > GetRelationObjects(TNotNull< const UScriptStruct * > RelationType, const FMassEntityHandle SubjectEntity) const
Definition MassRelationManager.h:217
Definition MassTypeManager.h:27
bool IsValid() const
Definition MassTypeManager.h:224
Definition MassTypeManager.h:141
UE_API FTypeHandle GetRelationTypeHandle(const TNotNull< const UScriptStruct * > RelationOrElementType) const
Definition MassTypeManager.cpp:130
Definition MassEntityRelations.h:105