From 394d653978f60e935ff7c6275cd491a22debe981 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 30 Jul 2021 04:40:07 -0400 Subject: [PATCH] Hunk grow interp --- .../framework/EngineAssignedModifier.java | 3 + .../com/volmit/iris/engine/hunk/Hunk.java | 60 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java index 902136e6e..39e7e3ad6 100644 --- a/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java +++ b/src/main/java/com/volmit/iris/engine/framework/EngineAssignedModifier.java @@ -19,14 +19,17 @@ package com.volmit.iris.engine.framework; import com.volmit.iris.engine.hunk.Hunk; +import com.volmit.iris.util.documentation.BlockCoordinates; public abstract class EngineAssignedModifier extends EngineAssignedComponent implements EngineModifier { public EngineAssignedModifier(Engine engine, String name) { super(engine, name); } + @BlockCoordinates public abstract void onModify(int x, int z, Hunk output, boolean multicore); + @BlockCoordinates @Override public void modify(int x, int z, Hunk output, boolean multicore) { onModify(x, z, output, multicore); diff --git a/src/main/java/com/volmit/iris/engine/hunk/Hunk.java b/src/main/java/com/volmit/iris/engine/hunk/Hunk.java index 695d37ae7..a7dc1b381 100644 --- a/src/main/java/com/volmit/iris/engine/hunk/Hunk.java +++ b/src/main/java/com/volmit/iris/engine/hunk/Hunk.java @@ -21,8 +21,12 @@ package com.volmit.iris.engine.hunk; import com.volmit.iris.engine.hunk.io.HunkIOAdapter; import com.volmit.iris.engine.hunk.storage.*; import com.volmit.iris.engine.hunk.view.*; +import com.volmit.iris.engine.interpolation.InterpolationMethod; +import com.volmit.iris.engine.interpolation.InterpolationMethod3D; +import com.volmit.iris.engine.interpolation.IrisInterpolation; import com.volmit.iris.engine.parallel.BurstExecutor; import com.volmit.iris.engine.parallel.MultiBurst; +import com.volmit.iris.engine.stream.interpolation.Interpolated; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.function.*; import com.volmit.iris.util.oldnbt.ByteArrayTag; @@ -1182,4 +1186,60 @@ public interface Hunk { default void empty(T b) { fill(b); } + + /** + * Take a hunk and scale it up using interpolation + * @param scale the scale + * @param d the interpolation method + * @param interpolated the interpolated value converter + * @return the new hunk + */ + default Hunk interpolate3D(double scale, InterpolationMethod3D d, Interpolated interpolated) + { + Hunk t = Hunk.newArrayHunk((int)(getWidth() * scale), (int)(getHeight() * scale), (int)(getDepth() * scale)); + NoiseProvider3 n3 = (x,y,z) -> interpolated.toDouble( + t.get((int)(x/scale), + (int)(y/scale), + (int)(z/scale))); + + for(int i = 0; i < t.getWidth(); i++) + { + for(int j = 0; j < t.getHeight(); j++) + { + for(int k = 0; k < t.getDepth(); k++) + { + t.set(i, j, k, interpolated.fromDouble(IrisInterpolation.getNoise3D(d, i,j,k,scale, n3))); + } + } + } + + return t; + } + + /** + * Take a hunk and scale it up using interpolation + * 2D, (using only x and z) assumes the height is 1 + * @param scale the scale + * @param d the interpolation method + * @param interpolated the interpolated value converter + * @return the new hunk + */ + default Hunk interpolate2D(double scale, InterpolationMethod d, Interpolated interpolated) + { + Hunk t = Hunk.newArrayHunk((int)(getWidth() * scale), 1, (int)(getDepth() * scale)); + NoiseProvider n2 = (x,z) -> interpolated.toDouble( + t.get((int)(x/scale), + 0, + (int)(z/scale))); + + for(int i = 0; i < t.getWidth(); i++) + { + for(int j = 0; j < t.getDepth(); j++) + { + t.set(i, 0, j, interpolated.fromDouble(IrisInterpolation.getNoise(d, i,j,scale, n2))); + } + } + + return t; + } }