Files
Tower-Defense/src/game/server/ServerGame.cpp
2021-09-19 17:33:16 +02:00

58 lines
1.7 KiB
C++

#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