TreeLayerLoader -> TreeLayerTemplate

This commit is contained in:
dfsek
2021-06-14 14:21:42 -07:00
parent 139f67af52
commit 008084fae9
4 changed files with 47 additions and 36 deletions

View File

@@ -29,7 +29,7 @@ import com.dfsek.terra.config.loaders.config.FloraLayerTemplate;
import com.dfsek.terra.config.loaders.config.GridSpawnTemplate;
import com.dfsek.terra.config.loaders.config.OreConfigTemplate;
import com.dfsek.terra.config.loaders.config.OreHolderLoader;
import com.dfsek.terra.config.loaders.config.TreeLayerLoader;
import com.dfsek.terra.config.loaders.config.TreeLayerTemplate;
import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader;
import com.dfsek.terra.config.loaders.config.biome.SourceBuilderLoader;
import com.dfsek.terra.config.loaders.config.biome.StageBuilderLoader;
@@ -75,7 +75,7 @@ public class GenericLoaders implements LoaderRegistrar {
.registerLoader(FloraLayer.class, FloraLayerTemplate::new)
.registerLoader(Ore.Type.class, (t, o, l) -> Ore.Type.valueOf(o.toString()))
.registerLoader(OreConfig.class, OreConfigTemplate::new)
.registerLoader(TreeLayer.class, new TreeLayerLoader())
.registerLoader(TreeLayer.class, TreeLayerTemplate::new)
.registerLoader(MaterialSet.class, new MaterialSetLoader())
.registerLoader(OreHolder.class, new OreHolderLoader())
.registerLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new)

View File

@@ -6,6 +6,7 @@ import com.dfsek.terra.api.config.meta.MetaValue;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.world.population.items.ores.OreConfig;
@SuppressWarnings("unused")
public class OreConfigTemplate implements ObjectTemplate<OreConfig> {
@Value("min")
private MetaValue<Integer> min;

View File

@@ -1,34 +0,0 @@
package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.config.loaders.Types;
import com.dfsek.terra.world.population.items.tree.TreeLayer;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class TreeLayerLoader implements TypeLoader<TreeLayer> {
@Override
public TreeLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<String, Object> map = (Map<String, Object>) o;
double density = ((Number) map.get("density")).doubleValue();
Range range = configLoader.loadClass(Range.class, map.get("y"));
if(range == null) throw new LoadException("Tree range unspecified");
ProbabilityCollection<Tree> items = (ProbabilityCollection<Tree>) configLoader.loadType(Types.TREE_PROBABILITY_COLLECTION_TYPE, map.get("items"));
if(map.containsKey("distribution")) {
NoiseSeeded noise = configLoader.loadClass(NoiseSeeded.class, map.get("distribution"));
return new TreeLayer(density, range, items, noise.apply(2403L));
}
return new TreeLayer(density, range, items, new WhiteNoiseSampler(2403));
}
}

View File

@@ -0,0 +1,44 @@
package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.config.meta.MetaValue;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.NoiseSampler;
import com.dfsek.terra.api.math.noise.samplers.noise.random.WhiteNoiseSampler;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.util.collections.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.world.population.items.tree.TreeLayer;
@SuppressWarnings({"FieldMayBeFinal", "unused"})
public class TreeLayerTemplate implements ObjectTemplate<TreeLayer> {
@Value("density")
private MetaValue<Double> density;
@Value("y")
private MetaValue<Range> range;
@Value("items")
private ProbabilityCollection<Tree> items;
@Value("distribution")
@Default
private MetaValue<NoiseSeeded> sampler = MetaValue.of(new NoiseSeeded() {
@Override
public NoiseSampler apply(Long seed) {
return new WhiteNoiseSampler(seed.intValue());
}
@Override
public int getDimensions() {
return 2;
}
});
@Override
public TreeLayer get() {
return new TreeLayer(density.get(), range.get(), items, sampler.get().apply(2403L));
}
}