GIGA REFACTOR
This commit is contained in:
@@ -5,105 +5,105 @@ namespace td {
|
||||
namespace server {
|
||||
|
||||
ServerGame::ServerGame(server::Server* server) : game::Game(&m_ServerWorld), m_Server(server), m_ServerWorld(server, this),
|
||||
m_GoldMineTimer{ 1000, std::bind(&ServerGame::updateGoldMines, this) },
|
||||
m_MobStatesTimer{ 5000, std::bind(&ServerGame::updateMobStates, this) },
|
||||
m_EndGameCooldown{ 1000 * 10 } {
|
||||
bindListener(this);
|
||||
m_GoldMineTimer{ 1000, std::bind(&ServerGame::UpdateGoldMines, this) },
|
||||
m_MobStatesTimer{ 5000, std::bind(&ServerGame::UpdateMobStates, this) },
|
||||
m_EndGameCooldown{ 1000 * 10 } {
|
||||
BindListener(this);
|
||||
}
|
||||
|
||||
void ServerGame::tick(std::uint64_t delta) {
|
||||
void ServerGame::Tick(std::uint64_t delta) {
|
||||
if (m_GameState == game::GameState::Game) {
|
||||
Game::tick(delta);
|
||||
m_MobStatesTimer.update(delta);
|
||||
updatePlayerStats();
|
||||
Game::Tick(delta);
|
||||
m_MobStatesTimer.Update(delta);
|
||||
UpdatePlayerStats();
|
||||
} else if (m_GameState == game::GameState::EndGame) {
|
||||
if (m_EndGameCooldown.update(delta)) {
|
||||
notifyListeners(&game::GameListener::OnGameClose);
|
||||
if (m_EndGameCooldown.Update(delta)) {
|
||||
NotifyListeners(&game::GameListener::OnGameClose);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ServerGame::startGame() {
|
||||
balanceTeams();
|
||||
void ServerGame::StartGame() {
|
||||
BalanceTeams();
|
||||
|
||||
protocol::WorldBeginDataPacket headerMapData(m_World);
|
||||
m_Server->broadcastPacket(&headerMapData);
|
||||
m_Server->BroadcastPacket(&headerMapData);
|
||||
|
||||
protocol::WorldDataPacket mapData(m_World);
|
||||
m_Server->broadcastPacket(&mapData);
|
||||
m_Server->BroadcastPacket(&mapData);
|
||||
|
||||
m_GameState = game::GameState::Game;
|
||||
}
|
||||
|
||||
void ServerGame::updatePlayerStats() {
|
||||
m_GoldMineTimer.update();
|
||||
void ServerGame::UpdatePlayerStats() {
|
||||
m_GoldMineTimer.Update();
|
||||
}
|
||||
|
||||
void ServerGame::updateGoldMines() {
|
||||
for (auto& pair : m_Server->getPlayers()) {
|
||||
void ServerGame::UpdateGoldMines() {
|
||||
for (auto& pair : m_Server->GetPlayers()) {
|
||||
game::Player* player = &pair.second;
|
||||
player->addGold(player->getGoldPerSecond());
|
||||
player->AddGold(player->GetGoldPerSecond());
|
||||
|
||||
// Update player money and exp every second
|
||||
protocol::UpdateMoneyPacket moneyPacket(player->getGold());
|
||||
m_Server->getConnexions()[player->getID()].sendPacket(&moneyPacket);
|
||||
protocol::UpdateMoneyPacket moneyPacket(player->GetGold());
|
||||
m_Server->GetConnexions()[player->GetID()].SendPacket(&moneyPacket);
|
||||
|
||||
protocol::UpdateExpPacket expPacket(player->getExp());
|
||||
m_Server->getConnexions()[player->getID()].sendPacket(&expPacket);
|
||||
protocol::UpdateExpPacket expPacket(player->GetExp());
|
||||
m_Server->GetConnexions()[player->GetID()].SendPacket(&expPacket);
|
||||
}
|
||||
}
|
||||
|
||||
void ServerGame::updateMobStates() {
|
||||
void ServerGame::UpdateMobStates() {
|
||||
protocol::UpdateMobStatesPacket packet;
|
||||
for (auto mob : m_World->getMobList()) {
|
||||
packet.addMobState({ mob->getMobID(), mob->getCenter(), mob->getHealth(), mob->getDirection() });
|
||||
for (auto mob : m_World->GetMobList()) {
|
||||
packet.addMobState({ mob->GetMobID(), mob->GetCenter(), mob->GetHealth(), mob->GetDirection() });
|
||||
}
|
||||
m_Server->broadcastPacket(&packet);
|
||||
m_Server->BroadcastPacket(&packet);
|
||||
}
|
||||
|
||||
void ServerGame::balanceTeams() {
|
||||
void ServerGame::BalanceTeams() {
|
||||
for (auto& playerInfo : Game::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()) {
|
||||
player.setTeamColor(game::TeamColor::Red);
|
||||
redTeam.addPlayer(&player);
|
||||
if (player.GetTeamColor() == game::TeamColor::None) {
|
||||
game::Team& redTeam = GetRedTeam();
|
||||
game::Team& blueTeam = GetBlueTeam();
|
||||
if (blueTeam.GetPlayerCount() > redTeam.GetPlayerCount()) {
|
||||
player.SetTeamColor(game::TeamColor::Red);
|
||||
redTeam.AddPlayer(&player);
|
||||
} else {
|
||||
player.setTeamColor(game::TeamColor::Blue);
|
||||
blueTeam.addPlayer(&player);
|
||||
player.SetTeamColor(game::TeamColor::Blue);
|
||||
blueTeam.AddPlayer(&player);
|
||||
}
|
||||
protocol::UpdatePlayerTeamPacket packet(player.getID(), player.getTeamColor());
|
||||
m_Server->broadcastPacket(&packet);
|
||||
protocol::UpdatePlayerTeamPacket packet(player.GetID(), player.GetTeamColor());
|
||||
m_Server->BroadcastPacket(&packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ServerGame::OnGameStateUpdate(game::GameState newState) {
|
||||
setGameState(newState);
|
||||
SetGameState(newState);
|
||||
protocol::UpdateGameStatePacket packet(newState);
|
||||
m_Server->broadcastPacket(&packet);
|
||||
m_Server->BroadcastPacket(&packet);
|
||||
}
|
||||
|
||||
void ServerGame::OnGameBegin() {
|
||||
notifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Game);
|
||||
startGame();
|
||||
NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Game);
|
||||
StartGame();
|
||||
}
|
||||
|
||||
void ServerGame::OnGameEnd() {
|
||||
notifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::EndGame);
|
||||
m_EndGameCooldown.applyCooldown();
|
||||
NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::EndGame);
|
||||
m_EndGameCooldown.ApplyCooldown();
|
||||
}
|
||||
|
||||
void ServerGame::OnGameClose() {
|
||||
notifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Closed);
|
||||
NotifyListeners(&game::GameListener::OnGameStateUpdate, game::GameState::Closed);
|
||||
// Disconnect clients
|
||||
protocol::DisconnectPacket packet("Game finished");
|
||||
m_Server->broadcastPacket(&packet);
|
||||
m_Server->BroadcastPacket(&packet);
|
||||
|
||||
// Closing server
|
||||
m_Server->close();
|
||||
m_Server->Close();
|
||||
}
|
||||
|
||||
} // namespace game
|
||||
|
||||
Reference in New Issue
Block a user