R-Type 0.1
Loading...
Searching...
No Matches
rtk::SceneManager< TSceneId, TDependency, TInput, TScenes > Class Template Reference

Holds the active scene and switches between a fixed set of scenes. More...

#include <sceneManager/sceneManager.hpp>

Public Types

using SceneVariant = std::variant<TScenes...>
 Variant holding the active scene.
 

Public Member Functions

template<typename TInitialScene >
 SceneManager (TDependency &dependency, std::in_place_type_t< TInitialScene >)
 Constructs the initial scene without entering it.
 
void start (EngineContext &context)
 Calls onEnter() on the active scene.
 
void update (EngineContext &context, const TInput &input, float dt)
 Updates the active scene and switches if it asks to.
 
void stop (EngineContext &context)
 Calls onExit() on the active scene.
 
template<typename TScene >
requires (std::same_as<TScene, TScenes> || ...)
TScene * get () noexcept
 Returns the active scene if it has the given type.
 
template<typename TScene >
requires (std::same_as<TScene, TScenes> || ...)
const TScene * get () const noexcept
 Returns the active scene if it has the given type.
 

Detailed Description

template<SceneIdentifier TSceneId, typename TDependency, typename TInput, typename... TScenes>
requires ((Scene<TScenes, TSceneId, TInput> && ...) && (std::constructible_from<TScenes, TDependency &> && ...))
class rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >

Holds the active scene and switches between a fixed set of scenes.

Scenes are stored in a std::variant, so the set is checked at compile time and only the active scene is alive.

Template Parameters
TSceneIdEnum identifying the scenes.
TDependencyObject passed to every scene constructor.
TInputInput state passed to onUpdate().
TScenesEvery scene type, each satisfying rtk::Scene.

Constructor & Destructor Documentation

◆ SceneManager()

template<SceneIdentifier TSceneId, typename TDependency , typename TInput , typename... TScenes>
template<typename TInitialScene >
rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >::SceneManager ( TDependency & dependency,
std::in_place_type_t< TInitialScene >  )
inline

Constructs the initial scene without entering it.

Template Parameters
TInitialSceneFirst active scene.
Parameters
dependencyObject passed to every scene constructor.

Member Function Documentation

◆ start()

template<SceneIdentifier TSceneId, typename TDependency , typename TInput , typename... TScenes>
void rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >::start ( EngineContext & context)
inline

Calls onEnter() on the active scene.

Parameters
contextEngine services.

◆ update()

template<SceneIdentifier TSceneId, typename TDependency , typename TInput , typename... TScenes>
void rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >::update ( EngineContext & context,
const TInput & input,
float dt )
inline

Updates the active scene and switches if it asks to.

Parameters
contextEngine services.
inputInput state of the frame.
dtElapsed time since the last frame, in seconds.
Exceptions
std::runtime_errorIf the requested scene is not in TScenes.

◆ stop()

template<SceneIdentifier TSceneId, typename TDependency , typename TInput , typename... TScenes>
void rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >::stop ( EngineContext & context)
inline

Calls onExit() on the active scene.

Parameters
contextEngine services.

◆ get() [1/2]

template<SceneIdentifier TSceneId, typename TDependency , typename TInput , typename... TScenes>
template<typename TScene >
requires (std::same_as<TScene, TScenes> || ...)
TScene * rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >::get ( )
inlinenodiscardnoexcept

Returns the active scene if it has the given type.

Template Parameters
TSceneScene type to look for.
Returns
The scene, or nullptr if another scene is active.

◆ get() [2/2]

template<SceneIdentifier TSceneId, typename TDependency , typename TInput , typename... TScenes>
template<typename TScene >
requires (std::same_as<TScene, TScenes> || ...)
const TScene * rtk::SceneManager< TSceneId, TDependency, TInput, TScenes >::get ( ) const
inlinenodiscardnoexcept

Returns the active scene if it has the given type.

Template Parameters
TSceneScene type to look for.
Returns
The scene, or nullptr if another scene is active.