This commit is contained in:
Daniel Mills 2019-10-17 09:44:03 -04:00
parent d72518207e
commit 05f501a66a
3 changed files with 47 additions and 39 deletions

View File

@ -2,12 +2,14 @@ package ninja.bytecode.iris;
import java.util.Random;
import org.bukkit.Chunk;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.Bisected;
import org.bukkit.block.data.Bisected.Half;
import org.bukkit.block.data.BlockData;
import org.bukkit.util.Vector;
import ninja.bytecode.iris.gen.GenLayerBase;
import ninja.bytecode.iris.gen.GenLayerBiome;
@ -15,7 +17,6 @@ import ninja.bytecode.iris.gen.GenLayerDeepOcean;
import ninja.bytecode.iris.gen.IGenLayer;
import ninja.bytecode.iris.util.RealBiome;
import ninja.bytecode.shuriken.collections.GList;
import ninja.bytecode.shuriken.math.M;
import ninja.bytecode.shuriken.math.RNG;
public class IrisGenerator extends ParallelChunkGenerator
@ -28,10 +29,22 @@ public class IrisGenerator extends ParallelChunkGenerator
private GenLayerBiome glBiome;
private GenLayerBase glBase;
private int waterLevel = 127;
private GList<Vector> updates = new GList<>();
public void doUpdates(Chunk c)
{
for(Vector i : updates)
{
c.getBlock(i.getBlockX(), i.getBlockY(), i.getBlockZ()).getState().update(true);
}
updates.clear();
}
@Override
public void onInit(World world, Random random)
{
updates = new GList<>();
genLayers = new GList<>();
RNG rng = new RNG(world.getSeed());
genLayers.add(glBiome = new GenLayerBiome(world, random, rng.nextRNG()));
@ -59,11 +72,10 @@ public class IrisGenerator extends ParallelChunkGenerator
public Biome genColumn(int wx, int wz, int x, int z)
{
int height = getHeight(wx, wz);
double temp = glBiome.getTemperature(wx, wz);
double humidity = glBiome.getHumidity(wx, wz);
RealBiome b = glBiome.getBiome(wx, wz);
double temp = glBiome.getTemperature(wx, wz, height);
RealBiome b = glBiome.getBiome(wx, wz, temp, height);
boolean underwater = height < waterLevel;
// Change biome to ocean / deep ocean if underwater height
if(underwater)
{
@ -142,36 +154,7 @@ public class IrisGenerator extends ParallelChunkGenerator
// Surface blocks
else if(i == height - 1)
{
if(temp > 0.6 && b.getBiome().equals(Biome.BEACH))
{
if(humidity > 0.6)
{
mb = Material.YELLOW_CONCRETE_POWDER.createBlockData();
}
else
{
mb = Material.BLACK_CONCRETE_POWDER.createBlockData();
}
}
else if(temp < 0.4 && b.getBiome().equals(Biome.BEACH))
{
if(humidity > 0.6)
{
mb = Material.WHITE_CONCRETE_POWDER.createBlockData();
}
else
{
mb = Material.LIGHT_GRAY_CONCRETE_POWDER.createBlockData();
}
}
else
{
mb = b.surface(wx, i, wz, glBase);
}
mb = b.surface(wx, i, wz, glBase);
}
// Dirt Blocks
@ -223,6 +206,11 @@ public class IrisGenerator extends ParallelChunkGenerator
return b.getBiome();
}
private void scheduleUpdate(int x, int y, int z)
{
updates.add(new Vector(x, y, z));
}
public int pick(int max, double noise)
{
return (int) (noise * max);

View File

@ -15,6 +15,7 @@ public class GenLayerBiome extends GenLayer
private CNG humidity;
private CNG hfracture;
private CNG alt;
private CNG bfracture;
private CNG height;
private CNG superheight;
@ -30,6 +31,8 @@ public class GenLayerBiome extends GenLayer
humidity = new CNG(rng.nextRNG(), 1, 2)
.scale(0.0024)
.fractureWith(new CNG(rng.nextRNG(), 1, 1).scale(0.06), 32);
bfracture = new CNG(rng.nextRNG(), 1, 1)
.scale(0.524);
superheight = new CNG(rng.nextRNG(), 1, 8)
.scale(0.0004)
.fractureWith(new CNG(rng.nextRNG(), 1, 1).scale(0.021), 250);
@ -50,6 +53,11 @@ public class GenLayerBiome extends GenLayer
{
return RealBiome.match(getTemperature(x, z) * 2, getHumidity(x, z), getHeight(x, z), getAlt(x, z));
}
public RealBiome getBiome(double x, double z, double temp, double height)
{
return RealBiome.match(temp * 2, getHumidity(x, z), height, getAlt(x, z));
}
private double getAlt(double x, double z)
{
@ -58,7 +66,17 @@ public class GenLayerBiome extends GenLayer
public double getTemperature(double x, double z)
{
return M.clip(temperature.noise(x, z) - (getHeight(x, z) * 0.19), 0D, 1D);
return getTemperature(x, z, getHeight(x, z));
}
public double getTemperature(double x, double z, double height)
{
return M.clip(temperature.noise(x, z) - (height * 0.19), 0D, 1D);
}
public double getBFracture(double x, double z)
{
return bfracture.noise(x, z);
}
public double getHumidity(double x, double z)

View File

@ -103,10 +103,13 @@ public class RealBiome
.surface(Material.SAND.createBlockData(), Material.CLAY.createBlockData(), Material.GRAVEL.createBlockData()),
new RealBiome(Biome.DEEP_WARM_OCEAN.ordinal(), 0.6, h, -1)
.water()
.surface(Material.BRAIN_CORAL_BLOCK.createBlockData(), Material.FIRE_CORAL_BLOCK.createBlockData(), Material.HORN_CORAL_BLOCK.createBlockData(), Material.MAGMA_BLOCK.createBlockData(), Material.TUBE_CORAL_BLOCK.createBlockData(), Material.BRAIN_CORAL_BLOCK.createBlockData(), Material.BLUE_CONCRETE_POWDER.createBlockData(), Material.CYAN_CONCRETE_POWDER.createBlockData(), Material.LIGHT_BLUE_CONCRETE_POWDER.createBlockData(), Material.SAND.createBlockData())
.surface(Material.SAND.createBlockData())
.surface(Material.BRAIN_CORAL_BLOCK.createBlockData(), Material.FIRE_CORAL_BLOCK.createBlockData(), Material.HORN_CORAL_BLOCK.createBlockData(), Material.TUBE_CORAL_BLOCK.createBlockData(), Material.BRAIN_CORAL_BLOCK.createBlockData(), Material.BLUE_CONCRETE_POWDER.createBlockData(), Material.CYAN_CONCRETE_POWDER.createBlockData(), Material.LIGHT_BLUE_CONCRETE_POWDER.createBlockData(), Material.SAND.createBlockData())
.surface(Material.SEAGRASS.createBlockData(), 0.39)
.surface(Material.TALL_SEAGRASS.createBlockData(), 0.52)
.surface(Material.MAGMA_BLOCK.createBlockData(), 0.003)
.surface(Material.SEA_LANTERN.createBlockData(), 0.003)
.surface(Material.SOUL_SAND.createBlockData(), 0.003)
.surface(Material.BRAIN_CORAL.createBlockData(), 0.09)
.surface(Material.BRAIN_CORAL.createBlockData(), 0.09)
.surface(Material.BUBBLE_CORAL.createBlockData(), 0.09)
.surface(Material.FIRE_CORAL.createBlockData(), 0.09)
@ -116,7 +119,6 @@ public class RealBiome
.surface(Material.BUBBLE_CORAL_FAN.createBlockData(), 0.05)
.surface(Material.FIRE_CORAL_FAN.createBlockData(), 0.05)
.surface(Material.HORN_CORAL_FAN.createBlockData(), 0.05)
.surface(Material.SEA_LANTERN.createBlockData(), 0.006)
.surface(Material.TUBE_CORAL_FAN.createBlockData(), 0.05),
new RealBiome(Biome.DEEP_LUKEWARM_OCEAN.ordinal(), 0.7, h, -1)
.water()