From 3797817291d6bd4283a6f882d9a2bf97036a87cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Dufour?= Date: Sun, 17 Dec 2023 21:03:31 +0100 Subject: [PATCH] Coast spread algorithm (#10741) * new algo for coast placement * optimization? * change default max coast extension * put spreadcoast in a function * default change back, nextBoolean() and for loop --- .../logic/map/mapgenerator/MapGenerator.kt | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt index c6c6a32d50..710b93a1fd 100644 --- a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt +++ b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt @@ -238,6 +238,31 @@ class MapGenerator(val ruleset: Ruleset, private val coroutineScope: CoroutineSc } } + private fun spreadCoast(map: TileMap) { + for (i in 1..map.mapParameters.maxCoastExtension) { + val toCoast = mutableListOf() + for (tile in map.values.filter { it.baseTerrain == Constants.ocean }) { + val tilesInDistance = tile.getTilesInDistance(1) + for (neighborTile in tilesInDistance) { + if (neighborTile.isLand) { + toCoast.add(tile) + break + } else if (neighborTile.baseTerrain == Constants.coast) { + val randbool = randomness.RNG.nextBoolean() + if (randbool) { + toCoast.add(tile) + } + break + } + } + } + for (tile in toCoast) { + tile.baseTerrain = Constants.coast + tile.setTransients() + } + } + } + private fun spawnLakesAndCoasts(map: TileMap) { if (ruleset.terrains.containsKey(Constants.lakes)) { @@ -277,14 +302,7 @@ class MapGenerator(val ruleset: Ruleset, private val coroutineScope: CoroutineSc //Coasts if (ruleset.terrains.containsKey(Constants.coast)) { - for (tile in map.values.filter { it.baseTerrain == Constants.ocean }) { - val coastLength = - max(1, randomness.RNG.nextInt(max(1, map.mapParameters.maxCoastExtension))) - if (tile.getTilesInDistance(coastLength).any { it.isLand }) { - tile.baseTerrain = Constants.coast - tile.setTransients() - } - } + spreadCoast(map) } }