UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WorldPartitionStreamingSource.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Math/Color.h"
5#include "Math/RandomStream.h"
7#include "WorldPartitionStreamingSource.generated.h"
8
11{
12public:
14
17 : Center(ForceInit)
18 , Radius(0.0f)
19 , Axis(ForceInit)
20 , Angle(360.0f)
21 {}
22
25 : Center(InCenter)
26 , Radius(InRadius)
27 , Axis(FVector::ForwardVector)
28 , Angle(360.0f)
29 {}
30
33 : Center(InCenter)
34 , Radius(InRadius)
35 , Axis(InAxis)
36 , Angle(InAngle)
37 {
38 check(InAxis.IsNormalized());
39 check(InAngle >= 0 && InAngle <= 360);
40 }
41
42 void SetCenter(const FVector& InCenter) { Center = InCenter; }
43 const FVector& GetCenter() const { return Center; }
44
45 void SetRadius(FReal InRadius) { Radius = InRadius; }
46 FReal GetRadius() const { return Radius; }
47
48 void SetAngle(FReal InAngle) { Angle = (InAngle <= 0.0f || InAngle > 360.0f) ? 360.0f : InAngle; }
49 FReal GetAngle() const { return Angle; }
50
51 void SetAxis(const FVector& InAxis) { Axis = InAxis.GetSafeNormal(); }
52 FVector GetAxis() const { return Axis; }
53 FVector GetScaledAxis() const { return Axis * Radius; }
54
55 void SetAsSphere() { Angle = 360.0f; }
56 bool IsSphere() const { return FMath::IsNearlyEqual(Angle, (FReal)360.0); }
57
58 bool IsNearlyZero() const { return FMath::IsNearlyZero(Radius) || Axis.IsNearlyZero() || FMath::IsNearlyZero(Angle); }
59 bool IsValid() const { return !IsNearlyZero(); }
60
62 {
63 const FVector Offset(Radius);
64 return FBox(Center - Offset, Center + Offset);
65 }
66
69 {
70 return FSphericalSector(M.TransformPosition(Center), M.GetMaximumAxisScale() * Radius, M.TransformVector(Axis), Angle);
71 }
72
75
77 bool IntersectsBox(const FBox2D& InBox) const;
78
79private:
81 FVector Center;
82
84 FReal Radius;
85
87 FVector Axis;
88
90 FReal Angle;
91};
92
93USTRUCT(BlueprintType)
95{
97
99 : bUseGridLoadingRange(true)
100 , LoadingRangeScale(1.f)
101 , Radius(10000.0f)
102 , bIsSector(false)
103 , SectorAngle(360.0f)
104 , Location(ForceInitToZero)
106 {}
107
108 /* If True, streaming source shape radius is bound to loading range radius. */
109 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming)
110 bool bUseGridLoadingRange;
111
112 /* Applies a scale to the grid's loading range (used if bUseGridLoadingRange is True). */
113 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming, meta = (EditCondition = "bUseGridLoadingRange"))
114 float LoadingRangeScale;
115
116 /* Custom streaming source shape radius (not used if bUseGridLoadingRange is True). */
117 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming, meta = (EditCondition = "!bUseGridLoadingRange"))
118 float Radius;
119
120 /* Whether the source shape is a spherical sector instead of a regular sphere source. */
121 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming)
122 bool bIsSector;
123
124 /* Shape's spherical sector angle in degree (not used if bIsSector is False). */
125 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming, meta = (EditCondition = "bIsSector", ClampMin = 0, ClampMax = 360))
126 float SectorAngle;
127
128 /* Streaming source shape location (local to streaming source). */
129 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming)
130 FVector Location;
131
132 /* Streaming source shape rotation (local to streaming source). */
133 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Streaming)
135
136 FString ToString() const;
137
139 {
140 uint32 Hash = GetTypeHash(InShape.bUseGridLoadingRange);
141 Hash = HashCombineFast(Hash, GetTypeHash(InShape.LoadingRangeScale));
142 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Radius));
143 Hash = HashCombineFast(Hash, GetTypeHash(InShape.bIsSector));
144 Hash = HashCombineFast(Hash, GetTypeHash(InShape.SectorAngle));
145 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Location.X));
146 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Location.Y));
147 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Location.Z));
148 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Rotation.Pitch));
149 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Rotation.Yaw));
150 Hash = HashCombineFast(Hash, GetTypeHash(InShape.Rotation.Roll));
151 return Hash;
152 }
153};
154
155UENUM(BlueprintType)
161
164{
165public:
180
182 {
184 if (InShapes.IsEmpty())
185 {
186 if ((InDefaultRadius + InExtraRadius) > 0)
187 {
189 check(LocalShape.IsValid()); // Radius, axis and angle should be all valid here
190
191 InOperation(LocalShape.TransformBy(Transform));
192 }
193 }
194 else
195 {
196 for (const FStreamingSourceShape& Shape : InShapes)
197 {
198 const FVector::FReal ShapeRadius = (Shape.bUseGridLoadingRange ? (InGridLoadingRange * Shape.LoadingRangeScale) : Shape.Radius) + InExtraRadius;
199 const FVector::FReal ShapeAngle = Shape.bIsSector ? FMath::Min(Shape.SectorAngle + InExtraAngle, 360.0f) : 360.0f;
200 const FRotator ShapeRotation = bInProjectIn2D ? FRotator(0, Shape.Rotation.Yaw, 0) : Shape.Rotation;
202 const FSphericalSector LocalShape(bInProjectIn2D ? FVector(Shape.Location.X, Shape.Location.Y, 0) : Shape.Location, ShapeRadius, ShapeAxis, ShapeAngle);
203
204 if (LocalShape.IsValid())
205 {
206 InOperation(LocalShape.TransformBy(Transform));
207 }
208 }
209 }
210 }
211};
212
216UENUM()
222
224{
226
227 {
228 case EStreamingSourceTargetState::Loaded: return TEXT("Loaded");
229 case EStreamingSourceTargetState::Activated: return TEXT("Activated");
230 default: check(0);
231 }
232 return TEXT("Invalid");
233}
234
238USTRUCT(BlueprintType)
240{
242
244 : Location(FVector::ZeroVector)
245 , Radius(0.f)
246 , bUseGridLoadingRange(true)
247 , bDataLayersOnly(false)
248 , bSpatialQuery(true)
250 , TargetBehavior(EStreamingSourceTargetBehavior::Include)
251 {}
252
254 : Location(InLocation)
255 , Radius(0.f)
256 , bUseGridLoadingRange(true)
257 , bDataLayersOnly(false)
258 , bSpatialQuery(true)
260 , TargetBehavior(EStreamingSourceTargetBehavior::Include)
261 {}
262
269
270 /* Location to query. (not used if bSpatialQuery is false) */
271 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Query")
272 FVector Location;
273
274 /* Radius to query. (not used if bSpatialQuery is false) */
275 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Query")
276 float Radius;
277
278 /* If True, Instead of providing a query radius, query can be bound to loading range radius. */
279 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Query")
280 bool bUseGridLoadingRange;
281
282 /* Optional list of data layers to specialize the query. If empty only non data layer cells will be returned by the query. */
283 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Query")
284 TArray<FName> DataLayers;
285
286 /* If True, Only cells that are in a data layer found in DataLayers property will be returned by the query. */
287 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Query")
288 bool bDataLayersOnly;
289
290 /* If False, Location/Radius will not be used to find the cells. Only AlwaysLoaded cells will be returned by the query. */
291 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Query")
292 bool bSpatialQuery;
293
294 /* Reserved settings used by UWorldPartitionStreamingSourceComponent::IsStreamingCompleted. */
296
299
300 TSet<FName> TargetGrids;
301
302 UE_DEPRECATED(5.4, "TargetHLODLayers is depredcated, use TargetGrids instead.")
303 TSet<FSoftObjectPath> TargetHLODLayers;
304
306
308 inline void ForEachShape(float InGridLoadingRange, bool bInProjectIn2D, TFunctionRef<void(const FSphericalSector&)> InOperation) const
309 {
310 if (bSpatialQuery)
311 {
313 }
314 }
315
318 {
319 if (FStreamingSourceShapeHelper::IsSourceAffectingGrid(TargetGrids, TargetBehavior, InGridName))
320 {
322 }
323 }
324};
325
329UENUM(BlueprintType)
331{
332 Highest = 0,
333 High = 64,
334 Normal = 128,
335 Low = 192,
336 Lowest = 255,
338};
339
344{
346 : Name(NAME_None)
347 , Location(FVector::ZeroVector)
348 , Rotation(FRotator::ZeroRotator)
352 , Velocity(FVector::Zero())
356 , bReplay(false)
357 , bRemote(false)
358 , bForce2D(false)
359 , Hash2D(0)
360 , Hash3D(0)
361 , QuantizedLocation(FVector::ZeroVector)
362 , QuantizedRotation(FRotator::ZeroRotator)
363 , ExtraRadius(0)
364 , ExtraAngle(0)
365 {}
366
388
395
397 {
399 {
401 }
402
403 return FColor(DebugColor.R, DebugColor.G, DebugColor.B, 255);
404 }
405
406 ENGINE_API void UpdateHash();
407 uint32 GetHash(bool bInclude3DInformation = true) const { return bInclude3DInformation ? Hash3D : Hash2D; }
408
411
414
417
420
423
426
429
432
435
438
441
443 UE_DEPRECATED(5.4, "TargetHLODLayers is depredcated, use TargetGrids instead.")
445
448
451
454
457
468
474
483
484 FString ToString() const;
485
486 static int32 GetLocationQuantization() { return LocationQuantization; }
487 static int32 GetRotationQuantization() { return RotationQuantization; }
488
489private:
490 static ENGINE_API int32 LocationQuantization;
491 static ENGINE_API int32 RotationQuantization;
492 static ENGINE_API FAutoConsoleVariableRef CVarLocationQuantization;
493 static ENGINE_API FAutoConsoleVariableRef CVarRotationQuantization;
494
495 static ENGINE_API int32 DebugDisplaySpeedUnit;
496 static ENGINE_API FAutoConsoleVariableRef CVarDebugDisplaySpeedUnit;
497
499 uint32 Hash2D;
500 uint32 Hash3D;
501
503 FVector QuantizedLocation;
504 FRotator QuantizedRotation;
505
507 float ExtraRadius;
508 float ExtraAngle;
509
512};
513
527
541
546{
548 {
549 return false;
550 }
551
553 {
556 {
557 StreamingSources.Add(MoveTemp(StreamingSource));
558 return true;
559 }
560 return false;
561 }
562
563 virtual const UObject* GetStreamingSourceOwner() const { return nullptr; }
564};
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
#define ensure( InExpression)
Definition AssertionMacros.h:464
EForceInit
Definition CoreMiscDefines.h:154
@ ForceInitToZero
Definition CoreMiscDefines.h:156
@ ForceInit
Definition CoreMiscDefines.h:155
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define FVector
Definition IOSSystemIncludes.h:8
UE::Math::TBox< double > FBox
Definition MathFwd.h:55
UE::Math::TRotator< double > FRotator
Definition MathFwd.h:57
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
const TCHAR * GetStreamingSourceTargetStateName(EStreamingSourceTargetState StreamingSourceTargetState)
Definition WorldPartitionStreamingSource.h:223
EStreamingSourceTargetBehavior
Definition WorldPartitionStreamingSource.h:157
EStreamingSourcePriority
Definition WorldPartitionStreamingSource.h:331
EStreamingSourceTargetState
Definition WorldPartitionStreamingSource.h:218
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IConsoleManager.h:1580
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition WorldPartitionStreamingSource.h:11
FSphericalSector(const FVector &InCenter, FReal InRadius, const FVector &InAxis, FReal InAngle)
Definition WorldPartitionStreamingSource.h:32
FVector GetScaledAxis() const
Definition WorldPartitionStreamingSource.h:53
TArray< TPair< FVector, FVector > > BuildDebugMesh() const
Definition WorldPartitionStreamingSource.cpp:181
void SetRadius(FReal InRadius)
Definition WorldPartitionStreamingSource.h:45
void SetCenter(const FVector &InCenter)
Definition WorldPartitionStreamingSource.h:42
void SetAngle(FReal InAngle)
Definition WorldPartitionStreamingSource.h:48
bool IntersectsBox(const FBox2D &InBox) const
Definition WorldPartitionStreamingSource.cpp:226
void SetAxis(const FVector &InAxis)
Definition WorldPartitionStreamingSource.h:51
bool IsValid() const
Definition WorldPartitionStreamingSource.h:59
void SetAsSphere()
Definition WorldPartitionStreamingSource.h:55
FSphericalSector(EForceInit)
Definition WorldPartitionStreamingSource.h:16
bool IsNearlyZero() const
Definition WorldPartitionStreamingSource.h:58
FSphericalSector TransformBy(const FTransform &M) const
Definition WorldPartitionStreamingSource.h:68
FBox CalcBounds() const
Definition WorldPartitionStreamingSource.h:61
FVector GetAxis() const
Definition WorldPartitionStreamingSource.h:52
FSphericalSector(const FVector &InCenter, FReal InRadius)
Definition WorldPartitionStreamingSource.h:24
FReal GetRadius() const
Definition WorldPartitionStreamingSource.h:46
bool IsSphere() const
Definition WorldPartitionStreamingSource.h:56
FReal GetAngle() const
Definition WorldPartitionStreamingSource.h:49
FVector::FReal FReal
Definition WorldPartitionStreamingSource.h:13
const FVector & GetCenter() const
Definition WorldPartitionStreamingSource.h:43
Definition WorldPartitionStreamingSource.h:164
static void ForEachShape(float InGridLoadingRange, float InDefaultRadius, bool bInProjectIn2D, const FVector &InLocation, const FRotator &InRotation, const TArray< FStreamingSourceShape > &InShapes, TFunctionRef< void(const FSphericalSector &)> InOperation, float InExtraRadius=0.f, float InExtraAngle=0.f)
Definition WorldPartitionStreamingSource.h:181
static bool IsSourceAffectingGrid(const TSet< FName > &InSourceTargetGrids, EStreamingSourceTargetBehavior InSourceTargetBehavior, FName InGridName)
Definition WorldPartitionStreamingSource.h:166
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition AssetRegistryState.h:50
Definition Object.h:95
Definition WorldPartitionSubsystem.h:52
@ false
Definition radaudio_common.h:23
Definition Color.h:486
uint8 G
Definition Color.h:492
UE_FORCEINLINE_HINT uint32 ToPackedBGRA() const
Definition Color.h:743
static CORE_API FColor MakeRedToGreenColorFromScalar(float Scalar)
Definition Color.cpp:569
uint8 R
Definition Color.h:492
uint8 B
Definition Color.h:492
static UE_FORCEINLINE_HINT bool IsNearlyEqual(float A, float B, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:388
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
Definition RandomStream.h:20
Definition WorldPartitionStreamingSource.h:529
Definition WorldPartitionStreamingSource.h:515
Definition SoftObjectPath.h:56
Definition WorldPartitionStreamingSource.h:95
Definition WorldPartitionStreamingSource.h:240
FWorldPartitionStreamingQuerySource & operator=(const FWorldPartitionStreamingQuerySource &Other)=default
void ForEachShape(float InGridLoadingRange, FName InGridName, bool bInProjectIn2D, TFunctionRef< void(const FSphericalSector &)> InOperation) const
Definition WorldPartitionStreamingSource.h:317
PRAGMA_DISABLE_DEPRECATION_WARNINGS FWorldPartitionStreamingQuerySource(const FWorldPartitionStreamingQuerySource &Other)=default
FWorldPartitionStreamingQuerySource(const FVector &InLocation)
Definition WorldPartitionStreamingSource.h:253
FWorldPartitionStreamingQuerySource & operator=(FWorldPartitionStreamingQuerySource &&Other)=default
FWorldPartitionStreamingQuerySource(FWorldPartitionStreamingQuerySource &&Other)=default
Definition WorldPartitionStreamingSource.h:344
TSet< FSoftObjectPath > TargetHLODLayers
Definition WorldPartitionStreamingSource.h:444
EStreamingSourcePriority Priority
Definition WorldPartitionStreamingSource.h:425
FWorldPartitionStreamingSource(FName InName, const FVector &InLocation, const FRotator &InRotation, EStreamingSourceTargetState InTargetState, bool bInBlockOnSlowLoading, EStreamingSourcePriority InPriority, bool bRemote, FVector InVelocity=FVector::Zero())
Definition WorldPartitionStreamingSource.h:367
TArray< FStreamingSourceShape > Shapes
Definition WorldPartitionStreamingSource.h:447
FName Name
Definition WorldPartitionStreamingSource.h:410
PRAGMA_DISABLE_DEPRECATION_WARNINGS FWorldPartitionStreamingSource(const FWorldPartitionStreamingSource &Other)=default
EStreamingSourceTargetBehavior TargetBehavior
Definition WorldPartitionStreamingSource.h:437
void ForEachShape(float InGridLoadingRange, FName InGridName, bool bInProjectIn2D, TFunctionRef< void(const FSphericalSector &)> InOperation) const
Definition WorldPartitionStreamingSource.h:476
FVector Location
Definition WorldPartitionStreamingSource.h:413
FWorldPartitionStreamingSource()
Definition WorldPartitionStreamingSource.h:345
bool bUseVelocityContributionToCellsSorting
Definition WorldPartitionStreamingSource.h:431
bool bBlockOnSlowLoading
Definition WorldPartitionStreamingSource.h:422
EStreamingSourceTargetState TargetState
Definition WorldPartitionStreamingSource.h:419
PRAGMA_ENABLE_DEPRECATION_WARNINGS FColor GetDebugColor() const
Definition WorldPartitionStreamingSource.h:396
static int32 GetLocationQuantization()
Definition WorldPartitionStreamingSource.h:486
FColor DebugColor
Definition WorldPartitionStreamingSource.h:434
ENGINE_API void UpdateHash()
Definition WorldPartitionStreamingSource.cpp:113
FString ToString() const
Definition WorldPartitionStreamingSource.cpp:53
FWorldPartitionStreamingSource(FWorldPartitionStreamingSource &&Other)=default
FVector Velocity
Definition WorldPartitionStreamingSource.h:428
FRotator Rotation
Definition WorldPartitionStreamingSource.h:416
FBox CalcBounds(float InGridLoadingRange, FName InGridName, bool bCalcIn2D=false) const
Definition WorldPartitionStreamingSource.h:459
static int32 GetRotationQuantization()
Definition WorldPartitionStreamingSource.h:487
bool bRemote
Definition WorldPartitionStreamingSource.h:453
FWorldPartitionStreamingSource & operator=(FWorldPartitionStreamingSource &&Other)=default
TSet< FName > TargetGrids
Definition WorldPartitionStreamingSource.h:440
bool bReplay
Definition WorldPartitionStreamingSource.h:450
void ForEachShape(float InGridLoadingRange, bool bInProjectIn2D, TFunctionRef< void(const FSphericalSector &)> InOperation) const
Definition WorldPartitionStreamingSource.h:470
FWorldPartitionStreamingSource & operator=(const FWorldPartitionStreamingSource &Other)=default
uint32 GetHash(bool bInclude3DInformation=true) const
Definition WorldPartitionStreamingSource.h:407
bool bForce2D
Definition WorldPartitionStreamingSource.h:456
Definition WorldPartitionStreamingSource.h:546
virtual bool GetStreamingSources(TArray< FWorldPartitionStreamingSource > &StreamingSources) const
Definition WorldPartitionStreamingSource.h:552
virtual const UObject * GetStreamingSourceOwner() const
Definition WorldPartitionStreamingSource.h:563
virtual bool GetStreamingSource(FWorldPartitionStreamingSource &StreamingSource) const
Definition WorldPartitionStreamingSource.h:547
T GetMaximumAxisScale() const
Definition TransformNonVectorized.h:1581
UE_FORCEINLINE_HINT TVector< T > TransformVector(const TVector< T > &V) const
Definition TransformNonVectorized.h:1439
UE_FORCEINLINE_HINT TVector< T > TransformPosition(const TVector< T > &V) const
Definition TransformNonVectorized.h:1423
static TVector< double > Zero()
Definition Vector.h:112
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79
static CORE_API const TVector< double > ForwardVector
Definition Vector.h:91
double FReal
Definition Vector.h:55
TVector< T > GetSafeNormal(T Tolerance=UE_SMALL_NUMBER, const TVector< T > &ResultIfZero=ZeroVector) const
Definition Vector.h:2060
bool IsNearlyZero(T Tolerance=UE_KINDA_SMALL_NUMBER) const
Definition Vector.h:1752