package game.gui; 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(30, 80, 440, 24, false, modes, modes[modes.length - 1], selected, new Dropdown.Callback() { public void use(Dropdown 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() { 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("con_overlay", 30, 200, 440, 24); this.addSelector("con_opacity", 490, 200, 440, 24); this.addSelector("con_size", 30, 240, 440, 24); this.addSelector("con_fadeout", 490, 240, 440, 24); this.addSelector("con_position", 30, 280, 440, 24); this.addSelector("gl_fov", 30, 360, 440, 24); this.distanceSlider = this.addSelector("chunk_view_distance", 30, 400, 440, 24); this.addSelector("chunk_build_time", 490, 400, 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()); } }