X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Finput%2Fhandler%2Fmouse%2FHotbarMouseInputHandler.kt;h=18cd41ddb2d36401321b83acf84364c1c4317afa;hb=b2f824726f647543e69f31ac5723df37750b5778;hp=5f983c5967feb860175e45c78effe82b919f46c4;hpb=ab3f0bb705ce7d243f5732ae9e2c1dcf917a8963;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt index 5f983c5..18cd41d 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/HotbarMouseInputHandler.kt @@ -3,12 +3,17 @@ package ru.deadsoftware.cavedroid.game.input.handler.mouse import com.badlogic.gdx.utils.Timer import ru.deadsoftware.cavedroid.game.GameScope import ru.deadsoftware.cavedroid.game.GameUiWindow -import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager +import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager 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.handler.keyboard.DropItemKeyboardInputHandler.Companion.DROP_DISTANCE import ru.deadsoftware.cavedroid.game.input.isInsideHotbar import ru.deadsoftware.cavedroid.game.mobs.MobsController +import ru.deadsoftware.cavedroid.game.mobs.player.Player +import ru.deadsoftware.cavedroid.game.model.item.Item +import ru.deadsoftware.cavedroid.game.objects.drop.Drop +import ru.deadsoftware.cavedroid.game.objects.drop.DropController import ru.deadsoftware.cavedroid.misc.Assets import javax.inject.Inject @@ -16,6 +21,7 @@ import javax.inject.Inject class HotbarMouseInputHandler @Inject constructor( private val gameWindowsManager: GameWindowsManager, private val mobsController: MobsController, + private val dropController: DropController, ) : IGameInputHandler { private val hotbarTexture get() = requireNotNull(Assets.textureRegions["hotbar"]) @@ -24,7 +30,7 @@ class HotbarMouseInputHandler @Inject constructor( override fun checkConditions(action: MouseInputAction): Boolean { return buttonHoldTask?.isScheduled == true || - ((action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Touch) + ((action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Screen) && isInsideHotbar(action) || action.actionKey is MouseInputActionKey.Scroll) && gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE @@ -35,15 +41,37 @@ class HotbarMouseInputHandler @Inject constructor( buttonHoldTask = null } - private fun handleHold() { - buttonHoldTask = null - gameWindowsManager.openInventory() + private fun createDrop(item: Item, playerX: Float, playerY: Float, amount: Int) { + dropController.addDrop( + /* x = */ playerX + ((DROP_DISTANCE - Drop.DROP_SIZE / 2) * mobsController.player.direction.basis), + /* y = */ playerY, + /* item = */ item, + /* count = */ amount + ) + } + + private fun getActionSlot(action: MouseInputAction): Int { + return ((action.screenX - + (action.cameraViewport.width / 2 - hotbarTexture.regionWidth / 2)) + / HOTBAR_CELL_WIDTH).toInt() + } + + private fun handleHold(action: MouseInputAction) { +// buttonHoldTask = null +// gameWindowsManager.openInventory() + val player = mobsController.player + val actionSlot = getActionSlot(action) + val currentItem = player.inventory.items[actionSlot] + val dropAmount = if (currentItem.item.isTool()) currentItem.amount else 1 + + createDrop(currentItem.item, player.x, player.y, dropAmount) + player.inventory.decreaseItemAmount(actionSlot, dropAmount) } private fun handleDown(action: MouseInputAction) { buttonHoldTask = object : Timer.Task() { override fun run() { - handleHold() + handleHold(action) } } @@ -51,21 +79,18 @@ class HotbarMouseInputHandler @Inject constructor( } private fun handleUp(action: MouseInputAction) { - mobsController.player.slot = - ((action.screenX - - (action.cameraViewport.width / 2 - hotbarTexture.regionWidth / 2)) - / HOTBAR_CELL_WIDTH).toInt() + mobsController.player.inventory.activeSlot = getActionSlot(action) } private fun handleScroll(action: MouseInputAction) { if (action.actionKey !is MouseInputActionKey.Scroll) { return } - mobsController.player.slot += action.actionKey.amountY.toInt() - if (mobsController.player.slot < 0) { - mobsController.player.slot = HOTBAR_ITEMS - 1 - } else if (mobsController.player.slot >= HOTBAR_ITEMS){ - mobsController.player.slot = 0 + mobsController.player.inventory.activeSlot += action.actionKey.amountY.toInt() + if (mobsController.player.inventory.activeSlot < 0) { + mobsController.player.inventory.activeSlot = Player.HOTBAR_SIZE - 1 + } else if (mobsController.player.inventory.activeSlot >= Player.HOTBAR_SIZE) { + mobsController.player.inventory.activeSlot = 0 } } @@ -74,7 +99,12 @@ class HotbarMouseInputHandler @Inject constructor( cancelHold() } - if (action.actionKey !is MouseInputActionKey.Left) { + if (buttonHoldTask != null && buttonHoldTask?.isScheduled != true) { + buttonHoldTask = null + return + } + + if (action.actionKey !is MouseInputActionKey.Left && action.actionKey !is MouseInputActionKey.Screen) { if (action.actionKey is MouseInputActionKey.Scroll) { handleScroll(action) } @@ -91,7 +121,6 @@ class HotbarMouseInputHandler @Inject constructor( companion object { private const val TOUCH_HOLD_TIME_SEC = 0.5f private const val HOTBAR_CELL_WIDTH = 20 - private const val HOTBAR_ITEMS = 9 } } \ No newline at end of file