dont implement seedednoisesampler in noise addon

This commit is contained in:
dfsek 2021-07-19 21:19:57 -07:00
parent 6f40e7b1f5
commit f0441cbefc
22 changed files with 54 additions and 59 deletions

View File

@ -1,6 +1,7 @@
package com.dfsek.terra.addons.noise;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
import com.dfsek.terra.addons.noise.config.NoiseSamplerBuilderLoader;
import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate;
import com.dfsek.terra.addons.noise.config.templates.ImageSamplerTemplate;
@ -32,6 +33,7 @@ import com.dfsek.terra.api.addon.annotations.Version;
import com.dfsek.terra.api.event.EventListener;
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.util.reflection.TypeKey;
import com.dfsek.terra.api.util.seeded.SeededNoiseSampler;
@ -47,7 +49,7 @@ public class NoiseAddon extends TerraAddon implements EventListener {
@Inject
private TerraPlugin plugin;
public static final TypeKey<Supplier<ObjectTemplate<SeededNoiseSampler>>> NOISE_SAMPLER_TOKEN = new TypeKey<>() {};
public static final TypeKey<Supplier<ObjectTemplate<NoiseSampler>>> NOISE_SAMPLER_TOKEN = new TypeKey<>() {};
@Override
public void initialize() {
@ -55,9 +57,9 @@ public class NoiseAddon extends TerraAddon implements EventListener {
}
public void packPreLoad(ConfigPackPreLoadEvent event) {
CheckedRegistry<Supplier<ObjectTemplate<SeededNoiseSampler>>> noiseRegistry = event.getPack().getOrCreateRegistry(NOISE_SAMPLER_TOKEN);
CheckedRegistry<Supplier<ObjectTemplate<NoiseSampler>>> noiseRegistry = event.getPack().getOrCreateRegistry(NOISE_SAMPLER_TOKEN);
event.getPack()
.applyLoader(SeededNoiseSampler.class, new NoiseSamplerBuilderLoader(noiseRegistry))
.applyLoader(NoiseSampler.class, new NoiseSamplerBuilderLoader(noiseRegistry))
.applyLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new)
.applyLoader(DomainWarpTemplate.class, DomainWarpTemplate::new)
.applyLoader(LinearNormalizerTemplate.class, LinearNormalizerTemplate::new)
@ -76,26 +78,26 @@ public class NoiseAddon extends TerraAddon implements EventListener {
noiseRegistry.register("PINGPONG", PingPongTemplate::new);
noiseRegistry.register("RIDGED", RidgedFractalTemplate::new);
noiseRegistry.register("OPENSIMPLEX2", () -> new SimpleNoiseTemplate(seed3 -> new OpenSimplex2Sampler()));
noiseRegistry.register("OPENSIMPLEX2S", () -> new SimpleNoiseTemplate(seed3 -> new OpenSimplex2SSampler()));
noiseRegistry.register("PERLIN", () -> new SimpleNoiseTemplate(seed2 -> new PerlinSampler()));
noiseRegistry.register("SIMPLEX", () -> new SimpleNoiseTemplate(seed2 -> new SimplexSampler()));
noiseRegistry.register("OPENSIMPLEX2", () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new));
noiseRegistry.register("OPENSIMPLEX2S", () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new));
noiseRegistry.register("PERLIN", () -> new SimpleNoiseTemplate(PerlinSampler::new));
noiseRegistry.register("SIMPLEX", () -> new SimpleNoiseTemplate(SimplexSampler::new));
noiseRegistry.register("GABOR", GaborNoiseTemplate::new);
noiseRegistry.register("VALUE", () -> new SimpleNoiseTemplate(ValueSampler::new));
noiseRegistry.register("VALUECUBIC", () -> new SimpleNoiseTemplate(seed1 -> new ValueCubicSampler()));
noiseRegistry.register("VALUECUBIC", () -> new SimpleNoiseTemplate(ValueCubicSampler::new));
noiseRegistry.register("CELLULAR", CellularNoiseTemplate::new);
noiseRegistry.register("WHITENOISE", () -> new SimpleNoiseTemplate(seed -> new WhiteNoiseSampler()));
noiseRegistry.register("GAUSSIAN", () -> new SimpleNoiseTemplate(seed -> new GaussianNoiseSampler()));
noiseRegistry.register("WHITENOISE", () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new));
noiseRegistry.register("GAUSSIAN", () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new));
noiseRegistry.register("CONSTANT", ConstantNoiseTemplate::new);
noiseRegistry.register("KERNEL", KernelTemplate::new);
Map<String, SeededNoiseSampler> packFunctions = new HashMap<>();
Map<String, DimensionApplicableNoiseSampler> packFunctions = new HashMap<>();
noiseRegistry.register("EXPRESSION", () -> new ExpressionFunctionTemplate(packFunctions));

View File

@ -2,15 +2,16 @@ package com.dfsek.terra.addons.noise;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
import com.dfsek.terra.api.util.seeded.SeededNoiseSampler;
import java.util.Map;
public class NoiseConfigPackTemplate implements ConfigTemplate {
@Value("noise")
private Map<String, SeededNoiseSampler> noiseBuilderMap;
private Map<String, DimensionApplicableNoiseSampler> noiseBuilderMap;
public Map<String, SeededNoiseSampler> getNoiseBuilderMap() {
public Map<String, DimensionApplicableNoiseSampler> getNoiseBuilderMap() {
return noiseBuilderMap;
}
}

View File

@ -6,6 +6,7 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.util.seeded.SeededNoiseSampler;
@ -15,21 +16,21 @@ import java.util.Map;
import java.util.function.Supplier;
@SuppressWarnings("unchecked")
public class NoiseSamplerBuilderLoader implements TypeLoader<SeededNoiseSampler> {
private final Registry<Supplier<ObjectTemplate<SeededNoiseSampler>>> noiseRegistry;
public class NoiseSamplerBuilderLoader implements TypeLoader<NoiseSampler> {
private final Registry<Supplier<ObjectTemplate<NoiseSampler>>> noiseRegistry;
public NoiseSamplerBuilderLoader(Registry<Supplier<ObjectTemplate<SeededNoiseSampler>>> noiseRegistry) {
public NoiseSamplerBuilderLoader(Registry<Supplier<ObjectTemplate<NoiseSampler>>> noiseRegistry) {
this.noiseRegistry = noiseRegistry;
}
@Override
public SeededNoiseSampler load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException {
public NoiseSampler load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException {
Map<String, Object> map = (Map<String, Object>) c;
try {
if(!noiseRegistry.contains((String) map.get("type"))) {
throw new LoadException("No such noise function: " + map.get("type"));
}
ObjectTemplate<SeededNoiseSampler> normalizerTemplate = noiseRegistry.get(((String) map.get("type")).toUpperCase(Locale.ROOT)).get();
ObjectTemplate<NoiseSampler> normalizerTemplate = noiseRegistry.get(((String) map.get("type"))).get();
loader.load(normalizerTemplate, new MapConfiguration(map));
return normalizerTemplate.get();
} catch(ConfigException e) {

View File

@ -23,7 +23,7 @@ public class DomainWarpTemplate extends SamplerTemplate<DomainWarpedSampler> {
private double amplitude = 1;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
return new DomainWarpedSampler(function, warp, amplitude);
}
}

View File

@ -19,7 +19,7 @@ public class ImageSamplerTemplate extends SamplerTemplate<ImageSampler> {
private ImageSampler.Channel channel;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
return new ImageSampler(image, channel, frequency);
}
}

View File

@ -28,7 +28,7 @@ public class KernelTemplate extends SamplerTemplate<KernelSampler> implements Va
private double frequency = 1;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
double[][] k = new double[kernel.size()][kernel.get(0).size()];
for(int x = 0; x < kernel.size(); x++) {

View File

@ -6,10 +6,9 @@ import com.dfsek.tectonic.config.ValidatedConfigTemplate;
import com.dfsek.tectonic.exception.ValidationException;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.seeded.SeededNoiseSampler;
@SuppressWarnings("FieldMayBeFinal")
public abstract class SamplerTemplate<T extends NoiseSampler> implements ValidatedConfigTemplate, ObjectTemplate<SeededNoiseSampler>, SeededNoiseSampler {
public abstract class SamplerTemplate<T extends NoiseSampler> implements ValidatedConfigTemplate, ObjectTemplate<NoiseSampler> {
@Value("dimensions")
@Default
private int dimensions = 2;
@ -23,9 +22,4 @@ public abstract class SamplerTemplate<T extends NoiseSampler> implements Validat
if(dimensions != 2 && dimensions != 3) throw new ValidationException("Illegal amount of dimensions: " + dimensions);
return true;
}
@Override
public SeededNoiseSampler get() {
return this;
}
}

View File

@ -27,7 +27,7 @@ public class CellularNoiseTemplate extends NoiseTemplate<CellularSampler> {
private NoiseSampler lookup = new OpenSimplex2Sampler();
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
CellularSampler sampler = new CellularSampler();
sampler.setNoiseLookup(lookup);
sampler.setFrequency(frequency);

View File

@ -13,7 +13,7 @@ public class ConstantNoiseTemplate extends SamplerTemplate<ConstantSampler> {
private double value = 0d;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
return new ConstantSampler(value);
}
}

View File

@ -25,7 +25,7 @@ import java.util.Map;
@SuppressWarnings({"FieldMayBeFinal", "unused"})
public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFunction> implements ValidatedConfigTemplate {
private final Map<String, SeededNoiseSampler> otherFunctions;
private final Map<String, DimensionApplicableNoiseSampler> otherFunctions;
@Value("variables")
@Default
private Map<String, Double> vars = new HashMap<>();
@ -38,14 +38,14 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
@Default
private LinkedHashMap<String, FunctionTemplate> expressions = new LinkedHashMap<>();
public ExpressionFunctionTemplate(Map<String, SeededNoiseSampler> otherFunctions) {
public ExpressionFunctionTemplate(Map<String, DimensionApplicableNoiseSampler> otherFunctions) {
this.otherFunctions = otherFunctions;
}
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
try {
Map<String, Function> noiseFunctionMap = generateFunctions(seed);
Map<String, Function> noiseFunctionMap = generateFunctions();
return new ExpressionFunction(noiseFunctionMap, equation, vars);
} catch(ParseException e) {
throw new IllegalStateException(e);
@ -55,7 +55,7 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
@Override
public boolean validate() throws ValidationException {
try {
Map<String, Function> noiseFunctionMap = generateFunctions(0L);
Map<String, Function> noiseFunctionMap = generateFunctions();
new ExpressionFunction(noiseFunctionMap, equation, vars);
} catch(ParseException e) {
throw new ValidationException("Errors occurred while parsing noise equation: ", e);
@ -63,7 +63,7 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
return super.validate();
}
private Map<String, Function> generateFunctions(Long seed) throws ParseException {
private Map<String, Function> generateFunctions() throws ParseException {
Map<String, Function> noiseFunctionMap = new HashMap<>();
for(Map.Entry<String, FunctionTemplate> entry : expressions.entrySet()) {
@ -72,8 +72,8 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
otherFunctions.forEach((id, function) -> {
if(function.getDimensions() == 2) {
noiseFunctionMap.put(id, new NoiseFunction2(function.build(seed)));
} else noiseFunctionMap.put(id, new NoiseFunction3(function.build(seed)));
noiseFunctionMap.put(id, new NoiseFunction2(function.getSampler()));
} else noiseFunctionMap.put(id, new NoiseFunction3(function.getSampler()));
});
functions.forEach((id, function) -> {

View File

@ -27,7 +27,7 @@ public class GaborNoiseTemplate extends NoiseTemplate<GaborNoiseSampler> {
private double f0 = 0.625;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
GaborNoiseSampler gaborNoiseSampler = new GaborNoiseSampler();
gaborNoiseSampler.setFrequency(frequency);
gaborNoiseSampler.setRotation(rotation);

View File

@ -4,17 +4,18 @@ import com.dfsek.terra.addons.noise.samplers.noise.NoiseFunction;
import com.dfsek.terra.api.noise.NoiseSampler;
import java.util.function.Function;
import java.util.function.Supplier;
public class SimpleNoiseTemplate extends NoiseTemplate<NoiseFunction> {
private final Function<Integer, NoiseFunction> samplerSupplier;
private final Supplier<NoiseFunction> samplerSupplier;
public SimpleNoiseTemplate(Function<Integer, NoiseFunction> samplerSupplier) {
public SimpleNoiseTemplate(Supplier<NoiseFunction> samplerSupplier) {
this.samplerSupplier = samplerSupplier;
}
@Override
public NoiseSampler build(long seed) {
NoiseFunction sampler = samplerSupplier.apply((int) seed + salt);
public NoiseSampler get() {
NoiseFunction sampler = samplerSupplier.get();
sampler.setFrequency(frequency);
return sampler;
}

View File

@ -5,8 +5,8 @@ import com.dfsek.terra.api.noise.NoiseSampler;
public class BrownianMotionTemplate extends FractalTemplate<BrownianMotionSampler> {
@Override
public NoiseSampler build(long seed) {
BrownianMotionSampler sampler = new BrownianMotionSampler((int) seed, function);
public NoiseSampler get() {
BrownianMotionSampler sampler = new BrownianMotionSampler(function);
sampler.setGain(fractalGain);
sampler.setLacunarity(fractalLacunarity);
sampler.setOctaves(octaves);

View File

@ -12,8 +12,8 @@ public class PingPongTemplate extends FractalTemplate<PingPongSampler> {
private double pingPong = 2.0D;
@Override
public NoiseSampler build(long seed) {
PingPongSampler sampler = new PingPongSampler((int) seed, function);
public NoiseSampler get() {
PingPongSampler sampler = new PingPongSampler(function);
sampler.setGain(fractalGain);
sampler.setLacunarity(fractalLacunarity);
sampler.setOctaves(octaves);

View File

@ -5,8 +5,8 @@ import com.dfsek.terra.api.noise.NoiseSampler;
public class RidgedFractalTemplate extends FractalTemplate<RidgedFractalSampler> {
@Override
public NoiseSampler build(long seed) {
RidgedFractalSampler sampler = new RidgedFractalSampler((int) seed, function);
public NoiseSampler get() {
RidgedFractalSampler sampler = new RidgedFractalSampler(function);
sampler.setGain(fractalGain);
sampler.setLacunarity(fractalLacunarity);
sampler.setOctaves(octaves);

View File

@ -13,7 +13,7 @@ public class ClampNormalizerTemplate extends NormalizerTemplate<ClampNormalizer>
private double min;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
return new ClampNormalizer(function, min, max);
}
}

View File

@ -13,7 +13,7 @@ public class LinearNormalizerTemplate extends NormalizerTemplate<LinearNormalize
private double min;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
return new LinearNormalizer(function, min, max);
}
}

View File

@ -18,7 +18,7 @@ public class NormalNormalizerTemplate extends NormalizerTemplate<NormalNormalize
private int groups = 16384;
@Override
public NoiseSampler build(long seed) {
public NoiseSampler get() {
return new NormalNormalizer(function, groups, mean, stdDev);
}
}

View File

@ -3,7 +3,7 @@ package com.dfsek.terra.addons.noise.samplers.noise.fractal;
import com.dfsek.terra.api.noise.NoiseSampler;
public class BrownianMotionSampler extends FractalNoiseFunction {
public BrownianMotionSampler(int seed, NoiseSampler input) {
public BrownianMotionSampler(NoiseSampler input) {
super(input);
}

View File

@ -5,7 +5,7 @@ import com.dfsek.terra.api.noise.NoiseSampler;
public class PingPongSampler extends FractalNoiseFunction {
private double pingPongStrength = 2.0;
public PingPongSampler(int seed, NoiseSampler input) {
public PingPongSampler(NoiseSampler input) {
super(input);
}

View File

@ -4,7 +4,7 @@ import com.dfsek.terra.api.noise.NoiseSampler;
public class RidgedFractalSampler extends FractalNoiseFunction {
public RidgedFractalSampler(int seed, NoiseSampler input) {
public RidgedFractalSampler(NoiseSampler input) {
super(input);
}

View File

@ -1,10 +1,6 @@
package com.dfsek.terra.addons.noise.samplers.noise.value;
public class ValueSampler extends ValueStyleNoise {
public ValueSampler(int seed) {
super();
}
@Override
public double getNoiseRaw(long sl, double x, double y) {
int seed = (int) sl;