diff options
Diffstat (limited to 'core/src/ch')
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 52 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/states/StateEngage.java | 4 |
2 files changed, 34 insertions, 22 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 56ce4bd..168d07d 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -248,49 +248,63 @@ public abstract class Map extends Board ctrl.animationDone(); } - public boolean engagePawn(Pawn pawn, final Pawn target, int d1, int d2) + private boolean resolve(Pawn pawn, final Pawn target) { - int activatedUnits = activatedPawns.size(); + int d1 = d6(); + int d2 = d6(); int dice = d1 + d2; - final boolean success; if (dice == 2) { pawn.engagement.calculus = "2D6 -> (1 + 1) automatic failure"; - success = false; + return false; } else if (dice == 12) { pawn.engagement.calculus = "2D6 -> (6 + 6) automatic success"; - success = true; + return true; } else { int flankAttacks = 0; for (Pawn assist : activatedPawns) { - if (assist.isFlankAttack()) { + if (assist.isFlankAttack()) flankAttacks = 1; - break; - } } - pawn.engagement.calculus = "2D6 -> (" + d1 + " + " + d2 + ") + " + activatedUnits + " + " + flankAttacks; + int activatedUnits = activatedPawns.size(); int def = target.getTile().defenseFor(pawn, target, activatedPawns); - success = ((dice + activatedUnits + flankAttacks) >= def); + pawn.engagement.calculus = "2D6 -> (" + d1 + " + " + d2 + ") + " + activatedUnits + " + " + flankAttacks; + return ((dice + activatedUnits + flankAttacks) >= def); + } + } + + public boolean engagePawn(Pawn pawn, final Pawn target) + { + boolean mayReroll = false; + for (Pawn assist : activatedPawns) { + if (((Unit) assist).isAce()) + mayReroll = true; } + + boolean success; + success = resolve(pawn, target); + if (!success && mayReroll) { + TankOnTank.debug("Reroll"); + success = resolve(pawn, target); + } + TankOnTank.debug(pawn + " engagements " + target + " : " + pawn.engagement.calculus); AnimationSequence seq = AnimationSequence.get(2); if (success) { explosions.init(1, target.getCenter().x, target.getCenter().y); seq.addAnimation(explosions); + seq.addAnimation(notifyDoneAnimation(pawn)); } else { explosion.init(1, target.getCenter().x, target.getCenter().y); seq.addAnimation(explosion); - } - seq.addAnimation(RunnableAnimation.get(pawn, new Runnable() { - @Override - public void run() { - if (success) { - removePawn(target); + seq.addAnimation(RunnableAnimation.get(pawn, new Runnable() { + @Override + public void run() { + animationDone(); } - animationDone(); - } - })); + })); + } breakPawns.clear(); for (Pawn p : activatedPawns) { diff --git a/core/src/ch/asynk/tankontank/game/states/StateEngage.java b/core/src/ch/asynk/tankontank/game/states/StateEngage.java index 55fcdaa..1586d80 100644 --- a/core/src/ch/asynk/tankontank/game/states/StateEngage.java +++ b/core/src/ch/asynk/tankontank/game/states/StateEngage.java @@ -54,9 +54,7 @@ public class StateEngage extends StateCommon public StateType done() { StateType nextState = StateType.DONE; - int d1 = ctrl.player.d6(); - int d2 = ctrl.player.d6(); - if (map.engagePawn(selectedUnit, activeUnit, d1, d2)) { + if (map.engagePawn(selectedUnit, activeUnit)) { ctrl.player.wonEngagementCount += 1; ctrl.hud.notify(selectedUnit.engagement.calculus + " : " + activeUnit + " is destroyed"); ctrl.opponent.casualty(activeUnit); |