summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/game/Ctrl.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/game/Ctrl.java')
-rw-r--r--core/src/ch/asynk/tankontank/game/Ctrl.java64
1 files changed, 42 insertions, 22 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java
index b65547c..cee17d8 100644
--- a/core/src/ch/asynk/tankontank/game/Ctrl.java
+++ b/core/src/ch/asynk/tankontank/game/Ctrl.java
@@ -42,6 +42,7 @@ public class Ctrl implements Disposable
private State state;
private State.StateType stateType;
+ private State.StateType stateAfterAnimation;
public Ctrl(final TankOnTank game, final Battle battle)
{
@@ -65,16 +66,15 @@ public class Ctrl implements Disposable
this.reinforcementState = new StateReinforcement();
this.state = selectState;
- this.stateType = State.StateType.SELECT;
+ this.stateType = State.StateType.DONE;
this.hud = new Hud(this, game);
this.blockMap = false;
this.blockHud = false;
- player.turnStart();
- hud.playerInfo.update(player, battle.getHudPosition(player));
-
hud.notify(battle.toString(), 2, Position.MIDDLE_CENTER, false);
+ startPlayerTurn();
+ setState(battle.getState(player));
}
@Override
@@ -103,7 +103,7 @@ public class Ctrl implements Disposable
{
animationCount -= 1;
if (animationCount == 0)
- state.done();
+ setState(stateAfterAnimation);
if (animationCount < 0)
TankOnTank.debug(" animationCount < 0");
}
@@ -134,14 +134,33 @@ public class Ctrl implements Disposable
startPlayerTurn();
}
- private void checkTurnEnd()
+ private State.StateType actionAborted()
+ {
+ hud.notify("Action canceled");
+ State.StateType nextState = this.state.abort();
+
+ if (nextState == State.StateType.ABORT)
+ nextState = battle.getState(player);
+
+ return nextState;
+ }
+
+ private State.StateType actionDone()
{
+ State.StateType nextState = this.state.done();
+
if (map.activatedPawns.size() > 0) {
player.burnDownOneAp();
hud.playerInfo.update(player, battle.getHudPosition(player));
}
+
if (player.apExhausted())
swicthPlayer();
+
+ if (nextState == State.StateType.DONE)
+ nextState = battle.getState(player);
+
+ return nextState;
}
public void stateTouchUp()
@@ -160,27 +179,27 @@ public class Ctrl implements Disposable
}
}
- public void setState(State.StateType state)
+ public void setState(State.StateType nextState)
{
- 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);
+ setState(nextState, battle.getState(player));
}
- public void setState(State.StateType state, boolean normal)
+ public void setState(State.StateType nextState, State.StateType whenDone)
{
- this.state.leave(state);
+ if (nextState == State.StateType.ABORT)
+ nextState = actionAborted();
+ else if (nextState == State.StateType.DONE)
+ nextState = actionDone();
+ else if (nextState == State.StateType.ANIMATION)
+ stateAfterAnimation = whenDone;
+
+ this.state.leave(nextState);
- TankOnTank.debug(" switch to : " + state + " " + normal);
- switch(state) {
+ TankOnTank.debug(" switch to : " + nextState);
+
+ switch(nextState) {
case SELECT:
this.state = selectState;
- checkTurnEnd();
break;
case MOVE:
this.state = pathState;
@@ -206,9 +225,10 @@ public class Ctrl implements Disposable
default:
break;
}
- stateType = state;
- this.state.enter(normal);
+ this.state.enter(stateType);
+
+ stateType = nextState;
}
public void touchDown(float hx, float hy, float mx, float my)