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() + } }