summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/rustanddust/ui/LabelStack.java
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2015-07-19 13:20:33 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2015-07-19 13:20:33 +0200
commitde0463bcf0f76ef8b07f2719679c9e0d72745c5d (patch)
tree9a33df947ceeea16a3e20b400585b1d3c304e77e /core/src/ch/asynk/rustanddust/ui/LabelStack.java
parente66f9f2a61d3dab4545e996046486de0d44e2901 (diff)
downloadRustAndDust-de0463bcf0f76ef8b07f2719679c9e0d72745c5d.zip
RustAndDust-de0463bcf0f76ef8b07f2719679c9e0d72745c5d.tar.gz
welcome RustAndDust
Diffstat (limited to 'core/src/ch/asynk/rustanddust/ui/LabelStack.java')
-rw-r--r--core/src/ch/asynk/rustanddust/ui/LabelStack.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/core/src/ch/asynk/rustanddust/ui/LabelStack.java b/core/src/ch/asynk/rustanddust/ui/LabelStack.java
new file mode 100644
index 0000000..92933e3
--- /dev/null
+++ b/core/src/ch/asynk/rustanddust/ui/LabelStack.java
@@ -0,0 +1,72 @@
+package ch.asynk.rustanddust.ui;
+
+import java.util.ArrayDeque;
+
+import com.badlogic.gdx.graphics.g2d.Batch;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
+
+import ch.asynk.rustanddust.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<MsgInfo> stack;
+
+ public LabelStack(BitmapFont font, float padding)
+ {
+ super(font, padding);
+ this.visible = false;
+ this.stack = new ArrayDeque<MsgInfo>();
+ }
+
+ 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;
+ }
+}