Turtle programming game that was never finished to a playable state (but had cute graphics and sounds)
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.
tortuga/src/net/tortuga/gui/panels/PanelConfig.java

184 lines
4.2 KiB

package net.tortuga.gui.panels;
import net.tortuga.GameConfig;
import net.tortuga.gui.screens.Screen;
import net.tortuga.gui.widgets.Theme;
import net.tortuga.gui.widgets.Widget;
import net.tortuga.gui.widgets.display.Text;
import net.tortuga.gui.widgets.input.Button;
import net.tortuga.gui.widgets.input.Checkbox;
import net.tortuga.gui.widgets.input.Slider;
import net.tortuga.gui.widgets.layout.Gap;
import net.tortuga.gui.widgets.layout.LayoutH;
import net.tortuga.gui.widgets.layout.LayoutV;
import net.tortuga.gui.widgets.layout.frame.FrameWindow;
import net.tortuga.sounds.SoundManager;
import net.tortuga.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 {
// FIXME add sliders for volume, add "toggle fullscreen" button
private static final int SAVE = 0;
private static final int CANCEL = 1;
private Checkbox ckInitFullscreen;
private Checkbox ckVsync;
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()
{
FrameWindow frame = Theme.mkWindow();
addGui(frame);
LayoutV v = new LayoutV(Align.CENTER, Align.CENTER);
v.add(Theme.mkTitle("Settings"));
LayoutV v2 = new LayoutV(Align.LEFT, Align.TOP);
v2.add(ckInitFullscreen = new Checkbox(-1, "Start in fullscreen"));
v2.add(ckVsync = new Checkbox(-1, "Enable v-sync"));
v2.add(ckResizable = new Checkbox(-1, "Resizable window"));
ckInitFullscreen.setChecked(GameConfig.startInFullscreen);
ckVsync.setChecked(GameConfig.enableVsync);
ckResizable.setChecked(GameConfig.enableResize);
v2.add(new Gap(0, 15));
LayoutH h2;
h2 = new LayoutH(Align.LEFT, Align.CENTER);
h2.add(new Text("Sound").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.LEFT, Align.CENTER);
h2.add(new Text("Music").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, Align.CENTER);
h.add(bnSave = new Button(SAVE, "Save"));
h.add(new Gap(10, 0));
h.add(bnCancel = new Button(CANCEL, "Cancel"));
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_win_fs, ckInitFullscreen.isChecked());
GameConfig.setNewProp(GameConfig.pk_vsync, ckVsync.isChecked());
GameConfig.setNewProp(GameConfig.pk_win_resize, ckResizable.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();
// TODO from config
SoundManager.volumeGui.set(1f);
SoundManager.volumeEffects.set(1f);
SoundManager.volumeWater.set(1f);
SoundManager.volumeAmbients.set(1f);
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);
}
}