diff --git a/src/projectzombie/display/Camera.java b/src/projectzombie/display/Camera.java index 6046d70..d1b8a76 100755 --- a/src/projectzombie/display/Camera.java +++ b/src/projectzombie/display/Camera.java @@ -42,7 +42,7 @@ public class Camera projection_sun = Matrix4.multiply(projection_sun, Matrix4.rotate(-angle - 180, 0, 1, 0)); projection_sun = Matrix4.multiply(projection_sun, Matrix4.rotate(20, 0, 0, 1)); projection_sun = Matrix4.multiply(projection_sun, Matrix4.rotate(-time, 1, 0, 0)); - projection_sun = Matrix4.multiply(projection_sun, Matrix4.translate(0, 0, -16)); - projection_sun = Matrix4.multiply(projection_sun, Matrix4.scale(new Vec3d(1/20.0, 1/20.0, -1/32.0))); + projection_sun = Matrix4.multiply(projection_sun, Matrix4.translate(0, 0, -(16*Chunk.RENDER_DISTANCE+16))); + projection_sun = Matrix4.multiply(projection_sun, Matrix4.scale(new Vec3d(1.0/20.0, 1.0/20.0, -1.0/(32*Chunk.RENDER_DISTANCE+32)))); } } diff --git a/src/projectzombie/display/DisplayRender.java b/src/projectzombie/display/DisplayRender.java index 0f214ea..d471e96 100755 --- a/src/projectzombie/display/DisplayRender.java +++ b/src/projectzombie/display/DisplayRender.java @@ -92,7 +92,7 @@ public class DisplayRender GL33.glTexParameteri(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_MAG_FILTER, GL33.GL_LINEAR); GL33.glTexParameteri(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_S, GL33.GL_CLAMP_TO_BORDER); GL33.glTexParameteri(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_WRAP_T, GL33.GL_CLAMP_TO_BORDER); - GL33.glTexParameterfv(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_BORDER_COLOR, new float[] {0, 0, 0, 0}); + GL33.glTexParameterfv(GL33.GL_TEXTURE_2D, GL33.GL_TEXTURE_BORDER_COLOR, new float[] {1, 1, 1, 1}); GL33.glFramebufferTexture(GL33.GL_FRAMEBUFFER, GL33.GL_DEPTH_ATTACHMENT, depth, 0); return depth; @@ -116,7 +116,7 @@ public class DisplayRender GL33.glEnable(GL33.GL_DEPTH_TEST); GL33.glUniform4f(Main.window.glsl_color, 1, 1, 1, 1); - GL33.glUniform4f(Main.window.glsl_discard_coords, -1, -1, 1, 1); + GL33.glUniform1i(Main.window.glsl_do_discard_coords, 0); ColorRange range = Main.world.getLayer().layergen.getLightLevel(); diff --git a/src/projectzombie/display/DisplayRenderUI.java b/src/projectzombie/display/DisplayRenderUI.java index d3435de..f37bf40 100755 --- a/src/projectzombie/display/DisplayRenderUI.java +++ b/src/projectzombie/display/DisplayRenderUI.java @@ -85,14 +85,17 @@ public class DisplayRenderUI model_health_b.setModel(matrix); model_health_b.render(); - GL33.glUniform4f(Main.window.glsl_discard_coords, -1, -1, (float)MathHelpers.map( + GL33.glUniform1i(Main.window.glsl_do_discard_coords, 1); + GL33.glUniform4f(Main.window.glsl_discard_coords, -10, -10, (float)MathHelpers.map( Main.player.getHealth(), 0, Main.player.maxHealth(), - offset, model_health_f.getWidth() + offset), 1); + offset, offset + model_health_f.getWidth()), 10); model_health_f.setModel(matrix); model_health_f.render(); + GL33.glUniform1i(Main.window.glsl_do_discard_coords, 0); + double temperature = MathHelpers.smoothStep(Main.player.getTemperature()); double hydration = MathHelpers.smoothStep(1 - Main.player.getHydration()) * 0.75; diff --git a/src/projectzombie/display/DisplayWindow.java b/src/projectzombie/display/DisplayWindow.java index ef46a13..17e2205 100755 --- a/src/projectzombie/display/DisplayWindow.java +++ b/src/projectzombie/display/DisplayWindow.java @@ -1,9 +1,5 @@ package projectzombie.display; -import static org.lwjgl.opengl.GL11.GL_FLOAT; -import static org.lwjgl.opengl.GL20.glEnableVertexAttribArray; -import static org.lwjgl.opengl.GL20.glVertexAttribPointer; - import java.nio.IntBuffer; import org.lwjgl.BufferUtils; @@ -28,7 +24,8 @@ import projectzombie.settings.Settings; public class DisplayWindow implements IMainloopTask { - public static boolean fullscreen = true; + public static boolean fullscreen; + public static boolean vsync; private long window; private long monitor; @@ -48,6 +45,7 @@ public class DisplayWindow implements IMainloopTask public int glsl_color; public int glsl_contrast; public int glsl_discard_coords; + public int glsl_do_discard_coords; public int glsl_model; public int glsl_camera; public int glsl_projection; @@ -70,6 +68,12 @@ public class DisplayWindow implements IMainloopTask public int glsl_effect_red_freq; public int glsl_effect_chill; + public static void setVSync(boolean status) + { + vsync = status; + GLFW.glfwSwapInterval(vsync ? 1 : 0); + } + public int getWidth() { return this.width; } @@ -121,7 +125,7 @@ public class DisplayWindow implements IMainloopTask // Make the cursor invisible GLFW.glfwSetInputMode(this.window, GLFW.GLFW_CURSOR, GLFW.GLFW_CURSOR_HIDDEN); - GLFW.glfwSwapInterval(0); + setVSync(vsync); // Show the window //GLFW.glfwShowWindow(this.window); @@ -137,6 +141,7 @@ public class DisplayWindow implements IMainloopTask glsl_projection_sun = GL33.glGetUniformLocation(environmentRenderer.program, "projection_sun"); glsl_time = GL33.glGetUniformLocation(environmentRenderer.program, "time"); glsl_discard_coords = GL33.glGetUniformLocation(environmentRenderer.program, "discard_coords"); + glsl_do_discard_coords = GL33.glGetUniformLocation(environmentRenderer.program, "do_discard_coords"); glsl_color = GL33.glGetUniformLocation(environmentRenderer.program, "color"); glsl_contrast = GL33.glGetUniformLocation(environmentRenderer.program, "contrast"); glsl_billboard = GL33.glGetUniformLocation(environmentRenderer.program, "billboard"); @@ -183,8 +188,8 @@ public class DisplayWindow implements IMainloopTask 1, 1, }, GL33.GL_STATIC_DRAW); - glVertexAttribPointer(0, 2, GL_FLOAT, false, Float.BYTES * 2, 0); - glEnableVertexAttribArray(0); + GL33.glVertexAttribPointer(0, 2, GL33.GL_FLOAT, false, Float.BYTES * 2, 0); + GL33.glEnableVertexAttribArray(0); int[] ptr = new int[1]; GL33.glGetIntegerv(GL33.GL_MAX_TEXTURE_SIZE, ptr); diff --git a/src/projectzombie/input/types/InputGUI.java b/src/projectzombie/input/types/InputGUI.java index 62d4f69..13c86bb 100755 --- a/src/projectzombie/input/types/InputGUI.java +++ b/src/projectzombie/input/types/InputGUI.java @@ -57,7 +57,9 @@ public class InputGUI implements Input public void hotbarGoto(boolean state, int pos) {} @Override - public void hotbarShift(boolean state, int amount) {} + public void hotbarShift(boolean state, int amount) { + gui.onScroll(amount); + } @Override public void mousePos(Vec2d pos) diff --git a/src/projectzombie/menu/MenuDeath.java b/src/projectzombie/menu/MenuDeath.java index f404951..8e39829 100755 --- a/src/projectzombie/menu/MenuDeath.java +++ b/src/projectzombie/menu/MenuDeath.java @@ -3,10 +3,9 @@ package projectzombie.menu; import projectzombie.Main; import projectzombie.input.types.InputGUI; import projectzombie.menu.gui.GUIButtonGroup; +import projectzombie.menu.gui.GUIButtonGroupPause; import projectzombie.menu.gui.GUI; -import projectzombie.menu.gui.components.ButtonBasic; -import projectzombie.menu.gui.components.ButtonGroupPause; -import projectzombie.menu.gui.components.OverlayBackground; +import projectzombie.menu.gui.GUIButtonBasic; public class MenuDeath extends Menu { @@ -20,11 +19,9 @@ public class MenuDeath extends Menu this.gui = new GUI(); this.input = new InputGUI(this.gui); - gui.add(new OverlayBackground()); + GUIButtonGroup group = new GUIButtonGroupPause(); - GUIButtonGroup group = new ButtonGroupPause(); - - group.add(new ButtonBasic("Quit", button -> { + group.add(new GUIButtonBasic("Quit", button -> { Main.menu = new MenuMain(); })); diff --git a/src/projectzombie/menu/MenuGamePause.java b/src/projectzombie/menu/MenuGamePause.java index 253fc42..1eec8e5 100755 --- a/src/projectzombie/menu/MenuGamePause.java +++ b/src/projectzombie/menu/MenuGamePause.java @@ -7,12 +7,11 @@ import bdf.types.BdfObject; import projectzombie.Main; import projectzombie.input.types.InputGUI; import projectzombie.menu.gui.GUIButtonGroup; +import projectzombie.menu.gui.GUIButtonGroupPause; +import projectzombie.menu.gui.GUILabelPause; import projectzombie.menu.gui.GUI; -import projectzombie.menu.gui.components.ButtonBasic; -import projectzombie.menu.gui.components.ButtonGroupPause; -import projectzombie.menu.gui.components.GUIBackToMenu; -import projectzombie.menu.gui.components.LabelPause; -import projectzombie.menu.gui.components.OverlayBackground; +import projectzombie.menu.gui.GUIBackToMenu; +import projectzombie.menu.gui.GUIButtonBasic; public class MenuGamePause extends Menu { @@ -26,12 +25,11 @@ public class MenuGamePause extends Menu this.gui = new GUIBackToMenu(Main.menu); this.input = new InputGUI(this.gui); - gui.add(new OverlayBackground()); - gui.add(new LabelPause("Game Paused")); + gui.add(new GUILabelPause("Game Paused")); - GUIButtonGroup group = new ButtonGroupPause(); + GUIButtonGroup group = new GUIButtonGroupPause(); - group.add(new ButtonBasic("Save And Exit", button -> { + group.add(new GUIButtonBasic("Save And Exit", button -> { saveAndQuit(); })); diff --git a/src/projectzombie/menu/MenuInventory.java b/src/projectzombie/menu/MenuInventory.java index d5fb9a1..fc5d44d 100644 --- a/src/projectzombie/menu/MenuInventory.java +++ b/src/projectzombie/menu/MenuInventory.java @@ -21,7 +21,7 @@ import projectzombie.menu.gui.GUIItemSlot; import projectzombie.menu.gui.GUIItemSlotGetter; import projectzombie.menu.gui.GUIItemSlotGetterStorage; import projectzombie.menu.gui.GUI; -import projectzombie.menu.gui.components.GUIBackToMenu; +import projectzombie.menu.gui.GUIBackToMenu; import projectzombie.model.Model; import projectzombie.util.gl.GlHelpers; import projectzombie.util.math.ItemStack; diff --git a/src/projectzombie/menu/MenuMain.java b/src/projectzombie/menu/MenuMain.java index a53fb88..8a377f0 100755 --- a/src/projectzombie/menu/MenuMain.java +++ b/src/projectzombie/menu/MenuMain.java @@ -7,9 +7,9 @@ import projectzombie.Main; import projectzombie.init.Layers; import projectzombie.input.types.InputGUI; import projectzombie.menu.gui.GUIButtonGroup; +import projectzombie.menu.gui.GUILabelMain; import projectzombie.menu.gui.GUI; -import projectzombie.menu.gui.components.ButtonBasic; -import projectzombie.menu.gui.components.LabelMain; +import projectzombie.menu.gui.GUIButtonBasic; public class MenuMain extends Menu { @@ -26,19 +26,19 @@ public class MenuMain extends Menu this.gui = new GUI(); this.input = new InputGUI(gui); - gui.add(new LabelMain()); + gui.add(new GUILabelMain()); GUIButtonGroup group = new GUIButtonGroup(); - group.add(new ButtonBasic("Play", button -> { + group.add(new GUIButtonBasic("Play", button -> { Main.menu = new MenuSaves(Main.menu); })); - group.add(new ButtonBasic("Settings", button -> { + group.add(new GUIButtonBasic("Settings", button -> { Main.menu = new MenuSettings(Main.menu); })); - group.add(new ButtonBasic("Quit", button -> { + group.add(new GUIButtonBasic("Quit", button -> { Main.mainloop.stop(); })); diff --git a/src/projectzombie/menu/MenuSaves.java b/src/projectzombie/menu/MenuSaves.java index 2006ea4..9a32069 100644 --- a/src/projectzombie/menu/MenuSaves.java +++ b/src/projectzombie/menu/MenuSaves.java @@ -12,19 +12,21 @@ import projectzombie.input.types.InputGUI; import projectzombie.menu.gui.GUI; import projectzombie.menu.gui.GUIAlignment; import projectzombie.menu.gui.GUIButton; +import projectzombie.menu.gui.GUIButtonBasic; +import projectzombie.menu.gui.GUIButtonCallback; import projectzombie.menu.gui.GUILabel; import projectzombie.menu.gui.GUISavesCard; import projectzombie.menu.gui.GUIButtonModel; -import projectzombie.menu.gui.components.ButtonBasic; -import projectzombie.menu.gui.components.ButtonCallback; -import projectzombie.menu.gui.components.ButtonSetting; +import projectzombie.menu.gui.GUIButtonSetting; +import projectzombie.menu.gui.GUIContainerSlider; public class MenuSaves extends Menu { private static final Random rand = new Random(); private Menu parent; - private GUI gui, gui_cards; + private GUIContainerSlider slider; + private GUI gui; public MenuSaves(Menu parent) { @@ -34,34 +36,25 @@ public class MenuSaves extends Menu doGameRender = parent.doGameRender; showIngameGUI = parent.showIngameGUI; - gui = new GUI() - { - @Override - public void render() - { - GL33.glUniform4f(Main.window.glsl_discard_coords, -0.5f, -0.5f, 0.5f, 0.5f); - super.render(); - GL33.glUniform4f(Main.window.glsl_discard_coords, -1, -1, 1, 1); - } - }; - - gui_cards = new GUI(); + gui = new GUI(); input = new InputGUI(gui); keepMouse = false; - ButtonBasic buttonBack = new ButtonBasic("Back", button -> { + GUIButtonBasic buttonBack = new GUIButtonBasic("Back", button -> { Main.menu = parent; }); - ButtonBasic buttonCreate = new ButtonBasic("Create", button -> { + GUIButtonBasic buttonCreate = new GUIButtonBasic("Create", button -> { Layers.createWorld(null, rand.nextLong()); Main.menu = new MenuGame(); }); + slider = new GUIContainerSlider(new Vec2d(-20, -5), new Vec2d(40, 10), 10); + GUISavesCard savesCard = new GUISavesCard(new Vec2d(0, 0)); - gui_cards.add(savesCard); + slider.add(savesCard); buttonBack.setAlign(GUIAlignment.RIGHT); buttonCreate.setAlign(GUIAlignment.LEFT); @@ -73,11 +66,11 @@ public class MenuSaves extends Menu labelSaves.setText("Saves"); labelSaves.setSize(new Vec2d(1, 1)); labelSaves.setPos(new Vec2d(0, 6.8)); - gui_cards.add(labelSaves); + gui.add(labelSaves); gui.add(buttonBack); gui.add(buttonCreate); - gui.add(gui_cards); + gui.add(slider); } @Override diff --git a/src/projectzombie/menu/MenuSettings.java b/src/projectzombie/menu/MenuSettings.java index 6de6d75..32d0661 100755 --- a/src/projectzombie/menu/MenuSettings.java +++ b/src/projectzombie/menu/MenuSettings.java @@ -8,21 +8,20 @@ import projectzombie.display.DisplayWindow; import projectzombie.entity.EntityParticle; import projectzombie.input.types.InputGUI; import projectzombie.menu.gui.GUIButton; +import projectzombie.menu.gui.GUIButtonBasic; import projectzombie.menu.gui.GUIButtonGroup; +import projectzombie.menu.gui.GUIButtonSetting; import projectzombie.menu.gui.GUI; +import projectzombie.menu.gui.GUIBackToMenu; import projectzombie.menu.gui.GUISelectableDirection; import projectzombie.menu.gui.GUILabel; -import projectzombie.menu.gui.components.ButtonBasic; -import projectzombie.menu.gui.components.ButtonSetting; -import projectzombie.menu.gui.components.GUIBackToMenu; -import projectzombie.menu.gui.components.OverlayBackground; import projectzombie.settings.SettingQuality; import projectzombie.settings.Settings; import projectzombie.world.chunk.Chunk; public class MenuSettings extends Menu { - public ButtonSetting buttonFullscreen; + public GUIButtonSetting buttonFullscreen; private GUI gui; private Menu menuOld; @@ -51,19 +50,25 @@ public class MenuSettings extends Menu GUIButtonGroup group = new GUIButtonGroup(); group.setPos(new Vec2d(-1, 4)); - group.add(new ButtonSetting("FPS: " + (DisplayRenderUI.showFPS ? "On" : "Off"), button -> { + group.add(new GUIButtonSetting("FPS: " + (DisplayRenderUI.showFPS ? "On" : "Off"), button -> { DisplayRenderUI.showFPS = !DisplayRenderUI.showFPS; button.setText("FPS: " + (DisplayRenderUI.showFPS ? "On" : "Off")); Settings.update(); })); - group.add(buttonFullscreen = new ButtonSetting("Fullscreen: " + (DisplayWindow.fullscreen ? "On" : "Off"), + group.add(new GUIButtonSetting("VSync: " + (DisplayWindow.vsync ? "On" : "Off"), button -> { + DisplayWindow.setVSync(!DisplayWindow.vsync); + button.setText("VSync: " + (DisplayWindow.vsync ? "On" : "Off")); + Settings.update(); + })); + + group.add(buttonFullscreen = new GUIButtonSetting("Fullscreen: " + (DisplayWindow.fullscreen ? "On" : "Off"), button -> { Main.window.toggleFullscreen(); button.setText("Fullscreen: " + (DisplayWindow.fullscreen ? "On" : "Off")); })); - group.add(new ButtonSetting("Debug mode: " + (DisplayRenderUI.debug ? "On" : "Off"), + group.add(new GUIButtonSetting("Debug mode: " + (DisplayRenderUI.debug ? "On" : "Off"), button -> { DisplayRenderUI.debug = !DisplayRenderUI.debug; @@ -71,7 +76,7 @@ public class MenuSettings extends Menu Settings.update(); })); - group.add(new ButtonSetting("Render distance: "+Chunk.RENDER_DISTANCE, button -> { + group.add(new GUIButtonSetting("Render distance: "+Chunk.RENDER_DISTANCE, button -> { Chunk.RENDER_DISTANCE += 1; if(Chunk.RENDER_DISTANCE > 8) { Chunk.RENDER_DISTANCE = 2; @@ -80,7 +85,7 @@ public class MenuSettings extends Menu Settings.update(); })); - group.add(new ButtonSetting("Shadows: " + render(DisplayRender.getShadowQuality()), button -> + group.add(new GUIButtonSetting("Shadows: " + render(DisplayRender.getShadowQuality()), button -> { SettingQuality quality = DisplayRender.getShadowQuality(); @@ -127,10 +132,6 @@ public class MenuSettings extends Menu gui = new GUIBackToMenu(menuOld); input = new InputGUI(gui); - if(doGameRender) { - gui.add(new OverlayBackground()); - } - gui.add(group); GUILabel labelSettings = new GUILabel(); @@ -139,7 +140,7 @@ public class MenuSettings extends Menu labelSettings.setPos(new Vec2d(0, 6.8)); gui.add(labelSettings); - GUIButton buttonBack = new ButtonBasic("Back", new Vec2d(0, -8), button -> { + GUIButton buttonBack = new GUIButtonBasic("Back", new Vec2d(0, -8), button -> { Main.menu = menuOld; }); diff --git a/src/projectzombie/menu/gui/GUI.java b/src/projectzombie/menu/gui/GUI.java index c7e0d10..1111807 100755 --- a/src/projectzombie/menu/gui/GUI.java +++ b/src/projectzombie/menu/gui/GUI.java @@ -2,6 +2,7 @@ package projectzombie.menu.gui; import java.util.ArrayList; +import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; public class GUI implements GUIContainer @@ -24,14 +25,14 @@ public class GUI implements GUIContainer } @Override - public void render(Vec2d mousePos) { + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { for(GUIComponent c : components) { - c.render(mousePos); + c.render(matrix, mousePos, canHover); } } public void render() { - this.render(mousePos); + this.render(Matrix4.identity(), mousePos, true); } @Override @@ -141,4 +142,15 @@ public class GUI implements GUIContainer } } + @Override + public void onScroll(Vec2d mousePos, double amount) { + for(GUIComponent c : components) { + c.onScroll(mousePos, amount); + } + } + + public void onScroll(int amount) { + onScroll(mousePos, amount / 10.0); + } + } diff --git a/src/projectzombie/menu/gui/components/GUIBackToMenu.java b/src/projectzombie/menu/gui/GUIBackToMenu.java similarity index 77% rename from src/projectzombie/menu/gui/components/GUIBackToMenu.java rename to src/projectzombie/menu/gui/GUIBackToMenu.java index 0b933b2..e1173c9 100755 --- a/src/projectzombie/menu/gui/components/GUIBackToMenu.java +++ b/src/projectzombie/menu/gui/GUIBackToMenu.java @@ -1,8 +1,7 @@ -package projectzombie.menu.gui.components; +package projectzombie.menu.gui; import projectzombie.Main; import projectzombie.menu.Menu; -import projectzombie.menu.gui.GUI; public class GUIBackToMenu extends GUI { diff --git a/src/projectzombie/menu/gui/GUIButton.java b/src/projectzombie/menu/gui/GUIButton.java index 318220a..217b3f8 100755 --- a/src/projectzombie/menu/gui/GUIButton.java +++ b/src/projectzombie/menu/gui/GUIButton.java @@ -69,7 +69,7 @@ public class GUIButton implements GUIComponent, GUISelectable } @Override - public void render(Vec2d mousePos) + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { if(this.dirty) { this.updateMatrix(); @@ -77,14 +77,14 @@ public class GUIButton implements GUIComponent, GUISelectable } ModelGui model; - boolean mouseHover = InputMode.Controller ? this.selected : this.checkMouseHover(mousePos); + boolean mouseHover = InputMode.Controller ? this.selected : (this.checkMouseHover(mousePos) && canHover); if(mouseHover) { model = Models.UI_BUTTON_HOVER; } else { model = Models.UI_BUTTON; } - model.setModel(matrix); + model.setModel(Matrix4.multiply(this.matrix, matrix)); model.render(); Text.render(text, matrix_text); @@ -171,6 +171,9 @@ public class GUIButton implements GUIComponent, GUISelectable @Override public void onRightClick(Vec2d pos) { - + } + + @Override + public void onScroll(Vec2d mousePos, double amount) { } } diff --git a/src/projectzombie/menu/gui/GUIButtonBasic.java b/src/projectzombie/menu/gui/GUIButtonBasic.java new file mode 100755 index 0000000..ba0857a --- /dev/null +++ b/src/projectzombie/menu/gui/GUIButtonBasic.java @@ -0,0 +1,27 @@ +package projectzombie.menu.gui; + +import gl_engine.vec.Vec2d; + +public class GUIButtonBasic extends GUIButton { + + private GUIButtonCallback callback; + + public GUIButtonBasic(String text, GUIButtonCallback callback) { + setText(text); + + this.callback = callback; + } + + public GUIButtonBasic(String text, Vec2d pos, GUIButtonCallback callback) { + this(text, callback); + + setPos(pos); + } + + @Override + public void onMouseClick(Vec2d pos) { + super.onMouseClick(pos); + + callback.onClick(this); + } +} diff --git a/src/projectzombie/menu/gui/GUIButtonCallback.java b/src/projectzombie/menu/gui/GUIButtonCallback.java new file mode 100755 index 0000000..cbe8cae --- /dev/null +++ b/src/projectzombie/menu/gui/GUIButtonCallback.java @@ -0,0 +1,5 @@ +package projectzombie.menu.gui; + +public interface GUIButtonCallback { + public void onClick(GUIButton button); +} diff --git a/src/projectzombie/menu/gui/GUIButtonGroup.java b/src/projectzombie/menu/gui/GUIButtonGroup.java index 4416623..fde57f3 100755 --- a/src/projectzombie/menu/gui/GUIButtonGroup.java +++ b/src/projectzombie/menu/gui/GUIButtonGroup.java @@ -2,6 +2,7 @@ package projectzombie.menu.gui; import java.util.ArrayList; +import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; public class GUIButtonGroup implements GUIContainer @@ -36,9 +37,9 @@ public class GUIButtonGroup implements GUIContainer } @Override - public void render(Vec2d mousePos) { + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { for(GUIButton b : buttons) { - b.render(mousePos); + b.render(matrix, mousePos, canHover); } } @@ -96,5 +97,12 @@ public class GUIButtonGroup implements GUIContainer b.onRightClick(pos); } } + + @Override + public void onScroll(Vec2d mousePos, double amount) { + for(GUIButton c : buttons) { + c.onScroll(mousePos, amount); + } + } } diff --git a/src/projectzombie/menu/gui/components/ButtonGroupPause.java b/src/projectzombie/menu/gui/GUIButtonGroupPause.java similarity index 52% rename from src/projectzombie/menu/gui/components/ButtonGroupPause.java rename to src/projectzombie/menu/gui/GUIButtonGroupPause.java index 62ac186..d5643ef 100755 --- a/src/projectzombie/menu/gui/components/ButtonGroupPause.java +++ b/src/projectzombie/menu/gui/GUIButtonGroupPause.java @@ -1,15 +1,14 @@ -package projectzombie.menu.gui.components; +package projectzombie.menu.gui; import gl_engine.vec.Vec2d; import projectzombie.Main; import projectzombie.menu.MenuSettings; -import projectzombie.menu.gui.GUIButtonGroup; -public class ButtonGroupPause extends GUIButtonGroup +public class GUIButtonGroupPause extends GUIButtonGroup { - public ButtonGroupPause() + public GUIButtonGroupPause() { - add(new ButtonBasic("Settings", button -> { + add(new GUIButtonBasic("Settings", button -> { Main.menu.input.mousePos(new Vec2d(0, 0)); Main.menu = new MenuSettings(Main.menu); })); diff --git a/src/projectzombie/menu/gui/GUIButtonModel.java b/src/projectzombie/menu/gui/GUIButtonModel.java index 5c414db..f8ef2bd 100644 --- a/src/projectzombie/menu/gui/GUIButtonModel.java +++ b/src/projectzombie/menu/gui/GUIButtonModel.java @@ -28,11 +28,11 @@ public class GUIButtonModel implements GUIComponent } @Override - public void render(Vec2d mousePos) + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { - Model model = checkMouseHover(mousePos) ? this.modelHover : this.model; + Model model = (checkMouseHover(mousePos) && canHover) ? this.modelHover : this.model; - model.setModel(Matrix4.translate(pos.x, pos.y, 0)); + model.setModel(Matrix4.multiply(Matrix4.translate(pos.x, pos.y, 0), matrix)); model.render(); } @@ -65,5 +65,9 @@ public class GUIButtonModel implements GUIComponent @Override public void onBack() { } + + @Override + public void onScroll(Vec2d mousePos, double amount) { + } } diff --git a/src/projectzombie/menu/gui/components/ButtonSetting.java b/src/projectzombie/menu/gui/GUIButtonSetting.java similarity index 56% rename from src/projectzombie/menu/gui/components/ButtonSetting.java rename to src/projectzombie/menu/gui/GUIButtonSetting.java index 63543c0..57d945d 100755 --- a/src/projectzombie/menu/gui/components/ButtonSetting.java +++ b/src/projectzombie/menu/gui/GUIButtonSetting.java @@ -1,13 +1,12 @@ -package projectzombie.menu.gui.components; +package projectzombie.menu.gui; import gl_engine.vec.Vec2d; -import projectzombie.menu.gui.GUIAlignment; import projectzombie.settings.Settings; -public class ButtonSetting extends ButtonBasic +public class GUIButtonSetting extends GUIButtonBasic { - public ButtonSetting(String text, ButtonCallback callback) { + public GUIButtonSetting(String text, GUIButtonCallback callback) { super(text, callback); this.setAlign(GUIAlignment.RIGHT); diff --git a/src/projectzombie/menu/gui/GUIComponent.java b/src/projectzombie/menu/gui/GUIComponent.java index ec59442..4221c30 100755 --- a/src/projectzombie/menu/gui/GUIComponent.java +++ b/src/projectzombie/menu/gui/GUIComponent.java @@ -1,16 +1,18 @@ package projectzombie.menu.gui; +import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; public interface GUIComponent { - public void render(Vec2d mousePos); + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover); public void update(Vec2d mousePos); - public boolean checkMouseHover(Vec2d pos); + public boolean checkMouseHover(Vec2d mousePos); - public void onRightClick(Vec2d pos); - public void onMouseClick(Vec2d pos); + public void onScroll(Vec2d mousePos, double amount); + public void onRightClick(Vec2d mousePos); + public void onMouseClick(Vec2d mousePos); public void onActivate(); public void onBack(); } diff --git a/src/projectzombie/menu/gui/GUIContainerSlider.java b/src/projectzombie/menu/gui/GUIContainerSlider.java new file mode 100644 index 0000000..6d23cc1 --- /dev/null +++ b/src/projectzombie/menu/gui/GUIContainerSlider.java @@ -0,0 +1,145 @@ +package projectzombie.menu.gui; + +import java.util.ArrayList; + +import org.lwjgl.opengl.GL33; + +import gl_engine.matrix.Matrix4; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec4d; +import projectzombie.Main; + +public class GUIContainerSlider implements GUIComponent, GUIContainer +{ + private ArrayList components = new ArrayList(); + private Vec2d pos; + private Vec2d size; + private double length; + private double scroll = 0; + + public GUIContainerSlider(Vec2d pos, Vec2d size, double length) { + this.pos = pos; + this.size = size; + this.length = length; + } + + public void setLength(double length) { + this.length = length; + } + + @Override + public void add(GUIComponent c) { + components.add(c); + } + + @Override + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) + { + if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) { + canHover = false; + } + + matrix = Matrix4.multiply(matrix, Matrix4.translate(0, -scroll, 0)); + mousePos = mousePos.add(new Vec2d(0, scroll)); + + GL33.glUniform1i(Main.window.glsl_do_discard_coords, 1); + GL33.glUniform4f(Main.window.glsl_discard_coords, + (float)pos.x, (float)pos.y, (float)(pos.x + size.x), (float)(pos.y + size.y)); + + for(GUIComponent c : components) { + c.render(matrix, mousePos, canHover); + } + + GL33.glUniform1i(Main.window.glsl_do_discard_coords, 0); + } + + @Override + public void update(Vec2d mousePos) + { + if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) { + return; + } + + mousePos = mousePos.add(new Vec2d(0, scroll)); + + for(GUIComponent c : components) { + c.update(mousePos); + } + } + + @Override + public boolean checkMouseHover(Vec2d pos) { + return true; + } + + @Override + public void onRightClick(Vec2d mousePos) + { + if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) { + return; + } + + mousePos = mousePos.add(new Vec2d(0, scroll)); + + for(GUIComponent c : components) { + if(c.checkMouseHover(mousePos)) { + c.onRightClick(mousePos); + } + } + } + + @Override + public void onMouseClick(Vec2d mousePos) + { + if(mousePos.y < pos.y || mousePos.y > pos.y + size.y) { + return; + } + + mousePos = mousePos.add(new Vec2d(0, scroll)); + + for(GUIComponent c : components) { + if(c.checkMouseHover(mousePos)) { + c.onMouseClick(mousePos); + } + } + } + + @Override + public void onActivate() { + for(GUIComponent c : components) { + c.onActivate(); + } + } + + @Override + public void onBack() { + for(GUIComponent c : components) { + c.onBack(); + } + } + + @Override + public void onScroll(Vec2d mousePos, double amount) + { + // Only scroll if the mouse is hovering over the scroll area + if( + mousePos.x > pos.x && mousePos.x < pos.x + size.x && + mousePos.y > pos.y && mousePos.y < pos.y + size.y) + { + scroll -= amount; + + if(scroll < 0) { + scroll = 0; + } + + if(scroll > length) { + scroll = length; + } + } + + for(GUIComponent c : components) { + c.onScroll(mousePos, amount); + } + } + +} diff --git a/src/projectzombie/menu/gui/GUIItemHolder.java b/src/projectzombie/menu/gui/GUIItemHolder.java index 53ababf..e703a76 100644 --- a/src/projectzombie/menu/gui/GUIItemHolder.java +++ b/src/projectzombie/menu/gui/GUIItemHolder.java @@ -22,12 +22,12 @@ public class GUIItemHolder implements GUIComponent } @Override - public void render(Vec2d mousePos) + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { if(!holding.isEmpty()) { Model model = holding.item.getModel(holding.meta).getGuiModel(); - Matrix4 matrix = Matrix4.translate(mousePos.x - 0.425, mousePos.y - 0.425, 0); + matrix = Matrix4.multiply(Matrix4.translate(mousePos.x - 0.425, mousePos.y - 0.425, 0), matrix); model.setModel(matrix); model.render(); @@ -187,5 +187,9 @@ public class GUIItemHolder implements GUIComponent holding.count = 0; } } + + @Override + public void onScroll(Vec2d mousePos, double amount) { + } } diff --git a/src/projectzombie/menu/gui/GUIItemSlot.java b/src/projectzombie/menu/gui/GUIItemSlot.java index 6ebfe26..548f15d 100644 --- a/src/projectzombie/menu/gui/GUIItemSlot.java +++ b/src/projectzombie/menu/gui/GUIItemSlot.java @@ -48,11 +48,11 @@ public class GUIItemSlot implements GUIComponent } @Override - public void render(Vec2d mousePos) + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { ItemStack stack = getter.getItemStack(); - Matrix4 matrix = Matrix4.translate(pos.x, pos.y, 0); + matrix = Matrix4.multiply(Matrix4.translate(pos.x, pos.y, 0), matrix); Model model = stack.item.getModel(stack.meta).getGuiModel(); if(stack.isEmpty()) { @@ -65,7 +65,7 @@ public class GUIItemSlot implements GUIComponent model.render(); } - if(checkMouseHover(mousePos)) + if(checkMouseHover(mousePos) && canHover) { double offset = (0.85 - hitboxSize) / 2; Matrix4 hover_matrix = Matrix4.multiply(matrix, Matrix4.translate(offset, offset, 0)); @@ -122,5 +122,8 @@ public class GUIItemSlot implements GUIComponent public void update(Vec2d mousePos) { } + @Override + public void onScroll(Vec2d mousePos, double amount) { + } } diff --git a/src/projectzombie/menu/gui/GUILabel.java b/src/projectzombie/menu/gui/GUILabel.java index 283e5f6..9cf2c9d 100755 --- a/src/projectzombie/menu/gui/GUILabel.java +++ b/src/projectzombie/menu/gui/GUILabel.java @@ -29,7 +29,7 @@ public class GUILabel implements GUIComponent } @Override - public void render(Vec2d mousePos) + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { double off = 0; @@ -45,7 +45,6 @@ public class GUILabel implements GUIComponent break; } - Matrix4 matrix = Matrix4.identity(); matrix = Matrix4.multiply(matrix, Matrix4.scale(new Vec3d(size, 1))); matrix = Matrix4.multiply(matrix, Matrix4.translate(pos.x - off, pos.y, 1)); @@ -76,5 +75,9 @@ public class GUILabel implements GUIComponent @Override public void onRightClick(Vec2d pos) { } + + @Override + public void onScroll(Vec2d mousePos, double amount) { + } } diff --git a/src/projectzombie/menu/gui/GUILabelMain.java b/src/projectzombie/menu/gui/GUILabelMain.java new file mode 100755 index 0000000..ce8bdba --- /dev/null +++ b/src/projectzombie/menu/gui/GUILabelMain.java @@ -0,0 +1,12 @@ +package projectzombie.menu.gui; + +import gl_engine.vec.Vec2d; + +public class GUILabelMain extends GUILabel +{ + public GUILabelMain() { + setText("Project Zombie"); + setSize(new Vec2d(1.2, 1.2)); + setPos(new Vec2d(0, 3.2)); + } +} diff --git a/src/projectzombie/menu/gui/GUILabelPause.java b/src/projectzombie/menu/gui/GUILabelPause.java new file mode 100755 index 0000000..966a008 --- /dev/null +++ b/src/projectzombie/menu/gui/GUILabelPause.java @@ -0,0 +1,12 @@ +package projectzombie.menu.gui; + +import gl_engine.vec.Vec2d; + +public class GUILabelPause extends GUILabel +{ + public GUILabelPause(String text) { + setText(text); + setPos(new Vec2d(0, 2.4)); + setSize(new Vec2d(1, 1)); + } +} diff --git a/src/projectzombie/menu/gui/GUIOverlay.java b/src/projectzombie/menu/gui/GUIOverlay.java deleted file mode 100755 index 5054cc2..0000000 --- a/src/projectzombie/menu/gui/GUIOverlay.java +++ /dev/null @@ -1,48 +0,0 @@ -package projectzombie.menu.gui; - -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec3d; -import gl_engine.vec.Vec4d; - -public class GUIOverlay implements GUIComponent -{ - Vec4d color = new Vec4d(0, 0, 0, 0); - - public void setColor(Vec3d color) { - this.color = new Vec4d(color.x, color.y, color.z, this.color.m); - } - - public void setColor(Vec4d color) { - this.color = color; - } - - @Override - public void render(Vec2d mousePos) { - } - - @Override - public boolean checkMouseHover(Vec2d pos) { - return false; - } - - @Override - public void onMouseClick(Vec2d pos) { - } - - @Override - public void onBack() { - } - - @Override - public void onActivate() { - } - - @Override - public void update(Vec2d mousePos) { - } - - @Override - public void onRightClick(Vec2d pos) { - } - -} diff --git a/src/projectzombie/menu/gui/GUISavesCard.java b/src/projectzombie/menu/gui/GUISavesCard.java index cb8c036..ce2d75c 100644 --- a/src/projectzombie/menu/gui/GUISavesCard.java +++ b/src/projectzombie/menu/gui/GUISavesCard.java @@ -40,13 +40,13 @@ public class GUISavesCard implements GUIComponent } @Override - public void render(Vec2d mousePos) + public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { - LABEL.setModel(Matrix4.translate(pos.x, pos.y, 0)); + LABEL.setModel(Matrix4.multiply(Matrix4.translate(pos.x, pos.y, 0), matrix)); LABEL.render(); - buttonDelete.render(mousePos); - buttonPlay.render(mousePos); + buttonDelete.render(matrix, mousePos, canHover); + buttonPlay.render(matrix, mousePos, canHover); } @Override @@ -89,4 +89,8 @@ public class GUISavesCard implements GUIComponent buttonPlay.onBack(); } + @Override + public void onScroll(Vec2d mousePos, double amount) { + } + } diff --git a/src/projectzombie/menu/gui/components/ButtonBasic.java b/src/projectzombie/menu/gui/components/ButtonBasic.java deleted file mode 100755 index 7c2560e..0000000 --- a/src/projectzombie/menu/gui/components/ButtonBasic.java +++ /dev/null @@ -1,28 +0,0 @@ -package projectzombie.menu.gui.components; - -import gl_engine.vec.Vec2d; -import projectzombie.menu.gui.GUIButton; - -public class ButtonBasic extends GUIButton { - - private ButtonCallback callback; - - public ButtonBasic(String text, ButtonCallback callback) { - setText(text); - - this.callback = callback; - } - - public ButtonBasic(String text, Vec2d pos, ButtonCallback callback) { - this(text, callback); - - setPos(pos); - } - - @Override - public void onMouseClick(Vec2d pos) { - super.onMouseClick(pos); - - callback.onClick(this); - } -} diff --git a/src/projectzombie/menu/gui/components/ButtonCallback.java b/src/projectzombie/menu/gui/components/ButtonCallback.java deleted file mode 100755 index 93dd839..0000000 --- a/src/projectzombie/menu/gui/components/ButtonCallback.java +++ /dev/null @@ -1,7 +0,0 @@ -package projectzombie.menu.gui.components; - -import projectzombie.menu.gui.GUIButton; - -public interface ButtonCallback { - public void onClick(GUIButton button); -} diff --git a/src/projectzombie/menu/gui/components/LabelMain.java b/src/projectzombie/menu/gui/components/LabelMain.java deleted file mode 100755 index 89a22da..0000000 --- a/src/projectzombie/menu/gui/components/LabelMain.java +++ /dev/null @@ -1,13 +0,0 @@ -package projectzombie.menu.gui.components; - -import gl_engine.vec.Vec2d; -import projectzombie.menu.gui.GUILabel; - -public class LabelMain extends GUILabel -{ - public LabelMain() { - setText("Project Zombie"); - setSize(new Vec2d(1.2, 1.2)); - setPos(new Vec2d(0, 3.2)); - } -} diff --git a/src/projectzombie/menu/gui/components/LabelPause.java b/src/projectzombie/menu/gui/components/LabelPause.java deleted file mode 100755 index 2ef7b21..0000000 --- a/src/projectzombie/menu/gui/components/LabelPause.java +++ /dev/null @@ -1,13 +0,0 @@ -package projectzombie.menu.gui.components; - -import gl_engine.vec.Vec2d; -import projectzombie.menu.gui.GUILabel; - -public class LabelPause extends GUILabel -{ - public LabelPause(String text) { - setText(text); - setPos(new Vec2d(0, 2.4)); - setSize(new Vec2d(1, 1)); - } -} diff --git a/src/projectzombie/menu/gui/components/OverlayBackground.java b/src/projectzombie/menu/gui/components/OverlayBackground.java deleted file mode 100755 index d5c70f8..0000000 --- a/src/projectzombie/menu/gui/components/OverlayBackground.java +++ /dev/null @@ -1,11 +0,0 @@ -package projectzombie.menu.gui.components; - -import gl_engine.vec.Vec4d; -import projectzombie.menu.gui.GUIOverlay; - -public class OverlayBackground extends GUIOverlay -{ - public OverlayBackground() { - setColor(new Vec4d(0, 0, 0, 0.5)); - } -} diff --git a/src/projectzombie/settings/Settings.java b/src/projectzombie/settings/Settings.java index 8c0b710..bcc74ee 100755 --- a/src/projectzombie/settings/Settings.java +++ b/src/projectzombie/settings/Settings.java @@ -42,6 +42,14 @@ public class Settings implements IBdfClassManager if(nl.get("fullscreen").getType() == BdfTypes.BOOLEAN) { DisplayWindow.fullscreen = nl.get("fullscreen").getBoolean(); + } else { + DisplayWindow.fullscreen = true; + } + + if(nl.get("vsync").getType() == BdfTypes.BOOLEAN) { + DisplayWindow.vsync = nl.get("vsync").getBoolean(); + } else { + DisplayWindow.vsync = true; } if(nl.get("shadow_size").getType() == BdfTypes.INTEGER) @@ -110,7 +118,8 @@ public class Settings implements IBdfClassManager nl.set("show_fps", BdfObject.withBoolean(DisplayRenderUI.showFPS)); nl.set("debug", BdfObject.withBoolean(DisplayRenderUI.debug)); nl.set("shadow_size", BdfObject.withInteger(shadow_size)); - nl.set("fullscreen", BdfObject.withBoolean(Main.window.fullscreen)); + nl.set("fullscreen", BdfObject.withBoolean(DisplayWindow.fullscreen)); + nl.set("vsync", BdfObject.withBoolean(DisplayWindow.vsync)); } public static void init() { diff --git a/src/resources/shader/environmentRenderer.fsh b/src/resources/shader/environmentRenderer.fsh index 8e940c6..e9a3799 100644 --- a/src/resources/shader/environmentRenderer.fsh +++ b/src/resources/shader/environmentRenderer.fsh @@ -23,6 +23,7 @@ uniform vec3 lighting_day_high; uniform vec2 lightmap_offset; uniform vec2 lightmap_size; +uniform int do_discard_coords; uniform vec4 discard_coords; uniform vec4 color; @@ -100,7 +101,7 @@ void main() FragColor.b = min(1, FragColor.b); } - discard(textureRGB.a == 0 || ( + discard(textureRGB.a == 0 || (do_discard_coords == 1 && ( pVertex.x < discard_coords.x || pVertex.y < discard_coords.y || - pVertex.x > discard_coords.z || pVertex.y > discard_coords.w)); + pVertex.x > discard_coords.z || pVertex.y > discard_coords.w))); } \ No newline at end of file diff --git a/src/resources/shader/environmentRenderer.vsh b/src/resources/shader/environmentRenderer.vsh index 3a30cf6..f34f336 100644 --- a/src/resources/shader/environmentRenderer.vsh +++ b/src/resources/shader/environmentRenderer.vsh @@ -66,9 +66,8 @@ void main() vec4 pos = vec4(aPos, 1) * (mod(type >> 3, 2) == 1 ? billboard : (mod(type, 2) == 1 ? rotated : mat4(1))) * translate(aOffset) * model; - vec4 vertex = pos * projection; - gl_Position = vertex; - pVertex = vertex.xy / vertex.w; + gl_Position = pos * projection; + pVertex = pos.xy / pos.w; if(mode == 0) { pCameraDepth = mod(type >> 4, 2) == 1 ? 0 : min(1, mist * (-(pos * camera).z * 0.5 + 0.5)); diff --git a/src/resources/texture/gui/label.png b/src/resources/texture/gui/label.png index 45a3a97..a96ece8 100644 Binary files a/src/resources/texture/gui/label.png and b/src/resources/texture/gui/label.png differ diff --git a/src/resources/texture/gui/selection_box.png b/src/resources/texture/gui/selection_box.png new file mode 100644 index 0000000..596591b Binary files /dev/null and b/src/resources/texture/gui/selection_box.png differ diff --git a/src/resources/texture/list.txt b/src/resources/texture/list.txt index ac165f3..9783435 100644 --- a/src/resources/texture/list.txt +++ b/src/resources/texture/list.txt @@ -79,6 +79,7 @@ ./gui/button_play.png ./gui/slot_armor_legs.png ./gui/inventory.png +./gui/selection_box.png ./gui/label.png ./gui/slot_clothing_pants.png ./gui/health_empty.png diff --git a/texmap.xcf b/texmap.xcf deleted file mode 100755 index 855faec..0000000 Binary files a/texmap.xcf and /dev/null differ