diff --git a/src/main/java/com/volmit/iris/engine/object/IrisExpression.java b/src/main/java/com/volmit/iris/engine/object/IrisExpression.java index 1a3d06453..9660a9279 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisExpression.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisExpression.java @@ -26,6 +26,8 @@ import com.volmit.iris.engine.cache.AtomicCache; import com.volmit.iris.engine.object.annotations.ArrayType; import com.volmit.iris.engine.object.annotations.Desc; import com.volmit.iris.engine.object.annotations.Required; +import com.volmit.iris.engine.stream.ProceduralStream; +import com.volmit.iris.engine.stream.interpolation.Interpolated; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; import lombok.AllArgsConstructor; @@ -53,6 +55,7 @@ public class IrisExpression extends IrisRegistrant { private String expression; private transient AtomicCache expressionCache = new AtomicCache<>(); + private transient AtomicCache> streamCache = new AtomicCache<>(); private Expression expression() { return expressionCache.aquire(() -> { @@ -82,6 +85,12 @@ public class IrisExpression extends IrisRegistrant { }); } + public ProceduralStream stream(RNG rng) + { + return streamCache.aquire(() -> ProceduralStream.of((x, z) -> evaluate(rng, x, z), + (x, y, z) -> evaluate(rng, x, y, z), Interpolated.DOUBLE)); + } + public double evaluate(RNG rng, double x, double z) { double[] g = new double[3 + getVariables().size()]; int m = 0;