diff --git a/common/src/main/java/com/dfsek/terra/api/math/MathUtil.java b/common/src/main/java/com/dfsek/terra/api/math/MathUtil.java index 7661ddcf1..8dd83ee90 100644 --- a/common/src/main/java/com/dfsek/terra/api/math/MathUtil.java +++ b/common/src/main/java/com/dfsek/terra/api/math/MathUtil.java @@ -109,7 +109,15 @@ public final class MathUtil { return FastMath.min(FastMath.max(in, -1), 1); } - public static double compute(double p, double mu, double sigma) { + /** + * Compute the value in a normally distributed data set that has probability p. + * + * @param p Probability of value + * @param mu Mean of data + * @param sigma Standard deviation of data + * @return Value corresponding to input probability + */ + public static double normalInverse(double p, double mu, double sigma) { if(p < 0 || p > 1) throw new IllegalArgumentException("Probability must be in range [0, 1]"); if(sigma < 0) @@ -159,7 +167,7 @@ public final class MathUtil { .14810397642748007459) * r + .68976733498510000455) * r + 1.6763848301838038494) * r + 2.05319162663775882187) * r + 1); - } else { /* very close to 0 or 1 */ + } else { r += -5; val = (((((((r * 2.01033439929228813265e-7 + 2.71155556874348757815e-5) * r + diff --git a/common/src/main/java/com/dfsek/terra/api/math/noise/normalizer/NormalNormalizer.java b/common/src/main/java/com/dfsek/terra/api/math/noise/normalizer/NormalNormalizer.java index c388e8e55..48fe178af 100644 --- a/common/src/main/java/com/dfsek/terra/api/math/noise/normalizer/NormalNormalizer.java +++ b/common/src/main/java/com/dfsek/terra/api/math/noise/normalizer/NormalNormalizer.java @@ -13,9 +13,8 @@ public class NormalNormalizer extends Normalizer { this.lookup = new double[buckets]; for(int i = 0; i < buckets; i++) { - lookup[i] = MathUtil.compute((double) i / buckets, mean, standardDeviation); + lookup[i] = MathUtil.normalInverse((double) i / buckets, mean, standardDeviation); } - } @Override diff --git a/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java b/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java index 74820c486..324851f71 100644 --- a/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java +++ b/common/src/main/java/com/dfsek/terra/api/world/biome/Generator.java @@ -37,10 +37,6 @@ public interface Generator { */ Palette getPalette(int y); - boolean is2d(); - - double get2dBase(); - NoiseSampler getBiomeNoise(); double getElevationWeight(); diff --git a/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java b/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java index 3b00f1898..c423a7a53 100644 --- a/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java +++ b/common/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java @@ -34,10 +34,6 @@ public class GeneratorBuilder { private boolean interpolateElevation; - private boolean noise2d; - - private double base; - private NoiseBuilder biomeNoise; private double elevationWeight; @@ -61,7 +57,7 @@ public class GeneratorBuilder { } catch(ParseException e) { throw new RuntimeException(e); } - return new WorldGenerator(palettes, slantPalettes, noise, elevation, carving, noise2d, base, biomeNoise.build((int) seed), elevationWeight, blendDistance, blendStep, blendWeight); + return new WorldGenerator(palettes, slantPalettes, noise, elevation, carving, biomeNoise.build((int) seed), elevationWeight, blendDistance, blendStep, blendWeight); }); } } @@ -82,38 +78,14 @@ public class GeneratorBuilder { this.biomeNoise = biomeNoise; } - public boolean isNoise2d() { - return noise2d; - } - - public void setNoise2d(boolean noise2d) { - this.noise2d = noise2d; - } - - public double getBase() { - return base; - } - - public void setBase(double base) { - this.base = base; - } - public void setElevationWeight(double elevationWeight) { this.elevationWeight = elevationWeight; } - public String getNoiseEquation() { - return noiseEquation; - } - public void setNoiseEquation(String noiseEquation) { this.noiseEquation = noiseEquation; } - public String getElevationEquation() { - return elevationEquation; - } - public void setElevationEquation(String elevationEquation) { this.elevationEquation = elevationEquation; } diff --git a/common/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java b/common/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java index 4a460ae03..29daeccff 100644 --- a/common/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java +++ b/common/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java @@ -30,8 +30,6 @@ public class BiomeFactory implements TerraFactory { generatorBuilder.setVarScope(vars); generatorBuilder.setInterpolateElevation(template.interpolateElevation()); - generatorBuilder.setNoise2d(template.isNoise2d()); - generatorBuilder.setBase(template.getNoise2dBase()); generatorBuilder.setElevationWeight(template.getElevationWeight()); generatorBuilder.setBiomeNoise(template.getBiomeNoise()); generatorBuilder.setBlendDistance(template.getBlendDistance()); diff --git a/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java b/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java index c832c7d85..4e7c98301 100644 --- a/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java @@ -53,16 +53,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Default private String carvingEquation = "0"; - @Value("noise-2d.enable") - @Default - @Abstractable - private boolean noise2d = false; - - @Value("noise-2d.base") - @Default - @Abstractable - private double noise2dBase = 64; - @Value("palette") @Abstractable private PaletteHolder palette; @@ -298,14 +288,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return oreHolder; } - public boolean isNoise2d() { - return noise2d; - } - - public double getNoise2dBase() { - return noise2dBase; - } - public double getElevationWeight() { return elevationWeight; } diff --git a/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java b/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java index c2a739a09..cb6516364 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java @@ -16,23 +16,19 @@ public class WorldGenerator implements Generator { private final NoiseSampler elevation; private final NoiseSampler carving; - private final boolean noise2d; - private final double base; private final NoiseSampler biomeNoise; private final double elevationWeight; private final int blendDistance; private final int blendStep; private final double blendWeight; - public WorldGenerator(PaletteHolder palettes, PaletteHolder slantPalettes, NoiseSampler noise, NoiseSampler elevation, NoiseSampler carving, boolean noise2d, double base, NoiseSampler biomeNoise, double elevationWeight, int blendDistance, int blendStep, double blendWeight) { + public WorldGenerator(PaletteHolder palettes, PaletteHolder slantPalettes, NoiseSampler noise, NoiseSampler elevation, NoiseSampler carving, NoiseSampler biomeNoise, double elevationWeight, int blendDistance, int blendStep, double blendWeight) { this.palettes = palettes; this.slantPalettes = slantPalettes; this.noise = noise; this.elevation = elevation; this.carving = carving; - this.noise2d = noise2d; - this.base = base; this.biomeNoise = biomeNoise; this.elevationWeight = elevationWeight; this.blendDistance = blendDistance; @@ -75,16 +71,6 @@ public class WorldGenerator implements Generator { return palettes.getPalette(y); } - @Override - public boolean is2d() { - return noise2d; - } - - @Override - public double get2dBase() { - return base; - } - @Override public NoiseSampler getBiomeNoise() { return biomeNoise; diff --git a/common/src/main/java/com/dfsek/terra/world/generation/math/Sampler.java b/common/src/main/java/com/dfsek/terra/world/generation/math/Sampler.java index a80beac6d..41de6b12d 100644 --- a/common/src/main/java/com/dfsek/terra/world/generation/math/Sampler.java +++ b/common/src/main/java/com/dfsek/terra/world/generation/math/Sampler.java @@ -11,11 +11,7 @@ public class Sampler { private final ElevationInterpolator elevationInterpolator; public Sampler(int x, int z, BiomeProvider provider, World world, int elevationSmooth) { - this.interpolator = new BiomeChunkInterpolator(world, x, z, provider, (generator, coord) -> { - if(generator.is2d()) - return generator.getBaseSampler().getNoise(coord.getX(), 0, coord.getZ()) + noise2dExtrude(coord.getY(), generator.get2dBase()); - else return generator.getBaseSampler().getNoise(coord); - }); + this.interpolator = new BiomeChunkInterpolator(world, x, z, provider, (generator, coord) -> generator.getBaseSampler().getNoise(coord)); this.elevationInterpolator = new ElevationInterpolator(world, x, z, provider, elevationSmooth); }