mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
implement global and local functions in expression samplers
This commit is contained in:
parent
98d147a304
commit
9bcdc40eb5
@ -3,11 +3,13 @@ package com.dfsek.terra.addons.noise;
|
|||||||
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
||||||
import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate;
|
import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate;
|
||||||
|
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.ImageSamplerTemplate;
|
||||||
import com.dfsek.terra.addons.noise.config.templates.KernelTemplate;
|
import com.dfsek.terra.addons.noise.config.templates.KernelTemplate;
|
||||||
import com.dfsek.terra.addons.noise.config.templates.noise.CellularNoiseTemplate;
|
import com.dfsek.terra.addons.noise.config.templates.noise.CellularNoiseTemplate;
|
||||||
@ -64,7 +66,8 @@ public class NoiseAddon extends TerraAddon {
|
|||||||
.applyLoader(CellularSampler.DistanceFunction.class,
|
.applyLoader(CellularSampler.DistanceFunction.class,
|
||||||
(t, o, l) -> CellularSampler.DistanceFunction.valueOf((String) o))
|
(t, o, l) -> CellularSampler.DistanceFunction.valueOf((String) o))
|
||||||
.applyLoader(CellularSampler.ReturnType.class, (t, o, l) -> CellularSampler.ReturnType.valueOf((String) o))
|
.applyLoader(CellularSampler.ReturnType.class, (t, o, l) -> CellularSampler.ReturnType.valueOf((String) o))
|
||||||
.applyLoader(DimensionApplicableNoiseSampler.class, DimensionApplicableNoiseSampler::new);
|
.applyLoader(DimensionApplicableNoiseSampler.class, DimensionApplicableNoiseSampler::new)
|
||||||
|
.applyLoader(FunctionTemplate.class, FunctionTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register("LINEAR", LinearNormalizerTemplate::new);
|
noiseRegistry.register("LINEAR", LinearNormalizerTemplate::new);
|
||||||
noiseRegistry.register("NORMAL", NormalNormalizerTemplate::new);
|
noiseRegistry.register("NORMAL", NormalNormalizerTemplate::new);
|
||||||
@ -97,13 +100,15 @@ public class NoiseAddon extends TerraAddon {
|
|||||||
|
|
||||||
noiseRegistry.register("KERNEL", KernelTemplate::new);
|
noiseRegistry.register("KERNEL", KernelTemplate::new);
|
||||||
|
|
||||||
Map<String, DimensionApplicableNoiseSampler> packFunctions = new HashMap<>();
|
Map<String, DimensionApplicableNoiseSampler> packSamplers = new LinkedHashMap<>();
|
||||||
noiseRegistry.register("EXPRESSION", () -> new ExpressionFunctionTemplate(packFunctions));
|
Map<String, FunctionTemplate> packFunctions = new LinkedHashMap<>();
|
||||||
|
noiseRegistry.register("EXPRESSION", () -> new ExpressionFunctionTemplate(packSamplers, packFunctions));
|
||||||
|
|
||||||
|
|
||||||
NoiseConfigPackTemplate template = new NoiseConfigPackTemplate();
|
NoiseConfigPackTemplate template = new NoiseConfigPackTemplate();
|
||||||
event.loadTemplate(template);
|
event.loadTemplate(template);
|
||||||
packFunctions.putAll(template.getNoiseBuilderMap());
|
packSamplers.putAll(template.getSamplers());
|
||||||
|
packFunctions.putAll(template.getFunctions());
|
||||||
})
|
})
|
||||||
.failThrough();
|
.failThrough();
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
package com.dfsek.terra.addons.noise;
|
package com.dfsek.terra.addons.noise;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.annotations.Default;
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
||||||
|
import com.dfsek.terra.addons.noise.config.templates.FunctionTemplate;
|
||||||
import com.dfsek.terra.api.config.meta.Meta;
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
|
|
||||||
|
|
||||||
@ -13,7 +16,15 @@ public class NoiseConfigPackTemplate implements ConfigTemplate {
|
|||||||
@Value("noise")
|
@Value("noise")
|
||||||
private @Meta Map<String, @Meta DimensionApplicableNoiseSampler> noiseBuilderMap;
|
private @Meta Map<String, @Meta DimensionApplicableNoiseSampler> noiseBuilderMap;
|
||||||
|
|
||||||
public Map<String, DimensionApplicableNoiseSampler> getNoiseBuilderMap() {
|
@Value("functions")
|
||||||
|
@Default
|
||||||
|
private @Meta LinkedHashMap<String, @Meta FunctionTemplate> expressions = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
public Map<String, DimensionApplicableNoiseSampler> getSamplers() {
|
||||||
return noiseBuilderMap;
|
return noiseBuilderMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LinkedHashMap<String, FunctionTemplate> getFunctions() {
|
||||||
|
return expressions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ public class FunctionTemplate implements ObjectTemplate<FunctionTemplate> {
|
|||||||
@Value("arguments")
|
@Value("arguments")
|
||||||
private List<String> args;
|
private List<String> args;
|
||||||
|
|
||||||
@Value("function")
|
@Value("expression")
|
||||||
private @Meta String function;
|
private @Meta String function;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,16 +33,19 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
|
|||||||
@Value("expression")
|
@Value("expression")
|
||||||
private @Meta String equation;
|
private @Meta String equation;
|
||||||
|
|
||||||
@Value("functions")
|
@Value("samplers")
|
||||||
@Default
|
@Default
|
||||||
private @Meta LinkedHashMap<String, @Meta DimensionApplicableNoiseSampler> functions = new LinkedHashMap<>();
|
private @Meta LinkedHashMap<String, @Meta DimensionApplicableNoiseSampler> samplers = new LinkedHashMap<>();
|
||||||
|
|
||||||
@Value("functions")
|
@Value("functions")
|
||||||
@Default
|
@Default
|
||||||
private @Meta LinkedHashMap<String, @Meta FunctionTemplate> expressions = new LinkedHashMap<>();
|
private @Meta LinkedHashMap<String, @Meta FunctionTemplate> functions = new LinkedHashMap<>();
|
||||||
|
|
||||||
public ExpressionFunctionTemplate(Map<String, DimensionApplicableNoiseSampler> otherFunctions) {
|
private final Map<String, FunctionTemplate> globalFunctions;
|
||||||
|
|
||||||
|
public ExpressionFunctionTemplate(Map<String, DimensionApplicableNoiseSampler> otherFunctions, Map<String, FunctionTemplate> samplers) {
|
||||||
this.otherFunctions = otherFunctions;
|
this.otherFunctions = otherFunctions;
|
||||||
|
this.globalFunctions = samplers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -69,7 +72,11 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
|
|||||||
private Map<String, Function> generateFunctions() throws ParseException {
|
private Map<String, Function> generateFunctions() throws ParseException {
|
||||||
Map<String, Function> noiseFunctionMap = new HashMap<>();
|
Map<String, Function> noiseFunctionMap = new HashMap<>();
|
||||||
|
|
||||||
for(Map.Entry<String, FunctionTemplate> entry : expressions.entrySet()) {
|
for(Map.Entry<String, FunctionTemplate> entry : globalFunctions.entrySet()) {
|
||||||
|
noiseFunctionMap.put(entry.getKey(), UserDefinedFunction.newInstance(entry.getValue(), new Parser(), new Scope()));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Map.Entry<String, FunctionTemplate> entry : functions.entrySet()) {
|
||||||
noiseFunctionMap.put(entry.getKey(), UserDefinedFunction.newInstance(entry.getValue(), new Parser(), new Scope()));
|
noiseFunctionMap.put(entry.getKey(), UserDefinedFunction.newInstance(entry.getValue(), new Parser(), new Scope()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,7 +86,7 @@ public class ExpressionFunctionTemplate extends SamplerTemplate<ExpressionFuncti
|
|||||||
} else noiseFunctionMap.put(id, new NoiseFunction3(function.getSampler()));
|
} else noiseFunctionMap.put(id, new NoiseFunction3(function.getSampler()));
|
||||||
});
|
});
|
||||||
|
|
||||||
functions.forEach((id, function) -> {
|
samplers.forEach((id, function) -> {
|
||||||
if(function.getDimensions() == 2) {
|
if(function.getDimensions() == 2) {
|
||||||
noiseFunctionMap.put(id, new NoiseFunction2(function.getSampler()));
|
noiseFunctionMap.put(id, new NoiseFunction2(function.getSampler()));
|
||||||
} else noiseFunctionMap.put(id, new NoiseFunction3(function.getSampler()));
|
} else noiseFunctionMap.put(id, new NoiseFunction3(function.getSampler()));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user