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;  	/** |