#ifndef OGLG_GAMEBOARD_H_ #define OGLG_GAMEBOARD_H_ #include "PlayerMove.h" #include "pc/astuple.h" #include "pc/commcode.h" #include "pc/pctypes.h" #include #include #include #include struct PlayerState { Player id; Team team; bool is_defeated; std::deque orders; PlayerState(); }; class ImportedTerrain; class GameBoard { public: GameBoard(pos_t w, pos_t h, const InitInfo& info); friend ImportedTerrain; bool isTeammate(Player x, Player y) const; Team teamOf(Player x) const; bool isDefeated(Player x) const; std::uint8_t numPlayers() const; std::uint8_t numTeams() const; void appendOrderQueue(const PlayerMove& p); void clearOrderQueue(Player p); void popOrderQueue(Player p); void setOffline(Player p); std::vector getViewOf(Team x) const; GameState tick(); private: const Tile& at(pos_t x, pos_t y) const; Tile& at(pos_t x, pos_t y); void setOwner(pos_t x, pos_t y, Player p); bool attack(const PlayerMove& o); void capitalCaptured(Player target, Player source); void turnUpdate(); void roundUpdate(); void updatedPosition(pos_t x, pos_t y); void offline(Player p); std::vector leaderboard() const; TeamViewDiff teamViewDiff(Team team); std::uint8_t n, t; std::vector players; pos_t w, h, view_radius; std::vector board; std::uint32_t halfturn_id; std::vector>> cover; std::vector> diff_tiles; std::vector new_offline_players; std::set updated_tiles; std::vector new_defeated_players; }; #endif