X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmobs%2Fplayer%2FInventory.kt;h=d99a90ec60e8762c5e6b0c16f4fdfeccb02b361c;hb=b9841a5aa1ccc1c4d30b23854b14d8de346951fd;hp=b82aa44bcb775991b4ff12e175a511925620c28b;hpb=9af7e45e07d903996eab693d958679ed699dcac7;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 b82aa44..d99a90e 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Inventory.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/mobs/player/Inventory.kt @@ -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,25 +39,35 @@ class Inventory( set(value) { if (value in 0 ..< hotbarSize) { field = value + showCurrentItemTooltip() } } - val activeItem get() = items[activeSlot] + fun showCurrentItemTooltip() { + tooltipManager.showHotbarTooltip(activeItem.item.params.name) + } - fun initItems(gameItemsHolder: GameItemsHolder) { + 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] + 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 @@ -66,15 +83,18 @@ class Inventory( fun pickDrop(drop: Drop) { val slot = getItemPickSlot(drop.item).takeIf { it >= 0 } ?: return - val inventoryItem = items[slot] + 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 +106,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