diff options
Diffstat (limited to 'core/src/ch/asynk/tankontank')
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/states/StateBreak.java | 88 | 
1 files changed, 88 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/tankontank/game/states/StateBreak.java b/core/src/ch/asynk/tankontank/game/states/StateBreak.java new file mode 100644 index 0000000..55478a8 --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/states/StateBreak.java @@ -0,0 +1,88 @@ +package ch.asynk.tankontank.game.states; + +import ch.asynk.tankontank.engine.Orientation; +import ch.asynk.tankontank.game.Unit; +import ch.asynk.tankontank.game.State.StateType; + +public class StateBreak extends StateCommon +{ +    private boolean done; +    private Orientation o = Orientation.KEEP; + +    @Override +    public void enter(boolean flag) +    { +        done = false; +        activeUnit = null; +        ctrl.hud.hide(); +        ctrl.hud.show(false, false, false, false, true, false); +        map.showBreakPawns(); +    } + +    @Override +    public void leave(StateType nextState) +    { +        map.hideBreakPawns(); +        map.unselectHex(to); +        map.hideDirections(to); +        map.hideOrientation(to); +        if (activeUnit != null) map.unselectHex(activeUnit.getHex()); +    } + +    @Override +    public void touchDown() +    { +    } + +    @Override +    public void touchUp() +    { +        if (activeUnit == null) { +            Unit unit = upHex.getUnit(); +            if (map.breakPawns.contains(unit)) { +                activeUnit = unit; +                map.selectHex(upHex); +                map.selectHex(to); +                map.showDirections(to); +                map.hideBreakPawns(); +            } +        } else { +            o = Orientation.fromAdj(to.getCol(), to.getRow(), downHex.getCol(), downHex.getRow()); + +            if (o == Orientation.KEEP) return; + +            if (ctrl.cfg.mustValidate) { +                map.hideDirections(to); +                map.showOrientation(to, o); +                ctrl.hud.show(false, false, false, false, true, false); +            } else +                doRotation(o); +        } +    } + +    @Override +    public void abort() +    { +    } + +    @Override +    public void done() +    { +        doRotation(o); +        super.done(); +    } + +    private void doRotation(Orientation o) +    { +        if (done || (activeUnit == null)) return; +        done = true; + +        if (map.collectPossiblePaths(activeUnit, to) == 1) { +            map.possiblePaths.orientation = o; +            map.movePawn(activeUnit, o); +            ctrl.setAnimationCount(1); +            ctrl.setState(StateType.ANIMATION); +        } else +            System.err.println("That's very wrong there should be only one path"); +    } +} | 
