From 2fbd24231f0fd9e415be212a45d5a27b1b3f2f9e Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 13 Apr 2023 17:41:59 +0300 Subject: [PATCH] Resolved #9177 - Tileset no longer reverts to default on Android after restarting game --- core/src/com/unciv/UncivGame.kt | 4 +-- .../com/unciv/models/tilesets/TileSetCache.kt | 25 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/core/src/com/unciv/UncivGame.kt b/core/src/com/unciv/UncivGame.kt index 90085c5b77..0ac628ed1e 100644 --- a/core/src/com/unciv/UncivGame.kt +++ b/core/src/com/unciv/UncivGame.kt @@ -189,8 +189,8 @@ open class UncivGame(val isConsoleMode: Boolean = false) : Game(), PlatformSpeci ImageGetter.resetAtlases() ImageGetter.setNewRuleset(ImageGetter.ruleset) // This needs to come after the settings, since we may have default visual mods - val availableTileSets = ImageGetter.getAvailableTilesets().toSet() - .intersect(TileSetCache.getAvailableTilesets().toSet()) + val imageGetterTilesets = ImageGetter.getAvailableTilesets() + val availableTileSets = TileSetCache.getAvailableTilesets(imageGetterTilesets) if (settings.tileSet !in availableTileSets) { // If the configured tileset is no longer available, default back settings.tileSet = Constants.defaultTileset } diff --git a/core/src/com/unciv/models/tilesets/TileSetCache.kt b/core/src/com/unciv/models/tilesets/TileSetCache.kt index f5def6a385..238a0f42c6 100644 --- a/core/src/com/unciv/models/tilesets/TileSetCache.kt +++ b/core/src/com/unciv/models/tilesets/TileSetCache.kt @@ -82,18 +82,19 @@ object TileSetCache : HashMap() { } /** Determines potentially available TileSets - by scanning for TileSet jsons. - * * Available before initialization finishes. - * To get more reliable info, either wait until `this` is fully initialized, - * or intersect with [ImageGetter.getAvailableTilesets] */ - fun getAvailableTilesets() = sequence { - yieldAll(FileHandle("jsons/TileSets").list().asIterable()) - for (modFolder in FileHandle("mods").list()) { - if (!modFolder.isDirectory || modFolder.name().startsWith('.')) - continue - yieldAll(modFolder.child("jsons/TileSets").list().asIterable()) - } - }.filter { it.exists() } - .map { it.nameWithoutExtension().removeSuffix("Config") } + fun getAvailableTilesets(imageGetterTilesets:Sequence): Set { + val modTilesetConfigFiles = Gdx.files.local("mods").list().asSequence() + .filter { it.isDirectory && !it.name().startsWith('.') } + .flatMap { it.child("jsons/TileSets").list().asSequence() } + + val builtinTilesetConfigFiles = imageGetterTilesets + .map { Gdx.files.internal("jsons/TileSets/$it.json") } + + return (builtinTilesetConfigFiles + modTilesetConfigFiles) + .filter { it.exists() } + .map { it.nameWithoutExtension().removeSuffix("Config") } + .toSet() + } }