DEADSOFTWARE

Update version
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / mobs / player / Inventory.kt
index b82aa44bcb775991b4ff12e175a511925620c28b..36827c36bd997bdfea07808f98412d403a4e9f14 100644 (file)
@@ -4,19 +4,26 @@ import ru.deadsoftware.cavedroid.game.GameItemsHolder
 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")
         }
@@ -32,12 +39,18 @@ class Inventory(
         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)
@@ -69,12 +82,15 @@ class Inventory(
         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) {
@@ -86,13 +102,20 @@ class Inventory(
         )
 
         _items[0] = item.toInventoryItem(item.params.maxStack)
+        showCurrentItemTooltip()
     }
 
     @JvmOverloads
-    fun decreaseCurrentItemAmount(count: Int = 1) {
-        activeItem.subtract(count)
-        if (activeItem.amount <= 0) {
-            _items[activeSlot] = fallbackItem
+    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