diff --git a/changelog.md b/changelog.md index 60d04ba9ff..4e90f7098d 100644 --- a/changelog.md +++ b/changelog.md @@ -1,9 +1,5 @@ ## 4.13.8 -Average speed: 28.0 turns/s -Average game duration: 10.714975s -Total time: 7m 8.599s - Allowed starting Scenarios, including Multiplayer, through the "New Game" screen! :D WLTK + continuous rendering no longer cause city tiles to be dimmed diff --git a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt index 4f11919371..0a8fd8523e 100644 --- a/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt +++ b/core/src/com/unciv/logic/map/mapgenerator/MapGenerator.kt @@ -284,8 +284,9 @@ class MapGenerator(val ruleset: Ruleset, private val coroutineScope: CoroutineSc // Floodfill to cluster water tiles while (tilesToCheck.isNotEmpty()) { val tileWeAreChecking = tilesToCheck.removeFirst() - for (vector in tileWeAreChecking.neighbors - .filter { !tilesInArea.contains(it) and waterTiles.contains(it) }) { + for (vector in tileWeAreChecking.neighbors){ + if (tilesInArea.contains(vector)) continue + if (!waterTiles.contains(vector)) continue tilesInArea += vector tilesToCheck += vector waterTiles -= vector diff --git a/core/src/com/unciv/logic/map/tile/Tile.kt b/core/src/com/unciv/logic/map/tile/Tile.kt index ec187426fe..422d8d28d3 100644 --- a/core/src/com/unciv/logic/map/tile/Tile.kt +++ b/core/src/com/unciv/logic/map/tile/Tile.kt @@ -155,7 +155,7 @@ class Tile : IsPartOfGameInfoSerialization, Json.Serializable { private set @Transient - var terrainUniqueMap = UniqueMap() + var terrainUniqueMap = UniqueMap.EMPTY private set @Transient diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 156d4bfa43..1958620dc1 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -316,6 +316,10 @@ open class UniqueMap() { unique.hasModifier(trigger) && unique.conditionalsApply(stateForConditionals) }.flatMap { it.getMultiplied(stateForConditionals) } } + + companion object{ + val EMPTY = UniqueMap() + } } class TemporaryUnique() : IsPartOfGameInfoSerialization { diff --git a/core/src/com/unciv/ui/components/tilegroups/TileGroupMap.kt b/core/src/com/unciv/ui/components/tilegroups/TileGroupMap.kt index e03cb9e9bb..90c4aef207 100644 --- a/core/src/com/unciv/ui/components/tilegroups/TileGroupMap.kt +++ b/core/src/com/unciv/ui/components/tilegroups/TileGroupMap.kt @@ -112,7 +112,10 @@ class TileGroupMap( val cityButtonLayers = ArrayList() // Apparently the sortedByDescending is kinda memory-intensive because it needs to sort ALL the tiles - for (group in tileGroups.sortedByDescending { it.tile.position.x + it.tile.position.y }) { + // So instead we group by and then sort on the groups + // Profiling is a bit iffy if this is actually better but...probably? + for (group in tileGroups.groupBy { it.tile.position.x + it.tile.position.y } + .entries.sortedByDescending { it.key }.flatMap { it.value }) { // now, we steal the subgroups from all the tilegroups, that's how we form layers! baseLayers.add(group.layerTerrain.apply { setPosition(group.x, group.y) }) featureLayers.add(group.layerFeatures.apply { setPosition(group.x, group.y) })