diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Inventory.kt b/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Inventory.kt
index 4469038ba6f7a1632c54297202650085b02e00e0..36827c36bd997bdfea07808f98412d403a4e9f14 100644 (file)
import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
import ru.deadsoftware.cavedroid.game.model.item.Item
import ru.deadsoftware.cavedroid.game.objects.Drop
+import ru.deadsoftware.cavedroid.game.ui.TooltipManager
import java.io.Serializable
class Inventory(
val size: Int,
val hotbarSize: Int,
- gameItemsHolder: GameItemsHolder
+ gameItemsHolder: GameItemsHolder,
+ tooltipManager: TooltipManager,
) : Serializable {
+ @Transient
+ private lateinit var tooltipManager: TooltipManager
+
+ @Transient
+ private lateinit var fallbackItem: InventoryItem
+
init {
+ fallbackItem = gameItemsHolder.fallbackItem.toInventoryItem()
+ this.tooltipManager = tooltipManager
+
if (size < 0 || hotbarSize < 0 || hotbarSize > size) {
throw IllegalArgumentException("Invalid inventory sizes: hotbarSize=$hotbarSize; size=$size")
}
set(value) {
if (value in 0 ..< hotbarSize) {
field = value
+ showCurrentItemTooltip()
}
}
+ fun showCurrentItemTooltip() {
+ tooltipManager.showHotbarTooltip(activeItem.item.params.name)
+ }
+
val activeItem get() = items[activeSlot]
- fun initItems(gameItemsHolder: GameItemsHolder) {
+ fun initItems(gameItemsHolder: GameItemsHolder, tooltipManager: TooltipManager) {
+ this.tooltipManager = tooltipManager
+ fallbackItem = gameItemsHolder.fallbackItem.toInventoryItem()
items.forEach { item ->
item.init(gameItemsHolder)
}
val inventoryItem = items[slot]
if (inventoryItem.item == drop.item) {
- inventoryItem.add()
- drop.pickedUp = true
+ inventoryItem.add(drop.amount)
} else {
- _items[slot] = drop.item.toInventoryItem()
- drop.pickedUp = true
+ _items[slot] = drop.item.toInventoryItem(drop.amount)
+ if (slot == activeSlot) {
+ showCurrentItemTooltip()
+ }
}
+
+ drop.pickedUp = true
}
fun addItem(item: Item) {
)
_items[0] = item.toInventoryItem(item.params.maxStack)
+ showCurrentItemTooltip()
+ }
+
+ @JvmOverloads
+ fun decreaseItemAmount(slot: Int, count: Int = 1) {
+ val item = _items[slot]
+ item.subtract(count)
+ if (item.amount <= 0) {
+ _items[slot] = fallbackItem
+ }
+ }
+
+ @JvmOverloads
+ fun decreaseCurrentItemAmount(count: Int = 1) {
+ decreaseItemAmount(activeSlot, count)
}
}
\ No newline at end of file