diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2015-11-05 09:41:13 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2015-11-05 09:41:13 +0100 | 
| commit | 523bfbe43633931ef4d2a331969ee9d1a47b9fcd (patch) | |
| tree | e57d01e364a276e4214a8f8add86b867d3549beb /core/src | |
| parent | aab970b43a20cdb4ddab4ab2f13173e7f615a896 (diff) | |
| download | RustAndDust-523bfbe43633931ef4d2a331969ee9d1a47b9fcd.zip RustAndDust-523bfbe43633931ef4d2a331969ee9d1a47b9fcd.tar.gz | |
add PlayMenu
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/ch/asynk/rustanddust/menu/PlayMenu.java | 195 | 
1 files changed, 195 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/rustanddust/menu/PlayMenu.java b/core/src/ch/asynk/rustanddust/menu/PlayMenu.java new file mode 100644 index 0000000..da38dbb --- /dev/null +++ b/core/src/ch/asynk/rustanddust/menu/PlayMenu.java @@ -0,0 +1,195 @@ +package ch.asynk.rustanddust.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.rustanddust.ui.Label; +import ch.asynk.rustanddust.ui.Bg; +import ch.asynk.rustanddust.ui.Patch; +import ch.asynk.rustanddust.ui.OkCancel; +import ch.asynk.rustanddust.RustAndDust; + +public class PlayMenu extends Patch +{ +    public static int PADDING = 40; +    public static int BTN_PADDING = 10; +    public static int TITLE_PADDING = 30; +    public static int VSPACING = 20; + +    private final RustAndDust game; +    private final BitmapFont font; + +    private Label title; +    private Label gameMode; +    private Label gameModeValue; +    private float gameModeWidth; +    private int battleIdx; +    private Label battle; +    private Label battleValue; +    protected Bg okBtn; +    protected Bg cancelBtn; +    private OkCancel okCancel; + +    public boolean launch; + +    public PlayMenu(RustAndDust game, BitmapFont font, TextureAtlas atlas) +    { +        super(atlas.createPatch("typewriter")); +        this.game = game; +        this.font = font; +        this.title = new Label(font); +        this.title.write("- Play"); +        this.gameMode = new Label(font); +        this.gameMode.write("Game mode"); +        this.gameModeValue = new Label(font); +        this.okBtn = new Bg(atlas.findRegion("ok")); +        this.cancelBtn = new Bg(atlas.findRegion("cancel")); +        this.battle = new Label(font); +        this.battle.write("Scenario"); +        this.battleValue = new Label(font); +        this.okCancel = new OkCancel(font, atlas); + +        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.visible = false; +        this.launch = false; +    } + +    public void setPosition() +    { +        float h = (title.getHeight() + TITLE_PADDING + (2 * PADDING)); +        h += (gameMode.getHeight() + VSPACING); +        h += (battle.getHeight()); + +        float w = gameModeWidth + (2 * PADDING); + +        float x = position.getX(w); +        float y = position.getY(h); +        setPosition(x, y, w, h); + +        okBtn.setPosition((x + w - okBtn.getWidth() + BTN_PADDING), (y - BTN_PADDING)); +        cancelBtn.setPosition((x - BTN_PADDING), okBtn.getY()); + +        y += PADDING; +        x += PADDING; +        float dy = (VSPACING + battle.getHeight()); + +        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 boolean hit(float x, float y) +    { +        if (okCancel.hit(x, y)) { +            this.visible = true; +            okCancel.visible = false; +            return false; +        } + +        if (!visible) return false; + +        if (okBtn.hit(x, y)) { +            return apply(); +        } else if (cancelBtn.hit(x, y)) { +            return true; +        } else if (gameMode.hit(x, y) || gameModeValue.hit(x, y)) { +            cycleGameMode(); +        } else if (battle.hit(x, y) || battleValue.hit(x, y)) { +            cycleBattle(); +        } + +        return false; +    } + +    private boolean apply() { +        if (!game.config.gameModeImplemented()) { +            this.visible = false; +            okCancel.show(String.format("'%s' Game Mode not implemented yet.", game.config.gameMode.s)); +            okCancel.noCancel(); +        } else +            this.launch = true; +        return true; +    } + +    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 void dispose() +    { +        super.dispose(); +        title.dispose(); +        gameMode.dispose(); +        gameModeValue.dispose(); +        battle.dispose(); +        battleValue.dispose(); +        okBtn.dispose(); +        cancelBtn.dispose(); +        okCancel.dispose(); +    } + +    @Override +    public void draw(Batch batch) +    { +        okCancel.draw(batch); + +        if (!visible) return; +        super.draw(batch); +        title.draw(batch); +        gameMode.draw(batch); +        gameModeValue.draw(batch); +        battle.draw(batch); +        battleValue.draw(batch); +        okBtn.draw(batch); +        cancelBtn.draw(batch); +    } +} | 
