diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java index 49b63638b..b6098c976 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/Config.java @@ -30,16 +30,14 @@ import com.seibel.distanthorizons.core.config.eventHandlers.RenderCacheConfigEve import com.seibel.distanthorizons.core.config.eventHandlers.UnsafeValuesConfigListener; import com.seibel.distanthorizons.core.config.eventHandlers.presets.ThreadPresetConfigEventHandler; import com.seibel.distanthorizons.core.config.eventHandlers.presets.RenderQualityPresetConfigEventHandler; -import com.seibel.distanthorizons.core.config.types.ConfigCategory; -import com.seibel.distanthorizons.core.config.types.ConfigEntry; -import com.seibel.distanthorizons.core.config.types.ConfigLinkedEntry; -import com.seibel.distanthorizons.core.config.types.ConfigUIComment; +import com.seibel.distanthorizons.core.config.types.*; import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryAppearance; import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryPerformance; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.coreapi.ModInfo; import org.apache.logging.log4j.Logger; +import javax.swing.*; import java.util.*; @@ -1142,6 +1140,11 @@ public class Config public static ConfigEntry> listTest = new ConfigEntry.Builder>() .set(new ArrayList(Arrays.asList("option 1", "option 2", "option 3"))) .build(); + + public static ConfigUIButton uiButtonTest = new ConfigUIButton(() -> { + System.setProperty("java.awt.headless", "false"); // Required to make it work + JOptionPane.showMessageDialog(null, "Button pressed!", "UITester dialog", JOptionPane.INFORMATION_MESSAGE); + }); public static ConfigCategory categoryTest = new ConfigCategory.Builder().set(CategoryTest.class).build(); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/standaloneTests/TestConfigMain.java b/core/src/main/java/com/seibel/distanthorizons/core/config/gui/standaloneTests/TestConfigMain.java deleted file mode 100644 index f7b893722..000000000 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/gui/standaloneTests/TestConfigMain.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.seibel.distanthorizons.core.config.gui.standaloneTests; - -import com.seibel.distanthorizons.core.config.gui.AbstractScreen; -import com.seibel.distanthorizons.core.config.gui.OpenGLConfigScreen; -import com.seibel.distanthorizons.core.pos.Pos2D; -import org.lwjgl.*; -import org.lwjgl.glfw.*; -import org.lwjgl.opengl.*; -import org.lwjgl.system.*; - -import java.nio.*; - -import static org.lwjgl.glfw.Callbacks.*; -import static org.lwjgl.glfw.GLFW.*; -import static org.lwjgl.opengl.GL11.*; -import static org.lwjgl.system.MemoryStack.*; -import static org.lwjgl.system.MemoryUtil.*; - -/** - * This just allows for a quicker testing of the config screen without loading up the whole game - * - * @author coolGi - */ -public class TestConfigMain { - // The window handle - private long window; - public AbstractScreen abstractScreen; - - - public static void main(String[] args) { - new TestConfigMain().run(); - } - - - public void run() { - abstractScreen = new OpenGLConfigScreen(); - System.out.println("Hello LWJGL version " + Version.getVersion()); - -// ClientApi.INSTANCE.rendererStartupEvent(); - init(); - - Pos2D windowDim = getWindowDimentions(window); - abstractScreen.width = windowDim.x; - abstractScreen.height = windowDim.y; - abstractScreen.init(); - loop(); - // Code isnt moved until loop is done (and it is only done if window is closed) - -// ClientApi.INSTANCE.rendererShutdownEvent(); - // Free the window callbacks and destroy the window - glfwFreeCallbacks(window); - glfwDestroyWindow(window); - - // Terminate GLFW and free the error callback - glfwTerminate(); - glfwSetErrorCallback(null).free(); - } - - private void init() { - // Setup an error callback. The default implementation - // will print the error message in System.err. - GLFWErrorCallback.createPrint(System.err).set(); - - // Initialize GLFW. Most GLFW functions will not work before doing this. - if ( !glfwInit() ) - throw new IllegalStateException("Unable to initialize GLFW"); - - // Configure GLFW - glfwDefaultWindowHints(); // optional, the current window hints are already the default - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation - glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable - - // Create the window - window = glfwCreateWindow(640, 480, "DH Test config", NULL, NULL); - if ( window == NULL ) - throw new RuntimeException("Failed to create the GLFW window"); - - // Setup a key callback. It will be called every time a key is pressed, repeated or released. - // Is this really nessesery -// glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> { -// if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) -// glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop -// }); - - // Get the thread stack and push a new frame - try ( MemoryStack stack = stackPush() ) { - IntBuffer pWidth = stack.mallocInt(1); // int* - IntBuffer pHeight = stack.mallocInt(1); // int* - - // Get the window size passed to glfwCreateWindow - glfwGetWindowSize(window, pWidth, pHeight); - - // Get the resolution of the primary monitor - GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); - - // Center the window - glfwSetWindowPos( - window, - (vidmode.width() - pWidth.get(0)) / 2, - (vidmode.height() - pHeight.get(0)) / 2 - ); - } // the stack frame is popped automatically - - // Make the OpenGL context current - glfwMakeContextCurrent(window); - // Enable v-sync - glfwSwapInterval(1); - - // Make the window visible - glfwShowWindow(window); - GL.createCapabilities(); - } - - private void loop() { - // This line is critical for LWJGL's interoperation with GLFW's - // OpenGL context, or any context that is managed externally. - // LWJGL detects the context that is current in the current thread, - // creates the GLCapabilities instance and makes the OpenGL - // bindings available for use. - GL.createCapabilities(); - - // Set the clear color (if not set it would just be black) -// glClearColor(1.0f, 0.0f, 0.0f, 0.0f); - - // Set this so we can use it for the delta time - lastLoopTime = getTime(); - - // Run the rendering loop until the user has attempted to close - // the window or has pressed the ESCAPE key. - // (only works if glfwPollEvents() is called) - while ( !glfwWindowShouldClose(window) ) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer (will cause a ghosting effect if not called) - - // Poll for window events. (this allows the window to be closed) - glfwPollEvents(); - - Pos2D windowDim = getWindowDimentions(window); - abstractScreen.width = windowDim.x; - abstractScreen.height = windowDim.y; - - abstractScreen.render(getDelta()); - - - glfwSwapBuffers(window); // swap the color buffers - } - abstractScreen.onClose(); - } - - - - public Pos2D getWindowDimentions(long window) { - IntBuffer w = BufferUtils.createIntBuffer(1); - IntBuffer h = BufferUtils.createIntBuffer(1); - glfwGetWindowSize(window, w, h); - return new Pos2D(w.get(0), h.get(0)); - } - - - private double lastLoopTime; - private float timeCount; - public double getTime() { - return glfwGetTime(); - } - public float getDelta() { - double time = getTime(); - float delta = (float) (time - lastLoopTime); - lastLoopTime = time; - timeCount += delta; - return delta; - } -} diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigCategory.java b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigCategory.java index cb282fc37..5197590f8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigCategory.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigCategory.java @@ -3,12 +3,13 @@ package com.seibel.distanthorizons.core.config.types; import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryAppearance; /** - * Adds a categoty to the config + * Adds a category to the config * See our config file for more information on how to use it * * @author coolGi */ public class ConfigCategory extends AbstractConfigType { + /** This should not be set by anything other than the config system itself */ public String destination; // Where the category goes to private ConfigCategory(EConfigEntryAppearance appearance, Class value, String destination) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIButton.java b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIButton.java new file mode 100644 index 000000000..07f56fd77 --- /dev/null +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIButton.java @@ -0,0 +1,25 @@ +package com.seibel.distanthorizons.core.config.types; + +import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryAppearance; + +public class ConfigUIButton extends AbstractConfigType { + public ConfigUIButton(Runnable runnable) { + super(EConfigEntryAppearance.ONLY_IN_GUI, runnable); + } + + public void runAction() { + new Thread(this.value).start(); + } + + public static class Builder extends AbstractConfigType.Builder { + /** Appearance shouldn't be changed */ + @Override + public Builder setAppearance(EConfigEntryAppearance newAppearance) { + return this; + } + + public ConfigUIButton build() { + return new ConfigUIButton(this.tmpValue); + } + } +} diff --git a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIComment.java b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIComment.java index 75f8e075b..c0baf1e1d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIComment.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/config/types/ConfigUIComment.java @@ -7,7 +7,7 @@ import com.seibel.distanthorizons.core.config.types.enums.EConfigEntryAppearance * * @author coolGi */ -public class ConfigUIComment extends AbstractConfigType{ +public class ConfigUIComment extends AbstractConfigType { public ConfigUIComment() { super(EConfigEntryAppearance.ONLY_IN_GUI, ""); } diff --git a/core/src/main/resources/assets/distanthorizons/lang/en_us.json b/core/src/main/resources/assets/distanthorizons/lang/en_us.json index 2120be320..c33fdeb45 100644 --- a/core/src/main/resources/assets/distanthorizons/lang/en_us.json +++ b/core/src/main/resources/assets/distanthorizons/lang/en_us.json @@ -460,6 +460,8 @@ "Float test", "distanthorizons.config.client.advanced.debugging.exampleConfigScreen.stringTest": "String test", + "distanthorizons.config.client.advanced.debugging.exampleConfigScreen.uiButtonTest": + "UI Button test", "distanthorizons.config.client.advanced.debugging.exampleConfigScreen.listTest": "List (ArrayList) test", "distanthorizons.config.client.advanced.debugging.exampleConfigScreen.mapTest":