summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/ch/asynk/tankontank/engine/Board.java50
1 files changed, 32 insertions, 18 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java
index 405b8d7..0b9c39e 100644
--- a/core/src/ch/asynk/tankontank/engine/Board.java
+++ b/core/src/ch/asynk/tankontank/engine/Board.java
@@ -25,11 +25,13 @@ import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation;
public abstract class Board implements Disposable
{
+ private int cols;
+ private int rows;
private final Tile neighbours[] = new Tile[6];
public interface TileBuilder
{
- public Tile getNewTile(float x, float y, int col, int row);
+ public Tile getNewTile(float x, float y, int col, int row, boolean offmap);
}
public interface TileCollection extends Collection<Tile>
@@ -84,6 +86,9 @@ public abstract class Board implements Disposable
protected Board(int cols, int rows)
{
+ // add a frame of OFFMAP Tiles
+ this.cols = (cols + 2);
+ this.rows = (rows + 2);
searchBoard = new SearchBoard(this, cols, rows);
}
@@ -91,17 +96,21 @@ public abstract class Board implements Disposable
{
image = new Image(texture);
this.cfg = cfg;
- this.tiles = new Tile[cfg.cols * cfg.rows];
+ // add a frame of OFFMAP Tiles
+ this.cols = (cfg.cols + 2);
+ this.rows = (cfg.rows + 2);
+ this.tiles = new Tile[this.cols * this.rows];
searchBoard = new SearchBoard(this, cfg.cols, cfg.rows);
int idx = 0;
- boolean evenRow = true;
- float y = cfg.y0 - cfg.dh + cfg.s;
- for (int i = 0; i < cfg.rows; i++) {
- float x = cfg.x0 + cfg.dw;
+ boolean evenRow = false;
+ float y = cfg.y0 - cfg.dh + cfg.s - cfg.h;
+ for (int i = -1; i < (cfg.rows + 1); i++) {
+ float x = cfg.x0 + cfg.dw - cfg.w;
if (!evenRow) x += cfg.dw;
- for ( int j = 0; j < cfg.cols; j ++) {
- this.tiles[idx] = tileBuilder.getNewTile(x, y, (j + ((i + 1) / 2)), i);
+ for ( int j = -1; j < (cfg.cols + 1); j ++) {
+ boolean offmap = ((j < 0) || (i < 0) || (j >= cfg.cols) || (i >= cfg.rows));
+ this.tiles[idx] = tileBuilder.getNewTile(x, y, (j + ((i + 1) / 2)), i, offmap);
idx += 1;
x += cfg.w;
}
@@ -123,7 +132,7 @@ public abstract class Board implements Disposable
public void dispose()
{
image.dispose();
- for (int i = 0; i < (cfg.cols * cfg.rows); i++)
+ for (int i = 0; i < (this.cols * this.rows); i++)
tiles[i].dispose();
tilesToDraw.clear();
for (int i = 0, n = nextAnimations.size(); i < n; i++)
@@ -161,13 +170,22 @@ public abstract class Board implements Disposable
return sides[i];
}
+ public int getTileOffset(int col, int row)
+ {
+ col = (col + 1 - ((row + 1) / 2));
+ row = (row + 1);
+ if ((col < 0) || (row < 0) || (row >= this.rows) || (col >= this.cols))
+ return -1;
+
+ return (col + (row * this.cols));
+ }
+
protected Tile getTile(int col, int row)
{
- int colOffset = ((row + 1) / 2);
- if ((col < colOffset) || (row < 0) || (row >= cfg.rows) || ((col - colOffset) >= cfg.cols))
+ int offset = getTileOffset(col, row);
+ if (offset < 0)
return null;
-
- return tiles[((col - colOffset)) + (row * cfg.cols)];
+ return tiles[offset];
}
public void setAdjacentTiles(Tile tile, Tile tiles[])
@@ -417,7 +435,7 @@ public abstract class Board implements Disposable
if (x < 0.f)
col = -1;
- int colOffset = ((row +1) / 2);
+ int colOffset = ((row + 1) / 2);
// check upper boundaries
float dy = (y - (row * cfg.h));
@@ -442,10 +460,6 @@ public abstract class Board implements Disposable
} else
col += colOffset;
- // validate hex
- if ((col < colOffset) || (row < 0) || (row >= cfg.rows) || ((col - colOffset) >= cfg.cols))
- return null;
-
return getTile(col, row);
}