From 8cb4709cd7a78f5bb0a298428842b9f3ddab980c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 3 Feb 2024 02:41:02 +0900 Subject: [PATCH] diversified tree generation --- .../terrarum/modulebasegame/worldgenerator/Treegen.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Treegen.kt b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Treegen.kt index e3074e85d..f0ec9bfee 100644 --- a/src/net/torvald/terrarum/modulebasegame/worldgenerator/Treegen.kt +++ b/src/net/torvald/terrarum/modulebasegame/worldgenerator/Treegen.kt @@ -86,10 +86,12 @@ class Treegen(world: GameWorld, isFinal: Boolean, seed: Long, val terragenParams val thre = this - ibase return if (nextDouble(x, y, h) < 1.0 - thre) ibase else ibase + 1 } - + + private val speciesSlot = arrayOf(0,0,0,0,0,0,0,0,2,2,2,2,1,1,3,3) private fun tryToPlant(xs: IntProgression, ys: Int, grassMap: Array>) { - val treeSpecies = 0 + val speciesIndex = nextDouble(xs.first, ys, 594188903 xor world.generatorSeed.toInt()).times(speciesSlot.size).toInt() + val treeSpecies = speciesSlot[speciesIndex] // single "slice" is guaranteed to be 9 blocks wide @@ -155,7 +157,10 @@ class Treegen(world: GameWorld, isFinal: Boolean, seed: Long, val terragenParams if (treeToSpawn[0] != 0) { val treeSize = arrayOf(null, 0, 1, 2)[treeToSpawn[0]] grassMap[plot1].let { if (it.isEmpty()) null else it.takeRand(xs.first + plot1, ys, 4567) }?.let { - plantTree(world, xs.first + plot1, it, treeSpecies, treeSize!!) + if (treeSize == 0) // shrubs are always oak + plantTree(world, xs.first + plot1, it, 0, treeSize!!) + else + plantTree(world, xs.first + plot1, it, treeSpecies, treeSize!!) } } }