feat: improved tower place + tower upgrade
This commit is contained in:
@@ -160,6 +160,35 @@ TowerPtr createTower(TowerType type, TowerID id, std::int32_t x, std::int32_t y,
|
||||
return towerFactory.at(type)(id, x, y, builder);
|
||||
}
|
||||
|
||||
std::string getTowerName(TowerType type) {
|
||||
switch (type) {
|
||||
|
||||
case TowerType::Archer:
|
||||
return "Archer";
|
||||
case TowerType::Artillery:
|
||||
return "Artillery";
|
||||
case TowerType::Ice:
|
||||
return "Ice";
|
||||
case TowerType::Mage:
|
||||
return "Mage";
|
||||
case TowerType::Poison:
|
||||
return "Poison";
|
||||
case TowerType::Quake:
|
||||
return "Quake";
|
||||
case TowerType::Sorcerer:
|
||||
return "Sorcerer";
|
||||
case TowerType::Zeus:
|
||||
return "Zeus";
|
||||
case TowerType::Leach:
|
||||
return "Leach";
|
||||
case TowerType::Necromancer:
|
||||
return "Necromancer";
|
||||
case TowerType::Turret:
|
||||
return "Turret";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace TowerFactory
|
||||
|
||||
|
||||
@@ -207,7 +236,7 @@ void MageTower::tick(std::uint64_t delta, World* world) {
|
||||
bool wasTowerActive = false;
|
||||
for (MobPtr mob : world->getMobList()) {
|
||||
if (isMobInRange(mob)) {
|
||||
mob->addEffect(EffectType::Fire, getLevel().getLevel() * 5, this);
|
||||
mob->addEffect(EffectType::Fire, getLevel().getLevel() * 5, this);
|
||||
wasTowerActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,7 +202,7 @@ bool World::CanPlaceLittleTower(const glm::vec2& worldPos, PlayerID playerID) co
|
||||
for (int x = -1; x < 2; x++) {
|
||||
for (int y = -1; y < 2; y++) {
|
||||
game::TilePtr adjacentTile = getTile(worldPos.x + x, worldPos.y + y);
|
||||
if (adjacentTile == nullptr || adjacentTile->getType() != game::TileType::Tower) {
|
||||
if (adjacentTile == nullptr || adjacentTile->getType() != game::TileType::Tower || getTower({worldPos.x + x, worldPos.y + y}) != nullptr) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -214,6 +214,8 @@ bool World::CanPlaceLittleTower(const glm::vec2& worldPos, PlayerID playerID) co
|
||||
}
|
||||
|
||||
bool World::CanPlaceBigTower(const glm::vec2& worldPos, PlayerID playerID) const {
|
||||
if(!CanPlaceLittleTower(worldPos, playerID)) return false;
|
||||
|
||||
TilePtr tile = getTile(worldPos.x, worldPos.y);
|
||||
const Player& player = m_Game->getPlayers()[playerID];
|
||||
|
||||
@@ -228,7 +230,7 @@ bool World::CanPlaceBigTower(const glm::vec2& worldPos, PlayerID playerID) const
|
||||
for (int x = -2; x < 3; x++) {
|
||||
for (int y = -2; y < 3; y++) {
|
||||
game::TilePtr adjacentTile = getTile(worldPos.x + x, worldPos.y + y);
|
||||
if (adjacentTile == nullptr || adjacentTile->getType() != game::TileType::Tower) {
|
||||
if (adjacentTile == nullptr || adjacentTile->getType() != game::TileType::Tower || getTower({worldPos.x + x, worldPos.y + y}) != nullptr) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -257,7 +259,7 @@ void World::cleanDeadMobs() {
|
||||
}
|
||||
}
|
||||
|
||||
TowerPtr World::GetTower(const glm::vec2& position) {
|
||||
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 &&
|
||||
|
||||
Reference in New Issue
Block a user