This commit is contained in:
Daniel Mills
2020-01-16 03:55:54 -05:00
parent 3b90a58418
commit 75d9bf458a
11 changed files with 163 additions and 152 deletions

View File

@@ -2,7 +2,6 @@ package ninja.bytecode.iris.generator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.locks.ReentrantLock;
import org.bukkit.Material;
import org.bukkit.World;
@@ -62,6 +61,8 @@ public class IrisGenerator extends ParallelChunkGenerator
private CNG scatter;
public GMap<String, IrisBiome> biomeCache = new GMap<>();
private MB WATER = new MB(Material.STATIONARY_WATER);
private MB ICE = new MB(Material.ICE);
private MB PACKED_ICE = new MB(Material.PACKED_ICE);
private MB BEDROCK = new MB(Material.BEDROCK);
private GList<IrisBiome> internal;
private GenLayerLayeredNoise glLNoise;
@@ -190,6 +191,15 @@ public class IrisGenerator extends ParallelChunkGenerator
public IrisBiome getOcean(IrisBiome biome, int height)
{
IrisRegion region = glBiome.getRegion(biome.getRegion());
if(region != null)
{
if(region.isFrozen())
{
return biome("Frozen Ocean");
}
}
if(height < 36)
{
return biome("Deep Ocean");
@@ -237,6 +247,11 @@ public class IrisGenerator extends ParallelChunkGenerator
return hv;
}
public IrisRegion getRegion(IrisBiome biome)
{
return glBiome.getRegion(biome.getRegion());
}
@Override
public Biome genColumn(int wxx, int wzx, int x, int z, ChunkPlan plan)
{
@@ -245,22 +260,28 @@ public class IrisGenerator extends ParallelChunkGenerator
double wx = getOffsetX(wxx);
double wz = getOffsetZ(wzx);
IrisBiome biome = getBiome(wxx, wzx);
boolean frozen = getRegion(biome) != null ? getRegion(biome).isFrozen() : false;
int height = computeHeight(wxx, wzx, plan, biome);
int max = Math.max(height, seaLevel);
biome = height > 61 && height < 65 ? getBeach(biome) : biome;
biome = height < 63 ? getOcean(biome, height) : biome;
IrisBiome nbiome = height < 63 ? getOcean(biome, height) : biome;
biome = nbiome;
biome = height > 61 && height < 65 ? frozen ? biome : getBeach(biome) : biome;
for(int i = 0; i < max; i++)
{
MB mb = ROCK.get(scatterInt(wzx, i, wxx, ROCK.size()));
boolean underwater = i >= height && i < seaLevel;
boolean someunderwater = i >= height && i < seaLevel - (1 + scatterInt(x, i, z, 1));
boolean wayunderwater = i >= height && i < seaLevel - (3 + scatterInt(x, i, z, 2));
boolean underground = i < height;
int dheight = biome.getDirtDepth();
int rheight = biome.getRockDepth();
boolean dirt = (height - 1) - i < (dheight > 0 ? scatterInt(x, i, z, 4) : 0) + dheight;
boolean rocky = i > height - rheight && !dirt;
boolean bedrock = i == 0 || !Iris.settings.gen.flatBedrock ? i <= 2 : i < scatterInt(x, i, z, 3);
mb = underwater ? WATER : mb;
mb = underwater ? frozen ? PACKED_ICE : WATER : mb;
mb = someunderwater ? frozen ? ICE : WATER : mb;
mb = wayunderwater ? WATER : mb;
mb = underground && dirt ? biome.getSubSurface(wxx, i, wzx, rTerrain) : mb;
mb = underground && rocky ? biome.getRock(wxx, i, wzx, rTerrain) : mb;
mb = bedrock ? BEDROCK : mb;

View File

@@ -10,7 +10,7 @@ import ninja.bytecode.iris.generator.IrisGenerator;
import ninja.bytecode.iris.pack.IrisBiome;
import ninja.bytecode.iris.pack.IrisRegion;
import ninja.bytecode.iris.util.GenLayer;
import ninja.bytecode.iris.util.MaxingGenerator.EnumMaxingGenerator;
import ninja.bytecode.iris.util.PolygonGenerator.EnumPolygonGenerator;
import ninja.bytecode.shuriken.collections.GList;
import ninja.bytecode.shuriken.collections.GMap;
import ninja.bytecode.shuriken.math.CNG;
@@ -19,7 +19,7 @@ import ninja.bytecode.shuriken.math.RNG;
public class GenLayerBiome extends GenLayer
{
private EnumMaxingGenerator<IrisRegion> regionGenerator;
private EnumPolygonGenerator<IrisRegion> regionGenerator;
private GMap<String, IrisRegion> regions;
private Function<CNG, CNG> factory;
private CNG fracture;
@@ -54,16 +54,16 @@ public class GenLayerBiome extends GenLayer
}
int v = 85034;
regionGenerator = new EnumMaxingGenerator<IrisRegion>(rng.nextParallelRNG(v), 0.00522 * Iris.settings.gen.biomeScale * 0.189, 1, regions.v().toArray(new IrisRegion[regions.v().size()]), factory);
regionGenerator = new EnumPolygonGenerator<IrisRegion>(rng.nextParallelRNG(v), 0.00522 * Iris.settings.gen.biomeScale * 0.189, 1, regions.v().toArray(new IrisRegion[regions.v().size()]), factory);
for(IrisRegion i : regions.v())
{
v += 13 - i.getName().length();
i.setGen(new EnumMaxingGenerator<IrisBiome>(rng.nextParallelRNG(33 + v), 0.000255 * i.getBiomes().size() * Iris.settings.gen.biomeScale, 1, i.getBiomes().toArray(new IrisBiome[i.getBiomes().size()]), factory));
i.setGen(new EnumPolygonGenerator<IrisBiome>(rng.nextParallelRNG(33 + v), 0.000255 * i.getBiomes().size() * Iris.settings.gen.biomeScale, 1, i.getBiomes().toArray(new IrisBiome[i.getBiomes().size()]), factory));
}
}
public EnumMaxingGenerator<IrisBiome> getRegionGenerator(double xx, double zz)
public EnumPolygonGenerator<IrisBiome> getRegionGenerator(double xx, double zz)
{
return regionGenerator.getChoice(xx, zz).getGen();
}

View File

@@ -8,7 +8,7 @@ import org.bukkit.World;
import ninja.bytecode.iris.Iris;
import ninja.bytecode.iris.generator.IrisGenerator;
import ninja.bytecode.iris.util.GenLayer;
import ninja.bytecode.iris.util.MaxingGenerator;
import ninja.bytecode.iris.util.PolygonGenerator;
import ninja.bytecode.shuriken.math.CNG;
import ninja.bytecode.shuriken.math.RNG;
@@ -17,7 +17,7 @@ public class GenLayerCaves extends GenLayer
private CNG caveHeight;
private CNG caveGirth;
private CNG caveClamp;
private MaxingGenerator caveVeins;
private PolygonGenerator caveVeins;
public GenLayerCaves(IrisGenerator iris, World world, Random random, RNG rng)
{
@@ -25,7 +25,7 @@ public class GenLayerCaves extends GenLayer
caveHeight = new CNG(rng.nextParallelRNG(-100001), 1D, 3).scale(0.00222);
caveGirth = new CNG(rng.nextParallelRNG(-100002), 1D, 3).scale(0.03);
caveClamp = new CNG(rng.nextParallelRNG(-10000), 1D, 3).scale(0.1422);
caveVeins = new MaxingGenerator(rng.nextParallelRNG(-99999), 4, 0.002 * Iris.settings.gen.caveScale, 1, (g) -> g.fractureWith(new CNG(rng.nextParallelRNG(-5555), 1D, 4).scale(0.02), 70));
caveVeins = new PolygonGenerator(rng.nextParallelRNG(-99999), 4, 0.002 * Iris.settings.gen.caveScale, 1, (g) -> g.fractureWith(new CNG(rng.nextParallelRNG(-5555), 1D, 4).scale(0.02), 70));
}
public void genCaves(double wxx, double wzx, int x, int z, int s, IrisGenerator g)