ezEngine  Release 25.03
ezGameState Class Reference

ezGameState implements the ezGameStateBase interface and adds several convenience features. More...

#include <GameState.h>

Inheritance diagram for ezGameState:

Public Member Functions

ezWorldGetMainWorld ()
 Returns the ezWorld that is currently the active one.
 
ezCameraGetMainCamera ()
 Gives access to the game state's main camera object.
 
ezViewGetMainView ()
 Returns the ezView that is currently the one used for rendering the main output.
 
bool IsLoadingSceneInBackground (float *out_pProgress=nullptr) const
 Whether a scene is currently being loaded.
 
bool IsInLoadingScreen () const
 Whether the game state currently displays a loading screen. This usually implies that a scene is being loaded as well.
 
virtual void OnActivation (ezWorld *pWorld, ezStringView sStartPosition, const ezTransform &startPositionOffset) override
 Called upon game startup. More...
 
virtual void OnDeactivation () override
 Cleans up the main window before the game is shut down.
 
virtual void AddMainViewsToRender () override
 Makes sure m_hMainView gets rendered. Mainly needed by the editor.
 
virtual void RequestQuit () override
 Simply stores that the game should stop. More...
 
virtual bool WasQuitRequested () const override
 Whether WasQuitRequested() was called before.
 
virtual void ProcessInput () override
 The ezGameState doesn't implement any input logic, but it forwards to UpdateBackgroundSceneLoading().
 
void LoadScene (ezStringView sSceneFile, ezStringView sPreloadCollection, ezStringView sStartPosition, const ezTransform &startPositionOffset)
 Immediately switches to a loading screen and starts loading a level. More...
 
void SwitchToLoadingScreen (ezStringView sTargetSceneFile)
 Convenience function to switch to a loading screen. More...
 
void ChangeMainWorld (ezWorld *pNewMainWorld, ezStringView sStartPosition, const ezTransform &startPositionOffset)
 Sets m_pMainWorld and updates m_pMainView to use that new world for rendering. More...
 
void StartBackgroundSceneLoading (ezStringView sSceneFile, ezStringView sPreloadCollection)
 Starts loading a scene in the background. More...
 
void CancelBackgroundSceneLoading ()
 If a scene is currently being loaded in the background, cancel the loading. More...
 
- Public Member Functions inherited from ezGameStateBase
virtual void BeforeWorldUpdate ()
 Called once each frame before the worlds are updated.
 
virtual void AfterWorldUpdate ()
 Called once each frame after the worlds have been updated.
 
virtual bool IsFallbackGameState () const
 Should be overridden by game states that are only meant as a fallback solution. More...
 
- Public Member Functions inherited from ezReflectedClass
virtual const ezRTTIGetDynamicRTTI () const
 
bool IsInstanceOf (const ezRTTI *pType) const
 Returns whether the type of this instance is of the given type or derived from it.
 
template<typename T >
EZ_ALWAYS_INLINE bool IsInstanceOf () const
 Returns whether the type of this instance is of the given type or derived from it.
 

Static Public Member Functions

static ezGameStateGetActiveGameState ()
 Returns the active ezGameState. Only one ezGameState is allowed to exist.
 
- Static Public Member Functions inherited from ezNoBase
static const ezRTTIGetStaticRTTI ()
 

Protected Member Functions

 ezGameState ()
 This class cannot be instantiated directly.
 
virtual void CreateActors ()
 Creates an actor with a default window (ezGameStateWindow) adds it to the application. More...
 
virtual void ConfigureInputActions ()
 Adds custom input actions, if necessary. Unless overridden OnActivation() will call this.
 
virtual ezResult SpawnPlayer (ezStringView sStartPosition, const ezTransform &startPositionOffset)
 Overrideable function that may create a player object. More...
 
ezUniquePtr< ezActorCreateXRActor ()
 Creates an XR Actor, if XR is configured and available for the project.
 
ezViewCreateMainView ()
 Creates a default main view.
 
virtual void OnChangedMainWorld (ezWorld *pPrevWorld, ezWorld *pNewWorld, ezStringView sStartPosition, const ezTransform &startPositionOffset)
 Executed when ChangeMainWorld() is used to switch to a new world. More...
 
virtual void ConfigureMainCamera () override
 Searches for a "Main View" ezCameraComponent in the world and uses that for the camera position, if available. More...
 
virtual ezUniquePtr< ezWindowCreateMainWindow ()
 Override this to modify the default window creation behavior. Called by CreateActors().
 
virtual ezUniquePtr< ezWindowOutputTargetGALCreateMainOutputTarget (ezWindow *pMainWindow)
 Override this to modify the default output target creation behavior. Called by CreateActors().
 
virtual void SetupMainView (ezGALSwapChainHandle hSwapChain, ezSizeU32 viewportSize)
 Creates a default render view. Unless overridden, OnActivation() will do this for the main window.
 
virtual void ConfigureMainWindowInputDevices (ezWindow *pWindow)
 Configures available input devices, e.g. sets mouse speed, cursor clipping, etc. Called by CreateActors() with the result of CreateMainWindow().
 
virtual ezString GetStartupSceneFile ()
 Returns the path to the scene file to load at startup. More...
 
virtual ezUniquePtr< ezWorldCreateLoadingScreenWorld (ezStringView sTargetSceneFile)
 Called by SwitchToLoadingScreen() to set up a new loading screen world. More...
 
void UpdateBackgroundSceneLoading ()
 If a scene is being loaded in the background, this advanced the loading. More...
 
virtual void OnBackgroundSceneLoadingFinished (ezUniquePtr< ezWorld > &&pWorld)
 Called by UpdateBackgroundSceneLoading() when a scene is finished loading. More...
 
virtual void OnBackgroundSceneLoadingFailed (ezStringView sReason)
 Called by UpdateBackgroundSceneLoading() when a scene failed to load.
 
virtual void OnBackgroundSceneLoadingCanceled ()
 Called by CancelBackgroundSceneLoading() when scene loading gets canceled.
 

Protected Attributes

ezViewHandle m_hMainView
 
ezWorldm_pMainWorld = nullptr
 
ezCamera m_MainCamera
 
ezUniquePtr< ezDummyXRm_pDummyXR
 
bool m_bStateWantsToQuit = false
 
bool m_bXREnabled = false
 
bool m_bXRRemotingEnabled = false
 
bool m_bTransitionWhenReady = false
 
ezUniquePtr< ezSceneLoadUtilitym_pBackgroundSceneLoad
 
ezUniquePtr< ezWorldm_pLoadingScreenWorld
 
ezUniquePtr< ezWorldm_pLoadedWorld
 
ezString m_sTargetSceneSpawnPoint
 
ezTransform m_TargetSceneSpawnOffset = ezTransform::MakeIdentity()
 

Static Protected Attributes

static ezGameStates_pActiveGameState = nullptr
 

Detailed Description

ezGameState implements the ezGameStateBase interface and adds several convenience features.

For an explanation what game states are, see the online documentation: https://ezengine.net/pages/docs/runtime/application/game-state.html

The ezGameState adds some default functionality:

  • Creation of a main window and render pipeline
  • A main view handle
  • A main camera object
  • A main world that is currently active
  • Background loading of scenes
  • A separate world used as a loading screen
  • automatic player prefab spawning if a ezPlayerStartPointComponent is part of the scene
  • automatically applies the state of the "Main View" ezCameraComponent in the scene
  • Many additional hooks to customize only specific parts, such as the window creation

Typically you would derive from ezGameState and then override functions like ProcessInput() and ConfigureMainCamera(). Take a look at ezFallbackGameState for inspiration.

Member Function Documentation

◆ CancelBackgroundSceneLoading()

void ezGameState::CancelBackgroundSceneLoading ( )

If a scene is currently being loaded in the background, cancel the loading.

Calls OnBackgroundSceneLoadingCanceled() if a scene was loading.

◆ ChangeMainWorld()

void ezGameState::ChangeMainWorld ( ezWorld pNewMainWorld,
ezStringView  sStartPosition,
const ezTransform startPositionOffset 
)

Sets m_pMainWorld and updates m_pMainView to use that new world for rendering.

Calls OnChangedMainWorld() afterwards, so that you can follow up on a scene change as needed. Calls ConfigureMainCamera() as well.

◆ ConfigureMainCamera()

void ezGameState::ConfigureMainCamera ( )
overrideprotectedvirtual

Searches for a "Main View" ezCameraComponent in the world and uses that for the camera position, if available.

Override this for custom camera logic.

Reimplemented from ezGameStateBase.

Reimplemented in ezFallbackGameState.

◆ CreateActors()

void ezGameState::CreateActors ( )
protectedvirtual

Creates an actor with a default window (ezGameStateWindow) adds it to the application.

The base implementation calls CreateMainWindow(), CreateMainOutputTarget() and SetupMainView() to configure the main window.

◆ CreateLoadingScreenWorld()

ezUniquePtr< ezWorld > ezGameState::CreateLoadingScreenWorld ( ezStringView  sTargetSceneFile)
protectedvirtual

Called by SwitchToLoadingScreen() to set up a new loading screen world.

A loading screen uses a separate ezWorld. It can be fully set up in code or loaded from disk, but it should be very light-weight, so that it is quick to set up.

◆ GetStartupSceneFile()

ezString ezGameState::GetStartupSceneFile ( )
protectedvirtual

Returns the path to the scene file to load at startup.

By default this is taken from the command line '-scene' option. Override this function to define a custom startup scene (e.g. for the main menu) or load a saved state.

◆ LoadScene()

void ezGameState::LoadScene ( ezStringView  sSceneFile,
ezStringView  sPreloadCollection,
ezStringView  sStartPosition,
const ezTransform startPositionOffset 
)

Immediately switches to a loading screen and starts loading a level.

When the level is finished loading, OnBackgroundSceneLoadingFinished() is called, which switches to it immediately, unless overridden. If the scene was already fully preloaded, the switch happens immediately, without showing a loading screen.

◆ OnActivation()

void ezGameState::OnActivation ( ezWorld pWorld,
ezStringView  sStartPosition,
const ezTransform startPositionOffset 
)
overridevirtual

Called upon game startup.

Calls CreateActors() to create the game's main window and setup input devices. Calls ConfigureInputActions() to setup input actions. Finally switches to pWorld (if available) or starts loading the scene that GetStartupSceneFile() returns.

Override any of the above functions to customize them.

Implements ezGameStateBase.

Reimplemented in ezFallbackGameState.

◆ OnBackgroundSceneLoadingFinished()

void ezGameState::OnBackgroundSceneLoadingFinished ( ezUniquePtr< ezWorld > &&  pWorld)
protectedvirtual

Called by UpdateBackgroundSceneLoading() when a scene is finished loading.

May switch to the scene immediately or wait, for example for a user to confirm.

Reimplemented in ezFallbackGameState.

◆ OnChangedMainWorld()

void ezGameState::OnChangedMainWorld ( ezWorld pPrevWorld,
ezWorld pNewWorld,
ezStringView  sStartPosition,
const ezTransform startPositionOffset 
)
protectedvirtual

Executed when ChangeMainWorld() is used to switch to a new world.

Override this to be informed about scene changes. This happens right at startup (both for given worlds and custom created ones) and when the game needs to switch to a new level.

◆ RequestQuit()

void ezGameState::RequestQuit ( )
overridevirtual

Simply stores that the game should stop.

Override this to add more elaborate logic, if necessary.

Implements ezGameStateBase.

◆ SpawnPlayer()

ezResult ezGameState::SpawnPlayer ( ezStringView  sStartPosition,
const ezTransform startPositionOffset 
)
protectedvirtual

Overrideable function that may create a player object.

By default called by OnChangedMainWorld() when switching to a non-loading screen world. The default implementation will search the world for ezPlayerStartComponent's and instantiate the given player prefab at one of those locations. If pStartPosition is not nullptr, it will be used as the spawn position for the player prefab, otherwise the location of the ezPlayerStartComponent will be used.

sStartPosition allows to spawn the player at another named location, but there is no default implementation for such logic.

Returns EZ_SUCCESS if a prefab was spawned, EZ_FAILURE if nothing was done.

Reimplemented in ezFallbackGameState.

◆ StartBackgroundSceneLoading()

void ezGameState::StartBackgroundSceneLoading ( ezStringView  sSceneFile,
ezStringView  sPreloadCollection 
)

Starts loading a scene in the background.

If available, a collection can be provided. Resources referenced in the collection will be fully preloaded first and then the scene is loaded. This is the only way to get a proper estimation of loading progress and is necessary to get a smooth start, otherwise the engine will have to load resources on-demand, many of which will be needed during the first frame.

Once finished, one of these hooks is executed: OnBackgroundSceneLoadingFinished() OnBackgroundSceneLoadingFailed() OnBackgroundSceneLoadingCanceled()

◆ SwitchToLoadingScreen()

void ezGameState::SwitchToLoadingScreen ( ezStringView  sTargetSceneFile)

Convenience function to switch to a loading screen.

Nothing actually gets loaded. Without further logic, the app will stay in the loading screen indefinitely. sTargetSceneFile is only passed in, so that the loading screen can be customized accordingly, for example it may show a screenshot of the target scene.

◆ UpdateBackgroundSceneLoading()

void ezGameState::UpdateBackgroundSceneLoading ( )
protected

If a scene is being loaded in the background, this advanced the loading.

Upon success or failure, executes either of these: OnBackgroundSceneLoadingFinished() OnBackgroundSceneLoadingFailed()


The documentation for this class was generated from the following files: