feat: add basic towers rendering

This commit is contained in:
2021-09-26 18:19:00 +02:00
parent 2ece5bc9b5
commit fe7cfdec72
22 changed files with 230 additions and 58 deletions

View File

@@ -146,7 +146,7 @@ void ServerConnexion::initConnection() {
void ServerConnexion::HandlePacket(protocol::PlaceTowerPacket* packet) {
game::TowerType towerType = packet->getTowerType();
const game::TowerInfo& towerInfo = game::getTowerInfo(towerType);
game::World* world = m_Server->getGame().getWorld();
server::ServerWorld* world = m_Server->getGame().getServerWorld();
if (towerInfo.isBigTower()) {
if (!world->CanPlaceBigTower({ packet->getTowerX(), packet->getTowerY() }, m_ID))
return;
@@ -155,9 +155,9 @@ void ServerConnexion::HandlePacket(protocol::PlaceTowerPacket* packet) {
return;
}
world->placeTowerAt(towerType, packet->getTowerX(), packet->getTowerY(), m_ID);
game::TowerPtr tower = world->placeTowerAt(towerType, packet->getTowerX(), packet->getTowerY(), m_ID);
protocol::WorldAddTowerPacket addTowerPacket(packet->getTowerX(), packet->getTowerY(), packet->getTowerType(), m_ID);
protocol::WorldAddTowerPacket addTowerPacket(tower->getID(), packet->getTowerX(), packet->getTowerY(), packet->getTowerType(), m_ID);
m_Server->broadcastPacket(&addTowerPacket);
}

View File

@@ -37,14 +37,16 @@ void ServerGame::updateGoldMines() {
}
void ServerGame::balanceTeams() {
for (auto playerInfo : m_Players) {
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);
} else {
player.setTeamColor(game::TeamColor::Blue);
blueTeam.addPlayer(&player);
}
protocol::UpdatePlayerTeamPacket packet(player.getID(), player.getTeamColor());

View File

@@ -46,5 +46,11 @@ void ServerWorld::spawnMobs(game::MobType type, std::uint8_t level, game::Player
}
}
game::TowerPtr ServerWorld::placeTowerAt(game::TowerType type, std::int32_t x, std::int32_t y, game::PlayerID builder){
game::TowerPtr tower = World::placeTowerAt(m_CurrentTowerID, type, x, y, builder);
m_CurrentTowerID++;
return tower;
}
} // namespace server
} // namespace td