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 | |
| parent | 5a54f03df8fcd44824bd2b61885f9898b6a74d2a (diff) | |
| download | RustAndDust-2df9388d390dccb52d320d31f2be0d03f70086be.zip RustAndDust-2df9388d390dccb52d320d31f2be0d03f70086be.tar.gz | |
set PlayMenu and NewGameMenu
| -rw-r--r-- | core/src/ch/asynk/rustanddust/menu/MenuCtrl.java | 4 | ||||
| -rw-r--r-- | core/src/ch/asynk/rustanddust/menu/NewGameMenu.java | 212 | ||||
| -rw-r--r-- | core/src/ch/asynk/rustanddust/menu/PlayMenu.java | 224 | 
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);      }  } | 
