diff --git a/common/src/main/java/com/dfsek/terra/api/util/MapUtil.java b/common/src/main/java/com/dfsek/terra/api/util/MapUtil.java index 2e421927b..4732843d1 100644 --- a/common/src/main/java/com/dfsek/terra/api/util/MapUtil.java +++ b/common/src/main/java/com/dfsek/terra/api/util/MapUtil.java @@ -15,4 +15,8 @@ public final class MapUtil { public static Map remap(Function keys, Function values, Map in) { return remap(keys, values, in, HashMap::new); } + + public static Map remapValues(Function values, Map in) { + return remap(Function.identity(), values, in); + } } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/CellularNoiseTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/CellularNoiseTemplate.java index 90a53d277..eb6dd51c1 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/CellularNoiseTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/CellularNoiseTemplate.java @@ -2,6 +2,7 @@ package com.dfsek.terra.config.loaders.config.sampler.templates.noise; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.meta.MetaValue; import com.dfsek.terra.api.math.noise.NoiseSampler; import com.dfsek.terra.api.math.noise.samplers.noise.CellularSampler; import com.dfsek.terra.api.math.noise.samplers.noise.simplex.OpenSimplex2Sampler; @@ -11,20 +12,20 @@ import com.dfsek.terra.api.util.seeded.NoiseSeeded; public class CellularNoiseTemplate extends NoiseTemplate { @Value("distance") @Default - private CellularSampler.DistanceFunction cellularDistanceFunction = CellularSampler.DistanceFunction.EuclideanSq; + private MetaValue cellularDistanceFunction = MetaValue.of(CellularSampler.DistanceFunction.EuclideanSq); @Value("return") @Default - private CellularSampler.ReturnType cellularReturnType = CellularSampler.ReturnType.Distance; + private MetaValue cellularReturnType = MetaValue.of(CellularSampler.ReturnType.Distance); @Value("jitter") @Default - private double cellularJitter = 1.0D; + private MetaValue cellularJitter = MetaValue.of(1.0D); @Value("lookup") @Default - private NoiseSeeded lookup = new NoiseSeeded() { + private MetaValue lookup = MetaValue.of(new NoiseSeeded() { @Override public NoiseSampler apply(Long seed) { @@ -35,16 +36,16 @@ public class CellularNoiseTemplate extends NoiseTemplate { public int getDimensions() { return 2; } - }; + }); @Override public NoiseSampler apply(Long seed) { - CellularSampler sampler = new CellularSampler((int) (long) seed + salt); - sampler.setNoiseLookup(lookup.apply(seed)); - sampler.setFrequency(frequency); - sampler.setJitterModifier(cellularJitter); - sampler.setReturnType(cellularReturnType); - sampler.setDistanceFunction(cellularDistanceFunction); + CellularSampler sampler = new CellularSampler((int) (long) seed + salt.get()); + sampler.setNoiseLookup(lookup.get().apply(seed)); + sampler.setFrequency(frequency.get()); + sampler.setJitterModifier(cellularJitter.get()); + sampler.setReturnType(cellularReturnType.get()); + sampler.setDistanceFunction(cellularDistanceFunction.get()); return sampler; } } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ConstantNoiseTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ConstantNoiseTemplate.java index ba4aa14a4..07eddf64c 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ConstantNoiseTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ConstantNoiseTemplate.java @@ -2,6 +2,7 @@ package com.dfsek.terra.config.loaders.config.sampler.templates.noise; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.meta.MetaValue; import com.dfsek.terra.api.math.noise.NoiseSampler; import com.dfsek.terra.api.math.noise.samplers.noise.ConstantSampler; import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate; @@ -10,10 +11,10 @@ import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate; public class ConstantNoiseTemplate extends SamplerTemplate { @Value("value") @Default - private double value = 0d; + private MetaValue value = MetaValue.of(0d); @Override public NoiseSampler apply(Long seed) { - return new ConstantSampler(value); + return new ConstantSampler(value.get()); } } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ExpressionFunctionTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ExpressionFunctionTemplate.java index 90926aea6..c53a2444f 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ExpressionFunctionTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/ExpressionFunctionTemplate.java @@ -8,12 +8,13 @@ import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.config.ValidatedConfigTemplate; import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.terra.api.config.meta.MetaValue; import com.dfsek.terra.api.math.noise.NoiseSampler; import com.dfsek.terra.api.math.noise.samplers.noise.ExpressionFunction; -import com.dfsek.terra.api.math.paralithic.BlankFunction; import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction; import com.dfsek.terra.api.math.paralithic.noise.NoiseFunction2; import com.dfsek.terra.api.math.paralithic.noise.NoiseFunction3; +import com.dfsek.terra.api.util.MapUtil; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.config.loaders.config.function.FunctionTemplate; import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate; @@ -27,24 +28,24 @@ import java.util.Map; public class ExpressionFunctionTemplate extends SamplerTemplate implements ValidatedConfigTemplate { @Value("variables") @Default - private Map vars = new HashMap<>(); + private Map> vars = new HashMap<>(); @Value("equation") - private String equation; + private MetaValue equation; @Value("functions") @Default - private LinkedHashMap functions = new LinkedHashMap<>(); + private LinkedHashMap> functions = new LinkedHashMap<>(); @Value("expressions") @Default - private LinkedHashMap expressions = new LinkedHashMap<>(); + private LinkedHashMap> expressions = new LinkedHashMap<>(); @Override public NoiseSampler apply(Long seed) { try { Map noiseFunctionMap = generateFunctions(seed); - return new ExpressionFunction(noiseFunctionMap, equation, vars); + return new ExpressionFunction(noiseFunctionMap, equation.get(), MapUtil.remapValues(MetaValue::get, vars)); } catch(ParseException e) { throw new IllegalStateException(e); } @@ -54,7 +55,7 @@ public class ExpressionFunctionTemplate extends SamplerTemplate noiseFunctionMap = generateFunctions(0L); - new ExpressionFunction(noiseFunctionMap, equation, vars); + new ExpressionFunction(noiseFunctionMap, equation.get(), MapUtil.remapValues(MetaValue::get, vars)); } catch(ParseException e) { throw new ValidationException("Errors occurred while parsing noise equation: ", e); } @@ -64,14 +65,14 @@ public class ExpressionFunctionTemplate extends SamplerTemplate generateFunctions(Long seed) throws ParseException { Map noiseFunctionMap = new HashMap<>(); - for(Map.Entry entry : expressions.entrySet()) { + for(Map.Entry entry : MapUtil.remapValues(MetaValue::get, expressions).entrySet()) { noiseFunctionMap.put(entry.getKey(), UserDefinedFunction.newInstance(entry.getValue(), new Parser(), new Scope())); } functions.forEach((id, function) -> { - if(function.getDimensions() == 2) { - noiseFunctionMap.put(id, new NoiseFunction2(function.apply(seed))); - } else noiseFunctionMap.put(id, new NoiseFunction3(function.apply(seed))); + if(function.get().getDimensions() == 2) { + noiseFunctionMap.put(id, new NoiseFunction2(function.get().apply(seed))); + } else noiseFunctionMap.put(id, new NoiseFunction3(function.get().apply(seed))); }); return noiseFunctionMap; diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/GaborNoiseTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/GaborNoiseTemplate.java index b15aa75cd..112d7fd85 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/GaborNoiseTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/GaborNoiseTemplate.java @@ -2,39 +2,41 @@ package com.dfsek.terra.config.loaders.config.sampler.templates.noise; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.meta.MetaValue; import com.dfsek.terra.api.math.noise.NoiseSampler; import com.dfsek.terra.api.math.noise.samplers.noise.GaborNoiseSampler; +@SuppressWarnings("FieldMayBeFinal") public class GaborNoiseTemplate extends NoiseTemplate { @Value("rotation") @Default - private double rotation = 0.25; + private MetaValue rotation = MetaValue.of(0.25); @Value("isotropic") @Default - private boolean isotropic = true; + private MetaValue isotropic = MetaValue.of(true); @Value("deviation") @Default - private double deviation = 1.0; + private MetaValue deviation = MetaValue.of(1.0); @Value("impulses") @Default - private double impulses = 64d; + private MetaValue impulses = MetaValue.of(64d); @Value("frequency_0") @Default - private double f0 = 0.625; + private MetaValue f0 = MetaValue.of(0.625); @Override public NoiseSampler apply(Long seed) { - GaborNoiseSampler gaborNoiseSampler = new GaborNoiseSampler((int) (long) seed + salt); - gaborNoiseSampler.setFrequency(frequency); - gaborNoiseSampler.setRotation(rotation); - gaborNoiseSampler.setIsotropic(isotropic); - gaborNoiseSampler.setDeviation(deviation); - gaborNoiseSampler.setImpulsesPerKernel(impulses); - gaborNoiseSampler.setFrequency0(f0); + GaborNoiseSampler gaborNoiseSampler = new GaborNoiseSampler((int) (long) seed + salt.get()); + gaborNoiseSampler.setFrequency(frequency.get()); + gaborNoiseSampler.setRotation(rotation.get()); + gaborNoiseSampler.setIsotropic(isotropic.get()); + gaborNoiseSampler.setDeviation(deviation.get()); + gaborNoiseSampler.setImpulsesPerKernel(impulses.get()); + gaborNoiseSampler.setFrequency0(f0.get()); return gaborNoiseSampler; } } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/NoiseTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/NoiseTemplate.java index 9fb123865..d191368bb 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/NoiseTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/NoiseTemplate.java @@ -2,6 +2,7 @@ package com.dfsek.terra.config.loaders.config.sampler.templates.noise; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.meta.MetaValue; import com.dfsek.terra.api.math.noise.samplers.noise.NoiseFunction; import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate; @@ -9,9 +10,9 @@ import com.dfsek.terra.config.loaders.config.sampler.templates.SamplerTemplate; public abstract class NoiseTemplate extends SamplerTemplate { @Value("frequency") @Default - protected double frequency = 0.02d; + protected MetaValue frequency = MetaValue.of(0.02d); @Value("salt") @Default - protected int salt = 0; + protected MetaValue salt = MetaValue.of(0); } diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/SimpleNoiseTemplate.java b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/SimpleNoiseTemplate.java index 9c1ab1cb2..a6d2c8fc7 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/SimpleNoiseTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/config/sampler/templates/noise/SimpleNoiseTemplate.java @@ -14,8 +14,8 @@ public class SimpleNoiseTemplate extends NoiseTemplate { @Override public NoiseSampler apply(Long seed) { - NoiseFunction sampler = samplerSupplier.apply((int) (long) seed + salt); - sampler.setFrequency(frequency); + NoiseFunction sampler = samplerSupplier.apply((int) (long) seed + salt.get()); + sampler.setFrequency(frequency.get()); return sampler; } } diff --git a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java index 3b7fb8169..8c74dbe7a 100644 --- a/common/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java +++ b/common/src/main/java/com/dfsek/terra/config/pack/ConfigPackTemplate.java @@ -32,7 +32,7 @@ public class ConfigPackTemplate implements ConfigTemplate { @Value("noise") private Map> noiseBuilderMap; - private final Lazy> lazyNoiseBuilderMap = new Lazy<>(() -> MapUtil.remap(Function.identity(), MetaValue::get, noiseBuilderMap)); + private final Lazy> lazyNoiseBuilderMap = new Lazy<>(() -> MapUtil.remapValues(MetaValue::get, noiseBuilderMap)); @Value("addons") @Default @@ -41,7 +41,7 @@ public class ConfigPackTemplate implements ConfigTemplate { @Value("variables") @Default private Map> variables = new HashMap<>(); - private final Lazy> lazyVariables = new Lazy<>(() -> MapUtil.remap(Function.identity(), MetaValue::get, variables)); + private final Lazy> lazyVariables = new Lazy<>(() -> MapUtil.remapValues(MetaValue::get, variables)); @Value("beta.carving") @Default @@ -55,7 +55,7 @@ public class ConfigPackTemplate implements ConfigTemplate { @Value("structures.locatable") @Default private Map> locatable = new HashMap<>(); - private final Lazy> lazyLocatable = new Lazy<>(() -> MapUtil.remap(Function.identity(), MetaValue::get, locatable)); + private final Lazy> lazyLocatable = new Lazy<>(() -> MapUtil.remapValues(MetaValue::get, locatable)); @Value("blend.terrain.elevation") @Default