From f7b4866811c63ae24c366d9452e53d24e504336f Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 19:47:59 +0100
Subject: fps fix + regression test

---
 src/crepe/manager/LoopTimerManager.cpp |  3 +--
 src/crepe/manager/LoopTimerManager.h   |  6 +++---
 src/test/LoopTimerTest.cpp             | 16 ++++++++++++++++
 3 files changed, 20 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/crepe/manager/LoopTimerManager.cpp b/src/crepe/manager/LoopTimerManager.cpp
index 9819632..9d24c2b 100644
--- a/src/crepe/manager/LoopTimerManager.cpp
+++ b/src/crepe/manager/LoopTimerManager.cpp
@@ -1,6 +1,5 @@
 #include <chrono>
 #include <thread>
-
 #include "../util/Log.h"
 
 #include "LoopTimerManager.h"
@@ -31,7 +30,7 @@ void LoopTimerManager::update() {
 		this->delta_time = this->maximum_delta_time;
 	}
 	if (this->delta_time > 0s) {
-		this->actual_fps = 1.0 / duration_cast<seconds>(this->delta_time).count();
+		this->actual_fps = static_cast<unsigned>(1.0 / this->delta_time.count());
 	} else {
 		this->actual_fps = 0;
 	}
diff --git a/src/crepe/manager/LoopTimerManager.h b/src/crepe/manager/LoopTimerManager.h
index 91403e4..c943d41 100644
--- a/src/crepe/manager/LoopTimerManager.h
+++ b/src/crepe/manager/LoopTimerManager.h
@@ -6,7 +6,7 @@
 
 namespace crepe {
 
-typedef std::chrono::duration<double> duration_t;
+typedef std::chrono::duration<float> duration_t;
 typedef std::chrono::duration<unsigned long long, std::micro> elapsed_time_t;
 
 /**
@@ -149,9 +149,9 @@ private:
 
 private:
 	//! Target frames per second.
-	unsigned target_fps = 60;
+	unsigned int target_fps = 60;
 	//! Actual frames per second.
-	unsigned actual_fps = 0;
+	unsigned int actual_fps = 0;
 	//! Time scale for speeding up or slowing down the game (0 = pause, < 1 = slow down, 1 = normal speed, > 1 = speed up).
 	float time_scale = 1;
 	//! Maximum delta time in seconds to avoid large jumps.
diff --git a/src/test/LoopTimerTest.cpp b/src/test/LoopTimerTest.cpp
index 5e1eccf..c468567 100644
--- a/src/test/LoopTimerTest.cpp
+++ b/src/test/LoopTimerTest.cpp
@@ -76,3 +76,19 @@ TEST_F(LoopTimerTest, getCurrentTime) {
 
 	ASSERT_NEAR(loop_timer.get_elapsed_time().count(), elapsed_time, 5);
 }
+TEST_F(LoopTimerTest, getFPS) {
+	// Set the target FPS to 60 (which gives a target time per frame of ~16.67 ms)
+	loop_timer.set_target_framerate(60);
+
+	auto start_time = steady_clock::now();
+	loop_timer.enforce_frame_rate();
+
+	auto elapsed_time = steady_clock::now() - start_time;
+	loop_timer.update();
+	unsigned int fps = loop_timer.get_fps();
+	auto elapsed_ms = duration_cast<milliseconds>(elapsed_time).count();
+
+	// For 60 FPS, the target frame time is around 16.67ms
+	ASSERT_NEAR(elapsed_ms, 16.7, 1);
+	ASSERT_NEAR(fps, 60, 2);
+}
-- 
cgit v1.2.3


From 15c25ba41d0e128c61b38c1751bf5eb36b5a040c Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 19:51:10 +0100
Subject: made return unsigned int

---
 src/crepe/manager/LoopTimerManager.cpp | 2 +-
 src/crepe/manager/LoopTimerManager.h   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/crepe/manager/LoopTimerManager.cpp b/src/crepe/manager/LoopTimerManager.cpp
index 9d24c2b..57956f2 100644
--- a/src/crepe/manager/LoopTimerManager.cpp
+++ b/src/crepe/manager/LoopTimerManager.cpp
@@ -1,6 +1,6 @@
+#include "../util/Log.h"
 #include <chrono>
 #include <thread>
-#include "../util/Log.h"
 
 #include "LoopTimerManager.h"
 
diff --git a/src/crepe/manager/LoopTimerManager.h b/src/crepe/manager/LoopTimerManager.h
index c943d41..76b02d3 100644
--- a/src/crepe/manager/LoopTimerManager.h
+++ b/src/crepe/manager/LoopTimerManager.h
@@ -55,7 +55,7 @@ public:
 	 *
 	 * \return Current FPS.
 	 */
-	unsigned get_fps() const;
+	unsigned int get_fps() const;
 
 	/**
 	 * \brief Get the current time scale.
-- 
cgit v1.2.3


From 66b0a4e535759df5381972c15b1babcf0fb30154 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Thu, 12 Dec 2024 19:59:58 +0100
Subject: include fix

---
 src/crepe/manager/LoopTimerManager.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/crepe/manager/LoopTimerManager.cpp b/src/crepe/manager/LoopTimerManager.cpp
index 57956f2..a6e4788 100644
--- a/src/crepe/manager/LoopTimerManager.cpp
+++ b/src/crepe/manager/LoopTimerManager.cpp
@@ -1,7 +1,8 @@
-#include "../util/Log.h"
 #include <chrono>
 #include <thread>
 
+#include "../util/Log.h"
+
 #include "LoopTimerManager.h"
 
 using namespace crepe;
-- 
cgit v1.2.3


From ca4c004d473ad5ed02abd4a7beff3a5a65c83487 Mon Sep 17 00:00:00 2001
From: WBoerenkamps <wrj.boerenkamps@student.avans.nl>
Date: Fri, 13 Dec 2024 16:31:13 +0100
Subject: made test less strict

---
 src/test/LoopTimerTest.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/test/LoopTimerTest.cpp b/src/test/LoopTimerTest.cpp
index 6391076..7bd6305 100644
--- a/src/test/LoopTimerTest.cpp
+++ b/src/test/LoopTimerTest.cpp
@@ -30,7 +30,7 @@ TEST_F(LoopTimerTest, EnforcesTargetFrameRate) {
 	auto elapsed_ms = duration_cast<milliseconds>(elapsed_time).count();
 
 	// For 60 FPS, the target frame time is around 16.67ms
-	ASSERT_NEAR(elapsed_ms, 16.7, 1);
+	ASSERT_NEAR(elapsed_ms, 16.7, 5);
 }
 
 TEST_F(LoopTimerTest, SetTargetFps) {
-- 
cgit v1.2.3