diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2015-10-29 17:40:30 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2015-10-29 17:40:30 +0100 |
commit | f6829e0cf640248ec0de8c47f5224d7580da9bda (patch) | |
tree | e6037338902d342d2ab7a2bcd6fa95b3b70e7117 /core/src/ch | |
parent | b8edcfe686b058796d7e77e96784145efc7112a4 (diff) | |
download | RustAndDust-f6829e0cf640248ec0de8c47f5224d7580da9bda.zip RustAndDust-f6829e0cf640248ec0de8c47f5224d7580da9bda.tar.gz |
SearchBoard: fix possibleTargetsFrom()
Diffstat (limited to 'core/src/ch')
-rw-r--r-- | core/src/ch/asynk/rustanddust/engine/SearchBoard.java | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/core/src/ch/asynk/rustanddust/engine/SearchBoard.java b/core/src/ch/asynk/rustanddust/engine/SearchBoard.java index 6a1e6bb..9d251ac 100644 --- a/core/src/ch/asynk/rustanddust/engine/SearchBoard.java +++ b/core/src/ch/asynk/rustanddust/engine/SearchBoard.java @@ -286,40 +286,34 @@ public class SearchBoard queue.add(from); - boolean first = true; while (queue.size() != 0) { Node src = queue.remove(); if (src.remaining <= 0) continue; - if (!first && (((range - src.remaining) % 2) == 0)) + if (((range - src.remaining) % 2) == 1) adjacentTargets(src, extendedAngle, adjacents); else adjacentTargets(src, angle, adjacents); - first = false; int rangeLeft = src.remaining - 1; for(int i = 0; i < 6; i++) { Node dst = adjacents[i]; - if (dst != null) { - if (dst.search == searchCount) { - if ((rangeLeft > dst.remaining)) - dst.remaining = rangeLeft; - } else { - dst.search = searchCount; - dst.remaining = rangeLeft; - queue.add(dst); - Tile t = getTile(dst); - if (hasClearLineOfSight(from, dst, angle)) { - Iterator<Pawn> it = t.iterator(); - while (it.hasNext()) { - Pawn target = it.next(); - if (shooter.canEngage(target)) - targets.add(target); - } - } + if ((dst == null) || (dst.search == searchCount)) + continue; + + dst.search = searchCount; + dst.remaining = rangeLeft; + queue.add(dst); + Tile t = getTile(dst); + if (!t.isEmpty() && hasClearLineOfSight(from, dst, angle)) { + Iterator<Pawn> it = t.iterator(); + while (it.hasNext()) { + Pawn target = it.next(); + if (shooter.canEngage(target)) + targets.add(target); } } } |