diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/Hud.java | 5 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 20 | ||||
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/hud/Engagement.java | 115 | 
3 files changed, 94 insertions, 46 deletions
| diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java index f1e6424..fd63d03 100644 --- a/core/src/ch/asynk/tankontank/game/Hud.java +++ b/core/src/ch/asynk/tankontank/game/Hud.java @@ -81,6 +81,7 @@ public class Hud implements Disposable      {          msg.animate(delta);          playerInfo.animate(delta); +        engagement.animate(delta);      }      public void draw(Batch batch) @@ -251,9 +252,9 @@ public class Hud implements Disposable          pushDialog(okCancel);      } -    public void engagementSummary(Map.Engagement e) +    public void engagementSummary(Map.Engagement e, float volume)      { -        engagement.show(e, Position.BOTTOM_CENTER); +        engagement.show(e, Position.BOTTOM_CENTER, volume);          pushDialog(engagement);      } diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 3381518..1e4aef3 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -51,6 +51,9 @@ public abstract class Map extends Board      public class Engagement      { +        public Army attacker; +        public Army defender; +        public boolean success;          public int d1;          public int d2;          public int unitCount; @@ -60,9 +63,8 @@ public abstract class Map extends Board          public int weatherDefense;          public int attack;          public int defense; -        public String msg; -        public void set(int d1, int d2, int cnt, int flk, int def, int tdf, int wdf, String msg) +        public void set(int d1, int d2, int cnt, int flk, int def, int tdf, int wdf)          {              this.d1 = d1;              this.d2 = d2; @@ -71,12 +73,10 @@ public abstract class Map extends Board              this.unitDefense = def;              this.terrainDefense = tdf;              this.weatherDefense = wdf; -            this.msg = msg;              this.attack = (d1 + d2 + unitCount + flankBonus);              this.defense = (unitDefense + terrainDefense + weatherDefense);          }      } -      private Engagement engagement;      public int d6() @@ -349,10 +349,10 @@ public abstract class Map extends Board          boolean success = false;          if (die == 2) { -            engagement.set(d1, d2, 0, 0, 0, 0, 0, target.toString() + " is destroyed"); +            engagement.set(d1, d2, 0, 0, 0, 0, 0);              success = false;          } else if (die == 12) { -            engagement.set(d1, d2, 0, 0, 0, 0, 0, target.toString() + " resisted the assault"); +            engagement.set(d1, d2, 0, 0, 0, 0, 0);              success = true;          } else { @@ -389,11 +389,13 @@ public abstract class Map extends Board              int s1 = (die + cnt + flk);              int s2 = (def + tdf + wdf);              success = (s1 >= s2); - -            engagement.set(d1, d2, cnt, flk, def, tdf, wdf, target.toString() + (success ? " is destroyed" : " resisted the assault")); +            engagement.set(d1, d2, cnt, flk, def, tdf, wdf);          } -        ctrl.hud.engagementSummary(engagement); +        engagement.success = success; +        engagement.attacker = ctrl.player.army; +        engagement.defender = ctrl.opponent.army; +        ctrl.hud.engagementSummary(engagement, ctrl.cfg.fxVolume);          return success;      } diff --git a/core/src/ch/asynk/tankontank/game/hud/Engagement.java b/core/src/ch/asynk/tankontank/game/hud/Engagement.java index 9a06a42..2f6565b 100644 --- a/core/src/ch/asynk/tankontank/game/hud/Engagement.java +++ b/core/src/ch/asynk/tankontank/game/hud/Engagement.java @@ -1,66 +1,98 @@  package ch.asynk.tankontank.game.hud;  import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.Sprite;  import com.badlogic.gdx.graphics.g2d.BitmapFont;  import com.badlogic.gdx.graphics.g2d.TextureAtlas;  import com.badlogic.gdx.graphics.g2d.TextureRegion;  import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import ch.asynk.tankontank.game.Player;  import ch.asynk.tankontank.game.Map; +import ch.asynk.tankontank.game.Army; +import ch.asynk.tankontank.engine.gfx.animations.DiceAnimation;  public class Engagement extends Bg  { +    public static int FLAG_HEIGHT = 24;      public float padding; +    private Sprite usFlag; +    private Sprite geFlag; +    private Sprite winner;      private Label attack;      private Label defense; -    private Label attackV; -    private Label defenseV; -    private Label msg; +    private Label attackR; +    private Label defenseR;      private Bg okBtn; +    private DiceAnimation d1Animation; +    private DiceAnimation d2Animation;      public Engagement(BitmapFont font, TextureRegion region, TextureAtlas atlas, float padding)      {          super(region); +        usFlag = new Sprite(atlas.findRegion("us-flag")); +        geFlag = new Sprite(atlas.findRegion("ge-flag")); +        winner = new Sprite(); +        usFlag.setSize(usFlag.getWidth() * (FLAG_HEIGHT / usFlag.getHeight()), FLAG_HEIGHT); +        geFlag.setSize(geFlag.getWidth() * (FLAG_HEIGHT / geFlag.getHeight()), FLAG_HEIGHT);          this.attack = new Label(font);          this.defense = new Label(font); -        this.attackV = new Label(font); -        this.defenseV = new Label(font); -        this.msg = new Label(font); +        this.attackR = new Label(font); +        this.defenseR = new Label(font);          this.okBtn = new Bg(atlas.findRegion("ok")); -        this.attack.write("Attack: \n  2D6\n  units\n  flank"); -        this.defense.write("Defense: \n  defense\n  terrain \n  weather");          this.visible = false;          this.padding = padding; +        this.d1Animation = new DiceAnimation(); +        this.d2Animation = new DiceAnimation();      } -    public void show(Map.Engagement e, Position position) +    public void show(Map.Engagement e, Position position, float volume)      { -        attackV.write(String.format("%d\n%d + %d\n%d\n%d", e.attack, e.d1, e.d2, e.unitCount, e.flankBonus)); -        defenseV.write(String.format("%d\n%d\n%d\n%d", e.defense, e.unitDefense, e.terrainDefense, e.weatherDefense)); -        msg.write(e.msg); +        DiceAnimation.initSound(volume); +        attack.write(String.format(" + %d + %d", e.unitCount, e.flankBonus)); +        defense.write(String.format("%d + %d + %d = %d", e.unitDefense, e.terrainDefense, e.weatherDefense, e.defense)); +        attackR.write(String.format("= %d", e.attack)); +        defenseR.write(String.format("= %d", e.defense)); +        if (e.success) +            winner.set((e.attacker == Army.US) ? usFlag : geFlag); +        else +            winner.set((e.attacker == Army.US) ? geFlag : usFlag); -        float height = (attack.getHeight() + okBtn.getHeight() + msg.getHeight() + (4 * padding)); -        float width = (attack.getWidth() + defense.getWidth() + attackV.getWidth() + defenseV.getWidth() + (5 * padding)); -        float w2 = (msg.getWidth() + (2 * padding)); -        if (w2 > width) width = w2; +        float resultW = attackR.getWidth(); +        float w = defenseR.getWidth(); +        if (w > resultW) +            resultW = w; +        float height = (okBtn.getHeight() + (2 * usFlag.getHeight()) + (4 * padding)); +        float width = (usFlag.getWidth() + (2 * d1Animation.getWidth()) + attack.getWidth() + resultW + (6 * padding));          float x = position.getX(width);          float y = position.getY(height);          set(x, y, width, height); -        x += padding;          y += padding;          okBtn.setPosition((x + width - okBtn.getWidth() - padding), y); +        winner.setPosition((getX() + ((okBtn.getX() - getX()) / 2.0f) - (winner.getWidth() / 2.0f)), y); +        x += padding;          y += (okBtn.getHeight() + padding); -        msg.setPosition(x, y); -        y += msg.getHeight() + padding; -        attack.setPosition(x, y); -        x += attack.getWidth() + padding; -        attackV.setPosition(x, y); -        x += attackV.getWidth() + padding; + +        Sprite flag = ((e.defender == Army.US) ? usFlag : geFlag); +        flag.setPosition(x, y); +        x += (flag.getWidth() + padding); +        y = (y + (flag.getHeight() / 2.0f) - (defense.getHeight() / 2.0f));          defense.setPosition(x, y); -        x += defense.getWidth() + padding; -        defenseV.setPosition(x, y); +        defenseR.setPosition((getX() + width - resultW- padding), y); + +        x = getX() + padding; +        y += flag.getHeight() + padding; +        flag = ((flag == geFlag) ? usFlag : geFlag); +        flag.setPosition(x, y); +        x += (flag.getWidth() + padding); +        d1Animation.set(e.d1, x, y); +        x += (d1Animation.getWidth() + padding); +        d2Animation.set(e.d2, x, (y)); +        x += (d1Animation.getWidth() + padding); +        y = (y + (flag.getHeight() / 2.0f) - (attack.getHeight() / 2.0f)); +        attack.setPosition(x, y); +        attackR.setPosition(defenseR.getX(), y); +          visible = true;      } @@ -71,15 +103,23 @@ public class Engagement extends Bg          return false;      } +    public void animate(float delta) +    { +        if (!visible) return; +        d1Animation.animate(delta); +        d2Animation.animate(delta); +    } +      @Override      public void dispose()      {          super.dispose();          attack.dispose();          defense.dispose(); -        attackV.dispose(); -        defenseV.dispose(); -        msg.dispose(); +        attackR.dispose(); +        defenseR.dispose(); +        d1Animation.dispose(); +        d2Animation.dispose();          okBtn.dispose();      } @@ -90,10 +130,16 @@ public class Engagement extends Bg          super.draw(batch);          attack.draw(batch);          defense.draw(batch); -        attackV.draw(batch); -        defenseV.draw(batch); -        msg.draw(batch); +        defenseR.draw(batch); +        geFlag.draw(batch); +        usFlag.draw(batch); +        d1Animation.draw(batch); +        d2Animation.draw(batch);          okBtn.draw(batch); +        if (d1Animation.isDone() && d2Animation.isDone()) { +            attackR.draw(batch); +            winner.draw(batch); +        }      }      @Override @@ -103,9 +149,8 @@ public class Engagement extends Bg          super.drawDebug(shapes);          attack.drawDebug(shapes);          defense.drawDebug(shapes); -        attackV.drawDebug(shapes); -        defenseV.drawDebug(shapes); -        msg.drawDebug(shapes); +        attackR.drawDebug(shapes); +        defenseR.drawDebug(shapes);          okBtn.drawDebug(shapes);      }  } | 
