Plasma Engine  2.0
Loading...
Searching...
No Matches
GameApplicationBase.h
1#pragma once
2
3#include <Core/Configuration/PlatformProfile.h>
4#include <Core/Console/ConsoleFunction.h>
5#include <Core/GameApplication/WindowOutputTargetBase.h>
6#include <Core/GameState/GameStateBase.h>
7#include <Core/System/Window.h>
8#include <Foundation/Application/Application.h>
9#include <Foundation/Types/UniquePtr.h>
10
11class plWindowBase;
13class plWorld;
14
19{
20 enum class Type
21 {
22 AfterGameStateActivated,
23 BeforeGameStateDeactivated
24 };
25
26 Type m_Type;
27};
28
32{
33 enum class Type
34 {
35 BeginAppTick,
36 BeforeWorldUpdates,
37 AfterWorldUpdates,
38 BeforeUpdatePlugins,
39 AfterUpdatePlugins,
40 BeforePresent,
41 AfterPresent,
42 EndAppTick,
43 };
44
45 Type m_Type;
46};
47
48// TODO: document this and update plGameApplication comments
49
50class PL_CORE_DLL plGameApplicationBase : public plApplication
51{
52public:
53 using SUPER = plApplication;
54
57
60
61public:
63 static plGameApplicationBase* GetGameApplicationBaseInstance() { return s_pGameApplicationBaseInstance; }
64
65protected:
66 static plGameApplicationBase* s_pGameApplicationBaseInstance;
67
71
72public:
74 void TakeProfilingCapture();
75
79 void TakeScreenshot();
80
81protected:
83 virtual void StoreScreenshot(plImage&& image, plStringView sContext = {});
84
85 void ExecuteTakeScreenshot(plWindowOutputTargetBase* pOutputTarget, plStringView sContext = {});
86
87 bool m_bTakeScreenshot = false;
88
91
95
96public:
101 void CaptureFrame();
102
109 void SetContinuousFrameCapture(bool bEnable);
110 bool GetContinousFrameCapture() const;
111
113 virtual plResult GetAbsFrameCaptureOutputPath(plStringBuilder& ref_sOutputPath);
114
115protected:
116 void ExecuteFrameCapture(plWindowHandle targetWindowHandle, plStringView sContext = {});
117
118 bool m_bContinuousFrameCapture = false;
119 bool m_bCaptureFrame = false;
120
123
127public:
138 plResult ActivateGameState(plWorld* pWorld = nullptr, const plTransform* pStartPosition = nullptr);
139
144 void DeactivateGameState();
145
147 plGameStateBase* GetActiveGameState() const { return m_pGameState.Borrow(); }
148
153 plGameStateBase* GetActiveGameStateLinkedToWorld(const plWorld* pWorld) const;
154
155protected:
162 virtual plUniquePtr<plGameStateBase> CreateGameState(plWorld* pWorld);
163
168 virtual void ActivateGameStateAtStartup();
169
170 plUniquePtr<plGameStateBase> m_pGameState;
171 plWorld* m_pWorldLinkedWithGameState = nullptr;
172
176public:
178 const plPlatformProfile& GetPlatformProfile() const { return m_PlatformProfile; }
179
180
181protected:
182 plPlatformProfile m_PlatformProfile;
183
187protected:
188 virtual plResult BeforeCoreSystemsStartup() override;
189 virtual void AfterCoreSystemsStartup() override;
190
196 virtual plString FindProjectDirectory() const = 0;
197
202 virtual plString GetBaseDataDirectoryPath() const;
203
208 virtual plString GetProjectDataDirectoryPath() const;
209
211 virtual void ExecuteBaseInitFunctions();
212 virtual void BaseInit_ConfigureLogging();
213
214 plEventSubscriptionID m_LogToConsoleID = 0;
215 plEventSubscriptionID m_LogToVsID = 0;
216
218 virtual void ExecuteInitFunctions();
219 virtual void Init_PlatformProfile_SetPreferred();
220 virtual void Init_ConfigureTelemetry();
221 virtual void Init_FileSystem_SetSpecialDirs();
222 virtual void Init_LoadRequiredPlugins();
223 virtual void Init_ConfigureAssetManagement();
224 virtual void Init_FileSystem_ConfigureDataDirs();
225 virtual void Init_LoadWorldModuleConfig();
226 virtual void Init_LoadProjectPlugins();
227 virtual void Init_PlatformProfile_LoadForRuntime();
228 virtual void Init_ConfigureInput();
229 virtual void Init_ConfigureTags();
230 virtual void Init_ConfigureCVars();
231 virtual void Init_SetupGraphicsDevice() = 0;
232 virtual void Init_SetupDefaultResources();
233
235
239protected:
240 virtual void BeforeHighLevelSystemsShutdown() override;
241 virtual void BeforeCoreSystemsShutdown() override;
242
243 virtual void Deinit_ShutdownGraphicsDevice() = 0;
244 virtual void Deinit_UnloadPlugins();
245 virtual void Deinit_ShutdownLogging();
246
250
251public:
252 virtual plApplication::Execution Run() override;
253
254 void RunOneFrame();
255
257
258 plTime GetFrameTime() const { return m_FrameTime; }
259
260protected:
261 virtual bool IsGameUpdateEnabled() const { return true; }
262
263 virtual void Run_InputUpdate();
264 virtual bool Run_ProcessApplicationInput();
266 virtual void Run_AcquireImage();
267 virtual void Run_WorldUpdateAndRender() = 0;
268 virtual void Run_BeforeWorldUpdate();
269 virtual void Run_AfterWorldUpdate();
270 virtual void Run_UpdatePlugins();
272 virtual void Run_PresentImage();
273 virtual void Run_FinishFrame();
274
275 void UpdateFrameTime();
276
277 plTime m_FrameTime;
279};
Base class to be used by applications based on plEngine.
Definition Application.h:66
Execution
Defines the possible return values for the plApplication::Run() function.
Definition Application.h:72
virtual void BeforeCoreSystemsShutdown()
This function is called after the application main loop has run for the last time,...
Definition Application.h:120
virtual void AfterCoreSystemsStartup()
This function is called after basic engine initialization has been done.
Definition Application.h:101
plApplication(plStringView sAppName)
Constructor.
Definition Application.cpp:11
virtual Execution Run()=0
Main run function which is called periodically. This function must be overridden.
virtual void BeforeHighLevelSystemsShutdown()
This function is called after the application main loop has run for the last time,...
Definition Application.h:110
virtual plResult BeforeCoreSystemsStartup()
This function is called before any kind of engine initialization is done.
Definition Application.cpp:25
Implements the functionality of plConsoleFunctionBase for functions with different parameter types....
Definition ConsoleFunction.h:76
Definition Event.h:177
Definition GameApplicationBase.h:51
plConsoleFunction< void()> m_ConFunc_TakeScreenshot
expose TakeScreenshot() as a console function
Definition GameApplicationBase.h:90
virtual plString FindProjectDirectory() const =0
Returns the target of the 'project' special data directory.
plConsoleFunction< void()> m_ConFunc_CaptureFrame
expose CaptureFrame() as a console function
Definition GameApplicationBase.h:122
const plPlatformProfile & GetPlatformProfile() const
Returns the plPlatformProfile that has been loaded for this application.
Definition GameApplicationBase.h:178
static plGameApplicationBase * GetGameApplicationBaseInstance()
Returns the plGameApplicationBase singleton.
Definition GameApplicationBase.h:63
plGameStateBase * GetActiveGameState() const
Returns the currently active game state. Could be nullptr.
Definition GameApplicationBase.h:147
plGameState is the base class to build custom game logic upon. It works closely together with plGameA...
Definition GameStateBase.h:38
A class containing image data and associated meta data.
Definition Image.h:103
Definition PlatformProfile.h:25
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
Base class of all window classes that have a client area and a native window handle.
Definition Window.h:134
Base class for window output targets.
Definition WindowOutputTargetBase.h:16
A world encapsulates a scene graph of game objects and various component managers and their component...
Definition World.h:22
Definition GameApplicationBase.h:32
Definition GameApplicationBase.h:19
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12
Parameters for creating a window, such as position and resolution.
Definition Window.h:180