From b4dcb559cd23aec2b23ea43e643264b62adbea44 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 27 Oct 2021 23:39:32 +0900 Subject: [PATCH] pushing Return on World Selection will bring you to the Character Selection (and the implementation is quite dirty I might say) --- .../gamecontroller/IMEProviderDelegate.kt | 2 +- .../modulebasegame/ui/UILoadDemoSavefiles.kt | 37 +++++++++++++--- .../terrarum/modulebasegame/ui/UIRemoCon.kt | 44 ++++++++++++------- src/net/torvald/terrarum/ui/UICanvas.kt | 3 +- 4 files changed, 61 insertions(+), 25 deletions(-) diff --git a/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt b/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt index 9e320a132..8056e0122 100644 --- a/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt +++ b/src/net/torvald/terrarum/gamecontroller/IMEProviderDelegate.kt @@ -87,5 +87,5 @@ class IMEDictionary(private val filename: String) { return if (out.isNotEmpty()) out.substring(1) else "" } - + } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt index b975fab3c..a079f25cf 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt @@ -18,14 +18,17 @@ import net.torvald.terrarum.* import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.CELL_COL -import net.torvald.terrarum.serialise.Common -import net.torvald.terrarum.serialise.LoadSavegame -import net.torvald.terrarum.serialise.ReadPlayer import net.torvald.terrarum.savegame.ByteArray64InputStream import net.torvald.terrarum.savegame.ByteArray64Reader import net.torvald.terrarum.savegame.DiskSkimmer import net.torvald.terrarum.savegame.EntryFile -import net.torvald.terrarum.ui.* +import net.torvald.terrarum.serialise.Common +import net.torvald.terrarum.serialise.LoadSavegame +import net.torvald.terrarum.serialise.ReadPlayer +import net.torvald.terrarum.ui.Movement +import net.torvald.terrarum.ui.Toolkit +import net.torvald.terrarum.ui.UICanvas +import net.torvald.terrarum.ui.UIItem import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import java.time.Instant import java.time.format.DateTimeFormatter @@ -179,13 +182,33 @@ class UILoadDemoSavefiles(val remoCon: UIRemoCon) : UICanvas() { } private fun getCells() = if (mode == 0) playerCells else worldCells - private val menuTree = arrayOf(UITitleRemoConYaml.injectedMenuSingleCharSel, UITitleRemoConYaml.injectedMenuSingleWorldSel).map { Yaml(it).parse() } private var loadFired = 0 private var oldMode = -1 - private val remoConParentNode = remoCon.currentRemoConContents + + private val mode1Node = Yaml(UITitleRemoConYaml.injectedMenuSingleCharSel).parse() + private val mode2Node = Yaml(UITitleRemoConYaml.injectedMenuSingleWorldSel).parse() + + private val menus = listOf(mode1Node, mode2Node) + + init { + // this UI will NOT persist; the parent of the mode1Node must be set using an absolute value (e.g. treeRoot, not remoCon.currentRemoConContents) + + //printdbg(this, "UILoadDemoSaveFiles called, from:") + //printStackTrace(this) + + mode1Node.parent = remoCon.treeRoot + mode2Node.parent = mode1Node + + mode1Node.data = "MENU_MODE_SINGLEPLAYER+NODISPOSE : net.torvald.terrarum.modulebasegame.ui.UILoadDemoSavefiles" + mode2Node.data = "MENU_MODE_SINGLEPLAYER+NODISPOSE : net.torvald.terrarum.modulebasegame.ui.UILoadDemoSavefiles" + + printdbg(this, "mode1Node parent: ${mode1Node.parent?.data}") // will be 'null' because the parent is the root node + printdbg(this, "mode1Node data: ${mode1Node.data}") + printdbg(this, "mode2Node data: ${mode2Node.data}") + } private fun modeChangedHandler(mode: Int) { - remoCon.setNewRemoConContents(menuTree[mode], remoConParentNode) + remoCon.setNewRemoConContents(menus[mode]) } override fun updateUI(delta: Float) { diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt index 74549d24a..16b1e5e40 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIRemoCon.kt @@ -17,13 +17,13 @@ import net.torvald.terrarum.ui.UIItemTextButtonList.Companion.DEFAULT_LINE_HEIGH /** * Created by minjaesong on 2018-08-29. */ -open class UIRemoCon(val parent: TitleScreen, treeRepresentation: QNDTreeNode) : UICanvas() { +open class UIRemoCon(val parent: TitleScreen, val treeRoot: QNDTreeNode) : UICanvas() { override var openCloseTime = 0f private var remoConTray: UIRemoConElement // this remocon is dynamically generated - var currentRemoConContents = treeRepresentation; private set - private var currentlySelectedRemoConItem = treeRepresentation.data + var currentRemoConContents = treeRoot; private set + private var currentlySelectedRemoConItem = treeRoot.data override var width: Int get() = remoConWidth // somehow NOT making this constant causes a weird issue @@ -40,7 +40,7 @@ open class UIRemoCon(val parent: TitleScreen, treeRepresentation: QNDTreeNode) { @@ -49,6 +49,7 @@ open class UIRemoCon(val parent: TitleScreen, treeRepresentation: QNDTreeNode, forceSetParent: QNDTreeNode? = null) { + printdbg(this, "setting new remocon contents: ${newCurrentRemoConContents.data}") + if (forceSetParent != null) { newCurrentRemoConContents.parent = forceSetParent } + // only go deeper if that node has child to navigate if (newCurrentRemoConContents.children.size != 0) { remoConTray.consume() @@ -175,6 +172,23 @@ open class UIRemoCon(val parent: TitleScreen, treeRepresentation: QNDTreeNode