summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/rustanddust/menu
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2016-02-22 07:30:37 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2016-02-22 07:30:37 +0100
commit2df9388d390dccb52d320d31f2be0d03f70086be (patch)
treeef7acf5132e8c0f4edb67184068f40be56a39012 /core/src/ch/asynk/rustanddust/menu
parent5a54f03df8fcd44824bd2b61885f9898b6a74d2a (diff)
downloadRustAndDust-2df9388d390dccb52d320d31f2be0d03f70086be.zip
RustAndDust-2df9388d390dccb52d320d31f2be0d03f70086be.tar.gz
set PlayMenu and NewGameMenu
Diffstat (limited to 'core/src/ch/asynk/rustanddust/menu')
-rw-r--r--core/src/ch/asynk/rustanddust/menu/MenuCtrl.java4
-rw-r--r--core/src/ch/asynk/rustanddust/menu/NewGameMenu.java212
-rw-r--r--core/src/ch/asynk/rustanddust/menu/PlayMenu.java224
3 files changed, 308 insertions, 132 deletions
diff --git a/core/src/ch/asynk/rustanddust/menu/MenuCtrl.java b/core/src/ch/asynk/rustanddust/menu/MenuCtrl.java
index d84660b..34d556d 100644
--- a/core/src/ch/asynk/rustanddust/menu/MenuCtrl.java
+++ b/core/src/ch/asynk/rustanddust/menu/MenuCtrl.java
@@ -17,7 +17,8 @@ public class MenuCtrl implements Disposable, Drawable
OPTIONS(1),
TUTORIALS(2),
PLAY(3),
- NONE(4),
+ NEW_GAME(4),
+ NONE(5),
OK(64),
OKKO(65),
BEGIN(66),
@@ -47,6 +48,7 @@ public class MenuCtrl implements Disposable, Drawable
this.panels[MenuType.OPTIONS.i] = new OptionsMenu(game);
this.panels[MenuType.TUTORIALS.i] = new TutorialsMenu(game);
this.panels[MenuType.PLAY.i] = new PlayMenu(game);
+ this.panels[MenuType.NEW_GAME.i] = new NewGameMenu(game);
this.okCancel = new OkCancel(game.font, game.bgPatch, game.getUiRegion(game.UI_OK), game.getUiRegion(game.UI_CANCEL), game.typeSnd);
this.current = MenuType.MAIN;
diff --git a/core/src/ch/asynk/rustanddust/menu/NewGameMenu.java b/core/src/ch/asynk/rustanddust/menu/NewGameMenu.java
new file mode 100644
index 0000000..5bbef04
--- /dev/null
+++ b/core/src/ch/asynk/rustanddust/menu/NewGameMenu.java
@@ -0,0 +1,212 @@
+package ch.asynk.rustanddust.menu;
+
+import com.badlogic.gdx.graphics.g2d.Batch;
+
+import ch.asynk.rustanddust.ui.Label;
+import ch.asynk.rustanddust.ui.Bg;
+import ch.asynk.rustanddust.ui.Patch;
+import ch.asynk.rustanddust.RustAndDust;
+import ch.asynk.rustanddust.game.hud.ObjectivesPanel;
+
+public class NewGameMenu extends Patch implements MenuCtrl.Panel
+{
+ public static int PADDING = 50;
+ public static int TITLE_PADDING = 35;
+ public static int VSPACING = 30;
+
+ private final RustAndDust game;
+
+ private Label title;
+ private Label gameMode;
+ private Label gameModeValue;
+ private float gameModeWidth;
+ private int battleIdx;
+ private Label battle;
+ private Label battleValue;
+ private Label objectives;
+ private ObjectivesPanel objectivesPanel;
+ protected Bg okBtn;
+ protected Bg cancelBtn;
+
+ public NewGameMenu(RustAndDust game)
+ {
+ super(game.bgPatch);
+ this.game = game;
+ this.title = new Label(game.font);
+ this.title.write("- New Game");
+ this.gameMode = new Label(game.font);
+ this.gameMode.write("Game mode : ");
+ this.gameModeValue = new Label(game.font);
+ this.okBtn = new Bg(game.getUiRegion(game.UI_OK));
+ this.cancelBtn = new Bg(game.getUiRegion(game.UI_CANCEL));
+ this.battle = new Label(game.font);
+ this.battle.write("Scenario : ");
+ this.battleValue = new Label(game.font);
+ this.objectives = new Label(game.font);
+ this.objectives.write("Battle Objectives");
+ this.objectivesPanel = new ObjectivesPanel(game);
+
+ if (game.config.battle == null) {
+ battleIdx = 0;
+ game.config.battle = game.factory.battles[0];
+ } else {
+ for (int i = 0; i < game.factory.battles.length; i++) {
+ if (game.config.battle == game.factory.battles[i]) {
+ battleIdx = i;
+ break;
+ }
+ }
+ }
+ battleValue.write(game.config.battle.getName());
+
+ float w = 0;
+ for (int i = game.config.gameMode.i; ;) {
+ gameModeValue.write(game.config.gameMode.s);
+ if (w < gameModeValue.getWidth())
+ w = gameModeValue.getWidth();
+ game.config.gameMode = game.config.gameMode.next();
+ if (i == game.config.gameMode.i) break;
+ }
+ this.gameModeValue.write(game.config.gameMode.s);
+ this.gameModeWidth = w + 10 + gameMode.getWidth();
+ }
+
+ @Override
+ public void postAnswer(boolean ok) { }
+
+ @Override
+ public String getAsk()
+ {
+ return String.format("'%s' Game Mode not implemented yet.", game.config.gameMode.s);
+ }
+
+ @Override
+ public void computePosition()
+ {
+ float h = (title.getHeight() + TITLE_PADDING + (2 * PADDING));
+ h += (gameMode.getHeight() + VSPACING);
+ h += (battle.getHeight());
+ h += (objectives.getHeight());
+
+ float w = gameModeWidth + (2 * PADDING);
+
+ float x = position.getX(w);
+ float y = position.getY(h);
+ setPosition(x, y, w, h);
+
+ setBottomRight(okBtn);
+ setBottomLeft(cancelBtn);
+
+ y += PADDING;
+ x += PADDING;
+ float dy = (VSPACING + battle.getHeight());
+
+ objectives.setPosition(x, y);
+ y += dy;
+ battle.setPosition(x, y);
+ battleValue.setPosition((x + battle.getWidth() + 10), y);
+ y += dy;
+ gameMode.setPosition(x, y);
+ gameModeValue.setPosition((x + gameMode.getWidth() + 10), y);
+ y += dy;
+
+ y += (TITLE_PADDING - VSPACING);
+ title.setPosition(x, y);
+ }
+
+ @Override
+ public MenuCtrl.MenuType touch(float x, float y)
+ {
+ if (objectivesPanel.hit(x, y)) {
+ game.typeSnd.play();
+ this.visible = true;
+ objectivesPanel.visible = false;
+ return MenuCtrl.MenuType.NONE;
+ }
+
+ if (!visible) return MenuCtrl.MenuType.NONE;
+
+ if (okBtn.hit(x, y)) {
+ game.enterSnd.play();
+ return apply();
+ } else if (cancelBtn.hit(x, y)) {
+ game.typeSnd.play();
+ return MenuCtrl.MenuType.MAIN;
+ } else if (gameMode.hit(x, y) || gameModeValue.hit(x, y)) {
+ game.typeSnd.play();
+ cycleGameMode();
+ } else if (battle.hit(x, y) || battleValue.hit(x, y)) {
+ game.typeSnd.play();
+ cycleBattle();
+ } else if (objectives.hit(x, y)) {
+ game.typeSnd.play();
+ this.visible = false;
+ objectivesPanel.show(game.config.battle);
+ }
+
+ return MenuCtrl.MenuType.NONE;
+ }
+
+ private MenuCtrl.MenuType apply() {
+ if (!game.config.gameModeImplemented())
+ return MenuCtrl.MenuType.OK;
+
+ return MenuCtrl.MenuType.BEGIN;
+ }
+
+ private void cycleGameMode()
+ {
+ game.config.gameMode = game.config.gameMode.next();
+ float fx = gameModeValue.getX();
+ float fy = gameModeValue.getY();
+ gameModeValue.write(game.config.gameMode.s);
+ gameModeValue.setPosition(fx, fy);
+ }
+
+ private void cycleBattle()
+ {
+ battleIdx += 1;
+ if (battleIdx >= game.factory.battles.length)
+ battleIdx = 0;
+ game.config.battle = game.factory.battles[battleIdx];
+ float fx = battleValue.getX();
+ float fy = battleValue.getY();
+ battleValue.write(game.config.battle.getName());
+ battleValue.setPosition(fx, fy);
+ }
+
+ @Override
+ public MenuCtrl.MenuType prepare() { return MenuCtrl.MenuType.NEW_GAME; }
+
+ @Override
+ public void dispose()
+ {
+ super.dispose();
+ title.dispose();
+ gameMode.dispose();
+ gameModeValue.dispose();
+ objectives.dispose();
+ objectivesPanel.dispose();
+ battle.dispose();
+ battleValue.dispose();
+ okBtn.dispose();
+ cancelBtn.dispose();
+ }
+
+ @Override
+ public void draw(Batch batch)
+ {
+ objectivesPanel.draw(batch);
+
+ if (!visible) return;
+ super.draw(batch);
+ title.draw(batch);
+ gameMode.draw(batch);
+ gameModeValue.draw(batch);
+ objectives.draw(batch);
+ battle.draw(batch);
+ battleValue.draw(batch);
+ okBtn.draw(batch);
+ cancelBtn.draw(batch);
+ }
+}
diff --git a/core/src/ch/asynk/rustanddust/menu/PlayMenu.java b/core/src/ch/asynk/rustanddust/menu/PlayMenu.java
index 83e01d7..40a1a15 100644
--- a/core/src/ch/asynk/rustanddust/menu/PlayMenu.java
+++ b/core/src/ch/asynk/rustanddust/menu/PlayMenu.java
@@ -2,211 +2,173 @@ package ch.asynk.rustanddust.menu;
import com.badlogic.gdx.graphics.g2d.Batch;
-import ch.asynk.rustanddust.ui.Label;
import ch.asynk.rustanddust.ui.Bg;
+import ch.asynk.rustanddust.ui.Label;
+import ch.asynk.rustanddust.ui.Button;
+import ch.asynk.rustanddust.ui.List;
import ch.asynk.rustanddust.ui.Patch;
+import ch.asynk.rustanddust.ui.Scrollable;
import ch.asynk.rustanddust.RustAndDust;
-import ch.asynk.rustanddust.game.hud.ObjectivesPanel;
+import ch.asynk.rustanddust.util.GameRecord;
public class PlayMenu extends Patch implements MenuCtrl.Panel
{
- public static int PADDING = 50;
- public static int TITLE_PADDING = 35;
- public static int VSPACING = 30;
+ public static int PADDING = 40;
+ public static int TITLE_PADDING = 30;
private final RustAndDust game;
private Label title;
- private Label gameMode;
- private Label gameModeValue;
- private float gameModeWidth;
- private int battleIdx;
- private Label battle;
- private Label battleValue;
- private Label objectives;
- private ObjectivesPanel objectivesPanel;
- protected Bg okBtn;
+ private Scrollable list;
protected Bg cancelBtn;
+ protected Button newBtn;
+ protected Button joinBtn;
+ protected Button deleteBtn;
public PlayMenu(RustAndDust game)
{
super(game.bgPatch);
this.game = game;
+ this.cancelBtn = new Bg(game.getUiRegion(game.UI_CANCEL));
+ this.newBtn = new Button("New", game.font, game.bgPatch, 20f);
+ this.joinBtn = new Button("Join", game.font, game.bgPatch, 20f);
+ this.deleteBtn = new Button("Delete", game.font, game.bgPatch, 20f);
this.title = new Label(game.font);
this.title.write("- Play");
- this.gameMode = new Label(game.font);
- this.gameMode.write("Game mode : ");
- this.gameModeValue = new Label(game.font);
- this.okBtn = new Bg(game.getUiRegion(game.UI_OK));
- this.cancelBtn = new Bg(game.getUiRegion(game.UI_CANCEL));
- this.battle = new Label(game.font);
- this.battle.write("Scenario : ");
- this.battleValue = new Label(game.font);
- this.objectives = new Label(game.font);
- this.objectives.write("Battle Objectives");
- this.objectivesPanel = new ObjectivesPanel(game);
-
- if (game.config.battle == null) {
- battleIdx = 0;
- game.config.battle = game.factory.battles[0];
- } else {
- for (int i = 0; i < game.factory.battles.length; i++) {
- if (game.config.battle == game.factory.battles[i]) {
- battleIdx = i;
- break;
- }
- }
- }
- battleValue.write(game.config.battle.getName());
-
- float w = 0;
- for (int i = game.config.gameMode.i; ;) {
- gameModeValue.write(game.config.gameMode.s);
- if (w < gameModeValue.getWidth())
- w = gameModeValue.getWidth();
- game.config.gameMode = game.config.gameMode.next();
- if (i == game.config.gameMode.i) break;
- }
- this.gameModeValue.write(game.config.gameMode.s);
- this.gameModeWidth = w + 10 + gameMode.getWidth();
+ this.list = new Scrollable(new List(game, 10f), game.framePatch);
+ }
+
+ private List getList()
+ {
+ return (List) this.list.getChild();
}
@Override
- public void postAnswer(boolean ok) { }
+ public void postAnswer(boolean ok)
+ {
+ if (ok) {
+ game.db.deleteGame(GameRecord.remove(getList().getIdx()));
+ getList().unselect();
+ }
+ }
@Override
public String getAsk()
{
- return String.format("'%s' Game Mode not implemented yet.", game.config.gameMode.s);
+ return "Permanently delete this game ?";
+ }
+
+ @Override
+ public MenuCtrl.MenuType prepare()
+ {
+ game.db.loadGames();
+ if (GameRecord.list.size() <= 0)
+ return MenuCtrl.MenuType.NEW_GAME;
+
+ game.config.gameId = game.db.NO_RECORDS;
+ getList().setItems(4, GameRecord.list);
+ computePosition();
+ return MenuCtrl.MenuType.PLAY;
}
@Override
public void computePosition()
{
- float h = (title.getHeight() + TITLE_PADDING + (2 * PADDING));
- h += (gameMode.getHeight() + VSPACING);
- h += (battle.getHeight());
- h += (objectives.getHeight());
+ float h = (title.getHeight() + TITLE_PADDING);
+ h += list.getHeight();
+ h += (2 * PADDING);
- float w = gameModeWidth + (2 * PADDING);
+ float w = title.getWidth();
+ if (list.getWidth() > w) w = list.getWidth();
+ if (list.getBestWidth() > w) w = list.getBestWidth();
+ w += (2 * PADDING);
float x = position.getX(w);
float y = position.getY(h);
+
setPosition(x, y, w, h);
- setBottomRight(okBtn);
setBottomLeft(cancelBtn);
+ setBottomRight(newBtn);
+ joinBtn.setPosition(newBtn.getX() - joinBtn.getWidth() - 5, newBtn.getY());
+ deleteBtn.setPosition(joinBtn.getX() - deleteBtn.getWidth() - 5, newBtn.getY());
+ deleteBtn.visible = false;
+ joinBtn.visible = false;
y += PADDING;
x += PADDING;
- float dy = (VSPACING + battle.getHeight());
-
- objectives.setPosition(x, y);
- y += dy;
- battle.setPosition(x, y);
- battleValue.setPosition((x + battle.getWidth() + 10), y);
- y += dy;
- gameMode.setPosition(x, y);
- gameModeValue.setPosition((x + gameMode.getWidth() + 10), y);
- y += dy;
-
- y += (TITLE_PADDING - VSPACING);
+
+ // FIXME 200 should be relative to screen dimensions
+ list.setPosition(x, y, Math.max(200, list.getBestWidth()), 200);
+
+ y += list.getHeight() + TITLE_PADDING;
title.setPosition(x, y);
}
@Override
public MenuCtrl.MenuType touch(float x, float y)
{
- if (objectivesPanel.hit(x, y)) {
- game.typeSnd.play();
- this.visible = true;
- objectivesPanel.visible = false;
- return MenuCtrl.MenuType.NONE;
- }
-
- if (!visible) return MenuCtrl.MenuType.NONE;
+ Integer i = getList().getIdx();
- if (okBtn.hit(x, y)) {
+ if (newBtn.hit(x, y)) {
game.enterSnd.play();
- return apply();
+ return MenuCtrl.MenuType.NEW_GAME;
} else if (cancelBtn.hit(x, y)) {
game.typeSnd.play();
return MenuCtrl.MenuType.MAIN;
- } else if (gameMode.hit(x, y) || gameModeValue.hit(x, y)) {
- game.typeSnd.play();
- cycleGameMode();
- } else if (battle.hit(x, y) || battleValue.hit(x, y)) {
+ } else if (newBtn.hit(x, y)) {
+ game.enterSnd.play();
+ return MenuCtrl.MenuType.NEW_GAME;
+ } else if (deleteBtn.hit(x, y)) {
game.typeSnd.play();
- cycleBattle();
- } else if (objectives.hit(x, y)) {
+ return MenuCtrl.MenuType.OKKO;
+ } else if (joinBtn.hit(x, y)) {
game.typeSnd.play();
- this.visible = false;
- objectivesPanel.show(game.config.battle);
+ game.config.gameId = GameRecord.get(getList().getIdx()).g;
+ return MenuCtrl.MenuType.BEGIN;
+ } else if (list.hit(x, y)) {
+ if (i != getList().getIdx())
+ game.typeSnd.play();
+ if(getList().getIdx() == null) {
+ deleteBtn.visible = false;
+ joinBtn.visible = false;
+ } else {
+ deleteBtn.visible = true;
+ joinBtn.visible = true;
+ }
+ return MenuCtrl.MenuType.NONE;
}
return MenuCtrl.MenuType.NONE;
}
- private MenuCtrl.MenuType apply() {
- if (!game.config.gameModeImplemented())
- return MenuCtrl.MenuType.OK;
-
- return MenuCtrl.MenuType.BEGIN;
- }
-
- private void cycleGameMode()
+ public boolean drag(float x, float y, int dx, int dy)
{
- game.config.gameMode = game.config.gameMode.next();
- float fx = gameModeValue.getX();
- float fy = gameModeValue.getY();
- gameModeValue.write(game.config.gameMode.s);
- gameModeValue.setPosition(fx, fy);
+ if (!list.hit(x, y)) return false;
+ return list.drag(x, y, dx, dy);
}
- private void cycleBattle()
- {
- battleIdx += 1;
- if (battleIdx >= game.factory.battles.length)
- battleIdx = 0;
- game.config.battle = game.factory.battles[battleIdx];
- float fx = battleValue.getX();
- float fy = battleValue.getY();
- battleValue.write(game.config.battle.getName());
- battleValue.setPosition(fx, fy);
- }
-
- @Override
- public MenuCtrl.MenuType prepare() { return MenuCtrl.MenuType.PLAY; }
-
@Override
public void dispose()
{
super.dispose();
+ list.dispose();
title.dispose();
- gameMode.dispose();
- gameModeValue.dispose();
- objectives.dispose();
- objectivesPanel.dispose();
- battle.dispose();
- battleValue.dispose();
- okBtn.dispose();
+ newBtn.dispose();
+ joinBtn.dispose();
+ deleteBtn.dispose();
cancelBtn.dispose();
}
@Override
public void draw(Batch batch)
{
- objectivesPanel.draw(batch);
-
- if (!visible) return;
super.draw(batch);
+ list.draw(batch);
title.draw(batch);
- gameMode.draw(batch);
- gameModeValue.draw(batch);
- objectives.draw(batch);
- battle.draw(batch);
- battleValue.draw(batch);
- okBtn.draw(batch);
+ newBtn.draw(batch);
+ joinBtn.draw(batch);
+ deleteBtn.draw(batch);
cancelBtn.draw(batch);
}
}