57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
#include "game/server/ServerWorld.h"
|
|
#include "game/server/Server.h"
|
|
#include "misc/Random.h"
|
|
|
|
#define MOB_SPAWN_PRECISION 100.0f
|
|
|
|
namespace td {
|
|
namespace server {
|
|
|
|
ServerWorld::ServerWorld(Server* server, ServerGame* game) : game::World(game), m_CurrentMobID(0), m_Server(server) {
|
|
|
|
}
|
|
|
|
void ServerWorld::spawnMobs(game::MobType type, std::uint8_t level, game::PlayerID sender, std::uint8_t count) {
|
|
for (int i = 0; i < count; i++) {
|
|
game::TeamColor senderTeam = m_Game->getPlayers().at(sender).getTeamColor();
|
|
game::Spawn* enemyMobSpawn;
|
|
|
|
if (senderTeam == game::TeamColor::Red) {
|
|
enemyMobSpawn = &getTeam(game::TeamColor::Blue).getSpawn();
|
|
} else {
|
|
enemyMobSpawn = &getTeam(game::TeamColor::Red).getSpawn();
|
|
}
|
|
|
|
std::int32_t spawnCenterX = enemyMobSpawn->x;
|
|
std::int32_t spawnCenterY = enemyMobSpawn->y;
|
|
|
|
std::int32_t minSpawnY = spawnCenterY - 2;
|
|
std::int32_t maxSpawnY = spawnCenterY + 2;
|
|
|
|
std::int32_t minSpawnX = spawnCenterX - 2;
|
|
std::int32_t maxSpawnX = spawnCenterX + 2;
|
|
|
|
std::uint64_t randomX = utils::getRandomNumber(std::abs(minSpawnX - maxSpawnX) * MOB_SPAWN_PRECISION);
|
|
float mobX = (float)randomX / MOB_SPAWN_PRECISION + (float)minSpawnX;
|
|
|
|
std::uint64_t randomY = utils::getRandomNumber(std::abs(minSpawnY - maxSpawnY) * MOB_SPAWN_PRECISION);
|
|
float mobY = (float)randomY / MOB_SPAWN_PRECISION + (float)minSpawnY;
|
|
|
|
spawnMobAt(m_CurrentMobID, type, level, sender, mobX, mobY, enemyMobSpawn->direction);
|
|
|
|
protocol::SpawnMobPacket packet(m_CurrentMobID, type, level, sender, mobX, mobY, enemyMobSpawn->direction);
|
|
m_Server->broadcastPacket(&packet);
|
|
|
|
m_CurrentMobID++;
|
|
}
|
|
}
|
|
|
|
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
|