KarmaEngine
Game Engine for practical learning and research purposes
Loading...
Searching...
No Matches
World.h
Go to the documentation of this file.
1
10
11#pragma once
12
13#include "Object.h"
14#include "SubClassOf.h"
15
16namespace Karma
17{
18 class AActor;
19 class FTransform;
21 class APawn;
22 class ULevel;
23 class UClass;
24 class UGameInstance;
25
29 struct KARMA_API FActorSpawnParameters
30 {
31 FActorSpawnParameters();
32
38 std::string m_Name;
39
46
52
58
65
66#if WITH_EDITOR
70 class UPackage* OverridePackage;
71
73 FGuid OverrideActorGuid;
74#endif
75
78
80 // Need physics
81 //ESpawnActorCollisionHandlingMethod SpawnCollisionHandlingOverride;
82
83 private:
84
85 //friend class UPackageMapClient;
86
87 /* Is the actor remotely owned. This should only be set true by the package map when it is creating an actor on a client that was replicated from the server. */
88 uint8_t m_bRemoteOwned : 1;
89
90 public:
91
93 enum class ESpawnActorNameMode : uint8_t
94 {
96 Required_Fatal,
97
99 Required_ErrorAndReturnNull,
100
102 Required_ReturnNull,
103
105 Requested
106 };
107
110
113
114 /* Custom function allowing the caller to specific a function to execute post actor construction but before other systems see this actor spawn. */
115 // maybe later
116 //TFunction<void(AActor*)> CustomPreSpawnInitalization;
117
123 bool IsRemoteOwned() const { return m_bRemoteOwned; }
124
128 uint8_t m_bNoFail : 1;
129
136 };
137
147 class KARMA_API UWorld : public UObject
148 {
150
151 public:
157 UWorld();
158
169 AActor* SpawnActor(UClass* Class, FTransform const* Transform, const FActorSpawnParameters& SpawnParameters = FActorSpawnParameters());
170
181 template< class T >
182 T* SpawnActor(UClass* Class, const FActorSpawnParameters& SpawnParameters = FActorSpawnParameters())
183 {
184 return CastChecked<T>(SpawnActor(Class, nullptr, SpawnParameters), ECastCheckedType::NullAllowed);
185 }
186
187 template< class T >
188 T* SpawnActor(UClass* Class, FTransform const* Transform, const FActorSpawnParameters& SpawnParameters = FActorSpawnParameters())
189 {
190 return CastChecked<T>(SpawnActor(Class, Transform, SpawnParameters), ECastCheckedType::NullAllowed);
191 }
192
199 ULevel* GetPersistentLevel() const { return m_PersistentLevel; }
200
206 inline void SetGameInstance(UGameInstance* NewGI)
207 {
208 m_OwningGameInstance = NewGI;
209 }
210
211 private:
212//#if WITH_EDITORONLY_DATA
218 ULevel* m_CurrentLevel;
219//#endif
220
224 ULevel* m_PersistentLevel;
225
226
227 UGameInstance* m_OwningGameInstance;
228
230 // Time variables
232 double m_TimeSeconds;
233
235 double m_UnpausedTimeSeconds;
236
238 double m_RealTimeSeconds;
239
241 double m_AudioTimeSeconds;
242
244 float m_DeltaRealTimeSeconds;
245
247 float m_DeltaTimeSeconds;
248
250 double m_PauseDelay;
251
253 bool m_bIsPaused;
254
255 public:
257 uint8_t m_bIsTearingDown : 1;
258
260 //double m_TimeSeconds;
261
264
266 uint8_t m_bBegunPlay : 1;
267
270
272 //TEnumAsByte<ERHIFeatureLevel::Type> FeatureLevel;
273
275 struct InitializationValues
276 {
277 InitializationValues()
278 : bInitializeScenes(true)
279 , bAllowAudioPlayback(true)
280 , bRequiresHitProxies(true)
281 , bCreatePhysicsScene(true)
282 , bCreateNavigation(true)
283 , bCreateAISystem(true)
285 , bEnableTraceCollision(false)
287 , bTransactional(true)
288 , bCreateFXSystem(true)
289 , bCreateWorldPartition(false)
290 {
291 }
292
294 uint32_t bInitializeScenes : 1;
295
298
301
304
306 uint32_t bCreateNavigation : 1;
307
309 uint32_t bCreateAISystem : 1;
310
313
316
319
321 uint32_t bTransactional : 1;
322
324 uint32_t bCreateFXSystem : 1;
325
328
331
332 // Documentation left for extremely lazy and din kaat moments
333 InitializationValues& InitializeScenes(const bool bInitialize) { bInitializeScenes = bInitialize; return *this; }
334 InitializationValues& AllowAudioPlayback(const bool bAllow) { bAllowAudioPlayback = bAllow; return *this; }
335 InitializationValues& RequiresHitProxies(const bool bRequires) { bRequiresHitProxies = bRequires; return *this; }
336 InitializationValues& CreatePhysicsScene(const bool bCreate) { bCreatePhysicsScene = bCreate; return *this; }
337 InitializationValues& CreateNavigation(const bool bCreate) { bCreateNavigation = bCreate; return *this; }
338 InitializationValues& CreateAISystem(const bool bCreate) { bCreateAISystem = bCreate; return *this; }
339 InitializationValues& ShouldSimulatePhysics(const bool bInShouldSimulatePhysics) { bShouldSimulatePhysics = bInShouldSimulatePhysics; return *this; }
340 InitializationValues& EnableTraceCollision(const bool bInEnableTraceCollision) { bEnableTraceCollision = bInEnableTraceCollision; return *this; }
341 InitializationValues& ForceUseMovementComponentInNonGameWorld(const bool bInForceUseMovementComponentInNonGameWorld) { bForceUseMovementComponentInNonGameWorld = bInForceUseMovementComponentInNonGameWorld; return *this; }
342 InitializationValues& SetTransactional(const bool bInTransactional) { bTransactional = bInTransactional; return *this; }
343 InitializationValues& CreateFXSystem(const bool bCreate) { bCreateFXSystem = bCreate; return *this; }
344 InitializationValues& CreateWorldPartition(const bool bCreate) { bCreateWorldPartition = bCreate; return *this; }
345 InitializationValues& SetDefaultGameMode(TSubclassOf<class AGameModeBase> GameMode) { DefaultGameMode = GameMode; return *this; }
346 };
347
355 void Tick(/*ELevelTick TickType,*/ float DeltaSeconds);
356
357 public:
359 // UWorld inlines:
360
367 {
368 return m_TimeSeconds;
369 }
370
377 {
378 return m_CurrentLevel;
379 }
380
381 public:
387 bool AreActorsInitialized() const;
388
393 //void InitializeNewWorld(const InitializationValues IVS = InitializationValues(), bool bInSkipInitWorld = false);
394
400 bool HasBegunPlay() const;
401
415 static UWorld* CreateWorld(const EWorldType::Type InWorldType, bool bInformEngineOfWorld, const std::string& WorldName = "NoName", UPackage* InWorldPackage = NULL, bool bAddToRoot = true,/* ERHIFeatureLevel::Type InFeatureLevel = ERHIFeatureLevel::Num, const InitializationValues* InIVS = nullptr,*/ bool bInSkipInitWorld = false);
416
425 void InitializeNewWorld(const InitializationValues IVS = InitializationValues(), bool bInSkipInitWorld = false);
426
436 void InitializeActorsForPlay(const FURL& InURL, bool bResetTime = true/*, FRegisterComponentContext* Context = nullptr*/);
437
445 void ModifyLevel(ULevel* Level) const;
446
452 bool IsGameWorld() const;
453
463 void RemoveActor(AActor* Actor, bool bShouldModifyLevel) const;
464
482 bool ShivaActor(AActor* Actor, bool bNetForce = false, bool bShouldModifyLevel = true);
483
489 void AddOnActorSpawnedHandler() const;
490 void RemoveOnActorSpawnedHander() const {}
491
499 /*mutable FOnActorSpawned*/ void OnActorSpawned();
500 };
501}
#define KARMA_API
Defining Karma's API macro for storage class information.
Definition Core.h:41
#define FORCEINLINE
Typical inlining macro for clarity.
Definition Core.h:170
#define DECLARE_KARMA_CLASS(TClass, TSuperClass)
Karma's gamecode object class declaration.
Definition GFrameworkMacros.h:45
This file contains the class UObject along with helper functions.
This file contains the class TSubclassOf and relevant helpers.
FORCEINLINE T * CastChecked(const U &Src, ECastCheckedType::Type CheckType=ECastCheckedType::NullChecked)
Definition UObjectGlobals.h:706
EObjectFlags
Flags describing an object instance.
Definition UObjectGlobals.h:183
Actor is the base class for an object that can be placed or spawned in a level.
Definition Actor.h:35
Transform composed of Scale, Rotation (as a quaternion), and Translation.
Definition Transform.h:125
Template to allow TClassType's to be passed around with type safety.
Definition SubClassOf.h:117
A component that spawns an Actor when registered, and destroys it when unregistered.
Definition ChildActorComponent.h:23
An object class.
Definition Class.h:158
A high-level manager object for an instance of the running game.
Definition GameInstance.h:26
A Level is a collection of Actors (lights, volumes, mesh instances etc.). Multiple Levels can be load...
Definition Level.h:28
UObject()
Definition Object.cpp:10
A generic outer for UObjects, for instance UWorld.
Definition Package.h:22
The World is the top level object representing a map or a sandbox in which Actors and Components will...
Definition World.h:148
void SetGameInstance(UGameInstance *NewGI)
Definition World.h:206
uint8_t m_bBegunPlay
Definition World.h:266
AActor * SpawnActor(UClass *Class, FTransform const *Transform, const FActorSpawnParameters &SpawnParameters=FActorSpawnParameters())
Definition World.cpp:34
EWorldType::Type m_WorldType
Definition World.h:269
UWorld()
Definition World.cpp:19
uint8_t m_bIsTearingDown
Definition World.h:257
FORCEINLINE ULevel * GetCurrentLevel() const
Definition World.h:376
ULevel * GetPersistentLevel() const
Definition World.h:199
FORCEINLINE double GetTimeSeconds() const
Definition World.h:366
uint8_t m_bActorsInitialized
Definition World.h:263
T * SpawnActor(UClass *Class, const FActorSpawnParameters &SpawnParameters=FActorSpawnParameters())
Definition World.h:182
Type
Definition KarmaTypes.h:58
@ NullAllowed
Definition UObjectGlobals.h:690
URL structure.
Definition KarmaTypes.h:720
Struct of optional parameters passed to SpawnActor function(s).
Definition World.h:30
class UChildActorComponent * m_OverrideParentComponent
Definition World.h:77
EObjectFlags m_ObjectFlags
Definition World.h:112
APawn * m_Instigator
Definition World.h:57
uint8_t m_bNoFail
Definition World.h:128
ESpawnActorNameMode
Modes that SpawnActor can use the supplied name when it is not None.
Definition World.h:94
ULevel * m_OverrideLevel
Definition World.h:64
bool IsRemoteOwned() const
Getter for m_bRemoteOwned.
Definition World.h:123
std::string m_Name
Definition World.h:38
uint8_t m_bDeferConstruction
Definition World.h:135
AActor * m_Template
Definition World.h:45
AActor * m_Owner
Definition World.h:51
ESpawnActorNameMode m_NameMode
Definition World.h:109
uint32_t bShouldSimulatePhysics
Definition World.h:312
TSubclassOf< class AGameModeBase > DefaultGameMode
Definition World.h:330
uint32_t bCreateAISystem
Definition World.h:309
uint32_t bRequiresHitProxies
Definition World.h:300
uint32_t bInitializeScenes
Definition World.h:294
uint32_t bCreateWorldPartition
Definition World.h:327
uint32_t bCreateNavigation
Definition World.h:306
uint32_t bCreateFXSystem
Definition World.h:324
uint32_t bForceUseMovementComponentInNonGameWorld
Definition World.h:318
uint32_t bCreatePhysicsScene
Definition World.h:303
uint32_t bEnableTraceCollision
Definition World.h:315
uint32_t bAllowAudioPlayback
Definition World.h:297
uint32_t bTransactional
Definition World.h:321