diff options
Diffstat (limited to 'core/src/ch/asynk')
-rw-r--r-- | core/src/ch/asynk/tankontank/engine/Board.java | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Board.java b/core/src/ch/asynk/tankontank/engine/Board.java index 84ee49c..b5b993e 100644 --- a/core/src/ch/asynk/tankontank/engine/Board.java +++ b/core/src/ch/asynk/tankontank/engine/Board.java @@ -1,5 +1,6 @@ package ch.asynk.tankontank.engine; +import java.util.List; import java.util.Vector; import java.util.Iterator; import java.util.LinkedHashSet; @@ -12,6 +13,7 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.utils.Pool; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.math.GridPoint2; @@ -57,8 +59,16 @@ public abstract class Board extends Image implements Disposable public float slope; // north-west side slope : (dh / (float) dw) } + private final Pool<GridPoint2> gridPoint2Pool = new Pool<GridPoint2>() { + @Override + protected GridPoint2 newObject() { + return new GridPoint2(); + } + }; + protected Config cfg; - private Tile[] board; + private Tile[] tiles; + private SearchBoard searchBoard; boolean transform; private Matrix4 prevTransform; @@ -72,11 +82,14 @@ public abstract class Board extends Image implements Disposable private final LinkedHashSet<Tile> tilesToDraw = new LinkedHashSet<Tile>(); protected final LinkedHashSet<Pawn> pawnsToDraw = new LinkedHashSet<Pawn>(); + protected final List<GridPoint2> areaPoints = new Vector<GridPoint2>(10); + public Board(Config cfg, Texture texture, Tile tileBuilder) { super(texture); this.cfg = cfg; - this.board = new Tile[cfg.rows * cfg.cols]; + this.tiles = new Tile[cfg.cols * cfg.rows]; + searchBoard = new SearchBoard(this, cfg.cols, cfg.rows); boolean evenRow = true; int idx = 0; @@ -85,7 +98,7 @@ public abstract class Board extends Image implements Disposable for ( int j = 0; j < cfg.cols; j ++) { float x = cfg.x0 + (j * cfg.w); if (!evenRow) x += cfg.dw; - this.board[idx] = tileBuilder.getNewAt(x, y); + this.tiles[idx] = tileBuilder.getNewAt(x, y); idx += 1; } evenRow = !evenRow; @@ -94,7 +107,7 @@ public abstract class Board extends Image implements Disposable public Tile getTile(int col, int row) { - return board[col + (row * cfg.cols)]; + return tiles[col + (row * cfg.cols)]; } @Override @@ -199,6 +212,21 @@ public abstract class Board extends Image implements Disposable debugShapes.setTransformMatrix(prevTransform); } + public List<GridPoint2> reachableFrom(Pawn pawn, int col, int row) + { + for (GridPoint2 p : areaPoints) + gridPoint2Pool.free(p); + areaPoints.clear(); + + for (SearchBoard.Node node : searchBoard.reachableFrom(pawn, col, row)) { + GridPoint2 point = gridPoint2Pool.obtain(); + point.set(node.col, node.row); + areaPoints.add(point); + } + + return areaPoints; + } + public void clearOverlaysOn(int col, int row) { clearOverlaysOn(getTile(col, row)); |