1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-23 22:37:55 +02:00
This commit is contained in:
Opuszek
2025-08-19 09:11:43 +02:00
parent ca0dd9cc73
commit fb172792c1

View File

@@ -253,15 +253,24 @@ BattleHexArray CStack::meleeAttackHexes(const battle::Unit * attacker, const bat
if (!defenderPos.isValid()) if (!defenderPos.isValid())
defenderPos = defender->getPosition(); 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()) for (BattleHex defenderHex : defenderHexes)
res.insert(defenderPos);
if (defender->doubleWide())
{ {
BattleHex otherDefenderPos = defenderPos.toInt() + (defender->unitSide() == BattleSide::ATTACKER ? -1 : 1); if (attackerHexes.contains(defenderHex))
if (std::find(attackableHxs.begin(), attackableHxs.end(), otherDefenderPos) != attackableHxs.end()) {
res.insert(otherDefenderPos); 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; return res;