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 36827c36bd997bdfea07808f98412d403a4e9f14..3012d6675a3346bed978a5183b342120d31ab0b9 100644 (file)
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.objects.drop.Drop
import ru.deadsoftware.cavedroid.game.ui.TooltipManager
import java.io.Serializable
tooltipManager: TooltipManager,
) : Serializable {
+ @Suppress("UNNECESSARY_LATEINIT")
@Transient
private lateinit var tooltipManager: TooltipManager
+ @Suppress("UNNECESSARY_LATEINIT")
@Transient
private lateinit var fallbackItem: InventoryItem
tooltipManager.showHotbarTooltip(activeItem.item.params.name)
}
- val activeItem get() = items[activeSlot]
+ val activeItem get() = _items[activeSlot]
fun initItems(gameItemsHolder: GameItemsHolder, tooltipManager: TooltipManager) {
this.tooltipManager = tooltipManager
fallbackItem = gameItemsHolder.fallbackItem.toInventoryItem()
- items.forEach { item ->
+ _items.forEach { item ->
item.init(gameItemsHolder)
}
}
- private fun getItemPickSlot(item: Item): Int {
- for (i in items.indices) {
- val inventoryItem = items[i]
+ private fun getItemPickSlot(drop: Drop): Int {
+ val item = drop.item
+
+ for (i in _items.indices) {
+ val inventoryItem = _items[i]
if (item == inventoryItem.item && inventoryItem.canBeAdded()) {
return i
}
+ }
+
+ for (i in _items.indices) {
+ val inventoryItem = _items[i]
if (inventoryItem.item.isNone()) {
return i
return -1
}
- fun canPickItem(item: Item): Boolean {
- return getItemPickSlot(item) >= 0
+ fun canPickItem(drop: Drop): Boolean {
+ return getItemPickSlot(drop) >= 0
}
fun pickDrop(drop: Drop) {
- val slot = getItemPickSlot(drop.item).takeIf { it >= 0 } ?: return
- val inventoryItem = items[slot]
+ val slot = getItemPickSlot(drop).takeIf { it >= 0 } ?: return
+ val inventoryItem = _items[slot]
if (inventoryItem.item == drop.item) {
- inventoryItem.add(drop.amount)
+ if (inventoryItem.canBeAdded(drop.amount)) {
+ inventoryItem.add(drop.amount)
+ drop.pickedUp = true
+ } else {
+ val addCount = inventoryItem.item.params.maxStack - inventoryItem.amount
+ inventoryItem.add(addCount)
+ drop.subtract(addCount)
+ pickDrop(drop)
+ }
} else {
_items[slot] = drop.item.toInventoryItem(drop.amount)
if (slot == activeSlot) {
showCurrentItemTooltip()
}
+ drop.pickedUp = true
}
-
- drop.pickedUp = true
}
fun addItem(item: Item) {