diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2014-10-12 11:41:48 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2014-10-12 11:41:48 +0200 |
commit | 987041cdfe8b0726878dd8be57b334acbc45b89e (patch) | |
tree | 64ffd70d46e2f81f953da2dc0bbc660d6e016c41 /core/src/ch/asynk/tankontank/game/Ctrl.java | |
parent | 78908df102e91581bc89c73eb376b8b4fa859210 (diff) | |
download | RustAndDust-987041cdfe8b0726878dd8be57b334acbc45b89e.zip RustAndDust-987041cdfe8b0726878dd8be57b334acbc45b89e.tar.gz |
rename GameCtrl -> Ctrl
Diffstat (limited to 'core/src/ch/asynk/tankontank/game/Ctrl.java')
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Ctrl.java | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java new file mode 100644 index 0000000..bcf41c9 --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/Ctrl.java @@ -0,0 +1,180 @@ +package ch.asynk.tankontank.game; + +import com.badlogic.gdx.utils.Disposable; + +import ch.asynk.tankontank.TankOnTank; +import ch.asynk.tankontank.game.states.GameStateCommon; +import ch.asynk.tankontank.game.states.GameStateSelect; +import ch.asynk.tankontank.game.states.GameStateMove; +import ch.asynk.tankontank.game.states.GameStateRotate; +import ch.asynk.tankontank.game.states.GameStateAnimation; + +public class Ctrl implements Disposable +{ + + public class Config + { + public boolean showMoves; + public boolean showTargets; + public boolean showMoveAssists; + public boolean canCancel; + public boolean mustValidate; + public boolean showEnemyPossibilities; + + public Config() + { + this.showMoves = true; + this.showTargets = true; + this.showMoveAssists = true; + this.canCancel = true; + this.mustValidate = false; + this.showEnemyPossibilities = false; + } + } + + private final TankOnTank game; + + private GameFactory factory; + public Map map; + public Hud hud; + public Config cfg; + public Player gePlayer; + public Player usPlayer; + public Player currentPlayer; + + private GameState selectState; + private GameState pathState; + private GameState rotateState; + private GameState animationState; + + private int animationCount = 0; + + private GameState state; + + public Ctrl(final TankOnTank game) + { + this.game = game; + + this.cfg = new Config(); + + this.factory = new GameFactory(game.manager); + this.map = factory.getMap(this, game.manager, GameFactory.MapType.MAP_A); + this.usPlayer = factory.getPlayer(Army.US); + this.gePlayer = factory.getPlayer(Army.GE); + + this.selectState = new GameStateSelect(this, map); + this.pathState = new GameStateMove(); + this.rotateState = new GameStateRotate(); + this.animationState = new GameStateAnimation(); + + this.state = selectState; + this.currentPlayer = factory.fakeSetup(map, gePlayer, usPlayer); + + this.hud = new Hud(this, game); + } + + @Override + public void dispose() + { + hud.dispose(); + map.dispose(); + factory.dispose(); + } + + public boolean mayProcessTouch() + { + return (state != animationState); + } + + public boolean isInAction() + { + return (state != selectState); + } + + public void setAnimationCount(int count) + { + animationCount = count; + System.err.println(" setAnimationCount(" + count + ")"); + } + + public void animationDone() + { + animationCount -= 1; + if (animationCount == 0) + state.done(); + if (animationCount < 0) + System.err.println("animationCount < 0"); + } + + private void nextPlayer() + { + currentPlayer.turnEnd(); + currentPlayer = ((currentPlayer == usPlayer) ? gePlayer : usPlayer); + currentPlayer.turnStart(); + hud.updatePlayer(); + + } + + public void setState(GameState.State state) + { + setState(state, true); + } + + public void setState(GameState.State state, boolean normal) + { + this.state.leave(state); + + System.err.println("Switch to : " + state + " " + normal); + switch(state) { + case SELECT: + this.state = selectState; + checkTurnEnd(); + break; + case MOVE: + this.state = pathState; + break; + case ROTATE: + this.state = rotateState; + break; + case ANIMATION: + this.state = animationState; + break; + default: + break; + } + + this.state.enter(normal); + } + + private void checkTurnEnd() + { + System.err.println(" current player : " + currentPlayer.toString()); + if (map.activatedPawnsCount() > 0) { + currentPlayer.burnDownOneAp(); + } + if (currentPlayer.apExhausted()) + nextPlayer(); + } + + public void abort() + { + state.abort(); + } + + public void done() + { + state.done(); + } + + public void touchDown(float x, float y) + { + if (state.downInMap(x, y)) + state.touchDown(); + } + + public void touchUp(float x, float y) + { + if (state.upInMap(x, y)) + state.touchUp(); + } +} |