mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-12 08:49:22 +07:00
Allow map editor to generate smaller than "tiny" Pangaea maps (#10894)
* Allow map editor to generate tiny Pangaea maps (instead of entering an infinite loop) * rename variable & reword comment
This commit is contained in:
@ -152,7 +152,10 @@ class MapLandmassGenerator(val ruleset: Ruleset, val randomness: MapGenerationRa
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createPangaea(tileMap: TileMap) {
|
private fun createPangaea(tileMap: TileMap) {
|
||||||
do {
|
val largeContinentThreshold = (tileMap.values.size / 4).coerceAtMost(25)
|
||||||
|
var retryCount = 200 // A bit much but when relevant (tiny map) an iteration is relatively cheap
|
||||||
|
|
||||||
|
while(--retryCount >= 0) {
|
||||||
val elevationSeed = randomness.RNG.nextInt().toDouble()
|
val elevationSeed = randomness.RNG.nextInt().toDouble()
|
||||||
for (tile in tileMap.values) {
|
for (tile in tileMap.values) {
|
||||||
var elevation = randomness.getPerlinNoise(tile, elevationSeed)
|
var elevation = randomness.getPerlinNoise(tile, elevationSeed)
|
||||||
@ -162,9 +165,11 @@ class MapLandmassGenerator(val ruleset: Ruleset, val randomness: MapGenerationRa
|
|||||||
}
|
}
|
||||||
|
|
||||||
tileMap.assignContinents(TileMap.AssignContinentsMode.Reassign)
|
tileMap.assignContinents(TileMap.AssignContinentsMode.Reassign)
|
||||||
|
if ( tileMap.continentSizes.values.count { it > largeContinentThreshold } == 1 // Only one large continent
|
||||||
|
&& tileMap.values.count { it.baseTerrain == waterTerrainName } <= tileMap.values.size * 0.7f // And at most 70% water
|
||||||
|
) break
|
||||||
waterThreshold -= 0.01
|
waterThreshold -= 0.01
|
||||||
} while (tileMap.continentSizes.values.count { it > 25 } != 1 // Multiple large continents
|
}
|
||||||
|| tileMap.values.count { it.baseTerrain == waterTerrainName } > tileMap.values.size * 0.7f) // Over 70% water
|
|
||||||
tileMap.assignContinents(TileMap.AssignContinentsMode.Clear)
|
tileMap.assignContinents(TileMap.AssignContinentsMode.Clear)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user