From df7569c614fcea80e6a25dd0749a75d5ba00a68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Fri, 30 Oct 2015 14:02:44 +0100 Subject: SearchBoard: add fixLineOfSight, unset losBlocked and return true if dst reached --- core/src/ch/asynk/rustanddust/engine/SearchBoard.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/core/src/ch/asynk/rustanddust/engine/SearchBoard.java b/core/src/ch/asynk/rustanddust/engine/SearchBoard.java index 9d251ac..59e3b2e 100644 --- a/core/src/ch/asynk/rustanddust/engine/SearchBoard.java +++ b/core/src/ch/asynk/rustanddust/engine/SearchBoard.java @@ -388,6 +388,19 @@ public class SearchBoard return (o.isInSides(angle) || o2.isInSides(angle)); } + private boolean fixLineOfSight(boolean ret, int x1, int y1) + { + if (ret) return true; + if (!losBlocked) return false; + + Node last = los.get(los.size() - 1); + if ((last.col == x1) && (last.row == y1)) { + losBlocked = false; + return true; + } + return false; + } + private boolean lineOfSight(int x0, int y0, int x1, int y1, boolean clearVisibility) { los.clear(); @@ -418,9 +431,9 @@ public class SearchBoard } if (dx == 0) - return verticalLineOfSight(x0, y0, x1, y1, clearVisibility); + return fixLineOfSight(verticalLineOfSight(x0, y0, x1, y1, clearVisibility), x1, y1); if (dx == (3 * dy)) - return diagonalLineOfSight(x0, y0, x1, y1, clearVisibility); + return fixLineOfSight(diagonalLineOfSight(x0, y0, x1, y1, clearVisibility), x1, y1); int dx3 = 3 * dx; int dy3 = 3 * dy; @@ -458,7 +471,7 @@ public class SearchBoard } los.add(getNode(x, y)); if (!losBlocked) losBlocked = board.getTile(x, y).blockLineOfSightFrom(from); - if(losBlocked && clearVisibility) return false; + if(losBlocked && clearVisibility) return fixLineOfSight(false, x1, y1); } return true; -- cgit v1.1-2-g2b99