diff --git a/shaders/flat.frag b/shaders/flat.frag index b457327..c87c603 100644 --- a/shaders/flat.frag +++ b/shaders/flat.frag @@ -7,7 +7,7 @@ varying vec2 vTexCoord; void main() { vec4 texColor = texture2D(u_texture, vTexCoord); - if(texColor == vec4(1, 0, 1, 1) || texColor == vec4(1, 0, 0, 1) || texColor.w == 0) { + if(texColor == vec4(1, 0, 1, 1) || texColor == vec4(1, 0, 0, 1) || texColor.w == 0.0) { discard; } else { gl_FragColor = texColor * vColor; diff --git a/src/main/java/xyz/valnet/engine/App.java b/src/main/java/xyz/valnet/engine/App.java index 009f3bf..f2c781f 100644 --- a/src/main/java/xyz/valnet/engine/App.java +++ b/src/main/java/xyz/valnet/engine/App.java @@ -136,6 +136,7 @@ public class App { glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glDepthMask(true); + glfwSwapInterval(1); game.start(); } diff --git a/src/main/java/xyz/valnet/hadean/HadeanGame.java b/src/main/java/xyz/valnet/hadean/HadeanGame.java index 585d4d8..fecc50a 100644 --- a/src/main/java/xyz/valnet/hadean/HadeanGame.java +++ b/src/main/java/xyz/valnet/hadean/HadeanGame.java @@ -31,31 +31,31 @@ public class HadeanGame extends Game { renderDebugInfo(); } - // private Runtime runtime = Runtime.getRuntime(); - // private static Vector4f fontColor = new Vector4f(0, 1, 1, 1); + private Runtime runtime = Runtime.getRuntime(); + private static Vector4f fontColor = new Vector4f(0, 1, 1, 1); private void renderDebugInfo() { - // long allocated = runtime.totalMemory(); - // long max = runtime.maxMemory(); + long allocated = runtime.totalMemory(); + long max = runtime.maxMemory(); - // Assets.flat.pushColor(Vector4f.black); - // Assets.font.drawString("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED", 1, 1); - // Assets.font.drawString("Mouse: <" + App.mouseX + ", " + App.mouseY + ">", 1, 17); - // Assets.font.drawString("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)", 1, 33); - // Assets.font.drawString("IPATHABLE", 1, 49); - // Assets.font.drawString("", 1, 65); - // Assets.font.drawString("", 1, 81); + Assets.flat.pushColor(Vector4f.black); + Assets.font.drawString("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED", 1, 1); + Assets.font.drawString("Mouse: <" + App.mouseX + ", " + App.mouseY + ">", 1, 17); + Assets.font.drawString("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)", 1, 33); + Assets.font.drawString("IPATHABLE", 1, 49); + Assets.font.drawString("", 1, 65); + Assets.font.drawString("", 1, 81); - // Assets.flat.swapColor(fontColor); - // Assets.font.drawString("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED", 0, 0); - // Assets.font.drawString("Mouse: <" + App.mouseX + ", " + App.mouseY + ">", 0, 16); - // Assets.font.drawString("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)", 0, 32); - // Assets.font.drawString("IPATHABLE", 0, 48); - // Assets.font.drawString("", 0, 64); - // Assets.font.drawString("", 0, 80); + Assets.flat.swapColor(fontColor); + Assets.font.drawString("FPS: " + Math.round(averageFPS) + "/" + measuredFPS + " | AVG/MEASURED", 0, 0); + Assets.font.drawString("Mouse: <" + App.mouseX + ", " + App.mouseY + ">", 0, 16); + Assets.font.drawString("MEMORY: " + (int)((allocated / (double)max) * 100) + "% (" + (allocated / (1024 * 1024)) + "/" + (max / (1024 * 1024)) + "MB)", 0, 32); + Assets.font.drawString("IPATHABLE", 0, 48); + Assets.font.drawString("", 0, 64); + Assets.font.drawString("", 0, 80); - // Assets.flat.popColor(); + Assets.flat.popColor(); } // receive the updated matrix every frame for the actual window. diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java index 1b23aa7..6476f9c 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/inputlayer/BuildLayer.java @@ -7,6 +7,7 @@ import xyz.valnet.engine.scenegraph.GameObject; import xyz.valnet.engine.scenegraph.IMouseCaptureArea; import xyz.valnet.hadean.gameobjects.Camera; import xyz.valnet.hadean.interfaces.IBuildLayerListener; +import xyz.valnet.hadean.util.Assets; import xyz.valnet.hadean.util.Layers; public class BuildLayer extends GameObject implements IMouseCaptureArea { @@ -30,6 +31,14 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea { broadcastWorldCoords(); } + @Override + public void render() { + if(mouseDown && active) { + Assets.selectionFrame.draw(screenX, screenY, App.mouseX - screenX, App.mouseY - screenY); + camera.screen2world(App.mouseX, App.mouseY); + } + } + public void activate(IBuildLayerListener listener) { active = true; this.listener = listener; @@ -57,6 +66,7 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea { } private float x, y; + private int screenX, screenY; private boolean mouseDown = false; @Override @@ -67,6 +77,8 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea { } else if(button == 0 && active && hovered) { Vector2f worldcoords = camera.screen2world(App.mouseX, App.mouseY); mouseDown = true; + screenX = App.mouseX; + screenY = App.mouseY; x = worldcoords.x; y = worldcoords.y; } diff --git a/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java b/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java index ae8d408..8e3beb4 100644 --- a/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java +++ b/src/main/java/xyz/valnet/hadean/gameobjects/tabs/BuildTab.java @@ -67,11 +67,17 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap } @Override - public void select(float nx, float ny, float nw, float nh) { - x = (int)Math.floor(nx); - y = (int)Math.floor(ny); - ITileThing thing = new FarmPlot(x, y); - terrain.getTile(x, y).placeThing(thing); + public void select(float x1, float y1, float x2, float y2) { + int ix1 = (int)Math.floor(x1); + int iy1 = (int)Math.floor(y1); + int ix2 = (int)Math.floor(x2); + int iy2 = (int)Math.floor(y2); + for(int x = ix1; x <= ix2; x ++) { + for(int y = iy1; y <= iy2; y ++) { + ITileThing thing = new FarmPlot(x, y); + terrain.getTile(x, y).placeThing(thing); + } + } opened.set(false); }