mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-03 08:25:31 +00:00
dont implement seedednoisesampler in noise addon
This commit is contained in:
parent
6f40e7b1f5
commit
f0441cbefc
@ -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));
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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++) {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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) -> {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user