X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Finput%2Fhandler%2Fmouse%2FCursorMouseInputHandler.kt;h=585a5ab09d181a62cb0ff1767664118282c4047c;hb=10751913ec4e5613dd5934711e2332bbc93b81e0;hp=54aacf2b5cd6c6ebeee03517a93bf7578bff8595;hpb=cf4113d5bfd3fca7c3815bf14a214eebd822216c;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt index 54aacf2..585a5ab 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt @@ -2,15 +2,21 @@ package ru.deadsoftware.cavedroid.game.input.handler.mouse import com.badlogic.gdx.math.MathUtils import ru.deadsoftware.cavedroid.MainConfig +import ru.deadsoftware.cavedroid.game.GameItemsHolder import ru.deadsoftware.cavedroid.game.GameScope +import ru.deadsoftware.cavedroid.game.GameUiWindow 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.mobs.Mob import ru.deadsoftware.cavedroid.game.mobs.MobsController -import ru.deadsoftware.cavedroid.game.mobs.Player +import ru.deadsoftware.cavedroid.game.mobs.player.Player import ru.deadsoftware.cavedroid.game.model.block.Block +import ru.deadsoftware.cavedroid.game.ui.TooltipManager +import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs +import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager import ru.deadsoftware.cavedroid.game.world.GameWorld +import ru.deadsoftware.cavedroid.misc.Assets import ru.deadsoftware.cavedroid.misc.utils.bl import ru.deadsoftware.cavedroid.misc.utils.px import javax.inject.Inject @@ -20,30 +26,21 @@ class CursorMouseInputHandler @Inject constructor( private val mainConfig: MainConfig, private val mobsController: MobsController, private val gameWorld: GameWorld, + private val gameWindowsManager: GameWindowsManager, + private val gameItemsHolder: GameItemsHolder, + private val tooltipManager: TooltipManager, ) : IGameInputHandler { private val player get() = mobsController.player + private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"]) + private val Block.isAutoselectable get() = !isNone() && params.hasCollision private fun GameWorld.isCurrentBlockAutoselectable() = getForeMap(player.cursorX, player.cursorY).isAutoselectable - private fun checkCursorBounds() { - if (player.gameMode == 0) { - val minCursorX = player.mapX - SURVIVAL_CURSOR_RANGE - val maxCursorX = player.mapX + SURVIVAL_CURSOR_RANGE - val minCursorY = player.middleMapY - SURVIVAL_CURSOR_RANGE - val maxCursorY = player.middleMapY + SURVIVAL_CURSOR_RANGE - - player.cursorX = MathUtils.clamp(player.cursorX, minCursorX, maxCursorX) - player.cursorY = MathUtils.clamp(player.cursorY, minCursorY, maxCursorY) - } - - player.cursorY = MathUtils.clamp(player.cursorY, 0, gameWorld.height - 1) - } - private fun setPlayerDirectionToCursor() { if (player.controlMode != Player.ControlMode.CURSOR) { return @@ -59,6 +56,7 @@ class CursorMouseInputHandler @Inject constructor( private fun handleWalkTouch() { player.cursorX = player.mapX + player.direction.basis player.cursorY = player.upperMapY + player.headRotation = 0f for (i in 1..2) { if (gameWorld.isCurrentBlockAutoselectable()) { @@ -92,6 +90,27 @@ class CursorMouseInputHandler @Inject constructor( player.headRotation = getPlayerHeadRotation(worldX, worldY) } + private fun getCreativeTooltip(action: MouseInputAction): String? { + val creativeTexture = creativeInventoryTexture + val xOnGrid = (action.screenX - (action.cameraViewport.width / 2 - creativeTexture.regionWidth / 2 + + GameWindowsConfigs.Creative.itemsGridMarginLeft)) / + GameWindowsConfigs.Creative.itemsGridColWidth + val yOnGrid = (action.screenY - (action.cameraViewport.height / 2 - creativeTexture.regionHeight / 2 + + GameWindowsConfigs.Creative.itemsGridMarginTop)) / + GameWindowsConfigs.Creative.itemsGridRowHeight + + if (xOnGrid < 0 || xOnGrid >= GameWindowsConfigs.Creative.itemsInRow || + yOnGrid < 0 || yOnGrid >= GameWindowsConfigs.Creative.itemsInCol) { + return null + } + + val itemIndex = (gameWindowsManager.creativeScrollAmount * GameWindowsConfigs.Creative.itemsInRow + + (xOnGrid.toInt() + yOnGrid.toInt() * GameWindowsConfigs.Creative.itemsInRow)) + val item = gameItemsHolder.getItemFromCreativeInventory(itemIndex) + + return item.params.name + } + override fun checkConditions(action: MouseInputAction): Boolean { return action.actionKey is MouseInputActionKey.None } @@ -105,12 +124,16 @@ class CursorMouseInputHandler @Inject constructor( !mainConfig.isTouch -> handleMouse(action) } - checkCursorBounds() + player.checkCursorBounds(gameWorld) setPlayerDirectionToCursor() if (player.cursorX != pastCursorX || player.cursorY != pastCursorY) { player.blockDamage = 0f } + + if (gameWindowsManager.getCurrentWindow() == GameUiWindow.CREATIVE_INVENTORY) { + tooltipManager.showMouseTooltip(getCreativeTooltip(action).orEmpty()) + } } companion object {