aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/api/LoopManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/api/LoopManager.cpp')
-rw-r--r--src/crepe/api/LoopManager.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp
new file mode 100644
index 0000000..746e9ce
--- /dev/null
+++ b/src/crepe/api/LoopManager.cpp
@@ -0,0 +1,61 @@
+
+
+#include "../system/RenderSystem.h"
+#include "../system/ScriptSystem.h"
+
+#include "LoopManager.h"
+#include "LoopTimer.h"
+
+namespace crepe {
+
+void LoopManager::process_input() {
+ SDLContext::get_instance().handle_events(this->gameRunning);
+}
+void LoopManager::start(){
+ this->setup();
+ this->loop();
+}
+void LoopManager::set_running(bool running) { this->gameRunning = running; }
+
+void LoopManager::fixed_update() {
+}
+
+void LoopManager::loop() {
+ LoopTimer & timer = LoopTimer::getInstance();
+ timer.start();
+
+ while (gameRunning) {
+ timer.update();
+
+ while (timer.get_lag() >= timer.get_fixed_delta_time()) {
+ process_input();
+ fixed_update();
+ timer.advance_fixed_update();
+ }
+
+ update();
+ render();
+
+ timer.enforce_frame_rate();
+ }
+}
+
+
+void LoopManager::setup() {
+ this->gameRunning = true;
+ LoopTimer::getInstance().start();
+ LoopTimer::getInstance().set_fps(60);
+}
+
+void LoopManager::render() {
+ if (gameRunning) {
+ RenderSystem::get_instance().update();
+ }
+}
+
+void LoopManager::update() {
+ LoopTimer & timer = LoopTimer::getInstance();
+ ScriptSystem::get_instance().update();
+}
+
+} // namespace crepe