From 43629661280053439ba85cd910868ba7445ff065 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 14 Oct 2023 15:34:04 +0900 Subject: [PATCH] super rudimentary mod config --- assets/mods/basegame/configplan.csv | 0 src/net/torvald/terrarum/ModMgr.kt | 14 ++++++-- src/net/torvald/terrarum/ModOptionsHost.kt | 42 ++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 assets/mods/basegame/configplan.csv diff --git a/assets/mods/basegame/configplan.csv b/assets/mods/basegame/configplan.csv new file mode 100644 index 000000000..e69de29bb diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index 2125c3c61..41df573fc 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -15,6 +15,7 @@ import net.torvald.terrarum.gameitems.ItemID import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.MaterialCodex import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.serialise.Common import net.torvald.terrarum.utils.CSVFetcher import net.torvald.terrarum.utils.JsonFetcher import net.torvald.terrarum.utils.forEachSiblings @@ -67,8 +68,10 @@ object ModMgr { val version: String, val jar: String, val dependencies: Array, - val isInternal: Boolean + val isInternal: Boolean, + val configPlan: List ) { + override fun toString() = "\tModule #$order -- $properName | $version | $author\n" + "\t$description | $releaseDate\n" + @@ -192,7 +195,14 @@ object ModMgr { val dependency = modMetadata.getProperty("dependency").split(Regex(""";[ ]*""")).filter { it.isNotEmpty() }.toTypedArray() val isDir = FileSystems.getDefault().getPath("$modDir/$moduleName").toFile().isDirectory - module = ModuleMetadata(index, isDir, getGdxFile("$modDir/$moduleName/icon.png"), properName, description, descTranslations, author, packageName, entryPoint, releaseDate, version, jar, dependency, isInternal) + val configPlan = ArrayList() + File("$modDirInternal/$moduleName/configplan.csv").let { + if (it.exists() && it.isFile) { + configPlan.addAll(it.readLines(Common.CHARSET).filter { it.isNotBlank() }) + } + } + + module = ModuleMetadata(index, isDir, getGdxFile("$modDir/$moduleName/icon.png"), properName, description, descTranslations, author, packageName, entryPoint, releaseDate, version, jar, dependency, isInternal, configPlan) val versionNumeral = version.split('.') val versionNumber = versionNumeral.toVersionNumber() diff --git a/src/net/torvald/terrarum/ModOptionsHost.kt b/src/net/torvald/terrarum/ModOptionsHost.kt index ac02aefe2..4844fd899 100644 --- a/src/net/torvald/terrarum/ModOptionsHost.kt +++ b/src/net/torvald/terrarum/ModOptionsHost.kt @@ -1,10 +1,16 @@ package net.torvald.terrarum 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 +import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.ui.ControlPanelCommon +import net.torvald.terrarum.modulebasegame.ui.ControlPanelOptions import net.torvald.terrarum.modulebasegame.ui.UIRemoCon +import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas +import net.torvald.unicode.TIMES class ModOptionsHost(val remoCon: UIRemoCon) : UICanvas() { init { @@ -17,10 +23,46 @@ class ModOptionsHost(val remoCon: UIRemoCon) : UICanvas() { override var width = App.scr.width - UIRemoCon.remoConWidth - moduleAreaHMargin override var height = App.scr.height - moduleAreaHMargin * 2 + init { + + } + + private var currentlySelectedModule = "basegame" + + override fun show() { + super.show() + + makeConfig(currentlySelectedModule) + } + + + private fun makeConfig(modname: String) { + val mod = ModMgr.moduleInfo[modname]!! + if (mod.configPlan.isEmpty()) return + + val modOptions: ControlPanelOptions = mod.configPlan.map { + val options = it.split("->") + val labelfun = if (options[1].startsWith("Lang:")) { + { Lang[options[1].substringAfter(":")] } + } + else { + { options[1] } + } + arrayOf("$modname:${options[0]}", labelfun, options[2]) + }.toTypedArray() + + ControlPanelCommon.register(this, width, "basegame.modcontrolpanel.$modname", modOptions) + } + override fun updateUI(delta: Float) { + uiItems.forEach { it.update(delta) } } override fun renderUI(batch: SpriteBatch, camera: OrthographicCamera) { + // TODO draw currently editing mod name + + ControlPanelCommon.render("basegame.modcontrolpanel.$currentlySelectedModule", width, batch) + uiItems.forEach { it.render(batch, camera) } } override fun dispose() {