DEADSOFTWARE

Refactor window controls
[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
6 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem.Companion.isNoneOrNull
8 abstract class AbstractInventoryWindow {
10 abstract val type: GameUiWindow
12 abstract var selectedItem: InventoryItem?
14 var selectItemPointer: Int = -1
16 fun onLeftCLick(
17 items: MutableList<InventoryItem>,
18 gameItemsHolder: GameItemsHolder,
19 index: Int,
20 pointer: Int = -1
21 ) {
22 if (selectedItem != null &&
23 selectedItem?.item?.isNone() != true &&
24 pointer >= 0 && selectItemPointer >= 0 &&
25 pointer != selectItemPointer
26 ) {
27 return
28 }
30 val clickedItem = items[index]
32 selectedItem?.let { selectedItem ->
33 if (!clickedItem.isNoneOrNull() && items[index].item == selectedItem.item &&
34 items[index].amount + selectedItem.amount <= selectedItem.item.params.maxStack
35 ) {
36 items[index].amount += selectedItem.amount
37 this@AbstractInventoryWindow.selectedItem = null
38 selectItemPointer = -1
39 return
40 }
41 }
43 val item = items[index]
44 items[index] = selectedItem ?: gameItemsHolder.fallbackItem.toInventoryItem()
45 selectedItem = item
46 selectItemPointer = pointer
47 }
49 fun onRightClick(items: MutableList<InventoryItem>, index: Int) {
50 val clickedItem = items[index]
51 val selectedItem = selectedItem
52 ?.takeIf {
53 !clickedItem.isNoneOrNull() || clickedItem.item.isNone() ||
54 it.item == items[index].item && items[index].amount + 1 < it.item.params.maxStack
55 }
56 ?: return
58 val newItem = selectedItem.item.toInventoryItem(
59 (clickedItem.takeIf { !it.item.isNone() }?.amount ?: 0) + 1
60 )
61 items[index] = newItem
62 selectedItem.amount--
64 if (selectedItem.amount <= 0) {
65 this@AbstractInventoryWindow.selectedItem = null
66 }
67 }
69 }