[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / ui / windows / inventory / AbstractInventoryWindow.kt
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 f49ba4908d1cd91b88ce7918ce823a8fef715d57..ed15baca1d5d49baa0d1daf5942dffb3b3c21443 100644 (file)
package ru.deadsoftware.cavedroid.game.ui.windows.inventory
+import com.badlogic.gdx.math.MathUtils
import ru.deadsoftware.cavedroid.game.GameItemsHolder
import ru.deadsoftware.cavedroid.game.GameUiWindow
import ru.deadsoftware.cavedroid.game.model.item.InventoryItem
+import ru.deadsoftware.cavedroid.game.model.item.InventoryItem.Companion.isNoneOrNull
abstract class AbstractInventoryWindow {
var selectItemPointer: Int = -1
- fun onLeftCLick(items: MutableList<InventoryItem?>, gameItemsHolder: GameItemsHolder, index: Int, pointer: Int = -1) {
- if (selectedItem != null && selectedItem?.item?.isNone() != true && pointer >= 0 && selectItemPointer >= 0 && pointer != selectItemPointer) {
+ fun onLeftCLick(
+ items: MutableList<InventoryItem>,
+ 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
+ if (!clickedItem.isNoneOrNull() && 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
selectItemPointer = pointer
}
- fun onRightClick(items: MutableList<InventoryItem?>, index: Int) {
+ fun onRightClick(items: MutableList<InventoryItem>, gameItemsHolder: GameItemsHolder, 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)
+ if (selectedItem.isNoneOrNull() && !clickedItem.isNoneOrNull()) {
+ val half = InventoryItem(clickedItem.item, MathUtils.ceil(clickedItem.amount.toFloat() / 2f))
+ this.selectedItem = half
+ clickedItem.subtract(half.amount)
+ if (clickedItem.amount == 0) {
+ items[index] = gameItemsHolder.fallbackItem.toInventoryItem()
+ }
+ return
+ }
+
+ if (selectedItem == null ||
+ (!clickedItem.isNoneOrNull() && selectedItem.item != clickedItem.item) ||
+ !clickedItem.canBeAdded()) {
+ return
+ }
+
+ val newItem = selectedItem.item.toInventoryItem(
+ (clickedItem.takeIf { !it.item.isNone() }?.amount ?: 0) + 1
+ )
items[index] = newItem
- selectedItem.amount --
+ selectedItem.amount--
if (selectedItem.amount <= 0) {
this@AbstractInventoryWindow.selectedItem = null