From 00aeb984197a576c3b0598de0c96f2c943ea4780 Mon Sep 17 00:00:00 2001 From: Astrash Date: Tue, 18 Jul 2023 14:27:36 +1000 Subject: [PATCH] Implement translation sampler --- .../dfsek/terra/addons/noise/NoiseAddon.java | 4 +++ .../templates/TranslateSamplerTemplate.java | 32 +++++++++++++++++++ .../noise/samplers/TranslateSampler.java | 27 ++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/TranslateSamplerTemplate.java create mode 100644 common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/TranslateSampler.java diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java index 1c226711a..2417921e7 100644 --- a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java @@ -21,6 +21,7 @@ import com.dfsek.terra.addons.noise.config.templates.FunctionTemplate; import com.dfsek.terra.addons.noise.config.templates.ImageSamplerTemplate; import com.dfsek.terra.addons.noise.config.templates.KernelTemplate; import com.dfsek.terra.addons.noise.config.templates.LinearHeightmapSamplerTemplate; +import com.dfsek.terra.addons.noise.config.templates.TranslateSamplerTemplate; import com.dfsek.terra.addons.noise.config.templates.noise.CellularNoiseTemplate; import com.dfsek.terra.addons.noise.config.templates.noise.ConstantNoiseTemplate; import com.dfsek.terra.addons.noise.config.templates.noise.ExpressionFunctionTemplate; @@ -117,12 +118,15 @@ public class NoiseAddon implements AddonInitializer { noiseRegistry.register(addon.key("WHITE_NOISE"), () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new)); noiseRegistry.register(addon.key("POSITIVE_WHITE_NOISE"), () -> new SimpleNoiseTemplate(PositiveWhiteNoiseSampler::new)); noiseRegistry.register(addon.key("GAUSSIAN"), () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new)); + + noiseRegistry.register(addon.key("DISTANCE"), DistanceSamplerTemplate::new); noiseRegistry.register(addon.key("CONSTANT"), ConstantNoiseTemplate::new); noiseRegistry.register(addon.key("KERNEL"), KernelTemplate::new); noiseRegistry.register(addon.key("LINEAR_HEIGHTMAP"), LinearHeightmapSamplerTemplate::new); + noiseRegistry.register(addon.key("TRANSLATE"), TranslateSamplerTemplate::new); noiseRegistry.register(addon.key("ADD"), () -> new BinaryArithmeticTemplate<>(AdditionSampler::new)); noiseRegistry.register(addon.key("SUB"), () -> new BinaryArithmeticTemplate<>(SubtractionSampler::new)); diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/TranslateSamplerTemplate.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/TranslateSamplerTemplate.java new file mode 100644 index 000000000..c08a8253f --- /dev/null +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/TranslateSamplerTemplate.java @@ -0,0 +1,32 @@ +package com.dfsek.terra.addons.noise.config.templates; + +import com.dfsek.tectonic.api.config.template.annotations.Default; +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.addons.noise.samplers.TranslateSampler; +import com.dfsek.terra.api.config.meta.Meta; +import com.dfsek.terra.api.noise.NoiseSampler; + + +public class TranslateSamplerTemplate extends SamplerTemplate { + + @Value("sampler") + private NoiseSampler sampler; + + @Value("x") + @Default + private @Meta double x = 0; + + @Value("y") + @Default + private @Meta double y = 0; + + @Value("z") + @Default + private @Meta double z = 0; + + @Override + public NoiseSampler get() { + return new TranslateSampler(sampler, x, y ,z); + } +} diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/TranslateSampler.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/TranslateSampler.java new file mode 100644 index 000000000..b634da5dc --- /dev/null +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/samplers/TranslateSampler.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.addons.noise.samplers; + +import com.dfsek.terra.api.noise.NoiseSampler; + + +public class TranslateSampler implements NoiseSampler { + + private final NoiseSampler sampler; + private final double dx, dy, dz; + + public TranslateSampler(NoiseSampler sampler, double dx, double dy, double dz) { + this.sampler = sampler; + this.dx = dx; + this.dy = dy; + this.dz = dz; + } + + @Override + public double noise(long seed, double x, double y) { + return sampler.noise(seed, x - dx, y - dz); + } + + @Override + public double noise(long seed, double x, double y, double z) { + return sampler.noise(seed, x - dx, y - dy, z - dz); + } +}