From 34334322f10d0fc1eba71db82de7ca2a6a334f90 Mon Sep 17 00:00:00 2001
From: Alfred Burgess <aburgess@ucc.gu.uwa.edu.au>
Date: Tue, 12 Dec 2023 14:23:04 +0800
Subject: [PATCH] moved update loop to game engine and added an FPS counter

---
 include/game-engine.h |  6 ++++++
 src/game-engine.cpp   | 16 +++++++++++++++-
 src/main.cpp          | 21 +--------------------
 3 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/include/game-engine.h b/include/game-engine.h
index d589229..6291ded 100644
--- a/include/game-engine.h
+++ b/include/game-engine.h
@@ -4,6 +4,10 @@
 #include <map>
 #include <string>
 #include <vector>
+#include <chrono>
+#include <ctime>
+	
+	// Return 
 
 #include "logger.h"
 #include "entity-manager.h"
@@ -29,6 +33,8 @@ class GameEngine
 		bool isRunning;
 		void handleInput();
 	private:
+		size_t _frame = 0;
+		std::time_t _frametime = 0;
 		EntityManager _entityManager;
 		Logger& _logger;
 
diff --git a/src/game-engine.cpp b/src/game-engine.cpp
index 1846be3..1219df9 100644
--- a/src/game-engine.cpp
+++ b/src/game-engine.cpp
@@ -10,7 +10,7 @@ GameEngine::~GameEngine()
 {
 	this->_logger.info( "Cleaning GameEngine Object" );
 }
-void GameEngine::close(){}
+void GameEngine::close(){ this->isRunning = false; }
 void GameEngine::init()
 {
 	this->isRunning = false;
@@ -24,9 +24,23 @@ Scene* GameEngine::currentScene()
 void GameEngine::run()
 {
 	this->isRunning = true;
+	this->_frame = 0;
+	std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
+	std::time_t _frametime = std::chrono::system_clock::to_time_t(now);
+	while( this->isRunning ) { this->update(); }
 }
+
 void GameEngine::update()
 {
 	this->_entityManager.update();
+	std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
+
+	if( ++this->_frame > 10000 ) { this->close(); } 
+	else if ( this->_frame % 1000 == 0 ) {
+		std::time_t cTime = std::chrono::system_clock::to_time_t(now);
+		size_t delTime = cTime - this->_frametime;
+		this->_frametime = cTime;
+		printf( "Frame: %i at %.2f fps\n", this->_frame / 1000, delTime == 0 ? 0.0 : 1.0 / delTime );
+	}
 }
 void GameEngine::handleInput() {  }
diff --git a/src/main.cpp b/src/main.cpp
index 242a827..2e5a429 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -40,26 +40,7 @@ int main( int argc, char* argv[] ) {
 
 
 	GameEngine* game = new GameEngine();
-
-	// Main Loop
-	while( state != Exit )
-	{
-		if( ++tickCount > 1000000 )
-		{
-			// Exit
-			state = Exit;
-		}
-
-		// Update Entities
-		game->update();
-		// Process Input
-		// Movement Updates
-		// Collision Updates
-		// Update Game State
-		// Render Game
-
-		_frame++;
-	}
+	game->run();
 
 	userSettings.set( "exit", "teset" );
 	std::cout << userSettings;
-- 
GitLab