From 1304b572d759188c8983e017b60ee2ef1555c0a4 Mon Sep 17 00:00:00 2001
From: Sara <sara@saragerretsen.nl>
Date: Thu, 18 Jan 2024 14:02:02 +0100
Subject: [PATCH] feat: fully implemented uncapped framerate

---
 core/src/program.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/core/src/program.c b/core/src/program.c
index 538c960..c5717d9 100644
--- a/core/src/program.c
+++ b/core/src/program.c
@@ -33,6 +33,13 @@ double get_time_s() {
     return tstos(get_time());
 }
 
+static
+void program_tick(const struct ProgramSettings* settings, float delta_time) {
+    settings->on_tick();
+    game_world_update();
+    physics_world_tick();
+}
+
 void program_run(const struct ProgramSettings* settings) {
     LOG_INFO("Starting program...");
     if(settings->target_fps <= 0) {
@@ -73,11 +80,14 @@ void program_run(const struct ProgramSettings* settings) {
         _frame_start = current_time;
 
         program_handle_events();
-        while(_delta_time > _target_delta_time) {
-            _delta_time -= _target_delta_time;
-            settings->on_tick();
-            game_world_update();
-            physics_world_tick();
+        if(settings->target_fps == 0) {
+            program_tick(settings, _delta_time);
+            _delta_time = 0.f;
+        } else {
+            while(_delta_time > _target_delta_time) {
+                _delta_time -= _target_delta_time;
+                program_tick(settings, _target_delta_time);
+            }
         }
         settings->on_draw();
         game_world_draw();