DEADSOFTWARE

Fix furnace bugs
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / ui / windows / inventory / AbstractInventoryWindow.kt
1 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
3 import ru.deadsoftware.cavedroid.game.GameItemsHolder
4 import ru.deadsoftware.cavedroid.game.GameUiWindow
5 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
7 abstract class AbstractInventoryWindow {
9 abstract val type: GameUiWindow
11 abstract var selectedItem: InventoryItem?
13 var selectItemPointer: Int = -1
15 fun onLeftCLick(items: MutableList<InventoryItem?>, gameItemsHolder: GameItemsHolder, index: Int, pointer: Int = -1) {
16 if (selectedItem != null && selectedItem?.item?.isNone() != true && pointer >= 0 && selectItemPointer >= 0 && pointer != selectItemPointer) {
17 return
18 }
20 val clickedItem = items[index]
22 selectedItem?.let { selectedItem ->
23 if (clickedItem != null && items[index]!!.item == selectedItem.item &&
24 items[index]!!.amount + selectedItem.amount <= selectedItem.item.params.maxStack) {
25 items[index]!!.amount += selectedItem.amount
26 this@AbstractInventoryWindow.selectedItem = null
27 selectItemPointer = -1
28 return
29 }
30 }
32 val item = items[index]
33 items[index] = selectedItem ?: gameItemsHolder.fallbackItem.toInventoryItem()
34 selectedItem = item
35 selectItemPointer = pointer
36 }
38 fun onRightClick(items: MutableList<InventoryItem?>, index: Int) {
39 val clickedItem = items[index]
40 val selectedItem = selectedItem
41 ?.takeIf { clickedItem == null || clickedItem.item.isNone() || it.item == items[index]!!.item && items[index]!!.amount + 1 < it.item.params.maxStack }
42 ?: return
44 val newItem = selectedItem.item.toInventoryItem((clickedItem?.takeIf { !it.item.isNone() }?.amount ?: 0) + 1)
45 items[index] = newItem
46 selectedItem.amount --
48 if (selectedItem.amount <= 0) {
49 this@AbstractInventoryWindow.selectedItem = null
50 }
51 }
53 }