summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/src/ch/asynk/tankontank/game/states/StateAttack.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/game/states/StateAttack.java b/core/src/ch/asynk/tankontank/game/states/StateAttack.java
new file mode 100644
index 0000000..14ade37
--- /dev/null
+++ b/core/src/ch/asynk/tankontank/game/states/StateAttack.java
@@ -0,0 +1,93 @@
+package ch.asynk.tankontank.game.states;
+
+import com.badlogic.gdx.math.GridPoint2;
+
+import ch.asynk.tankontank.engine.Pawn;
+import ch.asynk.tankontank.game.State.StateType;
+
+public class StateAttack extends StateCommon
+{
+ @Override
+ public void enter(boolean fromSelect)
+ {
+ map.clearPossibleTargets();
+ ctrl.hud.show(false, false, true, false, ctrl.cfg.canCancel);
+ ctrl.hud.attackBtn.setOn();
+
+ if (fromSelect) {
+ activePawn = null;
+ // use selectedHex and selectedPawn
+ from.set(selectedHex);
+ map.showPossibleTargets(false);
+ map.buildPossibleTargets(selectedPawn, from);
+ map.showPossibleTargets(true);
+ if (to.x != -1) {
+ // quick fire -> replay touchUp
+ upHex.set(to);
+ touchUp();
+ }
+ selectHex(from);
+ }
+ }
+
+ @Override
+ public void leave(StateType nextState)
+ {
+ map.showAttackAssists(false);
+ map.showPossibleTargets(false);
+ unselectHex(from);
+ if (to.x != -1)
+ unselectHex(to);
+ }
+
+ @Override
+ public void touchDown()
+ {
+ }
+
+ @Override
+ public void touchUp()
+ {
+ // activePawn is the target
+ if ((activePawn == null) && map.isInPossibleTargets(upHex)) {
+ map.showPossibleTargets(false);
+ to.set(upHex);
+ activePawn = map.getTopPawnAt(to);
+ showTarget(to, true);
+ map.buildAttack(selectedPawn, activePawn, to, ctrl.currentPlayer.unitIterator());
+ map.showAttackAssists(true);
+ ctrl.hud.show(false, false, true, true, ctrl.cfg.canCancel);
+ }
+
+ if ((activePawn != null) && map.isInPossibleAttackAssists(upHex)) {
+ if (map.toggleAttackAssist(map.getTopPawnAt(upHex))) {
+ showAssist(upHex, false);
+ showTarget(upHex, true);
+ } else {
+ showAssist(upHex, true);
+ showTarget(upHex, false);
+ }
+ }
+ }
+
+ @Override
+ public void abort()
+ {
+ super.abort();
+ }
+
+ @Override
+ public void done()
+ {
+ int d1 = ctrl.currentPlayer.d6();
+ int d2 = ctrl.currentPlayer.d6();
+ System.err.print(" attack (" + from.x + ";" + from.y + ") -> (" + to.x + ";" + to.y + ") : 2D6 -> (" + d1 + " + " + d2 + ")");
+ if (map.attackPawn(selectedPawn, activePawn, from, to, d1 + d2)) {
+ map.removePawnFrom(activePawn, to);
+ ctrl.currentPlayer.casualty(activePawn);
+ // TODO free move for infantry
+ }
+
+ super.done();
+ }
+}