diff options
Diffstat (limited to 'core/src/ch/asynk')
| -rw-r--r-- | core/src/ch/asynk/tankontank/game/hud/LabelStack.java | 72 | 
1 files changed, 72 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/tankontank/game/hud/LabelStack.java b/core/src/ch/asynk/tankontank/game/hud/LabelStack.java new file mode 100644 index 0000000..cbdcacf --- /dev/null +++ b/core/src/ch/asynk/tankontank/game/hud/LabelStack.java @@ -0,0 +1,72 @@ +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<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; +    } +} | 
