diff options
-rw-r--r-- | core/src/ch/asynk/tankontank/game/hud/Msg.java | 93 |
1 files changed, 34 insertions, 59 deletions
diff --git a/core/src/ch/asynk/tankontank/game/hud/Msg.java b/core/src/ch/asynk/tankontank/game/hud/Msg.java index ce1bfa1..2df6957 100644 --- a/core/src/ch/asynk/tankontank/game/hud/Msg.java +++ b/core/src/ch/asynk/tankontank/game/hud/Msg.java @@ -1,104 +1,79 @@ 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 com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import ch.asynk.tankontank.engine.gfx.Animation; - -public class Msg extends Label implements Animation +public class Msg extends Patch { - 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 Patch bg; - private float duration; - private float elapsed; - private ArrayDeque<MsgInfo> stack; + private LabelStack label; public Msg(BitmapFont font, TextureAtlas atlas) { - super(font, 20f); - this.visible = false; - this.bg = new Patch(atlas.createPatch("typewriter")); - this.stack = new ArrayDeque<MsgInfo>(); + super(atlas.createPatch("typewriter")); + label = new LabelStack(font, 20f); } @Override public void dispose() { super.dispose(); - bg.dispose(); + label.dispose(); } - public void pushWrite(String text, float duration, Position position) + public void updatePosition() { - if (visible) - stack.push(new MsgInfo(text, duration, position)); - else - write(text, duration, position); + 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.duration = duration; - this.visible = true; - this.elapsed = 0f; - write(text); - setPosition(position.getX(getWidth()), position.getY(getHeight())); - bg.setPosition(rect); + this.position = position; + label.write(text, duration, position); + resize(); } - public void write(String text, float duration) + public void pushWrite(String text, float duration, Position position) { - this.duration = duration; - this.visible = true; - this.elapsed = 0f; - write(text); - bg.setPosition(rect); + this.position = position; + label.pushWrite(text, duration, position); + resize(); + } + + private void resize() + { + setPosition(label.getX(), label.getY(), label.getWidth(), label.getHeight()); } - @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; + return label.animate(delta); } @Override public void draw(Batch batch) { - if (!visible) return; - bg.draw(batch); + if (!label.visible) return; super.draw(batch); + label.draw(batch); } @Override public void drawDebug(ShapeRenderer shapes) { - if (!visible) return; + if (!label.visible) return; super.drawDebug(shapes); - bg.drawDebug(shapes); + label.drawDebug(shapes); } } |