diff --git a/src/net/torvald/terrarum/App.java b/src/net/torvald/terrarum/App.java index 8c05cbe5a..0bbfc104d 100644 --- a/src/net/torvald/terrarum/App.java +++ b/src/net/torvald/terrarum/App.java @@ -297,6 +297,7 @@ public class App implements ApplicationListener { // load configs getDefaultDirectory(); createDirs(); + initialiseConfig(); readConfigJson(); updateListOfSavegames(); @@ -988,7 +989,7 @@ public class App implements ApplicationListener { // CONFIG // - private static KVHashMap gameConfig = new KVHashMap(); + public static KVHashMap gameConfig = new KVHashMap(); private static void createConfigJson() throws IOException { File configFile = new File(configDir); @@ -998,6 +999,15 @@ public class App implements ApplicationListener { } } + /** + * Reads DefaultConfig to populate the gameConfig + */ + private static void initialiseConfig() { + for (Map.Entry entry : DefaultConfig.INSTANCE.getHashMap().entrySet()) { + gameConfig.set(entry.getKey(), entry.getValue()); + } + } + /** * * @return true on successful, false on failure. diff --git a/src/net/torvald/terrarum/DefaultConfig.kt b/src/net/torvald/terrarum/DefaultConfig.kt index 227d00696..999afa400 100644 --- a/src/net/torvald/terrarum/DefaultConfig.kt +++ b/src/net/torvald/terrarum/DefaultConfig.kt @@ -76,7 +76,7 @@ object DefaultConfig { "config_keyjump" to Input.Keys.SPACE, - "config_keyquickslots" to (Input.Keys.NUM_0..Input.Keys.NUM_9).toList(), + "config_keyquickslots" to (Input.Keys.NUM_0..Input.Keys.NUM_9).toList().toIntArray(), "config_mouseprimary" to Input.Buttons.LEFT, // left mouse "config_mousesecondary" to Input.Buttons.RIGHT, // right mouse diff --git a/src/net/torvald/terrarum/KVHashMap.kt b/src/net/torvald/terrarum/KVHashMap.kt index 6613d1a29..3a1f2a6d0 100644 --- a/src/net/torvald/terrarum/KVHashMap.kt +++ b/src/net/torvald/terrarum/KVHashMap.kt @@ -15,7 +15,7 @@ open class KVHashMap { hashMap = newMap } - protected var hashMap: HashMap + var hashMap: HashMap /** * Add key-value pair to the configuration table. diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt index a8ee56711..3abc2bf8f 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt @@ -10,6 +10,7 @@ import net.torvald.terrarum.App.printdbgerr import net.torvald.terrarum.QNDTreeNode import net.torvald.terrarum.TitleScreen import net.torvald.terrarum.Yaml +import net.torvald.terrarum.serialise.WriteConfig import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UIItemTextButton import net.torvald.terrarum.ui.UIItemTextButtonList @@ -92,7 +93,13 @@ open class UIRemoCon(val parent: TitleScreen, treeRepresentation: QNDTreeNode WriteConfig() + } + if (currentRemoConContents.parent != null) { remoConTray.consume() diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt index a2707552b..8700fff3d 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleLanguage.kt @@ -70,10 +70,12 @@ class UITitleLanguage : UICanvas() { // attach listeners textArea1.selectionChangeListener = { _, newSelectionIndex -> App.GAME_LOCALE = localeList[newSelectionIndex] + App.setConfig("language", localeList[newSelectionIndex]) textArea2.deselect() } textArea2.selectionChangeListener = { _, newSelectionIndex -> App.GAME_LOCALE = localeList[newSelectionIndex + localeFirstHalf.size] + App.setConfig("language", localeList[newSelectionIndex + localeFirstHalf.size]) textArea1.deselect() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt index c25c6c8f4..cf9a2327e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UITitleRemoConYaml.kt @@ -17,7 +17,7 @@ object UITitleRemoConYaml { - MENU_OPTIONS_CONTROLS : net.torvald.terrarum.modulebasegame.ui.UIKeyboardControlPanel - MENU_LABEL_LANGUAGE : net.torvald.terrarum.modulebasegame.ui.UITitleLanguage - MENU_MODULES : net.torvald.terrarum.ModOptionsHost - - MENU_LABEL_RETURN + - MENU_LABEL_RETURN+WRITETOCONFIG - MENU_LABEL_CREDITS - MENU_LABEL_COPYRIGHT : net.torvald.terrarum.modulebasegame.ui.UITitleCredits - MENU_CREDIT_GPL_DNT : net.torvald.terrarum.modulebasegame.ui.UITitleGPL3 diff --git a/src/net/torvald/terrarum/serialise/WriteConfig.kt b/src/net/torvald/terrarum/serialise/WriteConfig.kt new file mode 100644 index 000000000..3b2b595b6 --- /dev/null +++ b/src/net/torvald/terrarum/serialise/WriteConfig.kt @@ -0,0 +1,51 @@ +package net.torvald.terrarum.serialise + +import com.badlogic.gdx.utils.Json +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.utils.JsonFetcher + +/** + * Created by minjaesong on 2021-09-19. + */ +object WriteConfig { + + private val jsoner = Json(JsonWriter.OutputType.json) + + init { + // KVHashMap + jsoner.setSerializer(KVHashMap::class.java, object : Json.Serializer { + override fun write(json: Json, obj: KVHashMap, knownType: Class<*>?) { + json.writeObjectStart() + obj.hashMap.toSortedMap().forEach { (k, v) -> + json.writeValue(k, v) + } + json.writeObjectEnd() + } + + override fun read(json: Json, jsonData: JsonValue, type: Class<*>?): KVHashMap { + val map = KVHashMap() + JsonFetcher.forEach(jsonData) { key, obj -> + map[key] = json.readValue(null, obj) + } + return map + } + }) + + } + + operator fun invoke() { + println("Writing config...") + App.gameConfig.hashMap.forEach { s, any -> + println("config $s = $any") + } + + + val writer = java.io.FileWriter(App.configDir, false) + writer.write(jsoner.prettyPrint(App.gameConfig)) + writer.close() + } + +} \ No newline at end of file diff --git a/src/net/torvald/terrarum/utils/JsonFetcher.kt b/src/net/torvald/terrarum/utils/JsonFetcher.kt index 872c930cf..b16166095 100644 --- a/src/net/torvald/terrarum/utils/JsonFetcher.kt +++ b/src/net/torvald/terrarum/utils/JsonFetcher.kt @@ -51,7 +51,7 @@ object JsonFetcher { var counter = 0 var entry = map.child while (entry != null) { - action(entry.name ?: "(arrayindex $counter)", entry) + action(entry.name ?: "$counter", entry) entry = entry.next counter += 1 }