Improved world gen and made the main menu demo world not re-generate

This commit is contained in:
jsrobson10 2020-08-27 14:27:30 +10:00
parent a6b8edcd67
commit c5e36b6f79
5 changed files with 69 additions and 26 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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<Layer> layers = new ArrayList<Layer>();
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

View File

@ -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;

View File

@ -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);
}
}