mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-01 15:36:45 +00:00
make caves more deterministic
This commit is contained in:
parent
cca0bed482
commit
cf8243a000
@ -62,31 +62,31 @@ public class IrisCarving {
|
|||||||
|
|
||||||
@BlockCoordinates
|
@BlockCoordinates
|
||||||
public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int depth) {
|
public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int depth) {
|
||||||
doCarving(writer, rng, engine, x, y, z, depth, -1);
|
doCarving(writer, rng, new RNG(engine.getSeedManager().getCarve()), engine, x, y, z, depth, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@BlockCoordinates
|
@BlockCoordinates
|
||||||
public void doCarving(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
public void doCarving(MantleWriter writer, RNG rng, RNG base, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
||||||
int nextRecursion = recursion + 1;
|
int nextRecursion = recursion + 1;
|
||||||
|
|
||||||
if (caves.isNotEmpty()) {
|
if (caves.isNotEmpty()) {
|
||||||
for (IrisCavePlacer i : caves) {
|
for (IrisCavePlacer i : caves) {
|
||||||
if (recursion > i.getMaxRecursion()) continue;
|
if (recursion > i.getMaxRecursion()) continue;
|
||||||
i.generateCave(writer, rng, engine, x, y, z, nextRecursion, waterHint);
|
i.generateCave(writer, rng, base, engine, x, y, z, nextRecursion, waterHint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ravines.isNotEmpty()) {
|
if (ravines.isNotEmpty()) {
|
||||||
for (IrisRavinePlacer i : ravines) {
|
for (IrisRavinePlacer i : ravines) {
|
||||||
if (recursion > i.getMaxRecursion()) continue;
|
if (recursion > i.getMaxRecursion()) continue;
|
||||||
i.generateRavine(writer, rng, engine, x, y, z, nextRecursion, waterHint);
|
i.generateRavine(writer, rng, base, engine, x, y, z, nextRecursion, waterHint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spheres.isNotEmpty()) {
|
if (spheres.isNotEmpty()) {
|
||||||
for (IrisSphere i : spheres) {
|
for (IrisSphere i : spheres) {
|
||||||
if (rng.nextInt(i.getRarity()) == 0) {
|
if (rng.nextInt(i.getRarity()) == 0) {
|
||||||
i.generate(rng, engine, writer, x, y, z);
|
i.generate(base, engine, writer, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ public class IrisCarving {
|
|||||||
if (elipsoids.isNotEmpty()) {
|
if (elipsoids.isNotEmpty()) {
|
||||||
for (IrisElipsoid i : elipsoids) {
|
for (IrisElipsoid i : elipsoids) {
|
||||||
if (rng.nextInt(i.getRarity()) == 0) {
|
if (rng.nextInt(i.getRarity()) == 0) {
|
||||||
i.generate(rng, engine, writer, x, y, z);
|
i.generate(base, engine, writer, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ public class IrisCarving {
|
|||||||
if (pyramids.isNotEmpty()) {
|
if (pyramids.isNotEmpty()) {
|
||||||
for (IrisPyramid i : pyramids) {
|
for (IrisPyramid i : pyramids) {
|
||||||
if (rng.nextInt(i.getRarity()) == 0) {
|
if (rng.nextInt(i.getRarity()) == 0) {
|
||||||
i.generate(rng, engine, writer, x, y, z);
|
i.generate(base, engine, writer, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,12 +71,12 @@ public class IrisCave extends IrisRegistrant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
||||||
generate(writer, rng, engine, x, y, z, 0, -1, true);
|
generate(writer, rng, new RNG(engine.getSeedManager().getCarve()), engine, x, y, z, 0, -1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint, boolean breakSurface) {
|
public void generate(MantleWriter writer, RNG rng, RNG base, Engine engine, int x, int y, int z, int recursion, int waterHint, boolean breakSurface) {
|
||||||
double girth = getWorm().getGirth().get(rng, x, z, engine.getData());
|
double girth = getWorm().getGirth().get(base.nextParallelRNG(465156), x, z, engine.getData());
|
||||||
KList<IrisPosition> points = getWorm().generate(rng, engine.getData(), writer, verticalRange, x, y, z, breakSurface, girth + 9);
|
KList<IrisPosition> points = getWorm().generate(base.nextParallelRNG(784684), engine.getData(), writer, verticalRange, x, y, z, breakSurface, girth + 9);
|
||||||
int highestWater = Math.max(waterHint, -1);
|
int highestWater = Math.max(waterHint, -1);
|
||||||
|
|
||||||
if (highestWater == -1) {
|
if (highestWater == -1) {
|
||||||
@ -92,16 +92,16 @@ public class IrisCave extends IrisRegistrant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int h = Math.min(Math.max(highestWater, waterHint), engine.getDimension().getFluidHeight());
|
int h = Math.min(highestWater, engine.getDimension().getFluidHeight());
|
||||||
|
|
||||||
for (IrisPosition i : points) {
|
for (IrisPosition i : points) {
|
||||||
fork.doCarving(writer, rng, engine, i.getX(), i.getY(), i.getZ(), recursion, h);
|
fork.doCarving(writer, rng, base, engine, i.getX(), i.getY(), i.getZ(), recursion, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
MatterCavern c = new MatterCavern(true, customBiome, (byte) 0);
|
MatterCavern c = new MatterCavern(true, customBiome, (byte) 0);
|
||||||
MatterCavern w = new MatterCavern(true, customBiome, (byte) 1);
|
MatterCavern w = new MatterCavern(true, customBiome, (byte) 1);
|
||||||
|
|
||||||
CNG cng = shape.getNoise(rng, engine);
|
CNG cng = shape.getNoise(base.nextParallelRNG(8131545), engine);
|
||||||
KSet<IrisPosition> mask = shape.getMasked(rng, engine);
|
KSet<IrisPosition> mask = shape.getMasked(rng, engine);
|
||||||
writer.setNoiseMasked(points,
|
writer.setNoiseMasked(points,
|
||||||
girth, cng.noise(x, y, z), cng, mask, true,
|
girth, cng.noise(x, y, z), cng, mask, true,
|
||||||
|
@ -64,10 +64,10 @@ public class IrisCavePlacer implements IRare {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generateCave(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z) {
|
public void generateCave(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z) {
|
||||||
generateCave(mantle, rng, engine, x, y, z, 0, -1);
|
generateCave(mantle, rng, new RNG(engine.getSeedManager().getCarve()), engine, x, y, z, 0, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateCave(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
public void generateCave(MantleWriter mantle, RNG rng, RNG base, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
||||||
if (fail.get()) {
|
if (fail.get()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -86,13 +86,13 @@ public class IrisCavePlacer implements IRare {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (y == -1) {
|
if (y == -1) {
|
||||||
int h = (int) caveStartHeight.get(rng, x, z, data);
|
int h = (int) caveStartHeight.get(base, x, z, data);
|
||||||
int ma = breakSurface ? h : (int) (engine.getComplex().getHeightStream().get(x, z) - 9);
|
int ma = breakSurface ? h : (int) (engine.getComplex().getHeightStream().get(x, z) - 9);
|
||||||
y = Math.min(h, ma);
|
y = Math.min(h, ma);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
cave.generate(mantle, rng, engine, x + rng.nextInt(15), y, z + rng.nextInt(15), recursion, waterHint, breakSurface);
|
cave.generate(mantle, rng, base, engine, x + rng.nextInt(15), y, z + rng.nextInt(15), recursion, waterHint, breakSurface);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail.set(true);
|
fail.set(true);
|
||||||
|
@ -93,13 +93,13 @@ public class IrisRavine extends IrisRegistrant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z) {
|
||||||
generate(writer, rng, engine, x, y, z, 0, -1);
|
generate(writer, rng, new RNG(engine.getSeedManager().getCarve()), engine, x, y, z, 0, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate(MantleWriter writer, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
public void generate(MantleWriter writer, RNG rng, RNG base, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
||||||
KList<IrisPosition> pos = getWorm().generate(rng, engine.getData(), writer, null, x, y, z, true, 0);
|
KList<IrisPosition> pos = getWorm().generate(base.nextParallelRNG(879615), engine.getData(), writer, null, x, y, z, true, 0);
|
||||||
CNG dg = depthStyle.getGenerator().createNoCache(rng, engine.getData());
|
CNG dg = depthStyle.getGenerator().create(base.nextParallelRNG(7894156), engine.getData());
|
||||||
CNG bw = baseWidthStyle.getGenerator().createNoCache(rng, engine.getData());
|
CNG bw = baseWidthStyle.getGenerator().create(base.nextParallelRNG(15315456), engine.getData());
|
||||||
int highestWater = Math.max(waterHint, -1);
|
int highestWater = Math.max(waterHint, -1);
|
||||||
boolean water = false;
|
boolean water = false;
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ public class IrisRavine extends IrisRegistrant {
|
|||||||
int width = (int) Math.round(bw.fitDouble(baseWidthStyle.getMin(), baseWidthStyle.getMax(), p.getX(), p.getZ()));
|
int width = (int) Math.round(bw.fitDouble(baseWidthStyle.getMin(), baseWidthStyle.getMax(), p.getX(), p.getZ()));
|
||||||
int surface = (int) Math.round(rsurface - depth * 0.45);
|
int surface = (int) Math.round(rsurface - depth * 0.45);
|
||||||
|
|
||||||
fork.doCarving(writer, rng, engine, p.getX(), rng.i(surface - depth, surface), p.getZ(), recursion, Math.max(highestWater, waterHint));
|
fork.doCarving(writer, rng, base, engine, p.getX(), rng.i(surface - depth, surface), p.getZ(), recursion, highestWater);
|
||||||
|
|
||||||
for (int i = surface + depth; i >= surface; i--) {
|
for (int i = surface + depth; i >= surface; i--) {
|
||||||
if (i % ribThickness == 0) {
|
if (i % ribThickness == 0) {
|
||||||
|
@ -60,10 +60,10 @@ public class IrisRavinePlacer implements IRare {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generateRavine(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z) {
|
public void generateRavine(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z) {
|
||||||
generateRavine(mantle, rng, engine, x, y, z, 0, -1);
|
generateRavine(mantle, rng, new RNG(engine.getSeedManager().getCarve()), engine, x, y, z, 0, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateRavine(MantleWriter mantle, RNG rng, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
public void generateRavine(MantleWriter mantle, RNG rng, RNG base, Engine engine, int x, int y, int z, int recursion, int waterHint) {
|
||||||
if (fail.get()) {
|
if (fail.get()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -84,7 +84,7 @@ public class IrisRavinePlacer implements IRare {
|
|||||||
try {
|
try {
|
||||||
int xx = x + rng.nextInt(15);
|
int xx = x + rng.nextInt(15);
|
||||||
int zz = z + rng.nextInt(15);
|
int zz = z + rng.nextInt(15);
|
||||||
ravine.generate(mantle, rng, engine, xx, y, zz, recursion, waterHint);
|
ravine.generate(mantle, rng, base, engine, xx, y, zz, recursion, waterHint);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
fail.set(true);
|
fail.set(true);
|
||||||
|
@ -71,9 +71,9 @@ public class IrisWorm {
|
|||||||
IrisPosition start = new IrisPosition(x, y, z);
|
IrisPosition start = new IrisPosition(x, y, z);
|
||||||
KList<IrisPosition> pos = new KList<>();
|
KList<IrisPosition> pos = new KList<>();
|
||||||
KSet<IrisPosition> check = allowLoops ? null : new KSet<>();
|
KSet<IrisPosition> check = allowLoops ? null : new KSet<>();
|
||||||
CNG gx = xStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
CNG gx = xStyle.getGenerator().create(rng.nextParallelRNG(14567), data);
|
||||||
CNG gy = yStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
CNG gy = yStyle.getGenerator().create(rng.nextParallelRNG(64789), data);
|
||||||
CNG gz = zStyle.getGenerator().createNoCache(new RNG(rng.lmax()), data);
|
CNG gz = zStyle.getGenerator().create(rng.nextParallelRNG(34790), data);
|
||||||
|
|
||||||
while (itr-- > 0) {
|
while (itr-- > 0) {
|
||||||
IrisPosition current = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz));
|
IrisPosition current = new IrisPosition(Math.round(cx), Math.round(cy), Math.round(cz));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user