mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Hunk grow interp
This commit is contained in:
parent
742fa27029
commit
394d653978
@ -19,14 +19,17 @@
|
|||||||
package com.volmit.iris.engine.framework;
|
package com.volmit.iris.engine.framework;
|
||||||
|
|
||||||
import com.volmit.iris.engine.hunk.Hunk;
|
import com.volmit.iris.engine.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.documentation.BlockCoordinates;
|
||||||
|
|
||||||
public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent implements EngineModifier<T> {
|
public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent implements EngineModifier<T> {
|
||||||
public EngineAssignedModifier(Engine engine, String name) {
|
public EngineAssignedModifier(Engine engine, String name) {
|
||||||
super(engine, name);
|
super(engine, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@BlockCoordinates
|
||||||
public abstract void onModify(int x, int z, Hunk<T> output, boolean multicore);
|
public abstract void onModify(int x, int z, Hunk<T> output, boolean multicore);
|
||||||
|
|
||||||
|
@BlockCoordinates
|
||||||
@Override
|
@Override
|
||||||
public void modify(int x, int z, Hunk<T> output, boolean multicore) {
|
public void modify(int x, int z, Hunk<T> output, boolean multicore) {
|
||||||
onModify(x, z, output, multicore);
|
onModify(x, z, output, multicore);
|
||||||
|
@ -21,8 +21,12 @@ package com.volmit.iris.engine.hunk;
|
|||||||
import com.volmit.iris.engine.hunk.io.HunkIOAdapter;
|
import com.volmit.iris.engine.hunk.io.HunkIOAdapter;
|
||||||
import com.volmit.iris.engine.hunk.storage.*;
|
import com.volmit.iris.engine.hunk.storage.*;
|
||||||
import com.volmit.iris.engine.hunk.view.*;
|
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.BurstExecutor;
|
||||||
import com.volmit.iris.engine.parallel.MultiBurst;
|
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.collection.KList;
|
||||||
import com.volmit.iris.util.function.*;
|
import com.volmit.iris.util.function.*;
|
||||||
import com.volmit.iris.util.oldnbt.ByteArrayTag;
|
import com.volmit.iris.util.oldnbt.ByteArrayTag;
|
||||||
@ -1182,4 +1186,60 @@ public interface Hunk<T> {
|
|||||||
default void empty(T b) {
|
default void empty(T b) {
|
||||||
fill(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<T> interpolate3D(double scale, InterpolationMethod3D d, Interpolated<T> interpolated)
|
||||||
|
{
|
||||||
|
Hunk<T> 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<T> interpolate2D(double scale, InterpolationMethod d, Interpolated<T> interpolated)
|
||||||
|
{
|
||||||
|
Hunk<T> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user