diff options
Diffstat (limited to 'src/crepe/api/LoopManager.cpp')
-rw-r--r-- | src/crepe/api/LoopManager.cpp | 62 |
1 files changed, 26 insertions, 36 deletions
diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp index 1f0ba72..3511bca 100644 --- a/src/crepe/api/LoopManager.cpp +++ b/src/crepe/api/LoopManager.cpp @@ -7,7 +7,7 @@ #include "../system/PhysicsSystem.h" #include "../system/RenderSystem.h" #include "../system/ScriptSystem.h" -#include "manager/EventManager.h" +#include "../system/EventSystem.h" #include "LoopManager.h" @@ -15,34 +15,43 @@ using namespace crepe; using namespace std; LoopManager::LoopManager() { - this->load_system<AnimatorSystem>(); + this->load_system<ScriptSystem>(); + this->load_system<AISystem>(); + this->load_system<PhysicsSystem>(); this->load_system<CollisionSystem>(); + this->load_system<AnimatorSystem>(); this->load_system<ParticleSystem>(); - this->load_system<PhysicsSystem>(); this->load_system<RenderSystem>(); - this->load_system<ScriptSystem>(); this->load_system<InputSystem>(); + this->load_system<EventSystem>(); this->load_system<AudioSystem>(); - this->load_system<AISystem>(); } -void LoopManager::process_input() { this->get_system<InputSystem>().update(); } - 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<AISystem>().update(); - this->get_system<PhysicsSystem>().update(); - this->get_system<CollisionSystem>().update(); - this->get_system<AudioSystem>().update(); + for (auto & [type, system] : this->systems) { + if (!system->active) continue; + system->fixed_update(); + } +} + +void LoopManager::frame_update() { + for (auto & [type, 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() { @@ -53,31 +62,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() {} |