diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-10 19:50:26 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-10 19:50:26 +0100 |
commit | 770496ee9d0e45480c0e0f8951adb8eee247bfe1 (patch) | |
tree | 98c68b0d37d8a1c0c8b8013ea7884d56f04aaa28 /src/crepe/api/LoopManager.cpp | |
parent | 0cb7f2f82ca167656b3c5cb9f0cc3b44c59cb0eb (diff) |
big WIP
Diffstat (limited to 'src/crepe/api/LoopManager.cpp')
-rw-r--r-- | src/crepe/api/LoopManager.cpp | 74 |
1 files changed, 33 insertions, 41 deletions
diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp index 3e9e21c..637fbe1 100644 --- a/src/crepe/api/LoopManager.cpp +++ b/src/crepe/api/LoopManager.cpp @@ -6,40 +6,51 @@ #include "../system/PhysicsSystem.h" #include "../system/RenderSystem.h" #include "../system/ScriptSystem.h" -#include "manager/EventManager.h" +#include "../system/EventSystem.h" #include "LoopManager.h" using namespace crepe; using namespace std; -LoopManager::LoopManager() { - this->load_system<AnimatorSystem>(); - this->load_system<CollisionSystem>(); - this->load_system<ParticleSystem>(); - this->load_system<PhysicsSystem>(); - this->load_system<RenderSystem>(); - this->load_system<ScriptSystem>(); - this->load_system<InputSystem>(); - this->load_system<AudioSystem>(); -} - -void LoopManager::process_input() { this->get_system<InputSystem>().update(); } +LoopManager::LoopManager() + : systems({ + ScriptSystem{this->mediator}, + PhysicsSystem{this->mediator}, + CollisionSystem{this->mediator}, + AnimatorSystem{this->mediator}, + ParticleSystem{this->mediator}, + RenderSystem{this->mediator}, + InputSystem{this->mediator}, + EventSystem{this->mediator}, + AudioSystem{this->mediator}, + }) { } void LoopManager::start() { this->setup(); this->loop(); } -void LoopManager::set_running(bool running) { this->game_running = running; } void LoopManager::fixed_update() { - // TODO: retrieve EventManager from direct member after singleton refactor - EventManager & ev = this->mediator.event_manager; - ev.dispatch_events(); - this->get_system<ScriptSystem>().update(); - this->get_system<PhysicsSystem>().update(); - this->get_system<CollisionSystem>().update(); - this->get_system<AudioSystem>().update(); + for (System & system : this->systems) { + if (!system.active) continue; + system.fixed_update(); + } +} + +void LoopManager::frame_update() { + for (System & system : this->systems) { + if (!system.active) continue; + system.frame_update(); + } +} + +void LoopManager::setup() { + LoopTimer & timer = this->loop_timer; + this->game_running = true; + this->scene_manager.load_next_scene(); + timer.start(); + timer.set_fps(200); } void LoopManager::loop() { @@ -50,31 +61,12 @@ void LoopManager::loop() { timer.update(); while (timer.get_lag() >= timer.get_fixed_delta_time()) { - this->process_input(); this->fixed_update(); timer.advance_fixed_update(); } - this->update(); - this->render(); - + this->frame_update(); timer.enforce_frame_rate(); } } -void LoopManager::setup() { - LoopTimer & timer = this->loop_timer; - this->game_running = true; - this->scene_manager.load_next_scene(); - timer.start(); - timer.set_fps(200); -} - -void LoopManager::render() { - if (!this->game_running) return; - - this->get_system<AnimatorSystem>().update(); - this->get_system<RenderSystem>().update(); -} - -void LoopManager::update() {} |