diff --git a/src/projectzombie/Main.java b/src/projectzombie/Main.java index b2bd1fa..09bb4e6 100755 --- a/src/projectzombie/Main.java +++ b/src/projectzombie/Main.java @@ -76,7 +76,7 @@ public class Main LayerGenerators.init(); // Create the display - window = new DisplayWindow("Project Zombie"); + window = new DisplayWindow(); window.init(); // Load the resources @@ -109,5 +109,8 @@ public class Main // Start the mainloop menu = new MenuMain(); mainloop.start(); + + // Kill the worker thread + worker.kill(); } } diff --git a/src/projectzombie/display/DisplayRender.java b/src/projectzombie/display/DisplayRender.java index f3ba990..2a0a8ee 100755 --- a/src/projectzombie/display/DisplayRender.java +++ b/src/projectzombie/display/DisplayRender.java @@ -10,7 +10,9 @@ import org.lwjgl.opengl.GL33; import gl_engine.matrix.Matrix4; import projectzombie.Main; import projectzombie.entity.player.EntityPlayer; +import projectzombie.init.Layers; import projectzombie.model.Model; +import projectzombie.util.math.ColorRange; import projectzombie.world.chunk.ChunkEventHandler; public class DisplayRender @@ -25,9 +27,11 @@ public class DisplayRender GL33.glUniform4f(Main.window.glsl_color, 1, 1, 1, 1); GL33.glUniform2f(Main.window.glsl_tex_cut, 0, 0); - GL33.glUniform3f(Main.window.glsl_day_low, 0.1f, 0, 0); - GL33.glUniform3f(Main.window.glsl_day_high, 1, 1, 1); - GL33.glUniform3f(Main.window.glsl_src_low, 0, 0.1f, 0); + ColorRange range = Main.world.getLayer().layergen.getLightLevel(); + + GL33.glUniform3f(Main.window.glsl_day_low, (float)range.min.x, (float)range.min.y, (float)range.min.z); + GL33.glUniform3f(Main.window.glsl_day_high, (float)range.max.x, (float)range.max.y, (float)range.max.z); + GL33.glUniform3f(Main.window.glsl_src_low, 0, 0, 0); GL33.glUniform3f(Main.window.glsl_src_high, 1, 1, 1); if(Main.menu.doGameRender) diff --git a/src/projectzombie/display/DisplayRenderUI.java b/src/projectzombie/display/DisplayRenderUI.java index 933a823..df35041 100755 --- a/src/projectzombie/display/DisplayRenderUI.java +++ b/src/projectzombie/display/DisplayRenderUI.java @@ -90,13 +90,17 @@ public class DisplayRenderUI camera = Matrix4.identity(); projection = Matrix4.scale(new Vec3d(0.1/GlHelpers.getAspectRatio(), 0.1, 1)); + GL33.glUniform3f(Main.window.glsl_day_low, 1, 1, 1); + GL33.glUniform3f(Main.window.glsl_day_high, 1, 1, 1); + GL33.glUniform3f(Main.window.glsl_src_low, 1, 1, 1); + GL33.glUniform3f(Main.window.glsl_src_high, 1, 1, 1); + GL33.glUniformMatrix4fv(Main.window.glsl_projection, true, projection.getArray()); GL33.glUniformMatrix4fv(Main.window.glsl_camera, true, camera.getArray()); GL33.glDisable(GL33.GL_DEPTH_TEST); - if(Main.menu.doGameRender && Main.menu.showIngameGUI) - { + if(Main.menu.doGameRender && Main.menu.showIngameGUI) { renderGameGui(); } diff --git a/src/projectzombie/display/DisplayStatsEventHandler.java b/src/projectzombie/display/DisplayStatsEventHandler.java index b3d3e48..ec6af02 100755 --- a/src/projectzombie/display/DisplayStatsEventHandler.java +++ b/src/projectzombie/display/DisplayStatsEventHandler.java @@ -27,6 +27,8 @@ public class DisplayStatsEventHandler implements IMainloopTask fps = DisplayWindow.fps; DisplayWindow.fps = 0; + + Main.worker.updateTime(); } diff --git a/src/projectzombie/display/DisplayWindow.java b/src/projectzombie/display/DisplayWindow.java index 19100fc..2ff9ac9 100755 --- a/src/projectzombie/display/DisplayWindow.java +++ b/src/projectzombie/display/DisplayWindow.java @@ -1,12 +1,9 @@ package projectzombie.display; import static org.lwjgl.opengl.GL11.GL_FLOAT; -import static org.lwjgl.opengl.GL11.GL_RGBA; -import static org.lwjgl.opengl.GL11.GL_UNSIGNED_BYTE; import static org.lwjgl.opengl.GL20.glEnableVertexAttribArray; import static org.lwjgl.opengl.GL20.glVertexAttribPointer; -import java.nio.ByteBuffer; import java.nio.IntBuffer; import org.lwjgl.BufferUtils; @@ -15,7 +12,6 @@ import org.lwjgl.opengl.GL33; import gl_engine.graphics.GraphicsHelpers; import gl_engine.graphics.GraphicsShader; -import gl_engine.texture.TextureRef3D; import mainloop.task.IMainloopTask; import projectzombie.display.lighting.TileLighting; import projectzombie.init.Resources; @@ -27,11 +23,9 @@ import projectzombie.input.KeyCharCallback; import projectzombie.input.MouseButtonCallback; import projectzombie.input.ScrollWheelCallback; import projectzombie.mainloop.MainloopEventHandler; -import projectzombie.model.Model; public class DisplayWindow implements IMainloopTask { - private String name; private long window; private long monitor; private int width; @@ -58,6 +52,9 @@ public class DisplayWindow implements IMainloopTask public int glsl_src_low; public int glsl_src_high; + public int glsl_lightmap_offset; + public int glsl_lightmap_size; + public int getWidth() { return this.width; } @@ -74,10 +71,6 @@ public class DisplayWindow implements IMainloopTask height = h; } - public DisplayWindow(String name) { - this.name = name; - } - public void init() { // Initialize GLFW @@ -132,6 +125,9 @@ public class DisplayWindow implements IMainloopTask glsl_src_low = GL33.glGetUniformLocation(environmentRenderer.program, "lighting_src_low"); glsl_src_high = GL33.glGetUniformLocation(environmentRenderer.program, "lighting_src_high"); + glsl_lightmap_offset = GL33.glGetUniformLocation(environmentRenderer.program, "lightmap_offset"); + glsl_lightmap_size = GL33.glGetUniformLocation(environmentRenderer.program, "lightmap_size"); + int glsl_atlas = GL33.glGetUniformLocation(environmentRenderer.program, "atlas"); int glsl_lightmap = GL33.glGetUniformLocation(environmentRenderer.program, "lightmap"); diff --git a/src/projectzombie/display/lighting/TileLighting.java b/src/projectzombie/display/lighting/TileLighting.java index 45d1c00..323a856 100755 --- a/src/projectzombie/display/lighting/TileLighting.java +++ b/src/projectzombie/display/lighting/TileLighting.java @@ -1,10 +1,5 @@ package projectzombie.display.lighting; -import static org.lwjgl.opengl.GL11.GL_RGBA; -import static org.lwjgl.opengl.GL11.GL_UNSIGNED_BYTE; -import static org.lwjgl.opengl.GL12.GL_TEXTURE_3D; -import static org.lwjgl.opengl.GL12.glTexImage3D; - import java.nio.ByteBuffer; import java.util.Arrays; @@ -13,14 +8,10 @@ import org.lwjgl.opengl.GL33; import bdf.types.BdfNamedList; import bdf.types.BdfObject; import gl_engine.MathHelpers; -import gl_engine.range.Range4i; import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec4i; -import mainloop.task.IMainloopTask; import projectzombie.Main; import projectzombie.display.Camera; import projectzombie.entity.player.EntityPlayer; -import projectzombie.mainloop.MainloopHelpers; import projectzombie.util.math.TileState; import projectzombie.world.chunk.Chunk; import projectzombie.world.chunk.ChunkEventHandler; @@ -28,30 +19,71 @@ import projectzombie.world.layer.Layer; public class TileLighting { - public static boolean lighting_dirty = false; + private static class LightingTask { + float[] b; + int w, h; + int x, y; + } + + private static boolean lighting_dirty = false; public static int lightmap; + private static LightingTask task; + + public static void setDirty() { + lighting_dirty = true; + } + + public synchronized static LightingTask getTask() { + LightingTask t = task; + task = null; + return t; + } + + public synchronized static void setTask(LightingTask task) { + TileLighting.task = task; + } + public TileLighting() { lightmap = GL33.glGenTextures(); } public static void update() { + { + LightingTask task = getTask(); + + if(task != null) + { + GL33.glBindTexture(GL33.GL_TEXTURE_2D, lightmap); + GL33.glTexImage2D(GL33.GL_TEXTURE_2D, 0, GL33.GL_RGB, task.w, task.h, 0, GL33.GL_RGB, GL33.GL_FLOAT, task.b); + GL33.glGenerateMipmap(GL33.GL_TEXTURE_2D); + + Main.window.environmentRenderer.use(); + GL33.glUniform2f(Main.window.glsl_lightmap_offset, task.x * 16 - 1, task.y * 16 - 1); + GL33.glUniform2f(Main.window.glsl_lightmap_size, task.w, task.h); + } + } + if(Camera.camera == null) return; if(!ChunkEventHandler.loaded) return; Layer layer = Main.world.getLayer(); EntityPlayer player = Main.player; - boolean dirty = false; - for(int cx=-Chunk.RENDER_DISTANCE;cx<=Chunk.RENDER_DISTANCE;cx++) { - for(int cy=-Chunk.RENDER_DISTANCE;cy<=Chunk.RENDER_DISTANCE;cy++) { - Vec2i cpos = new Vec2i( - cx + MathHelpers.floor(player.pos.x / 16), - cy + MathHelpers.floor(player.pos.y / 16)); - Chunk chunk = layer.chunks.get(cpos); - if(chunk.isLightDirty()) { - chunk.resetLightDirty(); - dirty = true; + boolean dirty = lighting_dirty; + + if(!dirty) + { + for(int cx=-Chunk.RENDER_DISTANCE;cx<=Chunk.RENDER_DISTANCE;cx++) { + for(int cy=-Chunk.RENDER_DISTANCE;cy<=Chunk.RENDER_DISTANCE;cy++) { + Vec2i cpos = new Vec2i( + cx + MathHelpers.floor(player.pos.x / 16), + cy + MathHelpers.floor(player.pos.y / 16)); + Chunk chunk = layer.chunks.get(cpos); + if(chunk.isLightDirty()) { + chunk.resetLightDirty(); + dirty = true; + } } } } @@ -60,6 +92,7 @@ public class TileLighting return; } + lighting_dirty = false; int size = (Chunk.RENDER_DISTANCE * 2 + 1) * 16; float[] lights = new float[size * size * 3]; @@ -102,7 +135,9 @@ public class TileLighting } } - Main.worker.processLighting(lights, size, size); + Main.worker.processLighting(lights, size, size, + MathHelpers.floor(player.pos.x / 16) - Chunk.RENDER_DISTANCE, + MathHelpers.floor(player.pos.y / 16) - Chunk.RENDER_DISTANCE); } public static void updateLighting(BdfObject bdf) @@ -111,6 +146,8 @@ public class TileLighting float[] light = nl.get("light").getFloatArray(); int width = nl.get("w").getInteger(); int height = nl.get("h").getInteger(); + int x = nl.get("x").getInteger(); + int y = nl.get("y").getInteger(); float[] pixels = new float[width*height*3]; @@ -119,7 +156,13 @@ public class TileLighting pixels[i*3+1] = light[i*2+1]; } - GL33.glBindTexture(GL33.GL_TEXTURE_2D, lightmap); - GL33.glTexImage2D(GL33.GL_TEXTURE_2D, 0, GL33.GL_RGB, width, height, 0, GL33.GL_RGB, GL33.GL_FLOAT, light); + LightingTask task = new LightingTask(); + task.w = width; + task.h = height; + task.b = pixels; + task.x = x; + task.y = y; + + setTask(task); } } diff --git a/src/projectzombie/entity/EntityContainer.java b/src/projectzombie/entity/EntityContainer.java index ea28103..98b3d3f 100644 --- a/src/projectzombie/entity/EntityContainer.java +++ b/src/projectzombie/entity/EntityContainer.java @@ -1,6 +1,5 @@ package projectzombie.entity; -import bdf.classes.IBdfClassManager; import bdf.types.BdfArray; import bdf.types.BdfNamedList; import bdf.types.BdfObject; @@ -86,7 +85,7 @@ public class EntityContainer extends Entity implements EntityHoldsEntities { Entity e = entities[i]; - if(e.getID() == -1) { + if(e == null || e.getID() == -1) { continue; } diff --git a/src/projectzombie/entity/EntityTnt.java b/src/projectzombie/entity/EntityTnt.java index b0f7673..31014d1 100755 --- a/src/projectzombie/entity/EntityTnt.java +++ b/src/projectzombie/entity/EntityTnt.java @@ -5,7 +5,6 @@ import bdf.types.BdfObject; import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; -import projectzombie.entity.particle.ParticleSmoke; import projectzombie.entity.particle.ParticleSpark; import projectzombie.init.Models; import projectzombie.model.Model; diff --git a/src/projectzombie/entity/particle/ParticleBlood.java b/src/projectzombie/entity/particle/ParticleBlood.java index 469ff60..5840781 100755 --- a/src/projectzombie/entity/particle/ParticleBlood.java +++ b/src/projectzombie/entity/particle/ParticleBlood.java @@ -1,7 +1,5 @@ package projectzombie.entity.particle; -import java.util.Random; - import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; diff --git a/src/projectzombie/entity/particle/ParticleSpark.java b/src/projectzombie/entity/particle/ParticleSpark.java index d002e99..17cb310 100755 --- a/src/projectzombie/entity/particle/ParticleSpark.java +++ b/src/projectzombie/entity/particle/ParticleSpark.java @@ -2,7 +2,6 @@ package projectzombie.entity.particle; import java.util.Random; -import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; diff --git a/src/projectzombie/entity/particle/ParticleWater.java b/src/projectzombie/entity/particle/ParticleWater.java index 7eff816..a41974f 100755 --- a/src/projectzombie/entity/particle/ParticleWater.java +++ b/src/projectzombie/entity/particle/ParticleWater.java @@ -9,7 +9,6 @@ import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.util.math.random.RandomHelpers; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; diff --git a/src/projectzombie/entity/player/EntityPlayer.java b/src/projectzombie/entity/player/EntityPlayer.java index 2efcc71..c0aec59 100755 --- a/src/projectzombie/entity/player/EntityPlayer.java +++ b/src/projectzombie/entity/player/EntityPlayer.java @@ -4,8 +4,10 @@ import bdf.types.BdfNamedList; import bdf.types.BdfObject; import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; import mainloop.task.IMainloopTask; import projectzombie.Main; +import projectzombie.display.lighting.TileLighting; import projectzombie.entity.Entity; import projectzombie.entity.EntityAlive; import projectzombie.entity.EntityBullet; @@ -16,7 +18,6 @@ import projectzombie.entity.particle.ParticleBreak; import projectzombie.init.Items; import projectzombie.init.Models; import projectzombie.inventory.Inventory; -import projectzombie.items.spawner.ItemSpawnZombie; import projectzombie.menu.MenuDeath; import projectzombie.model.Model; import projectzombie.settings.Cheats; @@ -53,6 +54,8 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory public double angle; public double speed; + private Vec2i last_chunk; + public EntityPlayer(BdfObject bdf) { super(bdf); } @@ -106,7 +109,8 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory inventory = new Inventory(10); inventory.addItem(new ItemStack(Items.SPAWN_ZOMBIE, 99, (short)0)); - inventory.addItem(new ItemStack(Items.AMMO, 999, (short)0)); + inventory.addItem(new ItemStack(Items.AMMO, 99, (short)0)); + inventory.addItem(new ItemStack(Items.LANTERN, 99, (short)0)); } @Override @@ -132,6 +136,11 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory { chunk = layer.getChunk(pos); + if(chunk != null && (last_chunk == null || !chunk.c_pos.equal(last_chunk))) { + last_chunk = chunk.c_pos; + TileLighting.setDirty(); + } + if(dead) return; // Handle player deaths diff --git a/src/projectzombie/input/KeyCallback.java b/src/projectzombie/input/KeyCallback.java index 5dea276..94caf20 100755 --- a/src/projectzombie/input/KeyCallback.java +++ b/src/projectzombie/input/KeyCallback.java @@ -1,7 +1,31 @@ package projectzombie.input; -import static org.lwjgl.glfw.GLFW.*; -import static projectzombie.input.GameInput.*; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_0; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_1; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_2; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_3; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_4; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_5; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_6; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_7; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_8; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_9; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_A; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_D; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_E; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_F11; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_Q; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_S; +import static org.lwjgl.glfw.GLFW.GLFW_KEY_W; +import static org.lwjgl.glfw.GLFW.GLFW_RELEASE; +import static projectzombie.input.GameInput.backButton_last; +import static projectzombie.input.GameInput.fireGun; +import static projectzombie.input.GameInput.moveDown; +import static projectzombie.input.GameInput.moveLeft; +import static projectzombie.input.GameInput.moveRight; +import static projectzombie.input.GameInput.moveUp; +import static projectzombie.input.GameInput.move_last; import org.lwjgl.glfw.GLFWKeyCallbackI; diff --git a/src/projectzombie/items/ItemAmmo.java b/src/projectzombie/items/ItemAmmo.java index 7a3ca2e..c3297e9 100755 --- a/src/projectzombie/items/ItemAmmo.java +++ b/src/projectzombie/items/ItemAmmo.java @@ -1,12 +1,7 @@ package projectzombie.items; -import projectzombie.entity.Entity; -import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.model.ModelItem; -import projectzombie.util.math.ItemStack; -import projectzombie.world.chunk.Chunk; -import projectzombie.world.layer.Layer; public class ItemAmmo extends Item { diff --git a/src/projectzombie/menu/gui/Button.java b/src/projectzombie/menu/gui/Button.java index 96d9857..0aa6315 100755 --- a/src/projectzombie/menu/gui/Button.java +++ b/src/projectzombie/menu/gui/Button.java @@ -4,10 +4,8 @@ import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; import projectzombie.Main; -import projectzombie.display.DisplayRenderUI; import projectzombie.init.Models; import projectzombie.input.InputMode; -import projectzombie.model.Model; import projectzombie.model.ModelGui; import projectzombie.text.Text; import projectzombie.util.gl.GlHelpers; diff --git a/src/projectzombie/menu/gui/Label.java b/src/projectzombie/menu/gui/Label.java index c207dda..532bfc0 100755 --- a/src/projectzombie/menu/gui/Label.java +++ b/src/projectzombie/menu/gui/Label.java @@ -2,8 +2,6 @@ package projectzombie.menu.gui; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; -import projectzombie.text.Text; -import projectzombie.util.gl.GlHelpers; public class Label implements GUIComponent { diff --git a/src/projectzombie/menu/gui/Overlay.java b/src/projectzombie/menu/gui/Overlay.java index 7dd31a9..f060412 100755 --- a/src/projectzombie/menu/gui/Overlay.java +++ b/src/projectzombie/menu/gui/Overlay.java @@ -3,7 +3,6 @@ package projectzombie.menu.gui; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; import gl_engine.vec.Vec4d; -import projectzombie.util.gl.GlHelpers; public class Overlay implements GUIComponent { diff --git a/src/projectzombie/text/Text.java b/src/projectzombie/text/Text.java index efb999e..c03580d 100755 --- a/src/projectzombie/text/Text.java +++ b/src/projectzombie/text/Text.java @@ -1,12 +1,9 @@ package projectzombie.text; import gl_engine.matrix.Matrix4; -import gl_engine.vec.Vec2d; -import projectzombie.Main; import projectzombie.init.Resources; import projectzombie.model.Model; import projectzombie.model.ModelGui; -import projectzombie.util.gl.GlHelpers; public class Text { diff --git a/src/projectzombie/util/gl/GlHelpers.java b/src/projectzombie/util/gl/GlHelpers.java index ef96467..c54ee93 100755 --- a/src/projectzombie/util/gl/GlHelpers.java +++ b/src/projectzombie/util/gl/GlHelpers.java @@ -1,24 +1,5 @@ package projectzombie.util.gl; -import static org.lwjgl.opengl.GL11.GL_ALPHA; -import static org.lwjgl.opengl.GL11.GL_BLEND; -import static org.lwjgl.opengl.GL11.GL_CULL_FACE; -import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST; -import static org.lwjgl.opengl.GL11.GL_QUADS; -import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; -import static org.lwjgl.opengl.GL11.glBegin; -import static org.lwjgl.opengl.GL11.glColor3d; -import static org.lwjgl.opengl.GL11.glColor4d; -import static org.lwjgl.opengl.GL11.glDisable; -import static org.lwjgl.opengl.GL11.glEnable; -import static org.lwjgl.opengl.GL11.glEnd; -import static org.lwjgl.opengl.GL11.glPopMatrix; -import static org.lwjgl.opengl.GL11.glPushMatrix; -import static org.lwjgl.opengl.GL11.glRotated; -import static org.lwjgl.opengl.GL11.glTranslated; -import static org.lwjgl.opengl.GL11.glVertex2d; -import static org.lwjgl.opengl.GL11.glVertex3d; - import projectzombie.Main; import projectzombie.display.DisplayRenderUI; diff --git a/src/projectzombie/util/math/ColorRange.java b/src/projectzombie/util/math/ColorRange.java index 08ea94c..34def8b 100755 --- a/src/projectzombie/util/math/ColorRange.java +++ b/src/projectzombie/util/math/ColorRange.java @@ -5,17 +5,17 @@ import gl_engine.vec.Vec3d; public class ColorRange { - Vec3d colorMin, colorMax; + public Vec3d min, max; public ColorRange(Vec3d colorMin, Vec3d colorMax) { - this.colorMin = colorMin; - this.colorMax = colorMax; + this.min = colorMin; + this.max = colorMax; } public Vec3d getColor(double v) { return new Vec3d( - MathHelpers.map(v, 0, 1, colorMin.x, colorMax.x), - MathHelpers.map(v, 0, 1, colorMin.y, colorMax.y), - MathHelpers.map(v, 0, 1, colorMin.z, colorMax.z)); + MathHelpers.map(v, 0, 1, min.x, max.x), + MathHelpers.map(v, 0, 1, min.y, max.y), + MathHelpers.map(v, 0, 1, min.z, max.z)); } } diff --git a/src/projectzombie/worker/Worker.java b/src/projectzombie/worker/Worker.java index 9f51f14..0d3fdc1 100644 --- a/src/projectzombie/worker/Worker.java +++ b/src/projectzombie/worker/Worker.java @@ -2,13 +2,11 @@ package projectzombie.worker; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.lang.ProcessBuilder.Redirect; import java.nio.ByteBuffer; import bdf.data.BdfDatabase; -import bdf.types.BdfIndent; import bdf.types.BdfNamedList; import bdf.types.BdfObject; import projectzombie.display.lighting.TileLighting; @@ -21,6 +19,8 @@ public class Worker extends Thread InputStream in; OutputStream out; + boolean running = true; + public Worker() throws IOException { pb = new ProcessBuilder("java", "-jar", "worker.jar"); @@ -36,7 +36,7 @@ public class Worker extends Thread - public void processLighting(float[] lights, int width, int height) + public void processLighting(float[] lights, int width, int height, int x, int y) { BdfObject bdf = new BdfObject(); BdfNamedList nl = bdf.getNamedList(); @@ -44,7 +44,24 @@ public class Worker extends Thread nl.set("light", BdfObject.withFloatArray(lights)); nl.set("w", BdfObject.withInteger(width)); nl.set("h", BdfObject.withInteger(height)); + nl.set("x", BdfObject.withInteger(x)); + nl.set("y", BdfObject.withInteger(y)); + sendData(bdf); + } + + public void updateTime() + { + BdfObject bdf = new BdfObject(); + BdfNamedList nl = bdf.getNamedList(); + nl.set("task", BdfObject.withString("time")); + nl.set("millis", BdfObject.withLong(System.currentTimeMillis())); + + sendData(bdf); + } + + private void sendData(BdfObject bdf) + { byte[] data = bdf.serialize().getBytes(); ByteBuffer size_buff = ByteBuffer.allocate(4); @@ -88,15 +105,24 @@ public class Worker extends Thread case "light": TileLighting.updateLighting(bdf); break; + default: + Thread.sleep(10); } - System.out.println("Hello"); + if(!running) { + return; + } } } - catch(IOException e) + catch(IOException | InterruptedException e) { } } + + public void kill() { + process.destroy(); + running = false; + } } diff --git a/src/projectzombie/world/World.java b/src/projectzombie/world/World.java index 956fd80..ff20f31 100755 --- a/src/projectzombie/world/World.java +++ b/src/projectzombie/world/World.java @@ -8,6 +8,7 @@ import bdf.types.BdfNamedList; import bdf.types.BdfObject; import projectzombie.Main; import projectzombie.display.Camera; +import projectzombie.display.lighting.TileLighting; import projectzombie.entity.player.EntityPlayer; import projectzombie.time.GameTimer; import projectzombie.world.chunk.ChunkEventHandler; @@ -30,8 +31,11 @@ public class World implements IBdfClassManager loaded.spawnRandomEntities(); } - public void setLayer(int id) { + public void setLayer(int id) + { ChunkEventHandler.loaded = false; + TileLighting.setDirty(); + this.loaded = layers.get(id); } diff --git a/src/projectzombie/world/chunk/Chunk.java b/src/projectzombie/world/chunk/Chunk.java index 81f0ac4..1d4627b 100755 --- a/src/projectzombie/world/chunk/Chunk.java +++ b/src/projectzombie/world/chunk/Chunk.java @@ -1,11 +1,8 @@ package projectzombie.world.chunk; import java.util.ArrayList; -import java.util.Iterator; import java.util.Random; -import org.lwjgl.opengl.GL33; - import bdf.classes.IBdfClassManager; import bdf.types.BdfArray; import bdf.types.BdfNamedList; @@ -17,7 +14,6 @@ import gl_engine.texture.TextureRef3D; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec2i; import gl_engine.vec.Vec3d; -import projectzombie.Main; import projectzombie.display.Camera; import projectzombie.entity.Entity; import projectzombie.entity.EntityAlive; @@ -261,12 +257,19 @@ public class Chunk implements IBdfClassManager { for(int i2=0;i2 tex_cut.y && tex_cut.x > 0.5)); } \ No newline at end of file diff --git a/src/resources/shader/environmentRenderer.vsh b/src/resources/shader/environmentRenderer.vsh index bb688c6..e30aad2 100644 --- a/src/resources/shader/environmentRenderer.vsh +++ b/src/resources/shader/environmentRenderer.vsh @@ -22,6 +22,9 @@ uniform vec3 lighting_day_high; uniform vec3 lighting_src_low; uniform vec3 lighting_src_high; +uniform vec2 lightmap_offset; +uniform vec2 lightmap_size; + float map(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } @@ -67,19 +70,21 @@ void main() { int type = int(aFlags.z); - int chunk_offset_id = int(aChunkOffset.x); - vec2 chunk_offset = vec2(mod(chunk_offset_id, 16), chunk_offset_id / 16); - mat4 do_rotation = rotated; mat4 no_rotation = mat4(1); - gl_Position = vec4(aPos, 1) * (mod(type, 2) == 1 ? do_rotation : no_rotation) * - translate(vec3(chunk_offset.x, 0, chunk_offset.y)) * model * camera * projection; + vec4 pos = vec4(aPos, 1) * (mod(type, 2) == 1 ? do_rotation : no_rotation) * + translate(aChunkOffset) * model; + + gl_Position = pos * camera * projection; pTexture = vec3(aTex.x, getTexY(), aTex.z); pPos = aPos; - vec4 light = texture(lightmap, vec2(0.5, 0.5)); + vec4 light = texture(lightmap, vec2( + map(floor(pos.x), lightmap_offset.x, lightmap_offset.x + lightmap_size.x, 0, 1), + map(floor(pos.z), lightmap_offset.y, lightmap_offset.y + lightmap_size.y, 0, 1))); + vec3 light_day = mapVec(light.r, 0, 1, lighting_day_low, lighting_day_high); vec3 light_src = mapVec(light.g, 0, 1, lighting_src_low, lighting_src_high); diff --git a/worker.jar b/worker.jar index b0af808..74efdd4 100644 Binary files a/worker.jar and b/worker.jar differ