103 lines
3.6 KiB
Java
103 lines
3.6 KiB
Java
package game.gui.options;
|
|
|
|
import game.color.TextColor;
|
|
import game.gui.element.Dropdown;
|
|
import game.gui.element.Element;
|
|
import game.gui.element.Fill;
|
|
import game.gui.element.Slider;
|
|
import game.gui.element.Toggle;
|
|
import game.util.Formatter;
|
|
import game.window.Button;
|
|
import game.window.DisplayMode;
|
|
import game.window.Window;
|
|
|
|
public class GuiDisplay extends GuiOptions {
|
|
private static final String[] DISTANCES = new String[] {"Gruselig", "Winzig", "Gering", "Normal", "Weit"};
|
|
|
|
private Element distanceSlider;
|
|
|
|
protected GuiDisplay() {
|
|
}
|
|
|
|
public void init(int width, int height) {
|
|
DisplayMode[] dmodes = Window.getDisplayModes();
|
|
if(dmodes != null && dmodes.length > 0) {
|
|
int offset = 0;
|
|
int pos = 0;
|
|
int num = dmodes.length;
|
|
if(dmodes.length > DisplayMode.VID_MODES) {
|
|
offset = dmodes.length - DisplayMode.VID_MODES;
|
|
num = DisplayMode.VID_MODES;
|
|
}
|
|
DisplayMode[] modes = new DisplayMode[num];
|
|
DisplayMode selected = dmodes[num + offset - 1];
|
|
for(int z = 0; z < num; z++) {
|
|
modes[z] = dmodes[z + offset];
|
|
if(modes[z].equals(this.gm.vidMode))
|
|
selected = modes[z];
|
|
}
|
|
this.add(new Dropdown<DisplayMode>(30, 80, 440, 24, false, modes, modes[modes.length - 1], selected, new Dropdown.Callback<DisplayMode>() {
|
|
public void use(Dropdown<DisplayMode> elem, DisplayMode value) {
|
|
GuiDisplay.this.gm.vidMode = value;
|
|
GuiDisplay.this.gm.full(true);
|
|
}
|
|
}, "Auflösung"));
|
|
}
|
|
else {
|
|
this.add(new Fill(30, 80, 440, 24, TextColor.RED + "Auflösung: <?>"));
|
|
}
|
|
|
|
this.add(new Toggle(490, 80, 440, 24, false, GuiDisplay.this.gm.fullscreen, new Toggle.Callback() {
|
|
public void use(Toggle elem, boolean value) {
|
|
GuiDisplay.this.gm.full(value);
|
|
}
|
|
}, "Vollbild"));
|
|
this.add(new Slider(30, 120, 440, 24, 0, 0, 360 - 8, 0, (this.gm.sync < 0) ? (360 - 8) : (this.gm.sync != 0 ? ((this.gm.sync < 10) ? 1 : (this.gm.sync - 9)) : 0), new Slider.Callback() {
|
|
public void use(Slider elem, int value) {
|
|
GuiDisplay.this.gm.getVar("win_sync").parse("" + ((value > 0 && value < 360 - 8) ? (value + 9) : (value != 0 ? -1 : 0)));
|
|
GuiDisplay.this.gm.setDirty();
|
|
}
|
|
}, new Formatter<Slider>() {
|
|
public String use(Slider elem) {
|
|
int value = elem.getValue();
|
|
return "Max. Bildrate: " + (value > 0 && value < (360 - 8) ? (value + 9) + " FPS" : (value != 0 ? "Unbegrenzt" : "VSync"));
|
|
}
|
|
}));
|
|
this.addSelector("gl_vsync_flush", 490, 120, 440, 24);
|
|
|
|
this.addSelector("overlay_enabled", 30, 200, 440, 24);
|
|
this.addSelector("overlay_opacity", 490, 200, 440, 24);
|
|
|
|
this.addSelector("overlay_fadeout", 30, 240, 440, 24);
|
|
this.addSelector("chat_permanent", 490, 240, 440, 24);
|
|
|
|
this.addSelector("console_size", 30, 280, 440, 24);
|
|
this.addSelector("chat_size", 490, 280, 440, 24);
|
|
|
|
this.addSelector("feed_size", 30, 320, 440, 24);
|
|
this.addSelector("hotbar_size", 490, 320, 440, 24);
|
|
|
|
this.addSelector("gl_fov", 30, 400, 440, 24);
|
|
this.distanceSlider = this.addSelector("chunk_view_distance", 30, 440, 440, 24);
|
|
this.addSelector("chunk_build_time", 490, 440, 440, 24);
|
|
super.init(width, height);
|
|
}
|
|
|
|
public String getTitle() {
|
|
return "Grafik und Anzeige";
|
|
}
|
|
|
|
private String getDistanceName() {
|
|
int distance = this.gm.renderDistance;
|
|
distance = distance > 16 ? 16 : distance;
|
|
String str = distance < 0 ? DISTANCES[0] : DISTANCES[(distance + 1) / 4];
|
|
if(distance > 2 && (((distance + 1) / 2) & 1) == 1)
|
|
str = str + "+";
|
|
return String.format("Sichtweite: %d Chunks [%d Blöcke, %s]", this.gm.renderDistance, this.gm.renderDistance * 16, str);
|
|
}
|
|
|
|
public void updateScreen() {
|
|
if(!Button.isMouseDown())
|
|
this.distanceSlider.setText(this.getDistanceName());
|
|
}
|
|
}
|