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> rockStream;
private ProceduralStream<BlockData> fluidStream; private ProceduralStream<BlockData> fluidStream;
private ProceduralStream<BlockData> glassStream; private ProceduralStream<BlockData> glassStream;
private ProceduralStream<KList<CaveResult>> caveStream;
public ProceduralStream<IrisBiome> getBiomeStream(InferredType type) 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)); .convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SHORE_LINE));
seaSurfaceDecoration = trueBiomeStream seaSurfaceDecoration = trueBiomeStream
.convertAware2D((b, xx,zz) -> decorateFor(b, xx, zz, DecorationPart.SEA_SURFACE)); .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 //@done
} }

View File

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

View File

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

View File

@ -1,6 +1,8 @@
package com.volmit.iris.v2.generator.modifier; package com.volmit.iris.v2.generator.modifier;
import com.volmit.iris.Iris;
import com.volmit.iris.noise.FastNoiseDouble; import com.volmit.iris.noise.FastNoiseDouble;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisCaveLayer; import com.volmit.iris.object.IrisCaveLayer;
import com.volmit.iris.util.B; import com.volmit.iris.util.B;
import com.volmit.iris.util.CaveResult; import com.volmit.iris.util.CaveResult;
@ -36,7 +38,40 @@ public class IrisCaveModifier extends EngineAssignedModifier<BlockData>
{ {
for(int j = 0; j < a.getDepth(); j++) 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.TopographicTerrainProvider;
import com.volmit.iris.gen.scaffold.TerrainChunk; 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.atomics.AtomicSliverMap;
import com.volmit.iris.gen.scaffold.TerrainChunk; import com.volmit.iris.gen.scaffold.TerrainChunk;

View File

@ -1,8 +1,8 @@
package com.volmit.iris.v2.scaffold.engine; package com.volmit.iris.v2.scaffold.engine;
import com.volmit.iris.v2.generator.IrisEngine; import com.volmit.iris.util.M;
import com.volmit.iris.v2.generator.actuator.IrisRavineModifier;
import com.volmit.iris.v2.generator.modifier.IrisCaveModifier; 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.Biome;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
@ -22,13 +22,24 @@ public interface EngineFramework extends DataProvider
return getComplex().getData(); 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> getTerrainActuator();
public EngineActuator<BlockData> getDecorantActuator(); public EngineActuator<BlockData> getDecorantActuator();
public EngineActuator<Biome> getBiomeActuator(); public EngineActuator<Biome> getBiomeActuator();
public IrisCaveModifier getCaveModifier(); public EngineModifier<BlockData> getCaveModifier();
public EngineModifier<BlockData> getRavineModifier(); public EngineModifier<BlockData> getRavineModifier();