From 383a8c07bc95f8949a1502f1deb766e8967f2ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Tue, 7 Oct 2014 20:51:03 +0200 Subject: Map: add neighbours[], moveAssist and associated methods --- core/src/ch/asynk/tankontank/game/Map.java | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 31c4964..8751a87 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -19,10 +19,12 @@ public abstract class Map extends Board { private final GameCtrl ctrl; + private final GridPoint2 neighbours[] = new GridPoint2[6]; private final ArrayList finalPath = new ArrayList(10); private final ArrayList possibleMoves = new ArrayList(40); private final ArrayList possibleTargets = new ArrayList(10); private final HashSet possiblePaths = new HashSet(10); + private final ArrayList moveAssist = new ArrayList(6); protected abstract void setup(); @@ -31,6 +33,8 @@ public abstract class Map extends Board super(factory, cfg, texture); this.ctrl = ctrl; setup(); + for (int i = 0; i < 6; i++) + neighbours[i] = new GridPoint2(-1, -1); } @Override @@ -41,11 +45,26 @@ public abstract class Map extends Board clearCoordinateVector(finalPath); } + public void buildNeighbours(GridPoint2 hex) + { + setNeighbour(hex, Orientation.SOUTH, neighbours[0]); + setNeighbour(hex, Orientation.SOUTH_WEST, neighbours[1]); + setNeighbour(hex, Orientation.NORTH_WEST, neighbours[2]); + setNeighbour(hex, Orientation.NORTH, neighbours[3]); + setNeighbour(hex, Orientation.NORTH_EAST, neighbours[4]); + setNeighbour(hex, Orientation.SOUTH_EAST, neighbours[5]); + } + protected Hex getHex(int col, int row) { return (Hex) getTile(col, row); } + protected Hex getHexSafe(GridPoint2 hex) + { + return (Hex) getTileSafe(hex.x, hex.y); + } + public boolean isInPossibleMoves(GridPoint2 hex) { return possibleMoves.contains(hex); @@ -67,6 +86,12 @@ public abstract class Map extends Board enableOverlayOn(hex, Hex.GREEN, enable); } + public void enableMoveAssist(boolean enable) + { + for(GridPoint2 hex : moveAssist) + enableOverlayOn(hex, Hex.ASSIST, enable); + } + public void enablePossibleTargets(boolean enable) { for(GridPoint2 hex : possibleTargets) @@ -94,6 +119,23 @@ public abstract class Map extends Board } + public void buildAndShowMoveAssist(Pawn pawn, GridPoint2 hex) + { + enableMoveAssist(false); + moveAssist.clear(); + buildNeighbours(hex); + for (int i = 0; i < 6; i++) { + GridPoint2 neighbour = neighbours[i]; + Hex h = getHexSafe(neighbour); + if (h != null) { + Pawn p = h.getTopPawn(); + if ((p != null) && (!pawn.isEnemy(p))) + moveAssist.add(neighbour); + } + } + enableMoveAssist(true); + } + public void buildAndShowPossibleTargets(Pawn pawn, GridPoint2 hex) { enablePossibleTargets(false); -- cgit v1.1-2-g2b99