9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-30 12:29:20 +00:00
This commit is contained in:
Daniel Mills
2020-08-02 16:17:02 -04:00
parent 7863660a47
commit b6592582b3
8 changed files with 99 additions and 15 deletions

View File

@@ -101,16 +101,18 @@ public abstract class BiomeChunkGenerator extends DimensionChunkGenerator
return getDimension().isInverted() ? ceilingGenerators : generators;
}
protected double getBiomeHeight(double rx, double rz)
protected double getBiomeHeight(double rx, double rz, int x, int z)
{
double h = 0;
IrisRegion region = glBiome.getRegion(rx, rz);
BiomeResult r = glBiome.generateRegionData(rx, rz, x, z, region);
for(IrisGenerator i : getGenerators().values())
{
h += interpolateGenerator(rx, rz, i);
}
return h;
return h + r.getHeightOffset();
}
protected double interpolateGenerator(double rx, double rz, IrisGenerator gen)

View File

@@ -40,14 +40,14 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
private GenLayerCarve glCarve;
private RNG rockRandom;
private int[] cacheHeightMap;
private IrisBiome[] cacheTrueBiome;
private BiomeResult[] cacheTrueBiome;
private ReentrantLock cacheLock;
public TerrainChunkGenerator(String dimensionName, int threads)
{
super(dimensionName, threads);
cacheHeightMap = new int[256];
cacheTrueBiome = new IrisBiome[256];
cacheTrueBiome = new BiomeResult[256];
cachingAllowed = true;
cacheLock = new ReentrantLock();
}
@@ -87,7 +87,9 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
int height = (int) Math.round(noise) + fluidHeight;
boolean carvable = getDimension().isCarving() && height > getDimension().getCarvingMin();
IrisRegion region = sampleRegion(rx, rz);
IrisBiome biome = sampleTrueBiome(rx, rz).getBiome();
BiomeResult biomeResult = sampleTrueBiome(rx, rz);
IrisBiome biome = biomeResult.getBiome();
double airReversal = biomeResult.getHeightOffset();
if(biome == null)
{
@@ -98,7 +100,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
{
try
{
cacheTrueBiome[(z << 4) | x] = biome;
cacheTrueBiome[(z << 4) | x] = biomeResult;
cacheHeightMap[(z << 4) | x] = height;
}
@@ -115,7 +117,18 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
KList<Integer> cavernHeights = new KList<>();
int lastCavernHeight = -1;
for(int k = Math.max(height, fluidHeight); k < Math.max(height, fluidHeight) + 3; k++)
if(height > fluidHeight && airReversal < 0 && biomeResult.getAir() != null && biomeResult.getAir().getBlockData().isNotEmpty())
{
RNG randomx = masterRandom.nextParallelRNG(95288);
int realHeight = (int) Math.floor(height - airReversal);
for(int k = height + 1; k < realHeight; k++)
{
sliver.set(k, biomeResult.getAir().get(randomx, wx, k, wz));
}
}
for(int k = Math.max(height, fluidHeight); k < Math.max(height, fluidHeight) + 3 + Math.abs(airReversal); k++)
{
if(k < Math.max(height, fluidHeight) + 3)
{
@@ -474,7 +487,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
double wx = getZoomed(rx);
double wz = getZoomed(rz);
return getBiomeHeight(wx, wz);
return getBiomeHeight(wx, wz, rx, rz);
}
public BiomeResult sampleTrueBiomeBase(int x, int z)
@@ -552,7 +565,7 @@ public abstract class TerrainChunkGenerator extends ParallelChunkGenerator
if(isSafe() && x >> 4 == cacheX && z >> 4 == cacheZ)
{
return new BiomeResult(cacheTrueBiome[((z & 15) << 4) | (x & 15)], 0);
return cacheTrueBiome[((z & 15) << 4) | (x & 15)];
}
double wx = getModifiedX(x, z);

View File

@@ -147,7 +147,7 @@ public class GenLayerBiome extends GenLayer
{
if(i.getType().equals(type) && i.isRidge(rng, rawX, rawZ))
{
return new BiomeResult(Iris.data.getBiomeLoader().load(i.getBiome()).infer(i.getAs(), type), 0.5);
return new BiomeResult(Iris.data.getBiomeLoader().load(i.getBiome()).infer(i.getAs(), type), 0.5, i.getRidgeHeight(rng, rawX, rawZ), i.getAir());
}
}
@@ -155,7 +155,7 @@ public class GenLayerBiome extends GenLayer
{
if(i.getType().equals(type) && i.isSpot(rng, rawX, rawZ))
{
return new BiomeResult(Iris.data.getBiomeLoader().load(i.getBiome()).infer(i.getAs(), type), 0.5);
return new BiomeResult(Iris.data.getBiomeLoader().load(i.getBiome()).infer(i.getAs(), type), 0.5, i.getSpotHeight(rng, rawX, rawZ), i.getAir());
}
}