diff --git a/AI/BattleAI/BattleEvaluator.cpp b/AI/BattleAI/BattleEvaluator.cpp index a9f32affd..af2220b7d 100644 --- a/AI/BattleAI/BattleEvaluator.cpp +++ b/AI/BattleAI/BattleEvaluator.cpp @@ -119,50 +119,6 @@ std::vector BattleEvaluator::getBrokenWallMoatHexes() const return result; } -std::vector BattleEvaluator::getCastleHexes() -{ - std::vector result; - - // Loop through all wall parts - - std::vector wallHexes; - wallHexes.push_back(50); - wallHexes.push_back(183); - wallHexes.push_back(182); - wallHexes.push_back(130); - wallHexes.push_back(78); - wallHexes.push_back(29); - wallHexes.push_back(12); - wallHexes.push_back(97); - wallHexes.push_back(45); - wallHexes.push_back(62); - wallHexes.push_back(112); - wallHexes.push_back(147); - wallHexes.push_back(165); - - for (BattleHex wallHex : wallHexes) { - // Get the starting x-coordinate of the wall hex - int startX = wallHex.getX(); - - // Initialize current hex with the wall hex - BattleHex currentHex = wallHex; - while (currentHex.isValid()) { - // Check if the x-coordinate has wrapped (smaller than the starting x) - if (currentHex.getX() < startX) { - break; - } - - // Add the hex to the result - result.push_back(currentHex); - - // Move to the next hex to the right - currentHex = currentHex.cloneInDirection(BattleHex::RIGHT, false); - } - } - - return result; -} - bool BattleEvaluator::hasWorkingTowers() const { bool keepIntact = cb->getBattle(battleID)->battleGetWallState(EWallPart::KEEP) != EWallState::NONE && cb->getBattle(battleID)->battleGetWallState(EWallPart::KEEP) != EWallState::DESTROYED; @@ -221,11 +177,6 @@ BattleAction BattleEvaluator::selectStackAction(const CStack * stack) && !stack->canShoot() && hasWorkingTowers() && !enemyMellee.empty(); - std::vector castleHexes = getCastleHexes(); - for (auto hex : castleHexes) - { - logAi->trace("Castlehex ID: %d Y: %d X: %d", hex, hex.getY(), hex.getX()); - } if(targets->possibleAttacks.empty() && bestSpellcast.has_value()) { @@ -292,10 +243,7 @@ BattleAction BattleEvaluator::selectStackAction(const CStack * stack) return BattleAction::makeDefend(stack); } - bool isTargetOutsideFort = std::none_of(castleHexes.begin(), castleHexes.end(), - [&](const BattleHex& hex) { - return hex == bestAttack.from; - }); + bool isTargetOutsideFort = !hb->battleIsInsideWalls(bestAttack.from); bool siegeDefense = stack->unitSide() == BattleSide::DEFENDER && !bestAttack.attack.shooting && hasWorkingTowers() @@ -424,14 +372,8 @@ BattleAction BattleEvaluator::goTowardsNearest(const CStack * stack, std::vector if (siegeDefense) { vstd::erase_if(avHexes, [&](const BattleHex& hex) { - std::vector castleHexes = getCastleHexes(); - - bool isOutsideWall = std::none_of(castleHexes.begin(), castleHexes.end(), - [&](const BattleHex& checkhex) { - return checkhex == hex; - }); - return isOutsideWall; - }); + return !cb->getBattle(battleID)->battleIsInsideWalls(hex); + }); } if(!avHexes.size() || !hexes.size()) //we are blocked or dest is blocked diff --git a/AI/BattleAI/BattleEvaluator.h b/AI/BattleAI/BattleEvaluator.h index 7385a0809..4c4bb1e5b 100644 --- a/AI/BattleAI/BattleEvaluator.h +++ b/AI/BattleAI/BattleEvaluator.h @@ -53,7 +53,6 @@ public: std::optional findBestCreatureSpell(const CStack * stack); BattleAction goTowardsNearest(const CStack * stack, std::vector hexes, const PotentialTargets & targets); std::vector getBrokenWallMoatHexes() const; - static std::vector getCastleHexes(); bool hasWorkingTowers() const; void evaluateCreatureSpellcast(const CStack * stack, PossibleSpellcast & ps); //for offensive damaging spells only void print(const std::string & text) const; diff --git a/AI/BattleAI/BattleExchangeVariant.cpp b/AI/BattleAI/BattleExchangeVariant.cpp index 357df8f70..c4675afc0 100644 --- a/AI/BattleAI/BattleExchangeVariant.cpp +++ b/AI/BattleAI/BattleExchangeVariant.cpp @@ -218,7 +218,6 @@ EvaluationResult BattleExchangeEvaluator::findBestTarget( bool siegeDefense) { EvaluationResult result(targets.bestAction()); - std::vector castleHexes = BattleEvaluator::getCastleHexes(); if(!activeStack->waited() && !activeStack->acquireState()->hadMorale) { @@ -234,7 +233,7 @@ EvaluationResult BattleExchangeEvaluator::findBestTarget( for(auto & ap : targets.possibleAttacks) { - if (siegeDefense && std::find(castleHexes.begin(), castleHexes.end(), ap.from) == castleHexes.end()) + if (siegeDefense && !hb->battleIsInsideWalls(ap.from)) continue; float score = evaluateExchange(ap, 0, targets, damageCache, hbWaited); @@ -269,7 +268,7 @@ EvaluationResult BattleExchangeEvaluator::findBestTarget( for(auto & ap : targets.possibleAttacks) { - if (siegeDefense && std::find(castleHexes.begin(), castleHexes.end(), ap.from) == castleHexes.end()) + if (siegeDefense && !hb->battleIsInsideWalls(ap.from)) continue; float score = evaluateExchange(ap, 0, targets, damageCache, hb);