X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Finput%2Fhandler%2Fmouse%2FUseItemMouseInputHandler.kt;h=e2d3f1dc23d737842503ad15dc6316905cae5703;hb=HEAD;hp=04bc6198295fcf3fede52cfa413b685f3c6b6d9b;hpb=13157246344c2b94d24354040f0f2d2fb5beb7ea;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 deleted file mode 100644 index 04bc619..0000000 --- a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt +++ /dev/null @@ -1,129 +0,0 @@ -package ru.deadsoftware.cavedroid.game.input.handler.mouse - -import com.badlogic.gdx.Gdx -import com.badlogic.gdx.utils.Timer -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.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.ui.windows.GameWindowsManager -import ru.deadsoftware.cavedroid.game.world.GameWorld -import javax.inject.Inject - -@GameScope -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 - - override fun checkConditions(action: MouseInputAction): Boolean { - return buttonHoldTask?.isScheduled == true || - !isInsideHotbar(action) && - gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE && - action.actionKey is MouseInputActionKey.Right - } - - private fun cancelHold() { - buttonHoldTask?.cancel() - buttonHoldTask = null - } - - private fun handleHold(action: MouseInputAction) { - cancelHold() - - val player = mobsController.player - val item = player.inventory.activeItem.item - player.startHitting(false) - player.stopHitting() - - if (item is Item.Placeable) { - placeBlockActionMap.placeToBackgroundAction( - item = item, - x = player.cursorX, - y = player.cursorY - ) - } - } - - private fun handleDown(action: MouseInputAction) { - cancelHold() - buttonHoldTask = object : Timer.Task() { - override fun run() { - handleHold(action) - } - - } - 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 - cancelHold() - - player.startHitting(false) - player.stopHitting() - - if (item is Item.Placeable) { - placeBlockActionMap.placeToForegroundAction( - item = item, - x = player.cursorX, - y = player.cursorY - ) - } 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() - } - } - - override fun handle(action: MouseInputAction) { - if (action.actionKey !is MouseInputActionKey.Right) { - if (buttonHoldTask?.isScheduled == true) { - cancelHold() - } - return - } - - if (action.actionKey.touchUp && buttonHoldTask?.isScheduled == true) { - handleUp(action) - } else if (!action.actionKey.touchUp) { - handleDown(action) - } - } - - companion object { - private const val TAG = "UseItemMouseInputActionHandler" - private const val TOUCH_HOLD_TIME_SEC = 0.5f - } -} \ No newline at end of file