|
|
@@ -1161,7 +1161,7 @@ ReachabilityInfo CBattleInfoCallback::makeBFS(const AccessibilityInfo &accessibi
|
|
|
if(!params.startPosition.isValid()) //if got call for arrow turrets
|
|
|
return ret;
|
|
|
|
|
|
- const std::set<BattleHex> quicksands = getStoppers(params.perspective);
|
|
|
+ const std::set<BattleHex> obstacles = getStoppers(params.perspective);
|
|
|
|
|
|
std::queue<BattleHex> hexq; //bfs queue
|
|
|
|
|
|
@@ -1177,11 +1177,19 @@ ReachabilityInfo CBattleInfoCallback::makeBFS(const AccessibilityInfo &accessibi
|
|
|
{
|
|
|
const BattleHex curHex = hexq.front();
|
|
|
hexq.pop();
|
|
|
-
|
|
|
- //walking stack can't step past the quicksands
|
|
|
- //TODO what if second hex of two-hex creature enters quicksand
|
|
|
- if(curHex != params.startPosition && vstd::contains(quicksands, curHex))
|
|
|
- continue;
|
|
|
+
|
|
|
+ //walking stack can't step past the obstacles
|
|
|
+ //TODO what if second hex of two-hex creature enters obstacles
|
|
|
+ if(curHex != params.startPosition && vstd::contains(obstacles, curHex))
|
|
|
+ {
|
|
|
+ if(curHex == ESiegeHex::GATE_BRIDGE)
|
|
|
+ {
|
|
|
+ if(battleGetGateState() != EGateState::DESTROYED && params.side == BattleSide::ATTACKER)
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
const int costToNeighbour = ret.distances[curHex.hex] + 1;
|
|
|
for(BattleHex neighbour : BattleHex::neighbouringTilesCache[curHex.hex])
|