UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WorldPartitionRuntimeCell.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
15#include "Algo/AnyOf.h"
17#include "WorldPartitionRuntimeCell.generated.h"
18
19class UActorContainer;
20class UDataLayerAsset;
21class UDataLayerInstance;
22class UExternalDataLayerInstance;
23class UWorldPartition;
26class FStreamingGenerationActorDescView;
29
31
37
38USTRUCT()
40{
42
45
47#if WITH_EDITORONLY_DATA
49 , AssetPath(InAssetPath)
50 , PackageName(InPackageName)
51 , ContainerPath(InContainerPath)
52#endif
53 {}
54
55#if WITH_EDITORONLY_DATA
56 UPROPERTY()
58
59 UPROPERTY()
60 FString AssetPath;
61
62 UPROPERTY()
63 FName PackageName;
64
65 UPROPERTY()
66 FActorContainerPath ContainerPath;
67
68 void UpdateHash(FWorldPartitionPackageHashBuilder& Builder) const;
69#endif
70};
71
72USTRUCT()
74{
76
78#if WITH_EDITORONLY_DATA
80 , bIsEditorOnly(false)
81#endif
82 {}
83
85 FName InPackage,
96 )
97#if WITH_EDITORONLY_DATA
98 : Package(InPackage)
99 , Path(InPath)
100 , BaseClass(InBaseClass)
101 , NativeClass(InNativeClass)
102 , ContainerID(InContainerID)
105 , ContainerPackage(InContainerPackage)
106 , WorldPackage(InWorldPackage)
107 , ActorInstanceGuid(InActorInstanceGuid)
108 , LoadedPath(InPath)
109 , bIsEditorOnly(bInIsEditorOnly)
110#endif
111 {}
112
113#if WITH_EDITORONLY_DATA
117 UPROPERTY()
119
123 UPROPERTY()
124 FName Path;
125
129 UPROPERTY()
130 FTopLevelAssetPath BaseClass;
131
135 UPROPERTY()
136 FTopLevelAssetPath NativeClass;
137
141 UPROPERTY()
142 FActorContainerID ContainerID;
143
147 UPROPERTY()
149
153 UPROPERTY()
155
159 UPROPERTY()
160 FName ContainerPackage;
161
165 UPROPERTY()
166 FName WorldPackage;
167
171 UPROPERTY()
172 FGuid ActorInstanceGuid;
173
182 UPROPERTY()
183 FName LoadedPath;
184
185 UPROPERTY()
186 bool bIsEditorOnly;
187
188 UPROPERTY()
190
191 void UpdateHash(FWorldPartitionPackageHashBuilder& Builder) const;
192#endif
193};
194
196
200UENUM(BlueprintType)
207
208USTRUCT()
210{
212
213 UPROPERTY()
214 FString Name;
215
216 UPROPERTY()
217 FName GridName;
218
219 UPROPERTY()
220 int64 CoordX = 0;
221
222 UPROPERTY()
223 int64 CoordY = 0;
224
225 UPROPERTY()
226 int64 CoordZ = 0;
227};
228
230
234UCLASS(Abstract, MinimalAPI)
236{
238
239#if WITH_EDITOR
240 ENGINE_API virtual void PostDuplicate(bool bDuplicateForPIE) override;
241#endif
242
243 template<class T>
244 T* GetTypedOuter() const
245 {
246 static_assert(!std::is_same<T, UWorld>::value, "Use GetOuterWorld instead");
247 static_assert(!std::is_same<T, UWorldPartition>::value, "Use GetOuterWorld()->GetWorldPartition() instead");
248 return Super::GetTypedOuter<T>();
249 }
250
251 virtual void Load() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::Load,);
252 virtual void Unload() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::Unload,);
253 virtual bool CanUnload() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::CanUnload, return true;);
254 virtual void Activate() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::Activate,);
255 virtual void Deactivate() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::Deactivate,);
256 virtual ULevel* GetLevel() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::GetLevel, return nullptr;);
257 virtual EWorldPartitionRuntimeCellState GetCurrentState() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::GetCurrentState, return EWorldPartitionRuntimeCellState::Unloaded;);
258 virtual FLinearColor GetDebugColor(EWorldPartitionRuntimeCellVisualizeMode VisualizeMode) const { static const FLinearColor DefaultColor = FLinearColor::Black.CopyWithNewOpacity(0.25f); return DefaultColor; }
259 virtual bool IsAlwaysLoaded() const { return bIsAlwaysLoaded; }
260 virtual bool IsSpatiallyLoaded() const { return bIsSpatiallyLoaded; }
261 virtual void SetIsAlwaysLoaded(bool bInIsAlwaysLoaded) { bIsAlwaysLoaded = bInIsAlwaysLoaded; }
262 virtual void SetIsSpatiallyLoaded(bool bInIsSpatiallyLoaded) { bIsSpatiallyLoaded = bInIsSpatiallyLoaded; }
263 virtual void SetStreamingPriority(int32 InStreamingPriority) const PURE_VIRTUAL(UWorldPartitionRuntimeCell::SetStreamingPriority,);
264 virtual EStreamingStatus GetStreamingStatus() const { return LEVEL_Unloaded; }
265 void SetClientOnlyVisible(bool bInClientOnlyVisible) { bClientOnlyVisible = bInClientOnlyVisible; }
266 bool GetClientOnlyVisible() const { return bClientOnlyVisible; }
267 virtual FGuid const& GetContentBundleID() const { return ContentBundleID; }
268 virtual TArray<FName> GetActors() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::GetActors, return TArray<FName>(););
269
270 //~Begin IWorldPartitionCell Interface
271 ENGINE_API virtual TArray<const UDataLayerInstance*> GetDataLayerInstances() const override;
272 ENGINE_API virtual const UExternalDataLayerInstance* GetExternalDataLayerInstance() const override;
273 ENGINE_API virtual bool ContainsDataLayer(const UDataLayerAsset* DataLayerAsset) const override;
274 ENGINE_API virtual bool ContainsDataLayer(const UDataLayerInstance* DataLayerInstance) const override;
275 ENGINE_API virtual bool HasContentBundle() const override;
276 virtual const TArray<FName>& GetDataLayers() const override { return GetDataLayersInline(); }
277 virtual FName GetExternalDataLayer() const override { return DataLayers.GetExternalDataLayer(); }
278 virtual bool HasAnyDataLayer(const TSet<FName>& InDataLayers) const override
279 {
280 return Algo::AnyOf(GetDataLayers(), [&InDataLayers](const FName& DataLayer) { return InDataLayers.Contains(DataLayer); });
281 }
282 ENGINE_API virtual FName GetLevelPackageName() const override;
283 ENGINE_API virtual FString GetDebugName() const override;
284 ENGINE_API virtual UWorld* GetOwningWorld() const override;
285 ENGINE_API virtual UWorld* GetOuterWorld() const override;
286 //~End IWorldPartitionCell Interface
287
288 ENGINE_API UDataLayerManager* GetDataLayerManager() const;
289 ENGINE_API EDataLayerRuntimeState GetCellEffectiveWantedState(const FWorldPartitionStreamingContext& Context) const;
290 inline bool HasDataLayers() const { return !DataLayers.IsEmpty(); }
291
292 //~Begin Deprecation
293 UE_DEPRECATED(5.3, "IsLoading is deprecated.")
294 virtual bool IsLoading() const { return false; }
295 UE_DEPRECATED(5.4, "IsAddedToWorld is deprecated.")
296 virtual bool IsAddedToWorld() const { return false; }
297 UE_DEPRECATED(5.4, "CanAddToWorld is deprecated.")
298 virtual bool CanAddToWorld() const { return false; }
299 UE_DEPRECATED(5.5, "Use version that takes FWorldPartitionStreamingContext instead.")
300 EDataLayerRuntimeState GetCellEffectiveWantedState(int32 InDataLayersStateEpoch) const { return EDataLayerRuntimeState::Unloaded; }
301 UE_DEPRECATED(5.5, "Use version that takes FWorldPartitionStreamingContext instead.")
302 EDataLayerRuntimeState GetCellEffectiveWantedState() const { return EDataLayerRuntimeState::Unloaded; }
303 //~End Deprecation
304
305 void SetBlockOnSlowLoading(bool bInBlockOnSlowLoading) { bBlockOnSlowLoading = bInBlockOnSlowLoading; }
306 bool GetBlockOnSlowLoading() const { return bBlockOnSlowLoading; }
307#if WITH_EDITOR
310 void SetContentBundleUID(const FGuid& InContentBundleID) { ContentBundleID = InContentBundleID; }
311 void SetLevelPackageName(const FName& InLevelPackageName) { LevelPackageName = InLevelPackageName; }
312
313 //~Begin IWorldPartitionCell Interface
314 virtual TSet<FName> GetActorPackageNames() const override { return TSet<FName>(); }
315 //~End IWorldPartitionCell Interface
316
317 virtual void AddActorToCell(const FStreamingGenerationActorDescView& ActorDescView) PURE_VIRTUAL(UWorldPartitionRuntimeCell::AddActorToCell, );
318
320
321 UE_DEPRECATED(5.4, "Implement FStreamingGenerationActorDescView version instead")
323
325
326 virtual void Fixup() PURE_VIRTUAL(UWorldPartitionRuntimeCell::Fixup, );
327 virtual int32 GetActorCount() const PURE_VIRTUAL(UWorldPartitionRuntimeCell::GetActorCount, return 0;);
328
329 // Cook methods
330 UE_DEPRECATED(5.5, "Use version with IWorldPartitionCookPackageContext")
331 virtual bool PrepareCellForCook(UPackage* InPackage) { return false; }
333 UE_DEPRECATED(5.4, "PopulateGeneratorPackageForCook is deprecated, it was replaced by OnPrepareGeneratorPackageForCook")
335 UE_DEPRECATED(5.4, "PopulateGeneratedPackageForCook is deprecated, it was replaced by OnPopulateGeneratedPackageForCook")
336 virtual bool PopulateGeneratedPackageForCook(UPackage* InPackage, TArray<UPackage*>& OutModifiedPackages) { return false; }
337
338 //~Begin IWorldPartitionCookPackageObject
339 virtual bool IsLevelPackage() const override { return true; }
340 virtual const UExternalDataLayerAsset* GetExternalDataLayerAsset() const override { return ExternalDataLayerAsset; }
341 virtual FString GetPackageNameToCreate() const { return FString(); }
342 virtual bool OnPrepareGeneratorPackageForCook(TArray<UPackage*>& OutModifiedPackages) override { return true; }
343 virtual bool OnPopulateGeneratorPackageForCook(const IWorldPartitionCookPackageContext& InCookContext, UPackage* InPackage) override { return true; }
345 virtual FWorldPartitionPackageHash GetGenerationHash() const override PURE_VIRTUAL(UWorldPartitionRuntimeCell::GetGenerationHash, return FWorldPartitionPackageHash(););
346 //~End IWorldPartitionCookPackageObject
347
348 ENGINE_API virtual void DumpStateLog(FHierarchicalLogArchive& Ar) const;
349#endif
350
351 void SetIsHLOD(bool bInIsHLOD) { bIsHLOD = bInIsHLOD; }
352 bool GetIsHLOD() const { return bIsHLOD; }
353
354 void SetIsCustomHLODPlaceholderCell(bool bInIsCustomHLODPlaceholderCell) { bIsCustomHLODPlaceholderCell = bInIsCustomHLODPlaceholderCell; }
355 bool GetIsCustomHLODPlaceholderCell() const { return bIsCustomHLODPlaceholderCell; }
356
357 const FGuid& GetGuid() const { return CellGuid; }
358 void SetGuid(const FGuid& InCellGuid) { CellGuid = InCellGuid; }
359
360 const FLinearColor& GetCellDebugColor() const { return CellDebugColor; }
361 void SetCellDebugColor(const FLinearColor& InCellDebugColor) { CellDebugColor = InCellDebugColor; }
362
363 const FGuid& GetSourceCellGuid() const { return SourceCellGuid; }
364 void SetSourceCellGuid(const FGuid& InSourceCellGuid) { SourceCellGuid = InSourceCellGuid; }
365
366#if !UE_BUILD_SHIPPING
367 void SetDebugStreamingPriority(float InDebugStreamingPriority) { DebugStreamingPriority = InDebugStreamingPriority; }
368#endif
369
370#if WITH_EDITORONLY_DATA
371 UPROPERTY()
373#endif
374
375protected:
376 inline const TArray<FName>& GetDataLayersInline() const { return DataLayers.ToArray(); }
377
378 //@todo_ow: Implement ServerOnlyVisible and refactor ClientOnlyVisible.
379 // Instead of this function, server would not not wait for client level visibility
380 // for server-only visible cells.
381 // Also, server-only & client-only visible cells should be pre-filtered at
382 // world partition initialization to avoid visiting them at runtime.
383 // The same should be done for injected external streaming objects.
384 virtual bool ShouldServerWaitForClientLevelVisibility() const { return true; }
385
386 EDataLayerRuntimeState GetCellEffectiveWantedStateRaw() const { return !HasDataLayers() ? EDataLayerRuntimeState::Activated : EffectiveWantedState; }
387
388 UPROPERTY()
389 bool bIsAlwaysLoaded;
390
391 UPROPERTY()
392 bool bIsSpatiallyLoaded;
393
394private:
395 UPROPERTY()
396 FDataLayerInstanceNames DataLayers;
397
398 UPROPERTY()
399 bool bClientOnlyVisible;
400
401 UPROPERTY()
402 bool bIsHLOD;
403
404 UPROPERTY()
405 bool bIsCustomHLODPlaceholderCell;
406
407 UPROPERTY()
408 bool bBlockOnSlowLoading;
409
410 UPROPERTY()
411 FGuid ContentBundleID;
412
413 UPROPERTY()
414 FLinearColor CellDebugColor;
415
417 UPROPERTY()
418 FGuid CellGuid;
419
420 // Used by injected HLOD cells
421 UPROPERTY()
422 FGuid SourceCellGuid;
423
424#if !UE_BUILD_SHIPPING
425 // Represents the streaming priority relative to other cells
427#endif
428
429#if WITH_EDITOR
430 FName LevelPackageName;
431#endif
432
433#if WITH_EDITORONLY_DATA
434 UPROPERTY()
435 TObjectPtr<const UExternalDataLayerAsset> ExternalDataLayerAsset;
436#endif
437
440
441public:
442 //~Begin UWorldPartitionRuntimeCellData Proxy
443 inline void AppendStreamingSourceInfo(const FWorldPartitionStreamingSource& Source, const FSphericalSector& SourceShape, const FWorldPartitionStreamingContext& Context) const { RuntimeCellData->AppendStreamingSourceInfo(Source, SourceShape, Context, bBlockOnSlowLoading); }
444 inline void MergeStreamingSourceInfo() const { RuntimeCellData->MergeStreamingSourceInfo(); }
445 ENGINE_API int32 SortCompare(const UWorldPartitionRuntimeCell* Other) const;
446
448 inline const FBox& GetContentBounds() const { return RuntimeCellData->GetContentBounds(); }
449
451 inline FBox GetCellBounds() const { return RuntimeCellData->GetCellBounds(); }
452
454 inline FBox GetStreamingBounds() const { return bIsCustomHLODPlaceholderCell ? RuntimeCellData->GetCellBounds() : RuntimeCellData->GetStreamingBounds(); }
455
456 ENGINE_API virtual bool IsDebugShown() const;
457 //~End UWorldPartitionRuntimeCellData Proxy
458
459 //~Begin Deprecation
460 UE_DEPRECATED(5.5, "Use version that takes FWorldPartitionStreamingContext instead.")
461 inline void AppendStreamingSourceInfo(const FWorldPartitionStreamingSource& Source, const FSphericalSector& SourceShape) {}
462 //~End Deprecation
463
464 UPROPERTY()
466
469};
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
EDataLayerRuntimeState
Definition DataLayerInstance.h:26
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
EStreamingStatus
Definition ProfilingHelpers.h:16
@ LEVEL_Unloaded
Definition ProfilingHelpers.h:17
bool IsLoading()
Definition UObjectGlobals.cpp:2087
EWorldPartitionRuntimeCellState
Definition WorldPartitionRuntimeCell.h:202
EWorldPartitionRuntimeCellVisualizeMode
Definition WorldPartitionRuntimeCell.h:33
EWorldPartitionDataLayersLogicOperator
Definition WorldPartition.h:89
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition WorldPartitionStreamingSource.h:11
Definition WorldPartitionRuntimeCellInterface.h:19
Definition WorldPartitionCookPackageInterface.h:19
Definition Array.h:670
Definition Level.h:75
Definition ActorDescContainer.h:40
Definition DataLayerAsset.h:30
Definition DataLayerManager.h:48
Definition ExternalDataLayerAsset.h:16
Definition Level.h:423
T * GetTypedOuter() const
Definition UObjectBaseUtility.h:537
Definition Object.h:95
virtual void PostDuplicate(bool bDuplicateForPIE)
Definition Object.h:538
Definition Package.h:216
Definition WorldPartitionRuntimeCellData.h:16
Definition WorldPartitionRuntimeCell.h:236
void AppendStreamingSourceInfo(const FWorldPartitionStreamingSource &Source, const FSphericalSector &SourceShape, const FWorldPartitionStreamingContext &Context) const
Definition WorldPartitionRuntimeCell.h:443
EDataLayerRuntimeState EffectiveWantedState
Definition WorldPartitionRuntimeCell.h:438
int32 EffectiveWantedStateEpoch
Definition WorldPartitionRuntimeCell.h:439
void MergeStreamingSourceInfo() const
Definition WorldPartitionRuntimeCell.h:444
EDataLayerRuntimeState GetCellEffectiveWantedStateRaw() const
Definition WorldPartitionRuntimeCell.h:386
FBox GetCellBounds() const
Definition WorldPartitionRuntimeCell.h:451
virtual bool ShouldServerWaitForClientLevelVisibility() const
Definition WorldPartitionRuntimeCell.h:384
const TArray< FName > & GetDataLayersInline() const
Definition WorldPartitionRuntimeCell.h:376
float DebugStreamingPriority
Definition WorldPartitionRuntimeCell.h:426
const FBox & GetContentBounds() const
Definition WorldPartitionRuntimeCell.h:448
FBox GetStreamingBounds() const
Definition WorldPartitionRuntimeCell.h:454
Definition WorldPartitionStreamingPolicy.h:94
Definition WorldPartition.h:142
Definition World.h:918
UE_REWRITE bool AnyOf(const RangeType &Range)
Definition AnyOf.h:20
Definition WorldPartitionActorContainerID.h:44
Definition WorldPartitionActorContainerID.h:9
Definition DataLayerInstanceNames.h:10
Definition Guid.h:109
Definition HierarchicalLogArchive.h:14
Definition Color.h:48
constexpr FLinearColor CopyWithNewOpacity(float NewOpacity) const
Definition Color.h:290
static CORE_API const FLinearColor Black
Definition Color.h:458
Definition WorldPartitionRuntimeSpatialHash.h:132
Definition TopLevelAssetPath.h:38
Definition WorldPartitionRuntimeCell.h:210
Definition WorldPartitionRuntimeCell.h:74
FWorldPartitionRuntimeCellObjectMapping(FName InPackage, FName InPath, const FTopLevelAssetPath &InBaseClass, const FTopLevelAssetPath &InNativeClass, const FActorContainerID &InContainerID, const FTransform &InContainerTransform, const FTransform &InEditorOnlyParentTransform, FName InContainerPackage, FName InWorldPackage, const FGuid &InActorInstanceGuid, bool bInIsEditorOnly)
Definition WorldPartitionRuntimeCell.h:84
Definition WorldPartitionRuntimeCell.h:40
FWorldPartitionRuntimeCellPropertyOverride(const FActorContainerID &InOwnerContainerID, const FString &InAssetPath, FName InPackageName, const FActorContainerPath &InContainerPath)
Definition WorldPartitionRuntimeCell.h:46
Definition WorldPartitionRuntimeHash.h:166
Definition WorldPartitionStreamingSource.h:344
Definition ObjectPtr.h:488
static CORE_API const TTransform< double > Identity
Definition TransformNonVectorized.h:58