[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / model / item / InventoryItem.kt
diff --git a/core/src/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt b/core/src/ru/deadsoftware/cavedroid/game/model/item/InventoryItem.kt
index 49cc59d6a5366f484df8a51a6ecd400d538a2a14..44d3179839d2507e2f42dbcc33d0117c645d777d 100644 (file)
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.glutils.ShapeRenderer
import ru.deadsoftware.cavedroid.game.GameItemsHolder
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.glutils.ShapeRenderer
import ru.deadsoftware.cavedroid.game.GameItemsHolder
+import ru.deadsoftware.cavedroid.game.mobs.player.Inventory
import ru.deadsoftware.cavedroid.misc.Assets
import ru.deadsoftware.cavedroid.misc.Assets
+import ru.deadsoftware.cavedroid.misc.utils.drawSprite
import ru.deadsoftware.cavedroid.misc.utils.drawString
import ru.deadsoftware.cavedroid.misc.utils.px
import java.io.Serializable
class InventoryItem @JvmOverloads constructor(
val itemKey: String,
import ru.deadsoftware.cavedroid.misc.utils.drawString
import ru.deadsoftware.cavedroid.misc.utils.px
import java.io.Serializable
class InventoryItem @JvmOverloads constructor(
val itemKey: String,
- var amount: Int = 1,
+ _amount: Int = 1,
) : Serializable {
) : Serializable {
+ var amount = _amount
+ set(value) {
+ field = if (value < 0) {
+ 0
+ } else {
+ value
+ }
+ }
+
@Transient
lateinit var item: Item
private set
@Transient
lateinit var item: Item
private set
item = gameItemsHolder.getItem(itemKey)
}
item = gameItemsHolder.getItem(itemKey)
}
+ @JvmOverloads
+ fun add(count: Int = 1) {
+ if (count > 0 && Int.MAX_VALUE - count < amount) {
+ throw IllegalArgumentException("$amount + $count exceeds Int.MAX_VALUE")
+ }
+
+ amount += count
+ }
+
+ @JvmOverloads
+ fun subtract(count: Int = 1) {
+ if (count < 0) {
+ throw IllegalArgumentException("Can't subtract negative amount")
+ }
+
+ add(-count)
+ }
+
+ @JvmOverloads
+ fun canBeAdded(count: Int = 1): Boolean {
+ return amount + count <= item.params.maxStack
+ }
+
private fun drawAmountText(spriteBatch: SpriteBatch, text: String, x: Float, y: Float) {
spriteBatch.drawString(text, x + 1, y + 1, Color.BLACK)
spriteBatch.drawString(text, x, y, Color.WHITE)
}
private fun drawAmountText(spriteBatch: SpriteBatch, text: String, x: Float, y: Float) {
spriteBatch.drawString(text, x + 1, y + 1, Color.BLACK)
spriteBatch.drawString(text, x, y, Color.WHITE)
}
+ fun drawSelected(spriteBatch: SpriteBatch, x: Float, y: Float) {
+ if (item.isNone()) {
+ return
+ }
+
+ val sprite = item.sprite
+ val amountString = amount.toString()
+ spriteBatch.drawSprite(sprite, x - 10f, y - 10f, rotation = 0f, width = 20f, height = 20f)
+ drawAmountText(
+ spriteBatch = spriteBatch,
+ text = amountString,
+ x = x + 10f - Assets.getStringWidth(amountString) + 1f,
+ y = y + 10f - Assets.getStringHeight(amountString) + 1f
+ )
+ }
+
fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, x: Float, y: Float) {
if (item.isNone()) {
return
}
val sprite = item.sprite
fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, x: Float, y: Float) {
if (item.isNone()) {
return
}
val sprite = item.sprite
- spriteBatch.draw(sprite, x, y)
+ val placeableMarginTop = (item as? Item.Placeable)?.block?.params?.spriteMargins?.top ?: 0
+ val placeableMarginLeft = (item as? Item.Placeable)?.block?.params?.spriteMargins?.left ?: 0
+ spriteBatch.drawSprite(sprite, x + placeableMarginLeft, y + placeableMarginTop)
if (amount < 2) {
return
if (amount < 2) {
return
}
}
}
}
+ companion object {
+ fun InventoryItem?.isNoneOrNull() = this?.item == null || this.item.isNone()
+ }
}
}