mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-03 14:26:27 +00:00
TreeLayerLoader -> TreeLayerTemplate
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user