X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Finput%2Fhandler%2Fmouse%2FCursorMouseInputHandler.kt;h=c1f2af584a8ea931c8ec5f0b5d9429507c18038b;hb=3a443514027417133d7a7e18766720dfea028a87;hp=6a4b5a4eb968101d134eeeefa7aa9b9e290b51bd;hpb=13157246344c2b94d24354040f0f2d2fb5beb7ea;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 6a4b5a4..c1f2af5 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 @@ -1,11 +1,12 @@ package ru.deadsoftware.cavedroid.game.input.handler.mouse +import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler 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.IMouseInputHandler import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey import ru.deadsoftware.cavedroid.game.mobs.Mob @@ -22,6 +23,7 @@ import ru.deadsoftware.cavedroid.misc.utils.px import javax.inject.Inject @GameScope +@BindMouseInputHandler class CursorMouseInputHandler @Inject constructor( private val mainConfig: MainConfig, private val mobsController: MobsController, @@ -29,7 +31,7 @@ class CursorMouseInputHandler @Inject constructor( private val gameWindowsManager: GameWindowsManager, private val gameItemsHolder: GameItemsHolder, private val tooltipManager: TooltipManager, -) : IGameInputHandler { +) : IMouseInputHandler { private val player get() = mobsController.player @@ -41,20 +43,6 @@ class CursorMouseInputHandler @Inject constructor( 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 @@ -70,6 +58,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()) { @@ -84,7 +73,7 @@ class CursorMouseInputHandler @Inject constructor( } private fun getPlayerHeadRotation(mouseWorldX: Float, mouseWorldY: Float): Float { - val h = mouseWorldX - player.x + val h = mouseWorldX - (player.x + player.width / 2) val v = mouseWorldY - player.y return MathUtils.atan(v / h) * MathUtils.radDeg @@ -101,6 +90,12 @@ class CursorMouseInputHandler @Inject constructor( player.cursorY = worldY.bl player.headRotation = getPlayerHeadRotation(worldX, worldY) + + if (worldX < player.x + player.width / 2) { + player.setDir(Mob.Direction.LEFT) + } else { + player.setDir(Mob.Direction.RIGHT) + } } private fun getCreativeTooltip(action: MouseInputAction): String? { @@ -137,8 +132,11 @@ class CursorMouseInputHandler @Inject constructor( !mainConfig.isTouch -> handleMouse(action) } - checkCursorBounds() - setPlayerDirectionToCursor() + player.checkCursorBounds(gameWorld) + + if (player.controlMode == Player.ControlMode.WALK && mainConfig.isTouch) { + setPlayerDirectionToCursor() + } if (player.cursorX != pastCursorX || player.cursorY != pastCursorY) { player.blockDamage = 0f