summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/game
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/game')
-rw-r--r--core/src/ch/asynk/tankontank/game/hud/Msg.java93
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);
}
}