From 1496d0e482edaf8c7e00fc228154ee0e6eca4e21 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sat, 17 Jul 2021 00:30:02 -0400 Subject: [PATCH] Stream api additions --- .../iris/engine/stream/ProceduralStream.java | 39 +++++++++++++++++++ .../stream/interpolation/Interpolated.java | 1 + 2 files changed, 40 insertions(+) diff --git a/src/main/java/com/volmit/iris/engine/stream/ProceduralStream.java b/src/main/java/com/volmit/iris/engine/stream/ProceduralStream.java index 4c0c17ca6..537fb24f4 100644 --- a/src/main/java/com/volmit/iris/engine/stream/ProceduralStream.java +++ b/src/main/java/com/volmit/iris/engine/stream/ProceduralStream.java @@ -20,6 +20,7 @@ package com.volmit.iris.engine.stream; import com.volmit.iris.Iris; import com.volmit.iris.engine.hunk.Hunk; +import com.volmit.iris.engine.object.IrisStyledRange; import com.volmit.iris.engine.object.common.IRare; import com.volmit.iris.engine.stream.arithmetic.*; import com.volmit.iris.engine.stream.convert.*; @@ -30,6 +31,7 @@ import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.function.Function2; import com.volmit.iris.util.function.Function3; import com.volmit.iris.util.function.Function4; +import com.volmit.iris.util.math.RNG; import java.util.List; import java.util.function.Function; @@ -63,6 +65,21 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new FunctionStream<>(f, f2, helper); } + default ProceduralStream chance(double chance) + { + return of((x, z) -> getDouble(x, z) < chance, Interpolated.BOOLEAN); + } + + default ProceduralStream seededChance(RNG brng, long rootSeed, double chance) + { + RNG rng = brng.nextParallelRNG(rootSeed - 3995L); + return of((x, z) -> { + double ch = getDouble(x, z); + rng.setSeed((long) (ch * Long.MAX_VALUE)); + return rng.chance(chance); + }, Interpolated.BOOLEAN); + } + default ProceduralStream profile() { return profile(10); } @@ -326,6 +343,20 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new SelectionStream(this, rarityTypes); } + default int countPossibilities(List types, Function loader) { + KList rarityTypes = new KList<>(); + int totalRarity = 0; + for (V i : types) { + totalRarity += IRare.get(loader.apply(i)); + } + + for (V i : types) { + rarityTypes.addMultiple(i, totalRarity / IRare.get(loader.apply(i))); + } + + return rarityTypes.size(); + } + default ProceduralStream clamp(double min, double max) { return new ClampedStream(this, min, max); } @@ -334,6 +365,14 @@ public interface ProceduralStream extends ProceduralLayer, Interpolated { return new FittedStream(this, min, max); } + default ProceduralStream style(RNG rng, IrisStyledRange range) + { + return ProceduralStream.of((x, z) -> { + double d = getDouble(x, z); + return range.get(rng,d, -d); + }, Interpolated.DOUBLE); + } + default ProceduralStream fit(double inMin, double inMax, double min, double max) { return new FittedStream(this, inMin, inMax, min, max); } diff --git a/src/main/java/com/volmit/iris/engine/stream/interpolation/Interpolated.java b/src/main/java/com/volmit/iris/engine/stream/interpolation/Interpolated.java index 5d60d1158..dcac6bbde 100644 --- a/src/main/java/com/volmit/iris/engine/stream/interpolation/Interpolated.java +++ b/src/main/java/com/volmit/iris/engine/stream/interpolation/Interpolated.java @@ -31,6 +31,7 @@ public interface Interpolated { Interpolated> CAVE_RESULTS = of((t) -> 0D, (t) -> null); Interpolated RNG = of((t) -> 0D, (t) -> null); Interpolated DOUBLE = of((t) -> t, (t) -> t); + Interpolated BOOLEAN = of((t) -> 0D, (t) -> false); Interpolated INT = of(Double::valueOf, Double::intValue); Interpolated LONG = of(Double::valueOf, Double::longValue);