From 8b720e103f4f30a14d69ecc93c116a106adb8121 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Mon, 2 Nov 2020 11:39:53 -0500 Subject: [PATCH] Ravines & Caves --- .../volmit/iris/v2/generator/IrisComplex.java | 2 - .../volmit/iris/v2/generator/IrisEngine.java | 26 ++++--------- .../v2/generator/IrisEngineFramework.java | 22 +++++------ .../generator/modifier/IrisCaveModifier.java | 37 ++++++++++++++++++- .../IrisDepositModifier.java | 2 +- .../IrisRavineModifier.java | 2 +- .../v2/scaffold/engine/EngineFramework.java | 17 +++++++-- 7 files changed, 68 insertions(+), 40 deletions(-) rename src/main/java/com/volmit/iris/v2/generator/{actuator => modifier}/IrisDepositModifier.java (98%) rename src/main/java/com/volmit/iris/v2/generator/{actuator => modifier}/IrisRavineModifier.java (99%) diff --git a/src/main/java/com/volmit/iris/v2/generator/IrisComplex.java b/src/main/java/com/volmit/iris/v2/generator/IrisComplex.java index ad60e87ac..fdfb79bb9 100644 --- a/src/main/java/com/volmit/iris/v2/generator/IrisComplex.java +++ b/src/main/java/com/volmit/iris/v2/generator/IrisComplex.java @@ -49,7 +49,6 @@ public class IrisComplex implements DataProvider private ProceduralStream rockStream; private ProceduralStream fluidStream; private ProceduralStream glassStream; - private ProceduralStream> caveStream; public ProceduralStream 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 } diff --git a/src/main/java/com/volmit/iris/v2/generator/IrisEngine.java b/src/main/java/com/volmit/iris/v2/generator/IrisEngine.java index 8750a787a..b57ad2506 100644 --- a/src/main/java/com/volmit/iris/v2/generator/IrisEngine.java +++ b/src/main/java/com/volmit/iris/v2/generator/IrisEngine.java @@ -37,26 +37,14 @@ public class IrisEngine implements Engine @Override public void generate(int x, int z, Hunk blocks, Hunk 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(); } } diff --git a/src/main/java/com/volmit/iris/v2/generator/IrisEngineFramework.java b/src/main/java/com/volmit/iris/v2/generator/IrisEngineFramework.java index a65a2b435..afb509d8c 100644 --- a/src/main/java/com/volmit/iris/v2/generator/IrisEngineFramework.java +++ b/src/main/java/com/volmit/iris/v2/generator/IrisEngineFramework.java @@ -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 decorantActuator; + @Getter + private final EngineActuator biomeActuator; + @Getter private final EngineModifier depositModifier; + @Getter + private final EngineModifier caveModifier; + @Getter private final EngineModifier ravineModifier; - @Getter - private final EngineActuator 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); } } diff --git a/src/main/java/com/volmit/iris/v2/generator/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/v2/generator/modifier/IrisCaveModifier.java index fbdcd5394..586ad518e 100644 --- a/src/main/java/com/volmit/iris/v2/generator/modifier/IrisCaveModifier.java +++ b/src/main/java/com/volmit/iris/v2/generator/modifier/IrisCaveModifier.java @@ -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 { for(int j = 0; j < a.getDepth(); j++) { - genCaves(x + i, z + j, i, j, a); + KList 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 floor = cave.generateLayers(x + i, z + j, rng, cl.getFloor(), cl.getFloor(), getData()); + KList 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)); + } + } + } } }; } diff --git a/src/main/java/com/volmit/iris/v2/generator/actuator/IrisDepositModifier.java b/src/main/java/com/volmit/iris/v2/generator/modifier/IrisDepositModifier.java similarity index 98% rename from src/main/java/com/volmit/iris/v2/generator/actuator/IrisDepositModifier.java rename to src/main/java/com/volmit/iris/v2/generator/modifier/IrisDepositModifier.java index 60cf170f8..901a89465 100644 --- a/src/main/java/com/volmit/iris/v2/generator/actuator/IrisDepositModifier.java +++ b/src/main/java/com/volmit/iris/v2/generator/modifier/IrisDepositModifier.java @@ -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; diff --git a/src/main/java/com/volmit/iris/v2/generator/actuator/IrisRavineModifier.java b/src/main/java/com/volmit/iris/v2/generator/modifier/IrisRavineModifier.java similarity index 99% rename from src/main/java/com/volmit/iris/v2/generator/actuator/IrisRavineModifier.java rename to src/main/java/com/volmit/iris/v2/generator/modifier/IrisRavineModifier.java index ac86f6082..e9158f4be 100644 --- a/src/main/java/com/volmit/iris/v2/generator/actuator/IrisRavineModifier.java +++ b/src/main/java/com/volmit/iris/v2/generator/modifier/IrisRavineModifier.java @@ -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; diff --git a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java index daa782a81..2b12b30f5 100644 --- a/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java +++ b/src/main/java/com/volmit/iris/v2/scaffold/engine/EngineFramework.java @@ -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 getTerrainActuator(); public EngineActuator getDecorantActuator(); public EngineActuator getBiomeActuator(); - public IrisCaveModifier getCaveModifier(); + public EngineModifier getCaveModifier(); public EngineModifier getRavineModifier();