diff options
Diffstat (limited to 'core/src/ch')
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Hud.java | 27 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/Map.java | 10 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/game/hud/Engagement.java | 112 |
3 files changed, 139 insertions, 10 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java index dd88f04..abaa112 100644 --- a/core/src/ch/asynk/tankontank/game/Hud.java +++ b/core/src/ch/asynk/tankontank/game/Hud.java @@ -14,6 +14,7 @@ import ch.asynk.tankontank.game.hud.PlayerInfo; import ch.asynk.tankontank.game.hud.ActionButtons; import ch.asynk.tankontank.game.hud.OkCancel; import ch.asynk.tankontank.game.hud.Statistics; +import ch.asynk.tankontank.game.hud.Engagement; import ch.asynk.tankontank.TankOnTank; @@ -33,6 +34,7 @@ public class Hud implements Disposable private Msg msg; private Statistics stats; + private Engagement engagement; private OkCancel okCancel; private DialogAction dialogAction; @@ -43,6 +45,7 @@ public class Hud implements Disposable END_TURN, END_DEPLOYMENT, END_GAME, + END_ENGAGEMENT, NONE } @@ -60,6 +63,7 @@ public class Hud implements Disposable msg = new Msg(font, atlas.findRegion("disabled"), 10f); okCancel = new OkCancel(font, atlas.findRegion("disabled"), atlas, 10f); stats = new Statistics(font, atlas.findRegion("disabled"), atlas, 10f); + engagement = new Engagement(font, atlas.findRegion("disabled"), atlas, 10f); } @Override @@ -70,6 +74,7 @@ public class Hud implements Disposable actionButtons.dispose(); msg.dispose(); okCancel.dispose(); + engagement.dispose(); stats.dispose(); } @@ -92,6 +97,7 @@ public class Hud implements Disposable actionButtons.draw(batch); msg.draw(batch); okCancel.draw(batch); + engagement.draw(batch); stats.draw(batch); } @@ -101,6 +107,7 @@ public class Hud implements Disposable actionButtons.drawDebug(debugShapes); msg.drawDebug(debugShapes); okCancel.drawDebug(debugShapes); + engagement.drawDebug(debugShapes); stats.drawDebug(debugShapes); } @@ -127,10 +134,15 @@ public class Hud implements Disposable if (okCancel.visible) { if (okCancel.hit(x, y)) hit = okCancel; - } else if (stats.visible) { + } + else if (stats.visible) { if (stats.hit(x, y)) hit = stats; } + else if (engagement.visible) { + if (engagement.hit(x, y)) + hit = engagement; + } else if (actionButtons.touchDown(x, y)) hit = actionButtons; else if (playerInfo.touchDown(x, y)) @@ -158,6 +170,10 @@ public class Hud implements Disposable if (stats.hit(x, y)) closeDialog(); } + else if (hit == engagement) { + if (engagement.hit(x, y)) + closeDialog(); + } hit = null; @@ -188,6 +204,9 @@ public class Hud implements Disposable stats.visible = false; ctrl.endGame(); break; + case END_ENGAGEMENT: + engagement.visible = false; + break; case NONE: default: break; @@ -224,11 +243,11 @@ public class Hud implements Disposable okCancel.show("Deployment unit count reached.\nEnd Deployment phase ?", Position.MIDDLE_CENTER); } - public void engagementSummary(String msg) + public void engagementSummary(int d1, int d2, int cnt, int flk, int def, int tdf, int wdf, String msg) { ctrl.blockMap = true; - dialogAction = DialogAction.NONE; - okCancel.show(msg, Position.BOTTOM_CENTER, false); + dialogAction = DialogAction.END_ENGAGEMENT; + engagement.show(d1, d2, cnt, flk, def, tdf, wdf, msg, Position.BOTTOM_CENTER); } public void victory(Player winner, Player loser) diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index bd36a7f..537a48f 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -271,13 +271,12 @@ public abstract class Map extends Board int d2 = d6(); int die = d1 + d2; - String msg; boolean success = false; if (die == 2) { - msg = "Die : 1 + 1 => Automatic failure"; + ctrl.hud.engagementSummary(d1, d2, 0, 0, 0, 0, 0, target.toString() + " is destroyed"); success = false; } else if (die == 12) { - msg = "Die : 6 + 6 => Automatic success"; + ctrl.hud.engagementSummary(d1, d2, 0, 0, 0, 0, 0, target.toString() + " resisted the assault"); success = true; } else { @@ -315,10 +314,9 @@ public abstract class Map extends Board int s2 = (def + tdf + wdf); success = (s1 >= s2); - msg = String.format("die : %d + %d\nunits : +%d\nflank: +%d\n = %d\ndefense: %d\nterrain: +%d\nweather: +%d\n = %d\n%s", - d1, d2, cnt, flk, s1, def, tdf, wdf, s2, (success ? "target destroyed" : "target missed")); + ctrl.hud.engagementSummary(d1, d2, cnt, flk, def, tdf, wdf, + target.toString() + (success ? " is destroyed" : " resisted the assault")); } - ctrl.hud.engagementSummary(msg); return success; } diff --git a/core/src/ch/asynk/tankontank/game/hud/Engagement.java b/core/src/ch/asynk/tankontank/game/hud/Engagement.java new file mode 100644 index 0000000..fbd835d --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/hud/Engagement.java @@ -0,0 +1,112 @@ +package ch.asynk.tankontank.game.hud; + +import com.badlogic.gdx.graphics.g2d.Batch; +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; + +public class Engagement extends Bg +{ + public float padding; + private Label attack; + private Label defense; + private Label attackV; + private Label defenseV; + private Label msg; + private Bg okBtn; + + public Engagement(BitmapFont font, TextureRegion region, TextureAtlas atlas, float padding) + { + super(region); + 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.okBtn = new Bg(atlas.findRegion("ok")); + this.attack.write("Attack: \n die\n units\n flank"); + this.defense.write("Defense: \n defense\n terrain \n weather"); + this.visible = false; + this.padding = padding; + } + + public void show(int d1, int d2, int cnt, int flk, int def, int tdf, int wdf, String m, Position position) + { + int atk = (d1 + d2 + cnt + flk); + int df = (def + tdf + wdf); + attackV.write(String.format("%d\n%d + %d\n%d\n%d", atk, d1, d2, cnt, flk)); + defenseV.write(String.format("%d\n%d\n%d\n%d", df, def, tdf, wdf)); + msg.write(m); + + 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 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); + 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; + defense.setPosition(x, y); + x += defense.getWidth() + padding; + defenseV.setPosition(x, y); + visible = true; + } + + public boolean hit(float x, float y) + { + if (okBtn.hit(x, y)) + return true; + return false; + } + + @Override + public void dispose() + { + super.dispose(); + attack.dispose(); + defense.dispose(); + attackV.dispose(); + defenseV.dispose(); + msg.dispose(); + okBtn.dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + attack.draw(batch); + defense.draw(batch); + attackV.draw(batch); + defenseV.draw(batch); + msg.draw(batch); + okBtn.draw(batch); + } + + @Override + public void drawDebug(ShapeRenderer shapes) + { + if (!visible) return; + super.drawDebug(shapes); + attack.drawDebug(shapes); + defense.drawDebug(shapes); + attackV.drawDebug(shapes); + defenseV.drawDebug(shapes); + msg.drawDebug(shapes); + okBtn.drawDebug(shapes); + } +} |