diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2015-02-27 14:53:00 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2015-02-27 14:53:00 +0100 |
commit | 43d56a0c4fe9916266238d7981ef6c761cc159d2 (patch) | |
tree | 22d6fa4e2a763cfa1d94d2d8df2f0772ef76a611 | |
parent | bf865c493e164ff2700aa473b830186b962ddb81 (diff) | |
download | RustAndDust-43d56a0c4fe9916266238d7981ef6c761cc159d2.zip RustAndDust-43d56a0c4fe9916266238d7981ef6c761cc159d2.tar.gz |
add ui.Menu
-rw-r--r-- | core/src/ch/asynk/tankontank/ui/Menu.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/ui/Menu.java b/core/src/ch/asynk/tankontank/ui/Menu.java new file mode 100644 index 0000000..1cd61ca --- /dev/null +++ b/core/src/ch/asynk/tankontank/ui/Menu.java @@ -0,0 +1,93 @@ +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.NinePatch; + +public class Menu extends Patch +{ + public static int PADDING = 40; + public static int VSPACING = 8; + + protected Label []labels; + + public interface MenuItem + { + public int last(); + public int i(); + }; + + protected MenuItem menuItem; + + public Menu(MenuItem menuItem, BitmapFont font, NinePatch ninePatch) + { + super(ninePatch); + this.menuItem = menuItem; + this.labels = new Label[menuItem.last()]; + for (int i = 0; i< menuItem.last(); i ++) + labels[i] = new Label(font, 10); + } + + protected Label label(MenuItem m) + { + return labels[m.i()]; + } + + protected float widestLabel() + { + float w = 0f; + for (int i = 0; i< menuItem.last(); i ++) { + float t = labels[i].getWidth(); + if (t> w) + w = t; + } + return w; + } + + protected float highestLabel() + { + float h = 0f; + for (int i = 0; i< menuItem.last(); i ++) { + float t = labels[i].getHeight(); + if (t> h) + h = t; + } + return h; + } + + public void setPosition() + { + float lh = highestLabel(); + float h = ((menuItem.last() * lh) + (2 * PADDING) + ((menuItem.last() - 1) * VSPACING)); + float w = (widestLabel() + (2 * PADDING)); + float x = position.getX(w); + float y = position.getY(h); + setPosition(x, y, w, h); + + y += PADDING; + x += PADDING; + float dy = (VSPACING + lh); + + for (int i = 0; i< menuItem.last(); i ++) { + labels[i].setPosition(x, y); + y += dy; + } + } + + @Override + public void dispose() + { + super.dispose(); + for (int i = 0; i < menuItem.last(); i ++) + labels[i].dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + for (int i = 0; i < menuItem.last(); i ++) + labels[i].draw(batch); + } +} |