mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 22:31:52 +00:00
make slant palettes metaconfigurable
This commit is contained in:
+2
-3
@@ -10,9 +10,8 @@ package com.dfsek.terra.addons.chunkgenerator;
|
|||||||
import com.dfsek.terra.addons.chunkgenerator.config.NoiseChunkGeneratorPackConfigTemplate;
|
import com.dfsek.terra.addons.chunkgenerator.config.NoiseChunkGeneratorPackConfigTemplate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.noise.BiomeNoiseConfigTemplate;
|
import com.dfsek.terra.addons.chunkgenerator.config.noise.BiomeNoiseConfigTemplate;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.palette.BiomePaletteTemplate;
|
import com.dfsek.terra.addons.chunkgenerator.config.palette.BiomePaletteTemplate;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.config.palette.SlantLayer;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D;
|
import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder;
|
|
||||||
import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader;
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
@@ -45,7 +44,7 @@ public class NoiseChunkGenerator3DAddon implements AddonInitializer {
|
|||||||
pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(), config.getHorizontalRes(),
|
pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(), config.getHorizontalRes(),
|
||||||
config.getVerticalRes()));
|
config.getVerticalRes()));
|
||||||
event.getPack()
|
event.getPack()
|
||||||
.applyLoader(SlantHolder.class, new SlantHolderLoader());
|
.applyLoader(SlantLayer.class, SlantLayer::new);
|
||||||
})
|
})
|
||||||
.failThrough();
|
.failThrough();
|
||||||
|
|
||||||
|
|||||||
+14
-2
@@ -17,15 +17,17 @@ import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder;
|
|||||||
import com.dfsek.terra.api.config.meta.Meta;
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
|
||||||
public class BiomePaletteTemplate implements ObjectTemplate<PaletteInfo> {
|
public class BiomePaletteTemplate implements ObjectTemplate<PaletteInfo> {
|
||||||
@Value("slant")
|
@Value("slant")
|
||||||
@Default
|
@Default
|
||||||
private @Meta SlantHolder slant;
|
private @Meta List<@Meta SlantLayer> slant = Collections.emptyList();
|
||||||
@Value("palette")
|
@Value("palette")
|
||||||
private @Meta List<@Meta Map<@Meta Palette, @Meta Integer>> palettes;
|
private @Meta List<@Meta Map<@Meta Palette, @Meta Integer>> palettes;
|
||||||
@Value("ocean.level")
|
@Value("ocean.level")
|
||||||
@@ -42,6 +44,16 @@ public class BiomePaletteTemplate implements ObjectTemplate<PaletteInfo> {
|
|||||||
builder.add(entry.getValue(), entry.getKey());
|
builder.add(entry.getValue(), entry.getKey());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new PaletteInfo(builder.build(), slant, oceanPalette, seaLevel);
|
|
||||||
|
TreeMap<Double, PaletteHolder> slantLayers = new TreeMap<>();
|
||||||
|
double minThreshold = Double.MAX_VALUE;
|
||||||
|
|
||||||
|
for(SlantLayer layer : slant) {
|
||||||
|
double threshold = layer.getThreshold();
|
||||||
|
if(threshold < minThreshold) minThreshold = threshold;
|
||||||
|
slantLayers.put(threshold, layer.getPalette());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PaletteInfo(builder.build(), new SlantHolder(slantLayers, minThreshold), oceanPalette, seaLevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+42
@@ -0,0 +1,42 @@
|
|||||||
|
package com.dfsek.terra.addons.chunkgenerator.config.palette;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
|
import com.dfsek.tectonic.loading.object.ObjectTemplate;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder;
|
||||||
|
import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolderBuilder;
|
||||||
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
|
||||||
|
public class SlantLayer implements ObjectTemplate<SlantLayer> {
|
||||||
|
@Value("threshold")
|
||||||
|
private @Meta double threshold;
|
||||||
|
|
||||||
|
@Value("palette")
|
||||||
|
private @Meta List<@Meta Map<@Meta Palette, @Meta Integer>> palettes;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SlantLayer get() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getThreshold() {
|
||||||
|
return threshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PaletteHolder getPalette() {
|
||||||
|
PaletteHolderBuilder builder = new PaletteHolderBuilder();
|
||||||
|
for(Map<Palette, Integer> layer : palettes) {
|
||||||
|
for(Entry<Palette, Integer> entry : layer.entrySet()) {
|
||||||
|
builder.add(entry.getValue(), entry.getKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
-36
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2020-2021 Polyhedral Development
|
|
||||||
*
|
|
||||||
* The Terra Core Addons are licensed under the terms of the MIT License. For more details,
|
|
||||||
* reference the LICENSE file in this module's root directory.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.addons.chunkgenerator.palette;
|
|
||||||
|
|
||||||
import com.dfsek.tectonic.exception.LoadException;
|
|
||||||
import com.dfsek.tectonic.loading.ConfigLoader;
|
|
||||||
import com.dfsek.tectonic.loading.TypeLoader;
|
|
||||||
|
|
||||||
import java.lang.reflect.AnnotatedType;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public class SlantHolderLoader implements TypeLoader<SlantHolder> {
|
|
||||||
@Override
|
|
||||||
public SlantHolder load(AnnotatedType type, Object o, ConfigLoader configLoader) throws LoadException {
|
|
||||||
List<Map<Object, Object>> layers = (List<Map<Object, Object>>) o;
|
|
||||||
TreeMap<Double, PaletteHolder> slantLayers = new TreeMap<>();
|
|
||||||
double minThreshold = Double.MAX_VALUE;
|
|
||||||
|
|
||||||
for(Map<Object, Object> layer : layers) {
|
|
||||||
double threshold = ((Number) layer.get("threshold")).doubleValue();
|
|
||||||
if(threshold < minThreshold) minThreshold = threshold;
|
|
||||||
slantLayers.put(threshold, configLoader.loadType(PaletteHolder.class, layer.get("palette")));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new SlantHolder(slantLayers, minThreshold);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user