diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2014-11-05 10:34:21 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2014-11-05 10:34:21 +0100 |
commit | 193a61e3ec86ac2383f4a222194bda6d8c46221b (patch) | |
tree | 937f5491625494df73098b2a2dcc2d66e5ca2b78 /core/src/ch | |
parent | c1b741955570b98003e81ba054cb6c217b9c3d0b (diff) | |
download | RustAndDust-193a61e3ec86ac2383f4a222194bda6d8c46221b.zip RustAndDust-193a61e3ec86ac2383f4a222194bda6d8c46221b.tar.gz |
Board: add Tile getAdjTileAt(Tile, Orientation) and Tile findBestEntry(Pawn, Tile, Orientation)
Diffstat (limited to 'core/src/ch')
-rw-r--r-- | core/src/ch/asynk/tankontank/engine/Board.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java index d4271ef..28e5c6a 100644 --- a/core/src/ch/asynk/tankontank/engine/Board.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -187,6 +187,32 @@ public abstract class Board implements Disposable tiles[5] = getTile((tile.col - 1), (tile.row - 1)); } + public Tile getAdjTileAt(Tile tile, Orientation o) + { + Tile t = null; + switch(o) { + case NORTH: + t = getTile((tile.col + 1), tile.row); + break; + case NORTH_EAST: + t = getTile(tile.col, (tile.row - 1)); + break; + case SOUTH_EAST: + t = getTile((tile.col - 1), (tile.row - 1)); + break; + case SOUTH: + t = getTile((tile.col - 1), tile.row); + break; + case SOUTH_WEST: + t = getTile(tile.col, (tile.row + 1)); + break; + case NORTH_WEST: + t = getTile((tile.col + 1), (tile.row + 1)); + break; + } + return t; + } + protected void addAnimation(Animation a) { nextAnimations.add(a); @@ -318,6 +344,43 @@ public abstract class Board implements Disposable return assists.size(); } + public Tile findBestEntry(Pawn pawn, Tile to, Orientation from) + { + // FIXME board corners + Tile entry = null; + int cost = Integer.MAX_VALUE; + boolean road = false; + + Orientation o = from.opposite().left(); + boolean r = to.road(o); + int c = to.costFrom(pawn, o); + if ((c < cost) || (r && (c == cost))) { + entry = getAdjTileAt(to, o); + cost = c; + road = r; + } + + o = from.opposite(); + r = to.road(o); + c = to.costFrom(pawn, o); + if ((c < cost) || (r && (c == cost))) { + entry = getAdjTileAt(to, o); + cost = c; + road = r; + } + + o = from.opposite().right(); + r = to.road(o); + c = to.costFrom(pawn, o); + if ((c < cost) || (r && (c == cost))) { + entry = getAdjTileAt(to, o); + cost = c; + road = r; + } + + return entry; + } + public void enableOverlayOn(Tile tile, int i, boolean enable) { if(tile.enableOverlay(i, enable)) |