UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassEntityRelations.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "MassEntityHandle.h"
9#include "MassEntityMacros.h"
10#include "MassEntityRelations.generated.h"
11
12#define UE_API MASSENTITY_API
13
16namespace UE::Mass
17{
18 struct FRelationManager;
19}
20
21namespace UE::Mass::Relations
22{
23 enum class ERemovalPolicy : uint8
24 {
26 CleanUp,
28 Destroy,
30 Splice,
32 Custom,
33
34 MAX,
36 };
37
39 {
40 No,
41 Yes,
42 Default = Yes,
43 };
44
45 enum class ERelationRole : uint8
46 {
47 Subject,
48 Object,
49 MAX
50 };
51
52 inline FString LexToString(const ERelationRole Value)
53 {
55 ? TEXT("INVALID")
57 ? TEXT("Subject")
58 : TEXT("Object"));
59 }
60
62 {
67 const UScriptStruct* Element = nullptr;
68
73
79 bool bExclusive = true;
80
94
95 bool operator==(const FRoleTraits& Other) const
96 {
97 return Element == Other.Element
98 && DestructionPolicy == Other.DestructionPolicy
99 && bExclusive == Other.bExclusive
100 && RequiresExternalMapping == Other.RequiresExternalMapping;
101 }
102 };
103
175}
176
177//-----------------------------------------------------------------------------
178// Relation types
179//-----------------------------------------------------------------------------
184USTRUCT()
189
190//-----------------------------------------------------------------------------
191// Relation data
192//-----------------------------------------------------------------------------
197USTRUCT()
199{
201
202
209
217
218 FMassEntityHandle GetRole(const int32 Index) const
219 {
220 return Index == 0 ? Subject : Object;
221 }
222
224 {
226 return GetRole(static_cast<int32>(Role));
227 }
228};
229
230USTRUCT()
235
240{
241 static constexpr int32 EntityIndexBits = 30;
242 static constexpr int32 EntityIndexMask = (1 << 30) - 1;
243 static constexpr int32 TypeMask = ~EntityIndexMask;
244
246
248 {
250
252 ReturnHandle.SetRoleEntityIndex(RoleHandle.Index);
253 ReturnHandle.SetRelationEntityIndex(RelationEntityHandle.Index);
254 ReturnHandle.SetRole(Role);
255 check(ReturnHandle.GetRoleEntityIndex() == RoleHandle.Index)
256 check(ReturnHandle.GetRelationEntityIndex() == RelationEntityHandle.Index)
257
258 return ReturnHandle;
259 }
260
262 {
263 return (RoleEntity & EntityIndexMask);
264 }
266
268 {
269 return (RelationEntity & EntityIndexMask);
270 }
272
274 {
275 return static_cast<UE::Mass::Relations::ERelationRole>((RoleEntity & TypeMask) >> EntityIndexBits);
276 }
277
279 {
280 return Handle.DebugGetDescription();
281 }
282
283 FString DebugGetDescription() const
284 {
285 return FString::Printf(TEXT("Relation %d role %s %d"), GetRelationEntityIndex(), *LexToString(GetRole()), GetRoleEntityIndex());
286 }
287
289 bool IsValid() const = delete;
290
292 {
294 : EntityIndex(EntityHandle.Index)
295 {
296 }
297
299 {
300 return Element.GetRoleEntityIndex() == EntityIndex;
301 }
302
304 };
305
307 {
308 return RelationEntity == Other.RelationEntity && RoleEntity == Other.RoleEntity;
309 }
310
311private:
312 uint32 RelationEntity = 0;
313 uint32 RoleEntity = 0;
314
315 void SetRoleEntityIndex(const int32 InIndex)
316 {
317 RoleEntity = (InIndex & EntityIndexMask) | (RoleEntity & TypeMask);
318 }
319
320 void SetRelationEntityIndex(const int32 InIndex)
321 {
322 RelationEntity = (InIndex & EntityIndexMask) | (RelationEntity & TypeMask);
323 }
324
326 {
327 RoleEntity = (RoleEntity & EntityIndexMask) | (static_cast<int32>(InRole) << EntityIndexBits);
328 }
329};
330
331namespace UE::Mass
332{
333 template<>
335 {
336 return Struct && Struct->IsChildOf(FMassRelation::StaticStruct());
337 }
338
339 template<typename T>
341};
342
343#undef UE_API
#define check(expr)
Definition AssertionMacros.h:314
#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
const bool
Definition NetworkReplayStreaming.h:178
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define UE_API
Definition SColorGradingComponentViewer.h:12
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition AndroidPlatformMisc.h:14
Definition MassObserverProcessor.h:70
Definition Class.h:1720
Definition Class.h:480
Definition MassEntityRelations.h:340
Definition MassRelationManager.cpp:20
ERemovalPolicy
Definition MassEntityRelations.h:24
FString LexToString(const ERelationRole Value)
Definition MassEntityRelations.h:52
ERelationRole
Definition MassEntityRelations.h:46
EExternalMappingRequired
Definition MassEntityRelations.h:39
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 MassEntityElementTypes.h:10
Definition MassEntityRelations.h:199
FMassEntityHandle GetRole(const UE::Mass::Relations::ERelationRole Role) const
Definition MassEntityRelations.h:223
Definition MassEntityRelations.h:232
bool operator()(const FMassRelationRoleInstanceHandle &Element) const
Definition MassEntityRelations.h:298
FMassRelationRoleInstanceHandleFinder(const FMassEntityHandle EntityHandle)
Definition MassEntityRelations.h:293
const int32 EntityIndex
Definition MassEntityRelations.h:303
Definition MassEntityRelations.h:240
friend FString LexToString(const FMassRelationRoleInstanceHandle Handle)
Definition MassEntityRelations.h:278
static FMassRelationRoleInstanceHandle Create(UE::Mass::Relations::ERelationRole Role, const FMassEntityHandle RoleHandle, const FMassEntityHandle RelationEntityHandle)
Definition MassEntityRelations.h:247
static constexpr int32 EntityIndexMask
Definition MassEntityRelations.h:242
FString DebugGetDescription() const
Definition MassEntityRelations.h:283
int32 GetRelationEntityIndex() const
Definition MassEntityRelations.h:267
MASSENTITY_API FMassEntityHandle GetRelationEntityHandle(const FMassEntityManager &EntityManager) const
Definition MassEntityRelations.cpp:56
MASSENTITY_API FMassEntityHandle GetRoleEntityHandle(const FMassEntityManager &EntityManager) const
Definition MassEntityRelations.cpp:50
static constexpr int32 EntityIndexBits
Definition MassEntityRelations.h:241
UE::Mass::Relations::ERelationRole GetRole() const
Definition MassEntityRelations.h:273
static constexpr int32 TypeMask
Definition MassEntityRelations.h:243
bool operator==(const FMassRelationRoleInstanceHandle &Other) const
Definition MassEntityRelations.h:306
int32 GetRoleEntityIndex() const
Definition MassEntityRelations.h:261
bool IsValid() const =delete
Definition MassEntityRelations.h:186
Definition MassEntityElementTypes.h:24
Definition UnrealTypeTraits.h:40
Definition WeakObjectPtrTemplates.h:25
Definition MassArchetypeGroup.h:15
Definition MassEntityRelations.h:105
FRelationTypeTraits(const FRelationTypeTraits &Other)=default
TNotNull< const UScriptStruct * > GetRelationTagType() const
Definition MassEntityRelations.h:110
TFunction< bool(FMassEntityManager &)> RegisterObserversDelegate
Definition MassEntityRelations.h:154
bool bCreateRelationEntitiesInHierarchy
Definition MassEntityRelations.h:142
TNotNull< const UScriptStruct * > RelationFragmentType
Definition MassEntityRelations.h:135
void SetDebugInFix(FString &&InFix)
Definition MassEntityRelations.cpp:32
TWeakObjectPtr< UClass > RelationEntityCreationObserverClass
Definition MassEntityRelations.h:163
FName RelationName
Definition MassEntityRelations.h:120
TWeakObjectPtr< UClass > ObjectEntityDestructionObserverClass
Definition MassEntityRelations.h:166
bool bHierarchical
Definition MassEntityRelations.h:146
FName GetFName() const
Definition MassEntityRelations.h:115
TStaticArray< FRoleTraits, static_cast< uint8 >(ERelationRole::MAX)> RoleTraits
Definition MassEntityRelations.h:144
FArchetypeGroupType RegisteredGroupType
Definition MassEntityRelations.h:148
UE_API FRelationTypeTraits(const FRelationTypeTraits &Other, TNotNull< const UScriptStruct * > NewRelationTagType)
UE_API FRelationTypeTraits(TNotNull< const UScriptStruct * > InRelationTagType)
TWeakObjectPtr< UClass > SubjectEntityDestructionObserverClass
Definition MassEntityRelations.h:165
TWeakObjectPtr< UClass > RelationEntityDestructionObserverClass
Definition MassEntityRelations.h:164
Definition MassEntityRelations.h:62
bool bExclusive
Definition MassEntityRelations.h:79
EExternalMappingRequired RequiresExternalMapping
Definition MassEntityRelations.h:93
ERemovalPolicy DestructionPolicy
Definition MassEntityRelations.h:72
bool operator==(const FRoleTraits &Other) const
Definition MassEntityRelations.h:95
const UScriptStruct * Element
Definition MassEntityRelations.h:67