diff options
Diffstat (limited to 'src/crepe/api/LoopManager.h')
-rw-r--r-- | src/crepe/api/LoopManager.h | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h index d8910a0..9986aa5 100644 --- a/src/crepe/api/LoopManager.h +++ b/src/crepe/api/LoopManager.h @@ -5,12 +5,14 @@ #include "../facade/SDLContext.h" #include "../manager/ComponentManager.h" #include "../manager/SceneManager.h" +#include "../manager/EventManager.h" +#include "../manager/LoopTimerManager.h" #include "../system/System.h" +#include "../manager/Mediator.h" -#include "LoopTimer.h" +#include "api/Event.h" namespace crepe { - /** * \brief Main game loop manager * @@ -18,8 +20,14 @@ namespace crepe { */ class LoopManager { public: - void start(); LoopManager(); + /** + * \brief Start the gameloop + * + * This is the start of the engine where the setup is called and then the loop keeps running until the game stops running. + * Developers need to call this function to run the game. + */ + void start(); /** * \brief Add a new concrete scene to the scene manager @@ -55,7 +63,7 @@ private: * * Updates the game state based on the elapsed time since the last frame. */ - void update(); + virtual void update(); /** * \brief Late update which is called after update(). @@ -69,21 +77,13 @@ private: * * This function updates physics and game logic based on LoopTimer's fixed_delta_time. */ - void fixed_update(); - - /** - * \brief Set game running variable - * - * \param running running (false = game shutdown, true = game running) - */ - void set_running(bool running); - + virtual void fixed_update(); /** * \brief Function for executing render-related systems. * * Renders the current state of the game to the screen. */ - void render(); + virtual void render(); bool game_running = false; @@ -95,18 +95,27 @@ private: ComponentManager component_manager{mediator}; //! Scene manager instance SceneManager scene_manager{mediator}; + //! LoopTimerManager instance + LoopTimerManager loop_timer{mediator}; + //! EventManager instance + EventManager event_manager{mediator}; //! SDL context \todo no more singletons! SDLContext & sdl_context = SDLContext::get_instance(); - //! Loop timer \todo no more singletons! - LoopTimer & loop_timer = LoopTimer::get_instance(); + private: /** + * \brief Callback function for ShutDownEvent + * + * This function sets the game_running variable to false, stopping the gameloop and therefor quitting the game. + */ + bool on_shutdown(const ShutDownEvent & e); + /** * \brief Collection of System instances * * This map holds System instances indexed by the system's class typeid. It is filled in the - * constructor of \c LoopManager using LoopManager::load_system. + * constructor of LoopManager using LoopManager::load_system. */ std::unordered_map<std::type_index, std::unique_ptr<System>> systems; /** |