diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2016-02-22 07:30:37 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2016-02-22 07:30:37 +0100 |
commit | 2df9388d390dccb52d320d31f2be0d03f70086be (patch) | |
tree | ef7acf5132e8c0f4edb67184068f40be56a39012 /core/src/ch/asynk/rustanddust/menu/NewGameMenu.java | |
parent | 5a54f03df8fcd44824bd2b61885f9898b6a74d2a (diff) | |
download | RustAndDust-2df9388d390dccb52d320d31f2be0d03f70086be.zip RustAndDust-2df9388d390dccb52d320d31f2be0d03f70086be.tar.gz |
set PlayMenu and NewGameMenu
Diffstat (limited to 'core/src/ch/asynk/rustanddust/menu/NewGameMenu.java')
-rw-r--r-- | core/src/ch/asynk/rustanddust/menu/NewGameMenu.java | 212 |
1 files changed, 212 insertions, 0 deletions
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); + } +} |