From 1457cbffb34d9b58a4561545c82624136df4cb4c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 20 Jun 2023 00:15:53 +0900 Subject: [PATCH] worldportal: submitting teleportrequest works, needs UI refinement --- .../gameactors/FixtureWorldPortal.kt | 16 ++++++++++++- .../modulebasegame/ui/UIWorldPortal.kt | 2 ++ .../modulebasegame/ui/UIWorldPortalListing.kt | 11 ++++++++- .../modulebasegame/ui/UIWorldPortalSearch.kt | 24 ++++--------------- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt index 221469884..73d0b7372 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt @@ -4,9 +4,11 @@ import net.torvald.terrarum.INGAME import net.torvald.terrarum.WireCodex import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory.Companion.CAPACITY_MODE_WEIGHT import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase import net.torvald.terrarum.modulebasegame.ui.UIWorldPortal +import net.torvald.terrarum.savegame.DiskSkimmer import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import org.dyn4j.geometry.Vector2 import java.util.HashMap @@ -27,6 +29,8 @@ class FixtureWorldPortal : Electric { // ui.transitionalCargo.chestInventory = this.inventory!! // ui.transitionalCargo.chestNameFun = this.nameFun // } + + (mainUI as UIWorldPortal).host = this } @@ -44,8 +48,14 @@ class FixtureWorldPortal : Electric { setWireSinkAt(2, 1, "digital_bit") } + @Transient internal var teleportRequest: TeleportRequest? = null + + override fun update(delta: Float) { + super.update(delta) + } + override fun onRisingEdge(readFrom: BlockBoxIndex) { - println("[FixtureWorldPortal] teleport! ($readFrom)") + println("[FixtureWorldPortal] teleport! $teleportRequest") } override fun reload() { @@ -54,4 +64,8 @@ class FixtureWorldPortal : Electric { // TODO do something with (mainUI as UIWorldPortal).*** } + internal data class TeleportRequest( + val worldDiskToLoad: DiskSkimmer?, // for loading existing worlds + val worldLoadParam: TerrarumIngame.NewWorldParameters? // for creating new world + ) } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt index ed84352af..a520b7166 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt @@ -7,6 +7,7 @@ import com.jme3.math.FastMath import net.torvald.terrarum.* import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.gameactors.FixtureWorldPortal import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.YPOS_CORRECTION import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.drawBackground @@ -34,6 +35,7 @@ class UIWorldPortal : UICanvas( override var width: Int = Toolkit.drawWidth override var height: Int = App.scr.height + internal lateinit var host: FixtureWorldPortal val controlHelpHeight = App.fontGame.lineHeight diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt index 676419c03..98947043e 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt @@ -11,6 +11,7 @@ import net.torvald.terrarum.* import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameworld.fmod import net.torvald.terrarum.langpack.Lang +import net.torvald.terrarum.modulebasegame.gameactors.FixtureWorldPortal import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.getCellCountVertically import net.torvald.terrarum.realestate.LandUtil.CHUNK_H @@ -86,7 +87,15 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { readFromLang = true, hasBorder = true, alignment = UIItemTextButton.Companion.Alignment.CENTRE - ) + ).also { + it.clickOnceListener = { _,_ -> + if (selected?.worldInfo != null) { + full.host.teleportRequest = FixtureWorldPortal.TeleportRequest( + selected?.worldInfo?.diskSkimmer, null + ) + } + } + } private val buttonRename = UIItemTextButton(this, "MENU_LABEL_RENAME", hx + gridGap/2, diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt index 2dd3c238c..8f96358fa 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalSearch.kt @@ -14,6 +14,7 @@ import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.TerrarumIngame import net.torvald.terrarum.modulebasegame.WorldgenLoadScreen +import net.torvald.terrarum.modulebasegame.gameactors.FixtureWorldPortal import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer import net.torvald.terrarum.modulebasegame.serialise.ReadActor import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y @@ -82,32 +83,15 @@ class UIWorldPortalSearch(val full: UIWorldPortal) : UICanvas() { init { goButton.clickOnceListener = { _, _ -> -// printdbg(this, "generate! Size=${sizeSelector.selection}, Name=${nameInput.getTextOrPlaceholder()}, Seed=${seedInput.getTextOrPlaceholder()}") - - /*val ingame = TerrarumIngame(App.batch) - val player = ReadActor.invoke(UILoadGovernor.playerDisk!!, ByteArray64Reader(UILoadGovernor.playerDisk!!.getFile( - VDFileID.SAVEGAMEINFO - )!!.bytes, Common.CHARSET) - ) as IngamePlayer val seed = try { seedInput.getTextOrPlaceholder().toLong() } catch (e: NumberFormatException) { XXHash64.hash(seedInput.getTextOrPlaceholder().toByteArray(Charsets.UTF_8), 10000) } - val (wx, wy) = TerrarumIngame.NEW_WORLD_SIZE[sizeSelector.selection] - val worldParam = TerrarumIngame.NewGameParams( - player, TerrarumIngame.NewWorldParameters( - wx, wy, seed, nameInput.getTextOrPlaceholder() - ) - ) - ingame.gameLoadInfoPayload = worldParam - ingame.gameLoadMode = TerrarumIngame.GameLoadMode.CREATE_NEW - - Terrarum.setCurrentIngameInstance(ingame) - val loadScreen = WorldgenLoadScreen(ingame, wx, wy) - App.setLoadScreen(loadScreen)*/ - + val (wx, wy) = TerrarumIngame.WORLDPORTAL_NEW_WORLD_SIZE[sizeSelector.selection] + val worldParam = TerrarumIngame.NewWorldParameters(wx, wy, seed, nameInput.getTextOrPlaceholder()) + full.host.teleportRequest = FixtureWorldPortal.TeleportRequest(null, worldParam) } backButton.clickOnceListener = { _, _ -> full.requestTransition(0)