meta noise type

This commit is contained in:
dfsek
2021-06-14 13:53:03 -07:00
parent 3aaedcf74f
commit 97b3042357
@@ -1,17 +1,20 @@
package com.dfsek.terra.config.loaders.config.sampler; package com.dfsek.terra.config.loaders.config.sampler;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.Configuration; import com.dfsek.tectonic.config.Configuration;
import com.dfsek.tectonic.exception.ConfigException; import com.dfsek.tectonic.exception.ConfigException;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.config.meta.MetaValue;
import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.registry.config.NoiseRegistry; import com.dfsek.terra.registry.config.NoiseRegistry;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Supplier;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class NoiseSamplerBuilderLoader implements TypeLoader<NoiseSeeded> { public class NoiseSamplerBuilderLoader implements TypeLoader<NoiseSeeded> {
@@ -25,11 +28,26 @@ public class NoiseSamplerBuilderLoader implements TypeLoader<NoiseSeeded> {
public NoiseSeeded load(Type t, Object c, ConfigLoader loader) throws LoadException { public NoiseSeeded load(Type t, Object c, ConfigLoader loader) throws LoadException {
Map<String, Object> map = (Map<String, Object>) c; Map<String, Object> map = (Map<String, Object>) c;
try { try {
ObjectTemplate<NoiseSeeded> normalizerTemplate = noiseRegistry.get(((String) map.get("type")).toUpperCase(Locale.ROOT)).get(); Template typeTemplate = new Template();
loader.load(normalizerTemplate, new Configuration(map)); Configuration configuration = new Configuration(map);
loader.load(typeTemplate, configuration);
ObjectTemplate<NoiseSeeded> normalizerTemplate = typeTemplate.get().get();
loader.load(normalizerTemplate, configuration);
return normalizerTemplate.get(); return normalizerTemplate.get();
} catch(ConfigException e) { } catch(ConfigException e) {
throw new LoadException("Unable to load noise function: ", e); throw new LoadException("Unable to load noise function: ", e);
} }
} }
@SuppressWarnings("unused")
private class Template implements ObjectTemplate<Supplier<ObjectTemplate<NoiseSeeded>>> {
@Value("type")
private MetaValue<String> type;
@Override
public Supplier<ObjectTemplate<NoiseSeeded>> get() {
return noiseRegistry.get(type.get().toUpperCase(Locale.ROOT));
}
}
} }