diff --git a/src/projectzombie/entity/player/EntityPlayer.java b/src/projectzombie/entity/player/EntityPlayer.java index 8f67bd0..8971f18 100755 --- a/src/projectzombie/entity/player/EntityPlayer.java +++ b/src/projectzombie/entity/player/EntityPlayer.java @@ -415,7 +415,7 @@ public class EntityPlayer extends Entity implements { Layer layer = Main.world.getLayer(); Model model = getModel(); - model.setModel(Matrix4.identity()); + model.setModel(Matrix4.translate(0, getPos().y, 0)); model.render(); ItemStack holding = inventory.getItem(inventory_hand); diff --git a/src/projectzombie/menu/MenuMain.java b/src/projectzombie/menu/MenuMain.java index a9279ed..5de64fc 100755 --- a/src/projectzombie/menu/MenuMain.java +++ b/src/projectzombie/menu/MenuMain.java @@ -1,8 +1,5 @@ package projectzombie.menu; -import java.util.Random; - -import gl_engine.vec.Vec2d; import gl_engine.vec.Vec3d; import projectzombie.Main; import projectzombie.input.types.InputGUI; @@ -10,13 +7,10 @@ import projectzombie.menu.gui.GUI; import projectzombie.menu.gui.GUIButtonBasic; import projectzombie.menu.gui.GUIButtonGroup; import projectzombie.menu.gui.GUILabelMain; -import projectzombie.menu.gui.GUITextBox; import projectzombie.world.World; public class MenuMain extends Menu { - private static final Random rand = new Random(); - private GUI gui; public MenuMain() { @@ -47,7 +41,7 @@ public class MenuMain extends Menu gui.add(group); gui.setSelected(group.get(0)); - World.createWorld(null, rand.nextLong()); + World.createDemoWorld(); Main.player.dead = true; } diff --git a/src/projectzombie/world/World.java b/src/projectzombie/world/World.java index 6480894..3d6fb46 100755 --- a/src/projectzombie/world/World.java +++ b/src/projectzombie/world/World.java @@ -32,6 +32,10 @@ public class World implements IBdfClassManager { public static final double BIOME_SIZE = 1024; + private static long demoWorldSeed = new Random().nextLong(); + private static EntityPlayer demoWorldPlayer; + private static World demoWorld; + private Layer loaded; private ArrayList layers = new ArrayList(); private BdfFileManager file_manager; @@ -66,6 +70,40 @@ public class World implements IBdfClassManager } } + public static void createDemoWorld() + { + long seed = demoWorldSeed; + + if(demoWorld == null) + { + // Create all the layers + Layers.EARTH = new Layer(new Random(seed), LayerGenerators.EARTH); + Layers.CAVES = new Layer(new Random(seed), LayerGenerators.CAVES); + Layers.LAVA_CAVES = new Layer(new Random(seed), LayerGenerators.LAVA_CAVES); + + // Create the world and set the earth as the default layer + Main.world = new World(null); + Main.world.addLayer(Layers.EARTH); + Main.world.addLayer(Layers.CAVES); + Main.world.addLayer(Layers.LAVA_CAVES); + Main.world.setLayer(0); + + Main.player = new EntityPlayer(); + + demoWorldPlayer = Main.player; + demoWorld = Main.world; + } + + else { + Main.world = demoWorld; + Main.player = demoWorldPlayer; + } + + // Initialize some other objects + GameTimer.resetTime(); + BossBars.clear(); + } + public static void createWorld(String path, long seed) { // Create all the layers diff --git a/src/projectzombie/world/layer/layergen/LayerGenCaves.java b/src/projectzombie/world/layer/layergen/LayerGenCaves.java index 115b474..5a6ffd8 100755 --- a/src/projectzombie/world/layer/layergen/LayerGenCaves.java +++ b/src/projectzombie/world/layer/layergen/LayerGenCaves.java @@ -31,7 +31,7 @@ public class LayerGenCaves extends LayerGen @Override public double getTemperature(Layer layer, Vec2d pos) { - return getTemperatureStatic(layer, pos); + return layer.getTemperature(pos.toInt()); } public double getHumidity(Layer layer, Vec2d pos) @@ -49,11 +49,12 @@ public class LayerGenCaves extends LayerGen Random lrand = new Random(layer.lseed); layer.noise_gens = new NoiseGenerator[] { - new NoiseGeneratorSimplex(rand), // Temperature - new NoiseGeneratorSimplex(rand), // Humidity - new NoiseGeneratorSimplex(lrand), // Cave structure - new NoiseGeneratorSimplex(lrand), // Caverns - new NoiseGeneratorSimplex(lrand), // Wall width + new NoiseGeneratorSimplex(rand, 64), // Temperature + new NoiseGeneratorSimplex(rand, 64), // Humidity + + new NoiseGeneratorSimplex(lrand, 4), // Cave structure + new NoiseGeneratorSimplex(lrand, 4), // Caverns + new NoiseGeneratorSimplex(lrand, 4), // Wall width }; } @@ -93,7 +94,7 @@ public class LayerGenCaves extends LayerGen // Get the noise value and the position vector double noise_n = 100 - MathHelpers.positive( layer.noise_gens[2].eval(cx/16.0, cy/16.0) * 100 ); double noise_c = layer.noise_gens[3].eval(cx/32.0, cy/32.0); - double noise_w = layer.noise_gens[4].eval(cx/32.0, cy/32.0) * 30 + 100; + double noise_w = layer.noise_gens[4].eval(cx/32.0, cy/32.0) * 30 + 90; boolean cavern = false; Tile floor = Tiles.STONE; diff --git a/src/projectzombie/world/layer/layergen/LayerGenEarth.java b/src/projectzombie/world/layer/layergen/LayerGenEarth.java index f84ad99..673e89a 100755 --- a/src/projectzombie/world/layer/layergen/LayerGenEarth.java +++ b/src/projectzombie/world/layer/layergen/LayerGenEarth.java @@ -34,7 +34,7 @@ public class LayerGenEarth extends LayerGen { // Get the noise generator NoiseGenerator terrain_noise = layer.noise_gens[0]; - return MathHelpers.map(terrain_noise.eval(pos.x / World.BIOME_SIZE, pos.y / World.BIOME_SIZE), -1, 1, 0, 1); + return terrain_noise.eval(pos.x / World.BIOME_SIZE, pos.y / World.BIOME_SIZE) * 0.5 + 0.5; } @Override @@ -45,15 +45,14 @@ public class LayerGenEarth extends LayerGen double light = MathHelpers.map( MathHelpers.sin(MathHelpers.map(GameTimer.getTime() % 720000, 0, 720000, 0, MathHelpers.TWO_PI)), -1, 1, 0.2 * humidity, 0.2); - NoiseGenerator terrain_noise = layer.noise_gens[0]; - return MathHelpers.map(terrain_noise.eval(pos.x / World.BIOME_SIZE, pos.y / World.BIOME_SIZE), -1, 1, 0, 0.5 + light); + return layer.getTemperature(pos.toInt()) * (0.5 + light); } public double getHumidity(Layer layer, Vec2d pos) { // Get the noise generator NoiseGenerator terrain_noise = layer.noise_gens[1]; - return MathHelpers.map(terrain_noise.eval(pos.x / World.BIOME_SIZE, pos.y / World.BIOME_SIZE), -1, 1, 0, 1); + return terrain_noise.eval(pos.x / World.BIOME_SIZE, pos.y / World.BIOME_SIZE) * 0.5 + 0.5; } @Override @@ -71,8 +70,7 @@ public class LayerGenEarth extends LayerGen new NoiseGeneratorSimplex(lrand), // Wind new NoiseGeneratorSimplex(lrand), // Wind new NoiseGeneratorSimplex(lrand, 4), // Water - new NoiseGeneratorSimplex(lrand), // Rocks - new NoiseGeneratorSimplex(lrand), // Offset + new NoiseGeneratorSimplex(lrand, 2), // Rocks }; } @@ -93,6 +91,7 @@ public class LayerGenEarth extends LayerGen Vec2d pos = new Vec2d(c_pos.x * 16 + x, c_pos.y * 16 + y); Vec2i tpos = pos.toInt(); + double rocks = layer.noise_gens[5].eval(pos.x / 16.0, pos.y / 16.0); double temperature = getTemperatureStatic(layer, pos); double humidity = getHumidity(layer, pos); @@ -106,6 +105,7 @@ public class LayerGenEarth extends LayerGen else { byte rock_type = 0; + boolean placed_stone = false; if(temperature < 0.35) { @@ -122,7 +122,12 @@ public class LayerGenEarth extends LayerGen chunk.setBackTile(Tiles.SAND.getDefaultState(), tpos); rock_type = (byte)2; - if(rand.nextDouble() > MathHelpers.map(humidity, 0, 0.5, 0.98, 0.95)) { + if(rocks > 0.8) { + chunk.setBackTile(Tiles.SANDSTONE_WALL.getDefaultState(), tpos); + placed_stone = true; + } + + else if(rand.nextDouble() > MathHelpers.map(humidity, 0, 0.5, 0.98, 0.95)) { chunk.setFrontTile(Tiles.CACTUS.getDefaultState(), tpos); } } @@ -131,15 +136,20 @@ public class LayerGenEarth extends LayerGen { chunk.setBackTile(Tiles.GRASS.getDefaultState(), tpos); - if(rand.nextDouble() > MathHelpers.map(humidity, 0, 1, 0.99, 0.9)) { + if(rocks > 0.8) { + chunk.setBackTile(Tiles.WALL.getDefaultState(), tpos); + placed_stone = true; + } + + else if(rand.nextDouble() > MathHelpers.map(humidity, 0, 1, 0.99, 0.9)) { chunk.setFrontTile(Tiles.TREE.getDefaultState(), tpos); } - if(rand.nextDouble() > 0.9) { + else if(rand.nextDouble() > 0.9) { chunk.setFrontTile(Tiles.TALL_GRASS.getDefaultState(), tpos); } - if(temperature > 0.7 && humidity > 0.7 && Math.random() > 0.9998) { + else if(temperature > 0.7 && humidity > 0.7 && Math.random() > 0.9998) { chunk.setFrontTile(Tiles.HEMP.getDefaultState(), tpos); while(Math.random() < 0.8) { chunk.setFrontTile(Tiles.HEMP.getDefaultState(), @@ -150,7 +160,7 @@ public class LayerGenEarth extends LayerGen } } - if(rand.nextDouble() > 0.98) { + if(!placed_stone && rand.nextDouble() > 0.98) { chunk.setFrontTile(new TileState(Tiles.ROCK, rock_type), tpos); } }