feat: fast forward

This commit is contained in:
2025-07-30 17:52:54 +02:00
parent 56a43d7a60
commit 2e556e0d45
12 changed files with 164 additions and 31 deletions

View File

@@ -20,8 +20,8 @@ class World {
TilePalette m_TilePalette;
sim::WorldSnapshot m_CurrentState;
sim::WorldSnapshot m_NextState;
std::shared_ptr<sim::WorldSnapshot> m_CurrentState;
std::shared_ptr<sim::WorldSnapshot> m_NextState;
private:
sim::WorldTicker m_Ticker;
@@ -82,52 +82,55 @@ class World {
}
const MobList& GetMobList() const {
return m_CurrentState.m_Mobs;
return m_CurrentState->m_Mobs;
}
MobList& GetMobList() {
return m_CurrentState.m_Mobs;
return m_CurrentState->m_Mobs;
}
const Color* GetTileColor(const TilePtr& tile) const;
Team& GetRedTeam() {
return m_CurrentState.m_Teams[static_cast<std::uint8_t>(TeamColor::Red)];
return m_CurrentState->m_Teams[TeamColor::Red];
}
const Team& GetRedTeam() const {
return m_CurrentState.m_Teams[static_cast<std::uint8_t>(TeamColor::Red)];
return m_CurrentState->m_Teams[TeamColor::Red];
}
Team& GetBlueTeam() {
return m_CurrentState.m_Teams[static_cast<std::uint8_t>(TeamColor::Blue)];
return m_CurrentState->m_Teams[TeamColor::Blue];
}
const Team& GetBlueTeam() const {
return m_CurrentState.m_Teams[static_cast<std::uint8_t>(TeamColor::Red)];
return m_CurrentState->m_Teams[TeamColor::Red];
}
Team& GetTeam(TeamColor team) {
return m_CurrentState.m_Teams[static_cast<std::uint8_t>(team)];
return m_CurrentState->m_Teams[team];
}
const Team& GetTeam(TeamColor team) const {
return m_CurrentState.m_Teams[static_cast<std::uint8_t>(team)];
return m_CurrentState->m_Teams[team];
}
const TeamList& GetTeams() const {
return m_CurrentState.m_Teams;
return m_CurrentState->m_Teams;
}
const TowerList& GetTowers() const {
return m_CurrentState.m_Towers;
return m_CurrentState->m_Towers;
}
TowerPtr GetTowerById(TowerID tower);
const Player* GetPlayerById(PlayerID id) const;
void Tick(const protocol::LockStep& a_LockStep, FpFloat a_Delta);
const std::shared_ptr<sim::WorldSnapshot>& Tick(const protocol::LockStep& a_LockStep, FpFloat a_Delta);
void ResetSnapshots(std::shared_ptr<sim::WorldSnapshot>& a_Current, std::shared_ptr<sim::WorldSnapshot>& a_Next);
private:
void TickMobs(std::uint64_t delta);
void CleanDeadMobs();
};