summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/ch/asynk/rustanddust/menu/ResumeMenu.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/core/src/ch/asynk/rustanddust/menu/ResumeMenu.java b/core/src/ch/asynk/rustanddust/menu/ResumeMenu.java
new file mode 100644
index 0000000..70ff025
--- /dev/null
+++ b/core/src/ch/asynk/rustanddust/menu/ResumeMenu.java
@@ -0,0 +1,140 @@
+package ch.asynk.rustanddust.menu;
+
+import com.badlogic.gdx.graphics.g2d.Batch;
+
+import ch.asynk.rustanddust.ui.Label;
+import ch.asynk.rustanddust.ui.Patch;
+import ch.asynk.rustanddust.RustAndDust;
+import ch.asynk.rustanddust.game.Config;
+
+public class ResumeMenu extends Patch implements MenuCtrl.Panel
+{
+ private static final int PADDING = 40;
+ private static final int VSPACING = 8;
+ private static final int TITLE_SPACING = 12;
+
+ enum Item
+ {
+ RESUME(3, " * Resume", MenuCtrl.MenuType.NONE),
+ REPLAY_LAST(2, " * Replay Last Actions", MenuCtrl.MenuType.NONE),
+ REPLAY_BATTLE(1, " * Replay Battle", MenuCtrl.MenuType.NONE),
+ CANCEL(0, " * Cancel", MenuCtrl.MenuType.PLAY),
+ NONE(4, null, MenuCtrl.MenuType.NONE);
+
+ public int i;
+ public String s;
+ public MenuCtrl.MenuType t;
+ Item(int i, String s, MenuCtrl.MenuType t)
+ {
+ this.i = i;
+ this.s = s;
+ this.t = t;
+ }
+ };
+
+ protected Label title;
+ protected Label []labels;
+ private final RustAndDust game;
+
+ public ResumeMenu(RustAndDust game)
+ {
+ super(game.bgPatch);
+ this.game = game;
+ this.title = new Label(game.font, 10);
+ this.title.write("- Play");
+ this.labels = new Label[Item.NONE.i];
+ for (int i = 0; i < Item.NONE.i; i++)
+ labels[i] = new Label(game.font, 10);
+ labels[Item.RESUME.i].write(Item.RESUME.s);
+ labels[Item.REPLAY_LAST.i].write(Item.REPLAY_LAST.s);
+ labels[Item.REPLAY_BATTLE.i].write(Item.REPLAY_BATTLE.s);
+ labels[Item.CANCEL.i].write(Item.CANCEL.s);
+ }
+
+ @Override
+ public void computePosition()
+ {
+ float h = 0f;
+ float w = 0f;
+ for (int i = 0; i< Item.NONE.i; i ++) {
+ h += labels[i].getHeight();
+ float t = labels[i].getWidth();
+ if (t > w)
+ w = t;
+ }
+ h += (2 * PADDING) + ((Item.NONE.i - 1) * VSPACING);
+ w += (2 * PADDING);
+ h += title.getHeight() + TITLE_SPACING;
+
+ float x = position.getX(w);
+ float y = position.getY(h);
+ setPosition(x, y, w, h);
+
+ y += PADDING;
+ x += PADDING;
+
+ for (int i = 0; i< Item.NONE.i; i ++) {
+ labels[i].setPosition(x, y);
+ y += (VSPACING + labels[i].getHeight());
+ }
+ y+= TITLE_SPACING;
+ title.setPosition(x, y);
+ }
+
+ @Override
+ public MenuCtrl.MenuType postAnswer(boolean ok) { return MenuCtrl.MenuType.NONE; }
+
+ @Override
+ public String getAsk() { return null; }
+
+ @Override
+ public MenuCtrl.MenuType prepare() { return MenuCtrl.MenuType.RESUME; }
+
+ @Override
+ public boolean drag(float x, float y, int dx, int dy) { return true; }
+
+ @Override
+ public MenuCtrl.MenuType touch(float x, float y)
+ {
+ int idx = -1;
+
+ if (labels[Item.CANCEL.i].hit(x, y)) {
+ game.playType();
+ return Item.CANCEL.t;
+ }
+ else if (labels[Item.RESUME.i].hit(x, y))
+ return setConfig(Config.LoadMode.RESUME);
+ else if (labels[Item.REPLAY_LAST.i].hit(x, y))
+ return setConfig(Config.LoadMode.REPLAY_LAST);
+ else if (labels[Item.REPLAY_BATTLE.i].hit(x, y))
+ return setConfig(Config.LoadMode.REPLAY_BATTLE);
+
+ return MenuCtrl.MenuType.NONE;
+ }
+
+ private MenuCtrl.MenuType setConfig(Config.LoadMode loadMode)
+ {
+ game.playType();
+ game.config.loadMode = loadMode;
+ return MenuCtrl.MenuType.BEGIN;
+ }
+
+ @Override
+ public void dispose()
+ {
+ super.dispose();
+ title.dispose();
+ for (int i = 0; i < Item.NONE.i; i ++)
+ labels[i].dispose();
+ }
+
+ @Override
+ public void draw(Batch batch)
+ {
+ if (!visible) return;
+ super.draw(batch);
+ title.draw(batch);
+ for (int i = 0; i < Item.NONE.i; i ++)
+ labels[i].draw(batch);
+ }
+}