From 8c4e1b6e2c1e013de9ee4ff079cc61dbf3f0591c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Sat, 27 Dec 2014 17:15:28 +0100 Subject: move base ui widgets into core/src/ch/asynk/tankontank/ui --- core/src/ch/asynk/tankontank/game/Battle.java | 2 +- core/src/ch/asynk/tankontank/game/Ctrl.java | 2 +- core/src/ch/asynk/tankontank/game/Hud.java | 8 +- core/src/ch/asynk/tankontank/game/Map.java | 2 +- .../game/battles/BattleCounterAttack.java | 2 +- .../game/battles/BattleFrontalAssault.java | 2 +- .../tankontank/game/battles/BattleHeadToHead.java | 2 +- .../tankontank/game/battles/BattleLastStand.java | 2 +- .../tankontank/game/battles/BattleNightAction.java | 2 +- .../game/battles/BattleStabToTheFlank.java | 2 +- .../asynk/tankontank/game/battles/BattleTest.java | 2 +- .../asynk/tankontank/game/hud/ActionButtons.java | 3 + core/src/ch/asynk/tankontank/game/hud/Bg.java | 28 --- .../ch/asynk/tankontank/game/hud/Engagement.java | 4 + core/src/ch/asynk/tankontank/game/hud/Label.java | 70 ------- .../ch/asynk/tankontank/game/hud/LabelImage.java | 72 ------- .../ch/asynk/tankontank/game/hud/LabelStack.java | 72 ------- core/src/ch/asynk/tankontank/game/hud/Msg.java | 79 ------- .../src/ch/asynk/tankontank/game/hud/OkCancel.java | 121 ----------- core/src/ch/asynk/tankontank/game/hud/Patch.java | 28 --- .../ch/asynk/tankontank/game/hud/PlayerInfo.java | 2 + .../src/ch/asynk/tankontank/game/hud/Position.java | 230 --------------------- .../ch/asynk/tankontank/game/hud/Statistics.java | 4 + .../src/ch/asynk/tankontank/game/hud/UnitDock.java | 2 + core/src/ch/asynk/tankontank/game/hud/Widget.java | 93 --------- core/src/ch/asynk/tankontank/ui/Bg.java | 28 +++ core/src/ch/asynk/tankontank/ui/Label.java | 70 +++++++ core/src/ch/asynk/tankontank/ui/LabelImage.java | 72 +++++++ core/src/ch/asynk/tankontank/ui/LabelStack.java | 72 +++++++ core/src/ch/asynk/tankontank/ui/Msg.java | 79 +++++++ core/src/ch/asynk/tankontank/ui/OkCancel.java | 121 +++++++++++ core/src/ch/asynk/tankontank/ui/Patch.java | 28 +++ core/src/ch/asynk/tankontank/ui/Position.java | 230 +++++++++++++++++++++ core/src/ch/asynk/tankontank/ui/Widget.java | 93 +++++++++ 34 files changed, 822 insertions(+), 807 deletions(-) delete mode 100644 core/src/ch/asynk/tankontank/game/hud/Bg.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/Label.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/LabelImage.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/LabelStack.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/Msg.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/OkCancel.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/Patch.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/Position.java delete mode 100644 core/src/ch/asynk/tankontank/game/hud/Widget.java create mode 100644 core/src/ch/asynk/tankontank/ui/Bg.java create mode 100644 core/src/ch/asynk/tankontank/ui/Label.java create mode 100644 core/src/ch/asynk/tankontank/ui/LabelImage.java create mode 100644 core/src/ch/asynk/tankontank/ui/LabelStack.java create mode 100644 core/src/ch/asynk/tankontank/ui/Msg.java create mode 100644 core/src/ch/asynk/tankontank/ui/OkCancel.java create mode 100644 core/src/ch/asynk/tankontank/ui/Patch.java create mode 100644 core/src/ch/asynk/tankontank/ui/Position.java create mode 100644 core/src/ch/asynk/tankontank/ui/Widget.java diff --git a/core/src/ch/asynk/tankontank/game/Battle.java b/core/src/ch/asynk/tankontank/game/Battle.java index 0c2c3e3..9f69d4c 100644 --- a/core/src/ch/asynk/tankontank/game/Battle.java +++ b/core/src/ch/asynk/tankontank/game/Battle.java @@ -3,7 +3,7 @@ package ch.asynk.tankontank.game; import ch.asynk.tankontank.game.Zone; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Player; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; public interface Battle { diff --git a/core/src/ch/asynk/tankontank/game/Ctrl.java b/core/src/ch/asynk/tankontank/game/Ctrl.java index b150cd9..8d73df9 100644 --- a/core/src/ch/asynk/tankontank/game/Ctrl.java +++ b/core/src/ch/asynk/tankontank/game/Ctrl.java @@ -3,7 +3,7 @@ package ch.asynk.tankontank.game; import com.badlogic.gdx.utils.Disposable; import ch.asynk.tankontank.TankOnTank; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.game.State.StateType; import ch.asynk.tankontank.game.states.StateSelect; import ch.asynk.tankontank.game.states.StateMove; diff --git a/core/src/ch/asynk/tankontank/game/Hud.java b/core/src/ch/asynk/tankontank/game/Hud.java index 6d8961a..6b7b8a6 100644 --- a/core/src/ch/asynk/tankontank/game/Hud.java +++ b/core/src/ch/asynk/tankontank/game/Hud.java @@ -13,14 +13,14 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import ch.asynk.tankontank.engine.gfx.Animation; import ch.asynk.tankontank.game.State.StateType; -import ch.asynk.tankontank.game.hud.Position; -import ch.asynk.tankontank.game.hud.Msg; +import ch.asynk.tankontank.ui.Position; +import ch.asynk.tankontank.ui.Msg; +import ch.asynk.tankontank.ui.OkCancel; +import ch.asynk.tankontank.ui.Widget; 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.game.hud.Widget; import ch.asynk.tankontank.TankOnTank; diff --git a/core/src/ch/asynk/tankontank/game/Map.java b/core/src/ch/asynk/tankontank/game/Map.java index 6ccffce..2cd2f71 100644 --- a/core/src/ch/asynk/tankontank/game/Map.java +++ b/core/src/ch/asynk/tankontank/game/Map.java @@ -26,7 +26,7 @@ import ch.asynk.tankontank.engine.gfx.animations.DestroyAnimation; import ch.asynk.tankontank.engine.gfx.animations.SoundAnimation; import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; public abstract class Map extends Board { diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleCounterAttack.java b/core/src/ch/asynk/tankontank/game/battles/BattleCounterAttack.java index 324f187..646e31d 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleCounterAttack.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleCounterAttack.java @@ -7,7 +7,7 @@ import ch.asynk.tankontank.game.Map; import ch.asynk.tankontank.game.Zone; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; public class BattleCounterAttack extends BattleCommon diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleFrontalAssault.java b/core/src/ch/asynk/tankontank/game/battles/BattleFrontalAssault.java index 653052b..861e93e 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleFrontalAssault.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleFrontalAssault.java @@ -9,7 +9,7 @@ import ch.asynk.tankontank.game.HexSet; import ch.asynk.tankontank.game.Zone; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; public class BattleFrontalAssault extends BattleCommon diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java b/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java index 52868a2..ed25465 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleHeadToHead.java @@ -9,7 +9,7 @@ import ch.asynk.tankontank.game.Hex; import ch.asynk.tankontank.game.HexSet; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; public class BattleHeadToHead extends BattleCommon diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleLastStand.java b/core/src/ch/asynk/tankontank/game/battles/BattleLastStand.java index 234ceed..e284ab3 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleLastStand.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleLastStand.java @@ -9,7 +9,7 @@ import ch.asynk.tankontank.game.Hex; import ch.asynk.tankontank.game.HexSet; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; public class BattleLastStand extends BattleCommon diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleNightAction.java b/core/src/ch/asynk/tankontank/game/battles/BattleNightAction.java index e712e65..8a942e9 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleNightAction.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleNightAction.java @@ -9,7 +9,7 @@ import ch.asynk.tankontank.game.Hex; import ch.asynk.tankontank.game.HexSet; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; import ch.asynk.tankontank.engine.Meteorology; diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleStabToTheFlank.java b/core/src/ch/asynk/tankontank/game/battles/BattleStabToTheFlank.java index 1f9ef72..91d2ced 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleStabToTheFlank.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleStabToTheFlank.java @@ -9,7 +9,7 @@ import ch.asynk.tankontank.game.Hex; import ch.asynk.tankontank.game.HexSet; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; public class BattleStabToTheFlank extends BattleCommon diff --git a/core/src/ch/asynk/tankontank/game/battles/BattleTest.java b/core/src/ch/asynk/tankontank/game/battles/BattleTest.java index ebeea53..f0128f7 100644 --- a/core/src/ch/asynk/tankontank/game/battles/BattleTest.java +++ b/core/src/ch/asynk/tankontank/game/battles/BattleTest.java @@ -9,7 +9,7 @@ import ch.asynk.tankontank.game.HexSet; import ch.asynk.tankontank.game.Zone; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Unit.UnitId; -import ch.asynk.tankontank.game.hud.Position; +import ch.asynk.tankontank.ui.Position; import ch.asynk.tankontank.engine.Orientation; public class BattleTest extends BattleCommon diff --git a/core/src/ch/asynk/tankontank/game/hud/ActionButtons.java b/core/src/ch/asynk/tankontank/game/hud/ActionButtons.java index d943ae8..ff9034e 100644 --- a/core/src/ch/asynk/tankontank/game/hud/ActionButtons.java +++ b/core/src/ch/asynk/tankontank/game/hud/ActionButtons.java @@ -7,6 +7,9 @@ import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import ch.asynk.tankontank.game.Ctrl; import ch.asynk.tankontank.game.State.StateType; +import ch.asynk.tankontank.ui.Widget; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Position; public class ActionButtons extends Widget { diff --git a/core/src/ch/asynk/tankontank/game/hud/Bg.java b/core/src/ch/asynk/tankontank/game/hud/Bg.java deleted file mode 100644 index 8e0bc4e..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/Bg.java +++ /dev/null @@ -1,28 +0,0 @@ -package ch.asynk.tankontank.game.hud; - -import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.TextureRegion; - -public class Bg extends Widget -{ - private TextureRegion region; - - public Bg(TextureRegion region) - { - super(); - this.region = region; - setPosition(0, 0, region.getRegionWidth(), region.getRegionHeight()); - } - - @Override - public void dispose() - { - } - - @Override - public void draw(Batch batch) - { - if (!visible) return; - batch.draw(region, rect.x, rect.y, rect.width, rect.height); - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/Engagement.java b/core/src/ch/asynk/tankontank/game/hud/Engagement.java index 63facca..9a70688 100644 --- a/core/src/ch/asynk/tankontank/game/hud/Engagement.java +++ b/core/src/ch/asynk/tankontank/game/hud/Engagement.java @@ -10,6 +10,10 @@ import ch.asynk.tankontank.game.Map; import ch.asynk.tankontank.game.Army; import ch.asynk.tankontank.engine.gfx.Animation; import ch.asynk.tankontank.engine.gfx.animations.DiceAnimation; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Label; +import ch.asynk.tankontank.ui.Patch; +import ch.asynk.tankontank.ui.Position; public class Engagement extends Patch implements Animation { diff --git a/core/src/ch/asynk/tankontank/game/hud/Label.java b/core/src/ch/asynk/tankontank/game/hud/Label.java deleted file mode 100644 index a2cbbf4..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/Label.java +++ /dev/null @@ -1,70 +0,0 @@ -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.BitmapFont.TextBounds; - -public class Label extends Widget -{ - private BitmapFont font; - private float dx; - private float dy; - protected String text; - - public Label(BitmapFont font) - { - this(font, 0f); - } - - public Label(BitmapFont font, float padding) - { - this(font, padding, Position.MIDDLE_CENTER); - } - - public Label(BitmapFont font, float padding, Position position) - { - super(); - this.font = font; - this.padding = padding; - this.position = position; - } - - @Override - public void dispose() - { - } - - @Override - public void translate(float dx, float dy) - { - setPosition((rect.x + dx), (rect.y + dy)); - } - - @Override - public void setPosition(float x, float y) - { - TextBounds b = font.getMultiLineBounds((text == null) ? "" : text); - setPosition(x, y, (b.width + (2 * padding)), (b.height + (2 * padding))); - this.dx = (x + padding); - this.dy = (y + padding + b.height); - } - - public void write(String text) - { - this.text = text; - setPosition(position); - } - - public void write(String text, float x, float y) - { - this.text = text; - setPosition(x, y); - } - - @Override - public void draw(Batch batch) - { - if (!visible) return; - font.drawMultiLine(batch, text, dx, dy); - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/LabelImage.java b/core/src/ch/asynk/tankontank/game/hud/LabelImage.java deleted file mode 100644 index 832c859..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/LabelImage.java +++ /dev/null @@ -1,72 +0,0 @@ -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.TextureRegion; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; - -public class LabelImage extends Bg -{ - private Label label; - - public LabelImage(TextureRegion region, BitmapFont font) - { - this(region, font, 0f); - } - - public LabelImage(TextureRegion region, BitmapFont font, float padding) - { - this(region, font, padding, Position.MIDDLE_CENTER); - } - - public LabelImage(TextureRegion region, BitmapFont font, float padding, Position position) - { - super(region); - this.label = new Label(font, padding, position); - } - - @Override - public void dispose() - { - label.dispose(); - } - - @Override - public void translate(float dx, float dy) - { - super.translate(dx, dy); - label.translate(dx, dy); - } - - public void setPosition(float x, float y) - { - super.setPosition(x, y); - label.setPosition(x, y); - } - - public void setLabelPosition(Position position) - { - label.setPosition(position, this); - } - - public void write(String text) - { - this.label.write(text); - } - - @Override - public void draw(Batch batch) - { - if (!visible) return; - super.draw(batch); - label.draw(batch); - } - - @Override - public void drawDebug(ShapeRenderer shapes) - { - if (!visible) return; - super.drawDebug(shapes); - label.drawDebug(shapes); - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/LabelStack.java b/core/src/ch/asynk/tankontank/game/hud/LabelStack.java deleted file mode 100644 index cbdcacf..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/LabelStack.java +++ /dev/null @@ -1,72 +0,0 @@ -package ch.asynk.tankontank.game.hud; - -import java.util.ArrayDeque; - -import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.BitmapFont; - -import ch.asynk.tankontank.engine.gfx.Animation; - -public class LabelStack extends Label implements Animation -{ - class MsgInfo - { - String text; - float duration; - Position position; - MsgInfo(String text, float duration, Position position) - { - this.text = text; - this.duration = duration; - this.position = position; - } - } - - private float duration; - private float elapsed; - private ArrayDeque stack; - - public LabelStack(BitmapFont font, float padding) - { - super(font, padding); - this.visible = false; - this.stack = new ArrayDeque(); - } - - public void pushWrite(String text, float duration, Position position) - { - if (visible) - stack.push(new MsgInfo(text, duration, position)); - else - write(text, duration, position); - } - - public void write(String text, float duration, Position position) - { - this.position = position; - write(text, duration); - } - - public void write(String text, float duration) - { - this.duration = duration; - this.visible = true; - this.elapsed = 0f; - write(text); - } - - @Override - public boolean animate(float delta) - { - if (!visible) return true; - elapsed += delta; - if (elapsed >= duration) { - visible = false; - if (stack.size() > 0) { - MsgInfo info = stack.pop(); - write(info.text, info.duration, info.position); - } - } - return false; - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/Msg.java b/core/src/ch/asynk/tankontank/game/hud/Msg.java deleted file mode 100644 index 2df6957..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/Msg.java +++ /dev/null @@ -1,79 +0,0 @@ -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.glutils.ShapeRenderer; - -public class Msg extends Patch -{ - private LabelStack label; - - public Msg(BitmapFont font, TextureAtlas atlas) - { - super(atlas.createPatch("typewriter")); - label = new LabelStack(font, 20f); - } - - @Override - public void dispose() - { - super.dispose(); - label.dispose(); - } - - public void updatePosition() - { - if (!visible) return; - float dx = (position.getX(rect.width) - rect.x); - float dy = (position.getY(rect.height) - rect.y); - translate(dx, dy); - label.translate(dx, dy); - } - - public void write(String text, float duration) - { - label.write(text, duration); - resize(); - } - - public void write(String text, float duration, Position position) - { - this.position = position; - label.write(text, duration, position); - resize(); - } - - public void pushWrite(String text, float duration, Position position) - { - this.position = position; - label.pushWrite(text, duration, position); - resize(); - } - - private void resize() - { - setPosition(label.getX(), label.getY(), label.getWidth(), label.getHeight()); - } - - public boolean animate(float delta) - { - return label.animate(delta); - } - - @Override - public void draw(Batch batch) - { - if (!label.visible) return; - super.draw(batch); - label.draw(batch); - } - - @Override - public void drawDebug(ShapeRenderer shapes) - { - if (!label.visible) return; - super.drawDebug(shapes); - label.drawDebug(shapes); - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/OkCancel.java b/core/src/ch/asynk/tankontank/game/hud/OkCancel.java deleted file mode 100644 index f48bcd4..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/OkCancel.java +++ /dev/null @@ -1,121 +0,0 @@ -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.glutils.ShapeRenderer; - -public class OkCancel extends Patch -{ - public static int PADDING = 20; - public static int VSPACING = 10; - public static int HSPACING = 10; - - public boolean ok; - protected Label label; - protected Bg okBtn; - protected Bg cancelBtn; - public Action action; - - public enum Action - { - EXIT_BOARD, - ABORT_TURN, - END_TURN, - END_DEPLOYMENT, - } - - public OkCancel(BitmapFont font, TextureAtlas atlas) - { - super(atlas.createPatch("typewriter")); - this.label = new Label(font); - this.okBtn = new Bg(atlas.findRegion("ok")); - this.cancelBtn = new Bg(atlas.findRegion("cancel")); - this.visible = false; - } - - public void updatePosition() - { - if (!visible) return; - float dx = (position.getX(rect.width) - rect.x); - float dy = (position.getY(rect.height) - rect.y); - translate(dx, dy); - label.translate(dx, dy); - okBtn.translate(dx, dy); - cancelBtn.translate(dx, dy); - } - - public void show(String msg, Action action) - { - show(msg, action, Position.MIDDLE_CENTER); - } - - public void show(String msg, Action action, Position position) - { - this.action = action; - - label.write(msg); - - float height = (label.getHeight() + okBtn.getHeight() + (2 * PADDING) + (2 * VSPACING)); - float width = (label.getWidth() + (2 * PADDING)); - float w2 = (okBtn.getWidth() + cancelBtn.getWidth() + (2 * PADDING) + (1 * HSPACING)); - if (w2 > width) - width = w2; - float x = position.getX(width); - float y = position.getY(height); - setPosition(x, y, width, height); - - okBtn.setPosition((x + width - okBtn.getWidth() - PADDING), (y + PADDING)); - cancelBtn.setPosition((okBtn.getX() - cancelBtn.getWidth() - HSPACING), okBtn.getY()); - label.setPosition((x + PADDING), (y + PADDING + okBtn.getHeight() + VSPACING)); - cancelBtn.visible = true; - visible = true; - ok = false; - } - - public void noCancel() - { - cancelBtn.visible = false; - } - - public boolean hit(float x, float y) - { - if (okBtn.hit(x, y)) { - ok = true; - return true; - } else if (cancelBtn.hit(x, y)) { - ok = false; - return true; - } - return false; - } - - @Override - public void dispose() - { - super.dispose(); - label.dispose(); - okBtn.dispose(); - cancelBtn.dispose(); - } - - @Override - public void draw(Batch batch) - { - if (!visible) return; - super.draw(batch); - label.draw(batch); - okBtn.draw(batch); - cancelBtn.draw(batch); - } - - @Override - public void drawDebug(ShapeRenderer shapes) - { - if (!visible) return; - super.drawDebug(shapes); - label.drawDebug(shapes); - okBtn.drawDebug(shapes); - cancelBtn.drawDebug(shapes); - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/Patch.java b/core/src/ch/asynk/tankontank/game/hud/Patch.java deleted file mode 100644 index 4ea0764..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/Patch.java +++ /dev/null @@ -1,28 +0,0 @@ -package ch.asynk.tankontank.game.hud; - -import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.NinePatch; - -public class Patch extends Widget -{ - private NinePatch patch; - - public Patch(NinePatch patch) - { - super(); - this.patch = patch; - setPosition(0, 0, patch.getTotalWidth(), patch.getTotalHeight()); - } - - @Override - public void dispose() - { - } - - @Override - public void draw(Batch batch) - { - if (!visible) return; - patch.draw(batch, rect.x, rect.y, rect.width, rect.height); - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java b/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java index d858d7d..6125517 100644 --- a/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java +++ b/core/src/ch/asynk/tankontank/game/hud/PlayerInfo.java @@ -17,6 +17,8 @@ import ch.asynk.tankontank.game.Hud; import ch.asynk.tankontank.game.Army; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.Player; +import ch.asynk.tankontank.ui.LabelImage; +import ch.asynk.tankontank.ui.Position; public class PlayerInfo implements Disposable, Drawable, Animation { diff --git a/core/src/ch/asynk/tankontank/game/hud/Position.java b/core/src/ch/asynk/tankontank/game/hud/Position.java deleted file mode 100644 index 6f8e520..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/Position.java +++ /dev/null @@ -1,230 +0,0 @@ -package ch.asynk.tankontank.game.hud; - -import com.badlogic.gdx.Gdx; -import ch.asynk.tankontank.game.Hud; - -public enum Position -{ - TOP_LEFT, - TOP_RIGHT, - TOP_CENTER, - MIDDLE_LEFT, - MIDDLE_RIGHT, - MIDDLE_CENTER, - BOTTOM_LEFT, - BOTTOM_RIGHT, - BOTTOM_CENTER; - - public Position verticalMirror() - { - Position p = this; - switch(this) { - case TOP_LEFT: - p = TOP_RIGHT; - break; - case MIDDLE_LEFT: - p = MIDDLE_RIGHT; - break; - case BOTTOM_LEFT: - p = BOTTOM_RIGHT; - break; - case TOP_RIGHT: - p = TOP_LEFT; - break; - case MIDDLE_RIGHT: - p = MIDDLE_LEFT; - break; - case BOTTOM_RIGHT: - p = BOTTOM_LEFT; - break; - } - return p; - } - - public Position horizontalMirror() - { - Position p = this; - switch(this) { - case TOP_LEFT: - p = BOTTOM_LEFT; - break; - case TOP_CENTER: - p = BOTTOM_CENTER; - break; - case TOP_RIGHT: - p = BOTTOM_RIGHT; - break; - case BOTTOM_LEFT: - p = TOP_LEFT; - break; - case BOTTOM_CENTER: - p = TOP_CENTER; - break; - case BOTTOM_RIGHT: - p = TOP_RIGHT; - break; - } - return p; - } - - public boolean isLeft() - { - boolean r = false; - switch(this) { - case TOP_LEFT: - case MIDDLE_LEFT: - case BOTTOM_LEFT: - r = true; - break; - default: - r = false; - break; - } - return r; - } - - public boolean isRight() - { - boolean r = false; - switch(this) { - case TOP_RIGHT: - case MIDDLE_RIGHT: - case BOTTOM_RIGHT: - r = true; - break; - default: - r = false; - break; - } - return r; - } - - public boolean isCenter() - { - boolean r = false; - switch(this) { - case TOP_CENTER: - case MIDDLE_CENTER: - case BOTTOM_CENTER: - r = true; - break; - default: - r = false; - break; - } - return r; - } - - private static int hudWidth = Gdx.graphics.getWidth(); - private static int hudHeight = Gdx.graphics.getHeight(); - - public static void update(int width, int height) - { - hudWidth = width; - hudHeight = height; - } - - public float getX(float width) - { - float x; - switch(this) { - case TOP_LEFT: - case MIDDLE_LEFT: - case BOTTOM_LEFT: - x = Hud.OFFSET; - break; - case TOP_CENTER: - case MIDDLE_CENTER: - case BOTTOM_CENTER: - x = ((hudWidth - width) / 2); - break; - case TOP_RIGHT: - case MIDDLE_RIGHT: - case BOTTOM_RIGHT: - x = (hudWidth - width - Hud.OFFSET); - break; - default: - x = ((hudWidth - width) / 2); - break; - } - return x; - } - - public float getY(float height) - { - float y; - switch(this) { - case TOP_LEFT: - case TOP_CENTER: - case TOP_RIGHT: - y = (hudHeight - height - Hud.OFFSET); - break; - case MIDDLE_LEFT: - case MIDDLE_CENTER: - case MIDDLE_RIGHT: - y = ((hudHeight - height) / 2); - break; - case BOTTOM_LEFT: - case BOTTOM_CENTER: - case BOTTOM_RIGHT: - y = Hud.OFFSET; - break; - default: - y = ((hudHeight - height) / 2); - break; - } - return y; - } - - public float getX(Widget widget, float width) - { - float x; - switch(this) { - case TOP_LEFT: - case MIDDLE_LEFT: - case BOTTOM_LEFT: - x = widget.getX(); - break; - case TOP_CENTER: - case MIDDLE_CENTER: - case BOTTOM_CENTER: - x = (widget.getX() + ((widget.getWidth() - width) / 2)); - break; - case TOP_RIGHT: - case MIDDLE_RIGHT: - case BOTTOM_RIGHT: - x = (widget.getX() + widget.getWidth() - width); - break; - default: - x = (widget.getX() + ((widget.getWidth() - width) / 2)); - break; - } - return x; - } - - public float getY(Widget widget, float height) - { - float y; - switch(this) { - case TOP_LEFT: - case TOP_CENTER: - case TOP_RIGHT: - y = (widget.getY() + widget.getHeight() - height); - break; - case MIDDLE_LEFT: - case MIDDLE_CENTER: - case MIDDLE_RIGHT: - y = (widget.getY() + ((widget.getHeight() - height) / 2)); - break; - case BOTTOM_LEFT: - case BOTTOM_CENTER: - case BOTTOM_RIGHT: - y = widget.getY(); - break; - default: - y = (widget.getY() + ((widget.getHeight() - height) / 2)); - break; - } - return y; - } -} diff --git a/core/src/ch/asynk/tankontank/game/hud/Statistics.java b/core/src/ch/asynk/tankontank/game/hud/Statistics.java index 6a91161..d481fae 100644 --- a/core/src/ch/asynk/tankontank/game/hud/Statistics.java +++ b/core/src/ch/asynk/tankontank/game/hud/Statistics.java @@ -6,6 +6,10 @@ import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import ch.asynk.tankontank.game.Player; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Label; +import ch.asynk.tankontank.ui.Patch; +import ch.asynk.tankontank.ui.Position; public class Statistics extends Patch { diff --git a/core/src/ch/asynk/tankontank/game/hud/UnitDock.java b/core/src/ch/asynk/tankontank/game/hud/UnitDock.java index 4f3dfaf..e0b997b 100644 --- a/core/src/ch/asynk/tankontank/game/hud/UnitDock.java +++ b/core/src/ch/asynk/tankontank/game/hud/UnitDock.java @@ -13,6 +13,8 @@ import ch.asynk.tankontank.engine.Orientation; import ch.asynk.tankontank.game.Ctrl; import ch.asynk.tankontank.game.Unit; import ch.asynk.tankontank.game.UnitList; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Position; public class UnitDock extends Bg implements Animation { diff --git a/core/src/ch/asynk/tankontank/game/hud/Widget.java b/core/src/ch/asynk/tankontank/game/hud/Widget.java deleted file mode 100644 index 08d90f5..0000000 --- a/core/src/ch/asynk/tankontank/game/hud/Widget.java +++ /dev/null @@ -1,93 +0,0 @@ -package ch.asynk.tankontank.game.hud; - -import com.badlogic.gdx.utils.Disposable; -import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; - -import ch.asynk.tankontank.engine.gfx.Drawable; - -public abstract class Widget implements Disposable, Drawable -{ - public boolean blocked; - public boolean visible; - protected float padding; - protected Rectangle rect; - protected Position position; - protected Widget parent; - - protected Widget() - { - this.parent = null; - this.blocked = false; - this.visible = true; - this.padding = 0f; - this.rect = new Rectangle(0, 0, 0, 0); - this.position = Position.MIDDLE_CENTER; - } - - public float getX() { return rect.x; } - public float getY() { return rect.y; } - public float getWidth() { return rect.width; } - public float getHeight() { return rect.height; } - - public void translate(float dx, float dy) - { - rect.x += dx; - rect.y += dy; - } - - public void setPosition(Rectangle r) - { - rect.set(r); - } - - public void setPosition(float x, float y) - { - rect.x = x; - rect.y = y; - } - - public void setPosition(float x, float y, float w, float h) - { - rect.set(x, y, w, h); - } - - public void setPosition(Position position) - { - this.position = position; - setParent(this.parent); - } - - public void setPosition(Position position, Widget parent) - { - this.position = position; - setParent(parent); - } - - public void setParent(Widget parent) - { - this.parent = parent; - if (parent == null) { - rect.x = position.getX(rect.width); - rect.y = position.getY(rect.height); - } else { - rect.x = position.getX(parent, rect.width); - rect.y = position.getY(parent, rect.height); - } - // might trigger something if overriden - setPosition(rect.x, rect.y); - } - - public boolean hit(float x, float y) - { - if (blocked || !visible) return false; - return rect.contains(x, y); - } - - @Override - public void drawDebug(ShapeRenderer shapes) - { - if (!visible) return; - shapes.rect(rect.x, rect.y, rect.width, rect.height); - } -} diff --git a/core/src/ch/asynk/tankontank/ui/Bg.java b/core/src/ch/asynk/tankontank/ui/Bg.java new file mode 100644 index 0000000..7a87c26 --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Bg.java @@ -0,0 +1,28 @@ +package ch.asynk.tankontank.ui; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; + +public class Bg extends Widget +{ + private TextureRegion region; + + public Bg(TextureRegion region) + { + super(); + this.region = region; + setPosition(0, 0, region.getRegionWidth(), region.getRegionHeight()); + } + + @Override + public void dispose() + { + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + batch.draw(region, rect.x, rect.y, rect.width, rect.height); + } +} diff --git a/core/src/ch/asynk/tankontank/ui/Label.java b/core/src/ch/asynk/tankontank/ui/Label.java new file mode 100644 index 0000000..eae4b15 --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Label.java @@ -0,0 +1,70 @@ +package ch.asynk.tankontank.ui; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds; + +public class Label extends Widget +{ + private BitmapFont font; + private float dx; + private float dy; + protected String text; + + public Label(BitmapFont font) + { + this(font, 0f); + } + + public Label(BitmapFont font, float padding) + { + this(font, padding, Position.MIDDLE_CENTER); + } + + public Label(BitmapFont font, float padding, Position position) + { + super(); + this.font = font; + this.padding = padding; + this.position = position; + } + + @Override + public void dispose() + { + } + + @Override + public void translate(float dx, float dy) + { + setPosition((rect.x + dx), (rect.y + dy)); + } + + @Override + public void setPosition(float x, float y) + { + TextBounds b = font.getMultiLineBounds((text == null) ? "" : text); + setPosition(x, y, (b.width + (2 * padding)), (b.height + (2 * padding))); + this.dx = (x + padding); + this.dy = (y + padding + b.height); + } + + public void write(String text) + { + this.text = text; + setPosition(position); + } + + public void write(String text, float x, float y) + { + this.text = text; + setPosition(x, y); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + font.drawMultiLine(batch, text, dx, dy); + } +} diff --git a/core/src/ch/asynk/tankontank/ui/LabelImage.java b/core/src/ch/asynk/tankontank/ui/LabelImage.java new file mode 100644 index 0000000..4f28924 --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/LabelImage.java @@ -0,0 +1,72 @@ +package ch.asynk.tankontank.ui; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +public class LabelImage extends Bg +{ + private Label label; + + public LabelImage(TextureRegion region, BitmapFont font) + { + this(region, font, 0f); + } + + public LabelImage(TextureRegion region, BitmapFont font, float padding) + { + this(region, font, padding, Position.MIDDLE_CENTER); + } + + public LabelImage(TextureRegion region, BitmapFont font, float padding, Position position) + { + super(region); + this.label = new Label(font, padding, position); + } + + @Override + public void dispose() + { + label.dispose(); + } + + @Override + public void translate(float dx, float dy) + { + super.translate(dx, dy); + label.translate(dx, dy); + } + + public void setPosition(float x, float y) + { + super.setPosition(x, y); + label.setPosition(x, y); + } + + public void setLabelPosition(Position position) + { + label.setPosition(position, this); + } + + public void write(String text) + { + this.label.write(text); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + label.draw(batch); + } + + @Override + public void drawDebug(ShapeRenderer shapes) + { + if (!visible) return; + super.drawDebug(shapes); + label.drawDebug(shapes); + } +} diff --git a/core/src/ch/asynk/tankontank/ui/LabelStack.java b/core/src/ch/asynk/tankontank/ui/LabelStack.java new file mode 100644 index 0000000..f730d0d --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/LabelStack.java @@ -0,0 +1,72 @@ +package ch.asynk.tankontank.ui; + +import java.util.ArrayDeque; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; + +import ch.asynk.tankontank.engine.gfx.Animation; + +public class LabelStack extends Label implements Animation +{ + class MsgInfo + { + String text; + float duration; + Position position; + MsgInfo(String text, float duration, Position position) + { + this.text = text; + this.duration = duration; + this.position = position; + } + } + + private float duration; + private float elapsed; + private ArrayDeque stack; + + public LabelStack(BitmapFont font, float padding) + { + super(font, padding); + this.visible = false; + this.stack = new ArrayDeque(); + } + + public void pushWrite(String text, float duration, Position position) + { + if (visible) + stack.push(new MsgInfo(text, duration, position)); + else + write(text, duration, position); + } + + public void write(String text, float duration, Position position) + { + this.position = position; + write(text, duration); + } + + public void write(String text, float duration) + { + this.duration = duration; + this.visible = true; + this.elapsed = 0f; + write(text); + } + + @Override + public boolean animate(float delta) + { + if (!visible) return true; + elapsed += delta; + if (elapsed >= duration) { + visible = false; + if (stack.size() > 0) { + MsgInfo info = stack.pop(); + write(info.text, info.duration, info.position); + } + } + return false; + } +} diff --git a/core/src/ch/asynk/tankontank/ui/Msg.java b/core/src/ch/asynk/tankontank/ui/Msg.java new file mode 100644 index 0000000..c2069b7 --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Msg.java @@ -0,0 +1,79 @@ +package ch.asynk.tankontank.ui; + +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.glutils.ShapeRenderer; + +public class Msg extends Patch +{ + private LabelStack label; + + public Msg(BitmapFont font, TextureAtlas atlas) + { + super(atlas.createPatch("typewriter")); + label = new LabelStack(font, 20f); + } + + @Override + public void dispose() + { + super.dispose(); + label.dispose(); + } + + public void updatePosition() + { + if (!visible) return; + float dx = (position.getX(rect.width) - rect.x); + float dy = (position.getY(rect.height) - rect.y); + translate(dx, dy); + label.translate(dx, dy); + } + + public void write(String text, float duration) + { + label.write(text, duration); + resize(); + } + + public void write(String text, float duration, Position position) + { + this.position = position; + label.write(text, duration, position); + resize(); + } + + public void pushWrite(String text, float duration, Position position) + { + this.position = position; + label.pushWrite(text, duration, position); + resize(); + } + + private void resize() + { + setPosition(label.getX(), label.getY(), label.getWidth(), label.getHeight()); + } + + public boolean animate(float delta) + { + return label.animate(delta); + } + + @Override + public void draw(Batch batch) + { + if (!label.visible) return; + super.draw(batch); + label.draw(batch); + } + + @Override + public void drawDebug(ShapeRenderer shapes) + { + if (!label.visible) return; + super.drawDebug(shapes); + label.drawDebug(shapes); + } +} diff --git a/core/src/ch/asynk/tankontank/ui/OkCancel.java b/core/src/ch/asynk/tankontank/ui/OkCancel.java new file mode 100644 index 0000000..4a8507f --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/OkCancel.java @@ -0,0 +1,121 @@ +package ch.asynk.tankontank.ui; + +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.glutils.ShapeRenderer; + +public class OkCancel extends Patch +{ + public static int PADDING = 20; + public static int VSPACING = 10; + public static int HSPACING = 10; + + public boolean ok; + protected Label label; + protected Bg okBtn; + protected Bg cancelBtn; + public Action action; + + public enum Action + { + EXIT_BOARD, + ABORT_TURN, + END_TURN, + END_DEPLOYMENT, + } + + public OkCancel(BitmapFont font, TextureAtlas atlas) + { + super(atlas.createPatch("typewriter")); + this.label = new Label(font); + this.okBtn = new Bg(atlas.findRegion("ok")); + this.cancelBtn = new Bg(atlas.findRegion("cancel")); + this.visible = false; + } + + public void updatePosition() + { + if (!visible) return; + float dx = (position.getX(rect.width) - rect.x); + float dy = (position.getY(rect.height) - rect.y); + translate(dx, dy); + label.translate(dx, dy); + okBtn.translate(dx, dy); + cancelBtn.translate(dx, dy); + } + + public void show(String msg, Action action) + { + show(msg, action, Position.MIDDLE_CENTER); + } + + public void show(String msg, Action action, Position position) + { + this.action = action; + + label.write(msg); + + float height = (label.getHeight() + okBtn.getHeight() + (2 * PADDING) + (2 * VSPACING)); + float width = (label.getWidth() + (2 * PADDING)); + float w2 = (okBtn.getWidth() + cancelBtn.getWidth() + (2 * PADDING) + (1 * HSPACING)); + if (w2 > width) + width = w2; + float x = position.getX(width); + float y = position.getY(height); + setPosition(x, y, width, height); + + okBtn.setPosition((x + width - okBtn.getWidth() - PADDING), (y + PADDING)); + cancelBtn.setPosition((okBtn.getX() - cancelBtn.getWidth() - HSPACING), okBtn.getY()); + label.setPosition((x + PADDING), (y + PADDING + okBtn.getHeight() + VSPACING)); + cancelBtn.visible = true; + visible = true; + ok = false; + } + + public void noCancel() + { + cancelBtn.visible = false; + } + + public boolean hit(float x, float y) + { + if (okBtn.hit(x, y)) { + ok = true; + return true; + } else if (cancelBtn.hit(x, y)) { + ok = false; + return true; + } + return false; + } + + @Override + public void dispose() + { + super.dispose(); + label.dispose(); + okBtn.dispose(); + cancelBtn.dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + label.draw(batch); + okBtn.draw(batch); + cancelBtn.draw(batch); + } + + @Override + public void drawDebug(ShapeRenderer shapes) + { + if (!visible) return; + super.drawDebug(shapes); + label.drawDebug(shapes); + okBtn.drawDebug(shapes); + cancelBtn.drawDebug(shapes); + } +} diff --git a/core/src/ch/asynk/tankontank/ui/Patch.java b/core/src/ch/asynk/tankontank/ui/Patch.java new file mode 100644 index 0000000..4056a3c --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Patch.java @@ -0,0 +1,28 @@ +package ch.asynk.tankontank.ui; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.NinePatch; + +public class Patch extends Widget +{ + private NinePatch patch; + + public Patch(NinePatch patch) + { + super(); + this.patch = patch; + setPosition(0, 0, patch.getTotalWidth(), patch.getTotalHeight()); + } + + @Override + public void dispose() + { + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + patch.draw(batch, rect.x, rect.y, rect.width, rect.height); + } +} diff --git a/core/src/ch/asynk/tankontank/ui/Position.java b/core/src/ch/asynk/tankontank/ui/Position.java new file mode 100644 index 0000000..f1708c6 --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Position.java @@ -0,0 +1,230 @@ +package ch.asynk.tankontank.ui; + +import com.badlogic.gdx.Gdx; +import ch.asynk.tankontank.game.Hud; + +public enum Position +{ + TOP_LEFT, + TOP_RIGHT, + TOP_CENTER, + MIDDLE_LEFT, + MIDDLE_RIGHT, + MIDDLE_CENTER, + BOTTOM_LEFT, + BOTTOM_RIGHT, + BOTTOM_CENTER; + + public Position verticalMirror() + { + Position p = this; + switch(this) { + case TOP_LEFT: + p = TOP_RIGHT; + break; + case MIDDLE_LEFT: + p = MIDDLE_RIGHT; + break; + case BOTTOM_LEFT: + p = BOTTOM_RIGHT; + break; + case TOP_RIGHT: + p = TOP_LEFT; + break; + case MIDDLE_RIGHT: + p = MIDDLE_LEFT; + break; + case BOTTOM_RIGHT: + p = BOTTOM_LEFT; + break; + } + return p; + } + + public Position horizontalMirror() + { + Position p = this; + switch(this) { + case TOP_LEFT: + p = BOTTOM_LEFT; + break; + case TOP_CENTER: + p = BOTTOM_CENTER; + break; + case TOP_RIGHT: + p = BOTTOM_RIGHT; + break; + case BOTTOM_LEFT: + p = TOP_LEFT; + break; + case BOTTOM_CENTER: + p = TOP_CENTER; + break; + case BOTTOM_RIGHT: + p = TOP_RIGHT; + break; + } + return p; + } + + public boolean isLeft() + { + boolean r = false; + switch(this) { + case TOP_LEFT: + case MIDDLE_LEFT: + case BOTTOM_LEFT: + r = true; + break; + default: + r = false; + break; + } + return r; + } + + public boolean isRight() + { + boolean r = false; + switch(this) { + case TOP_RIGHT: + case MIDDLE_RIGHT: + case BOTTOM_RIGHT: + r = true; + break; + default: + r = false; + break; + } + return r; + } + + public boolean isCenter() + { + boolean r = false; + switch(this) { + case TOP_CENTER: + case MIDDLE_CENTER: + case BOTTOM_CENTER: + r = true; + break; + default: + r = false; + break; + } + return r; + } + + private static int hudWidth = Gdx.graphics.getWidth(); + private static int hudHeight = Gdx.graphics.getHeight(); + + public static void update(int width, int height) + { + hudWidth = width; + hudHeight = height; + } + + public float getX(float width) + { + float x; + switch(this) { + case TOP_LEFT: + case MIDDLE_LEFT: + case BOTTOM_LEFT: + x = Hud.OFFSET; + break; + case TOP_CENTER: + case MIDDLE_CENTER: + case BOTTOM_CENTER: + x = ((hudWidth - width) / 2); + break; + case TOP_RIGHT: + case MIDDLE_RIGHT: + case BOTTOM_RIGHT: + x = (hudWidth - width - Hud.OFFSET); + break; + default: + x = ((hudWidth - width) / 2); + break; + } + return x; + } + + public float getY(float height) + { + float y; + switch(this) { + case TOP_LEFT: + case TOP_CENTER: + case TOP_RIGHT: + y = (hudHeight - height - Hud.OFFSET); + break; + case MIDDLE_LEFT: + case MIDDLE_CENTER: + case MIDDLE_RIGHT: + y = ((hudHeight - height) / 2); + break; + case BOTTOM_LEFT: + case BOTTOM_CENTER: + case BOTTOM_RIGHT: + y = Hud.OFFSET; + break; + default: + y = ((hudHeight - height) / 2); + break; + } + return y; + } + + public float getX(Widget widget, float width) + { + float x; + switch(this) { + case TOP_LEFT: + case MIDDLE_LEFT: + case BOTTOM_LEFT: + x = widget.getX(); + break; + case TOP_CENTER: + case MIDDLE_CENTER: + case BOTTOM_CENTER: + x = (widget.getX() + ((widget.getWidth() - width) / 2)); + break; + case TOP_RIGHT: + case MIDDLE_RIGHT: + case BOTTOM_RIGHT: + x = (widget.getX() + widget.getWidth() - width); + break; + default: + x = (widget.getX() + ((widget.getWidth() - width) / 2)); + break; + } + return x; + } + + public float getY(Widget widget, float height) + { + float y; + switch(this) { + case TOP_LEFT: + case TOP_CENTER: + case TOP_RIGHT: + y = (widget.getY() + widget.getHeight() - height); + break; + case MIDDLE_LEFT: + case MIDDLE_CENTER: + case MIDDLE_RIGHT: + y = (widget.getY() + ((widget.getHeight() - height) / 2)); + break; + case BOTTOM_LEFT: + case BOTTOM_CENTER: + case BOTTOM_RIGHT: + y = widget.getY(); + break; + default: + y = (widget.getY() + ((widget.getHeight() - height) / 2)); + break; + } + return y; + } +} diff --git a/core/src/ch/asynk/tankontank/ui/Widget.java b/core/src/ch/asynk/tankontank/ui/Widget.java new file mode 100644 index 0000000..e49833a --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Widget.java @@ -0,0 +1,93 @@ +package ch.asynk.tankontank.ui; + +import com.badlogic.gdx.utils.Disposable; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +import ch.asynk.tankontank.engine.gfx.Drawable; + +public abstract class Widget implements Disposable, Drawable +{ + public boolean blocked; + public boolean visible; + protected float padding; + protected Rectangle rect; + protected Position position; + protected Widget parent; + + protected Widget() + { + this.parent = null; + this.blocked = false; + this.visible = true; + this.padding = 0f; + this.rect = new Rectangle(0, 0, 0, 0); + this.position = Position.MIDDLE_CENTER; + } + + public float getX() { return rect.x; } + public float getY() { return rect.y; } + public float getWidth() { return rect.width; } + public float getHeight() { return rect.height; } + + public void translate(float dx, float dy) + { + rect.x += dx; + rect.y += dy; + } + + public void setPosition(Rectangle r) + { + rect.set(r); + } + + public void setPosition(float x, float y) + { + rect.x = x; + rect.y = y; + } + + public void setPosition(float x, float y, float w, float h) + { + rect.set(x, y, w, h); + } + + public void setPosition(Position position) + { + this.position = position; + setParent(this.parent); + } + + public void setPosition(Position position, Widget parent) + { + this.position = position; + setParent(parent); + } + + public void setParent(Widget parent) + { + this.parent = parent; + if (parent == null) { + rect.x = position.getX(rect.width); + rect.y = position.getY(rect.height); + } else { + rect.x = position.getX(parent, rect.width); + rect.y = position.getY(parent, rect.height); + } + // might trigger something if overriden + setPosition(rect.x, rect.y); + } + + public boolean hit(float x, float y) + { + if (blocked || !visible) return false; + return rect.contains(x, y); + } + + @Override + public void drawDebug(ShapeRenderer shapes) + { + if (!visible) return; + shapes.rect(rect.x, rect.y, rect.width, rect.height); + } +} -- cgit v1.1-2-g2b99