DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / ui / windows / inventory / AbstractInventoryWindow.kt
1 package ru.deadsoftware.cavedroid.game.ui.windows.inventory
3 import com.badlogic.gdx.math.MathUtils
4 import ru.deadsoftware.cavedroid.game.GameItemsHolder
5 import ru.deadsoftware.cavedroid.game.GameUiWindow
6 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
7 import ru.deadsoftware.cavedroid.game.model.item.InventoryItem.Companion.isNoneOrNull
9 abstract class AbstractInventoryWindow {
11 abstract val type: GameUiWindow
13 abstract var selectedItem: InventoryItem?
15 var selectItemPointer: Int = -1
17 fun onLeftCLick(
18 items: MutableList<InventoryItem>,
19 gameItemsHolder: GameItemsHolder,
20 index: Int,
21 pointer: Int = -1
22 ) {
23 if (selectedItem != null &&
24 selectedItem?.item?.isNone() != true &&
25 pointer >= 0 && selectItemPointer >= 0 &&
26 pointer != selectItemPointer
27 ) {
28 return
29 }
31 val clickedItem = items[index]
33 selectedItem?.let { selectedItem ->
34 if (!clickedItem.isNoneOrNull() && items[index].item == selectedItem.item &&
35 items[index].amount + selectedItem.amount <= selectedItem.item.params.maxStack
36 ) {
37 items[index].amount += selectedItem.amount
38 this@AbstractInventoryWindow.selectedItem = null
39 selectItemPointer = -1
40 return
41 }
42 }
44 val item = items[index]
45 items[index] = selectedItem ?: gameItemsHolder.fallbackItem.toInventoryItem()
46 selectedItem = item
47 selectItemPointer = pointer
48 }
50 fun onRightClick(items: MutableList<InventoryItem>, gameItemsHolder: GameItemsHolder, index: Int) {
51 val clickedItem = items[index]
52 val selectedItem = selectedItem
54 if (selectedItem.isNoneOrNull() && !clickedItem.isNoneOrNull()) {
55 val half = InventoryItem(clickedItem.item, MathUtils.ceil(clickedItem.amount.toFloat() / 2f))
56 this.selectedItem = half
57 clickedItem.subtract(half.amount)
58 if (clickedItem.amount == 0) {
59 items[index] = gameItemsHolder.fallbackItem.toInventoryItem()
60 }
61 return
62 }
64 if (selectedItem == null ||
65 (!clickedItem.isNoneOrNull() && selectedItem.item != clickedItem.item) ||
66 !clickedItem.canBeAdded()) {
67 return
68 }
70 val newItem = selectedItem.item.toInventoryItem(
71 (clickedItem.takeIf { !it.item.isNone() }?.amount ?: 0) + 1
72 )
73 items[index] = newItem
74 selectedItem.amount--
76 if (selectedItem.amount <= 0) {
77 this@AbstractInventoryWindow.selectedItem = null
78 }
79 }
81 }