Files
Tower-Defense2/src/td/simulation/RealTimeSimulation.cpp
2025-07-18 18:56:49 +02:00

41 lines
1018 B
C++

#include <td/simulation/RealTimeSimulation.h>
#include <chrono>
namespace td {
namespace sim {
std::uint64_t GetTime() {
return static_cast<std::uint64_t>(
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock().now().time_since_epoch()).count());
}
RealTimeSimulation::RealTimeSimulation(game::World& a_World, GameHistory&& a_History, std::uint64_t a_StepTime) :
m_StepTime(a_StepTime),
m_World(a_World),
m_History(std::move(a_History)),
m_CurrentTime(0),
m_LastTime(GetTime()),
m_CurrentStep(0) {
Step();
}
float RealTimeSimulation::Update() {
// TODO: handle freezes (m_CurrentTime > 2 * m_StepTime)
m_CurrentTime += GetTime() - m_LastTime;
m_LastTime = GetTime();
if (m_CurrentTime > m_StepTime) {
Step();
m_CurrentTime -= m_StepTime;
}
return (float) m_CurrentTime / (float) m_StepTime;
}
void RealTimeSimulation::Step() {
m_World.Tick(m_History[m_CurrentStep], FpFloat(m_StepTime) / FpFloat(1000));
m_CurrentStep++;
}
} // namespace sim
} // namespace td