From fb172792c1146a3f458d93cb36e3e4c13fd4ba13 Mon Sep 17 00:00:00 2001 From: Opuszek Date: Tue, 19 Aug 2025 09:11:43 +0200 Subject: [PATCH] Fixes --- lib/CStack.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/CStack.cpp b/lib/CStack.cpp index a922eac23..038858c07 100644 --- a/lib/CStack.cpp +++ b/lib/CStack.cpp @@ -253,15 +253,24 @@ BattleHexArray CStack::meleeAttackHexes(const battle::Unit * attacker, const bat if (!defenderPos.isValid()) defenderPos = defender->getPosition(); - BattleHexArray attackableHxs = attacker->doubleWide() ? attackerPos.getNeighbouringTilesDoubleWide(attacker->unitSide()) : attackerPos.getNeighbouringTiles(); + BattleHexArray defenderHexes = defender->getHexes(defenderPos); + BattleHexArray attackerHexes = attacker->getHexes(attackerPos); - if (std::find(attackableHxs.begin(), attackableHxs.end(), defenderPos) != attackableHxs.end()) - res.insert(defenderPos); - if (defender->doubleWide()) + for (BattleHex defenderHex : defenderHexes) { - BattleHex otherDefenderPos = defenderPos.toInt() + (defender->unitSide() == BattleSide::ATTACKER ? -1 : 1); - if (std::find(attackableHxs.begin(), attackableHxs.end(), otherDefenderPos) != attackableHxs.end()) - res.insert(otherDefenderPos); + if (attackerHexes.contains(defenderHex)) + { + logGlobal->debug("CStack::meleeAttackHexes: defender and attacker positions overlap"); + return res; + } + } + + const BattleHexArray attackableHxs = attacker->getSurroundingHexes(attackerPos); + + for (BattleHex defenderHex : defenderHexes) + { + if (attackableHxs.contains(defenderHex)) + res.insert(defenderHex); } return res;