From b672a176b89c3c4287db61227348b275b21928f8 Mon Sep 17 00:00:00 2001 From: josua Date: Wed, 11 Sep 2019 14:14:03 +1000 Subject: [PATCH] Changed RGB light to a single brightness value to save resources. --- _resources/sound/gun.ogg | Bin 18849 -> 0 bytes _resources/texmap.png | Bin 57820 -> 0 bytes _resources/texmap.xcf | Bin 100887 -> 0 bytes src/shootergame/Main.java | 5 +- .../display/lighting/LightingManager.java | 83 ++++++------------ src/shootergame/entity/Entity.java | 5 +- src/shootergame/entity/EntityBullet.java | 4 +- src/shootergame/entity/EntityVertical.java | 6 +- .../entity/particle/ParticleBlood.java | 5 +- .../entity/particle/ParticleBreak.java | 6 +- .../entity/particle/ParticleSmoke.java | 5 +- .../entity/particle/ParticleWater.java | 4 +- .../entity/player/EntityPlayer.java | 14 ++- src/shootergame/input/KeyCallback.java | 11 +++ src/shootergame/tiles/LavaLightlevel.java | 16 ++++ src/shootergame/tiles/Tile.java | 9 +- src/shootergame/tiles/TileFlat.java | 2 +- src/shootergame/tiles/TileLadder.java | 7 ++ src/shootergame/tiles/TileLadderUp.java | 14 ++- src/shootergame/tiles/TileLava.java | 6 ++ src/shootergame/tiles/TileLavaFlow.java | 7 ++ src/shootergame/tiles/TilePortalDown.java | 22 ++--- src/shootergame/tiles/TileTree.java | 7 +- src/shootergame/tiles/TileVertical.java | 2 +- src/shootergame/tiles/TileWall.java | 3 +- src/shootergame/time/GameTimer.java | 28 ++++++ src/shootergame/util/math/MathHelpers.java | 12 +++ src/shootergame/util/math/TileState.java | 13 +-- src/shootergame/util/math/vec/Vec2d.java | 4 +- src/shootergame/util/math/vec/Vec2i.java | 6 +- src/shootergame/world/World.java | 4 +- src/shootergame/world/chunk/Chunk.java | 36 +++----- src/shootergame/world/chunk/ChunkEmpty.java | 13 ++- src/shootergame/world/layer/Layer.java | 9 +- .../world/layer/layergen/LayerGen.java | 3 +- .../world/layer/layergen/LayerGenCaves.java | 11 ++- .../world/layer/layergen/LayerGenEarth.java | 9 +- .../layer/layergen/LayerGenLavaCaves.java | 59 +++++++++++-- .../layer/layergen/PortalSpawnrates.java | 16 ++++ 39 files changed, 283 insertions(+), 183 deletions(-) delete mode 100644 _resources/sound/gun.ogg delete mode 100644 _resources/texmap.png delete mode 100644 _resources/texmap.xcf create mode 100644 src/shootergame/tiles/LavaLightlevel.java create mode 100644 src/shootergame/time/GameTimer.java create mode 100644 src/shootergame/world/layer/layergen/PortalSpawnrates.java diff --git a/_resources/sound/gun.ogg b/_resources/sound/gun.ogg deleted file mode 100644 index 2e43705291a79a1303c001103bc6df78fdab0ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18849 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 mce : layer.chunks) - { - if(mce.pos.squareDistance(new Vec2i((int)(player.pos.x/16), (int)(player.pos.y/16))) < r) + for(int cx=-r;cx light_tile.x) light_tile.x = ftsl.x; - if(ftsl.y > light_tile.y) light_tile.y = ftsl.y; - if(ftsl.z > light_tile.z) light_tile.z = ftsl.z; - if(btsl.x > light_tile.x) light_tile.x = btsl.x; - if(btsl.y > light_tile.y) light_tile.y = btsl.y; - if(btsl.z > light_tile.z) light_tile.z = btsl.z; + double light_tile = chunk.getLightLevel(tid); + double light_tile2 = light_tile; + double ftsl = fts.tile.getLightLevel(fts); + double btsl = fts.tile.getLightLevel(bts); + if(ftsl > light_tile) light_tile = ftsl; + if(btsl > light_tile) light_tile = btsl; // Has the light level changed; add light to this tile - if(!light_tile.equal(light_tile2)) { - addLightToTiles(layer, tpos, light_tile); + if(light_tile != light_tile2) { + addLightToTiles(layer, tpos, light_tile, true); } } } @@ -99,11 +85,11 @@ public class LightingManager addLightToTiles(layer, new Vec2i( MathHelpers.floor(player.pos.x), MathHelpers.floor(player.pos.y)), - player.getLightLevel()); + player.getLightLevel(), true); } } - private static void addLightToTiles(Layer layer, Vec2i lpos, Vec3d light) + private static void addLightToTiles(Layer layer, Vec2i lpos, double light, boolean ignoreDissipation) { // Get the light pos id int lid = lpos.getId(Chunk.CHUNK_SIZE); @@ -112,36 +98,25 @@ public class LightingManager Chunk chunk = layer.getChunk(lpos); TileState bt = chunk.getBackTile(lid); TileState ft = chunk.getFrontTile(lid); - Vec3d light_dissipation = bt.tile.getLightDissipation(bt); - Vec3d light_dissipation2 = ft.tile.getLightDissipation(ft); - if(light_dissipation2.x > light_dissipation.x) light_dissipation.x = light_dissipation2.x; - if(light_dissipation2.y > light_dissipation.y) light_dissipation.y = light_dissipation2.y; - if(light_dissipation2.z > light_dissipation.z) light_dissipation.z = light_dissipation2.z; + double light_dissipation = 0; - // Set the light dissipation - light = light.subtract(light_dissipation); - if(light.x < 0) light.x = 0; - if(light.y < 0) light.y = 0; - if(light.z < 0) light.z = 0; - - if(light.x == 0 && light.y == 0 && light.z == 0) { - return; + if(!ignoreDissipation) { + light_dissipation = MathHelpers.biggest( + bt.tile.getLightDissipation(bt), + ft.tile.getLightDissipation(ft)); } // Calculate the light level - Vec3d light_tile = chunk.getLightLevel(lid); - if( - light.x <= light_tile.x && - light.y <= light_tile.y && - light.z <= light_tile.z) { + double light_tile = chunk.getLightLevel(lid); + if(light <= light_tile) { return; } // Merge the light and the light tile values - if(light.x > light_tile.x) light_tile.x = light.x; - if(light.y > light_tile.y) light_tile.y = light.y; - if(light.z > light_tile.z) light_tile.z = light.z; - chunk.setLightLevel(light_tile, lid); + chunk.setLightLevel(light, lid); + + // Set the light dissipation + light = light - light_dissipation; // Get all the adjacent positions of the light tiles to flow onto Vec2i positions[] = { @@ -153,7 +128,7 @@ public class LightingManager // Add the light to all the adjacent positions for(Vec2i position : positions) { - addLightToTiles(layer, position, light); + addLightToTiles(layer, position, light, false); } } } diff --git a/src/shootergame/entity/Entity.java b/src/shootergame/entity/Entity.java index 6a721c8..23f6c62 100644 --- a/src/shootergame/entity/Entity.java +++ b/src/shootergame/entity/Entity.java @@ -12,7 +12,6 @@ import shootergame.util.math.MathHelpers; import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -217,7 +216,7 @@ public class Entity implements ITransparentObject return new Vec2d(0, 0); } - public Vec3d getLightLevel() { - return new Vec3d(0, 0, 0); + public double getLightLevel() { + return 0; } } diff --git a/src/shootergame/entity/EntityBullet.java b/src/shootergame/entity/EntityBullet.java index ec5dabe..071a0e3 100644 --- a/src/shootergame/entity/EntityBullet.java +++ b/src/shootergame/entity/EntityBullet.java @@ -116,9 +116,9 @@ public class EntityBullet extends EntityParticle public void render(Vec2d pos, Camera camera) { // Set the colour - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); - GlHelpers.color3(1 * light.x, 0.8 * light.y, 0.3 * light.z); + GlHelpers.color3(1 * light, 0.8 * light, 0.3 * light); // Call super super.render(pos, camera); diff --git a/src/shootergame/entity/EntityVertical.java b/src/shootergame/entity/EntityVertical.java index 569610d..3636c2d 100644 --- a/src/shootergame/entity/EntityVertical.java +++ b/src/shootergame/entity/EntityVertical.java @@ -7,7 +7,6 @@ import shootergame.util.gl.texture.TextureReference; import shootergame.util.math.MathHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; public class EntityVertical extends Entity { @@ -26,10 +25,9 @@ public class EntityVertical extends Entity @Override public void render(Vec2d pos, Camera camera) { - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); - GlHelpers.color3(light.x, light.y, light.z); + GlHelpers.color3(light, light, light); this.render(pos, camera, tex, size); - GlHelpers.color3(1, 1, 1); } } diff --git a/src/shootergame/entity/particle/ParticleBlood.java b/src/shootergame/entity/particle/ParticleBlood.java index 7309fc6..c22f57a 100644 --- a/src/shootergame/entity/particle/ParticleBlood.java +++ b/src/shootergame/entity/particle/ParticleBlood.java @@ -9,7 +9,6 @@ import shootergame.util.math.MathHelpers; import shootergame.util.math.random.RandomHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -61,12 +60,12 @@ public class ParticleBlood extends EntityParticle public void render(Vec2d pos, Camera camera) { // Get the light level - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); // Set some settings GlHelpers.pushMatrix(); - GlHelpers.color3(r_color * light.x, 0, 0); + GlHelpers.color3(r_color * light, 0, 0); GlHelpers.translate(0, 0, height); // Call super diff --git a/src/shootergame/entity/particle/ParticleBreak.java b/src/shootergame/entity/particle/ParticleBreak.java index 1640618..02a02db 100644 --- a/src/shootergame/entity/particle/ParticleBreak.java +++ b/src/shootergame/entity/particle/ParticleBreak.java @@ -11,7 +11,6 @@ import shootergame.util.math.TileState; import shootergame.util.math.random.RandomHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -69,13 +68,12 @@ public class ParticleBreak extends EntityVertical @Override public void render(Vec2d pos, Camera camera, TextureReference tex, Vec2d size) { - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); - GlHelpers.color3(light.x, light.y, light.z); + GlHelpers.color3(light, light, light); GlHelpers.pushMatrix(); GlHelpers.translate(0, 0, height); super.render(pos, camera, tex, size); - GlHelpers.color3(1, 1, 1); GlHelpers.popMatrix(); } } diff --git a/src/shootergame/entity/particle/ParticleSmoke.java b/src/shootergame/entity/particle/ParticleSmoke.java index 7da3bb9..cfbc42b 100644 --- a/src/shootergame/entity/particle/ParticleSmoke.java +++ b/src/shootergame/entity/particle/ParticleSmoke.java @@ -9,7 +9,6 @@ import shootergame.util.math.MathHelpers; import shootergame.util.math.random.RandomHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -36,9 +35,9 @@ public class ParticleSmoke extends EntityVertical if(opacity <= 0) return; GlHelpers.pushMatrix(); GlHelpers.translate(0, 0, height); - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); - GlHelpers.color4(light.x, light.y, light.z, opacity); + GlHelpers.color4(light, light, light, opacity); super.render(pos, camera); GlHelpers.color4(1, 1, 1, 1); GlHelpers.popMatrix(); diff --git a/src/shootergame/entity/particle/ParticleWater.java b/src/shootergame/entity/particle/ParticleWater.java index 7790a2f..ed623b0 100644 --- a/src/shootergame/entity/particle/ParticleWater.java +++ b/src/shootergame/entity/particle/ParticleWater.java @@ -49,9 +49,9 @@ public class ParticleWater extends EntityParticle public void render(Vec2d pos, Camera camera) { GlHelpers.pushMatrix(); GlHelpers.translate(0, 0, height); - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); - GlHelpers.color4(0, 0, light.z, 0.4); + GlHelpers.color4(0, 0, light, 0.4); super.render(pos, camera); GlHelpers.color4(1, 1, 1, 1); GlHelpers.popMatrix(); diff --git a/src/shootergame/entity/player/EntityPlayer.java b/src/shootergame/entity/player/EntityPlayer.java index d96d14a..2071eb8 100644 --- a/src/shootergame/entity/player/EntityPlayer.java +++ b/src/shootergame/entity/player/EntityPlayer.java @@ -17,7 +17,6 @@ import shootergame.util.math.ItemStack; import shootergame.util.math.MathHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -64,13 +63,15 @@ public class EntityPlayer extends EntityVertical implements EntityAlive, EntityI } @Override - public Vec3d getLightLevel() { - return new Vec3d(1, 1, 1); + public double getLightLevel() { + return 1; } @Override public void tick(Chunk chunk, Layer layer) { + Cheats.god_mode = true; + // Handle player deaths if(health <= 0) { @@ -90,9 +91,6 @@ public class EntityPlayer extends EntityVertical implements EntityAlive, EntityI // Call super super.tick(chunk, layer); - // Regen some of the players health - //this.addHealth(0.1); - // Rotate left if(MOVE_LEFT) { this.angle -= 1; @@ -157,9 +155,9 @@ public class EntityPlayer extends EntityVertical implements EntityAlive, EntityI GlHelpers.translate(0, 0, height); // Set the colour due to the lighting - Vec3d light = chunk.getLightLevel(new Vec2i( + double light = chunk.getLightLevel(new Vec2i( MathHelpers.floor(pos.x), MathHelpers.floor(pos.y))); - GlHelpers.color3(light.x, light.y, light.z); + GlHelpers.color3(light, light, light); // Moving if(MOVE_BACKWARD || MOVE_FORWARD || moving) diff --git a/src/shootergame/input/KeyCallback.java b/src/shootergame/input/KeyCallback.java index a27152b..da36414 100644 --- a/src/shootergame/input/KeyCallback.java +++ b/src/shootergame/input/KeyCallback.java @@ -114,6 +114,17 @@ public class KeyCallback implements GLFWKeyCallbackI } } + else { + itemUse_last = false; + esc_last = false; + action_last = false; + itemDrop_last = false; + Main.player.MOVE_BACKWARD = false; + Main.player.MOVE_FORWARD = false; + Main.player.MOVE_LEFT = false; + Main.player.MOVE_RIGHT = false; + } + if(key == GLFW_KEY_ESCAPE) { if(pressed) { if(!esc_last) { diff --git a/src/shootergame/tiles/LavaLightlevel.java b/src/shootergame/tiles/LavaLightlevel.java new file mode 100644 index 0000000..b74e260 --- /dev/null +++ b/src/shootergame/tiles/LavaLightlevel.java @@ -0,0 +1,16 @@ +package shootergame.tiles; + +import java.util.Random; + +import shootergame.time.GameTimer; +import shootergame.util.math.MathHelpers; +import shootergame.util.math.random.OpenSimplexNoise; + +public class LavaLightlevel +{ + static OpenSimplexNoise noise = new OpenSimplexNoise(new Random().nextLong()); + + static double getLightLevel() { + return MathHelpers.map(noise.eval(GameTimer.getTime() / 1000.0, 0), -1, 1, 0.4, 0.6); + } +} diff --git a/src/shootergame/tiles/Tile.java b/src/shootergame/tiles/Tile.java index 49e5a24..e7fab88 100644 --- a/src/shootergame/tiles/Tile.java +++ b/src/shootergame/tiles/Tile.java @@ -7,7 +7,6 @@ import shootergame.entity.Entity; import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -20,7 +19,7 @@ public class Tile implements ITransparentObject public double tileHitbox = 0; public double slowness = 0; public boolean unbreakable = false; - protected Vec3d light_dissipation = new Vec3d(1/12.0, 1/12.0, 1/12.0); + protected double light_dissipation = 1/8.0; public boolean emitsLight = true; public Tile(String id) { @@ -66,11 +65,11 @@ public class Tile implements ITransparentObject public void onActivated(Layer layer, Vec2i tpos, Entity entity, TileState state) { } - public Vec3d getLightDissipation(TileState state) { + public double getLightDissipation(TileState state) { return light_dissipation; } - public Vec3d getLightLevel(TileState state) { - return new Vec3d(0, 0, 0); + public double getLightLevel(TileState state) { + return 0; } } diff --git a/src/shootergame/tiles/TileFlat.java b/src/shootergame/tiles/TileFlat.java index 39655d5..7875f56 100644 --- a/src/shootergame/tiles/TileFlat.java +++ b/src/shootergame/tiles/TileFlat.java @@ -25,7 +25,7 @@ public class TileFlat extends Tile implements IHasTexture super.render(pos, camera, state); // Render the tile - GlHelpers.color3(state.light.x*color.x, state.light.y*color.y, state.light.z*color.z); + GlHelpers.color3(state.light * color.x, state.light * color.y, state.light * color.z); GlHelpers.begin(); tex.texCoord(1, 1); GlHelpers.vertex3(pos.x+0, pos.y+0, 0); tex.texCoord(0, 1); GlHelpers.vertex3(pos.x+1, pos.y+0, 0); diff --git a/src/shootergame/tiles/TileLadder.java b/src/shootergame/tiles/TileLadder.java index a7db05a..58d47f2 100644 --- a/src/shootergame/tiles/TileLadder.java +++ b/src/shootergame/tiles/TileLadder.java @@ -1,6 +1,7 @@ package shootergame.tiles; import shootergame.init.Textures; +import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2d; public class TileLadder extends TileVertical @@ -13,6 +14,12 @@ public class TileLadder extends TileVertical this.tileSolid = true; this.tileHitbox = 0.3; this.unbreakable = true; + this.emitsLight = true; + } + + @Override + public double getLightLevel(TileState state) { + return 0.5; } } diff --git a/src/shootergame/tiles/TileLadderUp.java b/src/shootergame/tiles/TileLadderUp.java index ced55a9..9052612 100644 --- a/src/shootergame/tiles/TileLadderUp.java +++ b/src/shootergame/tiles/TileLadderUp.java @@ -5,9 +5,11 @@ import shootergame.Main; import shootergame.entity.Entity; import shootergame.entity.player.EntityPlayer; import shootergame.init.Textures; +import shootergame.mainloop.MainloopEventHandler; import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; +import shootergame.world.chunk.ChunkEventHandler; import shootergame.world.layer.Layer; public class TileLadderUp extends TileVertical @@ -50,7 +52,7 @@ public class TileLadderUp extends TileVertical player.height += 0.04; } - if(movingPlayer == 1) { + else if(movingPlayer == 2) { player.height += 0.02; } @@ -61,9 +63,15 @@ public class TileLadderUp extends TileVertical player.height = -1; } - if(player.height >= 0 && movingPlayer == 1) + else if(movingPlayer == 1 && ChunkEventHandler.loaded) { movingPlayer = 2; + MainloopEventHandler.MAINLOOP_EVENT_HANDLER.mspf = 1000/60; + } + + else if(player.height >= 0 && movingPlayer == 2) + { + movingPlayer = 3; player.height = 0; player.moving = false; player.in_animation = false; @@ -72,7 +80,7 @@ public class TileLadderUp extends TileVertical @Override public boolean MainLoopRepeat() { - return movingPlayer != 2; + return movingPlayer != 3; } @Override diff --git a/src/shootergame/tiles/TileLava.java b/src/shootergame/tiles/TileLava.java index e24166a..04e7b9c 100644 --- a/src/shootergame/tiles/TileLava.java +++ b/src/shootergame/tiles/TileLava.java @@ -13,6 +13,7 @@ public class TileLava extends TileFlat super(id, Textures.TILE_LAVA); this.tileWalkable = false; + this.emitsLight = true; } @Override @@ -22,5 +23,10 @@ public class TileLava extends TileFlat super.render(pos, camera, state); GlHelpers.popMatrix(); } + + @Override + public double getLightLevel(TileState state) { + return LavaLightlevel.getLightLevel(); + } } diff --git a/src/shootergame/tiles/TileLavaFlow.java b/src/shootergame/tiles/TileLavaFlow.java index dc4ece5..cb0a5b2 100644 --- a/src/shootergame/tiles/TileLavaFlow.java +++ b/src/shootergame/tiles/TileLavaFlow.java @@ -11,6 +11,8 @@ public class TileLavaFlow extends TileFlat public TileLavaFlow(String id) { super(id, Textures.TILE_LAVA_FLOW); + + this.emitsLight = true; } @Override @@ -20,5 +22,10 @@ public class TileLavaFlow extends TileFlat super.render(pos, camera, state); GlHelpers.popMatrix(); } + + @Override + public double getLightLevel(TileState state) { + return LavaLightlevel.getLightLevel(); + } } diff --git a/src/shootergame/tiles/TilePortalDown.java b/src/shootergame/tiles/TilePortalDown.java index 3c25dad..70aa07f 100644 --- a/src/shootergame/tiles/TilePortalDown.java +++ b/src/shootergame/tiles/TilePortalDown.java @@ -5,6 +5,7 @@ import shootergame.Main; import shootergame.entity.Entity; import shootergame.entity.player.EntityPlayer; import shootergame.init.Textures; +import shootergame.mainloop.MainloopEventHandler; import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2i; import shootergame.world.chunk.ChunkEventHandler; @@ -48,13 +49,21 @@ public class TilePortalDown extends TileFlat player.height -= 0.02; } - if(movingPlayer == 2) { + else if(movingPlayer == 2) { player.height -= 0.04; } - if(ChunkEventHandler.loaded && movingPlayer == 1) + if(player.height < -1 && movingPlayer == 0) + { + movingPlayer = 1; + Main.world.setLayerID(state.meta); + player.height = 6; + } + + else if(ChunkEventHandler.loaded && movingPlayer == 1) { movingPlayer = 2; + MainloopEventHandler.MAINLOOP_EVENT_HANDLER.mspf = 1000/60; Vec2i check_poses[] = { new Vec2i( 1, 0), @@ -91,14 +100,7 @@ public class TilePortalDown extends TileFlat } } - if(player.height < -1 && movingPlayer == 0) - { - movingPlayer = 1; - Main.world.setLayerID(state.meta); - player.height = 6; - } - - if(player.height < 0 && movingPlayer == 2) + else if(player.height < 0 && movingPlayer == 2) { movingPlayer = 3; player.height = 0; diff --git a/src/shootergame/tiles/TileTree.java b/src/shootergame/tiles/TileTree.java index 666a291..5964fba 100644 --- a/src/shootergame/tiles/TileTree.java +++ b/src/shootergame/tiles/TileTree.java @@ -3,12 +3,9 @@ package shootergame.tiles; import shootergame.init.Textures; import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2d; -import shootergame.util.math.vec.Vec3d; public class TileTree extends TileVertical { - private static final Vec3d light_dissipation = new Vec3d(1/4.0, 1/4.0, 1/4.0); - public TileTree(String id) { super(id, Textures.TILE_TREE, new Vec2d(1, 4)); @@ -19,8 +16,8 @@ public class TileTree extends TileVertical } @Override - public Vec3d getLightDissipation(TileState state) { - return light_dissipation; + public double getLightDissipation(TileState state) { + return 1/2.0; } diff --git a/src/shootergame/tiles/TileVertical.java b/src/shootergame/tiles/TileVertical.java index 8eeb6c6..f035754 100644 --- a/src/shootergame/tiles/TileVertical.java +++ b/src/shootergame/tiles/TileVertical.java @@ -24,7 +24,7 @@ public class TileVertical extends Tile implements IHasTexture @Override public void render(Vec2d pos, Camera camera, TileState state) { super.render(pos, camera, state); - GlHelpers.color3(state.light.x, state.light.y, state.light.z); + GlHelpers.color3(state.light, state.light, state.light); VerticalRender.render(pos, camera, tex, size); } diff --git a/src/shootergame/tiles/TileWall.java b/src/shootergame/tiles/TileWall.java index 6619090..de30c11 100644 --- a/src/shootergame/tiles/TileWall.java +++ b/src/shootergame/tiles/TileWall.java @@ -1,7 +1,6 @@ package shootergame.tiles; import shootergame.init.Textures; -import shootergame.util.math.vec.Vec3d; public class TileWall extends TileFlat { @@ -13,7 +12,7 @@ public class TileWall extends TileFlat this.tileSolid = true; this.tileHitbox = 1; - this.light_dissipation = new Vec3d(1/4.0, 1/4.0, 1/4.0); + this.light_dissipation = 1; } } diff --git a/src/shootergame/time/GameTimer.java b/src/shootergame/time/GameTimer.java new file mode 100644 index 0000000..805ccb5 --- /dev/null +++ b/src/shootergame/time/GameTimer.java @@ -0,0 +1,28 @@ +package shootergame.time; + +import mainloop.task.IMainloopTask; + +public class GameTimer implements IMainloopTask +{ + private static long time; + + + public static long getTime() { + return time; + } + + @Override + public boolean MainLoopDelay(long millis) { + return millis > 1; + } + + @Override + public boolean MainLoopRepeat() { + return true; + } + + @Override + public void MainLoopUpdate() { + time += 1; + } +} diff --git a/src/shootergame/util/math/MathHelpers.java b/src/shootergame/util/math/MathHelpers.java index 0a7d41f..ec757de 100644 --- a/src/shootergame/util/math/MathHelpers.java +++ b/src/shootergame/util/math/MathHelpers.java @@ -95,4 +95,16 @@ public class MathHelpers p_distance * Math.sin(angle + p_angle), p_distance * Math.cos(angle + p_angle)); } + + public static double biggest(double a, double b) + { + if(a > b) return a; + else return b; + } + + public static double smallest(double a, double b) + { + if(a < b) return a; + else return b; + } } diff --git a/src/shootergame/util/math/TileState.java b/src/shootergame/util/math/TileState.java index 89aba3c..5fb0010 100644 --- a/src/shootergame/util/math/TileState.java +++ b/src/shootergame/util/math/TileState.java @@ -2,7 +2,6 @@ package shootergame.util.math; import shootergame.init.Tiles; import shootergame.tiles.Tile; -import shootergame.util.math.vec.Vec3d; public class TileState { @@ -10,7 +9,7 @@ public class TileState public Tile tile; public byte meta; - public Vec3d light = new Vec3d(0, 0, 0); + public double light = 0; public TileState(Tile tile, byte meta) { this.tile = tile; @@ -21,15 +20,9 @@ public class TileState this(tile, (byte)meta); } - public TileState withLightLevel(Vec3d light) { + public TileState withLightLevel(double level) { TileState ts = new TileState(tile, meta); - ts.light = light; - return ts; - } - - public TileState withLightLevel(int r, int g, int b) { - TileState ts = new TileState(tile, meta); - ts.light = new Vec3d(r, g, b); + ts.light = level; return ts; } diff --git a/src/shootergame/util/math/vec/Vec2d.java b/src/shootergame/util/math/vec/Vec2d.java index 482cf96..e4995bd 100644 --- a/src/shootergame/util/math/vec/Vec2d.java +++ b/src/shootergame/util/math/vec/Vec2d.java @@ -49,8 +49,6 @@ public class Vec2d { double dx = MathHelpers.positive(other.x - x); double dy = MathHelpers.positive(other.y - y); - - if(dx > dy) return dx; - else return dy; + return MathHelpers.biggest(dx, dy); } } diff --git a/src/shootergame/util/math/vec/Vec2i.java b/src/shootergame/util/math/vec/Vec2i.java index 1b0ed61..1d55d8b 100644 --- a/src/shootergame/util/math/vec/Vec2i.java +++ b/src/shootergame/util/math/vec/Vec2i.java @@ -71,12 +71,10 @@ public class Vec2i return new Vec2i(x, y); } - public int squareDistance(Vec2i other) + public double squareDistance(Vec2i other) { int dx = MathHelpers.positive(other.x - x); int dy = MathHelpers.positive(other.y - y); - - if(dx > dy) return dx; - else return dy; + return MathHelpers.biggest(dx, dy); } } diff --git a/src/shootergame/world/World.java b/src/shootergame/world/World.java index eb85235..9a5fc77 100644 --- a/src/shootergame/world/World.java +++ b/src/shootergame/world/World.java @@ -19,10 +19,12 @@ public class World long seed = rand.nextLong(); // Loop over the layer generators + int id = 0; for(LayerGen lg : layergen) { // Create new layers - layers.add(new Layer(new Random(seed), lg)); + layers.add(new Layer(new Random(seed), lg, id)); + id += 1; } // Set the current layer diff --git a/src/shootergame/world/chunk/Chunk.java b/src/shootergame/world/chunk/Chunk.java index 62a15b1..bac39df 100644 --- a/src/shootergame/world/chunk/Chunk.java +++ b/src/shootergame/world/chunk/Chunk.java @@ -14,7 +14,6 @@ import shootergame.util.math.TileState; import shootergame.util.math.range.Range2i; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.layer.Layer; public class Chunk @@ -28,9 +27,7 @@ public class Chunk private Tile tiles_front[] = new Tile[CHUNK_INDEX]; private byte tiles_front_meta[] = new byte[CHUNK_INDEX]; private byte tiles_back_meta[] = new byte[CHUNK_INDEX]; - private byte tiles_lighting_r[] = new byte[CHUNK_INDEX]; - private byte tiles_lighting_g[] = new byte[CHUNK_INDEX]; - private byte tiles_lighting_b[] = new byte[CHUNK_INDEX]; + private byte tiles_lighting[] = new byte[CHUNK_INDEX]; public ArrayList entities = new ArrayList(); private Layer layer; private Vec2i c_pos; @@ -51,10 +48,8 @@ public class Chunk tiles_front_meta[i] = 0; // Set the light level - Vec3d light_level = layer.layergen.getLightLevel(); - tiles_lighting_r[i] = (byte)(light_level.x*Byte.MAX_VALUE); - tiles_lighting_g[i] = (byte)(light_level.y*Byte.MAX_VALUE); - tiles_lighting_b[i] = (byte)(light_level.z*Byte.MAX_VALUE); + double light_level = layer.layergen.getLightLevel(); + tiles_lighting[i] = (byte)(light_level*Byte.MAX_VALUE); } } @@ -183,9 +178,7 @@ public class Chunk { // Send back the back tile TileState ts = new TileState(this.tiles_back[id], this.tiles_back_meta[id]); - ts.light.x = this.tiles_lighting_r[id] / (double) Byte.MAX_VALUE; - ts.light.y = this.tiles_lighting_g[id] / (double) Byte.MAX_VALUE; - ts.light.z = this.tiles_lighting_b[id] / (double) Byte.MAX_VALUE; + ts.light = this.tiles_lighting[id] / (double) Byte.MAX_VALUE; return ts; } @@ -204,9 +197,7 @@ public class Chunk { // Send back the front tile TileState ts = new TileState(this.tiles_front[id], this.tiles_front_meta[id]); - ts.light.x = this.tiles_lighting_r[id] / (double) Byte.MAX_VALUE; - ts.light.y = this.tiles_lighting_g[id] / (double) Byte.MAX_VALUE; - ts.light.z = this.tiles_lighting_b[id] / (double) Byte.MAX_VALUE; + ts.light = this.tiles_lighting[id] / (double) Byte.MAX_VALUE; return ts; } @@ -222,14 +213,11 @@ public class Chunk } } - public Vec3d getLightLevel(int id) { - return new Vec3d( - this.tiles_lighting_r[id] / (double)Byte.MAX_VALUE, - this.tiles_lighting_g[id] / (double)Byte.MAX_VALUE, - this.tiles_lighting_b[id] / (double)Byte.MAX_VALUE); + public double getLightLevel(int id) { + return tiles_lighting[id] / (double)Byte.MAX_VALUE; } - public Vec3d getLightLevel(Vec2i pos) + public double getLightLevel(Vec2i pos) { // Get the id Vec2i cpos = new Vec2i(0, 0); @@ -240,13 +228,11 @@ public class Chunk return getLightLevel(id); } - public void setLightLevel(Vec3d light, int id) { - this.tiles_lighting_r[id] = (byte)(light.x * Byte.MAX_VALUE); - this.tiles_lighting_g[id] = (byte)(light.y * Byte.MAX_VALUE); - this.tiles_lighting_b[id] = (byte)(light.z * Byte.MAX_VALUE); + public void setLightLevel(double light, int id) { + this.tiles_lighting[id] = (byte)(light * Byte.MAX_VALUE); } - public void setLightLevel(Vec3d light, Vec2i pos) + public void setLightLevel(double light, Vec2i pos) { // Get the id Vec2i cpos = new Vec2i(0, 0); diff --git a/src/shootergame/world/chunk/ChunkEmpty.java b/src/shootergame/world/chunk/ChunkEmpty.java index 340ebfe..85703d1 100644 --- a/src/shootergame/world/chunk/ChunkEmpty.java +++ b/src/shootergame/world/chunk/ChunkEmpty.java @@ -7,7 +7,6 @@ import shootergame.entity.Entity; import shootergame.util.math.TileState; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; public class ChunkEmpty extends Chunk { @@ -73,21 +72,21 @@ public class ChunkEmpty extends Chunk } @Override - public Vec3d getLightLevel(int id) { - return new Vec3d(0, 0, 0); + public double getLightLevel(int id) { + return 0; } @Override - public Vec3d getLightLevel(Vec2i pos) { - return new Vec3d(0, 0, 0); + public double getLightLevel(Vec2i pos) { + return 0; } @Override - public void setLightLevel(Vec3d light, int id) { + public void setLightLevel(double light, int id) { } @Override - public void setLightLevel(Vec3d light, Vec2i pos) { + public void setLightLevel(double light, Vec2i pos) { } @Override diff --git a/src/shootergame/world/layer/Layer.java b/src/shootergame/world/layer/Layer.java index f3df5ae..40f4abe 100644 --- a/src/shootergame/world/layer/Layer.java +++ b/src/shootergame/world/layer/Layer.java @@ -12,7 +12,6 @@ import shootergame.util.math.map.Map2D; import shootergame.util.math.map.Map2DElement; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.layergen.LayerGen; @@ -22,14 +21,16 @@ public class Layer public LayerGen layergen; private Random rand; private long seed; + public int id; - public Layer(Random rand, LayerGen layergen) + public Layer(Random rand, LayerGen layergen, int id) { // Create the array of tiles this.layergen = layergen; this.seed = rand.nextLong(); this.rand = new Random(); this.chunks = new Map2D(layergen); + this.id = id; } public void render(Camera camera) @@ -118,7 +119,7 @@ public class Layer MathHelpers.floor(pos.y / (double)Chunk.CHUNK_SIZE.my)); } - public Vec3d getLightLevel(Vec2i pos) + public double getLightLevel(Vec2i pos) { // Get the chunk pos Vec2i c_pos = getChunkPosFromPos(pos); @@ -127,7 +128,7 @@ public class Layer return chunks.get(c_pos).getLightLevel(pos); } - public void setLightLevel(Vec3d light, Vec2i pos) + public void setLightLevel(double light, Vec2i pos) { // Get the chunk pos Vec2i c_pos = getChunkPosFromPos(pos); diff --git a/src/shootergame/world/layer/layergen/LayerGen.java b/src/shootergame/world/layer/layergen/LayerGen.java index 93e2464..5c1092a 100644 --- a/src/shootergame/world/layer/layergen/LayerGen.java +++ b/src/shootergame/world/layer/layergen/LayerGen.java @@ -5,7 +5,6 @@ import java.util.Random; import shootergame.util.math.TileState; import shootergame.util.math.map.IMap2D; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -14,7 +13,7 @@ public abstract class LayerGen implements IMap2D public abstract void generateChunk(Chunk chunk, Layer layer, long seed, Random rand, Vec2i pos); public abstract void spawnEntities(Layer layer, Random rand); public abstract TileState getTileDestroyed(); - public abstract Vec3d getLightLevel(); + public abstract double getLightLevel(); @Override public Chunk getEmpty(Vec2i pos) { diff --git a/src/shootergame/world/layer/layergen/LayerGenCaves.java b/src/shootergame/world/layer/layergen/LayerGenCaves.java index 64e2299..f0d5510 100644 --- a/src/shootergame/world/layer/layergen/LayerGenCaves.java +++ b/src/shootergame/world/layer/layergen/LayerGenCaves.java @@ -12,7 +12,6 @@ import shootergame.util.math.random.OpenSimplexNoise; import shootergame.util.math.random.RandomHelpers; import shootergame.util.math.vec.Vec2d; import shootergame.util.math.vec.Vec2i; -import shootergame.util.math.vec.Vec3d; import shootergame.world.chunk.Chunk; import shootergame.world.layer.Layer; @@ -23,21 +22,21 @@ public class LayerGenCaves extends LayerGen public void generateChunk(Chunk chunk, Layer layer, long seed, Random rand, Vec2i c_pos) { // Is there going to be a portal up in this chunk - boolean portal = RandomHelpers.randrange(rand, 10) == 0; + boolean portal = PortalSpawnrates.WorldCavePortal(rand); Vec2i portal_pos = null; if(portal) portal_pos = new Vec2i( RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.mx), RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.my)); // Is there going to be a portal down in this chunk - boolean portal_down = RandomHelpers.randrange(rand, 10) == 0; + boolean portal_down = PortalSpawnrates.CaveLavaCavePortal(rand); Vec2i portal_down_pos = null; if(portal_down) portal_down_pos = new Vec2i( RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.mx), RandomHelpers.randrange(rand, Chunk.CHUNK_SIZE.my)); // Get some noise generators - OpenSimplexNoise noisegen_n = new OpenSimplexNoise(seed); + OpenSimplexNoise noisegen_n = new OpenSimplexNoise(new Random(seed + layer.id).nextLong()); // Loop over the chunk for(int x=0;x 40) { + chunk.setBackTile(Tiles.STONE.getDefaultState(), tpos); + } + + else { + chunk.setBackTile(Tiles.WALL.getDefaultState(), tpos); + } + + if(noise_n > 55 && noise_n < 60) { + chunk.setFrontTile(Tiles.LAVA_FLOW.getDefaultState(), tpos); + } + + else if(noise_n > 60) { + chunk.setFrontTile(Tiles.LAVA.getDefaultState(), tpos); + } + } + } + + if(hasLadder) { + chunk.setFrontTile(new TileState(Tiles.LADDER_UP, (short)1), ladder_pos); + } } @Override @@ -26,12 +75,12 @@ public class LayerGenLavaCaves extends LayerGen @Override public TileState getTileDestroyed() { - return Tiles.LAVA.getDefaultState(); + return Tiles.STONE.getDefaultState(); } @Override - public Vec3d getLightLevel() { - return new Vec3d(0.1, 0.1, 0.1); + public double getLightLevel() { + return 0.1; } } diff --git a/src/shootergame/world/layer/layergen/PortalSpawnrates.java b/src/shootergame/world/layer/layergen/PortalSpawnrates.java new file mode 100644 index 0000000..3e6b3cc --- /dev/null +++ b/src/shootergame/world/layer/layergen/PortalSpawnrates.java @@ -0,0 +1,16 @@ +package shootergame.world.layer.layergen; + +import java.util.Random; + +import shootergame.util.math.random.RandomHelpers; + +class PortalSpawnrates +{ + static boolean WorldCavePortal(Random rand) { + return RandomHelpers.randrange(rand, 2) == 0; + } + + static boolean CaveLavaCavePortal(Random rand) { + return RandomHelpers.randrange(rand, 2) == 0; + } +}