mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-31 15:19:29 +07:00
Fix Tutorial loader for mods on Android (#10229)
This commit is contained in:
@ -34,12 +34,20 @@ fun json() = Json(JsonWriter.OutputType.json).apply {
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws SerializationException
|
||||
* Load a json file by [filePath] from Gdx.files.internal
|
||||
* (meaning from jar/apk for packaged release code, and not appropriate for mod files)
|
||||
* @throws SerializationException
|
||||
*/
|
||||
fun <T> Json.fromJsonFile(tClass: Class<T>, filePath: String): T = fromJsonFile(tClass, Gdx.files.internal(filePath))
|
||||
|
||||
/**
|
||||
* @throws SerializationException
|
||||
* Load a json [file] - by handle, so internal/external/local is caller's decision.
|
||||
*
|
||||
* Reminder:
|
||||
* * `internal` for Unciv-packaged assets, loaded from jar/apk, e.g. Built-in ruleset files.
|
||||
* * `local` for mods and settings - Android will place that under /data/data/com.unciv.app/files.
|
||||
* * `external` for saves - Android will place that under /sdcard/Android/data/com.unciv.app/files.
|
||||
* @throws SerializationException
|
||||
*/
|
||||
fun <T> Json.fromJsonFile(tClass: Class<T>, file: FileHandle): T {
|
||||
try {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.unciv.ui.screens.basescreen
|
||||
|
||||
import com.badlogic.gdx.Gdx
|
||||
import com.badlogic.gdx.files.FileHandle
|
||||
import com.unciv.Constants
|
||||
import com.unciv.UncivGame
|
||||
import com.unciv.json.fromJsonFile
|
||||
@ -26,18 +27,21 @@ class TutorialController(screen: BaseScreen) {
|
||||
// static to allow use from TutorialTranslationTests
|
||||
fun loadTutorialsFromJson(includeMods: Boolean = true): LinkedHashMap<String, Tutorial> {
|
||||
val result = linkedMapOf<String, Tutorial>()
|
||||
for (path in tutorialFiles(includeMods)) {
|
||||
json().fromJsonFile(Array<Tutorial>::class.java, path)
|
||||
for (file in tutorialFiles(includeMods)) {
|
||||
json().fromJsonFile(Array<Tutorial>::class.java, file)
|
||||
.associateByTo(result) { it.name }
|
||||
}
|
||||
return result
|
||||
}
|
||||
private fun tutorialFiles(includeMods: Boolean) = sequence<String> {
|
||||
yield("jsons/Tutorials.json")
|
||||
|
||||
private fun tutorialFiles(includeMods: Boolean) = sequence<FileHandle> {
|
||||
yield(Gdx.files.internal("jsons/Tutorials.json"))
|
||||
if (!includeMods) return@sequence
|
||||
val mods = UncivGame.Current.gameInfo?.ruleset?.mods ?: return@sequence
|
||||
val names = mods.asSequence().map { "mods/$it/jsons/Tutorials.json" }
|
||||
yieldAll(names.filter { Gdx.files.local(it).exists() })
|
||||
val mods = UncivGame.Current.gameInfo?.ruleset?.mods
|
||||
?: return@sequence
|
||||
val files = mods.asSequence()
|
||||
.map { Gdx.files.local("mods/$it/jsons/Tutorials.json") }
|
||||
yieldAll(files.filter { it.exists() })
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user