#pragma once #include "game/BaseGame.h" #include "misc/Time.h" #include "ServerWorld.h" namespace td { namespace server { class Server; class ServerGame : public game::Game, public game::GameListener { private: Server* m_Server; ServerWorld m_ServerWorld; utils::AutoTimer m_GoldMineTimer; utils::AutoTimer m_MobStatesTimer; utils::CooldownTimer m_EndGameCooldown; public: ServerGame(Server* server); ~ServerGame() {} ServerWorld* GetServerWorld() { return &m_ServerWorld; } virtual void Tick(std::uint64_t delta); void StartGame(); // GameListener virtual void OnGameStateUpdate(game::GameState newState); virtual void OnGameBegin(); virtual void OnGameEnd(); virtual void OnGameClose(); private: void BalanceTeams(); void UpdateMobStates(); void UpdateGoldMines(); void UpdatePlayerStats(); }; } // namespace game } // namespace td