avoid initializing with terrain that shouldn't be naturally generated (#10756)

* avoid initializing with terrain that shouldn't be naturally generated

* add space

* fix partial generation freeze

* one-liner unique check
This commit is contained in:
Rémi Dufour 2023-12-17 21:02:45 +01:00 committed by GitHub
parent 7ff38b2687
commit 1316271ac6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,6 +7,7 @@ import com.unciv.logic.map.TileMap
import com.unciv.logic.map.tile.Tile import com.unciv.logic.map.tile.Tile
import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.Ruleset
import com.unciv.models.ruleset.tile.TerrainType import com.unciv.models.ruleset.tile.TerrainType
import com.unciv.models.ruleset.unique.UniqueType
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.max import kotlin.math.max
import kotlin.math.min import kotlin.math.min
@ -28,7 +29,7 @@ class MapLandmassGenerator(val ruleset: Ruleset, val randomness: MapGenerationRa
companion object { companion object {
// this is called from TileMap constructors as well // this is called from TileMap constructors as well
internal fun getInitializationTerrain(ruleset: Ruleset, type: TerrainType) = internal fun getInitializationTerrain(ruleset: Ruleset, type: TerrainType) =
ruleset.terrains.values.firstOrNull { it.type == type }?.name ruleset.terrains.values.firstOrNull { it.type == type && !it.hasUnique(UniqueType.NoNaturalGeneration) }?.name
?: throw Exception("Cannot create map - no $type terrains found!") ?: throw Exception("Cannot create map - no $type terrains found!")
} }
@ -157,6 +158,7 @@ class MapLandmassGenerator(val ruleset: Ruleset, val randomness: MapGenerationRa
var elevation = randomness.getPerlinNoise(tile, elevationSeed) var elevation = randomness.getPerlinNoise(tile, elevationSeed)
elevation = elevation * (3 / 4f) + getEllipticContinent(tile, tileMap) / 4 elevation = elevation * (3 / 4f) + getEllipticContinent(tile, tileMap) / 4
spawnLandOrWater(tile, elevation) spawnLandOrWater(tile, elevation)
tile.setTerrainTransients() // necessary for assignContinents
} }
tileMap.assignContinents(TileMap.AssignContinentsMode.Reassign) tileMap.assignContinents(TileMap.AssignContinentsMode.Reassign)