summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2014-10-31 15:45:58 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2014-10-31 15:45:58 +0100
commitea211dc3b942c26874fecf6812d4894a364dfc07 (patch)
tree18b70d9191ca4e042c57bdf6fab5fa74a9621342 /core/src/ch/asynk/tankontank
parentf2b3e093d2602bafa0669ef90a376a75cf4b7489 (diff)
downloadRustAndDust-ea211dc3b942c26874fecf6812d4894a364dfc07.zip
RustAndDust-ea211dc3b942c26874fecf6812d4894a364dfc07.tar.gz
Map,States: implement infantry move after successfull attack
Diffstat (limited to 'core/src/ch/asynk/tankontank')
-rw-r--r--core/src/ch/asynk/tankontank/game/Ctrl.java6
-rw-r--r--core/src/ch/asynk/tankontank/game/Map.java12
-rw-r--r--core/src/ch/asynk/tankontank/game/State.java1
-rw-r--r--core/src/ch/asynk/tankontank/game/states/StateAttack.java7
4 files changed, 23 insertions, 3 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java
index 3ecb455..bbc18a3 100644
--- a/core/src/ch/asynk/tankontank/game/Ctrl.java
+++ b/core/src/ch/asynk/tankontank/game/Ctrl.java
@@ -9,6 +9,7 @@ import ch.asynk.tankontank.game.states.StateMove;
import ch.asynk.tankontank.game.states.StateRotate;
import ch.asynk.tankontank.game.states.StatePromote;
import ch.asynk.tankontank.game.states.StateAttack;
+import ch.asynk.tankontank.game.states.StateBreak;
import ch.asynk.tankontank.game.states.StateAnimation;
public class Ctrl implements Disposable
@@ -26,6 +27,7 @@ public class Ctrl implements Disposable
private State rotateState;
private State promoteState;
private State attackState;
+ private State breakState;
private State animationState;
private int animationCount = 0;
@@ -48,6 +50,7 @@ public class Ctrl implements Disposable
this.rotateState = new StateRotate();
this.promoteState = new StatePromote();
this.attackState = new StateAttack();
+ this.breakState = new StateBreak();
this.animationState = new StateAnimation();
this.state = selectState;
@@ -141,6 +144,9 @@ public class Ctrl implements Disposable
case ATTACK:
this.state = attackState;
break;
+ case BREAK:
+ this.state = breakState;
+ break;
case ANIMATION:
this.state = animationState;
break;
diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java
index f391076..db0f6b6 100644
--- a/core/src/ch/asynk/tankontank/game/Map.java
+++ b/core/src/ch/asynk/tankontank/game/Map.java
@@ -32,6 +32,7 @@ public abstract class Map extends Board
public final Board.PawnCollection possibleTargets;
public final Board.PawnCollection attackAssists;
public final Board.PawnCollection activatedPawns;
+ public final Board.PawnCollection breakPawns;
private final SpriteAnimation explosion;
private final SpriteAnimation explosions;
@@ -59,8 +60,8 @@ public abstract class Map extends Board
possibleTargets = new PawnSet(this, 10);
attackAssists = new PawnSet(this, 6);
-
activatedPawns = new PawnSet(this, 7);
+ breakPawns = new PawnSet(this, 4);
}
@Override
@@ -82,6 +83,7 @@ public abstract class Map extends Board
moveablePawns.clear();
attackAssists.clear();
activatedPawns.clear();
+ breakPawns.clear();
}
public Hex getHexAt(float x, float y)
@@ -269,8 +271,12 @@ public abstract class Map extends Board
}
}));
- for (Pawn p : activatedPawns)
+ breakPawns.clear();
+ for (Pawn p : activatedPawns) {
p.attack(target);
+ if (p.isA(Unit.UnitType.INFANTRY))
+ breakPawns.add(p);
+ }
if ((activatedPawns.size() == 1) && pawn.isA(Unit.UnitType.AT_GUN) && target.isHardTarget())
activatedPawns.clear();
@@ -304,6 +310,8 @@ public abstract class Map extends Board
public void showAttackAssists() { attackAssists.enable(Unit.ATTACK_ASSIST, true); }
public void hideAttackAssists() { attackAssists.enable(Unit.ATTACK, false);
attackAssists.enable(Unit.ATTACK_ASSIST, false); }
+ public void showBreakPawns() { breakPawns.enable(Unit.MOVE, true); }
+ public void hideBreakPawns() { breakPawns.enable(Unit.MOVE, false); }
public void selectHex(Hex hex) { enableOverlayOn(hex, Hex.SELECT, true); }
diff --git a/core/src/ch/asynk/tankontank/game/State.java b/core/src/ch/asynk/tankontank/game/State.java
index 8f004c4..d1d64ef 100644
--- a/core/src/ch/asynk/tankontank/game/State.java
+++ b/core/src/ch/asynk/tankontank/game/State.java
@@ -7,6 +7,7 @@ public interface State
MOVE,
ROTATE,
ATTACK,
+ BREAK,
PROMOTE,
ANIMATION
};
diff --git a/core/src/ch/asynk/tankontank/game/states/StateAttack.java b/core/src/ch/asynk/tankontank/game/states/StateAttack.java
index 84ee3d8..34f7d61 100644
--- a/core/src/ch/asynk/tankontank/game/states/StateAttack.java
+++ b/core/src/ch/asynk/tankontank/game/states/StateAttack.java
@@ -81,8 +81,13 @@ public class StateAttack extends StateCommon
int d1 = ctrl.player.d6();
int d2 = ctrl.player.d6();
System.err.print(" attack (" + selectedHex.getCol() + ";" + selectedHex.getRow() + ") -> (" + to.getCol() + ";" + to.getRow() + ") : 2D6 -> (" + d1 + " + " + d2 + ")");
- if (map.attackPawn(selectedUnit, activeUnit, d1 + d2))
+ if (map.attackPawn(selectedUnit, activeUnit, d1 + d2)) {
ctrl.player.casualty(activeUnit);
+ if (map.breakPawns.size() > 0)
+ setNextState(StateType.BREAK);
+ }
+
+
activeUnit.showTarget();
ctrl.setState(StateType.ANIMATION);