From cf9633c061acd7271a85c742ce188846ce4b6311 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Fri, 3 Dec 2021 18:47:55 +0100 Subject: [PATCH] fix: mob spawning repartition --- src/game/server/ServerWorld.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/game/server/ServerWorld.cpp b/src/game/server/ServerWorld.cpp index 96a0cae..70fe3ed 100644 --- a/src/game/server/ServerWorld.cpp +++ b/src/game/server/ServerWorld.cpp @@ -22,14 +22,20 @@ void ServerWorld::spawnMobs(game::MobType type, std::uint8_t level, game::Player enemyMobSpawn = &getTeam(game::TeamColor::Red).getSpawn(); } - std::int32_t spawnCenterX = enemyMobSpawn->getCenterX(); - std::int32_t spawnCenterY = enemyMobSpawn->getCenterY(); + float spawnWidth = enemyMobSpawn->getWidth(); + float spawnHeight = enemyMobSpawn->getHeight(); - std::int32_t minSpawnY = spawnCenterY - 2; - std::int32_t maxSpawnY = spawnCenterY + 2; + float spawnCenterX = enemyMobSpawn->getCenterX(); + float spawnCenterY = enemyMobSpawn->getCenterY(); - std::int32_t minSpawnX = spawnCenterX - 2; - std::int32_t maxSpawnX = spawnCenterX + 2; + auto mobStats = getMobStats(type, level); + auto mobSize = mobStats->getSize(); + + float minSpawnX = spawnCenterX - spawnWidth / 2.0f + mobSize.x / 2.0f; + float maxSpawnX = spawnCenterX + spawnWidth / 2.0f - mobSize.x / 2.0f; + + float minSpawnY = spawnCenterY - spawnHeight / 2.0f + mobSize.y / 2.0f; + float maxSpawnY = spawnCenterY + spawnHeight / 2.0f - mobSize.y / 2.0f; float mobX = utils::getRandomReal(minSpawnX, maxSpawnX); float mobY = utils::getRandomReal(minSpawnY, maxSpawnY);