From 2cfbb884e942492d1389fbd47daeeb74451235c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Mon, 10 Nov 2014 11:11:26 +0100 Subject: use ActionButtons --- core/src/ch/asynk/tankontank/game/Ctrl.java | 19 ++- core/src/ch/asynk/tankontank/game/Hud.java | 158 ++++----------------- .../asynk/tankontank/game/states/StateAttack.java | 7 +- .../asynk/tankontank/game/states/StateBreak.java | 5 +- .../asynk/tankontank/game/states/StateCommon.java | 2 +- .../asynk/tankontank/game/states/StateEntry.java | 3 +- .../ch/asynk/tankontank/game/states/StateMove.java | 5 +- .../asynk/tankontank/game/states/StatePromote.java | 2 +- .../asynk/tankontank/game/states/StateRotate.java | 9 +- .../asynk/tankontank/game/states/StateSelect.java | 15 +- 10 files changed, 60 insertions(+), 165 deletions(-) diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java index 9092471..24e9344 100644 --- a/core/src/ch/asynk/tankontank/game/Ctrl.java +++ b/core/src/ch/asynk/tankontank/game/Ctrl.java @@ -134,7 +134,14 @@ public class Ctrl implements Disposable public void setState(State.StateType state) { - setState(state, true); + if (state == State.StateType.ABORT) { + hud.notify("Action canceled"); + this.state.abort(); + } + else if (state == State.StateType.DONE) + this.state.done(); + else + setState(state, true); } public void setState(State.StateType state, boolean normal) @@ -177,16 +184,6 @@ public class Ctrl implements Disposable this.state.enter(normal); } - public void abort() - { - state.abort(); - } - - public void done() - { - state.done(); - } - public void touchDown(float x, float y) { if (!blockMap && state.downInMap(x, y)) diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java index adf8fc6..9cad8aa 100644 --- a/core/src/ch/asynk/tankontank/game/Hud.java +++ b/core/src/ch/asynk/tankontank/game/Hud.java @@ -15,7 +15,7 @@ import ch.asynk.tankontank.engine.gfx.Image; import ch.asynk.tankontank.game.State.StateType; import ch.asynk.tankontank.game.hud.Msg; import ch.asynk.tankontank.game.hud.Bg; -import ch.asynk.tankontank.game.hud.Button; +import ch.asynk.tankontank.game.hud.ActionButtons; import ch.asynk.tankontank.game.hud.LabelImage; import ch.asynk.tankontank.game.hud.UnitDock; import ch.asynk.tankontank.game.hud.OkCancel; @@ -31,17 +31,9 @@ public class Hud implements Disposable private final TankOnTank game; private final Ctrl ctrl; - private Bg actionsBg; private Msg msg; - private Button btn; private Object hit; - public Button moveBtn; - public Button rotateBtn; - public Button promoteBtn; - public Button attackBtn; - public Button checkBtn; - public Button cancelBtn; private Image flag; private Image usFlag; @@ -51,13 +43,13 @@ public class Hud implements Disposable private LabelImage reinforcement; private UnitDock unitDock; + public ActionButtons actionButtons; + private BitmapFont font; private OkCancel okCancel; private OkCancelAction okCancelAction; - private Vector2 corner; - enum OkCancelAction { END_TURN, @@ -67,18 +59,12 @@ public class Hud implements Disposable { this.game = game; this.ctrl = ctrl; - this.corner = new Vector2((Gdx.graphics.getWidth() - OFFSET), OFFSET); font = game.skin.getFont("default-font"); TextureAtlas atlas = game.factory.hudAtlas; - moveBtn = new Button(atlas, "btn-move"); - rotateBtn = new Button(atlas, "btn-rotate"); - promoteBtn = new Button(atlas, "btn-promote"); - attackBtn = new Button(atlas, "btn-attack"); - checkBtn = new Button(atlas, "btn-check"); - cancelBtn = new Button(atlas, "btn-cancel"); - actionsBg = new Bg(atlas.findRegion("disabled")); + actionButtons = new ActionButtons(ctrl, atlas.findRegion("disabled"), atlas, 10f); + actionButtons.hide(); usFlag = new Image(atlas.findRegion("us-flag")); geFlag = new Image(atlas.findRegion("ge-flag")); @@ -100,8 +86,6 @@ public class Hud implements Disposable reinforcement.setPosition(x, usFlag.getY() - reinforcement.getHeight() - 0); reinforcement.setLabelPosition(Position.TOP_LEFT); unitDock.setTopLeft(OFFSET, reinforcement.getY() - 5); - - hide(); } @Override @@ -109,13 +93,7 @@ public class Hud implements Disposable { font.dispose(); - moveBtn.dispose(); - rotateBtn.dispose(); - promoteBtn.dispose(); - attackBtn.dispose(); - checkBtn.dispose(); - cancelBtn.dispose(); - actionsBg.dispose(); + actionButtons.dispose(); usFlag.dispose(); geFlag.dispose(); @@ -172,13 +150,7 @@ public class Hud implements Disposable reinforcement.draw(batch); unitDock.draw(batch); - actionsBg.draw(batch); - moveBtn.draw(batch); - rotateBtn.draw(batch); - promoteBtn.draw(batch); - attackBtn.draw(batch); - checkBtn.draw(batch); - cancelBtn.draw(batch); + actionButtons.draw(batch); msg.draw(batch); okCancel.draw(batch); @@ -192,13 +164,7 @@ public class Hud implements Disposable reinforcement.drawDebug(debugShapes); unitDock.drawDebug(debugShapes); - actionsBg.drawDebug(debugShapes); - moveBtn.drawDebug(debugShapes); - rotateBtn.drawDebug(debugShapes); - promoteBtn.drawDebug(debugShapes); - attackBtn.drawDebug(debugShapes); - checkBtn.drawDebug(debugShapes); - cancelBtn.drawDebug(debugShapes); + actionButtons.drawDebug(debugShapes); msg.drawDebug(debugShapes); okCancel.drawDebug(debugShapes); @@ -225,46 +191,6 @@ public class Hud implements Disposable else msg.write(s, 1, position); } - private float setButton(Button btn, float x, float y) - { - btn.setUp(); - btn.visible = true; - btn.setPosition(x, y); - return (y + btn.getHeight() + PADDING); - } - - public void show(boolean promote, boolean rotate, boolean move, boolean attack, boolean check, boolean cancel) - { - float x = (corner.x - checkBtn.getWidth()); - float y = corner.y; - - if (move) y = setButton(moveBtn, x, y); - else moveBtn.hide(); - if (rotate) y = setButton(rotateBtn, x, y); - else rotateBtn.hide(); - if (attack) y = setButton(attackBtn, x, y); - else attackBtn.hide(); - if (promote) y = setButton(promoteBtn, x, y); - else promoteBtn.hide(); - if (cancel) y = setButton(cancelBtn, x, y); - else cancelBtn.hide(); - if (check) y = setButton(checkBtn, x, y); - else checkBtn.hide(); - - actionsBg.set((x - PADDING), (corner.y - PADDING), (checkBtn.getWidth() + (2 * PADDING)), (y - corner.y + PADDING)); - } - - public void hide() - { - moveBtn.hide(); - rotateBtn.hide(); - promoteBtn.hide(); - attackBtn.hide(); - checkBtn.hide(); - cancelBtn.hide(); - actionsBg.set(0, 0, 0, 0); - } - public void hideUnitDock() { unitDock.hide(); @@ -272,10 +198,11 @@ public class Hud implements Disposable public boolean touchDown(float x, float y) { - btn = null; hit = null; - if (turns.hit(x,y)) + if (actionButtons.touchDown(x, y)) + hit = actionButtons; + else if (turns.hit(x,y)) hit = turns; else if (unitDock.hit(x, y)) hit = unitDock; @@ -283,63 +210,30 @@ public class Hud implements Disposable hit = reinforcement; else if (okCancel.hit(x, y)) hit = okCancel; - else if (actionsBg.hit(x,y)) { - if (moveBtn.hit(x, y)) - btn = moveBtn; - else if (rotateBtn.hit(x, y)) - btn = rotateBtn; - else if (promoteBtn.hit(x, y)) - btn = promoteBtn; - else if (attackBtn.hit(x, y)) - btn = attackBtn; - else if (checkBtn.hit(x, y)) - btn = checkBtn; - else if (cancelBtn.hit(x, y)) - btn = cancelBtn; - } else + else return false; - if (btn != null) - btn.setDown(); - return true; } public boolean touchUp(float x, float y) { - if (btn != null) { - if (actionsBg.hit(x, y)) { - if ((btn == moveBtn) && moveBtn.hit(x, y)) - ctrl.setState(StateType.MOVE); - else if ((btn == rotateBtn) && rotateBtn.hit(x, y)) - ctrl.setState(StateType.ROTATE); - else if ((btn == promoteBtn) && promoteBtn.hit(x, y)) - ctrl.setState(StateType.PROMOTE); - else if ((btn == attackBtn) && attackBtn.hit(x, y)) - ctrl.setState(StateType.ATTACK); - else if ((btn == checkBtn) && checkBtn.hit(x, y)) - ctrl.done(); - else if ((btn == cancelBtn) && cancelBtn.hit(x, y)) { - notify("Action canceled"); - ctrl.abort(); - } else - btn.setUp(); - } else - btn.setUp(); - btn = null; - } else if (hit != null) { - if ((hit == turns) && turns.hit(x, y)) - askEndTurn(); - else if ((hit == reinforcement) && reinforcement.hit(x, y)) - unitDock.toggle(); - else if ((hit == unitDock) && unitDock.hit(x, y)) - ctrl.setState(StateType.ENTRY); - else if ((hit == okCancel) && okCancel.hit(x, y)) - closeOkCancel(); - hit = null; - } else + if (hit == null) return false; + if (hit == actionButtons) + actionButtons.touchUp(x, y); + else if ((hit == turns) && turns.hit(x, y)) + askEndTurn(); + else if ((hit == reinforcement) && reinforcement.hit(x, y)) + unitDock.toggle(); + else if ((hit == unitDock) && unitDock.hit(x, y)) + ctrl.setState(StateType.ENTRY); + else if ((hit == okCancel) && okCancel.hit(x, y)) + closeOkCancel(); + + hit = null; + return true; } diff --git a/core/src/ch/asynk/tankontank/game/states/StateAttack.java b/core/src/ch/asynk/tankontank/game/states/StateAttack.java index 80c240b..e2ed73e 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateAttack.java +++ b/core/src/ch/asynk/tankontank/game/states/StateAttack.java @@ -1,6 +1,7 @@ package ch.asynk.tankontank.game.states; import ch.asynk.tankontank.game.Unit; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; import ch.asynk.tankontank.TankOnTank; @@ -10,8 +11,8 @@ public class StateAttack extends StateCommon public void enter(boolean fromSelect) { map.possibleTargets.clear(); - ctrl.hud.show(false, false, false, true, false, ctrl.cfg.canCancel); - ctrl.hud.attackBtn.setOn(); + ctrl.hud.actionButtons.show(Buttons.ATTACK.b | ((ctrl.cfg.canCancel) ? Buttons.ABORT.b : 0)); + ctrl.hud.actionButtons.setOn(Buttons.ATTACK); // activeUnit is the target if (fromSelect) { @@ -61,7 +62,7 @@ public class StateAttack extends StateCommon activeUnit.showTarget(); map.collectAttackAssists(selectedUnit, activeUnit, ctrl.player.unitIterator()); map.showAttackAssists(); - ctrl.hud.show(false, false, false, true, true, ctrl.cfg.canCancel); + ctrl.hud.actionButtons.show(Buttons.ATTACK.b | Buttons.DONE.b | ((ctrl.cfg.canCancel) ? Buttons.ABORT.b : 0)); } if ((activeUnit != null) && map.attackAssists.contains(unit)) { diff --git a/core/src/ch/asynk/tankontank/game/states/StateBreak.java b/core/src/ch/asynk/tankontank/game/states/StateBreak.java index fa3023f..be7f460 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateBreak.java +++ b/core/src/ch/asynk/tankontank/game/states/StateBreak.java @@ -2,6 +2,7 @@ package ch.asynk.tankontank.game.states; import ch.asynk.tankontank.engine.Orientation; import ch.asynk.tankontank.game.Unit; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; import ch.asynk.tankontank.TankOnTank; @@ -15,7 +16,7 @@ public class StateBreak extends StateCommon { done = false; activeUnit = null; - ctrl.hud.show(false, false, false, false, true, false); + ctrl.hud.actionButtons.show(Buttons.DONE.b); map.showBreakPawns(); } @@ -54,7 +55,7 @@ public class StateBreak extends StateCommon if (ctrl.cfg.mustValidate) { map.hideDirections(to); map.showOrientation(to, o); - ctrl.hud.show(false, false, false, false, true, false); + ctrl.hud.actionButtons.show(Buttons.DONE.b); } else doRotation(o); } diff --git a/core/src/ch/asynk/tankontank/game/states/StateCommon.java b/core/src/ch/asynk/tankontank/game/states/StateCommon.java index 9bf6ac7..314801b 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateCommon.java +++ b/core/src/ch/asynk/tankontank/game/states/StateCommon.java @@ -68,7 +68,7 @@ public abstract class StateCommon implements State private void goToNextState() { - ctrl.hud.hide(); + ctrl.hud.actionButtons.hide(); StateType next = nextState; nextState = StateType.SELECT; ctrl.setState(next, (next == StateType.SELECT)); diff --git a/core/src/ch/asynk/tankontank/game/states/StateEntry.java b/core/src/ch/asynk/tankontank/game/states/StateEntry.java index dc4acc9..d166a69 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateEntry.java +++ b/core/src/ch/asynk/tankontank/game/states/StateEntry.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.math.Vector3; import ch.asynk.tankontank.engine.TileSet; import ch.asynk.tankontank.engine.Orientation; import ch.asynk.tankontank.game.Hex; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; public class StateEntry extends StateCommon { @@ -19,7 +20,7 @@ public class StateEntry extends StateCommon activeUnit = ctrl.hud.getDockUnit(); entryPoint = ctrl.battle.getEntryPoint(activeUnit); entryPoint.enable(Hex.AREA, true); - ctrl.hud.show(false, false, false, false, false, ctrl.cfg.canCancel); + ctrl.hud.actionButtons.show(((ctrl.cfg.canCancel) ? Buttons.ABORT.b : 0)); x = activeUnit.getPosition().x; y = activeUnit.getPosition().x; z = activeUnit.getPosition().y; diff --git a/core/src/ch/asynk/tankontank/game/states/StateMove.java b/core/src/ch/asynk/tankontank/game/states/StateMove.java index 657c9bd..2f672c9 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateMove.java +++ b/core/src/ch/asynk/tankontank/game/states/StateMove.java @@ -2,6 +2,7 @@ package ch.asynk.tankontank.game.states; import ch.asynk.tankontank.game.Hex; import ch.asynk.tankontank.game.Unit; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; public class StateMove extends StateCommon { @@ -9,8 +10,8 @@ public class StateMove extends StateCommon public void enter(boolean fromSelect) { boolean moreThanOne = ((map.moveablePawns.size() + map.activatedPawns.size()) > 1); - ctrl.hud.show(false, true, true, false, moreThanOne, ctrl.cfg.canCancel); - ctrl.hud.moveBtn.setOn(); + ctrl.hud.actionButtons.show(Buttons.ROTATE.b | Buttons.MOVE.b | ((moreThanOne) ? Buttons.DONE.b : 0) | ((ctrl.cfg.canCancel) ? Buttons.ABORT.b : 0)); + ctrl.hud.actionButtons.setOn(Buttons.MOVE); map.possiblePaths.clear(); if (fromSelect) { diff --git a/core/src/ch/asynk/tankontank/game/states/StatePromote.java b/core/src/ch/asynk/tankontank/game/states/StatePromote.java index 28fe2b5..6366d74 100644 --- a/core/src/ch/asynk/tankontank/game/states/StatePromote.java +++ b/core/src/ch/asynk/tankontank/game/states/StatePromote.java @@ -7,7 +7,7 @@ public class StatePromote extends StateCommon @Override public void enter(boolean flag) { - ctrl.hud.hide(); + ctrl.hud.actionButtons.hide(); Unit unit = ctrl.player.promote(selectedUnit); if (unit != null) { ctrl.hud.notify(unit + " has been promoted"); diff --git a/core/src/ch/asynk/tankontank/game/states/StateRotate.java b/core/src/ch/asynk/tankontank/game/states/StateRotate.java index b35a856..a5547f9 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateRotate.java +++ b/core/src/ch/asynk/tankontank/game/states/StateRotate.java @@ -1,6 +1,7 @@ package ch.asynk.tankontank.game.states; import ch.asynk.tankontank.engine.Orientation; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; import ch.asynk.tankontank.TankOnTank; @@ -15,8 +16,8 @@ public class StateRotate extends StateCommon { this.rotateOnly = rotateOnly; - ctrl.hud.show(false, true, false, false, false, ctrl.cfg.canCancel); - ctrl.hud.rotateBtn.setOn(); + ctrl.hud.actionButtons.show(Buttons.ROTATE.b | ((ctrl.cfg.canCancel) ? Buttons.ABORT.b : 0)); + ctrl.hud.actionButtons.setOn(Buttons.ROTATE); if (rotateOnly) { // rotateBtn from Select state @@ -64,7 +65,7 @@ public class StateRotate extends StateCommon if (ctrl.cfg.mustValidate) { map.hideDirections(to); map.showOrientation(to, o); - ctrl.hud.show(false, true, false, false, true, ctrl.cfg.canCancel); + ctrl.hud.actionButtons.show(Buttons.ROTATE.b | Buttons.DONE.b | ((ctrl.cfg.canCancel) ? Buttons.ABORT.b : 0)); } else doRotation(o); } @@ -72,7 +73,7 @@ public class StateRotate extends StateCommon @Override public void abort() { - ctrl.hud.hide(); + ctrl.hud.actionButtons.hide(); if (activeUnit.move.entryMove) { map.leaveBoard(activeUnit); ctrl.player.revertUnitEntry(activeUnit); diff --git a/core/src/ch/asynk/tankontank/game/states/StateSelect.java b/core/src/ch/asynk/tankontank/game/states/StateSelect.java index 9d07c6a..19dbc73 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateSelect.java +++ b/core/src/ch/asynk/tankontank/game/states/StateSelect.java @@ -2,6 +2,7 @@ package ch.asynk.tankontank.game.states; import ch.asynk.tankontank.game.Map; import ch.asynk.tankontank.game.Ctrl; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; public class StateSelect extends StateCommon { @@ -62,16 +63,14 @@ public class StateSelect extends StateCommon if (moves > 0) map.collectMoveablePawns(selectedUnit); showPossibleTargetsMovesAssists(selectedUnit); - ctrl.hud.show( - ctrl.player.canPromote(selectedUnit), - selectedUnit.canMove(), - (moves > 0), - (targets > 0), - false, - false + ctrl.hud.actionButtons.show( + ((ctrl.player.canPromote(selectedUnit)) ? Buttons.PROMOTE.b : 0 ) | + ((selectedUnit.canMove()) ? Buttons.ROTATE.b : 0 ) | + ((moves > 0) ? Buttons.MOVE.b : 0 ) | + ((targets > 0) ? Buttons.ATTACK.b : 0) ); } else { - ctrl.hud.hide(); + ctrl.hud.actionButtons.hide(); map.clearAll(); } if (selectedUnit != null) ctrl.hud.notify(selectedUnit.toString()); -- cgit v1.1-2-g2b99