From d9baf7c5eff9b559a9b550a907b4fbb7a2f0a9d0 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Thu, 1 Jan 2026 22:33:58 +0100 Subject: [PATCH] add basic timer --- include/client/state/GameState.h | 5 +++++ include/td/render/renderer/TimerRenderer.h | 21 +++++++++++++++++++++ src/client/state/GameState.cpp | 1 + src/td/display/state/DebugWorldState.cpp | 2 ++ src/td/render/renderer/TimerRenderer.cpp | 18 ++++++++++++++++++ 5 files changed, 47 insertions(+) create mode 100644 include/td/render/renderer/TimerRenderer.h create mode 100644 src/td/render/renderer/TimerRenderer.cpp diff --git a/include/client/state/GameState.h b/include/client/state/GameState.h index 9467e97..dcb065d 100644 --- a/include/client/state/GameState.h +++ b/include/client/state/GameState.h @@ -12,6 +12,7 @@ class GameState : public ClientState { game::WorldPtr m_World; sim::ClientSimulation m_Simulation; float m_CurrentLerp; + float m_ElapsedTime; public: GameState(Client& a_Client, const game::WorldPtr& a_World, std::uint64_t a_StepTime, const std::vector a_FirstSteps); @@ -23,6 +24,10 @@ class GameState : public ClientState { return m_CurrentLerp; } + float GetElapsedTime() const { + return m_ElapsedTime; + } + game::WorldPtr GetWorld() const { return m_World; } diff --git a/include/td/render/renderer/TimerRenderer.h b/include/td/render/renderer/TimerRenderer.h new file mode 100644 index 0000000..dc65d3c --- /dev/null +++ b/include/td/render/renderer/TimerRenderer.h @@ -0,0 +1,21 @@ +#pragma once + +#include "client/state/GameState.h" +#include +#include + +namespace td { +namespace render { + +class TimerRenderer : public BasicRenderer { + private: + const client::GameState& m_State; + public: + virtual void Render(float a_Lerp) override; + + TimerRenderer(const client::GameState& a_State); + ~TimerRenderer() {} +}; + +} // namespace render +} // namespace td diff --git a/src/client/state/GameState.cpp b/src/client/state/GameState.cpp index e6da5dd..1bdba05 100644 --- a/src/client/state/GameState.cpp +++ b/src/client/state/GameState.cpp @@ -20,6 +20,7 @@ void GameState::Handle(const protocol::packets::LockStepResponsePacket& a_LockSt void GameState::Update(float a_Delta) { m_CurrentLerp = m_Simulation.Update(a_Delta); + m_ElapsedTime += a_Delta; } } // namespace client diff --git a/src/td/display/state/DebugWorldState.cpp b/src/td/display/state/DebugWorldState.cpp index 162ee6f..3e5ee5f 100644 --- a/src/td/display/state/DebugWorldState.cpp +++ b/src/td/display/state/DebugWorldState.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -41,6 +42,7 @@ DebugWorldState::DebugWorldState(Display& a_Display) : DisplayState(a_Display) { m_Renderer.AddRenderer(m_Camera, clientWorld); m_Renderer.AddRenderer(m_Camera, clientWorld); m_Renderer.AddRenderer(m_Camera, clientWorld); + m_Renderer.AddRenderer(*gameState); auto& list = m_Renderer.AddRenderer(m_Client->GetPlayers()); diff --git a/src/td/render/renderer/TimerRenderer.cpp b/src/td/render/renderer/TimerRenderer.cpp new file mode 100644 index 0000000..3132fd7 --- /dev/null +++ b/src/td/render/renderer/TimerRenderer.cpp @@ -0,0 +1,18 @@ +#include +#include + +#include + +namespace td { +namespace render { + +void TimerRenderer::Render(float a_Lerp) { + ImGui::Begin("Timer"); + ImGui::Text("Time : %02d:%02d", static_cast(m_State.GetElapsedTime()) / 60, static_cast(m_State.GetElapsedTime()) % 60); + ImGui::End(); +} + +TimerRenderer::TimerRenderer(const client::GameState& a_State) : m_State(a_State) {} + +} // namespace render +} // namespace td