aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api/LoopManager.h
diff options
context:
space:
mode:
authorWboerenkamps <wrj.boerenkamps@student.avans.nl>2024-12-11 19:40:58 +0100
committerGitHub <noreply@github.com>2024-12-11 19:40:58 +0100
commit59954bfc14cdb32997a3fb09e6ee1b393a4dc027 (patch)
treef1da5eeb955bc44fd4cf3bb22bcaf989116f0ef8 /src/crepe/api/LoopManager.h
parent30c17c98e54c1534664de08ca3838c40c859d166 (diff)
parenta464096dfff2ee4605e77852020e6a5c0fa5aa58 (diff)
Merge pull request #63 from lonkaars/wouter/gameloop
gameloop improvements + Singelton removal
Diffstat (limited to 'src/crepe/api/LoopManager.h')
-rw-r--r--src/crepe/api/LoopManager.h61
1 files changed, 24 insertions, 37 deletions
diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h
index 1bafa56..2915315 100644
--- a/src/crepe/api/LoopManager.h
+++ b/src/crepe/api/LoopManager.h
@@ -4,16 +4,16 @@
#include "../facade/SDLContext.h"
#include "../manager/ComponentManager.h"
+#include "../manager/EventManager.h"
+#include "../manager/LoopTimerManager.h"
+#include "../manager/Mediator.h"
#include "../manager/ResourceManager.h"
#include "../manager/SaveManager.h"
#include "../manager/SceneManager.h"
#include "../system/System.h"
-#include "LoopTimer.h"
-#include "manager/ResourceManager.h"
namespace crepe {
-
/**
* \brief Main game loop manager
*
@@ -21,8 +21,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.
+ * The Game programmer needs to call this function to run the game. This should be done after creating and adding all scenes.
+ */
+ void start();
/**
* \brief Add a new concrete scene to the scene manager
@@ -47,47 +53,20 @@ private:
void loop();
/**
- * \brief Function for handling input-related system calls.
- *
- * Processes user inputs from keyboard and mouse.
- */
- void process_input();
-
- /**
* \brief Per-frame update.
*
* Updates the game state based on the elapsed time since the last frame.
*/
- void update();
-
- /**
- * \brief Late update which is called after update().
- *
- * This function can be used for final adjustments before rendering.
- */
- void late_update();
+ virtual void frame_update();
/**
* \brief Fixed update executed at a fixed rate.
*
* 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);
-
- /**
- * \brief Function for executing render-related systems.
- *
- * Renders the current state of the game to the screen.
- */
- void render();
+ virtual void fixed_update();
+ //! Indicates whether the game is running.
bool game_running = false;
private:
@@ -98,21 +77,29 @@ private:
ComponentManager component_manager{mediator};
//! Scene manager instance
SceneManager scene_manager{mediator};
+ //! LoopTimerManager instance
+ LoopTimerManager loop_timer{mediator};
+ //! EventManager instance
+ EventManager event_manager{mediator};
//! Resource manager instance
ResourceManager resource_manager{mediator};
//! Save manager instance
SaveManager save_manager{mediator};
//! SDLContext instance
SDLContext sdl_context{mediator};
- //! LoopTimer instance
- LoopTimer loop_timer{mediator};
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;
/**