From 6b8798a19edc323acd0b81bb33100deb6084c21e Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 18 Jun 2023 01:28:51 +0900 Subject: [PATCH] single screen ui for world portal --- assets/mods/basegame/locales/en/game.json | 3 +- .../gameactors/FixtureWorldPortal.kt | 10 +- .../ui/UIBuildingMakerBlockChooser.kt | 2 +- .../ui/UIBuildingMakerPenMenu.kt | 8 +- .../ui/UIGraphicsControlPanel.kt | 2 +- .../ui/UIItemListNavBarVertical.kt | 4 +- .../ui/UIKeyboardControlPanel.kt | 2 +- .../modulebasegame/ui/UILoadDemoSavefiles.kt | 4 +- .../modulebasegame/ui/UIWorldPortal.kt | 35 +-- .../modulebasegame/ui/UIWorldPortalCargo.kt | 216 +++++++++++++++++- .../modulebasegame/ui/UIWorldPortalListing.kt | 59 ++--- src/net/torvald/terrarum/tests/UIElemTest.kt | 2 +- src/net/torvald/terrarum/ui/UIItem.kt | 11 +- .../torvald/terrarum/ui/UIItemIntSlider.kt | 2 +- 14 files changed, 272 insertions(+), 88 deletions(-) diff --git a/assets/mods/basegame/locales/en/game.json b/assets/mods/basegame/locales/en/game.json index 972b8db51..6c31d5726 100644 --- a/assets/mods/basegame/locales/en/game.json +++ b/assets/mods/basegame/locales/en/game.json @@ -19,5 +19,6 @@ "GAME_CRAFTABLE_ITEMS": "Craftable Items", "CONTEXT_WORLD_SEARCH": "World Search", "CONTEXT_WORLD_LIST": "Worlds List", - "MENU_LABEL_RENAME": "Rename" + "MENU_LABEL_RENAME": "Rename", + "GAME_ACTION_TELEPORT": "Teleport" } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt index 39eaea16c..9e81f9bb0 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt @@ -16,13 +16,13 @@ class FixtureWorldPortal : FixtureBase { BlockBox(BlockBox.NO_COLLISION, 5, 2), nameFun = { Lang["ITEM_WORLD_PORTAL"] }, mainUI = UIWorldPortal(), - inventory = FixtureInventory(200, CAPACITY_MODE_WEIGHT) +// inventory = FixtureInventory(200, CAPACITY_MODE_WEIGHT) ) { // TODO do something with (mainUI as UIWorldPortal).*** - (mainUI as UIWorldPortal).let { ui -> - ui.transitionalCargo.chestInventory = this.inventory!! - ui.transitionalCargo.chestNameFun = this.nameFun - } +// (mainUI as UIWorldPortal).let { ui -> +// ui.transitionalCargo.chestInventory = this.inventory!! +// ui.transitionalCargo.chestNameFun = this.nameFun +// } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt index cc854045f..9b4581d7f 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerBlockChooser.kt @@ -66,7 +66,7 @@ class UIBuildingMakerBlockChooser(val parent: BuildingMaker): UICanvas() { activeCol = Color.WHITE ) - paletteItem.clickOnceListener = { _, _, _ -> + paletteItem.clickOnceListener = { _, _ -> parent.setPencilColour(prop.id) } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerPenMenu.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerPenMenu.kt index c35d7f5f7..0df2f92c6 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerPenMenu.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIBuildingMakerPenMenu.kt @@ -100,11 +100,9 @@ class UIBuildingMakerPenMenu(val parent: BuildingMaker): UICanvas() { toolButtons.forEachIndexed { index, button -> uiItems.add(button) - button.clickOnceListener = { _, _, b -> - if (b == App.getConfigInt("config_mouseprimary")) { - toolButtonsJob[index].invoke() - closeGracefully() - } + button.clickOnceListener = { _, _ -> + toolButtonsJob[index].invoke() + closeGracefully() } } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt index 11ec92628..6374f66bd 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIGraphicsControlPanel.kt @@ -90,7 +90,7 @@ class UIGraphicsControlPanel(remoCon: UIRemoCon?) : UICanvas() { } else if (args.startsWith("toggle")) { UIItemToggleButton(this, x, y, spinnerWidth, App.getConfigBoolean(optionName)) to { it: UIItem, optionStr: String -> - (it as UIItemToggleButton).clickOnceListener = { _, _, _ -> + (it as UIItemToggleButton).clickOnceListener = { _, _ -> it.toggle() App.setConfig(optionStr, it.getStatus()) } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIItemListNavBarVertical.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIItemListNavBarVertical.kt index 04536e136..79e88d207 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIItemListNavBarVertical.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIItemListNavBarVertical.kt @@ -91,11 +91,11 @@ class UIItemListNavBarVertical( gridButtonListener(this, gridModeButtons[1]) } - scrollUpButton.clickOnceListener = { _, _, _ -> + scrollUpButton.clickOnceListener = { _, _ -> scrollUpButton.highlighted = false scrollUpListener(this, scrollUpButton) } - scrollDownButton.clickOnceListener = { _, _, _ -> + scrollDownButton.clickOnceListener = { _, _ -> scrollDownButton.highlighted = false scrollDownListener(this, scrollDownButton) } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt index cdb196910..b719dab3d 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt @@ -122,7 +122,7 @@ class UIKeyboardControlPanel(remoCon: UIRemoCon?) : UICanvas() { keycaps.values.forEach { addUIitem(it) } updateKeycaps() - buttonReset.clickOnceListener = { x, y, button -> + buttonReset.clickOnceListener = { x, y -> resetKeyConfig() updateKeycaps() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt index baaf7ac52..5e5dae373 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UILoadDemoSavefiles.kt @@ -478,7 +478,7 @@ class UIItemPlayerCells( override val width = SAVE_CELL_WIDTH override val height = SAVE_CELL_HEIGHT - override var clickOnceListener: ((Int, Int, Int) -> Unit)? = { _: Int, _: Int, _: Int -> + override var clickOnceListener: ((Int, Int) -> Unit)? = { _: Int, _: Int -> UILoadGovernor.playerDisk = skimmer parent.advanceMode() } @@ -739,7 +739,7 @@ class UIItemWorldCells( private var highlightCol: Color = Toolkit.Theme.COL_LIST_DEFAULT - override var clickOnceListener: ((Int, Int, Int) -> Unit)? = { _: Int, _: Int, _: Int -> + override var clickOnceListener: ((Int, Int) -> Unit)? = { _: Int, _: Int -> UILoadGovernor.worldDisk = skimmer parent.advanceMode() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt index fcdadbb0b..b2cd09339 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortal.kt @@ -37,25 +37,6 @@ class UIWorldPortal : UICanvas( val controlHelpHeight = App.fontGame.lineHeight - private var panelTransitionLocked = false - - fun lockTransition() { - panelTransitionLocked = true - } - fun unlockTransition() { - panelTransitionLocked = false - } - fun requestTransition(target: Int) = transitionPanel.requestTransition(target) - - - val catBar = UIItemWorldPortalTopBar( - this, - 0, - 42 - YPOS_CORRECTION + (App.scr.height - internalHeight) / 2, - ) { i -> - if (!panelTransitionLocked) requestTransition(i ushr 1) - } - private val SP = "\u3000 " val portalListingControlHelp: String @@ -67,27 +48,22 @@ class UIWorldPortal : UICanvas( "$SP${App.gamepadLabelRT} ${Lang["GAME_INVENTORY"]}" - val transitionalSearch = UIWorldPortalSearch(this) +// val transitionalSearch = UIWorldPortalSearch(this) val transitionalListing = UIWorldPortalListing(this) - val transitionalCargo = UIWorldPortalCargo(this) +// val transitionalCargo = UIWorldPortalCargo(this) private val transitionPanel = UIItemHorizontalFadeSlide( this, (width - internalWidth) / 2, INVENTORY_CELLS_OFFSET_Y(), width, App.scr.height, - 1f, - transitionalSearch, transitionalListing, transitionalCargo + 0f, + transitionalListing ) init { - addUIitem(catBar) addUIitem(transitionPanel) - catBar.selectionChangeListener = { old, new -> - - } - } internal var xEnd = (width + internalWidth).div(2).toFloat() @@ -99,7 +75,6 @@ class UIWorldPortal : UICanvas( override fun updateUI(delta: Float) { - catBar.update(delta) transitionPanel.update(delta) } @@ -107,7 +82,6 @@ class UIWorldPortal : UICanvas( drawBackground(batch, handler.opacity) // UI items - catBar.render(batch, camera) transitionPanel.render(batch, camera) } @@ -122,7 +96,6 @@ class UIWorldPortal : UICanvas( } override fun dispose() { - catBar.dispose() transitionPanel.dispose() } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalCargo.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalCargo.kt index 5345b1795..a4c42ae60 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalCargo.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalCargo.kt @@ -1,13 +1,16 @@ package net.torvald.terrarum.modulebasegame.ui import com.badlogic.gdx.graphics.Camera +import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.App -import net.torvald.terrarum.INGAME +import net.torvald.terrarum.* +import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameitems.GameItem +import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.gameactors.FixtureInventory import net.torvald.terrarum.ui.Toolkit import net.torvald.terrarum.ui.UICanvas +import net.torvald.unicode.getKeycapPC class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas(), HasInventory { @@ -33,12 +36,217 @@ class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas(), HasInventory { override fun getFixtureInventory(): FixtureInventory = chestInventory override fun getPlayerInventory(): FixtureInventory = INGAME.actorNowPlaying!!.inventory - override fun updateUI(delta: Float) { + private val catBar: UIItemInventoryCatBar + private val itemListChest: UIItemInventoryItemGrid + private val itemListPlayer: UIItemInventoryItemGrid + + private var encumbrancePerc = 0f + private var isEncumbered = false + + private var halfSlotOffset = (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap * 2) / 2 + + init { + catBar = UIItemInventoryCatBar( + this, + (width - UIInventoryFull.catBarWidth) / 2, + 42 - UIInventoryFull.YPOS_CORRECTION + (App.scr.height - UIInventoryFull.internalHeight) / 2, + UIInventoryFull.internalWidth, + UIInventoryFull.catBarWidth, + false + ) + catBar.selectionChangeListener = { old, new -> itemListUpdate() } + itemListChest = UIItemInventoryItemGrid( + this, + catBar, + { getFixtureInventory() }, + Toolkit.hdrawWidth - UIInventoryFull.getWidthOfCells(6) - halfSlotOffset, + UIInventoryFull.INVENTORY_CELLS_OFFSET_Y(), + 6, UIInventoryFull.CELLS_VRT, + drawScrollOnRightside = false, + drawWallet = false, + keyDownFun = { _, _, _, _, _ -> Unit }, + touchDownFun = { gameItem, amount, button, _, _ -> + if (button == App.getConfigInt("config_mouseprimary")) { + if (gameItem != null) { + negotiator.reject(getFixtureInventory(), getPlayerInventory(), gameItem, amount) + } + itemListUpdate() + } + } + ) + // make grid mode buttons work together + itemListChest.navRemoCon.listButtonListener = { _,_ -> setCompact(false) } + itemListChest.navRemoCon.gridButtonListener = { _,_ -> setCompact(true) } + + itemListPlayer = UIItemInventoryItemGrid( + this, + catBar, + { INGAME.actorNowPlaying!!.inventory }, // literally a player's inventory + Toolkit.hdrawWidth + halfSlotOffset, + UIInventoryFull.INVENTORY_CELLS_OFFSET_Y(), + 6, UIInventoryFull.CELLS_VRT, + drawScrollOnRightside = true, + drawWallet = false, + keyDownFun = { _, _, _, _, _ -> Unit }, + touchDownFun = { gameItem, amount, button, _, _ -> + if (button == App.getConfigInt("config_mouseprimary")) { + if (gameItem != null) { + negotiator.accept(getPlayerInventory(), getFixtureInventory(), gameItem, amount) + } + itemListUpdate() + } + } + ) + itemListPlayer.navRemoCon.listButtonListener = { _,_ -> setCompact(false) } + itemListPlayer.navRemoCon.gridButtonListener = { _,_ -> setCompact(true) } + + handler.allowESCtoClose = true + + addUIitem(itemListChest) + addUIitem(itemListPlayer) } - override fun renderUI(batch: SpriteBatch, camera: Camera) { + private var openingClickLatched = false + + override fun show() { + itemListPlayer.getInventory = { INGAME.actorNowPlaying!!.inventory } + + itemListUpdate() + + openingClickLatched = Terrarum.mouseDown + + UIItemInventoryItemGrid.tooltipShowing.clear() + INGAME.setTooltipMessage(null) } + private fun itemListUpdate() { + itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIcon]) + itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIcon]) + + encumbrancePerc = getPlayerInventory().capacity.toFloat() / getPlayerInventory().maxCapacity + isEncumbered = getPlayerInventory().isEncumbered + } + + private fun setCompact(yes: Boolean) { + itemListChest.isCompactMode = yes + itemListChest.navRemoCon.gridModeButtons[0].highlighted = !yes + itemListChest.navRemoCon.gridModeButtons[1].highlighted = yes + itemListChest.itemPage = 0 + itemListChest.rebuild(catBar.catIconsMeaning[catBar.selectedIcon]) + + itemListPlayer.isCompactMode = yes + itemListPlayer.navRemoCon.gridModeButtons[0].highlighted = !yes + itemListPlayer.navRemoCon.gridModeButtons[1].highlighted = yes + itemListPlayer.itemPage = 0 + itemListPlayer.rebuild(catBar.catIconsMeaning[catBar.selectedIcon]) + + itemListUpdate() + } + + override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { + if (!openingClickLatched) { + return super.touchDown(screenX, screenY, pointer, button) + } + return false + } + + override fun updateUI(delta: Float) { + catBar.update(delta) + itemListChest.update(delta) + itemListPlayer.update(delta) + + if (openingClickLatched && !Terrarum.mouseDown) openingClickLatched = false + } + + private val thisOffsetX = Toolkit.hdrawWidth - UIInventoryFull.getWidthOfCells(6) - halfSlotOffset + private val thisOffsetX2 = thisOffsetX + (UIItemInventoryItemGrid.listGap + UIItemInventoryElemWide.height) * 7 + private val thisOffsetY = UIInventoryFull.INVENTORY_CELLS_OFFSET_Y() + private val cellsWidth = (UIItemInventoryItemGrid.listGap + UIItemInventoryElemWide.height) * 6 - UIItemInventoryItemGrid.listGap + + private val controlHelp: String + get() = if (App.environment == RunningEnvironment.PC) + "${getKeycapPC(App.getConfigInt("control_key_inventory"))} ${Lang["GAME_ACTION_CLOSE"]}" + else + "${App.gamepadLabelStart} ${Lang["GAME_ACTION_CLOSE"]} " + + override fun renderUI(batch: SpriteBatch, camera: Camera) { + // background fill + UIInventoryFull.drawBackground(batch, handler.opacity) + + // UI items + batch.color = Color.WHITE + + catBar.render(batch, camera) + itemListChest.render(batch, camera) + itemListPlayer.render(batch, camera) + + + blendNormalStraightAlpha(batch) + + // encumbrance meter + val encumbranceText = Lang["GAME_INVENTORY_ENCUMBRANCE"] + val chestName = chestNameFun() + val playerName = INGAME.actorNowPlaying!!.actorValue.getAsString(AVKey.NAME).orEmpty().let { it.ifBlank { Lang["GAME_INVENTORY"] } } + val encumbBarXPos = itemListPlayer.posX + itemListPlayer.width - UIInventoryCells.weightBarWidth + 36 + val encumbBarTextXPos = encumbBarXPos - 6 - App.fontGame.getWidth(encumbranceText) + val yEnd = -UIInventoryFull.YPOS_CORRECTION + (App.scr.height + UIInventoryFull.internalHeight).div(2).toFloat() // directly copied from UIInventoryFull.yEnd + val encumbBarYPos = yEnd - 20 + 3 // dunno why but extra 3 px is needed + val encumbCol = UIItemInventoryCellCommonRes.getHealthMeterColour(1f - encumbrancePerc, 0f, 1f) + val encumbBack = encumbCol mul UIItemInventoryCellCommonRes.meterBackDarkening + + // encumbrance bar background + batch.color = encumbBack + Toolkit.fillArea( + batch, + encumbBarXPos, + encumbBarYPos, + UIInventoryCells.weightBarWidth, + UIInventoryFull.controlHelpHeight - 6f + ) + // encumbrance bar + batch.color = encumbCol + Toolkit.fillArea( + batch, + encumbBarXPos, encumbBarYPos, + if (getPlayerInventory().capacityMode == FixtureInventory.CAPACITY_MODE_NO_ENCUMBER) + 1f + else // make sure 1px is always be seen + minOf(UIInventoryCells.weightBarWidth, maxOf(1f, UIInventoryCells.weightBarWidth * encumbrancePerc)), + UIInventoryFull.controlHelpHeight - 6f + ) + + // chest name text + batch.color = Color.WHITE + App.fontGame.draw(batch, chestName, thisOffsetX + (cellsWidth - App.fontGame.getWidth(chestName)) / 2, thisOffsetY - 30) + App.fontGame.draw(batch, playerName, thisOffsetX2 + (cellsWidth - App.fontGame.getWidth(playerName)) / 2, thisOffsetY - 30) + + // control hint + App.fontGame.draw(batch, controlHelp, thisOffsetX - 34f, encumbBarYPos - 3) + + // encumb text + batch.color = Color.WHITE + App.fontGame.draw(batch, encumbranceText, encumbBarTextXPos, encumbBarYPos - 3f) + } + + override fun doOpening(delta: Float) { + INGAME.pause() + INGAME.setTooltipMessage(null) + } + + override fun doClosing(delta: Float) { + INGAME.resume() + INGAME.setTooltipMessage(null) + } + + override fun endOpening(delta: Float) { + } + + override fun endClosing(delta: Float) { + UIItemInventoryItemGrid.tooltipShowing.clear() + INGAME.setTooltipMessage(null) // required! + } + + override fun dispose() { } } diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt index a4af59a40..09b16f12a 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIWorldPortalListing.kt @@ -49,7 +49,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { private val textAreaW = thumbw - 32 private val thumbh = 252 private val hx = Toolkit.drawWidth.div(2) - private val y = INVENTORY_CELLS_OFFSET_Y() + 1 + private val y = INVENTORY_CELLS_OFFSET_Y() + 1 - 34 private val listCount = getCellCountVertically(UIItemWorldCellsSimple.height, gridGap) private val listHeight = UIItemWorldCellsSimple.height + (listCount - 1) * (UIItemWorldCellsSimple.height + gridGap) @@ -57,18 +57,10 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { private val memoryGaugeWidth = textAreaW private val deleteButtonWidth = (thumbw - gridGap) / 2 private val buttonsY = y + listHeight + gridGap - private val buttonDeleteWorld = UIItemTextButton(this, - "MENU_LABEL_DELETE", - hx - gridGap/2 - deleteButtonWidth, - buttonsY, - deleteButtonWidth, - readFromLang = true, - hasBorder = true, - alignment = UIItemTextButton.Companion.Alignment.CENTRE - ) - private val buttonRenameWorld = UIItemTextButton(this, - "MENU_LABEL_RENAME", - buttonDeleteWorld.posX - gridGap - deleteButtonWidth, + + private val buttonSearch = UIItemTextButton(this, + "CONTEXT_WORLD_SEARCH", + hx - gridGap/2 - 2*deleteButtonWidth - gridGap, buttonsY, deleteButtonWidth, readFromLang = true, @@ -76,7 +68,16 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { alignment = UIItemTextButton.Companion.Alignment.CENTRE ) private val buttonTeleport = UIItemTextButton(this, - "CONTEXT_GAME_TELEPORT", + "GAME_ACTION_TELEPORT", + hx - gridGap/2 - deleteButtonWidth, + buttonsY, + deleteButtonWidth, + readFromLang = true, + hasBorder = true, + alignment = UIItemTextButton.Companion.Alignment.CENTRE + ) + private val buttonRename = UIItemTextButton(this, + "MENU_LABEL_RENAME", hx + gridGap/2, buttonsY, deleteButtonWidth, @@ -84,21 +85,15 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { hasBorder = true, alignment = UIItemTextButton.Companion.Alignment.CENTRE ) - private val buttonCancel = UIItemTextButton(this, - "MENU_LABEL_CANCEL", + private val buttonDelete = UIItemTextButton(this, + "MENU_LABEL_DELETE", hx + gridGap/2 + deleteButtonWidth + gridGap, buttonsY, deleteButtonWidth, readFromLang = true, hasBorder = true, alignment = UIItemTextButton.Companion.Alignment.CENTRE - ).also { - it.clickOnceListener = { _, _, _ -> - selected = null - selectedIndex = null - updateUIbyButtonSelection() - } - } + ) private val navRemoCon = UIItemListNavBarVertical(full, hx + 6 + UIItemWorldCellsSimple.width, y + 7, listHeight + 2, false) @@ -117,6 +112,12 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { } } + private fun highlightListEditButtons(state: Boolean) { + buttonRename.isActive = state + buttonDelete.isActive = state + buttonTeleport.isActive = state + } + init { CommonResourcePool.addToLoadingList("terrarum-basegame-worldportalicons") { TextureRegionPack(ModMgr.getGdxFile("basegame", "gui/worldportal_catbar.tga"), 30, 20) @@ -126,10 +127,10 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { navRemoCon.scrollUpListener = { _,_ -> scrollItemPage(-1) } navRemoCon.scrollDownListener = { _,_ -> scrollItemPage(1) } - addUIitem(buttonRenameWorld) - addUIitem(buttonDeleteWorld) + addUIitem(buttonDelete) + addUIitem(buttonRename) addUIitem(buttonTeleport) - addUIitem(buttonCancel) + addUIitem(buttonSearch) addUIitem(navRemoCon) } @@ -212,9 +213,10 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { worldList.getOrNull(it), worldList.getOrNull(it)?.diskSkimmer?.getDiskName(Common.CHARSET) ).also { button -> - button.clickOnceListener = { _, _, _ -> + button.clickOnceListener = { _, _ -> selected = button selectedIndex = it + highlightListEditButtons(it in worldList.indices) updateUIbyButtonSelection() } } @@ -232,6 +234,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { worldCells.forEach { it.show() } selected = null + highlightListEditButtons(false) updateUIbyButtonSelection() } @@ -354,7 +357,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() { // control hints batch.color = Color.WHITE - App.fontGame.draw(batch, full.portalListingControlHelp, hx - thumbw - gridGap/2 + 2, (full.yEnd + 8).toInt()) + App.fontGame.draw(batch, full.portalListingControlHelp, hx - thumbw - gridGap/2 + 2, (full.yEnd - 20).toInt()) } override fun hide() { diff --git a/src/net/torvald/terrarum/tests/UIElemTest.kt b/src/net/torvald/terrarum/tests/UIElemTest.kt index b0dffcc63..f3887124d 100644 --- a/src/net/torvald/terrarum/tests/UIElemTest.kt +++ b/src/net/torvald/terrarum/tests/UIElemTest.kt @@ -111,7 +111,7 @@ class DummyTogglePane : UICanvas() { private var timer = 0f init { - button1.clickOnceListener = { _,_,_ -> + button1.clickOnceListener = { _,_ -> button1.toggle() } uiItems.add(button1) diff --git a/src/net/torvald/terrarum/ui/UIItem.kt b/src/net/torvald/terrarum/ui/UIItem.kt index 37d590ecd..87486c597 100644 --- a/src/net/torvald/terrarum/ui/UIItem.kt +++ b/src/net/torvald/terrarum/ui/UIItem.kt @@ -3,6 +3,7 @@ package net.torvald.terrarum.ui import com.badlogic.gdx.graphics.Camera import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.utils.Disposable +import net.torvald.terrarum.App import net.torvald.terrarum.Terrarum import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent @@ -113,11 +114,11 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I open var touchUpListener: ((Int, Int, Int, Int) -> Unit)? = null /** Parameters: amountX, amountY */ open var scrolledListener: ((Float, Float) -> Unit)? = null - /** Parameters: relative mouseX, relative mouseY, button - * + /** Parameters: relative mouseX, relative mouseY + * ClickOnce listeners are only fired when clicked with primary mouse button * PROTIP: if clickOnceListener does not seem to work, make sure your parent UI is handling touchDown() and touchUp() events! */ - open var clickOnceListener: ((Int, Int, Int) -> Unit)? = null + open var clickOnceListener: ((Int, Int) -> Unit)? = null open var clickOnceListenerFired = false @@ -221,8 +222,8 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I actionDone = true } - if (clickOnceListener != null && !clickOnceListenerFired && mouseUp) { - clickOnceListener!!.invoke(itemRelativeMouseX, itemRelativeMouseY, button) + if (clickOnceListener != null && !clickOnceListenerFired && mouseUp && button == App.getConfigInt("config_mouseprimary")) { + clickOnceListener!!.invoke(itemRelativeMouseX, itemRelativeMouseY) actionDone = true } } diff --git a/src/net/torvald/terrarum/ui/UIItemIntSlider.kt b/src/net/torvald/terrarum/ui/UIItemIntSlider.kt index b8721c13d..43e1f608f 100644 --- a/src/net/torvald/terrarum/ui/UIItemIntSlider.kt +++ b/src/net/torvald/terrarum/ui/UIItemIntSlider.kt @@ -115,7 +115,7 @@ class UIItemIntSlider( override var scrolledListener: ((Float, Float) -> Unit)? get() = super.scrolledListener set(_) {} - override var clickOnceListener: ((Int, Int, Int) -> Unit)? + override var clickOnceListener: ((Int, Int) -> Unit)? get() = super.clickOnceListener set(_) {} override var clickOnceListenerFired: Boolean