diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt index 87949dbe2..50258a60b 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt @@ -1,7 +1,6 @@ package net.torvald.terrarum.modulebasegame.ui import com.badlogic.gdx.Gdx -import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.g2d.SpriteBatch @@ -13,6 +12,7 @@ import net.torvald.terrarum.Yaml import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.TitleScreen +import net.torvald.terrarum.serialise.TryResize import net.torvald.terrarum.serialise.WriteConfig import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas @@ -81,7 +81,10 @@ open class UIRemoCon(val parent: TitleScreen, val treeRoot: QNDTreeNode) private fun generateNewRemoCon(node: QNDTreeNode): UIRemoConElement { val labels = Array(node.children.size) { node.children[it].data?.split(yamlSep)?.get(0)?.split(tagSep)?.get(0) ?: "(null)" } - val tags = Array(node.children.size) { arrayOf(node.children[it].data?.split(yamlSep)?.get(0)?.split(tagSep)?.getOrNull(1) ?: "") } + val tags = Array(node.children.size) { node.children[it].data?.split(yamlSep)?.get(0)?.split(tagSep).let { + if (it.isNullOrEmpty() || it.size < 2) emptyArray() + else it.subList(1, it.size).toTypedArray() + } } currentRemoConLabelCount = labels.size return UIRemoConElement(this, labels, tags) } @@ -112,7 +115,9 @@ open class UIRemoCon(val parent: TitleScreen, val treeRoot: QNDTreeNode) } else if (it.textfun() == Lang["MENU_LABEL_RETURN"]) { val tag = it.tags + if (tag.contains("RESIZEIFNEEDED")) TryResize.pre() if (tag.contains("WRITETOCONFIG")) WriteConfig() + if (tag.contains("RESIZEIFNEEDED")) TryResize() if (IS_DEVELOPMENT_BUILD) print("[UIRemoCon] Returning from ${currentRemoConContents.data}") diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt index 9c1e8fac6..88250d8bf 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt @@ -22,7 +22,7 @@ object UITitleRemoConYaml { - MENU_LABEL_LANGUAGE : net.torvald.terrarum.modulebasegame.ui.UITitleLanguage - CREDITS_GAME : net.torvald.terrarum.ModOptionsHost - GAME_GENRE_MISC : net.torvald.terrarum.modulebasegame.ui.UIPerformanceControlPanel - - MENU_LABEL_RETURN+WRITETOCONFIG + - MENU_LABEL_RETURN+WRITETOCONFIG+RESIZEIFNEEDED - MENU_MODULES : net.torvald.terrarum.modulebasegame.ui.UITitleModules - MENU_LABEL_RETURN - MENU_LABEL_CREDITS diff --git a/src/net/torvald/terrarum/serialise/WriteConfig.kt b/src/net/torvald/terrarum/serialise/WriteConfig.kt index 7608497fa..5234d4e87 100644 --- a/src/net/torvald/terrarum/serialise/WriteConfig.kt +++ b/src/net/torvald/terrarum/serialise/WriteConfig.kt @@ -5,6 +5,7 @@ import com.badlogic.gdx.utils.JsonValue import com.badlogic.gdx.utils.JsonWriter import net.torvald.terrarum.App import net.torvald.terrarum.KVHashMap +import net.torvald.terrarum.Principii import net.torvald.terrarum.utils.JsonFetcher /** @@ -66,4 +67,41 @@ object WriteConfig { writer.close() } -} \ No newline at end of file +} + +/** + * Created by minjaesong on 2024-02-17. + */ +object TryResize { + private val gameConfig = KVHashMap() + + private var doResize = false + + fun pre() { + // read from disk and build config from it + val oldJsonMap = JsonFetcher.invoke(App.configDir) + // make config + var entry: JsonValue? = oldJsonMap.child + while (entry != null) { + setToGameConfigForced(entry, null) + entry = entry.next + } + + + // check for discrepancy + listOf("screenwidth", "screenheight").forEach { + if (gameConfig.getAsInt(it) != App.getConfigInt(it)) + doResize = doResize or true + } + } + + private fun setToGameConfigForced(value: JsonValue, modName: String?) { + gameConfig[if ((modName == null)) value.name else modName + ":" + value.name] = + if (value.isArray) value.asDoubleArray() else if (value.isDouble) value.asDouble() else if (value.isBoolean) value.asBoolean() else if (value.isLong) value.asInt() else value.asString() + } + + operator fun invoke() { + // it just wouldn't work, the only way to make it work will be calling game restart from the launcher + } + +}