Opuszek 2 luni în urmă
părinte
comite
fb172792c1
1 a modificat fișierele cu 16 adăugiri și 7 ștergeri
  1. 16 7
      lib/CStack.cpp

+ 16 - 7
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;