From 6e6eda52a3b500b2af47637bef63d547c0ebe1e3 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 1 Jun 2019 15:57:47 +1000 Subject: [PATCH] starting to add ui code --- .../java/io/github/hydos/ginger/Example.java | 18 ++-- .../io/github/hydos/ginger/UI/UICanvas.java | 27 ++++++ .../io/github/hydos/ginger/UI/UIManager.java | 24 +++++ .../ginger/UI/canvases/WelcomeScreen.java | 33 +++++++ .../hydos/ginger/UI/enums/UIColourType.java | 7 ++ .../ginger/UI/enums/UIDefaultClipSide.java | 6 ++ .../github/hydos/ginger/UI/enums/UIType.java | 7 ++ .../engine/cameras/ThirdPersonCamera.java | 4 +- .../elements/{buttons => }/GuiTexture.java | 2 +- .../buttons/TextureAndTextButton.java | 86 ------------------ .../elements/buttons/TextureButton.java | 1 + .../github/hydos/ginger/engine/io/Window.java | 70 +------------- .../engine/renderEngine/MasterRenderer.java | 2 +- .../renderEngine/renderers/GuiRenderer.java | 2 +- .../github/hydos/ginger/main/GingerMain.java | 10 +- .../io/github/hydos/ginger/Example.class | Bin 10889 -> 11078 bytes .../engine/cameras/ThirdPersonCamera.class | Bin 3856 -> 3848 bytes .../hydos/ginger/engine/io/Window.class | Bin 8681 -> 7808 bytes .../engine/renderEngine/MasterRenderer.class | Bin 11334 -> 11302 bytes .../renderEngine/renderers/GuiRenderer.class | Bin 3055 -> 3023 bytes .../github/hydos/ginger/main/GingerMain.class | Bin 1679 -> 2059 bytes 21 files changed, 131 insertions(+), 168 deletions(-) create mode 100644 src/main/java/io/github/hydos/ginger/UI/UICanvas.java create mode 100644 src/main/java/io/github/hydos/ginger/UI/UIManager.java create mode 100644 src/main/java/io/github/hydos/ginger/UI/canvases/WelcomeScreen.java create mode 100644 src/main/java/io/github/hydos/ginger/UI/enums/UIColourType.java create mode 100644 src/main/java/io/github/hydos/ginger/UI/enums/UIDefaultClipSide.java create mode 100644 src/main/java/io/github/hydos/ginger/UI/enums/UIType.java rename src/main/java/io/github/hydos/ginger/engine/elements/{buttons => }/GuiTexture.java (92%) delete mode 100644 src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureAndTextButton.java diff --git a/src/main/java/io/github/hydos/ginger/Example.java b/src/main/java/io/github/hydos/ginger/Example.java index 510a2d5..57aae4b 100644 --- a/src/main/java/io/github/hydos/ginger/Example.java +++ b/src/main/java/io/github/hydos/ginger/Example.java @@ -4,8 +4,8 @@ import java.util.ArrayList; import java.util.List; import io.github.hydos.ginger.engine.cameras.ThirdPersonCamera; +import io.github.hydos.ginger.engine.elements.GuiTexture; import io.github.hydos.ginger.engine.elements.buttons.TextureButton; -import io.github.hydos.ginger.engine.elements.buttons.GuiTexture; import io.github.hydos.ginger.engine.elements.objects.Entity; import io.github.hydos.ginger.engine.elements.objects.Light; import io.github.hydos.ginger.engine.elements.objects.Player; @@ -128,9 +128,6 @@ public class Example { float colour = 0; terrains.add(terrain); -// GuiTexture shadowMap = new GuiTexture(masterRenderer.getShadowMapTexture(), new Vector2f(0.5f,0.5f), new Vector2f(0.5f,0.5f)); -// guis.add(shadowMap); - ParticleTexture particleTexture = new ParticleTexture(Loader.loadTexture("particles/smoke.png"), 8); TextureButton button = new TextureButton("/textures/guis/ginger.png", new Vector2f(0.8f, 0), new Vector2f(0.1f, 0.1f)); @@ -149,6 +146,7 @@ public class Example { if(Window.isUpdating()) { Window.update(); + GingerMain.update(); colour = colour + 0.001f; picker.update(); ParticleMaster.update(camera); @@ -168,11 +166,11 @@ public class Example { dragon.increaseRotation(0,1,0); barrel.increaseRotation(0, 1, 0); -// fbo.bindFrameBuffer(); -// masterRenderer.renderScene(entities, normalMapEntities, terrains, lights, camera, new Vector4f(0, -1, 0, 100000)); -// ParticleMaster.renderParticles(camera); -// fbo.unbindFrameBuffer(); -// PostProcessing.doPostProcessing(fbo.getColourTexture()); + fbo.bindFrameBuffer(); + masterRenderer.renderScene(entities, normalMapEntities, terrains, lights, camera, new Vector4f(0, -1, 0, 100000)); + ParticleMaster.renderParticles(camera); + fbo.unbindFrameBuffer(); + PostProcessing.doPostProcessing(fbo.getColourTexture()); // TODO: get fbo's working button.update(); if(button.isClicked()) { @@ -180,7 +178,7 @@ public class Example { button.hide(guis); } - masterRenderer.renderScene(entities, normalMapEntities, terrains, lights, camera, new Vector4f(0, -1, 0, 100000)); +// masterRenderer.renderScene(entities, normalMapEntities, terrains, lights, camera, new Vector4f(0, -1, 0, 100000)); masterRenderer.renderGuis(guis); TextMaster.render(); diff --git a/src/main/java/io/github/hydos/ginger/UI/UICanvas.java b/src/main/java/io/github/hydos/ginger/UI/UICanvas.java new file mode 100644 index 0000000..a1c9d97 --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/UI/UICanvas.java @@ -0,0 +1,27 @@ +package io.github.hydos.ginger.UI; + +import java.util.List; + +import io.github.hydos.ginger.UI.enums.UIDefaultClipSide; +import io.github.hydos.ginger.UI.enums.UIType; +import io.github.hydos.ginger.engine.elements.GuiTexture; + +public abstract class UICanvas { + + UIDefaultClipSide clippingSide = UIDefaultClipSide.centre; + UIType type = UIType.tab; + String tabName = "Welcome"; + + + + public UICanvas() { + + } + + public abstract void update(); + + public abstract void hide(List textures); + + public abstract void show(List textures); + +} diff --git a/src/main/java/io/github/hydos/ginger/UI/UIManager.java b/src/main/java/io/github/hydos/ginger/UI/UIManager.java new file mode 100644 index 0000000..93ebd6b --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/UI/UIManager.java @@ -0,0 +1,24 @@ +package io.github.hydos.ginger.UI; + +import io.github.hydos.ginger.UI.canvases.WelcomeScreen; +import io.github.hydos.ginger.UI.enums.UIColourType; + +public class UIManager { + + UIColourType colourMode = UIColourType.dark; + + UICanvas welcomeScreen; + + public UIManager(UIColourType type) { + this.colourMode = type; + + welcomeScreen = new WelcomeScreen(); + + + } + + public void update() { + welcomeScreen.update(); + } + +} diff --git a/src/main/java/io/github/hydos/ginger/UI/canvases/WelcomeScreen.java b/src/main/java/io/github/hydos/ginger/UI/canvases/WelcomeScreen.java new file mode 100644 index 0000000..47fa2af --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/UI/canvases/WelcomeScreen.java @@ -0,0 +1,33 @@ +package io.github.hydos.ginger.UI.canvases; + +import java.util.List; + +import io.github.hydos.ginger.UI.UICanvas; +import io.github.hydos.ginger.engine.elements.GuiTexture; + +public class WelcomeScreen extends UICanvas{ + + public WelcomeScreen() { + + } + + @Override + public void update() { + + } + + @Override + public void hide(List textures) { + + } + + @Override + public void show(List textures) { + + } + + + + + +} diff --git a/src/main/java/io/github/hydos/ginger/UI/enums/UIColourType.java b/src/main/java/io/github/hydos/ginger/UI/enums/UIColourType.java new file mode 100644 index 0000000..a2bd88b --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/UI/enums/UIColourType.java @@ -0,0 +1,7 @@ +package io.github.hydos.ginger.UI.enums; + +public enum UIColourType { + + light,dark + +} diff --git a/src/main/java/io/github/hydos/ginger/UI/enums/UIDefaultClipSide.java b/src/main/java/io/github/hydos/ginger/UI/enums/UIDefaultClipSide.java new file mode 100644 index 0000000..0e2254e --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/UI/enums/UIDefaultClipSide.java @@ -0,0 +1,6 @@ +package io.github.hydos.ginger.UI.enums; + +public enum UIDefaultClipSide { + + top,bottom,left,right,centre +} diff --git a/src/main/java/io/github/hydos/ginger/UI/enums/UIType.java b/src/main/java/io/github/hydos/ginger/UI/enums/UIType.java new file mode 100644 index 0000000..a426024 --- /dev/null +++ b/src/main/java/io/github/hydos/ginger/UI/enums/UIType.java @@ -0,0 +1,7 @@ +package io.github.hydos.ginger.UI.enums; + +public enum UIType { + + tab, wholeScreen + +} diff --git a/src/main/java/io/github/hydos/ginger/engine/cameras/ThirdPersonCamera.java b/src/main/java/io/github/hydos/ginger/engine/cameras/ThirdPersonCamera.java index acfc40c..27e8ea3 100644 --- a/src/main/java/io/github/hydos/ginger/engine/cameras/ThirdPersonCamera.java +++ b/src/main/java/io/github/hydos/ginger/engine/cameras/ThirdPersonCamera.java @@ -93,7 +93,7 @@ public class ThirdPersonCamera { private void calculatePitch(){ if(Window.isMouseDown(1)) { - float pitchChange = (float) (Window.getDY() * 0.2f); + float pitchChange = (float) (Window.dy * 0.2f); pitch += pitchChange; if(pitch < 0){ pitch = 0; @@ -105,7 +105,7 @@ public class ThirdPersonCamera { private void calculateAngleAroundPlayer(){ if(Window.isMouseDown(1)) { - float angleChange = (float) (Window.getDX() * 0.3f); + float angleChange = (float) (Window.dx * 0.3f); angleAroundPlayer -= angleChange; } } diff --git a/src/main/java/io/github/hydos/ginger/engine/elements/buttons/GuiTexture.java b/src/main/java/io/github/hydos/ginger/engine/elements/GuiTexture.java similarity index 92% rename from src/main/java/io/github/hydos/ginger/engine/elements/buttons/GuiTexture.java rename to src/main/java/io/github/hydos/ginger/engine/elements/GuiTexture.java index 48cb8ee..2de79a7 100644 --- a/src/main/java/io/github/hydos/ginger/engine/elements/buttons/GuiTexture.java +++ b/src/main/java/io/github/hydos/ginger/engine/elements/GuiTexture.java @@ -1,4 +1,4 @@ -package io.github.hydos.ginger.engine.elements.buttons; +package io.github.hydos.ginger.engine.elements; import io.github.hydos.ginger.engine.mathEngine.vectors.Vector2f; diff --git a/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureAndTextButton.java b/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureAndTextButton.java deleted file mode 100644 index ac71723..0000000 --- a/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureAndTextButton.java +++ /dev/null @@ -1,86 +0,0 @@ -package io.github.hydos.ginger.engine.elements.buttons; - -import java.util.List; - -import org.lwjgl.glfw.GLFW; - -import io.github.hydos.ginger.engine.io.Window; -import io.github.hydos.ginger.engine.mathEngine.vectors.Vector2f; -import io.github.hydos.ginger.engine.utils.Loader; - -public class TextureAndTextButton{ - - private GuiTexture guiTexture; - - private boolean shown = false; - - private boolean clicked = false; - - private boolean isHovering = false; - - public TextureAndTextButton(String texture, Vector2f position, Vector2f scale) { - guiTexture = new GuiTexture(Loader.loadTextureDirectly(texture), position, scale); - } - - public void update() { - if(shown) { - Vector2f location = guiTexture.getPosition(); - Vector2f scale = guiTexture.getScale(); - - Vector2f mouseCoords = Window.getNormalizedMouseCoordinates(); - if(location.y + scale.y > -mouseCoords.y && location.y - scale.y < -mouseCoords.y && location.x + scale.x > mouseCoords.x && location.x - scale.x < mouseCoords.x) { - isHovering = true; - if(Window.isMousePressed(GLFW.GLFW_MOUSE_BUTTON_1)) { - clicked = true; - }else { - clicked = false; - } - - }else { - if(isHovering) { - isHovering = false; - } - } - - }else { - isHovering = false; - clicked = false; - } - } - - - public void show(List guiTexture) { - if(shown) { - - }else { - guiTexture.add(this.guiTexture); - this.shown = true; - } - - } - - public void hide(List guiTexture) { - if(!shown) { - - }else { - guiTexture.remove(this.guiTexture); - this.shown = false; - - } - } - - public boolean isShown() { - return shown; - } - - public boolean isClicked() { - return clicked; - } - - public boolean isHovering() { - return isHovering; - } - - - -} diff --git a/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureButton.java b/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureButton.java index de4a08b..121f707 100644 --- a/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureButton.java +++ b/src/main/java/io/github/hydos/ginger/engine/elements/buttons/TextureButton.java @@ -4,6 +4,7 @@ import java.util.List; import org.lwjgl.glfw.GLFW; +import io.github.hydos.ginger.engine.elements.GuiTexture; import io.github.hydos.ginger.engine.io.Window; import io.github.hydos.ginger.engine.mathEngine.vectors.Vector2f; import io.github.hydos.ginger.engine.utils.Loader; diff --git a/src/main/java/io/github/hydos/ginger/engine/io/Window.java b/src/main/java/io/github/hydos/ginger/engine/io/Window.java index c88f50b..ec6c54b 100644 --- a/src/main/java/io/github/hydos/ginger/engine/io/Window.java +++ b/src/main/java/io/github/hydos/ginger/engine/io/Window.java @@ -26,19 +26,14 @@ public class Window { private static boolean[] keys = new boolean[GLFW.GLFW_KEY_LAST]; private static boolean[] mouseButtons = new boolean[GLFW.GLFW_MOUSE_BUTTON_LAST]; private static GLFWImage.Buffer iconBuffer = null; - private static GLFWImage cursorBuffer = null; private static double fpsCap, time, processedTime = 0; private static boolean isFullscreen = false; - private static double dy = 0; - private static double dx = 0; + public static double dy = 0; + public static double dx = 0; static double oldX = 0; static double oldY = 0; static double newX = 0; static double newY = 0; -// // Mouse positions -// private static int mouseX, mouseY; -// private static int mouseDX, mouseDY; - private static boolean mouseLocked = false; public static GLCapabilities glContext; public static void create(int width, int height, String title, int fps) { @@ -114,21 +109,6 @@ public class Window { oldX = newX; oldY = newY; -// DoubleBuffer x = BufferUtils.createDoubleBuffer(1); -// DoubleBuffer y = BufferUtils.createDoubleBuffer(1); -// -// GLFW.glfwGetCursorPos(window, x, y); -// x.rewind(); -// y.rewind(); -// -// newX = (float) x.get(); -// newY = (float) y.get(); -// -// float deltaX = newX - oldX; -// float deltaY = newY - oldY; -// Window.dx = deltaX; -// Window.dy = deltaY; - } @Deprecated @@ -215,22 +195,6 @@ public class Window { iconBuffer.put(0, iconImage); } - public void setCursor(String path) { - Image cursor = Image.createImage("/res/textures/" + path); - cursorBuffer = GLFWImage.malloc(); - cursorBuffer.set(cursor.getWidth(), cursor.getHeight(), cursor.getImage()); - - - } - - public static void showCursor() { - if(iconBuffer != null) { - long cursor = GLFW.glfwCreateCursor(cursorBuffer, 0, 0); - GLFW.glfwSetCursor(window, cursor); - } - - } - public static void showIcon() { if(iconBuffer != null) { GLFW.glfwSetWindowIcon(window, iconBuffer); @@ -242,30 +206,12 @@ public class Window { Window.isFullscreen = t; } - public boolean isFullscreen() { - return Window.isFullscreen; - } - - public void lockMouse() { + public static void lockMouse() { GLFW.glfwSetInputMode(window, GLFW.GLFW_CURSOR, GLFW.GLFW_CURSOR_DISABLED); - mouseLocked = true; } - public void unlockMouse() { + public static void unlockMouse() { GLFW.glfwSetInputMode(window, GLFW.GLFW_CURSOR, GLFW.GLFW_CURSOR_NORMAL); - mouseLocked = false; - } - - public void toggleMouseLock() { - if(mouseLocked) { - unlockMouse(); - }else { - lockMouse(); - } - } - - public boolean isMouseLocked() { - return mouseLocked; } public static Vector3f getColour() { @@ -275,14 +221,6 @@ public class Window { private static long getCurrentTime() { return (long) (GLFW.glfwGetTime()*1000/GLFW.glfwGetTimerFrequency()); } - - public static double getDY() { - return Window.dy; - } - - public static double getDX() { - return Window.dx; - } public static Vector2f getNormalizedMouseCoordinates() { float normalX = -1.0f + 2.0f * (float) getMouseX() / width; diff --git a/src/main/java/io/github/hydos/ginger/engine/renderEngine/MasterRenderer.java b/src/main/java/io/github/hydos/ginger/engine/renderEngine/MasterRenderer.java index ee8422c..1374e75 100644 --- a/src/main/java/io/github/hydos/ginger/engine/renderEngine/MasterRenderer.java +++ b/src/main/java/io/github/hydos/ginger/engine/renderEngine/MasterRenderer.java @@ -9,7 +9,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL13; import io.github.hydos.ginger.engine.cameras.ThirdPersonCamera; -import io.github.hydos.ginger.engine.elements.buttons.GuiTexture; +import io.github.hydos.ginger.engine.elements.GuiTexture; import io.github.hydos.ginger.engine.elements.objects.Entity; import io.github.hydos.ginger.engine.elements.objects.Light; import io.github.hydos.ginger.engine.io.Window; diff --git a/src/main/java/io/github/hydos/ginger/engine/renderEngine/renderers/GuiRenderer.java b/src/main/java/io/github/hydos/ginger/engine/renderEngine/renderers/GuiRenderer.java index bdb4639..0d1454a 100644 --- a/src/main/java/io/github/hydos/ginger/engine/renderEngine/renderers/GuiRenderer.java +++ b/src/main/java/io/github/hydos/ginger/engine/renderEngine/renderers/GuiRenderer.java @@ -7,7 +7,7 @@ import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL30; -import io.github.hydos.ginger.engine.elements.buttons.GuiTexture; +import io.github.hydos.ginger.engine.elements.GuiTexture; import io.github.hydos.ginger.engine.mathEngine.Maths; import io.github.hydos.ginger.engine.mathEngine.matrixes.Matrix4f; import io.github.hydos.ginger.engine.renderEngine.models.RawModel; diff --git a/src/main/java/io/github/hydos/ginger/main/GingerMain.java b/src/main/java/io/github/hydos/ginger/main/GingerMain.java index 31401aa..f2b3702 100644 --- a/src/main/java/io/github/hydos/ginger/main/GingerMain.java +++ b/src/main/java/io/github/hydos/ginger/main/GingerMain.java @@ -1,5 +1,7 @@ package io.github.hydos.ginger.main; +import io.github.hydos.ginger.UI.UIManager; +import io.github.hydos.ginger.UI.enums.UIColourType; import io.github.hydos.ginger.engine.font.TextMaster; import io.github.hydos.ginger.engine.obj.ModelLoader; import io.github.hydos.ginger.engine.obj.normals.NormalMappedObjLoader; @@ -9,9 +11,11 @@ import io.github.hydos.ginger.engine.renderEngine.texture.ModelTexture; public class GingerMain { + public static UIManager manager; + public static void init() { TextMaster.init(); - + manager = new UIManager(UIColourType.dark); } public static TexturedModel createTexturedModel(String texturePath, String modelPath) { @@ -25,6 +29,10 @@ public class GingerMain { return texturedModel; } + public static void update() { + manager.update(); + } + diff --git a/target/classes/io/github/hydos/ginger/Example.class b/target/classes/io/github/hydos/ginger/Example.class index b064352c6ba1d71296726ed4ffe1be4344b221be..2374d2a601d5f77887da56d9732d3610494a9335 100644 GIT binary patch delta 1525 zcmZ8hX>b!|7=EAqzIJK4l(wPACK;v$0=DSgs-SkP9O zeCD46hlyw){**}qb%|Zb(9cV9tnX!vh_&YG{n8SepF^(<*8mjR=&mK2Fj2vHsQ<@XWt4*w!&)RS81_Yc!2oX+joI)hA_}TRNR}gW$aDoW=xI>0FW?Dj?yxp4 z7;#(9HVj9Nf>*2#I+geW-jN}9g*L2e>QpTx<5kdLJ*M>5ug53p{hUdzS$IvMRLlX% zy+(?sccI1Rbp`V5}o$Gf8N^@VB8IEWb3f{naeX%1eWg{rgWBJ># z30q`r)(<%{pLq*$f@EdL7l`=9l(O))f^EnVdn)sJ#hz;Lj)EPQ!q!f7RFzL~+=V?d zcI!i3{r&G+Oyk>)HtK_Y3K}g{VtBf{vVFo~OW&+uztwiU#~%!9UW=@upv7{P#o*k5 zf=X*ThV=yrQ6q#XBhY*ct;JylN1Cs>ZgGB8#_!GNvh$FzoD^~q@$%-L-3r;Dzf6p4 zpxY)2O%!LO+cB`@$#m6jV1mj`yqL3}qT*z!9SlrTxdC?{HQ9hyZ|spCEw%inJ>^uL zZDdo^RHuQUsve}`;zT<_i7hnIKv+#lR1ytTt7-q;4g)hErWJQraU9}wQTaj4vLb86 ziMC+2fw@)>b*hM{x5N??%hgN+x+PXN?0^BF&TT(R}Fv)v@HNK&gs07J}%L1lK+0qzX!Bw(LgQdrCO_b{_tq=j% zg*8nQ%f+`;M(NT;tipG=K^f9LMDRU+piGvIeEf)?NM&Q8;%EFq4zYmsxQScj#IIr` zUg8hL{+u#F#%-BK%Ty$j-ajWb`8OF4U%D!=o}bgL^JJNd?^EsHluW=KkwC&9{{lji Bn3wBIO9JMWxNH7o|&my<`4lAAL;;TBRV}TQG ztk(G&UpJR!*SftrYvCf)reLejiAvT>g1&ZRl;aJZ4fLDijOmU!Ivd$!ZZoPKL7mO? zw|m@wyDN@RaWX;#Uj~AgTLOVag7;EE-;5X40FF{Q0{8RbY!qyh75Z_UQblmW7wec zeQq@SJeTs?xLIe19q$bJ0`roKe(`sFZvo+2Tw?wOCVZq*<&p#}{Tz zon`yY9-U+4^ulRm8aWmNhH(s4RjDq%nc9Py7DGmQs-9}G#mIc{%(ghskm{`tWOnf# z7vHtG*vOVuaxJbfV};q}tL+49rL61WdW+_RQ%L)!1h*u(Bf;Gr1BD5GXm~6hNbsQT zVez8`KThxyk>H_D`MnD~3a}N`X3?$D5|kZ)L^q{K!<3;77@Z$5yf_~7(2vD>=e7OTO7b1aR_@wH};8h zI3OWvdIt6lCk<2e8mqM@d7fr*8d4ATXFyZ diff --git a/target/classes/io/github/hydos/ginger/engine/cameras/ThirdPersonCamera.class b/target/classes/io/github/hydos/ginger/engine/cameras/ThirdPersonCamera.class index dd389b2974892795ad9298b0b9c549324f061c8b..10e25d1fe14f54a3ad8e8ec3ab6f320c2178347b 100644 GIT binary patch delta 63 zcmbOr*CDsTid~44p@^ZKhoOU^laYZbrIL|>adIHLEI&xNpNC-rM7Uye1G^v_PYrd-h!08Xb delta 71 zcmeB>n;^Hrid~$Gp@^ZKhoOU^laYZnJ+;Iol97Q~LvykZyQ~mMuAhft0$eU)a|OE~ Q8{>}2UA!xRq%q%B07*0w5&!@I diff --git a/target/classes/io/github/hydos/ginger/engine/io/Window.class b/target/classes/io/github/hydos/ginger/engine/io/Window.class index 45cb972e3ce119e64f5ea5674f0518e49faddc38..79c34bda47ee9da864ab1f5f50a8211d0f5ee3c5 100644 GIT binary patch literal 7808 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 K<3{i!Wu`FUkg(#!PKQ(6?ID-QtM&KJA@ delta 81 zcmZ1$aV%m(g(zddv{$6~;Iwr<|$?KUc*^)|2O7inIKV#BkVziumkVzdTV#UhE%xFFN0Fwq(WO6n~ R0i*Ba4NMj=B|@BgnE*aa8mj;R diff --git a/target/classes/io/github/hydos/ginger/main/GingerMain.class b/target/classes/io/github/hydos/ginger/main/GingerMain.class index b165a2b1f52d02f1c676a8f8feae4d6fc2e2fec8..7f9f0530405373a4f5062c58e37553ab64625740 100644 GIT binary patch delta 812 zcmZut%T5zv7(M@VE}b&P7U+cn+EUQcmR1l%D2hteV8D%H(v=xQ(@lgxMj&N=`0!T&zs`}yzdHvmg`VEKwe+JRX! zE9JVtto>b%`ggbTyIVVMtzd1()FA^JyjJzOI)X6`qqZdy*59BWfLB9UAZZ06k^i@J zL=n?4E|6twhOKg~dGLy`n}^lIX8p;Vqq2bsObW<*W_@2E=P;i?Snwf)i;jd#0t+c; zFn%s#VeY98frJ6Y*2Ft?7FRS}rr1SK3dxfnLJ{g!ENWP=e@R8pH7wat&ognIS;GD; zkJ%fN-=pD1Klj^zJmK65)*R}BKq$5S(tK^^t7ff|f840Qs8z`5!!m9<6SoB3I^x#t zefeWhZ658Jjj|)XXy7iqwqHrL1av4+d3uFHc~e@QS)N`v)pQ%a&kQ6Ov}&(tz|Yul z2QZ8a%yjVftT@Z7@X!Lm4uV~TO2>$_F?E9Y0BE>35^T|paC5YWC~-%}G?IOshh%k- zyqRc`taAeyMuL3_Sdu}rIj{G%?G zOY>c?i{FI4t4*Db{3q*Z=?k delta 520 zcmYLFyG{Z@6g{&$%d*J(;Q}gxD2qIOV4<-wu`7Lm8%{?$K>lvzOb<;$={sDi4EH8qkI<;beJjt$k7SHffESZvaE z)RUEsL{LXl>$FtaDn@JQ=%gz!tgCZ*sBW!CwI8Yt012Vjp|!bhmtN3YjaP)985oGr z>NXfH&_;s+`WQ0@@j1B8Tz_(k#6LDd4sg~)!pG~(K?Yg!47BD62Tb~KvoS^Pv^8NI z$Oh0f1u{Og9L%AJCC(6mWk!O111l)eYT{K^H17@T7JacfMfq%oTE9I*z0aHRv=3xK vPA=IFq~bocOF$kj3cg$~fY0TMzjCC+7KIJ=a}?et*5$v$74&oN`mDVlU4k`^