diff --git a/include/game/Towers.h b/include/game/Towers.h index d58b310..97c99ac 100644 --- a/include/game/Towers.h +++ b/include/game/Towers.h @@ -89,13 +89,13 @@ class Tower { private: TowerID m_ID; TowerType m_Type; - std::uint16_t m_X, m_Y; + std::int32_t m_X, m_Y; TowerLevel m_Level{}; PlayerID m_Builder; protected: utils::CooldownTimer m_Timer; public: - Tower(TowerID id, TowerType type, std::uint16_t x, std::uint16_t y, PlayerID builder) : m_ID(id), m_Type(type), m_X(x), m_Y(y), m_Builder(builder), + Tower(TowerID id, TowerType type, std::int32_t x, std::int32_t y, PlayerID builder) : m_ID(id), m_Type(type), m_X(x), m_Y(y), m_Builder(builder), m_Timer(getStats()->getDamageRate() * 1000) { // converting seconds to millis } @@ -112,8 +112,8 @@ public: } std::uint16_t getID() const { return m_ID; } - std::uint16_t getX() const { return m_X; } - std::uint16_t getY() const { return m_Y; } + std::int32_t getX() const { return m_X; } + std::int32_t getY() const { return m_Y; } const TowerLevel& getLevel() const { return m_Level; } const TowerStats* getStats() const { return getTowerStats(m_Type, m_Level); } PlayerID getBuilder() const { return m_Builder; } diff --git a/src/game/World.cpp b/src/game/World.cpp index 5cfbca0..1b56d14 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -262,13 +262,13 @@ void World::cleanDeadMobs() { TowerPtr World::getTower(const glm::vec2& position) const { for (TowerPtr tower : m_Towers) { if (tower->getSize() == TowerSize::Big) { - if (tower->getX() - 2 <= position.x && tower->getX() + 3 >= position.x && - tower->getY() - 2 <= position.y && tower->getY() + 3 >= position.y) { + if (tower->getX() - 2 <= static_cast(position.x) && tower->getX() + 2 >= static_cast(position.x) && + tower->getY() - 2 <= static_cast(position.y) && tower->getY() + 2 >= static_cast(position.y)) { return tower; } } else { - if (tower->getX() - 1 <= position.x && tower->getX() + 2 >= position.x && - tower->getY() - 1 <= position.y && tower->getY() + 2 >= position.y) { + if (tower->getX() - 1 <= static_cast(position.x) && tower->getX() + 1 >= static_cast(position.x) && + tower->getY() - 1 <= static_cast(position.y) && tower->getY() + 1 >= static_cast(position.y)) { return tower; } } diff --git a/src/game/server/ServerConnexion.cpp b/src/game/server/ServerConnexion.cpp index 96382ee..78bb687 100644 --- a/src/game/server/ServerConnexion.cpp +++ b/src/game/server/ServerConnexion.cpp @@ -150,13 +150,12 @@ void ServerConnexion::HandlePacket(const protocol::PlaceTowerPacket* packet) { const game::TowerInfo& towerInfo = game::getTowerInfo(towerType); server::ServerWorld* world = m_Server->getGame().getServerWorld(); - if (towerInfo.isBigTower()) { + if (!world->CanPlaceLittleTower({ packet->getTowerX(), packet->getTowerY() }, m_ID)) + return; + + if (towerInfo.isBigTower()) if (!world->CanPlaceBigTower({ packet->getTowerX(), packet->getTowerY() }, m_ID)) return; - } else { - if (!world->CanPlaceLittleTower({ packet->getTowerX(), packet->getTowerY() }, m_ID)) - return; - } game::TowerPtr tower = world->placeTowerAt(towerType, packet->getTowerX(), packet->getTowerY(), m_ID);