#pragma once
#include
#include |
namespace td {
namespace game {
class World;
}
namespace sim {
class IWorldSystem {
public:
virtual void Tick(const game::World& a_World, WorldSnapshot& a_State, FpFloat a_Delta) = 0;
};
class WorldTicker {
private:
std::vector> m_Systems;
public:
WorldTicker();
WorldSnapshot NextStep(
const game::World& a_World, WorldSnapshot& a_PreviousState, const protocol::LockStep& a_LockStep, FpFloat a_Delta);
private:
void ApplySteps(const game::World& a_World, WorldSnapshot& a_State, const protocol::LockStep& a_LockStep);
void Tick(const game::World& a_World, WorldSnapshot& a_State, FpFloat a_Delta);
WorldSnapshot CreateNext(WorldSnapshot& a_PreviousState);
template
void AddSystem() {
m_Systems.push_back(std::move(std::make_unique()));
}
};
} // namespace sim
} // namespace td
|