diff options
Diffstat (limited to 'core/src/ch')
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/Ctrl.java | 6 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/State.java | 1 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/states/StateDeployment.java | 136 | 
3 files changed, 143 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java index b596b29..dbe8817 100644 --- a/core/src/ch/asynk/tankontank/game/Ctrl.java +++ b/core/src/ch/asynk/tankontank/game/Ctrl.java @@ -13,6 +13,7 @@ import ch.asynk.tankontank.game.states.StateEngage;  import ch.asynk.tankontank.game.states.StateBreak;  import ch.asynk.tankontank.game.states.StateAnimation;  import ch.asynk.tankontank.game.states.StateReinforcement; +import ch.asynk.tankontank.game.states.StateDeployment;  import ch.asynk.tankontank.screens.OptionsScreen; @@ -37,6 +38,7 @@ public class Ctrl implements Disposable      private State breakState;      private State animationState;      private State reinforcementState; +    private State deploymentState;      private int animationCount = 0; @@ -64,6 +66,7 @@ public class Ctrl implements Disposable          this.breakState = new StateBreak();          this.animationState = new StateAnimation();          this.reinforcementState = new StateReinforcement(); +        this.deploymentState = new StateDeployment();          this.state = selectState;          this.stateType = StateType.DONE; @@ -203,6 +206,9 @@ public class Ctrl implements Disposable              case REINFORCEMENT:                  this.state = reinforcementState;                  break; +            case DEPLOYMENT: +                this.state = deploymentState; +                break;              default:                  break;          } diff --git a/core/src/ch/asynk/tankontank/game/State.java b/core/src/ch/asynk/tankontank/game/State.java index 4b96156..dc6854c 100644 --- a/core/src/ch/asynk/tankontank/game/State.java +++ b/core/src/ch/asynk/tankontank/game/State.java @@ -11,6 +11,7 @@ public interface State          PROMOTE,          ANIMATION,          REINFORCEMENT, +        DEPLOYMENT,          ABORT,          DONE      }; diff --git a/core/src/ch/asynk/tankontank/game/states/StateDeployment.java b/core/src/ch/asynk/tankontank/game/states/StateDeployment.java new file mode 100644 index 0000000..222ea67 --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/states/StateDeployment.java @@ -0,0 +1,136 @@ +package ch.asynk.tankontank.game.states; + +import ch.asynk.tankontank.engine.Orientation; +import ch.asynk.tankontank.engine.EntryPoint; +import ch.asynk.tankontank.engine.PawnSet; +import ch.asynk.tankontank.game.Hex; +import ch.asynk.tankontank.game.Unit; +import ch.asynk.tankontank.game.hud.ActionButtons.Buttons; + +import ch.asynk.tankontank.TankOnTank; + +public class StateDeployment extends StateCommon +{ +    private boolean done; +    private EntryPoint entryPoint; +    private PawnSet deployedUnits = new PawnSet(map, 10); + +    @Override +    public void enter(StateType prevState) +    { +        if (selectedHex != null) +            map.unselectHex(selectedHex); +        done = false; +        entryPoint = null; +        selectedHex = null; +        ctrl.hud.actionButtons.hide(); +        ctrl.hud.playerInfo.unitDock.show(); +        ctrl.hud.playerInfo.blockEndOfTurn(true); +    } + +    @Override +    public void leave(StateType nextState) +    { +        if (selectedHex != null) +            map.unselectHex(selectedHex); +        if (entryPoint != null) +            entryPoint.enable(Hex.AREA, false); +        ctrl.hud.playerInfo.unitDock.hide(); +    } + +    @Override +    public StateType abort() +    { +        undo(); +        return StateType.DEPLOYMENT; +    } + +    @Override +    public StateType done() +    { +        deployedUnits.clear(); +        ctrl.hud.playerInfo.blockEndOfTurn(false); +        return StateType.DONE; +    } + +    @Override +    public void touchDown() +    { +    } + +    @Override +    public void touchUp() +    { +        Unit unit = ctrl.hud.playerInfo.getDockUnit(); +        if (!done && (unit != null) && (unit != activeUnit)) { +            changeUnit(unit); +        } else if (selectedUnit != null) { +            Orientation o = Orientation.fromAdj(selectedHex, upHex); +            if (o != Orientation.KEEP) +                doRotation(o); +        } else if (!done && (entryPoint != null) && (upHex != null)) { +            if (upHex.isEmpty() && entryPoint.contains(upHex)) +                unitEnter(activeUnit); +        } else { +            unit = downHex.getUnit(); +            if (deployedUnits.contains(unit)) { +                selectedUnit = unit; +                selectedHex = downHex; +                showRotation(); +            } +        } +    } + +    private void changeUnit(Unit unit) +    { +        activeUnit = unit; +        if (entryPoint != null) entryPoint.enable(Hex.AREA, false); +        entryPoint = ctrl.battle.getEntryPoint(activeUnit); +        entryPoint.enable(Hex.AREA, true); +    } + +    private void undo() +    { +        map.unselectHex(selectedHex); +        map.hideDirections(selectedHex); +        map.leaveBoard(selectedUnit); +        ctrl.player.revertUnitEntry(selectedUnit); +        activeUnit = null; +        selectedUnit = null; +    } + +    private void unitEnter(Unit unit) +    { +        selectedUnit = unit; +        selectedHex = upHex; +        ctrl.player.unitEntry(unit); +        map.enterBoard(unit, upHex, entryPoint.orientation); +        deployedUnits.add(unit); +        entryPoint.enable(Hex.AREA, false); +        showRotation(); +    } + +    private void showRotation() +    { +        map.selectHex(selectedHex); +        map.showDirections(selectedHex); +        ctrl.hud.playerInfo.unitDock.hide(); +        ctrl.hud.actionButtons.show(Buttons.ROTATE.b | Buttons.ABORT.b); +        ctrl.hud.actionButtons.setOn(Buttons.ROTATE); +    } + +    private void doRotation(Orientation o) +    { +        map.unselectHex(selectedHex); +        map.hideDirections(selectedHex); +        selectedUnit.setRotation(o.r()); +        ctrl.hud.actionButtons.hide(); +        ctrl.hud.playerInfo.unitDock.show(); +        entryPoint = null; +        activeUnit = null; +        selectedUnit = null; +        if (ctrl.checkDeploymentDone()) { +            done = true; +        } +    } +} | 
