Ravines & Caves

This commit is contained in:
Daniel Mills 2020-11-02 11:39:53 -05:00
parent bd5ca76ef4
commit 8b720e103f
7 changed files with 68 additions and 40 deletions

View File

@ -49,7 +49,6 @@ public class IrisComplex implements DataProvider
private ProceduralStream<BlockData> rockStream;
private ProceduralStream<BlockData> fluidStream;
private ProceduralStream<BlockData> glassStream;
private ProceduralStream<KList<CaveResult>> caveStream;
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type)
{
@ -170,7 +169,6 @@ public class IrisComplex implements DataProvider
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
seaSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE));
caveStream = ProceduralStream.of((x, z) -> engine.getFramework().getCaveModifier().genCaves(x, z, x.intValue() & 15, z.intValue() & 15, null), Interpolated.CAVE_RESULTS);
//@done
}

View File

@ -37,26 +37,14 @@ public class IrisEngine implements Engine
@Override
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes) {
MultiBurst.burst.burst(
() -> getFramework().getEngineParallax().generateParallaxArea(x, z),
() -> Hunk.computeDual2D(getParallelism(), blocks, biomes, (xx,yy,zz,ha,hb) -> {
getFramework().getTerrainActuator().actuate(x+xx, z+zz, ha);
getFramework().getBiomeActuator().actuate(x+xx, z+zz, hb);
})
);
getFramework().getEngineParallax().generateParallaxArea(x, z);
getFramework().getBiomeActuator().actuate(x, z, biomes);
getFramework().getTerrainActuator().actuate(x, z, blocks);
getFramework().getCaveModifier().modify(x, z, blocks);
getFramework().getRavineModifier().modify(x, z, blocks);
getFramework().getDepositModifier().modify(x, z, blocks);
blocks.compute2D(getParallelism(), (xx,yy,zz,ha) -> {
getFramework().getDecorantActuator().actuate(x+xx, z+zz, ha);
getFramework().getEngineParallax().insertParallax(x, z, ha);
});
if(M.r(0.1))
{
MultiBurst.burst.lazy(() -> {
getParallax().cleanup();
getData().getObjectLoader().clean();
});
}
getFramework().getDecorantActuator().actuate(x, z, blocks);
getFramework().getEngineParallax().insertParallax(x, z, blocks);
getFramework().recycle();
}
}

View File

@ -1,14 +1,9 @@
package com.volmit.iris.v2.generator;
import com.volmit.iris.Iris;
import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisObjectPlacement;
import com.volmit.iris.util.B;
import com.volmit.iris.util.IObjectPlacer;
import com.volmit.iris.util.RNG;
import com.volmit.iris.v2.generator.actuator.*;
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier;
import com.volmit.iris.v2.generator.modifier.IrisDepositModifier;
import com.volmit.iris.v2.generator.modifier.IrisRavineModifier;
import com.volmit.iris.v2.scaffold.engine.*;
import lombok.Getter;
import org.bukkit.block.Biome;
@ -19,8 +14,6 @@ public class IrisEngineFramework implements EngineFramework {
@Getter
private final Engine engine;
@Getter
private final IrisCaveModifier caveModifier;
@Getter
private final IrisComplex complex;
@ -34,19 +27,21 @@ public class IrisEngineFramework implements EngineFramework {
@Getter
private final EngineActuator<BlockData> decorantActuator;
@Getter
private final EngineActuator<Biome> biomeActuator;
@Getter
private final EngineModifier<BlockData> depositModifier;
@Getter
private final EngineModifier<BlockData> caveModifier;
@Getter
private final EngineModifier<BlockData> ravineModifier;
@Getter
private final EngineActuator<Biome> biomeActuator;
public IrisEngineFramework(Engine engine)
{
this.engine = engine;
this.caveModifier = new IrisCaveModifier(engine);
this.complex = new IrisComplex(getEngine());
this.engineParallax = new IrisEngineParallax(getEngine());
this.terrainActuator = new IrisTerrainActuator(getEngine());
@ -54,5 +49,6 @@ public class IrisEngineFramework implements EngineFramework {
this.biomeActuator = new IrisBiomeActuator(getEngine());
this.depositModifier = new IrisDepositModifier(getEngine());
this.ravineModifier = new IrisRavineModifier(getEngine());
this.caveModifier = new IrisCaveModifier(engine);
}
}

View File

@ -1,6 +1,8 @@
package com.volmit.iris.v2.generator.modifier;
import com.volmit.iris.Iris;
import com.volmit.iris.noise.FastNoiseDouble;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisCaveLayer;
import com.volmit.iris.util.B;
import com.volmit.iris.util.CaveResult;
@ -36,7 +38,40 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
{
for(int j = 0; j < a.getDepth(); j++)
{
genCaves(x + i, z + j, i, j, a);
KList<CaveResult> caves = genCaves(x + i, z + j, i, j, a);
int he = (int) Math.round(getComplex().getHeightStream().get(x+i, z+j));
if(caves != null && caves.isNotEmpty())
{
IrisBiome cave = getComplex().getCaveBiomeStream().get(x + i, z + j);
if(cave == null)
{
continue;
}
for(CaveResult cl : caves)
{
if(cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0)
{
continue;
}
KList<BlockData> floor = cave.generateLayers(x + i, z + j, rng, cl.getFloor(), cl.getFloor(), getData());
KList<BlockData> ceiling = cave.generateLayers(x + i + 656, z + j - 656, rng,
he - cl.getCeiling(),
he - cl.getCeiling(), getData());
for(int g = 0; g < floor.size(); g++)
{
a.set(i, cl.getFloor() - g, j, floor.get(g));
}
for(int g = ceiling.size() - 1; g > 0; g--)
{
a.set(i, cl.getCeiling() + g, j, ceiling.get(g));
}
}
}
}
};
}

View File

@ -1,4 +1,4 @@
package com.volmit.iris.v2.generator.actuator;
package com.volmit.iris.v2.generator.modifier;
import com.volmit.iris.gen.TopographicTerrainProvider;
import com.volmit.iris.gen.scaffold.TerrainChunk;

View File

@ -1,4 +1,4 @@
package com.volmit.iris.v2.generator.actuator;
package com.volmit.iris.v2.generator.modifier;
import com.volmit.iris.gen.atomics.AtomicSliverMap;
import com.volmit.iris.gen.scaffold.TerrainChunk;

View File

@ -1,8 +1,8 @@
package com.volmit.iris.v2.scaffold.engine;
import com.volmit.iris.v2.generator.IrisEngine;
import com.volmit.iris.v2.generator.actuator.IrisRavineModifier;
import com.volmit.iris.util.M;
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier;
import com.volmit.iris.v2.scaffold.parallel.MultiBurst;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
@ -22,13 +22,24 @@ public interface EngineFramework extends DataProvider
return getComplex().getData();
}
default void recycle()
{
if(M.r(0.1))
{
MultiBurst.burst.lazy(() -> {
getEngine().getParallax().cleanup();
getData().getObjectLoader().clean();
});
}
}
public EngineActuator<BlockData> getTerrainActuator();
public EngineActuator<BlockData> getDecorantActuator();
public EngineActuator<Biome> getBiomeActuator();
public IrisCaveModifier getCaveModifier();
public EngineModifier<BlockData> getCaveModifier();
public EngineModifier<BlockData> getRavineModifier();