diff options
Diffstat (limited to 'core/src/ch/asynk/tankontank/game')
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 38 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/hud/Engagement.java | 59 |
2 files changed, 83 insertions, 14 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 0eb919e..12ee01f 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -61,6 +61,8 @@ public abstract class Map extends Board public boolean success; public int d1; public int d2; + public int d3; + public int d4; public int unitCount; public int flankBonus; public int unitDefense; @@ -69,16 +71,21 @@ public abstract class Map extends Board public int attack; public int defense; - public void set(int d1, int d2, int cnt, int flk, int def, int tdf, int wdf) + public void set(int d1, int d2, int d3, int d4, int cnt, int flk, int def, int tdf, int wdf) { this.d1 = d1; this.d2 = d2; + this.d3 = d3; + this.d4 = d4; this.unitCount = cnt; this.flankBonus = flk; this.unitDefense = def; this.terrainDefense = tdf; this.weatherDefense = wdf; - this.attack = (d1 + d2 + unitCount + flankBonus); + if (d3 == 0) + this.attack = (d1 + d2 + unitCount + flankBonus); + else + this.attack = (d3 + d4 + unitCount + flankBonus); this.defense = (unitDefense + terrainDefense + weatherDefense); } } @@ -351,10 +358,12 @@ public abstract class Map extends Board ctrl.animationDone(); } - private boolean resolveFight(Unit unit, final Unit target) + private boolean resolveFight(Unit unit, final Unit target, boolean mayReroll) { int d1 = d6(); int d2 = d6(); + int d3 = 0; + int d4 = 0; int die = d1 + d2; int distance = 0; @@ -389,7 +398,6 @@ public abstract class Map extends Board } int s1 = (die + cnt + flk); int s2 = (def + tdf + wdf); - engagement.set(d1, d2, cnt, flk, def, tdf, wdf); boolean success = false; if (die == 2) { @@ -399,7 +407,22 @@ public abstract class Map extends Board } else { success = (s1 >= s2); } + if (!success && mayReroll) { + d3 = d6(); + d4 = d6(); + die = d3 + d4; + TankOnTank.debug(String.format("Reroll: (%d %d -> %d %d)", d1, d2, d3, d4)); + s1 = (die + cnt + flk); + if (die == 2) { + success = false; + } else if (die == 12) { + success = true; + } else { + success = (s1 >= s2); + } + } + engagement.set(d1, d2, d3, d4, cnt, flk, def, tdf, wdf); engagement.success = success; engagement.attacker = ctrl.player.army; engagement.defender = ctrl.opponent.army; @@ -433,12 +456,7 @@ public abstract class Map extends Board mayReroll = true; } - boolean success; - success = resolveFight(unit, target); - if (!success && mayReroll) { - TankOnTank.debug("Reroll"); - success = resolveFight(unit, target); - } + boolean success = resolveFight(unit, target, mayReroll); breakUnits.clear(); for (Unit u : activatedUnits) { diff --git a/core/src/ch/asynk/tankontank/game/hud/Engagement.java b/core/src/ch/asynk/tankontank/game/hud/Engagement.java index 5198cb1..4a95f38 100644 --- a/core/src/ch/asynk/tankontank/game/hud/Engagement.java +++ b/core/src/ch/asynk/tankontank/game/hud/Engagement.java @@ -18,7 +18,11 @@ public class Engagement extends Patch implements Animation public static int PADDING = 20; public static int VSPACING = 10; public static int HSPACING = 5; + public static float REROLL_DELAY = 0.3f; + private boolean reroll; + private boolean roll2; + private float delay; private Sprite usFlag; private Sprite geFlag; private Sprite winner; @@ -31,6 +35,8 @@ public class Engagement extends Patch implements Animation private Bg okBtn; private DiceAnimation d1Animation; private DiceAnimation d2Animation; + private DiceAnimation d3Animation; + private DiceAnimation d4Animation; public Engagement(BitmapFont font, TextureAtlas atlas) { @@ -47,6 +53,8 @@ public class Engagement extends Patch implements Animation this.visible = false; this.d1Animation = new DiceAnimation(); this.d2Animation = new DiceAnimation(); + this.d3Animation = new DiceAnimation(); + this.d4Animation = new DiceAnimation(); } public void show(Map.Engagement e, Position position, float volume) @@ -99,9 +107,28 @@ public class Engagement extends Patch implements Animation attack.setPosition(x, y); attackR.setPosition(defenseR.getX(), y); + reroll = (e.d3 != 0); + delay = 0f; + if (reroll) { + d3Animation.set(e.d3, x, y); + d4Animation.set(e.d4, x, y); + } + visible = true; } + private void reroll() + { + // hud.notify("Ace re-roll"); + roll2 = true; + float h = (getHeight() + d1Animation.getHeight() + VSPACING); + set(getX(), getY(), getWidth(), h); + d3Animation.set(d1Animation.getX(), d1Animation.getY()); + d4Animation.set(d2Animation.getX(), d2Animation.getY()); + d1Animation.set(d1Animation.getX(), (d1Animation.getY() + d1Animation.getHeight() + VSPACING)); + d2Animation.set(d2Animation.getX(), (d2Animation.getY() + d2Animation.getHeight() + VSPACING)); + } + public boolean hit(float x, float y) { if (okBtn.hit(x, y)) @@ -113,8 +140,17 @@ public class Engagement extends Patch implements Animation public boolean animate(float delta) { if (!visible) return true; - d1Animation.animate(delta); - d2Animation.animate(delta); + if (!roll2) { + d1Animation.animate(delta); + d2Animation.animate(delta); + } else { + if (delay < REROLL_DELAY) { + delay += delta; + return false; + } + d3Animation.animate(delta); + d4Animation.animate(delta); + } return false; } @@ -128,6 +164,8 @@ public class Engagement extends Patch implements Animation defenseR.dispose(); d1Animation.dispose(); d2Animation.dispose(); + d3Animation.dispose(); + d4Animation.dispose(); okBtn.dispose(); } @@ -139,14 +177,27 @@ public class Engagement extends Patch implements Animation attackImg.draw(batch); d1Animation.draw(batch); d2Animation.draw(batch); + if (roll2) { + d3Animation.draw(batch); + d4Animation.draw(batch); + } attack.draw(batch); defenseImg.draw(batch); defense.draw(batch); defenseR.draw(batch); okBtn.draw(batch); if (d1Animation.isDone() && d2Animation.isDone()) { - attackR.draw(batch); - winner.draw(batch); + if (reroll) { + if (!roll2) + reroll(); + if (d3Animation.isDone() && d4Animation.isDone()) { + attackR.draw(batch); + winner.draw(batch); + } + } else { + attackR.draw(batch); + winner.draw(batch); + } } } |