make salt long

This commit is contained in:
dfsek
2021-07-20 17:34:33 -07:00
parent 7b1853823c
commit d6e2acce38
7 changed files with 27 additions and 6 deletions
@@ -1,5 +1,6 @@
package com.dfsek.terra.addons.feature.distributor.config; package com.dfsek.terra.addons.feature.distributor.config;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.addons.feature.distributor.distributors.NoiseDistributor; import com.dfsek.terra.addons.feature.distributor.distributors.NoiseDistributor;
@@ -10,8 +11,12 @@ public class NoiseDistributorTemplate implements ObjectTemplate<Distributor> {
@Value("distribution") @Value("distribution")
private NoiseSampler noise; private NoiseSampler noise;
@Value("threshold")
@Default
private double threshold = 0;
@Override @Override
public Distributor get() { public Distributor get() {
return new NoiseDistributor(noise); return new NoiseDistributor(noise, threshold);
} }
} }
@@ -6,12 +6,14 @@ import com.dfsek.terra.api.structure.feature.Distributor;
public class NoiseDistributor implements Distributor { public class NoiseDistributor implements Distributor {
private final NoiseSampler sampler; private final NoiseSampler sampler;
public NoiseDistributor(NoiseSampler sampler) { private final double threshold;
public NoiseDistributor(NoiseSampler sampler, double threshold) {
this.sampler = sampler; this.sampler = sampler;
this.threshold = threshold;
} }
@Override @Override
public boolean matches(int x, int z, long seed) { public boolean matches(int x, int z, long seed) {
return sampler.getNoiseSeeded(seed, x, z) > 0; return sampler.getNoiseSeeded(seed, x, z) > threshold;
} }
} }
@@ -33,6 +33,7 @@ public class CellularNoiseTemplate extends NoiseTemplate<CellularSampler> {
sampler.setJitterModifier(cellularJitter); sampler.setJitterModifier(cellularJitter);
sampler.setReturnType(cellularReturnType); sampler.setReturnType(cellularReturnType);
sampler.setDistanceFunction(cellularDistanceFunction); sampler.setDistanceFunction(cellularDistanceFunction);
sampler.setSalt(salt);
return sampler; return sampler;
} }
} }
@@ -35,6 +35,7 @@ public class GaborNoiseTemplate extends NoiseTemplate<GaborNoiseSampler> {
gaborNoiseSampler.setDeviation(deviation); gaborNoiseSampler.setDeviation(deviation);
gaborNoiseSampler.setImpulsesPerKernel(impulses); gaborNoiseSampler.setImpulsesPerKernel(impulses);
gaborNoiseSampler.setFrequency0(f0); gaborNoiseSampler.setFrequency0(f0);
gaborNoiseSampler.setSalt(salt);
return gaborNoiseSampler; return gaborNoiseSampler;
} }
} }
@@ -4,6 +4,7 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate; import com.dfsek.terra.addons.noise.config.templates.SamplerTemplate;
import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction; import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.api.noise.NoiseSampler;
@SuppressWarnings({"unused", "FieldMayBeFinal"}) @SuppressWarnings({"unused", "FieldMayBeFinal"})
public abstract class NoiseTemplate<T extends NoiseFunction> extends SamplerTemplate<T> { public abstract class NoiseTemplate<T extends NoiseFunction> extends SamplerTemplate<T> {
@@ -13,5 +14,5 @@ public abstract class NoiseTemplate<T extends NoiseFunction> extends SamplerTemp
@Value("salt") @Value("salt")
@Default @Default
protected int salt = 0; protected long salt = 0;
} }
@@ -17,6 +17,7 @@ public class SimpleNoiseTemplate extends NoiseTemplate<NoiseFunction> {
public NoiseSampler get() { public NoiseSampler get() {
NoiseFunction sampler = samplerSupplier.get(); NoiseFunction sampler = samplerSupplier.get();
sampler.setFrequency(frequency); sampler.setFrequency(frequency);
sampler.setSalt(salt);
return sampler; return sampler;
} }
} }
@@ -21,6 +21,16 @@ public abstract class NoiseFunction implements NoiseSampler {
protected double frequency = 0.02d; protected double frequency = 0.02d;
protected long salt;
public void setSalt(long salt) {
this.salt = salt;
}
public NoiseFunction() {
this.salt = 0;
}
protected static int fastFloor(double f) { protected static int fastFloor(double f) {
return f >= 0 ? (int) f : (int) f - 1; return f >= 0 ? (int) f : (int) f - 1;
} }
@@ -119,12 +129,12 @@ public abstract class NoiseFunction implements NoiseSampler {
@Override @Override
public double getNoiseSeeded(long seed, double x, double y) { public double getNoiseSeeded(long seed, double x, double y) {
return getNoiseRaw(seed, x * frequency, y * frequency); return getNoiseRaw(seed + salt, x * frequency, y * frequency);
} }
@Override @Override
public double getNoiseSeeded(long seed, double x, double y, double z) { public double getNoiseSeeded(long seed, double x, double y, double z) {
return getNoiseRaw(seed, x * frequency, y * frequency, z * frequency); return getNoiseRaw(seed + salt, x * frequency, y * frequency, z * frequency);
} }
public abstract double getNoiseRaw(long seed, double x, double y); public abstract double getNoiseRaw(long seed, double x, double y);