summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2014-11-10 17:47:37 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2014-11-10 17:47:37 +0100
commit41a64b633e34336a5c95a46b56fa3648407e1e77 (patch)
tree6a5f213759d2d94dde3b676abba3e0b179a44be4
parent016893d25d10ea0f69072c6f698554cc657fd80d (diff)
downloadRustAndDust-41a64b633e34336a5c95a46b56fa3648407e1e77.zip
RustAndDust-41a64b633e34336a5c95a46b56fa3648407e1e77.tar.gz
add game/hud/PlayerInfo
-rw-r--r--core/src/ch/asynk/tankontank/game/Hud.java2
-rw-r--r--core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java187
2 files changed, 188 insertions, 1 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java
index 48ccafe..b93c8b5 100644
--- a/core/src/ch/asynk/tankontank/game/Hud.java
+++ b/core/src/ch/asynk/tankontank/game/Hud.java
@@ -265,7 +265,7 @@ public class Hud implements Disposable
ctrl.blockMap = false;
}
- private void askEndTurn()
+ public void askEndTurn()
{
ctrl.blockMap = true;
dialogAction = DialogAction.END_TURN;
diff --git a/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java b/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java
new file mode 100644
index 0000000..6786d70
--- /dev/null
+++ b/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java
@@ -0,0 +1,187 @@
+package ch.asynk.tankontank.game.hud;
+
+import com.badlogic.gdx.utils.Disposable;
+
+import com.badlogic.gdx.graphics.g2d.Batch;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+
+// TODO replace with Sprite !!
+import ch.asynk.tankontank.engine.gfx.Drawable;
+import ch.asynk.tankontank.engine.gfx.Image;
+
+import ch.asynk.tankontank.game.State.StateType;
+import ch.asynk.tankontank.game.Ctrl;
+import ch.asynk.tankontank.game.Hud;
+import ch.asynk.tankontank.game.Army;
+import ch.asynk.tankontank.game.Unit;
+import ch.asynk.tankontank.game.Player;
+
+public class PlayerInfo implements Disposable, Drawable
+{
+ private final Ctrl ctrl;
+
+ private Object hit;
+
+ private float padding;
+ private Image flag;
+ private Image usFlag;
+ private Image geFlag;
+ private LabelImage turns;
+ private LabelImage aps;
+ private LabelImage reinforcement;
+ public UnitDock unitDock;
+
+ public PlayerInfo(Ctrl ctrl, BitmapFont font, TextureAtlas atlas, float padding)
+ {
+ this.ctrl = ctrl;
+ this.padding = padding;
+ usFlag = new Image(atlas.findRegion("us-flag"));
+ geFlag = new Image(atlas.findRegion("ge-flag"));
+ turns = new LabelImage(atlas.findRegion("turns"), font, 5f);
+ aps = new LabelImage(atlas.findRegion("aps"), font, 5f);
+ reinforcement = new LabelImage(atlas.findRegion("reinforcement"), font, 5f);
+ unitDock = new UnitDock(ctrl, atlas.findRegion("disabled"), atlas.findRegion("reinforcement-selected"), 10f);
+ }
+
+ @Override
+ public void dispose()
+ {
+ usFlag.dispose();
+ geFlag.dispose();
+ turns.dispose();
+ aps.dispose();
+ reinforcement.dispose();
+ unitDock.dispose();
+ }
+
+ public void setPosition(Position position)
+ {
+ float width = (usFlag.getWidth() + turns.getWidth() + aps.getWidth() + (2 * padding));
+ float height = (usFlag.getHeight() + reinforcement.getHeight() + (1 * padding));
+ float x = position.getX(width);
+ float y = position.getY(height);
+
+ if (position.isLeft()) {
+ reinforcement.setPosition(x, y);
+ reinforcement.setLabelPosition(Position.TOP_LEFT);
+ y += (reinforcement.getHeight() + padding);
+ usFlag.setPosition(x, y);
+ geFlag.setPosition(x, y);
+ x += (usFlag.getWidth() + padding);
+ turns.setPosition(x, y);
+ x += (turns.getWidth() + padding);
+ aps.setPosition(x, y);
+ aps.setLabelPosition(Position.TOP_RIGHT);
+ } else {
+ x = (x + width);
+ reinforcement.setPosition((x - reinforcement.getWidth()), y);
+ reinforcement.setLabelPosition(Position.TOP_LEFT);
+ y += (reinforcement.getHeight() + padding);
+ x -= usFlag.getWidth();
+ usFlag.setPosition(x, y);
+ geFlag.setPosition(x, y);
+ x -= (turns.getWidth() + padding);
+ turns.setPosition(x, y);
+ x -= (aps.getWidth() + padding);
+ aps.setPosition(x, y);
+ aps.setLabelPosition(Position.TOP_RIGHT);
+ }
+ unitDock.setPosition(position, reinforcement.getY() - padding);
+ }
+
+ public void update(Player player, Position position)
+ {
+ unitDock.hide();
+ turns.write("" + player.getTurn());
+ aps.write("" + player.getAp());
+ int r = player.getReinforcement().size();
+ if (r == 0) {
+ reinforcement.visible = false;
+ } else {
+ reinforcement.visible = true;
+ reinforcement.write("" + r);
+ }
+
+ if (player.getFaction() == Army.GE)
+ flag = geFlag;
+ else
+ flag = usFlag;
+
+ setPosition(position);
+ }
+
+ public Unit getDockUnit()
+ {
+ return (Unit) unitDock.selectedPawn;
+ }
+
+ public void hideUnitDock()
+ {
+ unitDock.hide();
+ }
+
+ public void blockReinforcement(boolean blocked)
+ {
+ reinforcement.blocked = blocked;
+ }
+
+ public boolean touchDown(float x, float y)
+ {
+ hit = null;
+
+ if (turns.hit(x,y))
+ hit = turns;
+ else if (unitDock.hit(x, y))
+ hit = unitDock;
+ else if (reinforcement.hit(x, y))
+ hit = reinforcement;
+ else
+ return false;
+
+ return true;
+ }
+
+ public boolean touchUp(float x, float y)
+ {
+ if (hit == null)
+ return false;
+
+ if ((hit == turns) && turns.hit(x, y))
+ ctrl.hud.askEndTurn();
+ else if ((hit == reinforcement) && reinforcement.hit(x, y))
+ unitDock.toggle();
+ else if ((hit == unitDock) && unitDock.hit(x, y))
+ ctrl.setState(StateType.ENTRY);
+
+ hit = null;
+
+ return true;
+ }
+
+ public void animate(float delta)
+ {
+ unitDock.animate(delta);
+ }
+
+ @Override
+ public void draw(Batch batch)
+ {
+ flag.draw(batch);
+ turns.draw(batch);
+ aps.draw(batch);
+ reinforcement.draw(batch);
+ unitDock.draw(batch);
+ }
+
+ @Override
+ public void drawDebug(ShapeRenderer debugShapes)
+ {
+ flag.drawDebug(debugShapes);
+ turns.drawDebug(debugShapes);
+ aps.drawDebug(debugShapes);
+ reinforcement.drawDebug(debugShapes);
+ unitDock.drawDebug(debugShapes);
+ }
+}