diff --git a/src/main/java/org/terasology/gf/generator/FloraFeatureGenerator.java b/src/main/java/org/terasology/gf/generator/FloraFeatureGenerator.java index d98ef3a..108e5b9 100644 --- a/src/main/java/org/terasology/gf/generator/FloraFeatureGenerator.java +++ b/src/main/java/org/terasology/gf/generator/FloraFeatureGenerator.java @@ -18,7 +18,7 @@ import org.terasology.gestalt.naming.Name; import org.terasology.gf.PlantRegistry; import org.terasology.gf.PlantType; -import org.terasology.utilities.procedural.ChanceRandomizer; +import org.terasology.engine.utilities.random.DiscreteDistribution; import java.util.Comparator; import java.util.HashMap; @@ -31,15 +31,15 @@ public class FloraFeatureGenerator implements WorldRasterizer { private Multimap treeDefinitions = TreeMultimap.create(Ordering.natural(), Comparator.comparing(PlantSpawnDefinition::getPlantId)); - private Map> treeDefinitionsCache = new HashMap<>(); + private Map> treeDefinitionsCache = new HashMap<>(); private Multimap bushDefinitions = TreeMultimap.create(Ordering.natural(), Comparator.comparing(PlantSpawnDefinition::getPlantId)); - private Map> bushDefinitionsCache = new HashMap<>(); + private Map> bushDefinitionsCache = new HashMap<>(); private Multimap foliageDefinitions = TreeMultimap.create(Ordering.natural(), Comparator.comparing(PlantSpawnDefinition::getPlantId)); - private Map> foliageDefinitionsCache = new HashMap<>(); + private Map> foliageDefinitionsCache = new HashMap<>(); public FloraFeatureGenerator() { loadPlantGrowthDefinitions(); @@ -95,8 +95,8 @@ public void generateChunk(Chunk chunk, Region chunkRegion) { long seed = Float.floatToRawIntBits(value); Random random = new FastRandom(seed); - ChanceRandomizer definitionsForBiome = getDefinitionsForBiome(biome, treeDefinitionsCache, treeDefinitions); - PlantSpawnDefinition treeDefinition = definitionsForBiome.randomizeObject(random); + DiscreteDistribution definitionsForBiome = getDefinitionsForBiome(biome, treeDefinitionsCache, treeDefinitions); + PlantSpawnDefinition treeDefinition = definitionsForBiome.sample(random); if (treeDefinition != null && random.nextFloat() < treeDefinition.getProbability()) { treeDefinition.generatePlant(seed, chunk, position.x(), position.y(), position.z(), chunkRegion); } @@ -114,8 +114,8 @@ public void generateChunk(Chunk chunk, Region chunkRegion) { long seed = Float.floatToRawIntBits(value); Random random = new FastRandom(seed); - ChanceRandomizer definitionsForBiome = getDefinitionsForBiome(biome, bushDefinitionsCache, bushDefinitions); - PlantSpawnDefinition bushDefinition = definitionsForBiome.randomizeObject(random); + DiscreteDistribution definitionsForBiome = getDefinitionsForBiome(biome, bushDefinitionsCache, bushDefinitions); + PlantSpawnDefinition bushDefinition = definitionsForBiome.sample(random); if (bushDefinition != null && random.nextFloat() < bushDefinition.getProbability()) { bushDefinition.generatePlant(seed, chunk, position.x(), position.y(), position.z(), chunkRegion); } @@ -134,8 +134,8 @@ public void generateChunk(Chunk chunk, Region chunkRegion) { long seed = Float.floatToRawIntBits(value); Random random = new FastRandom(seed); - ChanceRandomizer definitionsForBiome = getDefinitionsForBiome(biome, foliageDefinitionsCache, foliageDefinitions); - PlantSpawnDefinition foliageDefinition = definitionsForBiome.randomizeObject(random); + DiscreteDistribution definitionsForBiome = getDefinitionsForBiome(biome, foliageDefinitionsCache, foliageDefinitions); + PlantSpawnDefinition foliageDefinition = definitionsForBiome.sample(random); if (foliageDefinition != null && random.nextFloat() < foliageDefinition.getProbability()) { foliageDefinition.generatePlant(seed, chunk, position.x(), position.y(), position.z(), chunkRegion); } @@ -145,18 +145,17 @@ public void generateChunk(Chunk chunk, Region chunkRegion) { } } - private ChanceRandomizer getDefinitionsForBiome(Biome biome, Map> cache, Multimap definitions) { - ChanceRandomizer result = cache.get(biome.getId()); + private DiscreteDistribution getDefinitionsForBiome(Biome biome, Map> cache, Multimap definitions) { + DiscreteDistribution result = cache.get(biome.getId()); if (result != null) { return result; } - result = new ChanceRandomizer<>(100); + result = new DiscreteDistribution<>(); for (PlantSpawnDefinition floraDefinition : definitions.get(biome.getId())) { - result.addChance(floraDefinition.getRarity(), floraDefinition); + result.add(floraDefinition, floraDefinition.getRarity()); } - result.initialize(); cache.put(biome.getId(), result); return result; } diff --git a/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java b/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java index a529f28..93ddccb 100644 --- a/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java +++ b/src/main/java/org/terasology/gf/tree/lsystem/AdvancedLSystemTreeDefinition.java @@ -33,7 +33,7 @@ import org.terasology.engine.world.chunks.Chunks; import org.terasology.gf.LivingPlantComponent; import org.terasology.gestalt.naming.Name; -import org.terasology.utilities.procedural.PDist; +import org.terasology.engine.utilities.random.PDist; import java.util.Collection; import java.util.Collections;