diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2014-12-30 22:05:06 +0100 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2014-12-30 22:05:06 +0100 |
commit | 9fb72dd4c0c46ea417e538491a2a6c54a5aa1fcf (patch) | |
tree | b9f93d262aa1c6a93b8bf25c4605f3a6275cfe8c | |
parent | adbd4951a64082f5a4161bf66fc4ac2a0da6be21 (diff) | |
download | RustAndDust-9fb72dd4c0c46ea417e538491a2a6c54a5aa1fcf.zip RustAndDust-9fb72dd4c0c46ea417e538491a2a6c54a5aa1fcf.tar.gz |
add menu/ MainMenu, OptionsMenu, ScenariosMenu, TutorialsMenu
-rw-r--r-- | core/src/ch/asynk/tankontank/menu/MainMenu.java | 114 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/menu/OptionsMenu.java | 189 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/menu/ScenariosMenu.java | 123 | ||||
-rw-r--r-- | core/src/ch/asynk/tankontank/menu/TutorialsMenu.java | 94 |
4 files changed, 520 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/menu/MainMenu.java b/core/src/ch/asynk/tankontank/menu/MainMenu.java new file mode 100644 index 0000000..ed03d08 --- /dev/null +++ b/core/src/ch/asynk/tankontank/menu/MainMenu.java @@ -0,0 +1,114 @@ +package ch.asynk.tankontank.menu; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; + +import ch.asynk.tankontank.ui.Label; +import ch.asynk.tankontank.ui.Patch; + +public class MainMenu extends Patch +{ + public static int PADDING = 40; + public static int VSPACING = 20; + + private Label options; + private Label scenarios; + private Label tutorial; + private Label exit; + + public enum Menu { + OPTIONS, + TUTORIALS, + SCENARIOS, + NONE + }; + private Menu menu; + + public MainMenu(BitmapFont font, TextureAtlas atlas) + { + super(atlas.createPatch("typewriter")); + this.options = new Label(font); + this.scenarios = new Label(font); + this.tutorial = new Label(font); + this.exit = new Label(font); + this.menu = Menu.NONE; + + options.write("Options"); + scenarios.write("Scenarios"); + tutorial.write("Tutorial"); + exit.write("Quit"); + } + + public Menu getMenu() + { + return menu; + } + + public void setPosition() + { + float h = ((4 * tutorial.getHeight()) + (2 * PADDING) + (3 * VSPACING)); + float w = (scenarios.getWidth() + (2 * PADDING)); + float x = position.getX(w); + float y = position.getY(h); + setPosition(x, y, w, h); + + y += PADDING; + x += PADDING; + float dy = (VSPACING + tutorial.getHeight()); + + exit.setPosition(x, y); + y += dy; + options.setPosition(x, y); + y += dy; + tutorial.setPosition(x, y); + y += dy; + scenarios.setPosition(x, y); + } + + @Override + public boolean hit(float x, float y) + { + boolean ret = false; + menu = Menu.NONE; + + if (!visible) return ret; + + if (scenarios.hit(x, y)) { + menu = Menu.SCENARIOS; + ret = true; + } else if (tutorial.hit(x, y)) { + menu = Menu.TUTORIALS; + ret = true; + } else if (options.hit(x, y)) { + menu = Menu.OPTIONS; + ret = true; + } else if (exit.hit(x, y)) { + Gdx.app.exit(); + } + + return ret; + } + + @Override + public void dispose() + { + super.dispose(); + scenarios.dispose(); + tutorial.dispose(); + options.dispose(); + exit.dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + scenarios.draw(batch); + tutorial.draw(batch); + options.draw(batch); + exit.draw(batch); + } +} diff --git a/core/src/ch/asynk/tankontank/menu/OptionsMenu.java b/core/src/ch/asynk/tankontank/menu/OptionsMenu.java new file mode 100644 index 0000000..4257ac6 --- /dev/null +++ b/core/src/ch/asynk/tankontank/menu/OptionsMenu.java @@ -0,0 +1,189 @@ +package ch.asynk.tankontank.menu; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; + +import ch.asynk.tankontank.ui.Label; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Patch; + +import ch.asynk.tankontank.TankOnTank; + +public class OptionsMenu extends Patch +{ + public static int PADDING = 40; + public static int OK_PADDING = 10; + public static int TITLE_PADDING = 30; + public static int VSPACING = 20; + public static int HSPACING = 30; + public static String CHECK = "#"; + + private final TankOnTank game; + private final BitmapFont font; + + private String [] checkStrings = { + "Debug", + "Use Reqular Pawns", + "Must Validate", + "Can Cancel", + "Show Enemy Possibilities", + "Show Moves Assists", + "Show Targets", + "Show Moves", + }; + private String [] fxStrings = { "OFF", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "ON" }; + + private float checkDy; + private Label title; + private Label fxVolume; + private Label fxVolumeValue; + private Label [] checkLabels; + private boolean [] checkValues; + protected Bg okBtn; + + public OptionsMenu(TankOnTank game, BitmapFont font, TextureAtlas atlas) + { + super(atlas.createPatch("typewriter")); + this.game = game; + this.font = font; + this.okBtn = new Bg(atlas.findRegion("ok")); + this.title = new Label(font); + this.title.write("- Options"); + this.fxVolume = new Label(font); + this.fxVolume.write("Fx Volume"); + this.fxVolumeValue = new Label(font); + this.fxVolumeValue.write(fxStrings[(int) (game.config.fxVolume * 10)]); + this.checkValues = new boolean[checkStrings.length]; + this.checkLabels = new Label[checkStrings.length]; + for (int i = 0; i < checkLabels.length; i++) { + Label l = new Label(font); + l.write(checkStrings[i]); + this.checkLabels[i] = l; + } + getValues(); + checkDy = font.getMultiLineBounds(CHECK).height; + + this.visible = false; + } + + private void getValues() + { + checkValues[7] = game.config.showMoves; + checkValues[6] = game.config.showTargets; + checkValues[5] = game.config.showMoveAssists; + checkValues[4] = game.config.showEnemyPossibilities; + checkValues[3] = game.config.canCancel; + checkValues[2] = game.config.mustValidate; + checkValues[1] = game.config.regularPawns; + checkValues[0] = game.config.debug; + } + + private void apply() + { + game.config.showMoves = checkValues[7]; + game.config.showTargets = checkValues[6]; + game.config.showMoveAssists = checkValues[5]; + game.config.showEnemyPossibilities = checkValues[4]; + game.config.canCancel = checkValues[3]; + game.config.mustValidate = checkValues[2]; + game.config.regularPawns = checkValues[1]; + game.config.debug = checkValues[0]; + } + + private void cycleFxVolume() + { + int i = (int) (game.config.fxVolume * 10) + 1; + if (i > 10) i = 0; + float fx = fxVolumeValue.getX(); + float fy = fxVolumeValue.getY(); + fxVolumeValue.write(fxStrings[i]); + fxVolumeValue.setPosition(fx, fy); + game.config.fxVolume = (i / 10f); + } + + public void setPosition() + { + float h = (title.getHeight() + TITLE_PADDING + ((checkLabels.length - 1) * VSPACING) + (2 * PADDING)); + for (int i = 0; i < checkLabels.length; i++) + h += checkLabels[i].getHeight(); + h += (fxVolume.getHeight() + VSPACING); + + float w = title.getWidth(); + for (int i = 0; i < checkLabels.length; i++) { + float t = checkLabels[i].getWidth(); + if (t > w) + w = t; + } + w += (2 * PADDING) + HSPACING; + + float x = position.getX(w); + float y = position.getY(h); + setPosition(x, y, w, h); + + okBtn.setPosition((x + w - okBtn.getWidth() + OK_PADDING), (y - OK_PADDING)); + + y += PADDING; + x += PADDING + HSPACING; + float dy = (VSPACING + title.getHeight()); + + fxVolume.setPosition(x, y); + fxVolumeValue.setPosition((x + fxVolume.getWidth() + 10), y); + y += dy; + for (int i = 0; i < checkLabels.length; i++) { + checkLabels[i].setPosition(x, y); + y += dy; + } + y += (TITLE_PADDING - VSPACING); + title.setPosition(x, y); + } + + @Override + public boolean hit(float x, float y) + { + if (!visible) return false; + + if (okBtn.hit(x, y)) { + apply(); + return true; + } else if (fxVolume.hit(x, y)) { + cycleFxVolume(); + } else { + for (int i = 0; i < checkLabels.length; i++) { + if (checkLabels[i].hit(x, y)) + checkValues[i] =! checkValues[i]; + } + } + + return false; + } + + @Override + public void dispose() + { + super.dispose(); + title.dispose(); + okBtn.dispose(); + fxVolume.dispose(); + fxVolumeValue.dispose(); + for (int i = 0; i < checkLabels.length; i++) + checkLabels[i].dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + title.draw(batch); + okBtn.draw(batch); + fxVolume.draw(batch); + fxVolumeValue.draw(batch); + for (int i = 0; i < checkLabels.length; i++) { + Label l = checkLabels[i]; + l.draw(batch); + if (checkValues[i]) + font.draw(batch, CHECK, (l.getX() - HSPACING) , l.getY() + checkDy); + } + } +} diff --git a/core/src/ch/asynk/tankontank/menu/ScenariosMenu.java b/core/src/ch/asynk/tankontank/menu/ScenariosMenu.java new file mode 100644 index 0000000..e101a2f --- /dev/null +++ b/core/src/ch/asynk/tankontank/menu/ScenariosMenu.java @@ -0,0 +1,123 @@ +package ch.asynk.tankontank.menu; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; + +import ch.asynk.tankontank.ui.Label; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Patch; +import ch.asynk.tankontank.TankOnTank; +import ch.asynk.tankontank.game.Battle; + +public class ScenariosMenu extends Patch +{ + public static int PADDING = 40; + public static int OK_PADDING = 10; + public static int TITLE_PADDING = 30; + public static int VSPACING = 20; + public static int HSPACING = 30; + public static String CHECK = "#"; + + private final TankOnTank game; + private final BitmapFont font; + + private float checkDy; + private Label title; + protected Bg okBtn; + private Label [] battleLabels; + + public ScenariosMenu(TankOnTank game, BitmapFont font, TextureAtlas atlas) + { + super(atlas.createPatch("typewriter")); + this.game = game; + this.font = font; + this.okBtn = new Bg(atlas.findRegion("ok")); + this.title = new Label(font); + this.title.write("- Scenarios"); + this.battleLabels = new Label[game.factory.battles.length]; + for (int i = 0; i < battleLabels.length; i++) { + Label l = new Label(font); + l.write(game.factory.battles[i].getName()); + battleLabels[i] = l; + } + checkDy = font.getMultiLineBounds(CHECK).height; + + this.visible = false; + } + + public void setPosition() + { + float h = (title.getHeight() + TITLE_PADDING + ((battleLabels.length - 1) * VSPACING) + (2 * PADDING)); + for (int i = 0; i < battleLabels.length; i++) + h += battleLabels[i].getHeight(); + + float w = title.getWidth(); + for (int i = 0; i < battleLabels.length; i++) { + float t = battleLabels[i].getWidth(); + if (t > w) + w = t; + } + w += (2 * PADDING) + HSPACING; + + float x = position.getX(w); + float y = position.getY(h); + setPosition(x, y, w, h); + + okBtn.setPosition((x + w - okBtn.getWidth() + OK_PADDING), (y - OK_PADDING)); + + y += PADDING; + x += PADDING + HSPACING; + float dy = (VSPACING + title.getHeight()); + + for (int i = (battleLabels.length - 1); i > -1; i--) { + battleLabels[i].setPosition(x, y); + y += dy; + } + y += (TITLE_PADDING - VSPACING); + title.setPosition(x, y); + } + + @Override + public boolean hit(float x, float y) + { + if (!visible) return false; + + if (okBtn.hit(x, y)) { + return true; + } else { + for (int i = 0; i <battleLabels.length; i++) { + if (battleLabels[i].hit(x, y)) { + game.config.battle = game.factory.battles[i]; + } + } + } + + return false; + } + + @Override + public void dispose() + { + super.dispose(); + title.dispose(); + okBtn.dispose(); + for (int i = 0; i < battleLabels.length; i++) + battleLabels[i].dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + title.draw(batch); + okBtn.draw(batch); + for (int i = 0; i < battleLabels.length; i++) { + Label l = battleLabels[i]; + l.draw(batch); + if (game.config.battle == game.factory.battles[i]) + font.draw(batch, CHECK, (l.getX() - HSPACING) , l.getY() + checkDy); + } + } +} diff --git a/core/src/ch/asynk/tankontank/menu/TutorialsMenu.java b/core/src/ch/asynk/tankontank/menu/TutorialsMenu.java new file mode 100644 index 0000000..28f7276 --- /dev/null +++ b/core/src/ch/asynk/tankontank/menu/TutorialsMenu.java @@ -0,0 +1,94 @@ +package ch.asynk.tankontank.menu; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; + +import ch.asynk.tankontank.ui.Label; +import ch.asynk.tankontank.ui.Bg; +import ch.asynk.tankontank.ui.Patch; +import ch.asynk.tankontank.TankOnTank; + +public class TutorialsMenu extends Patch +{ + public static int PADDING = 40; + public static int OK_PADDING = 10; + public static int TITLE_PADDING = 30; + public static int VSPACING = 20; + + private final TankOnTank game; + private final BitmapFont font; + + private Label title; + private Label msg; + protected Bg okBtn; + + public TutorialsMenu(TankOnTank game, BitmapFont font, TextureAtlas atlas) + { + super(atlas.createPatch("typewriter")); + this.game = game; + this.font = font; + this.okBtn = new Bg(atlas.findRegion("ok")); + this.title = new Label(font); + this.title.write("- Tutorials"); + this.msg = new Label(font); + this.msg.write("Not implemented yet."); + + this.visible = false; + } + + public void setPosition() + { + float h = (title.getHeight() + TITLE_PADDING + (2 * PADDING)); + h += msg.getHeight(); + + float w = title.getWidth(); + if (msg.getWidth() > w) + w = msg.getWidth(); + w += (2 * PADDING); + + float x = position.getX(w); + float y = position.getY(h); + setPosition(x, y, w, h); + + okBtn.setPosition((x + w - okBtn.getWidth() + OK_PADDING), (y - OK_PADDING)); + + y += PADDING; + x += PADDING; + + msg.setPosition(x, y); + + y += (msg.getHeight() + TITLE_PADDING); + title.setPosition(x, y); + } + + @Override + public boolean hit(float x, float y) + { + if (!visible) return false; + + if (okBtn.hit(x, y)) + return true; + + return false; + } + + @Override + public void dispose() + { + super.dispose(); + title.dispose(); + msg.dispose(); + okBtn.dispose(); + } + + @Override + public void draw(Batch batch) + { + if (!visible) return; + super.draw(batch); + title.draw(batch); + msg.draw(batch); + okBtn.draw(batch); + } +} |