diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/LazilyEvaluatedInterpolator.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/LazilyEvaluatedInterpolator.java index 34c20ad97..acec30493 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/LazilyEvaluatedInterpolator.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/math/interpolation/LazilyEvaluatedInterpolator.java @@ -3,16 +3,13 @@ package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation; import net.jafama.FastMath; import com.dfsek.terra.addons.chunkgenerator.config.noise.BiomeNoiseProperties; -import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import static com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation.Interpolator.lerp; public class LazilyEvaluatedInterpolator { - private final Double[][][] samples; - - private final NoiseSampler[][] samplers; + private final Double[] samples; // private final int chunkX; private final int chunkZ; @@ -25,12 +22,14 @@ public class LazilyEvaluatedInterpolator { private final long seed; private final int min; + private final int zMul, yMul; public LazilyEvaluatedInterpolator(BiomeProvider biomeProvider, int cx, int cz, int max, int min, int horizontalRes, int verticalRes, long seed) { int hSamples = FastMath.ceilToInt(16.0 / horizontalRes); int vSamples = FastMath.ceilToInt((double) (max - min) / verticalRes); - samples = new Double[hSamples + 1][vSamples + 1][hSamples + 1]; - samplers = new NoiseSampler[hSamples + 1][hSamples + 1]; + this.zMul = (hSamples + 1); + this.yMul = zMul * zMul; + samples = new Double[yMul * (vSamples + 1)]; this.chunkX = cx << 4; this.chunkZ = cz << 4; this.horizontalRes = horizontalRes; @@ -41,19 +40,19 @@ public class LazilyEvaluatedInterpolator { } private double sample(int x, int y, int z, int ox, int oy, int oz) { - Double sample = samples[x][y][z]; + int index = x + (z * zMul) + (y * yMul); + Double sample = samples[index]; if(sample == null) { int xi = ox + chunkX; int zi = oz + chunkZ; - NoiseSampler sampler = samplers[x][z]; - if(sampler == null) { - sampler = biomeProvider.getBiome(xi, y, zi, seed).getContext().get(BiomeNoiseProperties.class).carving(); - samplers[x][z] = sampler; - } - - sample = sampler.noise(seed, xi, oy, zi); - samples[x][y][z] = sample; + sample = biomeProvider + .getBiome(xi, y, zi, seed) + .getContext() + .get(BiomeNoiseProperties.class) + .carving() + .noise(seed, xi, oy, zi); + samples[index] = sample; } return sample; }