UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UnrealEngine.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 UnrealEngine.h: Unreal engine helper definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "RenderCommandFence.h"
12#include "Engine/Engine.h"
13#include "SceneTypes.h"
14
15class FViewportClient;
16class UFont;
17class ULocalPlayer;
18
21
23//
24// FLocalPlayerIterator - Iterates over local players in the game.
25// There are no advantages to using this over GEngine->GetLocalPlayerIterator(GetWorld());
26//
27// Example:
28// for (FLocalPlayerIterator It(GEngine, GetWorld()); It; ++It)
29// {
30// // Do Stuff
31// }
32//
33
34
36{
37protected:
39
41 {
42 // advance iter while not finished iterating, and while current elemnt in NULL
43 while( Iter && *Iter == NULL )
44 ++Iter;
45 }
46
47public:
49 : Iter(InEngine->GetLocalPlayerIterator(InWorld))
50 {
51 GetCurrent();
52 }
53
55 {
56 ++Iter;
57 GetCurrent();
58 }
60 {
61 return *Iter;
62 }
64 {
65 return *Iter;
66 }
67 explicit operator bool() const
68 {
69 return (bool)Iter;
70 }
71};
72
73// PlayerControllerIterators
74// This is the safest, most efficient way to iterate over player controllers.
75//
76// Examples:
77//
78// for (TPlayerControllerIterator<AQAPlayerController>::LocalOnly It(GetWorld()); It; ++It)
79// {
80// // PC is a locally controlled AQAPlayerController.
81// AQAPlayerController * PC = *It;
82//
83// // This PC will always be locally controlled!
84// check(PC->IsLocalController();
85// }
86//
87//
88//
89//
90// for (TPlayerControllerIterator<AQAPlayerController>::ServerAll It(GetWorld()); It; ++It)
91// {
92// // PC is a AQAPlayerController. It may local or remotely controlled.
93// AQAPlayerController * PC = *It;
94//
95// // This can only be done on the server!
96// // Only the server has player controllers for everyone!
97// check(GetWorld()->GetNetMode() != NM_Client);
98// }
99
100
101
102template< class T, bool LocalOnly > class TBasePlayerControllerIterator
103{
104public:
106 : Iter(InWorld->GetPlayerControllerIterator())
107 {
108 check(LocalOnly || InWorld->GetNetMode() != NM_Client); // You should only iterate on non local player controllers if you are the server
110 }
111
113 {
114 Next();
115 }
116 T* operator*() const
117 {
118 return Current;
119 }
120 T* operator->() const
121 {
122 return Current;
123 }
124 explicit operator bool() const
125 {
126 return (Current!=NULL);
127 }
128
129protected:
130
133
135 {
136 // Look at current Iter
137 Current = Iter ? Cast<T>(*Iter) : nullptr;
138
139 // Advance if we have to
140 while(Iter && (!Current || (LocalOnly && !Current->IsLocalController())))
141 {
142 ++Iter;
143 Current = Iter ? Cast<T>(*Iter) : nullptr;
144 }
145 }
146
147 void Next()
148 {
149 // Advance one
150 ++Iter;
151
152 // Update Current
154 }
155};
156
157template<class T>
159{
160 typedef TBasePlayerControllerIterator<T, true> LocalOnly; // Only iterates locally controlled player controllers - can be used on client or server
161 typedef TBasePlayerControllerIterator<T, false> ServerAll; // Iterates all player controllers - local or remote - only can be used on server
162};
163
164
165/*-----------------------------------------------------------------------------
166 Tick/ update stats helper for profiling.
167-----------------------------------------------------------------------------*/
168
173{
188
190 inline bool operator()( const FTickStats& A, const FTickStats& B ) const
191 {
192 return (B.TotalTime < A.TotalTime);
193 }
194};
195
200{
203
205 virtual ~FDetailedTickStats();
206
214 bool BeginObject( UObject* Object );
215
223 void EndObject( UObject* Object, float DeltaTime, bool bForSummary );
224
228 void Reset();
229
233 void DumpStats();
234
239 {
240 GCIndex++;
241 check(ObjectsInFlight.Num() == 0); // probably not required, but we shouldn't have anything in flight when we GC
242 }
243
244private:
246 TArray<FTickStats> AllStats;
248 TMap<const UObject*,int32> ObjectToStatsMap;
250 TSet<const UObject*> ObjectsInFlight;
251
253 int32 GCIndex;
255 bool GCCallBackRegistered;
257 int32 NumObjectsToReport;
259 float TimeBetweenLogDumps;
261 float MinTimeBetweenLogDumps;
263 double LastTimeOfLogDump;
265 float TimesToReport;
267 FString OperationPerformed;
269 FDelegateHandle OnPreGarbageCollectDelegateHandle;
270};
271
274{
279
284
285
286private:
288 FDetailedTickStats& DetailedTickStats;
293 UObject* Object;
295 uint32 StartCycles;
297 bool bShouldTrackObject;
299 bool bShouldTrackObjectClass;
300};
301
302
305
306#if WITH_EDITOR
312{
313public:
316
319
322
325private:
328
330 FViewportClient* ViewportClient;
331
334};
335#else
336// does nothing outside of the editor
344
345#endif
346
359
360// Calculate the average frame time by using the stats system.
362
363
366
367/*-----------------------------------------------------------------------------
368 Frame end sync object implementation.
369-----------------------------------------------------------------------------*/
370
371namespace FFrameEndSync
372{
378 UE_DEPRECATED(5.6, "Use FFrameEndSync::Sync defined in RenderingThread.h, which takes an enum.")
379 ENGINE_API void Sync(bool bFullSync = false);
380};
381
384{
385public:
386
387 virtual int32 Init() = 0;
388
389 virtual void Tick() = 0;
390
392 virtual void ClearPendingCleanupObjects() = 0;
393};
394
401{
413
414 float CalculateFieldOfViewDistanceScale(const float FieldOfView) const
415 {
416 if (!FMath::IsNearlyEqual(FieldOfViewMaxAngleScale, FieldOfViewMinAngleScale))
417 {
418 float ClampedFoV = FMath::Clamp(FieldOfView, FieldOfViewMinAngle, FieldOfViewMaxAngle);
419 ClampedFoV = (ClampedFoV - FieldOfViewMinAngle) / (FieldOfViewMaxAngle - FieldOfViewMinAngle);
420 return FMath::Lerp<float>(FieldOfViewMinAngleScale, FieldOfViewMaxAngleScale, ClampedFoV);
421 }
422
423 return FieldOfViewMaxAngleScale;
424 }
425
427
428 bool operator==(const FCachedSystemScalabilityCVars& Other) const;
429
430protected:
431 // This isn't public as it's only used to detect the change. Use ComputeAnisotropyRT()
433
434 // Scaling view distance with active camera field of view
439
440 friend void ScalabilityCVarsSinkCallback();
441};
442
444
446
448{
453
454 // Helper function for changing system resolution via the r.setres console command
455 // This function will set r.setres, which will trigger a resolution change later on
456 // when the console variable sinks are called
457 static ENGINE_API void RequestResolutionChange(int32 InResX, int32 InResY, EWindowMode::Type InWindowMode);
458
460 : ResX(0)
461 , ResY(0)
462 , WindowMode(EWindowMode::Windowed)
463 , bForceRefresh(false)
464 {
465
466 }
467
469 {
470 RequestResolutionChange(ResX, ResY, WindowMode);
471 bForceRefresh = true;
472 }
473};
474
477
478#ifndef UE_ENABLE_LOG_STACK_ON_FORCE_GC
479#define UE_ENABLE_LOG_STACK_ON_FORCE_GC 0
480#endif
481#if UE_ENABLE_LOG_STACK_ON_FORCE_GC
483#endif
484
485// Update the debugging aid GPlayInEditorContextString based on the current world context (does nothing in WITH_EDITOR=0 builds)
487
488// Returns the Debug string for a given world (Standalone, Listen Server, Client #, etc)
490
491// Used to temporarily override GPlayInEditorID, correctly updating the debug string and other state as necessary
493{
494public:
497
498private:
499 int32 PreviousID;
500
501 void SetID(int32 NewID);
502};
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
#define DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:57
@ NM_Client
Definition EngineBaseTypes.h:951
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
const bool
Definition NetworkReplayStreaming.h:178
ENGINE_API FString GetDebugStringForWorld(const UWorld *World)
Definition UnrealEngine.cpp:646
FSystemResolution GSystemResolution
Definition UnrealEngine.cpp:453
const FCachedSystemScalabilityCVars & GetCachedScalabilityCVars()
Definition UnrealEngine.cpp:771
bool AllowHighQualityLightmaps(const FStaticFeatureLevel FeatureLevel)
Definition UnrealEngine.cpp:18577
void ScalabilityCVarsSinkCallback()
Definition UnrealEngine.cpp:806
ENGINE_API void UpdatePlayInEditorWorldDebugString(const FWorldContext *WorldContext)
Definition UnrealEngine.cpp:694
ENGINE_API int32 GUnbuiltHLODCount
Definition UnrealEngine.cpp:455
ENGINE_API int32 GShowMaterialDrawEvents
Definition UnrealEngine.cpp:429
ENGINE_API UFont * GetStatsFont()
Definition UnrealEngine.cpp:13672
ENGINE_API void CalculateFPSTimings()
Definition UnrealEngine.cpp:741
ENGINE_API int32 GDoAsyncLoadingWhileWaitingForVSync
ENGINE_API FString appGetStartupMap(const TCHAR *CommandLine)
Definition UnrealEngine.cpp:13687
TArray< TWeakObjectPtr< APlayerController > >::TConstIterator FConstPlayerControllerIterator
Definition World.h:91
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IDelegateInstance.h:14
Definition UnrealEngine.h:36
ULocalPlayer * operator*() const
Definition UnrealEngine.h:59
void operator++()
Definition UnrealEngine.h:54
void GetCurrent()
Definition UnrealEngine.h:40
ULocalPlayer * operator->() const
Definition UnrealEngine.h:63
TArray< classULocalPlayer * >::TConstIterator Iter
Definition UnrealEngine.h:38
FLocalPlayerIterator(UEngine *InEngine, class UWorld *InWorld)
Definition UnrealEngine.h:48
Definition NameTypes.h:617
Definition UnrealEngine.h:338
~FScopedConditionalWorldSwitcher()
Definition UnrealEngine.h:342
FScopedConditionalWorldSwitcher(UWorld *InWorld)
Definition UnrealEngine.h:341
FScopedConditionalWorldSwitcher(class FViewportClient *InViewportClient)
Definition UnrealEngine.h:340
Definition ViewportClient.h:28
Definition UnrealEngine.h:384
virtual void Tick()=0
virtual int32 Init()=0
virtual void ClearPendingCleanupObjects()=0
Definition Array.h:670
Definition UnrealEngine.h:103
T * operator*() const
Definition UnrealEngine.h:116
T * operator->() const
Definition UnrealEngine.h:120
FConstPlayerControllerIterator Iter
Definition UnrealEngine.h:131
void AdvanceCurrent()
Definition UnrealEngine.h:134
void operator++()
Definition UnrealEngine.h:112
T * Current
Definition UnrealEngine.h:132
void Next()
Definition UnrealEngine.h:147
TBasePlayerControllerIterator(class UWorld *InWorld)
Definition UnrealEngine.h:105
Definition Array.h:64
Definition UnrealString.h.inl:34
Definition Engine.h:711
Definition Font.h:111
Definition LocalPlayer.h:169
Definition Object.h:95
Definition World.h:918
Type
Definition SceneTypes.h:132
Definition GenericWindow.h:15
Type
Definition GenericWindow.h:17
Definition UnrealEngine.cpp:13678
@ false
Definition radaudio_common.h:23
Definition UnrealEngine.h:401
int32 CookOutUnusedDetailModeComponents
Definition UnrealEngine.h:404
float CalculateFieldOfViewDistanceScale(const float FieldOfView) const
Definition UnrealEngine.h:414
int32 MaxShadowResolution
Definition UnrealEngine.h:406
float FieldOfViewMaxAngle
Definition UnrealEngine.h:437
EMaterialQualityLevel::Type MaterialQualityLevel
Definition UnrealEngine.h:405
float FieldOfViewMinAngle
Definition UnrealEngine.h:435
float ViewDistanceScaleSquared
Definition UnrealEngine.h:409
float StaticMeshLODDistanceScale
Definition UnrealEngine.h:411
float FieldOfViewMinAngleScale
Definition UnrealEngine.h:436
int32 FieldOfViewAffectsHLOD
Definition UnrealEngine.h:410
int32 DetailMode
Definition UnrealEngine.h:403
int32 MaxCSMShadowResolution
Definition UnrealEngine.h:407
bool bInitialized
Definition UnrealEngine.h:402
float ViewDistanceScale
Definition UnrealEngine.h:408
float FieldOfViewMaxAngleScale
Definition UnrealEngine.h:438
float SkeletalMeshOverlayDistanceScale
Definition UnrealEngine.h:412
int32 MaxAnisotropy
Definition UnrealEngine.h:432
Definition UnrealEngine.h:200
void OnPreGarbageCollect()
Definition UnrealEngine.h:238
virtual ~FDetailedTickStats()
Definition LevelTick.cpp:171
void DumpStats()
Definition LevelTick.cpp:265
void Reset()
Definition LevelTick.cpp:258
bool BeginObject(UObject *Object)
Definition LevelTick.cpp:184
void EndObject(UObject *Object, float DeltaTime, bool bForSummary)
Definition LevelTick.cpp:206
static UE_FORCEINLINE_HINT bool IsNearlyEqual(float A, float B, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:388
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition UnrealEngine.h:274
~FScopedDetailTickStats()
Definition LevelTick.cpp:376
Definition AndroidStaticFeatureLevel.inl:12
Definition UnrealEngine.h:448
EWindowMode::Type WindowMode
Definition UnrealEngine.h:451
int32 ResY
Definition UnrealEngine.h:450
int32 ResX
Definition UnrealEngine.h:449
void ForceRefresh()
Definition UnrealEngine.h:468
bool bForceRefresh
Definition UnrealEngine.h:452
FSystemResolution()
Definition UnrealEngine.h:459
Definition UnrealEngine.h:493
Definition UnrealEngine.h:173
int32 GCIndex
Definition UnrealEngine.h:181
FString ObjectDetailedInfo
Definition UnrealEngine.h:177
FString ObjectPathName
Definition UnrealEngine.h:175
FName ObjectClassFName
Definition UnrealEngine.h:179
bool operator()(const FTickStats &A, const FTickStats &B) const
Definition UnrealEngine.h:190
bool bForSummary
Definition UnrealEngine.h:187
float TotalTime
Definition UnrealEngine.h:183
int32 Count
Definition UnrealEngine.h:185
Definition Engine.h:334
Definition UnrealEngine.h:159
TBasePlayerControllerIterator< T, true > LocalOnly
Definition UnrealEngine.h:160
TBasePlayerControllerIterator< T, false > ServerAll
Definition UnrealEngine.h:161