From 98ffa0a2563848656255664ed930a06a286fe658 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Tue, 10 Aug 2021 03:33:16 -0400 Subject: [PATCH] Feature looping --- .../com/volmit/iris/engine/IrisComplex.java | 12 +++--- .../iris/engine/mantle/EngineMantle.java | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/IrisComplex.java b/src/main/java/com/volmit/iris/engine/IrisComplex.java index 83b8bf3bd..6888284d3 100644 --- a/src/main/java/com/volmit/iris/engine/IrisComplex.java +++ b/src/main/java/com/volmit/iris/engine/IrisComplex.java @@ -230,7 +230,7 @@ public class IrisComplex implements DataProvider { objectChanceStream = ProceduralStream.ofDouble((x, z) -> { if (engine.getDimension().hasFeatures(engine)) { AtomicDouble str = new AtomicDouble(1D); - for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) { + for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) { str.set(Math.min(str.get(), i.getObjectChanceModifier(x, z, rng, getData()))); } @@ -241,7 +241,7 @@ public class IrisComplex implements DataProvider { }); trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D, b -> focus)).convertAware2D((b, x, z) -> { - for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) { + for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) { IrisBiome bx = i.filter(x, z, b, rng); if (bx != null) { @@ -257,7 +257,7 @@ public class IrisComplex implements DataProvider { fixBiomeType(h, baseBiomeStream.get(x, z), regionStream.get(x, z), x, z, fluidHeight)) .convertAware2D((b, x, z) -> { - for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) { + for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) { IrisBiome bx = i.filter(x, z, b, rng); if (bx != null) { @@ -271,7 +271,7 @@ public class IrisComplex implements DataProvider { .cache2D(cacheSize); trueBiomeStream = focus != null ? ProceduralStream.of((x, y) -> focus, Interpolated.of(a -> 0D, b -> focus)).convertAware2D((b, x, z) -> { - for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) { + for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) { IrisBiome bx = i.filter(x, z, b, rng); if (bx != null) { @@ -287,7 +287,7 @@ public class IrisComplex implements DataProvider { fixBiomeType(h, baseBiomeStream.get(x, z), regionStream.get(x, z), x, z, fluidHeight)) .convertAware2D((b, x, z) -> { - for (IrisFeaturePositional i : engine.getEngineParallax().forEachFeature(x, z)) { + for (IrisFeaturePositional i : engine.getMantle().forEachFeature(x, z)) { IrisBiome bx = i.filter(x, z, b, rng); if (bx != null) { @@ -458,7 +458,7 @@ public class IrisComplex implements DataProvider { AtomicDouble noise = new AtomicDouble(h + fluidHeight + overlayStream.get(x, z)); if (features) { - List p = engine.getEngineParallax().forEachFeature(x, z); + List p = engine.getMantle().forEachFeature(x, z); for (IrisFeaturePositional i : p) { noise.set(i.filter(x, z, noise.get(), rng, getData())); diff --git a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java index 5fda1dfc0..33af3cebd 100644 --- a/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java +++ b/src/main/java/com/volmit/iris/engine/mantle/EngineMantle.java @@ -240,4 +240,42 @@ public interface EngineMantle extends IObjectPlacer { getMantle().iterateChunk(x, z, IrisFeaturePositional.class, (a,b,c,f) -> pos.add(f), MantleFlag.FEATURE); return pos; } + + @BlockCoordinates + default KList forEachFeature(double x, double z) { + KList pos = new KList<>(); + + if (!getEngine().getDimension().hasFeatures(getEngine())) { + return pos; + } + + for (IrisFeaturePositional i : getEngine().getDimension().getSpecificFeatures()) { + if (i.shouldFilter(x, z, getEngine().getComplex().getRng(), getData())) { + pos.add(i); + } + } + + int s = getRealRadius(); + int i, j; + int cx = (int) x >> 4; + int cz = (int) z >> 4; + + for (i = -s; i <= s; i++) { + for (j = -s; j <= s; j++) { + try { + for (IrisFeaturePositional k : getFeaturesInChunk(i + cx, j + cx)) { + if (k.shouldFilter(x, z, getEngine().getComplex().getRng(), getData())) { + pos.add(k); + } + } + } catch (Throwable e) { + Iris.error("FILTER ERROR" + " AT " + (cx + i) + " " + (j + cz)); + e.printStackTrace(); + Iris.reportError(e); + } + } + } + + return pos; + } }