package com.gdxjam.ui.dialog; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.ButtonGroup; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.SelectBox; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Slider; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.gdxjam.GameManager; import com.gdxjam.GameManager.GameConfig; import com.gdxjam.OrionPrefs; import com.gdxjam.OrionPrefs.BooleanValue; import com.gdxjam.OrionPrefs.FloatValue; import com.gdxjam.OrionPrefs.StringValue; public class OptionsDialog extends Dialog { private static final int defaultContentWidth = 300; private static final int defaultContentHeight = 100; private GraphicsOptions graphicsOptions; private AudioOptions audioOptions; private ButtonGroup<TextButton> tabButtonGroup; private Table tabTable; public OptionsDialog(Skin skin) { super("Options", skin); setPosition((Gdx.graphics.getWidth() * 0.5f) - (getWidth() * 0.5f), (Gdx.graphics.getHeight() * 0.5f) - (getHeight() * 0.5f)); setMovable(false); setModal(true); graphicsOptions = new GraphicsOptions(skin); audioOptions = new AudioOptions(skin); tabButtonGroup = new ButtonGroup<TextButton>(); tabButtonGroup.setMaxCheckCount(1); tabButtonGroup.setMinCheckCount(1); tabButtonGroup.setChecked(graphicsOptions.getName()); tabTable = new Table(); addTab(graphicsOptions, skin); addTab(audioOptions, skin); setContent(graphicsOptions); TextButton closeButton = new TextButton("Close", skin); button(closeButton); } public void addTab(final Table content, Skin skin) { TextButton tabButton = new TextButton(content.getName(), skin); tabButton.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { setContent(content); } }); tabTable.add(tabButton); } public void setContent(Table tabContent) { getContentTable().clear(); getContentTable().add(tabTable); getContentTable().row(); getContentTable().add(tabContent).prefSize(defaultContentWidth, defaultContentHeight); } public class GraphicsOptions extends Table { private SelectBox<String> resolutionSelectBox; private CheckBox fullscreenCheckBox; public GraphicsOptions(Skin skin) { setName("Graphics"); resolutionSelectBox = new SelectBox<String>(skin); resolutionSelectBox.setItems(GameConfig.SUPPORTED_RESOLUTIONS); resolutionSelectBox.setSelected(OrionPrefs.getString(StringValue.GRAPHICS_RESOLUTION)); fullscreenCheckBox = new CheckBox("Fullscreen", skin); fullscreenCheckBox.setChecked(OrionPrefs.getBoolean(BooleanValue.GRAPHICS_FULLSCREEN)); TextButton applyButton = new TextButton("Apply", skin); applyButton.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { OrionPrefs.putBoolean(BooleanValue.GRAPHICS_FULLSCREEN, fullscreenCheckBox.isChecked()); OrionPrefs.putString(StringValue.GRAPHICS_RESOLUTION, resolutionSelectBox.getSelected()); GameManager.refreshDisplayMode(); } }); add(resolutionSelectBox); row(); add(fullscreenCheckBox); row(); add(applyButton); } } public class AudioOptions extends Table { private Slider soundSlider; private Slider musicSlider; private CheckBox soundCheckBox; private CheckBox musicCheckBox; public AudioOptions(Skin skin) { setName("Audio"); soundSlider = new Slider(0, 1, 0.05f, false, skin); soundSlider.setValue(OrionPrefs.getFloat(FloatValue.AUDIO_SOUND_VOLUME)); musicSlider = new Slider(0, 1, 0.05f, false, skin); musicSlider.setValue(OrionPrefs.getFloat(FloatValue.AUDIO_MUSIC_VOLUME)); musicCheckBox = new CheckBox("Music Enabled", skin); musicCheckBox.setChecked(OrionPrefs.getBoolean(BooleanValue.AUDIO_MUSIC_ENABLED)); soundCheckBox = new CheckBox("Sound Enabled", skin); soundCheckBox.setChecked(OrionPrefs.getBoolean(BooleanValue.AUDIO_MUSIC_ENABLED)); Table soundTable = new Table(); soundTable.add(soundSlider); soundTable.add(soundCheckBox); Table musicTable = new Table(); musicTable.add(musicSlider); musicTable.add(musicCheckBox); add(soundTable); row(); add(musicTable); } } }