inventory cell only call touchDown when mouse is up

This commit is contained in:
minjaesong
2024-01-13 20:09:46 +09:00
parent 1b74ee8efc
commit ab171fe9b3
6 changed files with 57 additions and 24 deletions

View File

@@ -60,7 +60,7 @@ open class ItemFileRef(originalID: ItemID) : GameItem(originalID) {
override var baseMass = 1.0 override var baseMass = 1.0
override var baseToolSize: Double? = null override var baseToolSize: Double? = null
override var inventoryCategory = Category.GENERIC override var inventoryCategory = Category.GENERIC
override val isDynamic = true override val isDynamic = false
override val materialId = "" override val materialId = ""
override var equipPosition = EquipPosition.HAND_GRIP override var equipPosition = EquipPosition.HAND_GRIP
} }

View File

@@ -61,8 +61,10 @@ abstract class UIItemInventoryCellBase(
} }
override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
touchDownFun(item, amount, button, extraInfo, this) if (mouseUp) {
super.touchDown(screenX, screenY, pointer, button) touchDownFun(item, amount, button, extraInfo, this)
super.touchDown(screenX, screenY, pointer, button)
}
return true return true
} }
} }

View File

@@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.ui.UIItemCatBar.Companion.CAT_ALL import net.torvald.terrarum.ui.UIItemCatBar.Companion.CAT_ALL
import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem

View File

@@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.OrthographicCamera import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory import net.torvald.terrarum.modulebasegame.gameactors.ActorInventory
import net.torvald.terrarum.modulebasegame.gameactors.InventoryPair import net.torvald.terrarum.modulebasegame.gameactors.InventoryPair
@@ -30,8 +31,8 @@ class UIJukeboxInventory(val parent: UIJukebox) : UICanvas() {
private val playerInventory: ActorInventory private val playerInventory: ActorInventory
get() = INGAME.actorNowPlaying!!.inventory get() = INGAME.actorNowPlaying!!.inventory
private val fixtureDiscCell: List<UIItemJukeboxSonglist> = (0 until SLOT_SIZE).map { index -> private val fixtureDiscCell: Array<UIItemInventoryElemWide> = (0 until SLOT_SIZE).map { index ->
UIItemJukeboxSonglist(this, UIItemInventoryElemWide(this,
thisOffsetX, thisOffsetY + (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap) * index, thisOffsetX, thisOffsetY + (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap) * index,
6 * UIItemInventoryElemSimple.height + 5 * UIItemInventoryItemGrid.listGap, 6 * UIItemInventoryElemSimple.height + 5 * UIItemInventoryItemGrid.listGap,
keyDownFun = { _, _, _, _, _ -> Unit }, keyDownFun = { _, _, _, _, _ -> Unit },
@@ -39,25 +40,29 @@ class UIJukeboxInventory(val parent: UIJukebox) : UICanvas() {
if (mouseButton == App.getConfigInt("config_mouseprimary")) { if (mouseButton == App.getConfigInt("config_mouseprimary")) {
if (gameItem != null) { if (gameItem != null) {
parent.discInventory[index] = null parent.discInventory[index] = null
playerInventory.add(gameItem, 1) playerInventory.add(gameItem)
// shift discs // shift discs
for (i in index + 1 until SLOT_SIZE) { for (i in index + 1 until SLOT_SIZE) {
parent.discInventory[i - 1] = parent.discInventory[i] parent.discInventory[i - 1] = parent.discInventory[i]
} }
parent.discInventory[SLOT_SIZE - 1] = null parent.discInventory[SLOT_SIZE - 1] = null
rebuild()
} }
} }
}, },
) )
} }.toTypedArray()
private val playerInventoryUI = UITemplateHalfInventory(this, false).also { private val playerInventoryUI = UITemplateHalfInventory(this, false).also {
it.itemListTouchDownFun = { gameItem, _, _, _, _ -> it.itemListTouchDownFun = { gameItem, _, _, _, _ ->
if (currentFreeSlot < SLOT_SIZE) { if (currentFreeSlot < SLOT_SIZE && gameItem != null) {
fixtureDiscCell[currentFreeSlot].title = (gameItem as ItemFileRef).name fixtureDiscCell[currentFreeSlot].item = gameItem
fixtureDiscCell[currentFreeSlot].artist = (gameItem as ItemFileRef).author playerInventory.remove(gameItem)
currentFreeSlot += 1 currentFreeSlot += 1
rebuild()
} }
} }
} }
@@ -77,7 +82,7 @@ class UIJukeboxInventory(val parent: UIJukebox) : UICanvas() {
override fun show() { override fun show() {
super.show() super.show()
playerInventoryUI.rebuild(playerInventoryFilterFun) rebuild()
} }
override fun updateUI(delta: Float) { override fun updateUI(delta: Float) {
@@ -91,7 +96,9 @@ class UIJukeboxInventory(val parent: UIJukebox) : UICanvas() {
override fun dispose() { override fun dispose() {
} }
private fun rebuild() {
playerInventoryUI.rebuild(playerInventoryFilterFun)
}
} }
@@ -113,10 +120,19 @@ class UIJukeboxSonglistPanel(val parent: UIJukebox) : UICanvas() {
cellBackgroundCol = Color(0x704c20c8.toInt()) cellBackgroundCol = Color(0x704c20c8.toInt())
) )
private val rows = SLOT_SIZE / 2
private val vgap = 48
private val internalHeight = (UIItemJukeboxSonglist.height + vgap) * (rows - 1)
private val ys = (0 until rows).map {
App.scr.halfh - (internalHeight / 2) + (UIItemJukeboxSonglist.height + vgap) * it
}
private val jukeboxPlayButtons = (0 until SLOT_SIZE).map { index -> private val jukeboxPlayButtons = (0 until SLOT_SIZE).map { index ->
UIItemJukeboxSonglist(this, UIItemJukeboxSonglist(this,
if (index % 2 == 0) thisOffsetX else thisOffsetX2, if (index % 2 == 0) thisOffsetX else thisOffsetX2,
thisOffsetY + (UIItemInventoryElemSimple.height + UIItemInventoryItemGrid.listGap) * index.shr(1), ys[index.shr(1)],
6 * UIItemInventoryElemSimple.height + 5 * UIItemInventoryItemGrid.listGap, 6 * UIItemInventoryElemSimple.height + 5 * UIItemInventoryItemGrid.listGap,
colourTheme = songButtonColourTheme, colourTheme = songButtonColourTheme,
keyDownFun = { _, _, _, _, _ -> Unit }, keyDownFun = { _, _, _, _, _ -> Unit },
@@ -126,18 +142,23 @@ class UIJukeboxSonglistPanel(val parent: UIJukebox) : UICanvas() {
} }
} }
) )
} }.toTypedArray()
fun rebuild() { fun rebuild() {
jukeboxPlayButtons.forEachIndexed { index, button -> jukeboxPlayButtons.forEachIndexed { index, button ->
parent.discInventory[index].let { parent.discInventory[index].let {
val item = ItemCodex[it] as? ItemFileRef val item = ItemCodex[it] as? ItemFileRef
button.title = item?.name ?: "" button.title = "${index+1} ${item?.name}"// ?: ""
button.artist = item?.author ?: "" button.artist = "${index+1} ${item?.author}"// ?: ""
} }
} }
} }
override fun show() {
super.show()
rebuild()
}
init { init {
jukeboxPlayButtons.forEach { jukeboxPlayButtons.forEach {
addUIitem(it) addUIitem(it)

View File

@@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.App import net.torvald.terrarum.App
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.blendNormalStraightAlpha import net.torvald.terrarum.blendNormalStraightAlpha
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.modulebasegame.ui.InventoryCellColourTheme import net.torvald.terrarum.modulebasegame.ui.InventoryCellColourTheme
@@ -42,10 +43,13 @@ class UIItemInventoryElemSimple(
override val width = Companion.height override val width = Companion.height
override val height = Companion.height override val height = Companion.height
private val itemImageOrDefault: TextureRegion
get() = itemImage ?: CommonResourcePool.getAsTextureRegion("itemplaceholder_16")
private val imgOffsetY: Float private val imgOffsetY: Float
get() = (this.height - itemImage!!.regionHeight).div(2).toFloat() // to snap to the pixel grid get() = (this.height - itemImageOrDefault.regionHeight).div(2).toFloat() // to snap to the pixel grid
private val imgOffsetX: Float private val imgOffsetX: Float
get() = (this.height - itemImage!!.regionWidth).div(2).toFloat() // to snap to the pixel grid get() = (this.height - itemImageOrDefault.regionWidth).div(2).toFloat() // to snap to the pixel grid
override fun update(delta: Float) { override fun update(delta: Float) {
@@ -76,11 +80,11 @@ class UIItemInventoryElemSimple(
// quickslot and equipped slot indicator is not needed as it's intended for blocks and walls // quickslot and equipped slot indicator is not needed as it's intended for blocks and walls
// and you can clearly see the quickslot UI anyway // and you can clearly see the quickslot UI anyway
if (item != null && itemImage != null) { if (item != null) {
// item image // item image
batch.color = Color.WHITE batch.color = Color.WHITE
batch.draw(itemImage, posX + imgOffsetX, posY + imgOffsetY) batch.draw(itemImageOrDefault, posX + imgOffsetX, posY + imgOffsetY)

View File

@@ -5,6 +5,8 @@ import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.App import net.torvald.terrarum.App
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.blendNormalStraightAlpha import net.torvald.terrarum.blendNormalStraightAlpha
import net.torvald.terrarum.gameitems.GameItem import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.modulebasegame.ui.InventoryCellColourTheme import net.torvald.terrarum.modulebasegame.ui.InventoryCellColourTheme
@@ -46,10 +48,13 @@ class UIItemInventoryElemWide(
override val height = Companion.height override val height = Companion.height
private val itemImageOrDefault: TextureRegion
get() = itemImage ?: CommonResourcePool.getAsTextureRegion("itemplaceholder_16")
private val imgOffsetY: Float private val imgOffsetY: Float
get() = (this.height - itemImage!!.regionHeight).div(2).toFloat() // to snap to the pixel grid get() = (this.height - itemImageOrDefault.regionHeight).div(2).toFloat() // to snap to the pixel grid
private val imgOffsetX: Float private val imgOffsetX: Float
get() = (this.height - itemImage!!.regionWidth).div(2).toFloat() // NOTE we're using this.height to get horizontal value; this is absofreakinlutely intentional (otherwise images would draw center of this wide cell which is not something we want) get() = (this.height - itemImageOrDefault.regionWidth).div(2).toFloat() // NOTE we're using this.height to get horizontal value; this is absofreakinlutely intentional (otherwise images would draw center of this wide cell which is not something we want)
private val textOffsetX = 50f private val textOffsetX = 50f
private val textOffsetY = 8f private val textOffsetY = 8f
@@ -88,14 +93,14 @@ class UIItemInventoryElemWide(
Toolkit.drawBoxBorder(batch, posX, posY, width, height) Toolkit.drawBoxBorder(batch, posX, posY, width, height)
if (item != null && itemImage != null) { if (item != null) {
val amountString = amount.toItemCountText() val amountString = amount.toItemCountText()
blendNormalStraightAlpha(batch) blendNormalStraightAlpha(batch)
// item image // item image
batch.color = Color.WHITE batch.color = Color.WHITE
batch.draw(itemImage, posX + imgOffsetX, posY + imgOffsetY) batch.draw(itemImageOrDefault, posX + imgOffsetX, posY + imgOffsetY)
// if mouse is over, text lights up // if mouse is over, text lights up
// highlight item name and count (blocks/walls) if the item is equipped // highlight item name and count (blocks/walls) if the item is equipped