diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2015-12-18 16:03:32 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2015-12-18 16:03:32 +0100 | 
| commit | 093d7d83c113599421b90ecfd2b8d37eb71d3925 (patch) | |
| tree | d5f53a22febfc50c5d881b9d376522bc9d9a93d7 /core/src/ch/asynk | |
| parent | 7c70b2a13d74a5021073fc963bc6252bfc2986ec (diff) | |
| download | RustAndDust-093d7d83c113599421b90ecfd2b8d37eb71d3925.zip RustAndDust-093d7d83c113599421b90ecfd2b8d37eb71d3925.tar.gz | |
add game/hud/OptionsPanel
Diffstat (limited to 'core/src/ch/asynk')
| -rw-r--r-- | core/src/ch/asynk/rustanddust/game/hud/OptionsPanel.java | 146 | 
1 files changed, 146 insertions, 0 deletions
| diff --git a/core/src/ch/asynk/rustanddust/game/hud/OptionsPanel.java b/core/src/ch/asynk/rustanddust/game/hud/OptionsPanel.java new file mode 100644 index 0000000..f2140a9 --- /dev/null +++ b/core/src/ch/asynk/rustanddust/game/hud/OptionsPanel.java @@ -0,0 +1,146 @@ +package ch.asynk.rustanddust.game.hud; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +import ch.asynk.rustanddust.RustAndDust; +import ch.asynk.rustanddust.ui.Bg; +import ch.asynk.rustanddust.ui.Label; +import ch.asynk.rustanddust.ui.Patch; +import ch.asynk.rustanddust.ui.Position; + +public class OptionsPanel extends Patch +{ +    private String [] fxStrings = { "OFF", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%", "ON" }; + +    public static int PADDING = 30; +    public static int OPT_PADDING = 10; +    public static int TITLE_PADDING = 20; +    public static int VSPACING = 15; +    public static int HSPACING = 30; + +    private RustAndDust game; +    private Label title; +    private int fxVolumeIdx; +    private Label fxVolume; +    private Label fxVolumeValue; +    private Label quit; + +    public OptionsPanel(RustAndDust game) +    { +        super(game.ninePatch); +        this.game = game; +        this.title = new Label(game.font); +        this.title.write("- Options"); +        this.fxVolume = new Label(game.font); +        this.fxVolume.write("Fx Volume"); +        this.fxVolumeValue = new Label(game.font); +        this.quit = new Label(game.font); +        this.quit.write("Quit battle"); +        this.visible = false; +    } + +    public void updatePosition() +    { +        if (!visible) return; +        float dx = (position.getX(rect.width) - rect.x); +        float dy = (position.getY(rect.height) - rect.y); +        translate(dx, dy); +    } + +    public void show() +    { +        show(Position.MIDDLE_CENTER); +    } + +    public void show(Position position) +    { + +        fxVolumeValue.write(fxStrings[0]); +        float h = (title.getHeight() + TITLE_PADDING + fxVolumeValue.getHeight() + (2 * PADDING)); +        h += (quit.getHeight() + (2 * VSPACING)); +        float w = (fxVolume.getWidth() + fxVolumeValue.getWidth() + HSPACING + OPT_PADDING + (2 * PADDING)); + +        float x = position.getX(w); +        float y = position.getY(h); +        setPosition(x, y, w, h); + +        y += PADDING; +        x += PADDING + HSPACING; + +        fxVolume.setPosition(x, y); +        fxVolumeValue.setPosition((x + fxVolume.getWidth() + OPT_PADDING), y); +        y += (VSPACING + fxVolume.getHeight()); + +        y += VSPACING; +        quit.setPosition(x,y); +        y += (VSPACING + quit.getHeight()); + +        y += (TITLE_PADDING - VSPACING); +        x -= PADDING; +        title.setPosition(x, y); + +        getValues(); + +        visible = true; +    } + +    private void getValues() +    { +        fxVolumeIdx = (int) (game.config.fxVolume * 10); +        fxVolumeValue.write(fxStrings[fxVolumeIdx], fxVolumeValue.getX(), fxVolumeValue.getY()); +    } + +    private void cycleFxVolume() +    { +        fxVolumeIdx += 1; +        if (fxVolumeIdx > 10) fxVolumeIdx = 0; +        fxVolumeValue.write(fxStrings[fxVolumeIdx], fxVolumeValue.getX(), fxVolumeValue.getY()); +        game.config.fxVolume = (fxVolumeIdx / 10.0f); +    } + +    @Override +    public boolean hit(float x, float y) +    { +        if (!visible) return false; + +        if (fxVolume.hit(x, y) || fxVolumeValue.hit(x, y)) { +            cycleFxVolume(); +        } else if (quit.hit(x, y)) { +            game.ctrl.hud.askQuitBattle(); +        } + +        return false; +    } + +    @Override +    public void dispose() +    { +        super.dispose(); +        fxVolume.dispose(); +        fxVolumeValue.dispose(); +        quit.dispose(); +    } + +    @Override +    public void draw(Batch batch) +    { +        if (!visible) return; +        super.draw(batch); +        title.draw(batch); +        fxVolume.draw(batch); +        fxVolumeValue.draw(batch); +        quit.draw(batch); +    } + +    @Override +    public void drawDebug(ShapeRenderer shapes) +    { +        if (!visible) return; +        super.drawDebug(shapes); +        title.drawDebug(shapes); +        fxVolume.drawDebug(shapes); +        fxVolumeValue.drawDebug(shapes); +        quit.drawDebug(shapes); +    } +} | 
