X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Finput%2Fhandler%2Fmouse%2FUseItemMouseInputHandler.kt;h=04bc6198295fcf3fede52cfa413b685f3c6b6d9b;hb=b2f824726f647543e69f31ac5723df37750b5778;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..04bc619 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 @@ -7,6 +7,7 @@ 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.action.MouseInputAction @@ -14,7 +15,8 @@ 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 @@ -22,7 +24,9 @@ class UseItemMouseInputHandler @Inject constructor( private val mobsController: MobsController, private val useItemActionMap: Map, private val placeBlockActionMap: Map, + private val useBlockActionMap: Map, private val gameWindowsManager: GameWindowsManager, + private val gameWorld: GameWorld, ) : IGameInputHandler { private var buttonHoldTask: Timer.Task? = null @@ -67,6 +71,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 +102,8 @@ 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 { + tryUseBlock() } }