From 781f6718593dec2d8b3acbf17dc22b987e04cdf0 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Fri, 6 Oct 2023 14:18:14 +0900 Subject: [PATCH] fix: workbench failes to load because uiInventoryPlayer is uninit'd at the load time --- .../terrarum/modulebasegame/TerrarumIngame.kt | 3 +++ .../gameactors/FixtureWorkbench.kt | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt index 6ecc7ae9c..1065055f1 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumIngame.kt @@ -189,6 +189,9 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) { lateinit var uiPieMenu: UIQuickslotPie lateinit var uiQuickBar: UIQuickslotBar lateinit var uiInventoryPlayer: UIInventoryFull + + internal val uiInventoryPlayerReady: Boolean get() = ::uiInventoryPlayer.isInitialized // this is some ugly hack but I didn't want to make uiInventoryPlayer nullable so bite me + /** * This is a dedicated property for the fixtures' UI. * diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt index 93dd59ac4..e9c6e5bf4 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt @@ -21,8 +21,7 @@ class FixtureWorkbench : FixtureBase, CraftingStation { constructor() : super( BlockBox(BlockBox.ALLOW_MOVE_DOWN, 2, 1), - nameFun = { Lang["ITEM_WORKBENCH"] }, - mainUI = (INGAME as? TerrarumIngame)?.uiInventoryPlayer + nameFun = { Lang["ITEM_WORKBENCH"] } ) { val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/workbench.tga") @@ -40,4 +39,17 @@ class FixtureWorkbench : FixtureBase, CraftingStation { } } + private var mainUIhookHackInstalled = false + override fun update(delta: Float) { + // adding UI to the fixture as players may right-click on the workbenches instead of pressing a keyboard key + (INGAME as? TerrarumIngame)?.let { ingame -> + if (!mainUIhookHackInstalled && ingame.uiInventoryPlayerReady) { + mainUIhookHackInstalled = true + this.mainUI = ingame.uiInventoryPlayer // this field is initialised only after a full load so this hack is necessary + } + } + + super.update(delta) + } + } \ No newline at end of file