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 ca3aa1a44..500f44c85 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 @@ -97,6 +97,7 @@ public class NoiseAddon implements AddonInitializer { .applyLoader(CubicSpline.Point.class, CubicSplinePointTemplate::new); noiseRegistry.register(addon.key("LINEAR"), LinearNormalizerTemplate::new); + noiseRegistry.register(addon.key("LINEAR_MAP"), LinearMapNormalizerTemplate::new); noiseRegistry.register(addon.key("NORMAL"), NormalNormalizerTemplate::new); noiseRegistry.register(addon.key("CLAMP"), ClampNormalizerTemplate::new); noiseRegistry.register(addon.key("PROBABILITY"), ProbabilityNormalizerTemplate::new); diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java new file mode 100644 index 000000000..56a50ad54 --- /dev/null +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.addons.noise.config.templates.normalizer; + +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.addons.noise.normalizer.LinearMapNormalizer; +import com.dfsek.terra.api.noise.NoiseSampler; + + +public class LinearMapNormalizerTemplate extends NormalizerTemplate { + + @Value("from.a") + private double aFrom; + + @Value("from.b") + private double bFrom; + + @Value("to.a") + private double aTo; + + @Value("to.b") + private double bTo; + + @Override + public NoiseSampler get() { + return new LinearMapNormalizer(function, aFrom, aTo, bFrom, bTo); + } +} diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java new file mode 100644 index 000000000..d124ef8de --- /dev/null +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.addons.noise.normalizer; + +import com.dfsek.terra.api.noise.NoiseSampler; + + +public class LinearMapNormalizer extends Normalizer { + + private final double aFrom; + + private final double aTo; + + private final double bFrom; + + private final double bTo; + + public LinearMapNormalizer(NoiseSampler sampler, double aFrom, double aTo, double bFrom, double bTo) { + super(sampler); + this.aFrom = aFrom; + this.aTo = aTo; + this.bFrom = bFrom; + this.bTo = bTo; + } + + @Override + public double normalize(double in) { + return (in - aFrom) * (aTo - bTo) / (aFrom - bFrom) + aTo; + } +}