diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/BasicLayer.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/BasicLayer.java new file mode 100644 index 000000000..60c4778cb --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/BasicLayer.java @@ -0,0 +1,30 @@ +package com.volmit.iris.gen.v2.scaffold.layer; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class BasicLayer implements ProceduralLayer +{ + private final long seed; + private final double zoom; + private final double offsetX; + private final double offsetY; + private final double offsetZ; + + public BasicLayer(long seed, double zoom) + { + this(seed, zoom, 0D, 0D, 0D); + } + + public BasicLayer(long seed) + { + this(seed, 1D); + } + + public BasicLayer() + { + this(1337); + } +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralLayer.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralLayer.java new file mode 100644 index 000000000..b55f54858 --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralLayer.java @@ -0,0 +1,14 @@ +package com.volmit.iris.gen.v2.scaffold.layer; + +public interface ProceduralLayer +{ + public long getSeed(); + + public double getOffsetX(); + + public double getOffsetY(); + + public double getOffsetZ(); + + public double getZoom(); +} diff --git a/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java new file mode 100644 index 000000000..0aaf6ac7e --- /dev/null +++ b/src/main/java/com/volmit/iris/gen/v2/scaffold/layer/ProceduralStream.java @@ -0,0 +1,143 @@ +package com.volmit.iris.gen.v2.scaffold.layer; + +import java.util.List; +import java.util.function.Function; + +import com.volmit.iris.gen.v2.scaffold.Hunk; +import com.volmit.iris.gen.v2.scaffold.stream.CachedConversionStream; +import com.volmit.iris.gen.v2.scaffold.stream.ClampedStream; +import com.volmit.iris.gen.v2.scaffold.stream.ConversionStream; +import com.volmit.iris.gen.v2.scaffold.stream.FittedStream; +import com.volmit.iris.gen.v2.scaffold.stream.Interpolated; +import com.volmit.iris.gen.v2.scaffold.stream.OffsetStream; +import com.volmit.iris.gen.v2.scaffold.stream.RoundingStream; +import com.volmit.iris.gen.v2.scaffold.stream.SelectionStream; +import com.volmit.iris.gen.v2.scaffold.stream.ZoomStream; + +public interface ProceduralStream extends ProceduralLayer, Interpolated +{ + default ProceduralStream round() + { + return new RoundingStream(this); + } + + default ProceduralStream convert(Function converter) + { + return new ConversionStream(this, converter); + } + + default ProceduralStream convertCached(Function converter) + { + return new CachedConversionStream(this, converter); + } + + default ProceduralStream offset(double x, double y, double z) + { + return new OffsetStream(this, x, y, z); + } + + default ProceduralStream offset(double x, double z) + { + return new OffsetStream(this, x, 0, z); + } + + default ProceduralStream zoom(double x, double y, double z) + { + return new ZoomStream(this, x, y, z); + } + + default ProceduralStream zoom(double x, double z) + { + return new ZoomStream(this, x, 1, z); + } + + default ProceduralStream zoom(double all) + { + return new ZoomStream(this, all, all, all); + } + + default ProceduralStream select(V[] types) + { + return new SelectionStream(this, types); + } + + default ProceduralStream select(List types) + { + return new SelectionStream(this, types); + } + + default ProceduralStream clamp(double min, double max) + { + return new ClampedStream(this, min, max); + } + + default ProceduralStream fit(double min, double max) + { + return new FittedStream(this, min, max); + } + + default ProceduralStream fit(double inMin, double inMax, double min, double max) + { + return new FittedStream(this, inMin, inMax, min, max); + } + + default void fill(Hunk h, double x, double y, double z) + { + for(int i = 0; i < h.getWidth(); i++) + { + for(int j = 0; j < h.getHeight(); j++) + { + for(int k = 0; k < h.getDepth(); k++) + { + h.set(i, j, k, get(i + x, j + y, k + z)); + } + } + } + } + + default void fillUp2D(Hunk h, double x, double z, V v) + { + for(int i = 0; i < h.getWidth(); i++) + { + for(int k = 0; k < h.getDepth(); k++) + { + double n = getDouble(i + x, k + z); + + for(int j = 0; j < Math.min(h.getHeight(), n); j++) + { + h.set(i, j, k, v); + } + } + } + } + + default void fillUp2D(Hunk h, double x, double z, ProceduralStream v) + { + for(int i = 0; i < h.getWidth(); i++) + { + for(int k = 0; k < h.getDepth(); k++) + { + double n = getDouble(i + x, k + z); + + for(int j = 0; j < Math.min(h.getHeight(), n); j++) + { + h.set(i, j, k, v.get(i + x, j, k + z)); + } + } + } + } + + public T get(double x, double z); + + public T get(double x, double y, double z); + + default double getDouble(double x, double z) + { + return toDouble(get(x, z)); + } + + default double getDouble(double x, double y, double z) + { + return toDouble(get(x, y, z)); + } +}