serversimulation

This commit is contained in:
2025-08-04 12:47:27 +02:00
parent df79a35eae
commit 9c5ad07747
2 changed files with 51 additions and 2 deletions

View File

@@ -0,0 +1,36 @@
#include <td/simulation/ServerSimulation.h>
namespace td {
namespace sim {
ServerSimulation::ServerSimulation(game::World& a_World, std::uint64_t a_StepTime) :
m_World(a_World), m_StepTime(a_StepTime), m_CurrentTime(0) {}
protocol::packets::LockStepsPacket ServerSimulation::Update() {
std::lock_guard<std::mutex> lock(m_Mutex);
m_World.Tick(m_History[m_CurrentTime], FpFloat(m_StepTime) / FpFloat(1000));
m_CurrentTime++;
std::array<protocol::LockStep, LOCKSTEP_BUFFER_SIZE> nextSteps;
std::copy(m_History.begin() + m_CurrentTime, m_History.begin() + m_CurrentTime + nextSteps.size(), nextSteps.begin());
return {m_CurrentTime, std::move(nextSteps)};
}
template<typename T>
void AddToCommandHistory(protocol::LockStep& a_LockStep, const T& a_Cmd) {
a_LockStep.push_back({std::make_shared<T>(a_Cmd)});
}
void ServerSimulation::Handle(const protocol::commands::SpawnTroopCommand& a_SpawnTroop) {
std::lock_guard<std::mutex> lock(m_Mutex);
AddToCommandHistory(m_History[m_CurrentTime + LOCKSTEP_BUFFER_SIZE], a_SpawnTroop);
}
void ServerSimulation::Handle(const protocol::commands::PlaceTowerCommand& a_PlaceTower) {
std::lock_guard<std::mutex> lock(m_Mutex);
AddToCommandHistory(m_History[m_CurrentTime + LOCKSTEP_BUFFER_SIZE], a_PlaceTower);
}
} // namespace sim
} // namespace td