X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fui%2Fwindows%2Finventory%2FAbstractInventoryWindow.kt;h=f49ba4908d1cd91b88ce7918ce823a8fef715d57;hb=9606fce8cc7c9b264abd7cb38583faaebb610540;hp=9d8e0f93387fd99da2198fa9d5ead2dc7028a13e;hpb=13157246344c2b94d24354040f0f2d2fb5beb7ea;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/ui/windows/inventory/AbstractInventoryWindow.kt b/core/src/ru/deadsoftware/cavedroid/game/ui/windows/inventory/AbstractInventoryWindow.kt index 9d8e0f9..f49ba49 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/ui/windows/inventory/AbstractInventoryWindow.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/ui/windows/inventory/AbstractInventoryWindow.kt @@ -1,5 +1,6 @@ package ru.deadsoftware.cavedroid.game.ui.windows.inventory +import ru.deadsoftware.cavedroid.game.GameItemsHolder import ru.deadsoftware.cavedroid.game.GameUiWindow import ru.deadsoftware.cavedroid.game.model.item.InventoryItem @@ -9,4 +10,44 @@ abstract class AbstractInventoryWindow { abstract var selectedItem: InventoryItem? + var selectItemPointer: Int = -1 + + fun onLeftCLick(items: MutableList, gameItemsHolder: GameItemsHolder, index: Int, pointer: Int = -1) { + if (selectedItem != null && selectedItem?.item?.isNone() != true && pointer >= 0 && selectItemPointer >= 0 && pointer != selectItemPointer) { + return + } + + val clickedItem = items[index] + + selectedItem?.let { selectedItem -> + if (clickedItem != null && items[index]!!.item == selectedItem.item && + items[index]!!.amount + selectedItem.amount <= selectedItem.item.params.maxStack) { + items[index]!!.amount += selectedItem.amount + this@AbstractInventoryWindow.selectedItem = null + selectItemPointer = -1 + return + } + } + + val item = items[index] + items[index] = selectedItem ?: gameItemsHolder.fallbackItem.toInventoryItem() + selectedItem = item + selectItemPointer = pointer + } + + fun onRightClick(items: MutableList, index: Int) { + val clickedItem = items[index] + val selectedItem = selectedItem + ?.takeIf { clickedItem == null || clickedItem.item.isNone() || it.item == items[index]!!.item && items[index]!!.amount + 1 < it.item.params.maxStack } + ?: return + + val newItem = selectedItem.item.toInventoryItem((clickedItem?.takeIf { !it.item.isNone() }?.amount ?: 0) + 1) + items[index] = newItem + selectedItem.amount -- + + if (selectedItem.amount <= 0) { + this@AbstractInventoryWindow.selectedItem = null + } + } + } \ No newline at end of file