summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/src/ch/asynk/gdx/boardgame/test/BoardScreen.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/src/ch/asynk/gdx/boardgame/test/BoardScreen.java b/test/src/ch/asynk/gdx/boardgame/test/BoardScreen.java
index 0714b8d..c74ff40 100644
--- a/test/src/ch/asynk/gdx/boardgame/test/BoardScreen.java
+++ b/test/src/ch/asynk/gdx/boardgame/test/BoardScreen.java
@@ -10,22 +10,28 @@ import com.badlogic.gdx.math.Vector2;
import ch.asynk.gdx.boardgame.Camera;
import ch.asynk.gdx.boardgame.Orientation;
import ch.asynk.gdx.boardgame.Piece;
+import ch.asynk.gdx.boardgame.Tile;
+import ch.asynk.gdx.boardgame.TileStorage;
+import ch.asynk.gdx.boardgame.tilestorages.ArrayTileStorage;
import ch.asynk.gdx.boardgame.boards.Board;
import ch.asynk.gdx.boardgame.boards.BoardFactory;
import ch.asynk.gdx.boardgame.ui.Alignment;
import ch.asynk.gdx.boardgame.ui.Button;
import ch.asynk.gdx.boardgame.ui.Root;
+import ch.asynk.gdx.boardgame.utils.IterableSet;
public class BoardScreen extends AbstractScreen
{
private class MyBoard
{
+ private final IterableSet<Tile> tilesToDraw;
private final Assets assets;
private final Piece panzer;
private final Vector2 pos;
private final Vector2 v;
public Texture map;
public Board board;
+ public TileStorage tileStorage;
public int dx;
public int dy;
public int w;
@@ -39,17 +45,23 @@ public class BoardScreen extends AbstractScreen
this.v = new Vector2();
Piece.angleCorrection = 90;
this.panzer = new Piece(assets.getTexture(assets.PANZER));
+ this.tilesToDraw = new IterableSet<Tile>(10);
+ Tile.defaultOverlay = assets.getAtlas(app.assets.HEX_OVERLAYS);
}
public void draw(SpriteBatch batch)
{
batch.draw(map, dx, dy, map.getWidth()/2, map.getHeight()/2, map.getWidth(), map.getHeight(), 1, 1, r, 0, 0, map.getWidth(), map.getHeight(), false, false);
+ for (Tile tile : tilesToDraw) {
+ tile.draw(batch);
+ }
panzer.draw(batch);
}
public void reset()
{
pos.set(0, 0);
+ tilesToDraw.clear();
board.centerOf(0, 0, v);
panzer.centerOn(v.x, v.y);
panzer.setRotation(Orientation.DEFAULT.r());
@@ -65,6 +77,7 @@ public class BoardScreen extends AbstractScreen
if (board.isOnMap((int)v.x, (int)v.y)) {
GdxBoardTest.debug("BoardScreen", String.format(" from [%d;%d] => %d :: %d :: %f", (int)pos.x, (int)pos.y, (int)d0, (int)d1, d2));
pos.set(v);
+ handleAdjacents();
board.centerOf((int)v.x, (int)v.y, v);
panzer.centerOn(v.x, v.y);
panzer.setRotation(Orientation.fromR(panzer.getRotation()).left().r());
@@ -73,6 +86,38 @@ public class BoardScreen extends AbstractScreen
return true;
}
+ private void handleAdjacents()
+ {
+ for (Tile tile : board.getAdjacents()) {
+ if (tile != null)
+ tile.enableOverlay(2, false);
+ }
+ board.buildAdjacents((int)v.x, (int)v.y, this::getTile);
+ for (Tile tile : board.getAdjacents()) {
+ if (tile != null) {
+ tilesToDraw.add(tile);
+ tile.enableOverlay(2, true);
+ }
+ }
+ for (Tile tile : tilesToDraw) {
+ if (!tile.overlaysEnabled()) {
+ tilesToDraw.remove(tile);
+ }
+ }
+ }
+
+ private Tile getTile(int x, int y)
+ {
+ return tileStorage.getTile(x, y, board::genKey, this::buildTile);
+ }
+
+ private Tile buildTile(int x, int y)
+ {
+ final Vector2 v = new Vector2();
+ board.centerOf(x, y, v);
+ return new Tile(v.x, v.y);
+ }
+
public void setHEX_V()
{
map = assets.getTexture(assets.MAP_00);
@@ -82,6 +127,7 @@ public class BoardScreen extends AbstractScreen
w = map.getWidth();
h = map.getHeight();
board = BoardFactory.getBoard(10, 9, BoardFactory.BoardType.HEX, 110, 50, 103, BoardFactory.BoardOrientation.VERTICAL);
+ tileStorage = new ArrayTileStorage(board.size());
}
public void setHEX_H()
@@ -93,6 +139,7 @@ public class BoardScreen extends AbstractScreen
w = map.getHeight();
h = map.getWidth();
board = BoardFactory.getBoard(9, 10, BoardFactory.BoardType.HEX, 110, 103, 50, BoardFactory.BoardOrientation.HORIZONTAL);
+ tileStorage = new ArrayTileStorage(board.size());
}
public void setSQUARE()
@@ -104,6 +151,7 @@ public class BoardScreen extends AbstractScreen
w = map.getWidth();
h = map.getHeight();
board = BoardFactory.getBoard(8, 8, BoardFactory.BoardType.SQUARE, 83, 5, 5);
+ tileStorage = new ArrayTileStorage(board.size());
}
public void setTRI_H()
@@ -115,6 +163,7 @@ public class BoardScreen extends AbstractScreen
w = map.getWidth();
h = map.getHeight();
board = BoardFactory.getBoard(21, 8, BoardFactory.BoardType.TRIANGLE, 150, 109, 53, BoardFactory.BoardOrientation.HORIZONTAL);
+ tileStorage = new ArrayTileStorage(board.size());
}
public void setTRI_V()
@@ -126,6 +175,7 @@ public class BoardScreen extends AbstractScreen
w = map.getHeight();
h = map.getWidth();
board = BoardFactory.getBoard(8, 21, BoardFactory.BoardType.TRIANGLE, 150, 16, 110, BoardFactory.BoardOrientation.VERTICAL);
+ tileStorage = new ArrayTileStorage(board.size());
}
}