X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Finput%2Fhandler%2Fmouse%2FUseItemMouseInputHandler.kt;h=7405faf0c5eae97f812199b8ec46599506f822ef;hb=90daad1796cd59f11f12589686d9afe882ddb9b1;hp=c3b52450b45f8c3ac558ca5796be0901ef08153c;hpb=c1b8f5c93482cb9933dd608c48f41622ce2994c6;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt index c3b5245..7405faf 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt @@ -1,29 +1,37 @@ package ru.deadsoftware.cavedroid.game.input.handler.mouse +import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler import com.badlogic.gdx.Gdx import com.badlogic.gdx.utils.Timer +import ru.deadsoftware.cavedroid.game.GameItemsHolder import ru.deadsoftware.cavedroid.game.GameScope import ru.deadsoftware.cavedroid.game.GameUiWindow import ru.deadsoftware.cavedroid.game.actions.placeToBackgroundAction import ru.deadsoftware.cavedroid.game.actions.placeToForegroundAction import ru.deadsoftware.cavedroid.game.actions.placeblock.IPlaceBlockAction +import ru.deadsoftware.cavedroid.game.actions.useblock.IUseBlockAction import ru.deadsoftware.cavedroid.game.actions.useitem.IUseItemAction -import ru.deadsoftware.cavedroid.game.input.IGameInputHandler +import ru.deadsoftware.cavedroid.game.input.IMouseInputHandler import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey import ru.deadsoftware.cavedroid.game.input.isInsideHotbar import ru.deadsoftware.cavedroid.game.mobs.MobsController import ru.deadsoftware.cavedroid.game.model.item.Item -import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager +import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager +import ru.deadsoftware.cavedroid.game.world.GameWorld import javax.inject.Inject @GameScope +@BindMouseInputHandler class UseItemMouseInputHandler @Inject constructor( private val mobsController: MobsController, private val useItemActionMap: Map, private val placeBlockActionMap: Map, + private val useBlockActionMap: Map, private val gameWindowsManager: GameWindowsManager, -) : IGameInputHandler { + private val gameWorld: GameWorld, + private val gameItemsHolder: GameItemsHolder, +) : IMouseInputHandler { private var buttonHoldTask: Timer.Task? = null @@ -67,6 +75,20 @@ class UseItemMouseInputHandler @Inject constructor( Timer.schedule(buttonHoldTask, TOUCH_HOLD_TIME_SEC) } + private fun tryUseBlock() { + val block = gameWorld.getForeMap(mobsController.player.cursorX, mobsController.player.cursorY) + .takeIf { !it.isNone() } + ?: gameWorld.getBackMap(mobsController.player.cursorX, mobsController.player.cursorY) + .takeIf { !it.isNone() } + ?: return + + useBlockActionMap[block.params.key]?.perform( + block = block, + x = mobsController.player.cursorX, + y = mobsController.player.cursorY + ) + } + private fun handleUp(action: MouseInputAction) { val player = mobsController.player val item = player.inventory.activeItem.item @@ -84,6 +106,11 @@ class UseItemMouseInputHandler @Inject constructor( } else if (item is Item.Usable) { useItemActionMap[item.useActionKey]?.perform(item, player.cursorX, player.cursorY) ?: Gdx.app.error(TAG, "use item action ${item.useActionKey} not found"); + } else if (item is Item.Food && player.health < player.maxHealth) { + player.heal(item.heal) + player.decreaseCurrentItemCount(gameItemsHolder) + } else { + tryUseBlock() } }