Procházet zdrojové kódy

Add a really basic delta time calculator

Daniele Bartolini před 12 roky
rodič
revize
70182b9057
6 změnil soubory, kde provedl 53 přidání a 13 odebrání
  1. 1 1
      game/Game.h
  2. 5 5
      samples/terrain/terrain.cpp
  3. 27 1
      src/Device.cpp
  4. 14 0
      src/Device.h
  5. 5 5
      src/FPSSystem.cpp
  6. 1 1
      src/FPSSystem.h

+ 1 - 1
game/Game.h

@@ -37,7 +37,7 @@ public:
 
 	virtual void	init() = 0;
 	virtual void	shutdown() = 0;
-	virtual void	update() = 0;
+	virtual void	update(float dt) = 0;
 };
 
 typedef Game* create_game_t();

+ 5 - 5
samples/terrain/terrain.cpp

@@ -123,7 +123,7 @@ public:
 		// Add a movable camera
 		cam = new Camera(start, 90.0f, 1.6f);
 
-		system = new FPSSystem(cam, 0.1, 2.5);
+		system = new FPSSystem(cam, 10.0f, 2.5f);
 
 		// Add a skybox
 		skybox = new Skybox(Vec3::ZERO, true);
@@ -149,12 +149,12 @@ public:
 		terrain.UpdateVertexBuffer(true);
 	}
 
-	void render()
+	void render(float dt)
 	{
 		Renderer* renderer = device()->renderer();
 		
 		system->set_view_by_cursor();
-		system->update();
+		system->update(dt);
 
 		renderer->set_lighting(false);
 		renderer->set_texturing(0, false);
@@ -242,9 +242,9 @@ public:
 	{
 	}
 
-	void update()
+	void update(float dt)
 	{
-		m_scene.render();
+		m_scene.render(dt);
 	}
 
 private:

+ 27 - 1
src/Device.cpp

@@ -64,6 +64,12 @@ Device::Device() :
 	m_is_init(false),
 	m_is_running(false),
 
+	m_frame_count(0),
+
+	m_last_time(0),
+	m_current_time(0),
+	m_last_delta_time(0.0f),
+
 	m_filesystem(NULL),
 	m_resource_manager(NULL),
 	m_input_manager(NULL),
@@ -240,6 +246,8 @@ void Device::start()
 	}
 
 	m_is_running = true;
+
+	m_last_time = os::milliseconds();
 }
 
 //-----------------------------------------------------------------------------
@@ -260,18 +268,36 @@ bool Device::is_running() const
 	return m_is_running;
 }
 
+//-----------------------------------------------------------------------------
+uint64_t Device::frame_count() const
+{
+	return m_frame_count;
+}
+
+//-----------------------------------------------------------------------------
+float Device::last_delta_time() const
+{
+	return m_last_delta_time;
+}
+
 //-----------------------------------------------------------------------------
 void Device::frame()
 {
+	m_current_time = os::milliseconds();
+	m_last_delta_time = (m_current_time - m_last_time) / 1000.0f;
+	m_last_time = m_current_time;
+
 	m_input_manager->event_loop();
 
 	m_renderer->begin_frame();
 
-	m_game->update();
+	m_game->update(last_delta_time());
 
 	m_debug_renderer->draw_all();
 
 	m_renderer->end_frame();
+
+	m_frame_count++;
 }
 
 //-----------------------------------------------------------------------------

+ 14 - 0
src/Device.h

@@ -65,6 +65,14 @@ public:
 	/// Returns whether the engine is correctly initialized
 	bool					is_init() const;
 
+	/// Return the number of frames rendered from the first
+	/// call to Device::start()
+	uint64_t				frame_count() const;
+
+	/// Returns the time in milliseconds needed to render
+	/// the last frame
+	float					last_delta_time() const;
+
 	/// Forces the engine to actually start doing work.
 	void					start();
 
@@ -107,6 +115,12 @@ private:
 	bool					m_is_init		: 1;
 	bool					m_is_running	: 1;
 
+	uint64_t				m_frame_count;
+
+	uint64_t				m_last_time;
+	uint64_t				m_current_time;
+	float					m_last_delta_time;
+
 	// Public subsystems
 	Filesystem*				m_filesystem;
 	ResourceManager*		m_resource_manager;

+ 5 - 5
src/FPSSystem.cpp

@@ -147,26 +147,26 @@ Camera* FPSSystem::camera()
 }
 
 //-----------------------------------------------------------------------
-void FPSSystem::update()
+void FPSSystem::update(float dt)
 {
 	if (m_up_pressed)
 	{
-		m_camera->move_forward(m_camera_speed);
+		m_camera->move_forward(m_camera_speed * dt);
 	}
 
 	if (m_left_pressed)
 	{
-		m_camera->strafe_left(m_camera_speed);
+		m_camera->strafe_left(m_camera_speed * dt);
 	}		
 
 	if (m_down_pressed)
 	{
-		m_camera->move_backward(m_camera_speed);
+		m_camera->move_backward(m_camera_speed * dt);
 	}
 
 	if (m_right_pressed)
 	{
-		m_camera->strafe_right(m_camera_speed);
+		m_camera->strafe_right(m_camera_speed * dt);
 	}
 
 	device()->renderer()->set_matrix(MT_VIEW, m_camera->view_matrix());

+ 1 - 1
src/FPSSystem.h

@@ -47,7 +47,7 @@ public:
 	void 			set_camera(Camera* camera);
 	Camera*			camera();
 
-	void			update();
+	void			update(float dt);
 	void			set_view_by_cursor();	
 
 	virtual void 	key_pressed(const KeyboardEvent& event);