Parallax customize vacuum interp

This commit is contained in:
Daniel Mills 2021-07-26 13:20:50 -04:00
parent 05aa0c2482
commit 82b995f96f
2 changed files with 18 additions and 8 deletions

View File

@ -572,7 +572,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}
default void place(RNG rng, int x, int forceY, int z, IrisObjectPlacement objectPlacement) {
for (int i = 0; i < objectPlacement.getDensity(); i++) {
placing: for (int i = 0; i < objectPlacement.getDensity(); i++) {
IrisObject v = objectPlacement.getScale().get(rng, objectPlacement.getObject(getComplex(), rng));
if (v == null) {
return;
@ -580,10 +580,7 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
int xx = rng.i(x, x + 16);
int zz = rng.i(z, z + 16);
int id = rng.i(0, Integer.MAX_VALUE);
int maxf = 10000;
AtomicBoolean pl = new AtomicBoolean(false);
AtomicInteger max = new AtomicInteger(-1);
AtomicInteger min = new AtomicInteger(maxf);
int h = v.place(xx, forceY, zz, this, objectPlacement, rng, (b) -> {
int xf = b.getX();
int yf = b.getY();
@ -597,14 +594,16 @@ public interface EngineParallaxManager extends DataProvider, IObjectPlacer {
}, null, getData());
if (objectPlacement.isVacuum()) {
ParallaxChunkMeta rw = getParallaxAccess().getMetaRW(xx >> 4, zz >> 4);
double a = Math.max(v.getW(), v.getD());
IrisFeature f = new IrisFeature();
f.setConvergeToHeight(h - (v.getH() >> 1));
f.setBlockRadius(a);
f.setInterpolationRadius(a / 4);
f.setInterpolator(InterpolationMethod.BILINEAR_STARCAST_9);
f.setInterpolationRadius(objectPlacement.getVacuumInterpolationRadius());
f.setInterpolator(objectPlacement.getVacuumInterpolationMethod());
f.setStrength(1D);
getParallaxAccess().getMetaRW(xx >> 4, zz >> 4).getFeatures().add(new IrisFeaturePositional(xx, zz, f));
rw.getFeatures().add(new IrisFeaturePositional(xx, zz, f));
}
}
}

View File

@ -23,6 +23,7 @@ import com.volmit.iris.core.IrisDataManager;
import com.volmit.iris.engine.cache.AtomicCache;
import com.volmit.iris.engine.data.B;
import com.volmit.iris.engine.data.DataProvider;
import com.volmit.iris.engine.interpolation.InterpolationMethod;
import com.volmit.iris.engine.noise.CNG;
import com.volmit.iris.engine.object.annotations.*;
import com.volmit.iris.util.collection.KList;
@ -86,6 +87,16 @@ public class IrisObjectPlacement {
@Desc("When bore is enabled, lower min-y of the cuboid it removes")
private int boreExtendMinY = 0;
@MaxNumber(64)
@MinNumber(4)
@Desc("When vacuum is enabled, define the interpolation radius")
private int vacuumInterpolationRadius = 16;
@MaxNumber(64)
@MinNumber(4)
@Desc("When vacuum is enabled, define the interpolation method")
private InterpolationMethod vacuumInterpolationMethod = InterpolationMethod.BILINEAR_STARCAST_9;
@Desc("If set to true, objects will place on the terrain height, ignoring the water surface.")
private boolean underwater = false;