#include "game/server/ServerGame.h" #include "game/server/Server.h" namespace td { namespace server { ServerGame::ServerGame(server::Server* server) : game::Game(&m_ServerWorld), m_Server(server), m_ServerWorld(server, this) { } void ServerGame::tick(std::uint64_t delta) { Game::tick(delta); m_GoldMineTimer.update(); } void ServerGame::startGame() { balanceTeams(); protocol::WorldBeginDataPacket headerMapData(m_World); m_Server->broadcastPacket(&headerMapData); protocol::WorldDataPacket mapData(m_World); m_Server->broadcastPacket(&mapData); m_GameState = game::GameState::Game; m_ServerWorld.spawnMobs(game::MobType::Zombie, 1, 0, 12); } void ServerGame::updateGoldMines() { for (auto& pair : m_Server->getPlayers()) { game::Player* player = &pair.second; player->setGold(player->getGold() + player->getGoldPerSecond()); protocol::UpdateMoneyPacket packet(player->getGold()); m_Server->getConnexions()[player->getID()].sendPacket(&packet); } } void ServerGame::balanceTeams() { for (auto playerInfo : m_Players) { game::Player& player = playerInfo.second; if (player.getTeamColor() == game::TeamColor::None) { game::Team& redTeam = getRedTeam(); game::Team& blueTeam = getBlueTeam(); if (blueTeam.getPlayerCount() > redTeam.getPlayerCount()) { redTeam.addPlayer(&player); } else { blueTeam.addPlayer(&player); } protocol::UpdatePlayerTeamPacket packet(player.getID(), player.getTeamColor()); m_Server->broadcastPacket(&packet); } } } } // namespace game } // namespace td