From b553923a3d1fbace657beb29f99f5637e25df6aa Mon Sep 17 00:00:00 2001 From: josua Date: Mon, 15 Jun 2020 10:56:52 +1000 Subject: [PATCH] Created a functional world renderer --- .gitignore | 1 + layer.bdf | Bin 7194 -> 369 bytes settings.bdf | Bin 106 -> 0 bytes src/projectzombie/Main.java | 3 - src/projectzombie/audio/AudioObject.java | 12 +- src/projectzombie/display/Camera.java | 10 +- src/projectzombie/display/DisplayRender.java | 31 +-- .../display/DisplayRenderUI.java | 177 +----------------- .../display/DisplayStatsEventHandler.java | 10 +- src/projectzombie/display/DisplayWindow.java | 28 ++- .../display/bossbar/BossBars.java | 4 - .../lighting/ChunkLightingCollection.java | 4 +- .../display/lighting/DynamicLighting.java | 9 +- .../display/lighting/TileLighting.java | 12 +- src/projectzombie/entity/Entity.java | 8 +- src/projectzombie/entity/EntityBoss.java | 10 +- src/projectzombie/entity/EntityBullet.java | 15 +- src/projectzombie/entity/EntityDummy.java | 2 +- src/projectzombie/entity/EntityExplosion.java | 15 +- src/projectzombie/entity/EntityFlare.java | 5 +- .../entity/EntityGrapplingHook.java | 4 +- src/projectzombie/entity/EntityHeight.java | 0 src/projectzombie/entity/EntityItem.java | 20 +- src/projectzombie/entity/EntityParticle.java | 9 +- src/projectzombie/entity/EntityTnt.java | 11 +- src/projectzombie/entity/EntityZombie.java | 5 +- .../entity/EntityZombieArmored.java | 4 +- .../entity/particle/ParticleBlood.java | 25 ++- .../entity/particle/ParticleBreak.java | 53 +++--- .../entity/particle/ParticleLava.java | 24 ++- .../entity/particle/ParticleSmoke.java | 20 +- .../entity/particle/ParticleSpark.java | 7 +- .../entity/particle/ParticleWater.java | 25 ++- .../entity/player/EntityPlayer.java | 15 +- src/projectzombie/init/Items.java | 3 + src/projectzombie/init/Models.java | 60 +++--- src/projectzombie/init/Resources.java | 28 +-- .../input/CursorPosCallback.java | 2 +- src/projectzombie/input/KeyCallback.java | 6 +- src/projectzombie/input/types/InputGUI.java | 2 +- src/projectzombie/input/types/InputGame.java | 6 +- src/projectzombie/items/Item.java | 8 +- src/projectzombie/items/ItemAmmo.java | 4 +- .../items/ItemDefenceUpgrade.java | 4 +- src/projectzombie/items/ItemEmpty.java | 8 +- src/projectzombie/items/ItemFlare.java | 6 +- .../items/ItemGrapplingHook.java | 10 +- src/projectzombie/items/ItemGunUpgrade.java | 4 +- src/projectzombie/items/ItemHealthPotion.java | 4 +- src/projectzombie/items/ItemLantern.java | 10 +- src/projectzombie/items/ItemRock.java | 4 +- src/projectzombie/items/ItemSpawn.java | 4 +- src/projectzombie/items/ItemTnt.java | 6 +- .../items/spawner/ItemSpawnDummy.java | 24 +++ .../items/spawner/ItemSpawnZombie.java | 10 +- src/projectzombie/menu/MenuGamePause.java | 2 - src/projectzombie/menu/MenuSettings.java | 43 +---- src/projectzombie/menu/gui/Button.java | 6 +- src/projectzombie/menu/gui/Label.java | 16 +- src/projectzombie/menu/gui/Overlay.java | 13 +- .../menu/gui/components/ButtonBasic.java | 2 +- .../menu/gui/components/ButtonGroupPause.java | 3 +- .../menu/gui/components/ButtonSetting.java | 2 +- .../menu/gui/components/LabelMain.java | 2 +- .../menu/gui/components/LabelPause.java | 2 +- .../gui/components/OverlayBackground.java | 2 +- src/projectzombie/model/Model.java | 143 ++++++++------ src/projectzombie/model/ModelChunk.java | 36 ++++ src/projectzombie/model/ModelEmpty.java | 8 +- src/projectzombie/model/ModelGui.java | 57 ++++-- src/projectzombie/model/ModelItem.java | 42 +++++ src/projectzombie/model/ModelTile.java | 35 ++-- src/projectzombie/model/ModelVertical.java | 37 ++-- src/projectzombie/resources/Resource.java | 5 +- src/projectzombie/settings/Settings.java | 24 +-- src/projectzombie/text/Text.java | 12 +- src/projectzombie/tiles/Tile.java | 4 +- src/projectzombie/tiles/TileBossPortal.java | 6 +- src/projectzombie/tiles/TileChest.java | 4 +- src/projectzombie/tiles/TileLadder.java | 3 +- src/projectzombie/tiles/TileLadderUp.java | 3 +- src/projectzombie/tiles/TileLantern.java | 4 +- src/projectzombie/tiles/TileLava.java | 6 +- src/projectzombie/tiles/TileLavaFlow.java | 6 +- src/projectzombie/tiles/TilePortalDown.java | 2 +- src/projectzombie/tiles/TileRock.java | 4 +- src/projectzombie/tiles/TileTree.java | 1 - src/projectzombie/tiles/TileWater.java | 5 +- src/projectzombie/util/gl/GlHelpers.java | 102 +--------- src/projectzombie/util/gl/VerticalRender.java | 41 ---- src/projectzombie/util/math/TileState.java | 2 +- .../util/math/astar/AStarSearcher.java | 2 +- src/projectzombie/world/chunk/Chunk.java | 163 ++++++++++++---- src/projectzombie/world/chunk/ChunkEmpty.java | 6 +- .../world/chunk/ChunkEventHandler.java | 4 +- src/projectzombie/world/layer/Layer.java | 8 +- .../world/layer/layergen/LayerGen.java | 2 +- .../layer/layergen/LayerGenBossArena.java | 10 +- .../world/layer/layergen/LayerGenCaves.java | 8 +- .../world/layer/layergen/LayerGenEarth.java | 6 +- .../layer/layergen/LayerGenLavaCaves.java | 6 +- .../layergen/LayerGenRememberPlayerPos.java | 2 +- src/resources/shader/environmentRenderer.vsh | 46 ++++- src/resources/shader/guiRenderer.vsh | 47 ++++- src/resources/texture/particle/bullet.png | Bin 556 -> 1541 bytes src/resources/texture/tile/water.png | Bin 2748 -> 6368 bytes 106 files changed, 865 insertions(+), 921 deletions(-) delete mode 100755 settings.bdf mode change 100755 => 100644 src/projectzombie/entity/EntityHeight.java create mode 100644 src/projectzombie/items/spawner/ItemSpawnDummy.java create mode 100644 src/projectzombie/model/ModelChunk.java create mode 100644 src/projectzombie/model/ModelItem.java delete mode 100755 src/projectzombie/util/gl/VerticalRender.java diff --git a/.gitignore b/.gitignore index ae3c172..e29a091 100755 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /bin/ +hs_err_pid* diff --git a/layer.bdf b/layer.bdf index 2154d69f527db4d42b5c0422ac452ce97691e8b0..e309617007e0f2b3b7f9243ada7f062111e1a7f2 100644 GIT binary patch literal 369 zcmb=J^Ef3TA>s5%e;-d@#!V5Dk_rvF>Kl!=u9(r-7}&>rqW2k#=QEMzO`(NGvi2Lk zoV!>nTIImU9TTv>qH|6=^KTV}c1_`w*U6<9_?k7hjIz-w^G(n$o{~H+DW=JH6DSEg~xp3O!tj~E3#@ERX42?@J z&6#s$(vK~Rt{l2_WzQ3@8FFbI^N!4!#Ir%Jy^ei`+_WiIj)?5AoinpCb!DaMPgjSv zJ&|)Bd^owrt99mKwxpD4OP)1dYBfJ$d@R9q=StO1h3pvz+cu~@pZ;v>0vCG^{!I*L zx2P`8PFD7pR=@lA*rXY=XY-3D)G?-fShi#tqq3o?o%&WCQ}#&B^r}p`Wg6K@aaDd= eDs{nI!x$ZTPu!SvCT4?zN|R*8XU1y%NwENk0;z@o literal 7194 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 diff --git a/src/projectzombie/Main.java b/src/projectzombie/Main.java index 2c0a725..184c97b 100755 --- a/src/projectzombie/Main.java +++ b/src/projectzombie/Main.java @@ -2,11 +2,9 @@ package projectzombie; import java.util.Random; -import bdf.file.BdfCompressedFileManager; import mainloop.manager.MainloopManager; import projectzombie.audio.AudioEngine; import projectzombie.audio.AudioSources; -import projectzombie.display.Camera; import projectzombie.display.DisplayStatsEventHandler; import projectzombie.display.DisplayWindow; import projectzombie.display.bossbar.BossBars; @@ -18,7 +16,6 @@ import projectzombie.init.LayerGenerators; import projectzombie.init.Layers; import projectzombie.init.Resources; import projectzombie.init.Sounds; -import projectzombie.init.Models; import projectzombie.init.Tiles; import projectzombie.input.JoystickCallback; import projectzombie.input.KeyCallback; diff --git a/src/projectzombie/audio/AudioObject.java b/src/projectzombie/audio/AudioObject.java index e7e1ffd..fd89462 100755 --- a/src/projectzombie/audio/AudioObject.java +++ b/src/projectzombie/audio/AudioObject.java @@ -20,13 +20,10 @@ import java.nio.ShortBuffer; import org.lwjgl.stb.STBVorbis; import org.lwjgl.system.MemoryStack; -import projectzombie.Main; +import gl_engine.matrix.Matrix4; +import gl_engine.vec.Vec3d; import projectzombie.display.Camera; import projectzombie.resources.Resource; -import gl_engine.MathHelpers; -import gl_engine.matrix.Matrix4; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec3d; public class AudioObject { @@ -88,8 +85,9 @@ public class AudioObject return; } - // Calculate the rotation - Vec3d vec = Matrix4.multiply(Camera.camera.getMatrix(), pos); + // Calculate the position relative to the player + Matrix4 matrix = Camera.camera.getMatrix(); + Vec3d vec = Matrix4.multiply(matrix, pos.add(new Vec3d(-0.5, 0, -0.5))); // Play the sound with a new source int source = AudioSources.getSource(); diff --git a/src/projectzombie/display/Camera.java b/src/projectzombie/display/Camera.java index 51bf666..ba7b410 100755 --- a/src/projectzombie/display/Camera.java +++ b/src/projectzombie/display/Camera.java @@ -2,13 +2,11 @@ package projectzombie.display; import gl_engine.matrix.Matrix4; import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec3d; import projectzombie.Main; public class Camera { public double angle = 45; - public int renderDistance = 3; private Matrix4 matrix; public static Camera camera; @@ -19,10 +17,10 @@ public class Camera Vec2d pos = Main.player.pos; angle = Main.player.angle; - identity = Matrix4.multiply(identity, Matrix4.translate(-pos.x, 0, -pos.y)); - identity = Matrix4.multiply(identity, Matrix4.rotate(angle, 0, 1, 0)); - identity = Matrix4.multiply(identity, Matrix4.rotate(-50, 1, 0, 0)); - identity = Matrix4.multiply(identity, Matrix4.translate(0, 0, -12)); + identity = Matrix4.multiply(identity, Matrix4.translate(-pos.x + 0.5, 0, -pos.y + 0.5)); + identity = Matrix4.multiply(identity, Matrix4.rotate(angle + 180, 0, 1, 0)); + identity = Matrix4.multiply(identity, Matrix4.rotate(-45, 1, 0, 0)); + identity = Matrix4.multiply(identity, Matrix4.translate(0, 0, -16)); matrix = identity; } diff --git a/src/projectzombie/display/DisplayRender.java b/src/projectzombie/display/DisplayRender.java index 8a0d583..7e052d4 100755 --- a/src/projectzombie/display/DisplayRender.java +++ b/src/projectzombie/display/DisplayRender.java @@ -2,30 +2,15 @@ package projectzombie.display; import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; -import static org.lwjgl.opengl.GL11.GL_MODELVIEW; -import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA; -import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA; -import static org.lwjgl.opengl.GL11.glBlendFunc; import static org.lwjgl.opengl.GL11.glClear; -import static org.lwjgl.opengl.GL11.glLoadMatrixf; -import static org.lwjgl.opengl.GL11.glMatrixMode; import static org.lwjgl.opengl.GL11.glViewport; -import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL33; -import org.lwjgl.system.MemoryStack; -import gl_engine.graphics.GraphicsShader; import gl_engine.matrix.Matrix4; import projectzombie.Main; -import projectzombie.display.lighting.DynamicLighting; import projectzombie.entity.player.EntityPlayer; -import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.util.gl.GlHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec3d; -import projectzombie.world.chunk.Chunk; import projectzombie.world.chunk.ChunkEventHandler; public class DisplayRender @@ -55,20 +40,24 @@ public class DisplayRender GL33.glUniformMatrix4fv(Main.window.glsl_camera, true, camera.getMatrix().getArray()); GL33.glUniformMatrix4fv(Main.window.glsl_projection, true, projection.getArray()); GL33.glUniformMatrix4fv(Main.window.glsl_rotated, true, rotated.getArray()); + GL33.glUniform1i(Main.window.glsl_time, (int)((System.currentTimeMillis() / 10) % 1000)); // Render the world and the player Main.world.render(camera); player.chunk = Main.world.getLayer().getChunk(player.pos); - Model model = player.getModel(); - Matrix4 matrix = Matrix4.translate(player.pos.x, 0, player.pos.y); - GL33.glUniformMatrix4fv(Main.window.glsl_model, true, matrix.getArray()); - model.bind(); - model.render(); + if(!Main.player.dead) + { + Model model = player.getModel(); + Matrix4 matrix = Matrix4.translate(player.pos.x - 0.5, player.getHeight(), player.pos.y - 0.5); + GL33.glUniformMatrix4fv(Main.window.glsl_model, true, matrix.getArray()); + model.bind(); + model.render(); + } } } // Render the user interface - //DisplayRenderUI.render(); + DisplayRenderUI.render(); } } diff --git a/src/projectzombie/display/DisplayRenderUI.java b/src/projectzombie/display/DisplayRenderUI.java index 841680c..b255b7c 100755 --- a/src/projectzombie/display/DisplayRenderUI.java +++ b/src/projectzombie/display/DisplayRenderUI.java @@ -1,16 +1,5 @@ package projectzombie.display; -import projectzombie.Main; -import projectzombie.display.bossbar.BossBars; -import projectzombie.entity.player.EntityPlayer; -import projectzombie.init.Models; -import projectzombie.inventory.Inventory; -import projectzombie.text.Text; -import projectzombie.util.gl.GlHelpers; -import projectzombie.util.gl.texture.TextureReference; -import projectzombie.util.math.ItemStack; -import gl_engine.vec.Vec2d; - public class DisplayRenderUI { public static boolean showFPS = false; @@ -19,173 +8,9 @@ public class DisplayRenderUI public static void render() { - /*double s = GlHelpers.getScale() / 10.0; - // Get some text settings - Vec2d text_size = new Vec2d(0.5, 0.5); - - // Render the fps - if(showFPS) { - GlHelpers.pushMatrix(); - GlHelpers.translate2(-10*s + 0.5, 10*s - 0.5); - GlHelpers.color3(1, 1, 0); - Text.render("FPS: " + DisplayStatsEventHandler.fps, text_size); - GlHelpers.popMatrix(); - } - - // Get the player - EntityPlayer player = Main.player; - - // Disable some opengl options - GlHelpers.disableDepthTest(); - GlHelpers.color4(1, 1, 1, 1); - - // Get the aspect ratio - double aspect_ratio = ( - ((double) Main.window.getWidth()) / - ((double) Main.window.getHeight())); - - if(Main.menu.doGameRender && Main.menu.showIngameGUI) - { - // Render the position - if(showPos) { - GlHelpers.pushMatrix(); - GlHelpers.translate2(-10*s + 0.5, 10*s - 1); - GlHelpers.color3(1, 1, 0); - Text.render("x: " + (int) player.pos.x + ", y: " + (int) player.pos.y, text_size); - GlHelpers.color3(1, 1, 1); - GlHelpers.popMatrix(); - } - - // Render the healthbar - double max_health = player.maxHealth(); - double a = 1 - (player.getHealth() / max_health); - TextureReference health_fg = Models.UI_HEALTH_FG; - TextureReference health_bg = Models.UI_HEALTH_BG; - - GlHelpers.pushMatrix(); - GlHelpers.translate2(-2*s, -9*s); - GlHelpers.begin(); - - health_bg.texCoord(0, 1); GlHelpers.vertex2(-8, 1); - health_bg.texCoord(0, 0); GlHelpers.vertex2(-8, 0); - health_bg.texCoord(1, 0); GlHelpers.vertex2(8, 0); - health_bg.texCoord(1, 1); GlHelpers.vertex2(8, 1); - - health_fg.texCoord(0, 1); GlHelpers.vertex2(-8, 1); - health_fg.texCoord(0, 0); GlHelpers.vertex2(-8, 0); - health_fg.texCoord(1-a, 0); GlHelpers.vertex2(8-a*16, 0); - health_fg.texCoord(1-a, 1); GlHelpers.vertex2(8-a*16, 1); - - GlHelpers.end(); - GlHelpers.popMatrix(); - - // Display the amount of ammo left, and the defence and gun level - GlHelpers.pushMatrix(); - TextureReference ammo_tex = Models.ITEM_AMMO_BOX; - TextureReference gunlevel_tex = Models.UI_GUN_LEVEL; - TextureReference deflevel_tex = Models.UI_DEFENCE_LEVEL; - - GlHelpers.translate2(-9.5*s, -9*s); - GlHelpers.begin(); - ammo_tex.texCoord(0, 1); GlHelpers.vertex2(0, 0); - ammo_tex.texCoord(0, 0); GlHelpers.vertex2(0, 2); - ammo_tex.texCoord(1, 0); GlHelpers.vertex2(2, 2); - ammo_tex.texCoord(1, 1); GlHelpers.vertex2(2, 0); - GlHelpers.end(); - - GlHelpers.translate2(0, 2.5); - GlHelpers.begin(); - gunlevel_tex.texCoord(0, 1); GlHelpers.vertex2(0, 0); - gunlevel_tex.texCoord(0, 0); GlHelpers.vertex2(0, 2); - gunlevel_tex.texCoord(1, 0); GlHelpers.vertex2(2, 2); - gunlevel_tex.texCoord(1, 1); GlHelpers.vertex2(2, 0); - GlHelpers.end(); - - GlHelpers.translate2(0, 2.5); - GlHelpers.begin(); - deflevel_tex.texCoord(0, 1); GlHelpers.vertex2(0, 0); - deflevel_tex.texCoord(0, 0); GlHelpers.vertex2(0, 2); - deflevel_tex.texCoord(1, 0); GlHelpers.vertex2(2, 2); - deflevel_tex.texCoord(1, 1); GlHelpers.vertex2(2, 0); - GlHelpers.end(); - - GlHelpers.popMatrix(); - GlHelpers.pushMatrix(); - GlHelpers.translate2(-8.5*s, -9.25*s); - Text.render(Integer.toString(player.ammo), text_size); - GlHelpers.translate2(0, 3); - Text.render(Integer.toString(player.gun_level), text_size); - GlHelpers.translate2(0, 2); - Text.render(Integer.toString(player.defence_level), text_size); - GlHelpers.popMatrix(); - - // Display all the items in the players inventory - TextureReference slots_tex = Models.UI_ITEM_SLOTS; - - GlHelpers.pushMatrix(); - GlHelpers.translate2(3*s, -9.5*s); - - GlHelpers.begin(); - slots_tex.texCoord(0, 1); GlHelpers.vertex2(12, 2); - slots_tex.texCoord(0, 0); GlHelpers.vertex2(12, 0); - slots_tex.texCoord(1, 0); GlHelpers.vertex2(0, 0); - slots_tex.texCoord(1, 1); GlHelpers.vertex2(0, 2); - GlHelpers.end(); - - // Render the players active slot - TextureReference hotbar_slot_tex = Models.UI_ACTIVE_SLOT; - GlHelpers.begin(); - - hotbar_slot_tex.texCoord(0, 1); GlHelpers.vertex2(2.1 + player.inventory_hand*2, 2.1); - hotbar_slot_tex.texCoord(0, 0); GlHelpers.vertex2(2.1 + player.inventory_hand*2, -0.1); - hotbar_slot_tex.texCoord(1, 0); GlHelpers.vertex2(-0.1 + player.inventory_hand*2, -0.1); - hotbar_slot_tex.texCoord(1, 1); GlHelpers.vertex2(-0.1 + player.inventory_hand*2, 2.1); - - GlHelpers.end(); - - GlHelpers.popMatrix(); - - // Get the players inventory - Inventory player_inv = player.getInventory(); - - GlHelpers.pushMatrix(); - GlHelpers.translate2(3.12*s, -9.5*s); - - // Render the players inventory - for(int i=0;i<6;i++) - { - ItemStack player_item = player_inv.getItem(i); - - if(!player_item.isEmpty()) - { - GlHelpers.pushMatrix(); - GlHelpers.translate2(i * 2 / aspect_ratio, 0.3); - player_item.item.render(new Vec2d(0, 0), new Vec2d(1.5, 1.5)); - GlHelpers.translate2(0, -0.1); - Text.render(Integer.toString(player_item.count), text_size); - GlHelpers.popMatrix(); - } - } - - GlHelpers.popMatrix(); - - // Render the active slots text - ItemStack item_active = player_inv.getItem(player.inventory_hand); - if(!item_active.isEmpty()) - { - GlHelpers.pushMatrix(); - GlHelpers.translate2(3.12*s, -9.5*s); - GlHelpers.translate2(-0.08, 2.24); - Text.render(item_active.item.getName(item_active.meta), text_size); - GlHelpers.popMatrix(); - } - - // Render the boss bars - BossBars.render(); - } // Render the loaded menu - Main.menu.render();*/ + //Main.menu.render(); } } diff --git a/src/projectzombie/display/DisplayStatsEventHandler.java b/src/projectzombie/display/DisplayStatsEventHandler.java index 769ec4e..b3d3e48 100755 --- a/src/projectzombie/display/DisplayStatsEventHandler.java +++ b/src/projectzombie/display/DisplayStatsEventHandler.java @@ -1,7 +1,7 @@ package projectzombie.display; import mainloop.task.IMainloopTask; -import projectzombie.mainloop.MainloopEventHandler; +import projectzombie.Main; public class DisplayStatsEventHandler implements IMainloopTask { @@ -22,9 +22,11 @@ public class DisplayStatsEventHandler implements IMainloopTask @Override public void MainLoopUpdate() { - // Set the fps from mspf every second - long mspf = MainloopEventHandler.MAINLOOP_EVENT_HANDLER.mspf; - fps = (int)(1000 / mspf); + // Display the fps + Main.window.setTitle("Project Zombie (" + DisplayWindow.fps + " fps)"); + + fps = DisplayWindow.fps; + DisplayWindow.fps = 0; } diff --git a/src/projectzombie/display/DisplayWindow.java b/src/projectzombie/display/DisplayWindow.java index 383f4df..f72990b 100755 --- a/src/projectzombie/display/DisplayWindow.java +++ b/src/projectzombie/display/DisplayWindow.java @@ -1,22 +1,14 @@ package projectzombie.display; -import static org.lwjgl.glfw.GLFW.GLFW_DOUBLEBUFFER; -import static org.lwjgl.glfw.GLFW.GLFW_FALSE; -import static org.lwjgl.glfw.GLFW.glfwWindowHint; - import java.nio.IntBuffer; import org.lwjgl.BufferUtils; import org.lwjgl.glfw.GLFW; -import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL33; import gl_engine.graphics.GraphicsHelpers; import gl_engine.graphics.GraphicsShader; -import gl_engine.matrix.Matrix4; import mainloop.task.IMainloopTask; -import projectzombie.Main; -import projectzombie.init.Models; import projectzombie.init.Resources; import projectzombie.input.CursorEnterCallback; import projectzombie.input.CursorPosCallback; @@ -26,7 +18,6 @@ import projectzombie.input.KeyCharCallback; import projectzombie.input.MouseButtonCallback; import projectzombie.input.ScrollWheelCallback; import projectzombie.mainloop.MainloopEventHandler; -import projectzombie.util.gl.GlHelpers; public class DisplayWindow implements IMainloopTask { @@ -38,12 +29,15 @@ public class DisplayWindow implements IMainloopTask private boolean fullscreen = true; private boolean mouseVisibility_last = false; + public static int fps = 0; + public GraphicsShader environmentRenderer; public int glsl_model; public int glsl_projection; public int glsl_rotated; public int glsl_camera; + public int glsl_time; public int getWidth() { return this.width; @@ -80,6 +74,8 @@ public class DisplayWindow implements IMainloopTask width = w.get()*4; height = h.get()*4; + //GLFW.glfwWindowHint(GLFW.GLFW_DOUBLEBUFFER, GLFW.GLFW_FALSE); + // Create the window window = GraphicsHelpers.initWindow("Project Zombie", width, height, monitor); @@ -102,6 +98,7 @@ public class DisplayWindow implements IMainloopTask //GLFW.glfwShowWindow(this.window); GL33.glEnable(GL33.GL_DEPTH_TEST); + GL33.glEnable(GL33.GL_BLEND); environmentRenderer = new GraphicsShader("/resources/shader/environmentRenderer"); environmentRenderer.use(); @@ -110,6 +107,7 @@ public class DisplayWindow implements IMainloopTask glsl_camera = GL33.glGetUniformLocation(environmentRenderer.program, "camera"); glsl_rotated = GL33.glGetUniformLocation(environmentRenderer.program, "rotated"); glsl_projection = GL33.glGetUniformLocation(environmentRenderer.program, "projection"); + glsl_time = GL33.glGetUniformLocation(environmentRenderer.program, "time"); } public void render() @@ -133,6 +131,8 @@ public class DisplayWindow implements IMainloopTask // Swap the framebuffers and poll events GLFW.glfwSwapBuffers(window); GLFW.glfwPollEvents(); + + fps += 1; } public void toggleFullscreen() { @@ -157,7 +157,11 @@ public class DisplayWindow implements IMainloopTask } public boolean shouldClose() { - return GLFW.glfwWindowShouldClose(this.window); + return GLFW.glfwWindowShouldClose(window); + } + + public void makeContextCurrent() { + GLFW.glfwMakeContextCurrent(window); } @Override @@ -174,4 +178,8 @@ public class DisplayWindow implements IMainloopTask public void MainLoopUpdate() { this.render(); } + + public void setTitle(String string) { + GLFW.glfwSetWindowTitle(window, string); + } } diff --git a/src/projectzombie/display/bossbar/BossBars.java b/src/projectzombie/display/bossbar/BossBars.java index efccaaf..9a89cf7 100755 --- a/src/projectzombie/display/bossbar/BossBars.java +++ b/src/projectzombie/display/bossbar/BossBars.java @@ -2,10 +2,6 @@ package projectzombie.display.bossbar; import java.util.ArrayList; -import projectzombie.init.Models; -import projectzombie.util.gl.GlHelpers; -import projectzombie.util.gl.texture.TextureReference; - public class BossBars { private static final ArrayList bossbars = new ArrayList(); diff --git a/src/projectzombie/display/lighting/ChunkLightingCollection.java b/src/projectzombie/display/lighting/ChunkLightingCollection.java index a663c0d..c79387a 100755 --- a/src/projectzombie/display/lighting/ChunkLightingCollection.java +++ b/src/projectzombie/display/lighting/ChunkLightingCollection.java @@ -1,10 +1,10 @@ package projectzombie.display.lighting; import gl_engine.MathHelpers; -import projectzombie.util.math.map.IMap2D; -import projectzombie.util.math.map.Map2D; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec2i; +import projectzombie.util.math.map.IMap2D; +import projectzombie.util.math.map.Map2D; import projectzombie.world.chunk.Chunk; public class ChunkLightingCollection implements IMap2D diff --git a/src/projectzombie/display/lighting/DynamicLighting.java b/src/projectzombie/display/lighting/DynamicLighting.java index 546b59a..77468ce 100755 --- a/src/projectzombie/display/lighting/DynamicLighting.java +++ b/src/projectzombie/display/lighting/DynamicLighting.java @@ -1,12 +1,11 @@ package projectzombie.display.lighting; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2i; import projectzombie.Main; -import projectzombie.display.Camera; import projectzombie.entity.Entity; import projectzombie.entity.player.EntityPlayer; -import gl_engine.MathHelpers; import projectzombie.util.math.TileState; -import gl_engine.vec.Vec2i; import projectzombie.world.chunk.Chunk; import projectzombie.world.chunk.ChunkEventHandler; import projectzombie.world.layer.Layer; @@ -18,7 +17,7 @@ public class DynamicLighting public static void update() { if(!ChunkEventHandler.loaded) return; - int r = Camera.camera.renderDistance; + int r = Chunk.RENDER_DISTANCE; Layer layer = Main.world.getLayer(); EntityPlayer player = Main.player; @@ -84,7 +83,7 @@ public class DynamicLighting MathHelpers.floor(lpos.squareDistance(new Vec2i( MathHelpers.floor(Main.player.pos.x), MathHelpers.floor(Main.player.pos.y))) / 16) - > Camera.camera.renderDistance) { + > Chunk.RENDER_DISTANCE) { return; } diff --git a/src/projectzombie/display/lighting/TileLighting.java b/src/projectzombie/display/lighting/TileLighting.java index 33bc2c2..124b4ec 100755 --- a/src/projectzombie/display/lighting/TileLighting.java +++ b/src/projectzombie/display/lighting/TileLighting.java @@ -1,15 +1,15 @@ package projectzombie.display.lighting; +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 gl_engine.MathHelpers; import projectzombie.util.math.TileState; -import gl_engine.range.Range4i; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec4i; import projectzombie.world.chunk.Chunk; import projectzombie.world.chunk.ChunkEventHandler; import projectzombie.world.layer.Layer; @@ -123,7 +123,7 @@ public class TileLighting implements IMainloopTask MathHelpers.floor(lpos.squareDistance(new Vec2i( MathHelpers.floor(Main.player.pos.x), MathHelpers.floor(Main.player.pos.y))) / 16) - > Camera.camera.renderDistance + > Chunk.RENDER_DISTANCE ) { return; } @@ -190,7 +190,7 @@ public class TileLighting implements IMainloopTask @Override public boolean MainLoopRepeat() { - return true; + return false; } @Override diff --git a/src/projectzombie/entity/Entity.java b/src/projectzombie/entity/Entity.java index 48a44f2..0b92d5b 100755 --- a/src/projectzombie/entity/Entity.java +++ b/src/projectzombie/entity/Entity.java @@ -8,17 +8,15 @@ import bdf.classes.IBdfClassManager; import bdf.types.BdfArray; 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.Camera; import projectzombie.init.Entities; import projectzombie.model.Model; import projectzombie.tiles.Tile; -import gl_engine.MathHelpers; import projectzombie.util.math.TileState; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.chunk.ChunkEventHandler; import projectzombie.world.layer.Layer; diff --git a/src/projectzombie/entity/EntityBoss.java b/src/projectzombie/entity/EntityBoss.java index 73b0c78..49a42fd 100755 --- a/src/projectzombie/entity/EntityBoss.java +++ b/src/projectzombie/entity/EntityBoss.java @@ -4,8 +4,11 @@ import java.util.Random; import bdf.types.BdfNamedList; import bdf.types.BdfObject; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.Main; -import projectzombie.display.Camera; import projectzombie.display.bossbar.BossBars; import projectzombie.display.bossbar.IBossBar; import projectzombie.init.Items; @@ -13,14 +16,9 @@ import projectzombie.init.Models; import projectzombie.init.Tiles; import projectzombie.model.Model; import projectzombie.time.GameTimer; -import projectzombie.util.gl.texture.TextureReference; import projectzombie.util.math.ItemStack; -import gl_engine.MathHelpers; import projectzombie.util.math.random.OpenSimplexNoise; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; diff --git a/src/projectzombie/entity/EntityBullet.java b/src/projectzombie/entity/EntityBullet.java index ead0e96..302f4f8 100755 --- a/src/projectzombie/entity/EntityBullet.java +++ b/src/projectzombie/entity/EntityBullet.java @@ -2,20 +2,17 @@ package projectzombie.entity; import bdf.types.BdfNamedList; import bdf.types.BdfObject; -import projectzombie.display.Camera; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; +import gl_engine.vec.Vec3d; import projectzombie.entity.particle.ParticleBlood; import projectzombie.init.Models; import projectzombie.init.Sounds; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; import projectzombie.tiles.Tile; import projectzombie.tiles.TileBulletBreakable; -import projectzombie.util.gl.GlHelpers; -import gl_engine.MathHelpers; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -75,7 +72,7 @@ public class EntityBullet extends EntityParticle Math.toRadians(this.angle), Math.toRadians(this.height_angle))); // Play the gun sound - Sounds.GUN.play(new Vec3d(pos.x, pos.y, 0.4), 2); + Sounds.GUN.play(new Vec3d(pos.x, 0.4, pos.y), 2); } public EntityBullet withHeight(double angle, double height) { @@ -157,7 +154,7 @@ public class EntityBullet extends EntityParticle e.push(1, angle); // Spawn some blood particles - if(EntityParticle.MODE != SettingQuality.OFF) { + if(!EntityParticle.DISABLED) { for(int i=0;i Camera.camera.renderDistance * 16) this.kill(); + if(Main.player.pos.squareDistance(pos) > Chunk.RENDER_DISTANCE * 16) this.kill(); } } diff --git a/src/projectzombie/entity/EntityTnt.java b/src/projectzombie/entity/EntityTnt.java index 3c6d920..a7e9022 100755 --- a/src/projectzombie/entity/EntityTnt.java +++ b/src/projectzombie/entity/EntityTnt.java @@ -2,14 +2,12 @@ package projectzombie.entity; import bdf.types.BdfNamedList; import bdf.types.BdfObject; -import projectzombie.display.Camera; -import projectzombie.entity.particle.ParticleSpark; -import projectzombie.init.Models; -import projectzombie.model.Model; -import projectzombie.util.gl.GlHelpers; import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; +import projectzombie.entity.particle.ParticleSpark; +import projectzombie.init.Models; +import projectzombie.model.Model; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -127,8 +125,7 @@ public class EntityTnt extends Entity @Override public Model getModel() { - // TODO Auto-generated method stub - return null; + return Models.EMPTY; } } diff --git a/src/projectzombie/entity/EntityZombie.java b/src/projectzombie/entity/EntityZombie.java index 5df5fa5..05e8897 100755 --- a/src/projectzombie/entity/EntityZombie.java +++ b/src/projectzombie/entity/EntityZombie.java @@ -4,15 +4,14 @@ import java.util.Random; import bdf.types.BdfNamedList; import bdf.types.BdfObject; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec2i; import projectzombie.Main; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.util.gl.texture.TextureReference; import projectzombie.util.math.astar.AStar; import projectzombie.util.math.astar.AStarSearcher; import projectzombie.util.math.random.OpenSimplexNoise; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; diff --git a/src/projectzombie/entity/EntityZombieArmored.java b/src/projectzombie/entity/EntityZombieArmored.java index 49b4211..2c4d111 100755 --- a/src/projectzombie/entity/EntityZombieArmored.java +++ b/src/projectzombie/entity/EntityZombieArmored.java @@ -1,11 +1,9 @@ package projectzombie.entity; import bdf.types.BdfObject; -import projectzombie.display.Camera; +import gl_engine.vec.Vec2d; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.util.gl.texture.TextureReference; -import gl_engine.vec.Vec2d; public class EntityZombieArmored extends EntityZombie { diff --git a/src/projectzombie/entity/particle/ParticleBlood.java b/src/projectzombie/entity/particle/ParticleBlood.java index 385aed9..ad58378 100755 --- a/src/projectzombie/entity/particle/ParticleBlood.java +++ b/src/projectzombie/entity/particle/ParticleBlood.java @@ -2,27 +2,34 @@ package projectzombie.entity.particle; import java.util.Random; -import projectzombie.display.Camera; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec3d; +import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; -import projectzombie.util.gl.GlHelpers; -import gl_engine.MathHelpers; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; -public class ParticleBlood extends EntityParticle +public class ParticleBlood extends EntityParticle implements EntityHeight { private double r_color; private double time = 1000; private double height = 0; private Vec3d velocity; + @Override + public double getHeight() { + return height; + } + + @Override + public void setHeight(double height) { + this.height = height; + } + public ParticleBlood(Random rand, Vec2d pos, double angle) { super(pos); @@ -60,7 +67,7 @@ public class ParticleBlood extends EntityParticle // Should this particle too old; destroy it if(time < 0) chunk.killEntity(this); - if(MODE == SettingQuality.OFF) { + if(DISABLED) { kill(); } } diff --git a/src/projectzombie/entity/particle/ParticleBreak.java b/src/projectzombie/entity/particle/ParticleBreak.java index 89b3478..bc8a071 100755 --- a/src/projectzombie/entity/particle/ParticleBreak.java +++ b/src/projectzombie/entity/particle/ParticleBreak.java @@ -1,60 +1,59 @@ package projectzombie.entity.particle; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec3d; import projectzombie.Main; -import projectzombie.display.Camera; import projectzombie.entity.Entity; +import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; -import projectzombie.util.gl.GlHelpers; -import projectzombie.util.gl.texture.IHasTexture; -import projectzombie.util.gl.texture.TextureReference; -import gl_engine.MathHelpers; import projectzombie.util.math.TileState; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; -public class ParticleBreak extends EntityParticle +public class ParticleBreak extends EntityParticle implements EntityHeight { private double height = 0; private Vec3d velocity; private int time = 0; private boolean landed = false; + @Override + public double getHeight() { + return height; + } + + @Override + public void setHeight(double height) { + this.height = height; + } + public static void spawnParticles(Chunk chunk, Vec2d pos, Entity e) { - if(EntityParticle.MODE == SettingQuality.OFF) { + if(DISABLED) { return; } - int height = 1; - - /*if(e instanceof EntityVertical) { - height = MathHelpers.floor(((EntityVertical)e).size.y); - } + double height = e.getModel().getHeight(); for(int i=0;i<50 * height;i++) { - chunk.spawnEntity(new ParticleBreak(pos.copy(), e)); - }*/ + chunk.spawnEntity(new ParticleBreak(pos.copy(), e, height)); + } } public static void spawnParticles(Chunk chunk, Vec2d pos, TileState s) { - if(EntityParticle.MODE == SettingQuality.OFF) { + if(DISABLED) { return; } - int height = 1; - - + double height = s.tile.getModel(s.meta).getHeight(); for(int i=0;i<50 * height;i++) { - chunk.spawnEntity(new ParticleBreak(pos.copy(), s)); + chunk.spawnEntity(new ParticleBreak(pos.copy(), s, height)); } } @@ -90,7 +89,7 @@ public class ParticleBreak extends EntityParticle } }*/ - public ParticleBreak(Vec2d pos, TileState ts) { + public ParticleBreak(Vec2d pos, TileState ts, double height) { super(pos); double angle = RandomHelpers.randrange(rand, 360); @@ -100,10 +99,11 @@ public class ParticleBreak extends EntityParticle side_v.x, side_v.y, RandomHelpers.randrange(rand, 10000) / 200000.0); + this.height = RandomHelpers.randrange(rand, 0, (int)(height * 1000)) / 1000.0; time = RandomHelpers.randrange(rand, 800, 1200); } - public ParticleBreak(Vec2d pos, Entity entity) { + public ParticleBreak(Vec2d pos, Entity entity, double height) { super(pos); double angle = RandomHelpers.randrange(rand, 360); @@ -112,6 +112,7 @@ public class ParticleBreak extends EntityParticle side_v.x, side_v.y, RandomHelpers.randrange(rand, 10000) / 200000.0); + this.height = RandomHelpers.randrange(rand, 0, (int)(height * 1000)) / 1000.0; time = RandomHelpers.randrange(rand, 500, 1500); /*if(entity instanceof EntityVertical) { @@ -154,7 +155,7 @@ public class ParticleBreak extends EntityParticle pos.y += velocity.y; } - if(EntityParticle.MODE == SettingQuality.OFF) { + if(DISABLED) { kill(); } } diff --git a/src/projectzombie/entity/particle/ParticleLava.java b/src/projectzombie/entity/particle/ParticleLava.java index 52388e3..8e431be 100755 --- a/src/projectzombie/entity/particle/ParticleLava.java +++ b/src/projectzombie/entity/particle/ParticleLava.java @@ -2,25 +2,33 @@ package projectzombie.entity.particle; import java.util.Random; -import projectzombie.display.Camera; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec3d; +import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; -import projectzombie.util.gl.GlHelpers; -import gl_engine.MathHelpers; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; -public class ParticleLava extends EntityParticle +public class ParticleLava extends EntityParticle implements EntityHeight { private static Random rand = new Random(); private Vec3d velocity; private double height = 0; + @Override + public double getHeight() { + return height; + } + + @Override + public void setHeight(double height) { + this.height = height; + } + public ParticleLava(Vec2d pos) { super(pos); @@ -44,7 +52,7 @@ public class ParticleLava extends EntityParticle kill(); } - if(MODE == SettingQuality.OFF) { + if(DISABLED) { kill(); } } diff --git a/src/projectzombie/entity/particle/ParticleSmoke.java b/src/projectzombie/entity/particle/ParticleSmoke.java index 169bfed..dac14aa 100755 --- a/src/projectzombie/entity/particle/ParticleSmoke.java +++ b/src/projectzombie/entity/particle/ParticleSmoke.java @@ -1,18 +1,16 @@ package projectzombie.entity.particle; +import gl_engine.vec.Vec2d; import projectzombie.Main; -import projectzombie.display.Camera; +import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; -import projectzombie.util.gl.GlHelpers; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; -public class ParticleSmoke extends EntityParticle +public class ParticleSmoke extends EntityParticle implements EntityHeight { double height = 0; double opacity = 1; @@ -20,6 +18,16 @@ public class ParticleSmoke extends EntityParticle double disappear_speed; private Model model; + + @Override + public double getHeight() { + return height; + } + + @Override + public void setHeight(double height) { + this.height = height; + } public ParticleSmoke(Vec2d pos) { super(pos); @@ -44,7 +52,7 @@ public class ParticleSmoke extends EntityParticle height += height_speed; opacity -= disappear_speed; - if(EntityParticle.MODE == SettingQuality.OFF) { + if(DISABLED) { kill(); } } diff --git a/src/projectzombie/entity/particle/ParticleSpark.java b/src/projectzombie/entity/particle/ParticleSpark.java index ed2caab..231e6ac 100755 --- a/src/projectzombie/entity/particle/ParticleSpark.java +++ b/src/projectzombie/entity/particle/ParticleSpark.java @@ -1,12 +1,9 @@ package projectzombie.entity.particle; -import projectzombie.display.Camera; +import gl_engine.vec.Vec2d; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; -import projectzombie.util.gl.GlHelpers; -import gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -32,7 +29,7 @@ public class ParticleSpark extends EntityParticle kill(); } - if(MODE == SettingQuality.OFF) { + if(DISABLED) { kill(); } } diff --git a/src/projectzombie/entity/particle/ParticleWater.java b/src/projectzombie/entity/particle/ParticleWater.java index 42f7ab4..6bc3f7b 100755 --- a/src/projectzombie/entity/particle/ParticleWater.java +++ b/src/projectzombie/entity/particle/ParticleWater.java @@ -1,24 +1,31 @@ package projectzombie.entity.particle; -import projectzombie.display.Camera; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; +import gl_engine.vec.Vec3d; +import projectzombie.entity.EntityHeight; import projectzombie.entity.EntityParticle; import projectzombie.init.Models; import projectzombie.model.Model; -import projectzombie.settings.SettingQuality; -import projectzombie.util.gl.GlHelpers; -import gl_engine.MathHelpers; import projectzombie.util.math.random.RandomHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; -public class ParticleWater extends EntityParticle +public class ParticleWater extends EntityParticle implements EntityHeight { private Vec3d velocity; private double height = 0; + @Override + public double getHeight() { + return height; + } + + @Override + public void setHeight(double height) { + this.height = height; + } + public ParticleWater(Vec2d pos) { super(pos); @@ -42,7 +49,7 @@ public class ParticleWater extends EntityParticle kill(); } - if(MODE == SettingQuality.OFF) { + if(DISABLED) { kill(); } } diff --git a/src/projectzombie/entity/player/EntityPlayer.java b/src/projectzombie/entity/player/EntityPlayer.java index 1639160..245897c 100755 --- a/src/projectzombie/entity/player/EntityPlayer.java +++ b/src/projectzombie/entity/player/EntityPlayer.java @@ -1,14 +1,11 @@ package projectzombie.entity.player; -import java.io.FileOutputStream; -import java.util.zip.DeflaterOutputStream; - -import bdf.types.BdfIndent; import bdf.types.BdfNamedList; import bdf.types.BdfObject; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; import mainloop.task.IMainloopTask; import projectzombie.Main; -import projectzombie.display.Camera; import projectzombie.entity.Entity; import projectzombie.entity.EntityAlive; import projectzombie.entity.EntityBullet; @@ -22,16 +19,8 @@ import projectzombie.inventory.Inventory; import projectzombie.menu.MenuDeath; import projectzombie.model.Model; import projectzombie.settings.Cheats; -import projectzombie.util.gl.GlHelpers; -import projectzombie.util.gl.texture.TextureReference; import projectzombie.util.math.ItemStack; -import gl_engine.MathHelpers; -import gl_engine.vec.Vec2d; -import gl_engine.vec.Vec2i; -import gl_engine.vec.Vec3d; -import projectzombie.world.World; import projectzombie.world.chunk.Chunk; -import projectzombie.world.chunk.ChunkEventHandler; import projectzombie.world.layer.Layer; public class EntityPlayer extends Entity implements EntityAlive, EntityInventory, EntityHeight diff --git a/src/projectzombie/init/Items.java b/src/projectzombie/init/Items.java index 51b7570..86d7ea6 100755 --- a/src/projectzombie/init/Items.java +++ b/src/projectzombie/init/Items.java @@ -38,6 +38,8 @@ public class Items register(GRAPPLING_HOOK); register(SPAWN_ZOMBIE); + register(SPAWN_DUMMY); + register(ROCK); register(AMMO); @@ -54,6 +56,7 @@ public class Items public static final Item GRAPPLING_HOOK = new ItemGrapplingHook(); public static final Item SPAWN_ZOMBIE = new ItemSpawnZombie(); + public static final Item SPAWN_DUMMY = new ItemSpawnZombie(); public static final Item ROCK = new ItemRock(); } diff --git a/src/projectzombie/init/Models.java b/src/projectzombie/init/Models.java index c0304de..ebf6fc3 100755 --- a/src/projectzombie/init/Models.java +++ b/src/projectzombie/init/Models.java @@ -1,20 +1,13 @@ package projectzombie.init; -import java.util.ArrayList; - -import org.lwjgl.opengl.GL; - import gl_engine.vec.Vec2d; -import projectzombie.display.DisplayWindow; import projectzombie.model.Model; import projectzombie.model.ModelEmpty; import projectzombie.model.ModelGui; +import projectzombie.model.ModelItem; import projectzombie.model.ModelRandom; import projectzombie.model.ModelTile; import projectzombie.model.ModelVertical; -import projectzombie.util.gl.texture.TextureMap; -import projectzombie.util.gl.texture.TextureReference; -import projectzombie.util.gl.texture.TextureReferenceRandom; public class Models { @@ -27,31 +20,30 @@ public class Models public static final Model TILE_TREE = new ModelVertical(Resources.ATLAS.get("/tile/tree.png"), new Vec2d(1, 4)); public static final Model TILE_ROCK = new ModelVertical(Resources.ATLAS.get("/tile/rock.png")); public static final Model TILE_LADDER = new ModelVertical(Resources.ATLAS.get("/tile/ladder.png")); - public static final Model TILE_PORTAL = new ModelVertical(Resources.ATLAS.get("/tile/portal.png")); + public static final Model TILE_PORTAL = new ModelTile(Resources.ATLAS.get("/tile/tunnel_down.png")); public static final Model TILE_WALL = new ModelTile(Resources.ATLAS.get("/tile/wall.png")); - public static final Model TILE_LADDER_UP = new ModelVertical(Resources.ATLAS.get("/tile/ladder_up.png")); + public static final Model TILE_LADDER_UP = new ModelVertical(Resources.ATLAS.get("/tile/ladder_up.png"), new Vec2d(1, 16)); public static final Model TILE_CHEST = new ModelVertical(Resources.ATLAS.get("/tile/chest.png")); - public static final Model TILE_BOSS_PORTAL = new ModelVertical(Resources.ATLAS.get("/tile/boss_portal.png")); - public static final Model TILE_WATER = new ModelTile(Resources.ATLAS.get("/tile/water.png")); - public static final Model TILE_LAVA = new ModelTile(Resources.ATLAS.get("/tile/lava.png")); - public static final Model TILE_LAVA_FLOW = new ModelTile(Resources.ATLAS.get("/tile/lava_flow.png")); + public static final Model TILE_BOSS_PORTAL = new ModelVertical(Resources.ATLAS.get("/tile/boss_portal.png"), new Vec2d(2, 2)); + public static final Model TILE_WATER = new ModelTile(Resources.ATLAS.get("/tile/water.png"), 16, 10); + public static final Model TILE_LAVA = new ModelTile(Resources.ATLAS.get("/tile/lava.png"), 16, 50); + public static final Model TILE_LAVA_FLOW = new ModelTile(Resources.ATLAS.get("/tile/lava_flow.png"), 16, 50); + public static final Model TILE_LANTERN = new ModelVertical(Resources.ATLAS.get("/tile/lantern.png"), 4, 5); - public static final Model ENTITY_BOSS_IDLE = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_idle.png")); - public static final Model ENTITY_BOSS_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_firing.png"), 4, 10); - public static final Model ENTITY_BOSS_WALKING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking.png"), 4, 10); - public static final Model ENTITY_BOSS_WALKING_AND_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking_firing.png"), 4, 10); + public static final Model ENTITY_BOSS_IDLE = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_idle.png"), new Vec2d(4, 4)); + public static final Model ENTITY_BOSS_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_firing.png"), new Vec2d(4, 4), 4, 10); + public static final Model ENTITY_BOSS_WALKING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking.png"), new Vec2d(4, 4), 4, 10); + public static final Model ENTITY_BOSS_WALKING_AND_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking_firing.png"), new Vec2d(4, 4), 4, 10); public static final Model ENTITY_TNT = new ModelVertical(Resources.ATLAS.get("/entity/tnt.png")); public static final Model ENTITY_FLARE = new ModelVertical(Resources.ATLAS.get("/entity/flare.png")); public static final Model ENTITY_DUMMY = new ModelVertical(Resources.ATLAS.get("/entity/dummy.png")); public static final Model ENTITY_GRAPPLING_HOOK = new ModelVertical(Resources.ATLAS.get("/entity/grappling_hook.png")); - public static final Model TILE_LANTERN = new ModelVertical(Resources.ATLAS.get("/tile/lantern.png"), 4, 5); - - public static final Model PARTICLE_BLOOD = new ModelVertical(Resources.ATLAS.get("/particle/blood.png")); - public static final Model PARTICLE_LAVA = new ModelVertical(Resources.ATLAS.get("/particle/blood.png")); - public static final Model PARTICLE_WATER = new ModelVertical(Resources.ATLAS.get("/particle/blood.png")); - public static final Model PARTICLE_SMOKE_TRAIL = new ModelVertical(Resources.ATLAS.get("/particle/blood.png")); - public static final Model PARTICLE_BULLET = new ModelVertical(Resources.ATLAS.get("/particle/blood.png")); + public static final Model PARTICLE_BLOOD = new ModelVertical(Resources.ATLAS.get("/particle/blood.png"), new Vec2d(0.1, 0.1)); + public static final Model PARTICLE_LAVA = new ModelVertical(Resources.ATLAS.get("/particle/lava.png"), new Vec2d(0.1, 0.1)); + public static final Model PARTICLE_WATER = new ModelVertical(Resources.ATLAS.get("/particle/water.png"), new Vec2d(0.1, 0.1)); + public static final Model PARTICLE_SMOKE_TRAIL = new ModelVertical(Resources.ATLAS.get("/particle/smoke_trail.png"), new Vec2d(0.1, 0.1)); + public static final Model PARTICLE_BULLET = new ModelVertical(Resources.ATLAS.get("/particle/bullet.png"), new Vec2d(0.1, 0.1)); public static final ModelRandom PARTICLE_SMOKE_RANDOM = new ModelRandom( new ModelVertical(Resources.ATLAS.get("/particle/smoke_0.png")), @@ -72,12 +64,18 @@ public class Models public static final Model UI_DEFENCE_LEVEL = new ModelGui(Resources.ATLAS.get("/gui/shield.png")); public static final Model UI_GUN_LEVEL = new ModelGui(Resources.ATLAS.get("/gui/gun.png")); - public static final Model ITEM_GRAPPLING_HOOK = new ModelGui(Resources.ATLAS.get("/item/grappling_hook.png")); - public static final Model ITEM_HEALTH_POTION = new ModelGui(Resources.ATLAS.get("/item/health_potion.png")); - public static final Model ITEM_AMMO_BOX = new ModelGui(Resources.ATLAS.get("/item/ammo_box.png")); - public static final Model ITEM_GUN_UPGRADE = new ModelGui(Resources.ATLAS.get("/item/gun_upgrade.png")); - public static final Model ITEM_DEFENCE_UPGRADE = new ModelGui(Resources.ATLAS.get("/item/shield_upgrade.png")); - public static final Model ITEM_ROCK = new ModelGui(Resources.ATLAS.get("/item/rock.png")); + public static final ModelItem ITEM_EMPTY = ModelItem.createEmpty(); + public static final ModelItem ITEM_GRAPPLING_HOOK = new ModelItem(Resources.ATLAS.get("/item/grappling_hook.png")); + public static final ModelItem ITEM_HEALTH_POTION = new ModelItem(Resources.ATLAS.get("/item/health_potion.png")); + public static final ModelItem ITEM_AMMO_BOX = new ModelItem(Resources.ATLAS.get("/item/ammo_box.png")); + public static final ModelItem ITEM_GUN_UPGRADE = new ModelItem(Resources.ATLAS.get("/item/gun_upgrade.png")); + public static final ModelItem ITEM_DEFENCE_UPGRADE = new ModelItem(Resources.ATLAS.get("/item/shield_upgrade.png")); + public static final ModelItem ITEM_ROCK = new ModelItem(Resources.ATLAS.get("/tile/rock.png")); + public static final ModelItem ITEM_TNT = new ModelItem(Resources.ATLAS.get("/entity/tnt.png")); + public static final ModelItem ITEM_FLARE = new ModelItem(Resources.ATLAS.get("/entity/flare.png")); + public static final ModelItem ITEM_LANTERN = new ModelItem(Resources.ATLAS.get("/tile/lantern.png"), 4, 5); + public static final ModelItem ITEM_SPAWN_ZOMBIE = new ModelItem(Resources.ATLAS.get("/entity/zombie_back_moving.png"), 4, 10); + public static final ModelItem ITEM_SPAWN_DUMMY = new ModelItem(Resources.ATLAS.get("/entity/dummy.png")); // Player Back White Varient public static final Model ENTITY_PLAYER_B_W_STILL = new ModelVertical(Resources.ATLAS.get("/player/player_white_back_still.png")); diff --git a/src/projectzombie/init/Resources.java b/src/projectzombie/init/Resources.java index 01b9624..47047cd 100755 --- a/src/projectzombie/init/Resources.java +++ b/src/projectzombie/init/Resources.java @@ -30,20 +30,20 @@ public class Resources public static TextureAtlas3D ATLAS; - public static final Resource GUN_OGG_0 = new Resource("sound/gun0.ogg"); - public static final Resource GUN_OGG_1 = new Resource("sound/gun1.ogg"); - public static final Resource GUN_OGG_2 = new Resource("sound/gun2.ogg"); - public static final Resource GUN_OGG_3 = new Resource("sound/gun3.ogg"); - public static final Resource GUN_OGG_4 = new Resource("sound/gun4.ogg"); - public static final Resource GUN_OGG_5 = new Resource("sound/gun5.ogg"); - public static final Resource GUN_OGG_6 = new Resource("sound/gun6.ogg"); - public static final Resource GUN_OGG_7 = new Resource("sound/gun7.ogg"); - public static final Resource GUN_OGG_8 = new Resource("sound/gun8.ogg"); - public static final Resource GUN_OGG_9 = new Resource("sound/gun9.ogg"); + public static final Resource GUN_OGG_0 = new Resource("/sound/gun0.ogg"); + public static final Resource GUN_OGG_1 = new Resource("/sound/gun1.ogg"); + public static final Resource GUN_OGG_2 = new Resource("/sound/gun2.ogg"); + public static final Resource GUN_OGG_3 = new Resource("/sound/gun3.ogg"); + public static final Resource GUN_OGG_4 = new Resource("/sound/gun4.ogg"); + public static final Resource GUN_OGG_5 = new Resource("/sound/gun5.ogg"); + public static final Resource GUN_OGG_6 = new Resource("/sound/gun6.ogg"); + public static final Resource GUN_OGG_7 = new Resource("/sound/gun7.ogg"); + public static final Resource GUN_OGG_8 = new Resource("/sound/gun8.ogg"); + public static final Resource GUN_OGG_9 = new Resource("/sound/gun9.ogg"); - public static final Resource HIT_OGG_0 = new Resource("sound/hit0.ogg"); - public static final Resource HIT_OGG_1 = new Resource("sound/hit1.ogg"); - public static final Resource HIT_OGG_2 = new Resource("sound/hit2.ogg"); + public static final Resource HIT_OGG_0 = new Resource("/sound/hit0.ogg"); + public static final Resource HIT_OGG_1 = new Resource("/sound/hit1.ogg"); + public static final Resource HIT_OGG_2 = new Resource("/sound/hit2.ogg"); - public static final Resource EXPLOSION_OGG = new Resource("sound/explosion.ogg"); + public static final Resource EXPLOSION_OGG = new Resource("/sound/explosion.ogg"); } diff --git a/src/projectzombie/input/CursorPosCallback.java b/src/projectzombie/input/CursorPosCallback.java index 9a5eb97..ef6f295 100755 --- a/src/projectzombie/input/CursorPosCallback.java +++ b/src/projectzombie/input/CursorPosCallback.java @@ -3,8 +3,8 @@ package projectzombie.input; import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFWCursorPosCallbackI; -import projectzombie.Main; import gl_engine.vec.Vec2d; +import projectzombie.Main; public class CursorPosCallback implements GLFWCursorPosCallbackI { diff --git a/src/projectzombie/input/KeyCallback.java b/src/projectzombie/input/KeyCallback.java index 691907c..d96281c 100755 --- a/src/projectzombie/input/KeyCallback.java +++ b/src/projectzombie/input/KeyCallback.java @@ -25,10 +25,10 @@ import static projectzombie.input.GameInput.move_last; import org.lwjgl.glfw.GLFWKeyCallbackI; +import gl_engine.vec.Vec2d; import mainloop.task.IMainloopTask; import projectzombie.Main; import projectzombie.input.types.Input; -import gl_engine.vec.Vec2d; public class KeyCallback implements GLFWKeyCallbackI, IMainloopTask { @@ -165,11 +165,11 @@ public class KeyCallback implements GLFWKeyCallbackI, IMainloopTask } if(moveLeft) { - move_point.y -= 1; + move_point.y += 1; } if(moveRight) { - move_point.y += 1; + move_point.y -= 1; } if(move_point.x != 0 || move_point.y != 0) { diff --git a/src/projectzombie/input/types/InputGUI.java b/src/projectzombie/input/types/InputGUI.java index d651a8b..40df85a 100755 --- a/src/projectzombie/input/types/InputGUI.java +++ b/src/projectzombie/input/types/InputGUI.java @@ -1,7 +1,7 @@ package projectzombie.input.types; -import projectzombie.menu.gui.GUI; import gl_engine.vec.Vec2d; +import projectzombie.menu.gui.GUI; public class InputGUI implements Input { diff --git a/src/projectzombie/input/types/InputGame.java b/src/projectzombie/input/types/InputGame.java index 207bf1a..8d24d8f 100755 --- a/src/projectzombie/input/types/InputGame.java +++ b/src/projectzombie/input/types/InputGame.java @@ -1,9 +1,9 @@ package projectzombie.input.types; -import projectzombie.Main; -import projectzombie.menu.MenuGamePause; import gl_engine.MathHelpers; import gl_engine.vec.Vec2d; +import projectzombie.Main; +import projectzombie.menu.MenuGamePause; import projectzombie.world.chunk.ChunkEventHandler; public class InputGame implements Input @@ -40,7 +40,7 @@ public class InputGame implements Input @Override public void camera(boolean state, double amount) { - Main.player.angle += amount; + Main.player.angle -= amount; } @Override diff --git a/src/projectzombie/items/Item.java b/src/projectzombie/items/Item.java index c3071bc..07890d1 100755 --- a/src/projectzombie/items/Item.java +++ b/src/projectzombie/items/Item.java @@ -4,17 +4,13 @@ import projectzombie.entity.Entity; import projectzombie.entity.EntityInventory; import projectzombie.entity.player.EntityPlayer; import projectzombie.inventory.Inventory; -import projectzombie.model.Model; -import projectzombie.util.gl.GlHelpers; -import projectzombie.util.gl.texture.TextureReference; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; -import gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; public abstract class Item { - public TextureReference texture; public int id; public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { @@ -29,7 +25,7 @@ public abstract class Item return 0; } - public abstract Model getModel(short meta); + public abstract ModelItem getModel(short meta); public void onPickedUp(ItemStack stack, Layer layer, Chunk chunk, Entity entity) { diff --git a/src/projectzombie/items/ItemAmmo.java b/src/projectzombie/items/ItemAmmo.java index 9b43217..c4b023b 100755 --- a/src/projectzombie/items/ItemAmmo.java +++ b/src/projectzombie/items/ItemAmmo.java @@ -3,7 +3,7 @@ package projectzombie.items; import projectzombie.entity.Entity; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,7 +12,7 @@ public class ItemAmmo extends Item { @Override - public Model getModel(short meta) { + public ModelItem getModel(short meta) { return Models.ITEM_AMMO_BOX; } diff --git a/src/projectzombie/items/ItemDefenceUpgrade.java b/src/projectzombie/items/ItemDefenceUpgrade.java index fab0996..27e14e6 100755 --- a/src/projectzombie/items/ItemDefenceUpgrade.java +++ b/src/projectzombie/items/ItemDefenceUpgrade.java @@ -3,7 +3,7 @@ package projectzombie.items; import projectzombie.Main; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,7 +12,7 @@ public class ItemDefenceUpgrade extends Item { @Override - public Model getModel(short meta) { + public ModelItem getModel(short meta) { return Models.ITEM_DEFENCE_UPGRADE; } diff --git a/src/projectzombie/items/ItemEmpty.java b/src/projectzombie/items/ItemEmpty.java index 285a6ed..6fa2c31 100755 --- a/src/projectzombie/items/ItemEmpty.java +++ b/src/projectzombie/items/ItemEmpty.java @@ -2,9 +2,9 @@ package projectzombie.items; import projectzombie.entity.Entity; import projectzombie.entity.player.EntityPlayer; -import projectzombie.model.Model; +import projectzombie.init.Models; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; -import gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -23,8 +23,8 @@ public class ItemEmpty extends Item } @Override - public Model getModel(short meta) { - return null; + public ModelItem getModel(short meta) { + return Models.ITEM_EMPTY; } } diff --git a/src/projectzombie/items/ItemFlare.java b/src/projectzombie/items/ItemFlare.java index 24cc6fa..9e7f553 100755 --- a/src/projectzombie/items/ItemFlare.java +++ b/src/projectzombie/items/ItemFlare.java @@ -3,7 +3,7 @@ package projectzombie.items; import projectzombie.entity.EntityFlare; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,8 +12,8 @@ public class ItemFlare extends Item { @Override - public Model getModel(short meta) { - return Models.ENTITY_FLARE; + public ModelItem getModel(short meta) { + return Models.ITEM_FLARE; } @Override diff --git a/src/projectzombie/items/ItemGrapplingHook.java b/src/projectzombie/items/ItemGrapplingHook.java index 16df8da..e7bc0db 100755 --- a/src/projectzombie/items/ItemGrapplingHook.java +++ b/src/projectzombie/items/ItemGrapplingHook.java @@ -1,12 +1,12 @@ package projectzombie.items; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2d; import projectzombie.entity.EntityGrapplingHook; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; -import gl_engine.MathHelpers; -import gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -14,7 +14,7 @@ public class ItemGrapplingHook extends Item { @Override - public Model getModel(short meta) { + public ModelItem getModel(short meta) { return Models.ITEM_GRAPPLING_HOOK; } @@ -28,7 +28,7 @@ public class ItemGrapplingHook extends Item super.onPlayerAction(stack, layer, chunk, player); Vec2d pos = player.pos.add(MathHelpers.moveTowards2(0.01, Math.toRadians(player.angle))); - layer.spawnEntity(new EntityGrapplingHook(pos, stack.meta, player)); + layer.spawnEntity(new EntityGrapplingHook(new Vec2d(pos.x, pos.y), stack.meta, player)); } } diff --git a/src/projectzombie/items/ItemGunUpgrade.java b/src/projectzombie/items/ItemGunUpgrade.java index 6028f13..174cb5e 100755 --- a/src/projectzombie/items/ItemGunUpgrade.java +++ b/src/projectzombie/items/ItemGunUpgrade.java @@ -3,7 +3,7 @@ package projectzombie.items; import projectzombie.Main; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,7 +12,7 @@ public class ItemGunUpgrade extends Item { @Override - public Model getModel(short meta) { + public ModelItem getModel(short meta) { return Models.ITEM_GUN_UPGRADE; } diff --git a/src/projectzombie/items/ItemHealthPotion.java b/src/projectzombie/items/ItemHealthPotion.java index 6abdf73..89597c5 100755 --- a/src/projectzombie/items/ItemHealthPotion.java +++ b/src/projectzombie/items/ItemHealthPotion.java @@ -2,7 +2,7 @@ package projectzombie.items; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -11,7 +11,7 @@ public class ItemHealthPotion extends Item { @Override - public Model getModel(short meta) { + public ModelItem getModel(short meta) { return Models.ITEM_HEALTH_POTION; } diff --git a/src/projectzombie/items/ItemLantern.java b/src/projectzombie/items/ItemLantern.java index 8dc3175..4d4f218 100755 --- a/src/projectzombie/items/ItemLantern.java +++ b/src/projectzombie/items/ItemLantern.java @@ -1,12 +1,12 @@ package projectzombie.items; +import gl_engine.MathHelpers; +import gl_engine.vec.Vec2i; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; import projectzombie.init.Tiles; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; -import gl_engine.MathHelpers; -import gl_engine.vec.Vec2i; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -14,8 +14,8 @@ public class ItemLantern extends Item { @Override - public Model getModel(short meta) { - return Models.TILE_LANTERN; + public ModelItem getModel(short meta) { + return Models.ITEM_LANTERN; } @Override diff --git a/src/projectzombie/items/ItemRock.java b/src/projectzombie/items/ItemRock.java index 7727bde..3acc59b 100755 --- a/src/projectzombie/items/ItemRock.java +++ b/src/projectzombie/items/ItemRock.java @@ -2,7 +2,7 @@ package projectzombie.items; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -11,7 +11,7 @@ public class ItemRock extends Item { @Override - public Model getModel(short meta) { + public ModelItem getModel(short meta) { return Models.ITEM_ROCK; } diff --git a/src/projectzombie/items/ItemSpawn.java b/src/projectzombie/items/ItemSpawn.java index 4a824eb..e11f622 100755 --- a/src/projectzombie/items/ItemSpawn.java +++ b/src/projectzombie/items/ItemSpawn.java @@ -1,8 +1,8 @@ package projectzombie.items; +import gl_engine.vec.Vec2d; import projectzombie.entity.player.EntityPlayer; import projectzombie.util.math.ItemStack; -import gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,7 +12,7 @@ public abstract class ItemSpawn extends Item public void onPlayerAction(ItemStack stack, Layer layer, Chunk chunk, EntityPlayer player) { super.onPlayerAction(stack, layer, chunk, player); - this.spawnEntity(layer, chunk, player.pos.copy()); + this.spawnEntity(layer, chunk, player.pos); } public void spawnEntity(Layer layer, Chunk chunk, Vec2d pos) { diff --git a/src/projectzombie/items/ItemTnt.java b/src/projectzombie/items/ItemTnt.java index ce9332c..c677330 100755 --- a/src/projectzombie/items/ItemTnt.java +++ b/src/projectzombie/items/ItemTnt.java @@ -3,7 +3,7 @@ package projectzombie.items; import projectzombie.entity.EntityTnt; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Models; -import projectzombie.model.Model; +import projectzombie.model.ModelItem; import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -11,8 +11,8 @@ import projectzombie.world.layer.Layer; public class ItemTnt extends Item { @Override - public Model getModel(short meta) { - return Models.ENTITY_TNT; + public ModelItem getModel(short meta) { + return Models.ITEM_TNT; } @Override diff --git a/src/projectzombie/items/spawner/ItemSpawnDummy.java b/src/projectzombie/items/spawner/ItemSpawnDummy.java new file mode 100644 index 0000000..3b734f5 --- /dev/null +++ b/src/projectzombie/items/spawner/ItemSpawnDummy.java @@ -0,0 +1,24 @@ +package projectzombie.items.spawner; + +import gl_engine.vec.Vec2d; +import projectzombie.entity.EntityDummy; +import projectzombie.init.Models; +import projectzombie.items.ItemSpawn; +import projectzombie.model.ModelItem; +import projectzombie.world.chunk.Chunk; +import projectzombie.world.layer.Layer; + +public class ItemSpawnDummy extends ItemSpawn +{ + + @Override + public ModelItem getModel(short meta) { + return Models.ITEM_SPAWN_DUMMY; + } + + @Override + public void spawnEntity(Layer layer, Chunk chunk, Vec2d pos) { + chunk.spawnEntity(new EntityDummy(new Vec2d(pos.x, pos.y))); + } + +} diff --git a/src/projectzombie/items/spawner/ItemSpawnZombie.java b/src/projectzombie/items/spawner/ItemSpawnZombie.java index 8d3a8cb..a48a28d 100755 --- a/src/projectzombie/items/spawner/ItemSpawnZombie.java +++ b/src/projectzombie/items/spawner/ItemSpawnZombie.java @@ -1,10 +1,10 @@ package projectzombie.items.spawner; +import gl_engine.vec.Vec2d; import projectzombie.entity.EntityZombie; import projectzombie.init.Models; import projectzombie.items.ItemSpawn; -import projectzombie.model.Model; -import gl_engine.vec.Vec2d; +import projectzombie.model.ModelItem; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,13 +12,13 @@ public class ItemSpawnZombie extends ItemSpawn { @Override - public Model getModel(short meta) { - return Models.ENTITY_ZOMBIE_B; + public ModelItem getModel(short meta) { + return Models.ITEM_SPAWN_ZOMBIE; } @Override public void spawnEntity(Layer layer, Chunk chunk, Vec2d pos) { - chunk.spawnEntity(new EntityZombie(pos)); + chunk.spawnEntity(new EntityZombie(new Vec2d(pos.x, pos.y))); } } diff --git a/src/projectzombie/menu/MenuGamePause.java b/src/projectzombie/menu/MenuGamePause.java index 44453c0..cbfc318 100755 --- a/src/projectzombie/menu/MenuGamePause.java +++ b/src/projectzombie/menu/MenuGamePause.java @@ -3,11 +3,9 @@ package projectzombie.menu; import java.io.FileOutputStream; import java.util.zip.DeflaterOutputStream; -import bdf.types.BdfIndent; import bdf.types.BdfObject; import projectzombie.Main; import projectzombie.input.types.InputGUI; -import projectzombie.menu.gui.Button; import projectzombie.menu.gui.ButtonGroup; import projectzombie.menu.gui.GUI; import projectzombie.menu.gui.components.ButtonBasic; diff --git a/src/projectzombie/menu/MenuSettings.java b/src/projectzombie/menu/MenuSettings.java index 4a0cfc4..3ea8b20 100755 --- a/src/projectzombie/menu/MenuSettings.java +++ b/src/projectzombie/menu/MenuSettings.java @@ -1,5 +1,6 @@ package projectzombie.menu; +import gl_engine.vec.Vec2d; import projectzombie.Main; import projectzombie.display.DisplayRenderUI; import projectzombie.entity.EntityParticle; @@ -13,8 +14,6 @@ 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 gl_engine.vec.Vec2d; import projectzombie.world.chunk.Chunk; public class MenuSettings extends Menu @@ -22,10 +21,8 @@ public class MenuSettings extends Menu private GUI gui; private Menu menuOld; - private String qualitySettingToString(SettingQuality sq) { - return sq == SettingQuality.OFF ? "Off" : - sq == SettingQuality.FAST ? "Fast" : - sq == SettingQuality.FANCY ? "Fancy" : null; + private String qualitySettingToString(boolean status) { + return status ? "On" : "Off"; } public MenuSettings(Menu menuOld) { @@ -55,8 +52,8 @@ public class MenuSettings extends Menu group.add(new ButtonSetting("Render Distance: "+Chunk.RENDER_DISTANCE, button -> { Chunk.RENDER_DISTANCE += 1; - if(Chunk.RENDER_DISTANCE > 5) { - Chunk.RENDER_DISTANCE = 1; + if(Chunk.RENDER_DISTANCE > 8) { + Chunk.RENDER_DISTANCE = 2; } button.setText("Render Distance: "+Chunk.RENDER_DISTANCE); })); @@ -69,32 +66,10 @@ public class MenuSettings extends Menu button.setText("GUI Scale: " + DisplayRenderUI.guiScale); })); - group.add(new ButtonSetting("Particles: " + qualitySettingToString(EntityParticle.MODE), button -> { - - switch(EntityParticle.MODE) { - - case OFF: { - EntityParticle.MODE = SettingQuality.FAST; - break; - } - - case FAST: { - EntityParticle.MODE = SettingQuality.FANCY; - break; - } - - case FANCY: { - EntityParticle.MODE = SettingQuality.OFF; - break; - } - - default: { - break; - } - - } - - button.setText("Particles: " + qualitySettingToString(EntityParticle.MODE)); + group.add(new ButtonSetting("Particles: " + qualitySettingToString(EntityParticle.DISABLED), button -> + { + EntityParticle.DISABLED = !EntityParticle.DISABLED; + button.setText("Particles: " + qualitySettingToString(EntityParticle.DISABLED)); })); /*group.add(new ButtonSetting("Dynamic Lighting: " + (LightingManager.lightingMode == 0 ? "Fast" : "Fancy"), diff --git a/src/projectzombie/menu/gui/Button.java b/src/projectzombie/menu/gui/Button.java index d6625c7..4bc71a0 100755 --- a/src/projectzombie/menu/gui/Button.java +++ b/src/projectzombie/menu/gui/Button.java @@ -1,14 +1,13 @@ package projectzombie.menu.gui; +import gl_engine.matrix.Matrix4; +import gl_engine.vec.Vec2d; import projectzombie.Main; import projectzombie.init.Models; import projectzombie.input.InputMode; import projectzombie.model.Model; import projectzombie.text.Text; import projectzombie.util.gl.GlHelpers; -import projectzombie.util.gl.texture.TextureReference; -import gl_engine.matrix.Matrix4; -import gl_engine.vec.Vec2d; public class Button implements GUIComponent, GUISelectable { @@ -74,6 +73,7 @@ public class Button implements GUIComponent, GUISelectable Matrix4 matrix = Matrix4.translate(pos.x, pos.y, 0); model.bind(); + model.render(); if(mouseHover) { //GlHelpers.color3(0.8, 0.8, 0.8); diff --git a/src/projectzombie/menu/gui/Label.java b/src/projectzombie/menu/gui/Label.java index 007a0d4..c207dda 100755 --- a/src/projectzombie/menu/gui/Label.java +++ b/src/projectzombie/menu/gui/Label.java @@ -1,9 +1,9 @@ package projectzombie.menu.gui; -import projectzombie.text.Text; -import projectzombie.util.gl.GlHelpers; import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; +import projectzombie.text.Text; +import projectzombie.util.gl.GlHelpers; public class Label implements GUIComponent { @@ -35,18 +35,6 @@ public class Label implements GUIComponent @Override public void render(Vec2d mousePos) { - double a = GlHelpers.getAspectRatio(); - GlHelpers.pushMatrix(); - GlHelpers.color3(color.x, color.y, color.z); - GlHelpers.translate2(pos.x / a, pos.y - size.y / 2); - if(this.alignment == Alignment.CENTRE) { - GlHelpers.translate2(-size.y * text.length() / 2 / a, 0); - } - if(this.alignment == Alignment.RIGHT) { - GlHelpers.translate2(-size.y * text.length() / a, 0); - } - Text.render(text, size); - GlHelpers.popMatrix(); } @Override diff --git a/src/projectzombie/menu/gui/Overlay.java b/src/projectzombie/menu/gui/Overlay.java index d8ea450..7dd31a9 100755 --- a/src/projectzombie/menu/gui/Overlay.java +++ b/src/projectzombie/menu/gui/Overlay.java @@ -1,9 +1,9 @@ package projectzombie.menu.gui; -import projectzombie.util.gl.GlHelpers; 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 { @@ -19,17 +19,6 @@ public class Overlay implements GUIComponent @Override public void render(Vec2d mousePos) { - int s = GlHelpers.getScale(); - GlHelpers.disableTexture2d(); - GlHelpers.color4(color.x, color.y, color.z, color.m); - GlHelpers.begin(); - GlHelpers.vertex3(-s, -s, 0); - GlHelpers.vertex3(-s, s, 0); - GlHelpers.vertex3(s, s, 0); - GlHelpers.vertex3(s, -s, 0); - GlHelpers.end(); - GlHelpers.color4(1, 1, 1, 1); - GlHelpers.enableTexture2d(); } @Override diff --git a/src/projectzombie/menu/gui/components/ButtonBasic.java b/src/projectzombie/menu/gui/components/ButtonBasic.java index 25b8313..b054662 100755 --- a/src/projectzombie/menu/gui/components/ButtonBasic.java +++ b/src/projectzombie/menu/gui/components/ButtonBasic.java @@ -1,7 +1,7 @@ package projectzombie.menu.gui.components; -import projectzombie.menu.gui.Button; import gl_engine.vec.Vec2d; +import projectzombie.menu.gui.Button; public class ButtonBasic extends Button { diff --git a/src/projectzombie/menu/gui/components/ButtonGroupPause.java b/src/projectzombie/menu/gui/components/ButtonGroupPause.java index 001a0e5..6d0bd87 100755 --- a/src/projectzombie/menu/gui/components/ButtonGroupPause.java +++ b/src/projectzombie/menu/gui/components/ButtonGroupPause.java @@ -1,10 +1,9 @@ package projectzombie.menu.gui.components; +import gl_engine.vec.Vec2d; import projectzombie.Main; -import projectzombie.menu.MenuMain; import projectzombie.menu.MenuSettings; import projectzombie.menu.gui.ButtonGroup; -import gl_engine.vec.Vec2d; public class ButtonGroupPause extends ButtonGroup { diff --git a/src/projectzombie/menu/gui/components/ButtonSetting.java b/src/projectzombie/menu/gui/components/ButtonSetting.java index 13be1e6..f63cd04 100755 --- a/src/projectzombie/menu/gui/components/ButtonSetting.java +++ b/src/projectzombie/menu/gui/components/ButtonSetting.java @@ -1,8 +1,8 @@ package projectzombie.menu.gui.components; +import gl_engine.vec.Vec2d; import projectzombie.menu.gui.Alignment; import projectzombie.settings.Settings; -import gl_engine.vec.Vec2d; public class ButtonSetting extends ButtonBasic { diff --git a/src/projectzombie/menu/gui/components/LabelMain.java b/src/projectzombie/menu/gui/components/LabelMain.java index 67a5197..f56ff62 100755 --- a/src/projectzombie/menu/gui/components/LabelMain.java +++ b/src/projectzombie/menu/gui/components/LabelMain.java @@ -1,7 +1,7 @@ package projectzombie.menu.gui.components; -import projectzombie.menu.gui.Label; import gl_engine.vec.Vec2d; +import projectzombie.menu.gui.Label; public class LabelMain extends Label { diff --git a/src/projectzombie/menu/gui/components/LabelPause.java b/src/projectzombie/menu/gui/components/LabelPause.java index 1bf2cec..6683c57 100755 --- a/src/projectzombie/menu/gui/components/LabelPause.java +++ b/src/projectzombie/menu/gui/components/LabelPause.java @@ -1,7 +1,7 @@ package projectzombie.menu.gui.components; -import projectzombie.menu.gui.Label; import gl_engine.vec.Vec2d; +import projectzombie.menu.gui.Label; public class LabelPause extends Label { diff --git a/src/projectzombie/menu/gui/components/OverlayBackground.java b/src/projectzombie/menu/gui/components/OverlayBackground.java index f1449ed..a66d130 100755 --- a/src/projectzombie/menu/gui/components/OverlayBackground.java +++ b/src/projectzombie/menu/gui/components/OverlayBackground.java @@ -1,7 +1,7 @@ package projectzombie.menu.gui.components; -import projectzombie.menu.gui.Overlay; import gl_engine.vec.Vec4d; +import projectzombie.menu.gui.Overlay; public class OverlayBackground extends Overlay { diff --git a/src/projectzombie/model/Model.java b/src/projectzombie/model/Model.java index e123695..09b287f 100644 --- a/src/projectzombie/model/Model.java +++ b/src/projectzombie/model/Model.java @@ -1,29 +1,83 @@ package projectzombie.model; +import static org.lwjgl.opengl.GL11.GL_FLOAT; +import static org.lwjgl.opengl.GL15.GL_ARRAY_BUFFER; +import static org.lwjgl.opengl.GL15.GL_STATIC_DRAW; +import static org.lwjgl.opengl.GL15.glBindBuffer; +import static org.lwjgl.opengl.GL15.glBufferData; +import static org.lwjgl.opengl.GL15.glGenBuffers; +import static org.lwjgl.opengl.GL20.glEnableVertexAttribArray; +import static org.lwjgl.opengl.GL20.glVertexAttribPointer; +import static org.lwjgl.opengl.GL30.glBindVertexArray; +import static org.lwjgl.opengl.GL30.glGenVertexArrays; + +import org.lwjgl.opengl.GL33; + import gl_engine.MathHelpers; import gl_engine.texture.TextureRef3D; -import static org.lwjgl.opengl.GL33.*; - -import org.lwjgl.opengl.GL33; - public abstract class Model { - int vao, size; + int vao, vbo; boolean loaded = false; - private static final int SIZE = 9; - private float[] verticies; - - public int getSize() { - return size; - } + public static final int SIZE = 14; // px, py, pz, tx, ty - protected abstract float[] getVerticies(); - protected abstract TextureRef3D[] getTextures(); + public abstract float[] getVerticies(); + public abstract TextureRef3D[] getTextures(); + public abstract double getHeight(); + public abstract int getSize(); - public float[] getLoadedVerticies() { - return verticies; + private TextureRef3D tex; + + private void generate() + { + float[] verticies = this.getVerticies(); + TextureRef3D[] refs = this.getTextures(); + + if(refs.length != 0) { + tex = refs[0]; + } + + if(verticies.length % SIZE != 0 || refs.length * 3 != verticies.length / SIZE) { + System.err.println("Invalid model"); + System.exit(1); + return; + } + + int size = verticies.length/SIZE; + double k = 0.001; + + for(int i=0;i_q%Cg_Zk@K7{RoppLm7gQ^d%?NC)W$UL>mFf;1v~-`HfwL> zJ(D^+`$o)@$=!9E*G}czUY}VYxz=PszHoV_z_z8^%ipxFo>R4Je!~A5?@qpC3@iyh zUexUI`D(l6C98M$W`EoFcK2z$gwu(+uQmxU^GwZ8RXJFryTJ91++&Mqr{F2xu6?G# zzK*NsL^#B!AMZ6Tf0WCo6`oMC$+JadWzurLgRYaZ*k9(Eyc5dZbXH4fu~KNg&X!Bo zx;i$0m%UuS=}>X9j%b_VF>QOZUuPGEul*kAeP&BmTX|FJ6vYIdXKwwe2`#_5R?TPJ zx8-(A%#o;o7wI!ZrOzyTqt^9&{hdvdGrCLViuCjPa_j3Qiaxw$Y}3^+Xk7dJfLfPJ z8cUF4K-%IaC+&oWz0=tyJX*v1fX$WRdVNc|()q2AQm;Rr!Xhk}Ds|9zlVpnJ^NIEs zHH$Q=U(fw+_v6J?_4&=beF2GzM-2LI%jA|^JT8!YWkyoiYQMc~y{l%KsC$Yn-{`M# ze2M1LIS-8w7x7KmXy+WfR<-nln4d(}?Q&Ag>|oVtCZvnn6+ zuH3S-{_JJ3Z9860+jeJS_T94UwfweaZ&yCo&hEaN|CS|tPsHStS0cpMuW^)qte5$W zyNBo8ff*KTj|&YNTBaSG8Cd4WR@`hnnI-fgtHR$0%Ql{rIWn&#mE;D{#2w!Y;b9c|T% zOXdlxg`8Wr@UoiMEVVh;W=sBJIaQeY9~?547pJ7_E_) z{DrYgnd2ABQNbhs_qlAEujX`2@_2H`{+rgG=hgH!`3V0|ozdQJH}y+SQ@P0x=Q-2P z_)psB`(U?$Th%1iUqRkGI#pNx%-qheI+x?{X^jh=277v#_D;RdzsTYFp^r9PB}zQ{ ziyhPteJI)vVyfhXoYMRaZE4PTSciHZvK(OZ?)@|6h` zo(L%2sG#*|MW}{TYk>BaR|!Qg#Z59jf?{M?uQxTzcZafzr^m|1usVKVK63J+=S5eq zKk-2sf{zat+TXideP=K8pRY#2XZs2ruIeaH?ckpIW|csVt9TV-kCKjI@O=NtzJ{<|L;(MUv%U% ztFwwK8#+`w1QZr`37y&?usBrts7u$k$8!H1kLyqJRtx9sk>Ot9(E8-Z!T%4+x2M(B z7aj8DI@)+n{PsTywx-<o3Kfdj*1tZh>15>Yk3V(IrjQY#1)5L6)emza? zJ>zui0|zGSNlsE`&G_}X^1iqxnGQWLimXj=Mo%0~%HvEal|aXmT4%Jk9a>GyT|=hvntB{48qePy@N(|OCyz`(%Z>FVdQ&MBb@0H}kh AsQ>@~ delta 455 zcmZqWS;I0xdGbqUx%$glOG9MdC_I|5&?-_uwD5|S$U>(TqEV#=JHK$xl9(hS?tXCV zg9pcxt{yxZ8O|Q=DDa1&u&5-cWTMdj=^{}_DhlrOmw%Tlf6uTmFm;xw6tl@)Gvk#@ zW}IH%@i4qZxk;d@kRkGodZ7mPDMmP|2gU_U zxBr#qP53qWOI38YJY((c14m1vgTFPLmQ8qYa)R&8sZA!WNrDyji}O!0|K0A8a`pAv zt^JqT6})4Y<~KAuCoFNfnQiy}-OD#`?;EfESI2O5Vo^q{NE|l<0|RG)M`SSrgPtrj!N) P0|SGntDnm{r-UW|9bM27 diff --git a/src/resources/texture/tile/water.png b/src/resources/texture/tile/water.png index 7a3f081983ca6d5164e41bb7c94c069daff0db65..b3663febdec0fcaa9992fbbde9511d90ec544cd5 100644 GIT binary patch delta 6313 zcmdlZ`oM64ay?5~RY*ihP-3}4K~a8MW=^U?No7H*LTW{38UsVct+ip%lT_4s{yZ14 zW17U!`S?RnOa6n$)(clZyC=_ho;~l<+7;`v16IAhV9RlA70K-kD=5*b`Y~!M#3$@x<~Eaw(6k9qu>D?_2cW_`}Y-pFgpl{uC6lFMh!v z+aK(Y%nuj!GcB{%wXlt@W2nDbJL~tZMcFGEE*7OD{n)7-#&I`M! zv(3WcT#s_u7RRX)YbqAFOqQ}-dzoLV!0=;|>v@}qb8|Y2o-!sKc$D{KO;BoA*9yU((?8z*0VaD z$iMfA@yFG9&eHcgL=9%}pJ`)=elxvm-b>}}Pd?~OIQ?RMu%qMiwG09W%i4@p5){NH z`Lr%F(iSW*5xDZe()$q~n@0M)f=QD-9xlk)lbhUsY2wo}t=~KL$sPlYuNoO>s3$q^f=z!*1_%j{qJ$J z8`4)UuDfm|(z)qITE@mht|ou{*<7P{Dc*E>^=gB`Qtdf!!)-dQd9=O0aA`uMsDWyZ zTUz;N9{po3YG-@-bQ89&ulMoW@G!bgfz|f%n?AmcDSfW5432R43ohBtV48k?!`0c2cdn{*^m6@A*bWz93w;N_zblJXhkw0qI>$rRQ!yQWxNPc~yy}WPLYPL_W zyhP2bT6o#JJGkbvud!|J4Xt6UHfZx#m>|ueVUXIQeB3H%#V?Bq$CnDMe5_QToDi)N zW3Ri&L3hQi4pEWd2b)Z8G-%5HJu&I=op6K0?aYOzZ|5>_*Bs3j>$Y}~IlM{V`^lv1 zJG6vSr%&vZ{kfrGHgCJr^>69DXXk|f@D{yrsC`|>Hu*5^<%>2mvc#}8G081s%DvJh z%fR>0&fVMb+>_de$}Ba^a?53pv&_$a$Qf^zQY;s~srU3mMHwXriMIROvRtEF-YPtr zu+S<}K(z3RmdHY<6{1n420Op-&oY@9FH>JPT_oyA#qmP^_qFd&-z{(0AD6c3rXk;o zS*c5e3Kb{EiZ-o(;WQ&n{+DXntKvm7TAu&d)!zTU+;HC0*zeCdv@Ity+BH^8d)el? z$I)hQ=F2(XJC)aHXdZcfB$+LC!jFlsH=WL(!_D`*GVO@R@@JjON1PV+J~c~obyl6H z)Tgz|t^Vh~p3_{e46MdeiTc)P2yDa6#)E&{p!DzHfV<8W>;Vsi3pCvDB z-aV8r`lGZnrD*Db6B`@2LOlB9|M1s+zjnsoZ-?hXiwi%KZp$k>6o_YB$@%^J#x`kn zhX;~7E=B$GlAZBWW$(31i`*UFn-vt^z4XNPK@qz|%_UW5@1i9Py7hMad*)v>Pi<_B zUXXtFZS-fE<@^q_s;2H?stySxaLp zRd4zo6`daZQ}pNNpT3?`wdHm4QzECw>a`a$Ubw3+FEvA!ukqm;yA2V$L!EgVj$MBL z)ZyP#`~RmyT8>p-+xmFDy!jq3(e>h{wPtfT+Gm_hTXEu}c>`lr^z|$CuU-^8HROwH z*KJ>O^ZU$L@s)EfEN$s32-Zw%3wCVKbKO$N#I#;a^!L4rH&%8sRsZ(YrbJf07Xt95rTC#m#+b@wl&JKwhZwEZ}*;o;S44XFmoGXpC#svl42@xA`ob%%Y*x7sIP7b&h- zP=C*|ZhuU2+M8c3s}dyKo^9;?VmX;-n%#%I-L4H8GfnRJy$>~LKK{+&smwXft>r1r z*MwsI{%pBDQSe_$we!;!Gc9iYoa)2*yZUzTdbDiaM=cfONsgzU`pG0cI=}v%2V1O3 z-1^p(MrWfrP3xSG?(0`+wwoS3D~OH7r(l&$+0K}HsRz%G`#f!FU$@x5%|C6;sssDF z7j%Um>}D$1&X@Cz?SNwH8J_j0{wiMF;qX{A-umG(!AY8y&ZlPfFdRDHzjBSLpw#l3 zokIWW?gv`-ho5q--+uRF-RzT+ECHc=w7A#bx%PB+iDr?<%zC>tsrYFhc7^?#bHRRH zcumIl88-`lvn;NU=|8R~FMs!#X4;0A*85gy-O9LgRrKHAg-_M4RHz?G;gDRxW^m%6L#(?}ww%22P1b6Yf`uzfNXv}3T4HyunObdna6vluj7-v_|J!D-j<{gq z=pWh8(DC8yCo8d#xDU^DUL+sO{OPQ}@xcY@s&h?x%U4HEICEhl>+kv-k6i)+c_Myy z-Qt`o9A_%(_wcMF_oT)?ogY<^pBLVJ?DAsL!>ccXep-IvG=BVW!n_R&-YQ#dVn}$( zd{f9Nv034%#;Ov{!inTfu~OGlPq)}@(e2wb@rvCBj$cz)wJMf> zDBJjGSsBNMw?=FnPH(3wc+Ee3@qN9RlU?G$Vf-c5*=E6&b5k5owawe~;BbqcLC=hb z&yPRXi3sbOw<$qZYtv2P*aur}l+ArBjy0J{S#5eyf4!{#`k^M*35)eQ!lo6>@0s#h zSnSW+!sc5A_ss1!yjC_;ue)2GYTq+4=V?<~@&&H>5g&d(mHMCeog=#9uF0M(Ee1J0 z+wZa6PkjQ8R{94lZdKPYVE+F$>8N<`@ijW}f{GUHs*CyL1QlmpT(M!@{7nzmtqTxc z*z0D#K_S{QoVnh`)=zdpinjklP3~{CN0!gAWLWK0xi{m4#QO6kj1Ff~t>q&(^v?_x z{jgkT#T@pEW!zfncjT2Gx`>;^?aXGGn{@E(0`5(zJ!kZsY!5cYZMEAPuCoKxn}`BAs~;Q!;(%g;v?yb!A2`9RQ3tY&wF=)}@< zO%L>{TPCtL5-3*7JYfm5}22mPu*DTcO`Km|Iz2 z-&%P68Eb^&on2M4%wIfz!m7o$anl61*oE^CGaX#fq@?8D|8RXOqk~(0U-#?63!+uJ z+>351>^rUbC+~u2T^H*#-dBej%wKo4J1af)5jx758eF=e-}aXfw;bQou&U5Q3FnMk zed6`AzX);H-N@@^KQ1uwQ?tz9RtCFSXE!~F&(CLYcFEkc;dMKI*M}Qh|7>{uF<LjjXZrSI!BtKEMCIPW?r1oes%c95bf2PUTsiy1pc89Ljk(18~ zw65GsesXY%dJ@}mD;bvymSR`@IwiN&wohI(QR@AQx!TuHpPILzKi2&*>++}0X=N#n z^-|~ddb^!Dwyobid(WyV`|WZrc!T+q*@732`q_=F{)gJ?;V+wRu@~tHo>g?st3A4k>&4bx3Vgd1EHd^imn~_n z>(gua6tiMl_bZoE=Sq6@3YcZjp{F$WnSU>qWH+l`eRM0Pd(Ej z*aRcOyxw-{H8|y*mC$;(+2+v7;}`TKr#jt!zSDO-biG^ZZn@yW3qs*jf{dQ8j@a>_|T5;NH}GP}nBsWRsqx)hj0Hx=p^{If8XMEFa1qs=Yp~ zv|$5JW9$AtR))GOtm|hv%r{Cq^!AaJSOdr@V3~W3L0rov!|aG+f#MR zLPAIIQRKY`?^nH=A%3G_YixMmK8dOp*AGWxs>JlaspMa{s2s9t^4z4SEbGf;R%R@= zJt_C~in7nkrvBX1>$DZ8tP;sAe`L6)YXV#Uh5FRw;%mwbZ<3FkRR7SUlQH?B|K}#l z*bN_+N>zT}@l=gvpVdjZuTuR2#crV$nMO5TwCIUG@lEaj zC)K~9f8wrhlWkk#E-SBbb~Ty(M)8YOzXDTi&t%({eNP1U)!#{ATdk;XabEh1YX673 zMZJ-Zf2)-0tH0dOmy3HND0gd`vx(20&2KKoUsk?yZsWRBCI`OhR9~51)iTA{uXM)w z%6Yc0yyYC*1U4?IIA6_S|BN+wvsDoztCf0?$Vlgokq^-0W!9i)eL9 zQ@1%S_jL~IO`fZpO0=K%)mu*z&IqoWX8Y^Cy!rWv4;F8(rRu*qxzmSJui4pUUP}M3 z{P;UU#&`5uZZF%gKxbJ?d8?OSt3gO=u1QnzlAJ$JugY2-Wn#{HpOJiXYe_`s?9MkA z{m;r?+jr#A)Zkqy2~TVG&3d6&qG$a@%e5qGr<~^P6!n$GIzJv39#75=Ib2--Fht$j zbM9%r{nnp3mhXCCQvKz6O1u0w_Bj@LuRrKiU&-F&ynbG30VrZ8%a*O&v9(;-wk2+| ztd$_o!|%ejE$ip*nIUVo(1&H`!$Whw3H-WLbI@*@;1y?k+wCigcO~3U|1~G`aX_!t z+&79Pe&T;N-Ji^JtyH4qQ3?OT;$06)>o;rY9xHfPdv3CA%m2KsbFQ-1di{~9&Rf-W zO4Ppap7W0xGq19G%ST+F=iJje`R2T@0#?hp`3w(j44#y@352C7wa%zZ6bcbCt9wu8p9s!i=5(rhlXmX{v&-z~dZpd)PB#uLG@ z230)u_S41JIQu@H`g_~b!hLT94{erndLF@W)Ia>y%DvMh_bL|KewDB~-gHaba{BG* zlcsKr5|z8P+_vT1#)Rw3AG7*MoU<&_`(XK1qOOnirq`}#Asb>sW^q_tR<~_ASJk3* zf&cV$MSH6yET6VazH(FU;3<}$FWxPd>@C*O{=TIBg121#!Ije#{ZCzvtggN0`D%~* zhGd(ZDfwUO7ES(g+Td)He0lV~IGwJYQ;e$aF8{M;@|WV94`(0!WYN_(^-AmfXj79yWWH^pc4FI*92-K{tJsWc*PZOJ@Yzi-IE1p&Z)m}jZOFrYJyd*blL>V%3((|ht+lEl8r9S?KA9B+gDkXGB52~cVT)}%Q5RF;dir) zPCRaZe&FN-alNk`zxVB_x}chTS+e%o3U0APiG@3^D2Mn>l#KnbQJ48))k^mh&ikq| z?GB!=Z2A9p$3x${8@T52Z2rtyZ*{zBd$;K82XQsqJ@vnGv`@LYFMm3u$rU0&+<(cs7Ne(|)aUxJpui0wQOCZ0C6q>uG|d-?1jGpYE9 z4gSXzm#J4apWB%5_VCBr*7j}BCkRzu8J)P{g@wD60ri{p(w3$<${>Z!R ze1Gc9x88FfMTB)uxu*W&@}7hCWtE$P{}_ebxz-p{e{Z&|&+*T10-rzQzNeF&v}v;V zlH5)07c|A*?CR^!^`CElb>-CXZGVsOd=}x(idWijYUiXUsU9bPRGCh+ombwa`j7L+ z!@1$IQ)WrG%{jhjVOgs6hvKA)?j6YM<-mwn~GWn(b-p0>?U{3 zj8`t1ae95n!tgH&Jq#`?DQS|MCrxR~ue}?rel>Q^`A_eEZ~k?q>1acPhs|N0%W84z z^X_foJ@@-aVA!8y6fS!u?_M*@>JUODK+zIoG1L4U#H zA->D&e>$B@p88oVeQi|o+Uif@Zd|`U30=?RRc>X~aazR+4p>yVZP;;H+@V)zSO%KDu*aea0bKWN(&z#3_ zF#Um7{%>#b$*Xc_OrfVjz*Mewi+jgz+-skhrm}UHwfHS*j}NUczp`X` zuCD*JrE2H>zp4Mj4{i*4xDa+xa-w4{K^q27nna<%ld zR-+>g%yQ=1b`jTejvx8@B2(mBqSM@hOBP8?qV3GTEEKg_Wo#nCa@==(QWoFcslQvA zZ}p_-yAMphJZXAzf4@Lbiae7u&zh}HVyZe_P2#&d4;^gOS}JT8mwTh#!>3bR*CtMX zhorE3sAuD1y(!-I3*K@B`|O$L=2tKMbVq;_3;X9wTnhttys&XEJ$aJp#_5`ko7`$z zeBV}ViMsU5<+RFM8 zE7n-9dAOkE^D;M?nhlzroO<7EYdbuitJ~%0e-OMEf8FM7`IJX5oRfkbt({&!{Av)y zS^sB4^V;uwHs@q;IlglGk+D;4X$!O8=`QK_l1UFT&6z&GGD|%gp4-ll+~Xs7ifN08 zqS}u|yBqaBZixGk5Xt!A@x9MA_8)R?G#A$tRh)2IIGgL5XbkUy_3e$HmpwatwCnfj zrYR3L`CB~C;9AOUJAa;B;rBK7teZ5o*0PIEc)TjD{`GUO+tn|a_sCQydHs-Bx%5Gn zM+*n%k9R_1Tp=OAGQ@C%S}kh~M?FcKsIoTzBW{d-!6MU{_vuJ zSxo0UvHI1`rq{aD4a(`XFO<~E8$*k7%cg%BRX^+r}5bKK2InWrP6CuKywK1WK zb7RDYm3Qax7wO)peAY54`{48Xx4cOkA1r<<_4jz*>|95m1!COiW=n01*zol-NSVbd z(OwlX*MqL+n*v%{?#G>H4c$@s{(l{F{JuFETuX&^$T6?p^xz)Xk)(s)uP;dExheK% z^WBAF+~-#9^xCW|k>sEwW)l(CakNQ%H|JWeO}Z7fy&XrJ+*hk6ZB$SZ=w`L6H`;$J zhC9gX#r?S0^ym++<<0+ozA?Dn#4oOWB&pHLQAg~D#Kb!>1=F>UBpqB75F&F^Y)+`@ zubZX&Sk-+SBXkNHB6M!_DTr}%u~)@Bk1n{Sk+gBaSCBuyDkp7x@VB%Vq^8d>E!tuF zh3|Z;a=72=b00}Mc&|A^C!^Lyr(P_iRY8n<7SogM-?;znzrSGm;R(41)5D{WBprO5 z)*7L+;}ggn2hrFSDbWQnAk#l{Zj4xPPEm||-Z$$bNe43{7k(E@-NwrQn)O!SPq8JS zXysQB;|_7q5sN7SY2LH)*^KGg2L&AYy*BAqED%lF_@Ei&t{pdgJL-=%UE+)q*Sp;$ z;28SgX5E7|>*`YvF4OYlOk#ST#w}(Q%}`t=+|7DCwKqaXEQIc zpxAzVl`U3mQf?!&in)0Gou^zIBMe*xx>;*II*v9evW3h&y^X;^SIpx1v$BMBtcI#b zk{n|#jwBtd>*_e#+O#Hd~bWb z$^AHM(#8k3Uw7P#e6aY#*{K_Xo?f;1@MOoctEmrOUNCOE>Ms`Jd(`g0sunLt9kG~i zoPVFz9L(RkK%_lFCqv{&(!tNM4mx5-rUZ1eiZnfW*0eiDQH+}}TcDfuZH2Yq)NICv ze}A88-EMmRn{jKzg;u$Z5dq$f5jqz2`C3Pk4(4@zPCIpywS1?Oj#$TTS>=;kA8a$7 zmw(XCr&wC!dXxHc)ufFNT)BVMOwV^*tRTj1#h*$)>n_HnM}Nq< zvAEvK?##9amoFsY-@LBR@2rtO>?BOWlAMm~^9+UPL%%wm(BVteXk zszE93D^u)>)7u^_`V3O*b|mRwWw5dscO1WR(#C|~uov=tVK>Dd$XK=2a62(=j1W)) zMS_T6H>az3+$Hj5y77tqSDWrmc_#WKs^F5vk)+0c1u^ctV=eP^KI>Yn z@;;JuP{P4S%tD}>b!tO|&W}}ZFZkBa%|EE#-u~jJ<33hv{-lixh1_22Snb%he9fO{ zy+`I=US6P%SWPi&(nbZffNoYr*CR=eJ_=&oPN2lFc$Lfa)P1b#+!tn4yuSBv_Bj<( zwTg@1Wu}RSDi+u7zS;D6)xW8%icD9Im^|m&81dmS-;tz7hA8iStlX@&@lT>Z+!L(t zINJ1H&rwHA#i6M9VC*_jQ5kw9>EP=^2VJo>U(1-3t~2em{&{X|f;>~w#svo!dY|3i zu=mVkX3L!q^uj&z^md#UP1>07`fm;QPO%=tMPl5$Ryyd4`2-4fvvRX;j3~HxbZ7m9 zY)4Ha^{d-0-7B{C=i9UkbhCb+CAIfW@;27Yzf%OdS@{IIS)F-0jyCNI_%b(jA8RW! zG*5{CmfINd;oK%i9WfulE%QI=Mucy7j@>D?Meaz_!PSWlI$}EALK`DC1UdemkbiLU hW2uc17kWR$*UVpbFyvp;Ck6%v22WQ%mvv4FO#sLY