diff --git a/assets/game/settings.conf b/assets/game/settings.conf index 8564ec154..1a099f29d 100644 --- a/assets/game/settings.conf +++ b/assets/game/settings.conf @@ -1,12 +1,12 @@ #Voxel Settings -#Sun Dec 27 16:19:57 CST 2015 +#Mon Dec 28 20:22:57 CST 2015 UPS=30 VSYNC=false useMotionBlur=false useFXAA=false DrawDistance=2 SettingsVersion=3 -useVolumetricLight=false +useVolumetricLight=true TESTXMOD=Hello Voxel FPS=30 useDOF=false diff --git a/assets/shaders/FragmentWater.glsl b/assets/shaders/FragmentWater.glsl index 04e02ecfb..5189909a1 100644 --- a/assets/shaders/FragmentWater.glsl +++ b/assets/shaders/FragmentWater.glsl @@ -70,7 +70,7 @@ void main(void) { out_Color[0] = vec4(0.0, 0.266, 0.635, 0.0); out_Color[1] = vec4(pass_position.xyz, 0.0); - out_Color[2] = vec4(sin(pass_position.x + moveFactor) * 0.05, 1.0, cos(pass_position.z + moveFactor) * 0.02, 0.0); + out_Color[2] = vec4(sin(pass_position.x + moveFactor) * 0.05, 1.0, cos(pass_position.z - moveFactor) * 0.02, 0.0); out_Color[3] = vec4(1.0,1.0,0.0,shadow); out_Color[4] = vec4(0.0,0.0,0.0,0.0); diff --git a/assets/shaders/VertexWater.glsl b/assets/shaders/VertexWater.glsl index 37bd034bb..197902d11 100644 --- a/assets/shaders/VertexWater.glsl +++ b/assets/shaders/VertexWater.glsl @@ -42,7 +42,7 @@ uniform int useShadows; void main(void) { vec4 worldPosition = modelMatrix * vec4(position.x, 0.0, position.y, 1.0); float sina = sin(worldPosition.x + moveFactor) * 0.05; - float sinb = cos(worldPosition.z + moveFactor) * 0.02; + float sinb = cos(worldPosition.z - moveFactor) * 0.02; worldPosition += vec4(0.0, sina + sinb, 0.0, 0.0); gl_Position = projectionMatrix * viewMatrix * worldPosition; pass_position = worldPosition.xyz; diff --git a/src/main/java/net/guerra24/voxel/client/core/Voxel.java b/src/main/java/net/guerra24/voxel/client/core/Voxel.java index ecb974129..57d9c692d 100644 --- a/src/main/java/net/guerra24/voxel/client/core/Voxel.java +++ b/src/main/java/net/guerra24/voxel/client/core/Voxel.java @@ -37,6 +37,7 @@ import net.guerra24.voxel.client.bootstrap.Bootstrap; import net.guerra24.voxel.client.graphics.TextMasterRenderer; import net.guerra24.voxel.client.graphics.opengl.Display; +import net.guerra24.voxel.client.input.Mouse; import net.guerra24.voxel.client.network.DedicatedClient; import net.guerra24.voxel.client.resources.GameResources; import net.guerra24.voxel.client.util.Logger; @@ -143,6 +144,7 @@ private void postInit() { gameResources.getSoundSystem().play("menu1"); else gameResources.getSoundSystem().play("menu2"); + Mouse.setHidden(true); } /** diff --git a/src/main/java/net/guerra24/voxel/client/core/VoxelVariables.java b/src/main/java/net/guerra24/voxel/client/core/VoxelVariables.java index 3b16565f6..5be97a100 100644 --- a/src/main/java/net/guerra24/voxel/client/core/VoxelVariables.java +++ b/src/main/java/net/guerra24/voxel/client/core/VoxelVariables.java @@ -46,7 +46,7 @@ public class VoxelVariables { public static final String apiVersion = "0.0.6"; public static final int apiVersionNum = 000006; public static final String state = "ALPHA"; - public static final int build = 140; + public static final int build = 141; public static int FOV = 90; public static int WIDTH = 1280; public static int HEIGHT = 720; @@ -59,6 +59,11 @@ public class VoxelVariables { public static boolean autostart = false; public static boolean christmas = false; public static final String settings = "assets/game/settings.conf"; + + /** + * External Data + */ + public static final String web = "http://guerra24.net/"; /** * Graphic Settings */ diff --git a/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java b/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java index de01e460c..c0fe6c55f 100644 --- a/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java +++ b/src/main/java/net/guerra24/voxel/client/core/states/InPauseState.java @@ -37,6 +37,7 @@ import net.guerra24.voxel.client.core.State; import net.guerra24.voxel.client.core.Voxel; import net.guerra24.voxel.client.core.VoxelVariables; +import net.guerra24.voxel.client.graphics.MenuRendering; import net.guerra24.voxel.client.graphics.opengl.Display; import net.guerra24.voxel.client.input.Mouse; import net.guerra24.voxel.client.particle.ParticleMaster; @@ -70,8 +71,7 @@ public void update(Voxel voxel, GlobalStates states, float delta) { gm.getCamera().setPitch(0); gm.getCamera().setYaw(0); states.setState(GameState.MAINMENU); - } - if(gm.getMenuSystem().pauseMenu.getOptionsButton().pressed()){ + } else if (gm.getMenuSystem().pauseMenu.getOptionsButton().pressed()) { states.setState(GameState.OPTIONS); } } @@ -81,7 +81,7 @@ public void update(Voxel voxel, GlobalStates states, float delta) { public void render(Voxel voxel, GlobalStates states, float delta) { GameResources gm = voxel.getGameResources(); WorldsHandler worlds = voxel.getWorldsHandler(); - + worlds.getActiveWorld().lighting(); gm.getFrustum().calculateFrustum(gm.getMasterShadowRenderer().getProjectionMatrix(), gm.getSun_Camera()); if (VoxelVariables.useShadows) { @@ -94,7 +94,7 @@ public void render(Voxel voxel, GlobalStates states, float delta) { gm.getFrustum().calculateFrustum(gm.getRenderer().getProjectionMatrix(), gm.getCamera()); gm.getRenderer().prepare(); worlds.getActiveWorld().updateChunksOcclusion(gm); - + gm.getDeferredShadingRenderer().getPost_fbo().begin(); gm.getRenderer().prepare(); gm.getSkyboxRenderer().render(VoxelVariables.RED, VoxelVariables.GREEN, VoxelVariables.BLUE, delta, gm); @@ -108,9 +108,10 @@ public void render(Voxel voxel, GlobalStates states, float delta) { gm.getRenderer().prepare(); gm.getDeferredShadingRenderer().render(gm); - + Display.beingNVGFrame(); gm.getMenuSystem().pauseMenu.render(); + MenuRendering.renderMouse(); Display.endNVGFrame(); } diff --git a/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java b/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java index 8847f9603..85b234fba 100644 --- a/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java +++ b/src/main/java/net/guerra24/voxel/client/core/states/MainMenuState.java @@ -28,6 +28,7 @@ import net.guerra24.voxel.client.core.GlobalStates.GameState; import net.guerra24.voxel.client.core.State; import net.guerra24.voxel.client.core.Voxel; +import net.guerra24.voxel.client.graphics.MenuRendering; import net.guerra24.voxel.client.graphics.opengl.Display; import net.guerra24.voxel.client.resources.GameResources; @@ -50,6 +51,7 @@ public void render(Voxel voxel, GlobalStates states, float delta) { gm.getRenderer().prepare(); Display.beingNVGFrame(); gm.getMenuSystem().mainMenu.render(); + MenuRendering.renderMouse(); Display.endNVGFrame(); } @@ -68,6 +70,7 @@ public void update(Voxel voxel, GlobalStates states, float delta) { } states.setState(GameState.OPTIONS); } + gm.getMenuSystem().mainMenu.update(); } } diff --git a/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java b/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java index 93861e4c8..83bce721a 100644 --- a/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java +++ b/src/main/java/net/guerra24/voxel/client/core/states/OptionsState.java @@ -37,6 +37,7 @@ import net.guerra24.voxel.client.core.Voxel; import net.guerra24.voxel.client.core.VoxelVariables; import net.guerra24.voxel.client.core.GlobalStates.GameState; +import net.guerra24.voxel.client.graphics.MenuRendering; import net.guerra24.voxel.client.graphics.opengl.Display; import net.guerra24.voxel.client.input.Mouse; import net.guerra24.voxel.client.particle.ParticleMaster; @@ -111,6 +112,7 @@ public void render(Voxel voxel, GlobalStates states, float delta) { Display.beingNVGFrame(); gm.getMenuSystem().optionsMenu.render(); + MenuRendering.renderMouse(); Display.endNVGFrame(); } diff --git a/src/main/java/net/guerra24/voxel/client/graphics/MenuRendering.java b/src/main/java/net/guerra24/voxel/client/graphics/MenuRendering.java index 4e093a9ec..8c4ea3c2b 100644 --- a/src/main/java/net/guerra24/voxel/client/graphics/MenuRendering.java +++ b/src/main/java/net/guerra24/voxel/client/graphics/MenuRendering.java @@ -30,6 +30,7 @@ import org.lwjgl.nanovg.NVGPaint; import net.guerra24.voxel.client.graphics.opengl.Display; +import net.guerra24.voxel.client.input.Mouse; import static org.lwjgl.system.MemoryUtil.*; @@ -56,6 +57,16 @@ public static NVGColor rgba(int r, int g, int b, int a, NVGColor color) { return color; } + public static void renderLabel(String text, String font, float x, float y, float w, float h, float fontSize) { + long vg = Display.getVg(); + nvgFontSize(vg, fontSize); + nvgFontFace(vg, font); + nvgFillColor(vg, rgba(255, 255, 255, 128, colorA)); + + nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); + nvgText(vg, x, y + h * 0.5f, text, NULL); + } + public static void renderWindow(String title, String font, float x, float y, float w, float h) { float cornerRadius = 3.0f; NVGPaint shadowPaint = paintA; @@ -113,18 +124,79 @@ public static void renderWindow(String title, String font, float x, float y, flo nvgRestore(vg); } + public static void renderMouse() { + float x = Mouse.getX() - 8; + float y = -Mouse.getY() - 8 + Display.getHeight(); + float w = 16; + float h = 16; + NVGPaint bg = paintA; + long vg = Display.getVg(); + nvgBoxGradient(vg, x + 1, y + 1 + 1.5f, w - 2, h - 2, 3, 4, rgba(255, 255, 255, 200, colorA), + rgba(32, 32, 32, 32, colorB), bg); + nvgBeginPath(vg); + nvgRoundedRect(vg, x + 1, y + 1, w - 2, h - 2, 4 - 1); + nvgFillPaint(vg, bg); + nvgFill(vg); + + nvgBeginPath(vg); + nvgRoundedRect(vg, x + 0.5f, y + 0.5f, w - 1, h - 1, 4 - 0.5f); + nvgStrokeColor(vg, rgba(0, 0, 0, 48, colorA)); + nvgStroke(vg); + } + + public static void renderSlider(float pos, float x, float y, float w, float h) { + NVGPaint bg = paintA, knob = paintB; + float cy = y + (int) (h * 0.5f); + float kr = (int) (h * 0.25f); + long vg = Display.getVg(); + + nvgSave(vg); + // nvgClearState(vg); + + // Slot + nvgBoxGradient(vg, x, cy - 2 + 1, w, 4, 2, 2, rgba(0, 0, 0, 32, colorA), rgba(0, 0, 0, 128, colorB), bg); + nvgBeginPath(vg); + nvgRoundedRect(vg, x, cy - 2, w, 4, 2); + nvgFillPaint(vg, bg); + nvgFill(vg); + + // Knob Shadow + nvgRadialGradient(vg, x + (int) (pos * w), cy + 1, kr - 3, kr + 3, rgba(0, 0, 0, 64, colorA), + rgba(0, 0, 0, 0, colorB), bg); + nvgBeginPath(vg); + nvgRect(vg, x + (int) (pos * w) - kr - 5, cy - kr - 5, kr * 2 + 5 + 5, kr * 2 + 5 + 5 + 3); + nvgCircle(vg, x + (int) (pos * w), cy, kr); + nvgPathWinding(vg, NVG_HOLE); + nvgFillPaint(vg, bg); + nvgFill(vg); + + // Knob + nvgLinearGradient(vg, x, cy - kr, x, cy + kr, rgba(255, 255, 255, 255, colorA), + rgba(100, 100, 100, 255, colorB), knob); + nvgBeginPath(vg); + nvgCircle(vg, x + (int) (pos * w), cy, kr - 1); + nvgFillColor(vg, rgba(40, 43, 48, 255, colorA)); + nvgFill(vg); + nvgFillPaint(vg, knob); + nvgFill(vg); + + nvgBeginPath(vg); + nvgCircle(vg, x + (int) (pos * w), cy, kr - 0.5f); + nvgStrokeColor(vg, rgba(0, 0, 0, 92, colorA)); + nvgStroke(vg); + + nvgRestore(vg); + } + public static void renderText(String text, String font, float x, float y, float fontSize) { - ByteBuffer textEncoded = memEncodeASCII(text, BufferAllocator.MALLOC); long vg = Display.getVg(); nvgFontSize(vg, fontSize); nvgFontFace(vg, font); nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); nvgFillColor(vg, rgba(0, 0, 0, 160, colorA)); - nvgText(vg, x, y, textEncoded, NULL); + nvgText(vg, x, y, text, NULL); nvgFillColor(vg, rgba(255, 255, 255, 160, colorA)); - nvgText(vg, x, y, textEncoded, NULL); - - memFree(textEncoded); + nvgText(vg, x, y, text, NULL); } public static void renderButton(ByteBuffer preicon, String text, String font, float x, float y, float w, float h, diff --git a/src/main/java/net/guerra24/voxel/client/graphics/WaterRenderer.java b/src/main/java/net/guerra24/voxel/client/graphics/WaterRenderer.java index bb1b50d98..7a3d32b82 100644 --- a/src/main/java/net/guerra24/voxel/client/graphics/WaterRenderer.java +++ b/src/main/java/net/guerra24/voxel/client/graphics/WaterRenderer.java @@ -184,7 +184,40 @@ private void unbindOcclusion() { * Game Loader */ private void setUpVAO(Loader loader) { - float[] vertices = { -1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1 }; + float[] vertices = { + -1,-1, + -1,0, + 0,-1, + + -1,0, + 0,0, + 0,-1, + + -1,0, + -1,1, + 0,0, + + -1,1, + 0,1, + 0,0, + + 0,0, + 0,1, + 1,0, + + 0,1, + 1,1, + 1,0, + + 0,-1, + 0,0, + 1,-1, + + 0,0, + 1,0, + 1,-1 + + }; quad = loader.loadToVAO(vertices, 2); } diff --git a/src/main/java/net/guerra24/voxel/client/input/Mouse.java b/src/main/java/net/guerra24/voxel/client/input/Mouse.java index 5ed7ac554..a5ecb09d4 100644 --- a/src/main/java/net/guerra24/voxel/client/input/Mouse.java +++ b/src/main/java/net/guerra24/voxel/client/input/Mouse.java @@ -114,9 +114,14 @@ public static void poll() { public static void setGrabbed(boolean grab) { GLFW.glfwSetInputMode(Display.getWindow(), GLFW.GLFW_CURSOR, - grab ? GLFW.GLFW_CURSOR_DISABLED : GLFW.GLFW_CURSOR_NORMAL); + grab ? GLFW.GLFW_CURSOR_DISABLED : GLFW.GLFW_CURSOR_HIDDEN); grabbed = grab; } + + public static void setHidden(boolean hidden){ + GLFW.glfwSetInputMode(Display.getWindow(), GLFW.GLFW_CURSOR, + hidden ? GLFW.GLFW_CURSOR_HIDDEN : GLFW.GLFW_CURSOR_NORMAL); + } public static boolean isGrabbed() { return grabbed; diff --git a/src/main/java/net/guerra24/voxel/client/menu/MainMenu.java b/src/main/java/net/guerra24/voxel/client/menu/MainMenu.java index 4d27d9db4..2f3635e8c 100644 --- a/src/main/java/net/guerra24/voxel/client/menu/MainMenu.java +++ b/src/main/java/net/guerra24/voxel/client/menu/MainMenu.java @@ -34,6 +34,9 @@ public class MainMenu { private Button playButton; private Button exitButton; private Button optionsButton; + private Button newsRefreshButton; + + private WebRenderer webRenderer; private float xScale, yScale; @@ -45,22 +48,37 @@ public MainMenu(GameResources gm) { playButton = new Button(new Vector2f(177 * xScale, 532 * yScale), new Vector2f(215 * xScale, 80 * yScale)); exitButton = new Button(new Vector2f(177 * xScale, 224 * yScale), new Vector2f(215 * xScale, 80 * yScale)); optionsButton = new Button(new Vector2f(177 * xScale, 376 * yScale), new Vector2f(215 * xScale, 80 * yScale)); + newsRefreshButton = new Button(new Vector2f(1096 * xScale, 627 * yScale), + new Vector2f(100 * xScale, 40 * yScale)); + webRenderer = new WebRenderer(VoxelVariables.web + "news/menu.webtag", 460 * xScale, 120 * yScale); + webRenderer.update(); } public void render() { MenuRendering.renderButton(null, "Play", "Roboto-Bold", 170 * xScale, 112 * yScale, 215 * xScale, 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), playButton.insideButton()); + MenuRendering.renderButton(null, "Options", "Roboto-Bold", 170 * xScale, 270 * yScale, 215 * xScale, 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), optionsButton.insideButton()); + MenuRendering.renderButton(null, "Exit", "Roboto-Bold", 170 * xScale, 425 * yScale, 215 * xScale, 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), exitButton.insideButton()); + + MenuRendering.renderText( "Voxel " + VoxelVariables.version + " " + VoxelVariables.state + " Build " + VoxelVariables.build, "Roboto-Bold", 0, 710 * yScale, 20); - MenuRendering.renderWindow("Voxel Develop News", "Roboto-Bold", 450 * xScale, 50 * yScale, 750 * xScale, 600 * yScale); - MenuRendering.renderText("- Voxel 0.0.9 ALPHA DevLog", "Roboto-Bold", 460 * xScale, 120 * yScale, 25); - MenuRendering.renderText("NanoVG crashes are delaying the official launch of the update, Im searching for fixes.", "Roboto-Bold", 460 * xScale, 150 * yScale, 15); + MenuRendering.renderWindow("Voxel News", "Roboto-Bold", 450 * xScale, 50 * yScale, 750 * xScale, 600 * yScale); + webRenderer.render(); + MenuRendering.renderButton(null, "Reload", "Roboto-Bold", 1096 * xScale, 53 * yScale, 100 * xScale, + 40 * yScale, MenuRendering.rgba(80, 80, 80, 80, MenuRendering.colorA), + newsRefreshButton.insideButton()); + } + + public void update() { + if (newsRefreshButton.pressed()) + webRenderer.update(); } public Button getPlayButton() { diff --git a/src/main/java/net/guerra24/voxel/client/menu/OptionsMenu.java b/src/main/java/net/guerra24/voxel/client/menu/OptionsMenu.java index 3c82bfda4..149421358 100644 --- a/src/main/java/net/guerra24/voxel/client/menu/OptionsMenu.java +++ b/src/main/java/net/guerra24/voxel/client/menu/OptionsMenu.java @@ -44,41 +44,45 @@ public OptionsMenu(GameResources gm) { yScale = height / 720f; xScale = width / 1280f; exitButton = new Button(new Vector2f(530 * xScale, 35 * yScale), new Vector2f(215 * xScale, 80 * yScale)); - godraysButton = new Button(new Vector2f(74 * xScale, 582 * yScale), new Vector2f(215 * xScale, 80 * yScale)); - shadowsButton = new Button(new Vector2f(74 * xScale, 480 * yScale), new Vector2f(215 * xScale, 80 * yScale)); - dofButton = new Button(new Vector2f(74 * xScale, 378 * yScale), new Vector2f(215 * xScale, 80 * yScale)); + godraysButton = new Button(new Vector2f(32 * xScale, 560 * yScale), new Vector2f(215 * xScale, 80 * yScale)); + shadowsButton = new Button(new Vector2f(32 * xScale, 460 * yScale), new Vector2f(215 * xScale, 80 * yScale)); + dofButton = new Button(new Vector2f(32 * xScale, 360 * yScale), new Vector2f(215 * xScale, 80 * yScale)); } public void render() { + MenuRendering.renderWindow("Options", "Roboto-Bold", 20 * xScale, 20 * yScale, 1240 * xScale, 680 * yScale); if (VoxelVariables.useVolumetricLight) { - MenuRendering.renderButton(null, "Light Rays: ON", "Roboto-Bold", 75 * xScale, 60 * yScale, 215 * xScale, - 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), + MenuRendering.renderButton(null, "Light Rays: ON", "Roboto-Bold", 32 * xScale, 80 * yScale, 215 * xScale, + 80 * yScale, MenuRendering.rgba(100, 255, 100, 255, MenuRendering.colorA), godraysButton.insideButton()); } else { - MenuRendering.renderButton(null, "Light Rays: OFF", "Roboto-Bold", 75 * xScale, 60 * yScale, 215 * xScale, - 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), + MenuRendering.renderButton(null, "Light Rays: OFF", "Roboto-Bold", 32 * xScale, 80 * yScale, 215 * xScale, + 80 * yScale, MenuRendering.rgba(255, 100, 100, 255, MenuRendering.colorA), godraysButton.insideButton()); } if (VoxelVariables.useShadows) { - MenuRendering.renderButton(null, "Shadows: ON", "Roboto-Bold", 75 * xScale, 160 * yScale, 215 * xScale, - 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), + MenuRendering.renderButton(null, "Shadows: ON", "Roboto-Bold", 32 * xScale, 180 * yScale, 215 * xScale, + 80 * yScale, MenuRendering.rgba(100, 255, 100, 255, MenuRendering.colorA), shadowsButton.insideButton()); } else { - MenuRendering.renderButton(null, "Shadows: OFF", "Roboto-Bold", 75 * xScale, 160 * yScale, 215 * xScale, - 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), + MenuRendering.renderButton(null, "Shadows: OFF", "Roboto-Bold", 32 * xScale, 180 * yScale, 215 * xScale, + 80 * yScale, MenuRendering.rgba(255, 100, 100, 255, MenuRendering.colorA), shadowsButton.insideButton()); } if (VoxelVariables.useDOF) { - MenuRendering.renderButton(null, "DoF: ON", "Roboto-Bold", 75 * xScale, 260 * yScale, 215 * xScale, - 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), + MenuRendering.renderButton(null, "DoF: ON", "Roboto-Bold", 32 * xScale, 280 * yScale, 215 * xScale, + 80 * yScale, MenuRendering.rgba(100, 255, 100, 255, MenuRendering.colorA), dofButton.insideButton()); } else { - MenuRendering.renderButton(null, "DoF: OFF", "Roboto-Bold", 75 * xScale, 260 * yScale, 215 * xScale, - 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), + MenuRendering.renderButton(null, "DoF: OFF", "Roboto-Bold", 32 * xScale, 280 * yScale, 215 * xScale, + 80 * yScale, MenuRendering.rgba(255, 100, 100, 255, MenuRendering.colorA), dofButton.insideButton()); } MenuRendering.renderButton(null, "Back", "Roboto-Bold", 528 * xScale, 607 * yScale, 215 * xScale, 80 * yScale, MenuRendering.rgba(255, 255, 255, 255, MenuRendering.colorA), exitButton.insideButton()); + MenuRendering.renderLabel("Draw Distance: " + VoxelVariables.radius, "Roboto-Bold", 970 * xScale, 90 * yScale, 315 * xScale, 20 * yScale, + 25f * yScale); + MenuRendering.renderSlider(VoxelVariables.radius / 32f, 900 * xScale, 100 * yScale, 315 * xScale, 80 * yScale); } public Button getExitButton() { diff --git a/src/main/java/net/guerra24/voxel/client/menu/WebRenderer.java b/src/main/java/net/guerra24/voxel/client/menu/WebRenderer.java new file mode 100644 index 000000000..9f9c476b5 --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/menu/WebRenderer.java @@ -0,0 +1,84 @@ +package net.guerra24.voxel.client.menu; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.List; + +import net.guerra24.voxel.client.core.VoxelVariables; +import net.guerra24.voxel.client.graphics.MenuRendering; + +public class WebRenderer { + + private String webpage; + + private List texts; + + private float yScale, xScale, x, y; + + public WebRenderer(String webpage, float x, float y) { + this.webpage = webpage; + texts = new ArrayList(); + float width = VoxelVariables.WIDTH; + float height = VoxelVariables.HEIGHT; + yScale = height / 720f; + xScale = width / 1280f; + this.x = x; + this.y = y; + } + + public void render() { + float ypos = 0; + for (int y = 0; y < texts.size(); y++) { + MenuRendering.renderText(texts.get(y).getText(), "Roboto-Bold", this.x, (this.y + ypos), + texts.get(y).getFontSize()); + ypos += texts.get(y).getFontSize(); + if (texts.get(y).isTitle()) + ypos += 5; + } + } + + public void update() { + texts.clear(); + URL url; + try { + url = new URL(webpage); + URLConnection conn = url.openConnection(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); + float font = 0; + while (true) { + String text = bufferedReader.readLine(); + String[] currentLine = text.split(" "); + if (text.startsWith("#TITLE ")) { + String textFinal = ""; + for (int i = 1; i < currentLine.length; i++) { + textFinal += currentLine[i] + " "; + } + texts.add(new WebText(textFinal, font, true)); + } else if (text.startsWith("#FONT ")) { + font = Float.parseFloat(currentLine[1]) * yScale; + } else if (text.startsWith("#TEXT ")) { + String textFinal = ""; + for (int i = 1; i < currentLine.length; i++) { + textFinal += currentLine[i] + " "; + } + texts.add(new WebText(textFinal, font, false)); + } else if (text.contains("#END")) { + break; + } + } + bufferedReader.close(); + } catch (MalformedURLException e) { + texts.add(new WebText("Unable to get data.", 20, false)); + e.printStackTrace(); + } catch (IOException e) { + texts.add(new WebText("Unable to get data.", 20, false)); + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/menu/WebText.java b/src/main/java/net/guerra24/voxel/client/menu/WebText.java new file mode 100644 index 000000000..219bc934e --- /dev/null +++ b/src/main/java/net/guerra24/voxel/client/menu/WebText.java @@ -0,0 +1,27 @@ +package net.guerra24.voxel.client.menu; + +public class WebText { + + private String text; + private float fontSize; + private boolean title; + + public WebText(String text, float fontSize, boolean title) { + this.text = text; + this.fontSize = fontSize; + this.title = title; + } + + public boolean isTitle() { + return title; + } + + public String getText() { + return text; + } + + public float getFontSize() { + return fontSize; + } + +} diff --git a/src/main/java/net/guerra24/voxel/client/resources/Loader.java b/src/main/java/net/guerra24/voxel/client/resources/Loader.java index 0ca8b48ad..e17d8d400 100644 --- a/src/main/java/net/guerra24/voxel/client/resources/Loader.java +++ b/src/main/java/net/guerra24/voxel/client/resources/Loader.java @@ -111,6 +111,10 @@ public class Loader { * Texture List */ private List textures = new ArrayList(); + /* + * NanoVG Fonts + */ + private List nvgFont = new ArrayList(); private OBJLoader objLoader; public Loader() { @@ -286,8 +290,9 @@ public void loadNVGFont(String filename, String name) { Logger.log("Loading NVGFont: " + filename + ".ttf"); int font = 0; try { - font = nvgCreateFontMem(Display.getVg(), name, - ioResourceToByteBuffer("assets/fonts/" + filename + ".ttf", 150 * 1024), 0); + ByteBuffer buffer = ioResourceToByteBuffer("assets/fonts/" + filename + ".ttf", 150 * 1024); + nvgFont.add(buffer); + font = nvgCreateFontMem(Display.getVg(), name, buffer, 0); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/net/guerra24/voxel/client/util/Maths.java b/src/main/java/net/guerra24/voxel/client/util/Maths.java index 66791da8e..cc917fbb2 100644 --- a/src/main/java/net/guerra24/voxel/client/util/Maths.java +++ b/src/main/java/net/guerra24/voxel/client/util/Maths.java @@ -175,7 +175,7 @@ public static float randFloat() { float randomNum = (rand.nextFloat() - 0.5f) / 16; return randomNum; } - + public static void sortLowToHigh(List list) { for (int i = 1; i < list.size(); i++) { Chunk item = list.get(i); diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGlass.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGlass.java index fc5fcf06c..a6217edaf 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGlass.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGlass.java @@ -52,7 +52,7 @@ public BlockEntity getSingleModel(Vector3f pos) { public boolean usesSingleModel() { return false; } - + @Override public Vector8f texCoordsUp() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("Glass"); diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGoldOre.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGoldOre.java index 0e6e5e79a..e7ac3e968 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGoldOre.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockGoldOre.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("GoldOre"); } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIce.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIce.java index 3ca1405bf..ace4bea2d 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIce.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIce.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("Ice"); } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIndes.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIndes.java index 9d80bc103..c5d68761e 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIndes.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockIndes.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("Indes"); } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockLeaves.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockLeaves.java index bdbf9fd59..99df6c789 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockLeaves.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockLeaves.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("Leaves"); } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockPortal.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockPortal.java index 532ffa296..fd53ffb1b 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockPortal.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockPortal.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return null; } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockSand.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockSand.java index 3d1c90b71..b28595547 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockSand.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockSand.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("Sand"); } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockStone.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockStone.java index ee9628dfc..4d3796345 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockStone.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockStone.java @@ -82,5 +82,4 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return BlocksResources.tessellatorTextureAtlas.getTextureCoords("Stone"); } - } diff --git a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockTorch.java b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockTorch.java index ee7190523..2f40b0961 100644 --- a/src/main/java/net/guerra24/voxel/client/world/block/types/BlockTorch.java +++ b/src/main/java/net/guerra24/voxel/client/world/block/types/BlockTorch.java @@ -82,4 +82,5 @@ public Vector8f texCoordsRight() { public Vector8f texCoordsLeft() { return null; } + } diff --git a/src/main/java/net/guerra24/voxel/client/world/entities/Camera.java b/src/main/java/net/guerra24/voxel/client/world/entities/Camera.java index b39bf7252..9ee9c8e20 100644 --- a/src/main/java/net/guerra24/voxel/client/world/entities/Camera.java +++ b/src/main/java/net/guerra24/voxel/client/world/entities/Camera.java @@ -79,7 +79,7 @@ public class Camera extends Entity { int id = 0; public Camera(Matrix4f proj) { - this.speed = 1f; + this.speed = 3f; center = new Vector2f(Display.getWidth() / 2, Display.getHeight() / 2); velocityComponent = new VelocityComponent(); velocityComponent.y = -9.8f;