UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NavigationElement.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "HAL/Platform.h"
6#include "Math/Box.h"
7#include "Math/Transform.h"
9
11class UBodySetup;
12class UObject;
16enum class ENavDataGatheringMode : uint8;
18{
19 enum Type : int;
20}
21
25
36{
38
40
41 inline explicit FNavigationElementHandle(const UObject* Object, const uint64 SubElementId = INDEX_NONE);
42 inline explicit FNavigationElementHandle(const TWeakObjectPtr<const UObject>& WeakObject, const uint64 SubElementId = INDEX_NONE);
43
44 inline bool operator==(const FNavigationElementHandle& Other) const;
45 inline bool operator!=(const FNavigationElementHandle& Other) const;
46
51 inline explicit operator bool() const;
52
54 inline bool IsValid() const;
55
57 inline void Invalidate();
58
61
64
65private:
66
72
76 uint64 SubElementId = INDEX_NONE;
77};
78
79
93struct FNavigationElement : TSharedFromThis<FNavigationElement>
94{
95private:
98 struct FPrivateToken { explicit FPrivateToken() = default; };
99 static TSharedRef<FNavigationElement> MakeFromUObject_DEPRECATED(UObject* InOwner)
100 {
101 return MakeShared<FNavigationElement>(FPrivateToken{}, InOwner, INDEX_NONE);
102 }
103
104public:
105
106 // Public, but can only be called by FNavigationElement and friends, because it needs access to FPrivateToken
107 ENGINE_API explicit FNavigationElement(FPrivateToken, const UObject* Object, uint64 SubElementId /*= INDEX_NONE*/);
108
110 ENGINE_API explicit FNavigationElement(const UObject& Object, uint64 SubElementId = INDEX_NONE);
112
113 UE_DEPRECATED(5.5, "Temporary constructor to allow deprecation of other navigation types. Use the version taking an object reference instead.")
114 explicit FNavigationElement(const UObject* Object, const uint64 SubElementId = INDEX_NONE)
115 : FNavigationElement(FPrivateToken{}, Object, SubElementId)
116 {
117 }
118
121
128
134
136 inline const FTransform& GetTransform() const;
137
139 inline void SetTransform(const FTransform& InGeometryTransform);
140
142 inline FBox GetBounds() const;
143
145 inline void SetBounds(const FBox& InBounds);
146
148 inline UBodySetup* GetBodySetup() const;
149
152
155
158
164
170
176
182
188 inline bool GetDirtyAreaOnRegistration() const;
189
196
202 inline bool IsInBaseNavigationData() const;
203
208 inline bool IsFromLevelVisibilityChange() const;
209
211 ENGINE_API FString GetName() const;
212
214 ENGINE_API FString GetPathName() const;
215
217 ENGINE_API FString GetFullName() const;
218
220 inline friend FString GetNameSafe(const FNavigationElement* Element);
221
223 inline friend FString GetPathNameSafe(const FNavigationElement* Element);
224
226 inline friend FString GetFullNameSafe(const FNavigationElement* Element);
227
229 ENGINE_API friend uint32 GetTypeHash(const FNavigationElement& Element);
230
232 ENGINE_API friend FString LexToString(const FNavigationElement& Element);
233
236
242
245
246private:
247
249 void InitializeFromInterface(const INavRelevantInterface* NavRelevantInterface);
250
258
263 uint64 SubElementId = INDEX_NONE;
264
266 TWeakObjectPtr<UBodySetup> BodySetup = nullptr;
267
269 FTransform GeometryTransform = FTransform::Identity;
270
272 FBox Bounds;
273
278 TWeakObjectPtr<const UObject> NavigationParent = nullptr;
279
284 EHasCustomNavigableGeometry::Type GeometryExportType;
285
292 ENavDataGatheringMode GeometryGatheringMode;
293
298 bool bDirtyAreaOnRegistration = true;
299
305 bool bIsInBaseNavigationData = false;
306
308 bool bIsFromLevelVisibilityChange = false;
309};
310
311
312//----------------------------------------------------------------------//
313// Inlines
314//----------------------------------------------------------------------//
316{
317 return HashCombine(GetTypeHash(Key.OwnerUObject), GetTypeHash(Key.SubElementId));
318}
319
320FString GetNameSafe(const FNavigationElement* Element)
321{
322 return Element ? Element->GetName() : TEXT("None");
323}
324
325FString GetPathNameSafe(const FNavigationElement* Element)
326{
327 return Element ? Element->GetPathName() : TEXT("None");
328}
329
330FString GetFullNameSafe(const FNavigationElement* Element)
331{
332 return Element ? Element->GetFullName() : TEXT("None");
333}
334
335
336//----------------------------------------------------------------------//
337// Inlines (FNavigationElementHandle)
338//----------------------------------------------------------------------//
339
341 : OwnerUObject(Object)
342 , SubElementId(SubElementId)
343{
344}
345
347 : OwnerUObject(WeakObject)
348 , SubElementId(SubElementId)
349{
350}
351
353{
354 return OwnerUObject.HasSameIndexAndSerialNumber(Other.OwnerUObject) && SubElementId == Other.SubElementId;
355}
356
358{
359 return !(*this == Other);
360}
361
362FNavigationElementHandle::operator bool() const
363{
364 return IsValid();
365}
366
368{
369 return *this != Invalid;
370}
371
373{
374 *this = Invalid;
375}
376
377
378//----------------------------------------------------------------------//
379// Inlines (FNavigationElement)
380//----------------------------------------------------------------------//
381
383{
384 return OwnerUObject;
385}
386
388{
389 return bIsFromLevelVisibilityChange;
390}
391
393{
394 return bIsInBaseNavigationData;
395}
396
398{
399 return GeometryTransform;
400}
401
406
408{
409 return Bounds;
410}
411
413{
414 Bounds = InBounds;
415}
416
418{
419 return BodySetup.Get();
420}
421
423{
424 return NavigationParent;
425}
426
431
436
441
443{
444 return GeometryGatheringMode;
445}
446
451
453{
454 return bDirtyAreaOnRegistration;
455}
456
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:57
#define DECLARE_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:66
ENavDataGatheringMode
Definition NavDataGatheringMode.h:9
FString GetFullNameSafe(const FNavigationElement *Element)
Definition NavigationElement.h:330
FString GetPathNameSafe(const FNavigationElement *Element)
Definition NavigationElement.h:325
FString GetNameSafe(const FNavigationElement *Element)
Definition NavigationElement.h:320
uint32 GetTypeHash(const FNavigationElementHandle &Key)
Definition NavigationElement.h:315
const bool
Definition NetworkReplayStreaming.h:178
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NavRelevantInterface.h:49
Definition SharedPointer.h:1640
Definition SharedPointer.h:153
Definition BodySetup.h:128
Definition Object.h:95
Definition NavigationElement.h:18
Type
Definition NavRelevantInterface.h:27
Definition NavigationSystemHelpers.h:25
Definition NavigationDirtyElement.h:13
Definition NavigationElement.h:36
ENGINE_API friend FString LexToString(const FNavigationElementHandle &Handle)
Definition NavigationElement.cpp:198
bool operator==(const FNavigationElementHandle &Other) const
Definition NavigationElement.h:352
void Invalidate()
Definition NavigationElement.h:372
static ENGINE_API const FNavigationElementHandle Invalid
Definition NavigationElement.h:37
bool operator!=(const FNavigationElementHandle &Other) const
Definition NavigationElement.h:357
bool IsValid() const
Definition NavigationElement.h:367
friend uint32 GetTypeHash(const FNavigationElementHandle &Handle)
Definition NavigationElement.h:315
FNavigationElementHandle()=default
Definition NavigationElement.h:94
void SetNavigationParent(const UObject *InNavigationParent)
Definition NavigationElement.h:427
TWeakObjectPtr< const UObject > GetWeakUObject() const
Definition NavigationElement.h:382
void SetDirtyAreaOnRegistration(const bool bInDirtyAreaOnRegistration)
Definition NavigationElement.h:457
ENGINE_API friend uint32 GetTypeHash(const FNavigationElement &Element)
Definition NavigationElement.cpp:188
bool IsFromLevelVisibilityChange() const
Definition NavigationElement.h:387
ENGINE_API friend FString LexToString(const FNavigationElement &Element)
Definition NavigationElement.cpp:193
FBox GetBounds() const
Definition NavigationElement.h:407
ENGINE_API FString GetName() const
Definition NavigationElement.cpp:157
ENGINE_API void SetBodySetup(UBodySetup *InBodySetup)
Definition NavigationElement.cpp:147
friend FString GetFullNameSafe(const FNavigationElement *Element)
Definition NavigationElement.h:330
static ENGINE_API TSharedRef< const FNavigationElement > CreateFromNavRelevantInterface(const INavRelevantInterface &NavRelevantInterface)
Definition NavigationElement.cpp:142
friend FString GetPathNameSafe(const FNavigationElement *Element)
Definition NavigationElement.h:325
ENavDataGatheringMode GetGeometryGatheringMode() const
Definition NavigationElement.h:442
friend FString GetNameSafe(const FNavigationElement *Element)
Definition NavigationElement.h:320
const TWeakObjectPtr< const UObject > & GetNavigationParent() const
Definition NavigationElement.h:422
FCustomGeometryExport CustomGeometryExportDelegate
Definition NavigationElement.h:241
FNavigationElement()=delete
FNavigationDataExport NavigationDataExportDelegate
Definition NavigationElement.h:235
void SetGeometryGatheringMode(const ENavDataGatheringMode InGeometryGatheringMode)
Definition NavigationElement.h:447
void SetTransform(const FTransform &InGeometryTransform)
Definition NavigationElement.h:402
ENGINE_API FString GetPathName() const
Definition NavigationElement.cpp:168
void SetBounds(const FBox &InBounds)
Definition NavigationElement.h:412
UBodySetup * GetBodySetup() const
Definition NavigationElement.h:417
ENGINE_API FString GetFullName() const
Definition NavigationElement.cpp:178
void SetGeometryExportType(const EHasCustomNavigableGeometry::Type InCustomNavigableGeometry)
Definition NavigationElement.h:437
bool IsInBaseNavigationData() const
Definition NavigationElement.h:392
ENGINE_API FNavigationElementHandle GetHandle() const
Definition NavigationElement.cpp:152
bool GetDirtyAreaOnRegistration() const
Definition NavigationElement.h:452
const FTransform & GetTransform() const
Definition NavigationElement.h:397
EHasCustomNavigableGeometry::Type GetGeometryExportType() const
Definition NavigationElement.h:432
FGeometrySliceExport GeometrySliceExportDelegate
Definition NavigationElement.h:244
Definition NavigationRelevantData.h:40
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132
FORCEINLINE bool HasSameIndexAndSerialNumber(const TWeakObjectPtr &Other) const
Definition WeakObjectPtrTemplates.h:273
static CORE_API const TTransform< double > Identity
Definition TransformNonVectorized.h:58