diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2020-01-23 17:15:55 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2020-01-23 17:15:55 +0100 | 
| commit | 318a58a757435081f18626eb78dbd04498aa9f43 (patch) | |
| tree | e2bb7b865a5297a5d578f6d131ea277a8b62e7b5 /test/src/ch | |
| parent | 23d0b36568ddd29f799a35f9419e3e132a23ae5c (diff) | |
| download | gdx-boardgame-318a58a757435081f18626eb78dbd04498aa9f43.zip gdx-boardgame-318a58a757435081f18626eb78dbd04498aa9f43.tar.gz | |
BoardScreen : implement adjacents test
Diffstat (limited to 'test/src/ch')
| -rw-r--r-- | test/src/ch/asynk/gdx/boardgame/test/BoardScreen.java | 50 | 
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());          }      } | 
