You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.8 KiB
187 lines
4.8 KiB
package net.sector.gui.panels;
|
|
|
|
|
|
import net.sector.GameConfig;
|
|
import net.sector.gui.screens.Screen;
|
|
import net.sector.gui.widgets.GuiRoot;
|
|
import net.sector.gui.widgets.Widget;
|
|
import net.sector.gui.widgets.display.Text;
|
|
import net.sector.gui.widgets.input.Button;
|
|
import net.sector.gui.widgets.input.Checkbox;
|
|
import net.sector.gui.widgets.input.Slider;
|
|
import net.sector.gui.widgets.layout.Gap;
|
|
import net.sector.gui.widgets.layout.LayoutH;
|
|
import net.sector.gui.widgets.layout.LayoutV;
|
|
import net.sector.gui.widgets.layout.WindowFrame;
|
|
import net.sector.sounds.Music;
|
|
import net.sector.util.Align;
|
|
|
|
import org.lwjgl.input.Keyboard;
|
|
import org.lwjgl.opengl.Display;
|
|
|
|
import com.porcupine.color.RGB;
|
|
|
|
|
|
/**
|
|
* Overlay panel for paused game.
|
|
*
|
|
* @author Ondřej Hruška (MightyPork)
|
|
*/
|
|
public class PanelConfig extends PanelGui {
|
|
|
|
private static final int SAVE = 0;
|
|
private static final int CANCEL = 1;
|
|
private Checkbox ckInitFullscreen;
|
|
private Checkbox ckVsync;
|
|
private Checkbox ckSplash;
|
|
private Checkbox ckUpdateAlerts;
|
|
|
|
private int soundVol = GameConfig.audioVolumeSound;
|
|
private int musicVol = GameConfig.audioVolumeMusic;
|
|
private Slider sliderSound;
|
|
private Slider sliderMusic;
|
|
private Button bnCancel;
|
|
private Button bnSave;
|
|
private Checkbox ckResizable;
|
|
private int origin;
|
|
|
|
|
|
/**
|
|
* @param screen
|
|
* @param origin 0 = menu, 1 = pause screen
|
|
*/
|
|
public PanelConfig(Screen screen, int origin) {
|
|
super(screen);
|
|
this.origin = origin;
|
|
}
|
|
|
|
@Override
|
|
public void initGui(GuiRoot root) {
|
|
WindowFrame frame = new WindowFrame();
|
|
frame.setPadding(10, 10, 6, 6);
|
|
frame.enableShadow(true);
|
|
root.setRootWidget(frame);
|
|
|
|
LayoutV v = new LayoutV(Align.CENTER);
|
|
v.add(new Text("Settings", "small_heading").setMarginsV(5, 10));
|
|
v.add(new Gap(0, 5));
|
|
|
|
LayoutV v2 = new LayoutV(Align.LEFT);
|
|
|
|
v2.add(ckSplash = (Checkbox) new Checkbox(-1, "animate splash screen").setFont("small_text"));
|
|
v2.add(ckInitFullscreen = (Checkbox) new Checkbox(-1, "start in fullscreen").setFont("small_text"));
|
|
v2.add(ckVsync = (Checkbox) new Checkbox(-1, "enable v-sync").setFont("small_text"));
|
|
v2.add(ckResizable = (Checkbox) new Checkbox(-1, "resizable window").setFont("small_text"));
|
|
v2.add(new Gap(0, 5));
|
|
v2.add(ckUpdateAlerts = (Checkbox) new Checkbox(-1, "enable update alerts").setFont("small_text"));
|
|
|
|
ckSplash.setChecked(GameConfig.enableSplash);
|
|
ckInitFullscreen.setChecked(GameConfig.startInFullscreen);
|
|
ckVsync.setChecked(GameConfig.enableVsync);
|
|
ckResizable.setChecked(GameConfig.enableResize);
|
|
ckUpdateAlerts.setChecked(GameConfig.enableUpdateAlerts);
|
|
|
|
v2.add(new Gap(0, 15));
|
|
|
|
// TODO add sliders
|
|
LayoutH h2;
|
|
|
|
h2 = new LayoutH(Align.CENTER);
|
|
h2.add(new Text("Sound", "small_text").setTextAlign(Align.RIGHT).setMinWidth(100));
|
|
h2.add(new Gap(5, 0));
|
|
h2.add(sliderSound = new Slider(250, soundVol / 100D));
|
|
v2.add(h2);
|
|
|
|
h2 = new LayoutH(Align.CENTER);
|
|
h2.add(new Text("Music", "small_text").setTextAlign(Align.RIGHT).setMinWidth(100));
|
|
h2.add(new Gap(5, 0));
|
|
h2.add(sliderMusic = new Slider(250, musicVol / 100D));
|
|
v2.add(h2);
|
|
v2.add(new Gap(0, 20));
|
|
|
|
v.add(v2);
|
|
|
|
|
|
LayoutH h = new LayoutH(Align.CENTER);
|
|
h.add(bnCancel = new Button(CANCEL, "Cancel", "small_text"));
|
|
h.add(new Gap(10, 0));
|
|
h.add(bnSave = new Button(SAVE, "Save", "small_text"));
|
|
v.add(h);
|
|
|
|
frame.add(v);
|
|
}
|
|
|
|
@Override
|
|
public void actionPerformed(Widget widget) {
|
|
|
|
|
|
if (widget.id == CANCEL) {
|
|
closePanel();
|
|
return;
|
|
}
|
|
|
|
if (widget.id == SAVE) {
|
|
GameConfig.setNewProp(GameConfig.pk_splash, ckSplash.isChecked());
|
|
GameConfig.setNewProp(GameConfig.pk_win_fs, ckInitFullscreen.isChecked());
|
|
GameConfig.setNewProp(GameConfig.pk_vsync, ckVsync.isChecked());
|
|
GameConfig.setNewProp(GameConfig.pk_win_resize, ckResizable.isChecked());
|
|
GameConfig.setNewProp(GameConfig.pk_update_notifications, ckUpdateAlerts.isChecked());
|
|
|
|
GameConfig.setNewProp(GameConfig.pk_music_volume, Math.round(sliderMusic.getValue() * 100));
|
|
GameConfig.setNewProp(GameConfig.pk_sound_volume, Math.round(sliderSound.getValue() * 100));
|
|
|
|
GameConfig.saveLoad();
|
|
GameConfig.useLoaded();
|
|
|
|
Music.pauseMusic();
|
|
app.applySoundConfig();
|
|
if (origin == 0) {
|
|
Music.playMenu();
|
|
} else if (origin == 1) {
|
|
Music.playIngame();
|
|
}
|
|
|
|
Display.setResizable(GameConfig.enableResize);
|
|
|
|
closePanel();
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onKey(int key, char c, boolean down) {
|
|
super.onKey(key, c, down);
|
|
|
|
if (key == Keyboard.KEY_ESCAPE && down) {
|
|
actionPerformed(bnCancel);
|
|
}
|
|
|
|
if (key == Keyboard.KEY_RETURN && down) {
|
|
actionPerformed(bnSave);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onFocus() {
|
|
Keyboard.enableRepeatEvents(true);
|
|
}
|
|
|
|
@Override
|
|
public void onBlur() {
|
|
Keyboard.enableRepeatEvents(false);
|
|
}
|
|
|
|
@Override
|
|
public boolean hasBackgroundLayer() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public RGB getBackgroundColor() {
|
|
return new RGB(0, 0.4);
|
|
}
|
|
|
|
|
|
} |