mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
fix: storage chest ui would be shifted to left and any mouse button would trigger the action
This commit is contained in:
@@ -42,6 +42,7 @@ import net.torvald.terrarum.savegame.VDUtil
|
||||
import net.torvald.terrarum.savegame.VirtualDisk
|
||||
import net.torvald.terrarum.serialise.Common
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.Toolkit.hdrawWidth
|
||||
import net.torvald.terrarum.ui.UIAutosaveNotifier
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.terrarum.weather.WeatherMixer
|
||||
@@ -521,7 +522,7 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
||||
|
||||
// pie menu
|
||||
uiPieMenu = UIQuickslotPie()
|
||||
uiPieMenu.setPosition(drawWidth / 2, App.scr.halfh)
|
||||
uiPieMenu.setPosition(hdrawWidth, App.scr.halfh)
|
||||
|
||||
// vital metre
|
||||
// fill in getter functions by
|
||||
|
||||
@@ -58,6 +58,9 @@ class UIInventoryFull(
|
||||
val INVENTORY_CELLS_OFFSET_X = { 0 + (Toolkit.drawWidth - internalWidth) / 2 }
|
||||
val INVENTORY_CELLS_OFFSET_Y = { -YPOS_CORRECTION + 107 + (App.scr.height - internalHeight) / 2 }
|
||||
|
||||
fun getWidthOfCells(count: Int, cellWidth: Int = UIItemInventoryElemWide.height, gapWidth: Int = UIItemInventoryItemGrid.listGap) =
|
||||
(cellWidth * count) + (gapWidth * (count - 1))
|
||||
|
||||
val catBarWidth = 330
|
||||
|
||||
val gradStartCol = Color(0x404040_60)
|
||||
|
||||
@@ -145,35 +145,37 @@ open class UIItemInventoryItemGrid(
|
||||
|
||||
fun createInvCellGenericTouchDownFun(listRebuildFun: () -> Unit): (GameItem?, Long, Int, Any?, UIItemInventoryCellBase) -> Unit {
|
||||
return { item: GameItem?, amount: Long, button: Int, _, _ ->
|
||||
if (item != null && Terrarum.ingame != null) {
|
||||
// equip da shit
|
||||
val itemEquipSlot = item.equipPosition
|
||||
if (itemEquipSlot == GameItem.EquipPosition.NULL) {
|
||||
TODO("Equip position is NULL, does this mean it's single-consume items like a potion? (from item: \"$item\" with itemID: ${item.originalID}/${item.dynamicID})")
|
||||
}
|
||||
val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying
|
||||
if (player != null) {
|
||||
|
||||
if (item != ItemCodex[player.inventory.itemEquipped.get(itemEquipSlot)]) { // if this item is unequipped, equip it
|
||||
player.equipItem(item)
|
||||
|
||||
// also equip on the quickslot
|
||||
player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL)?.let {
|
||||
player.inventory.setQuickslotItem(it, item.dynamicID)
|
||||
}
|
||||
if (button == App.getConfigInt("config_mouseprimary")) {
|
||||
if (item != null && Terrarum.ingame != null) {
|
||||
// equip da shit
|
||||
val itemEquipSlot = item.equipPosition
|
||||
if (itemEquipSlot == GameItem.EquipPosition.NULL) {
|
||||
TODO("Equip position is NULL, does this mean it's single-consume items like a potion? (from item: \"$item\" with itemID: ${item.originalID}/${item.dynamicID})")
|
||||
}
|
||||
else { // if not, unequip it
|
||||
player.unequipItem(item)
|
||||
val player = (Terrarum.ingame!! as TerrarumIngame).actorNowPlaying
|
||||
if (player != null) {
|
||||
|
||||
// also unequip on the quickslot
|
||||
player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL)?.let {
|
||||
player.inventory.setQuickslotItem(it, null)
|
||||
if (item != ItemCodex[player.inventory.itemEquipped.get(itemEquipSlot)]) { // if this item is unequipped, equip it
|
||||
player.equipItem(item)
|
||||
|
||||
// also equip on the quickslot
|
||||
player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL)?.let {
|
||||
player.inventory.setQuickslotItem(it, item.dynamicID)
|
||||
}
|
||||
}
|
||||
else { // if not, unequip it
|
||||
player.unequipItem(item)
|
||||
|
||||
// also unequip on the quickslot
|
||||
player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL)?.let {
|
||||
player.inventory.setQuickslotItem(it, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
listRebuildFun()
|
||||
}
|
||||
|
||||
listRebuildFun()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ class UIQuickslotPie : UICanvas() {
|
||||
// update controls
|
||||
if (handler.isOpened || handler.isOpening) {
|
||||
val cursorPos = Vector2(Terrarum.mouseScreenX.toDouble(), Terrarum.mouseScreenY.toDouble())
|
||||
val centre = Vector2(Toolkit.drawWidth / 2.0, App.scr.halfh.toDouble())
|
||||
val centre = Vector2(Toolkit.hdrawWidth.toDouble(), App.scr.halfh.toDouble())
|
||||
val deg = -(centre - cursorPos).direction.toFloat()
|
||||
|
||||
selection = Math.round(deg * slotCount / FastMath.TWO_PI)
|
||||
|
||||
@@ -8,6 +8,7 @@ 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.modulebasegame.ui.UIInventoryFull.Companion.getWidthOfCells
|
||||
import net.torvald.terrarum.ui.Toolkit
|
||||
import net.torvald.terrarum.ui.UICanvas
|
||||
import net.torvald.unicode.getKeycapPC
|
||||
@@ -23,7 +24,7 @@ internal class UIStorageChest : UICanvas(
|
||||
lateinit var chestInventory: FixtureInventory
|
||||
lateinit var chestNameFun: () -> String
|
||||
|
||||
override var width = App.scr.width
|
||||
override var width = Toolkit.drawWidth
|
||||
override var height = App.scr.height
|
||||
|
||||
private val negotiator = object : InventoryTransactionNegotiator() {
|
||||
@@ -49,12 +50,12 @@ internal class UIStorageChest : UICanvas(
|
||||
private var encumbrancePerc = 0f
|
||||
private var isEncumbered = false
|
||||
|
||||
private var halfSlotOffset = (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap) / 2
|
||||
private var halfSlotOffset = (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap * 2) / 2
|
||||
|
||||
init {
|
||||
catBar = UIItemInventoryCatBar(
|
||||
this,
|
||||
(App.scr.width - UIInventoryFull.catBarWidth) / 2,
|
||||
(width - UIInventoryFull.catBarWidth) / 2,
|
||||
42 - UIInventoryFull.YPOS_CORRECTION + (App.scr.height - UIInventoryFull.internalHeight) / 2,
|
||||
UIInventoryFull.internalWidth,
|
||||
UIInventoryFull.catBarWidth,
|
||||
@@ -65,17 +66,19 @@ internal class UIStorageChest : UICanvas(
|
||||
this,
|
||||
catBar,
|
||||
{ getFixtureInventory() },
|
||||
UIInventoryFull.INVENTORY_CELLS_OFFSET_X() - halfSlotOffset,
|
||||
Toolkit.hdrawWidth - getWidthOfCells(6) - halfSlotOffset,
|
||||
UIInventoryFull.INVENTORY_CELLS_OFFSET_Y(),
|
||||
6, UIInventoryFull.CELLS_VRT,
|
||||
drawScrollOnRightside = false,
|
||||
drawWallet = false,
|
||||
keyDownFun = { _, _, _, _, _ -> Unit },
|
||||
touchDownFun = { gameItem, amount, _, _, _ ->
|
||||
if (gameItem != null) {
|
||||
negotiator.reject(getFixtureInventory(), getPlayerInventory(), gameItem, amount)
|
||||
touchDownFun = { gameItem, amount, button, _, _ ->
|
||||
if (button == App.getConfigInt("config_mouseprimary")) {
|
||||
if (gameItem != null) {
|
||||
negotiator.reject(getFixtureInventory(), getPlayerInventory(), gameItem, amount)
|
||||
}
|
||||
itemListUpdate()
|
||||
}
|
||||
itemListUpdate()
|
||||
}
|
||||
)
|
||||
// make grid mode buttons work together
|
||||
@@ -86,17 +89,19 @@ internal class UIStorageChest : UICanvas(
|
||||
this,
|
||||
catBar,
|
||||
{ INGAME.actorNowPlaying!!.inventory }, // literally a player's inventory
|
||||
UIInventoryFull.INVENTORY_CELLS_OFFSET_X() - halfSlotOffset + (UIItemInventoryItemGrid.listGap + UIItemInventoryElemWide.height) * 7,
|
||||
Toolkit.hdrawWidth + halfSlotOffset,
|
||||
UIInventoryFull.INVENTORY_CELLS_OFFSET_Y(),
|
||||
6, UIInventoryFull.CELLS_VRT,
|
||||
drawScrollOnRightside = true,
|
||||
drawWallet = false,
|
||||
keyDownFun = { _, _, _, _, _ -> Unit },
|
||||
touchDownFun = { gameItem, amount, _, _, _ ->
|
||||
if (gameItem != null) {
|
||||
negotiator.accept(getPlayerInventory(), getFixtureInventory(), gameItem, amount)
|
||||
touchDownFun = { gameItem, amount, button, _, _ ->
|
||||
if (button == App.getConfigInt("config_mouseprimary")) {
|
||||
if (gameItem != null) {
|
||||
negotiator.accept(getPlayerInventory(), getFixtureInventory(), gameItem, amount)
|
||||
}
|
||||
itemListUpdate()
|
||||
}
|
||||
itemListUpdate()
|
||||
}
|
||||
)
|
||||
itemListPlayer.navRemoCon.listButtonListener = { _,_ -> setCompact(false) }
|
||||
@@ -161,7 +166,7 @@ internal class UIStorageChest : UICanvas(
|
||||
if (openingClickLatched && !Terrarum.mouseDown) openingClickLatched = false
|
||||
}
|
||||
|
||||
private val thisOffsetX = UIInventoryFull.INVENTORY_CELLS_OFFSET_X() - halfSlotOffset
|
||||
private val thisOffsetX = Toolkit.hdrawWidth - 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
|
||||
|
||||
@@ -3,8 +3,8 @@ 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 com.jme3.math.FastMath
|
||||
import net.torvald.terrarum.*
|
||||
import net.torvald.terrarum.gameactors.AVKey
|
||||
import net.torvald.terrarum.langpack.Lang
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.INVENTORY_CELLS_OFFSET_Y
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.YPOS_CORRECTION
|
||||
@@ -13,7 +13,6 @@ import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.internal
|
||||
import net.torvald.terrarum.modulebasegame.ui.UIInventoryFull.Companion.internalWidth
|
||||
import net.torvald.terrarum.ui.*
|
||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||
import net.torvald.unicode.getKeycapConsole
|
||||
import net.torvald.unicode.getKeycapPC
|
||||
|
||||
/**
|
||||
@@ -53,7 +52,9 @@ class UIWorldPortal : UICanvas(
|
||||
this,
|
||||
0,
|
||||
42 - YPOS_CORRECTION + (App.scr.height - internalHeight) / 2,
|
||||
) { i -> if (!panelTransitionLocked) requestTransition(i) }
|
||||
) { i ->
|
||||
if (!panelTransitionLocked) requestTransition(i ushr 1)
|
||||
}
|
||||
|
||||
|
||||
private val SP = "\u3000 "
|
||||
@@ -83,7 +84,9 @@ class UIWorldPortal : UICanvas(
|
||||
addUIitem(catBar)
|
||||
addUIitem(transitionPanel)
|
||||
|
||||
catBar.selectionChangeListener = { old, new ->
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -96,7 +99,8 @@ class UIWorldPortal : UICanvas(
|
||||
|
||||
|
||||
override fun updateUI(delta: Float) {
|
||||
|
||||
catBar.update(delta)
|
||||
transitionPanel.update(delta)
|
||||
}
|
||||
|
||||
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||
@@ -113,8 +117,13 @@ class UIWorldPortal : UICanvas(
|
||||
INGAME.setTooltipMessage(null)
|
||||
}
|
||||
|
||||
override fun hide() {
|
||||
transitionPanel.hide()
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
catBar.dispose()
|
||||
transitionPanel.dispose()
|
||||
}
|
||||
|
||||
fun resetUI() {
|
||||
@@ -124,18 +133,21 @@ class UIWorldPortal : UICanvas(
|
||||
override fun doOpening(delta: Float) {
|
||||
super.doOpening(delta)
|
||||
resetUI()
|
||||
transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) }
|
||||
INGAME.pause()
|
||||
INGAME.setTooltipMessage(null)
|
||||
}
|
||||
|
||||
override fun doClosing(delta: Float) {
|
||||
super.doClosing(delta)
|
||||
transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) }
|
||||
INGAME.resume()
|
||||
INGAME.setTooltipMessage(null)
|
||||
}
|
||||
|
||||
override fun endOpening(delta: Float) {
|
||||
super.endOpening(delta)
|
||||
transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) }
|
||||
UIItemInventoryItemGrid.tooltipShowing.clear()
|
||||
INGAME.setTooltipMessage(null) // required!
|
||||
}
|
||||
@@ -143,6 +155,7 @@ class UIWorldPortal : UICanvas(
|
||||
override fun endClosing(delta: Float) {
|
||||
super.endClosing(delta)
|
||||
resetUI()
|
||||
transitionPanel.uis.forEach { it.opacity = FastMath.pow(opacity, 0.5f) }
|
||||
UIItemInventoryItemGrid.tooltipShowing.clear()
|
||||
INGAME.setTooltipMessage(null) // required!
|
||||
}
|
||||
@@ -179,13 +192,19 @@ class UIItemWorldPortalTopBar(
|
||||
"CONTEXT_WORLD_SEARCH",
|
||||
"",
|
||||
"CONTEXT_WORLD_LIST",
|
||||
"GAME_INVENTORY",
|
||||
"",
|
||||
"GAME_INVENTORY",
|
||||
)
|
||||
private val buttonGapSize = 120
|
||||
private val highlighterYPos = icons.tileH + 4
|
||||
|
||||
var selection = 2
|
||||
var selectedPanel = 2; private set
|
||||
|
||||
/** (oldIndex: Int?, newIndex: Int) -> Unit
|
||||
* Indices are raw index. That is, not re-arranged. */
|
||||
var selectionChangeListener: ((Int?, Int) -> Unit)? = null
|
||||
|
||||
private var transitionFired = false
|
||||
|
||||
private val buttons = Array<UIItemImageButton>(5) {
|
||||
val xoff = if (it == 1) -32 else if (it == 3) 32 else 0
|
||||
@@ -204,6 +223,30 @@ class UIItemWorldPortalTopBar(
|
||||
)
|
||||
}
|
||||
|
||||
private val workingButtons = arrayOf(0,2,4)
|
||||
|
||||
override fun update(delta: Float) {
|
||||
super.update(delta)
|
||||
|
||||
|
||||
workingButtons.forEach { buttons[it].update(delta) }
|
||||
|
||||
// transition stuffs
|
||||
workingButtons.filter { buttons[it].mousePushed }.firstOrNull()?.let { pushedButton ->
|
||||
if (selectedPanel != pushedButton) transitionFired = true
|
||||
selectedPanel = pushedButton
|
||||
|
||||
workingButtons.forEach { i ->
|
||||
buttons[i].highlighted = i == pushedButton
|
||||
}
|
||||
}
|
||||
|
||||
if (transitionFired) {
|
||||
transitionFired = false
|
||||
panelTransitionReqFun(selectedPanel)
|
||||
}
|
||||
}
|
||||
|
||||
override fun render(batch: SpriteBatch, camera: Camera) {
|
||||
super.render(batch, camera)
|
||||
|
||||
@@ -212,8 +255,8 @@ class UIItemWorldPortalTopBar(
|
||||
|
||||
// label
|
||||
batch.color = Color.WHITE
|
||||
val text = Lang[catIconLabels[selection]]
|
||||
App.fontGame.draw(batch, text, buttons[selection].posX + 10 - (App.fontGame.getWidth(text) / 2), posY + highlighterYPos + 4)
|
||||
val text = Lang[catIconLabels[selectedPanel]]
|
||||
App.fontGame.draw(batch, text, buttons[selectedPanel].posX + 10 - (App.fontGame.getWidth(text) / 2), posY + highlighterYPos + 4)
|
||||
|
||||
|
||||
blendNormalStraightAlpha(batch)
|
||||
|
||||
@@ -12,14 +12,11 @@ class UIWorldPortalCargo(val full: UIWorldPortal) : UICanvas() {
|
||||
override var height: Int = App.scr.height
|
||||
|
||||
override fun updateUI(delta: Float) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,7 +259,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() {
|
||||
|
||||
override fun updateUI(delta: Float) {
|
||||
uiItems.forEach { it.update(delta) }
|
||||
worldCells.forEach { it.update(delta) }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { it.update(delta) }
|
||||
}
|
||||
|
||||
private val iconGap = 12f
|
||||
@@ -350,7 +350,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() {
|
||||
|
||||
|
||||
uiItems.forEach { it.render(batch, camera) }
|
||||
worldCells.forEach { it.render(batch, camera) }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { it.render(batch, camera) }
|
||||
|
||||
// control hints
|
||||
batch.color = Color.WHITE
|
||||
@@ -359,15 +359,15 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() {
|
||||
|
||||
override fun hide() {
|
||||
uiItems.forEach { it.hide() }
|
||||
worldCells.forEach { it.hide() }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { it.hide() }
|
||||
|
||||
worldCells.forEach { try { it.dispose() } catch (_: GdxRuntimeException) {} }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { try { it.dispose() } catch (_: GdxRuntimeException) {} }
|
||||
worldList.forEach { try { it.dispose() } catch (_: GdxRuntimeException) {} }
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
uiItems.forEach { it.dispose() }
|
||||
worldCells.forEach { try { it.dispose() } catch (_: GdxRuntimeException) {} }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { try { it.dispose() } catch (_: GdxRuntimeException) {} }
|
||||
worldList.forEach { try { it.dispose() } catch (_: GdxRuntimeException) {} }
|
||||
}
|
||||
|
||||
@@ -384,7 +384,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() {
|
||||
override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
|
||||
if (this.isVisible) {
|
||||
uiItems.forEach { it.touchUp(screenX, screenY, pointer, button) }
|
||||
worldCells.forEach { it.touchUp(screenX, screenY, pointer, button) }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { it.touchUp(screenX, screenY, pointer, button) }
|
||||
handler.subUIs.forEach { it.touchUp(screenX, screenY, pointer, button) }
|
||||
return true
|
||||
}
|
||||
@@ -394,7 +394,7 @@ class UIWorldPortalListing(val full: UIWorldPortal) : UICanvas() {
|
||||
override fun scrolled(amountX: Float, amountY: Float): Boolean {
|
||||
if (this.isVisible) {
|
||||
uiItems.forEach { it.scrolled(amountX, amountY) }
|
||||
worldCells.forEach { it.scrolled(amountX, amountY) }
|
||||
if (::worldCells.isInitialized) worldCells.forEach { it.scrolled(amountX, amountY) }
|
||||
handler.subUIs.forEach { it.scrolled(amountX, amountY) }
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -15,14 +15,11 @@ class UIWorldPortalSearch(val full: UIWorldPortal) : UICanvas() {
|
||||
override var height: Int = App.scr.height
|
||||
|
||||
override fun updateUI(delta: Float) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
override fun dispose() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
@@ -93,6 +93,10 @@ object Toolkit : Disposable {
|
||||
get() = App.scr.width - if (App.getConfigBoolean("fx_streamerslayout")) App.scr.chatWidth else 0
|
||||
val drawWidthf: Float
|
||||
get() = drawWidth.toFloat()
|
||||
val hdrawWidth: Int
|
||||
get() = drawWidth / 2
|
||||
val hdrawWidthf: Float
|
||||
get() = hdrawWidth.toFloat()
|
||||
|
||||
fun drawCentered(batch: SpriteBatch, image: Texture, screenPosY: Int, ui: UICanvas? = null) {
|
||||
val imageW = image.width
|
||||
|
||||
Reference in New Issue
Block a user