diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2018-09-14 00:37:47 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2018-09-14 00:37:47 +0200 |
commit | a3cc66dc1fe2f468b234083baacd82a37c51fd3f (patch) | |
tree | e6b5d7dc243b918f7f68cb41bf62d9ea045137c5 /test/src/ch/asynk/gdx/board/test/GameHud.java | |
parent | ad423ba369941ebd3f9cced4030291ac67c4b3c6 (diff) | |
download | gdx-boardgame-a3cc66dc1fe2f468b234083baacd82a37c51fd3f.zip gdx-boardgame-a3cc66dc1fe2f468b234083baacd82a37c51fd3f.tar.gz |
desktop -> test
Diffstat (limited to 'test/src/ch/asynk/gdx/board/test/GameHud.java')
-rw-r--r-- | test/src/ch/asynk/gdx/board/test/GameHud.java | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/test/src/ch/asynk/gdx/board/test/GameHud.java b/test/src/ch/asynk/gdx/board/test/GameHud.java new file mode 100644 index 0000000..d2c8649 --- /dev/null +++ b/test/src/ch/asynk/gdx/board/test/GameHud.java @@ -0,0 +1,155 @@ +package ch.asynk.gdx.board.test; + +import java.util.function.Supplier; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.utils.Disposable; + +import ch.asynk.gdx.board.engine.ui.Button; +import ch.asynk.gdx.board.engine.ui.Alignment; +import ch.asynk.gdx.board.engine.ui.Root; +import ch.asynk.gdx.board.engine.Touchable; + +public class GameHud implements Disposable, Touchable +{ + private final Sprite corner; + private final Root root; + private final Button hello; + private final Button next; + private GameScreen.State state; + private final Supplier<GameScreen.State> nextState; + + public GameHud(final Assets assets, GameScreen.State state, Supplier<GameScreen.State> nextState) + { + this.state = state; + this.nextState = nextState; + this.corner = new Sprite(assets.getTexture(assets.CORNER)); + + this.root = new Root(2); + this.root.setPadding(30); + + this.hello = new Button(assets.getFont(assets.FONT_25), assets.getNinePatch(assets.PATCH, 23, 23, 23 ,23), 10, 15); + this.hello.write("Hello"); + this.root.add(this.hello); + + this.next = new Button(assets.getFont(assets.FONT_25), assets.getNinePatch(assets.PATCH, 23, 23, 23 ,23), 20, 0); + this.next.write("NEXT"); + this.next.setPosition(50, 50); + this.next.setAlignment(Alignment.MIDDLE_CENTER); + this.next.setLabelAlignment(Alignment.MIDDLE_CENTER); + this.root.add(this.next); + } + + @Override public void dispose() + { + corner.getTexture().dispose(); + } + + @Override public boolean touch(float x, float y) + { + if (root.touch(x, y)) { + GdxBoardTest.debug("GameHud", String.format("touchDown : %f %f", x, y)); + if (root.touched() == this.next) + onNext(); + return true; + } + return false; + } + + public void resize(float width, float height) + { + this.root.resize(width, height); + } + + public void onNext() + { + this.state = nextState.get(); + switch (this.state) { + case UI: + updateNext(50, Alignment.MIDDLE_CENTER); + this.root.add(this.hello); + break; + case HEX_V: + updateNext(0, Alignment.BOTTOM_RIGHT); + this.root.remove(this.hello); + break; + case HEX_H: + break; + } + } + + private void updateNext(int p, Alignment a) + { + this.next.setPosition(p, p); + this.next.setAlignment(a); + this.next.update(); + } + + public void draw(Batch batch) + { + switch (this.state) { + case UI: + drawButtons(batch); + drawCorners(batch); + break; + case HEX_V: + case HEX_H: + drawRoot(batch); + break; + } + } + + private void drawRoot(Batch batch) + { + root.draw(batch); + } + + private void drawCorners(Batch batch) + { + float right = root.getX() + root.getWidth() - corner.getWidth(); + float top = root.getY() + root.getHeight() - corner.getHeight(); + corner.setRotation(0); + corner.setPosition(root.getX(), top); + corner.draw(batch); + corner.setRotation(90); + corner.setPosition(root.getX(), root.getY()); + corner.draw(batch); + corner.setRotation(180); + corner.setPosition(right, root.getY()); + corner.draw(batch); + corner.setPosition(right, top); + corner.setRotation(270); + corner.draw(batch); + } + + private void drawButtons(Batch batch) + { + hello.setAlignment(Alignment.TOP_LEFT); + hello.setLabelAlignment(Alignment.BOTTOM_RIGHT); + hello.update(); + root.draw(batch); + drawHello(batch, Alignment.TOP_CENTER, Alignment.BOTTOM_CENTER); + drawHello(batch, Alignment.TOP_RIGHT, Alignment.BOTTOM_LEFT); + drawHello(batch, Alignment.MIDDLE_LEFT, Alignment.MIDDLE_RIGHT); + // drawHello(batch, Alignment.MIDDLE_CENTER, Alignment.MIDDLE_CENTER); + drawHello(batch, Alignment.MIDDLE_RIGHT, Alignment.MIDDLE_LEFT); + drawHello(batch, Alignment.BOTTOM_LEFT, Alignment.TOP_RIGHT); + drawHello(batch, Alignment.BOTTOM_CENTER, Alignment.TOP_CENTER); + drawHello(batch, Alignment.BOTTOM_RIGHT, Alignment.TOP_LEFT); + } + + private void drawHello(Batch batch, Alignment alignment1, Alignment alignment2) + { + hello.setAlignment(alignment1); + hello.setLabelAlignment(alignment2); + hello.update(); + hello.draw(batch); + } + + public void drawDebug(ShapeRenderer debugShapes) + { + root.drawDebug(debugShapes); + } +} |