X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmobs%2Fplayer%2FInventory.kt;h=43f298c876e9702fb5e675e5b429602b22fbf13d;hb=90daad1796cd59f11f12589686d9afe882ddb9b1;hp=44ee6dd17e6bb94393475dc22c2778f4a2569338;hpb=13157246344c2b94d24354040f0f2d2fb5beb7ea;p=cavedroid.git 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 44ee6dd..43f298c 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Inventory.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Inventory.kt @@ -3,7 +3,7 @@ package ru.deadsoftware.cavedroid.game.mobs.player 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 @@ -14,9 +14,11 @@ class Inventory( tooltipManager: TooltipManager, ) : Serializable { + @Suppress("UNNECESSARY_LATEINIT") @Transient private lateinit var tooltipManager: TooltipManager + @Suppress("UNNECESSARY_LATEINIT") @Transient private lateinit var fallbackItem: InventoryItem @@ -47,23 +49,29 @@ class Inventory( 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 @@ -73,24 +81,31 @@ class Inventory( 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() + 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() + _items[slot] = drop.item.toInventoryItem(drop.amount) if (slot == activeSlot) { showCurrentItemTooltip() } + drop.pickedUp = true } - - drop.pickedUp = true } fun addItem(item: Item) { @@ -105,11 +120,23 @@ class Inventory( 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) { - activeItem.subtract(count) - if (activeItem.amount <= 0) { - _items[activeSlot] = fallbackItem + decreaseItemAmount(activeSlot, count) + } + + fun clear() { + for (i in _items.indices) { + _items[i] = fallbackItem } } } \ No newline at end of file