DEADSOFTWARE

MainComponent in kotlin
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / mouse / CursorMouseInputHandler.kt
index 585a5ab09d181a62cb0ff1767664118282c4047c..c1f2af584a8ea931c8ec5f0b5d9429507c18038b 100644 (file)
@@ -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<MouseInputAction> {
+) : IMouseInputHandler {
 
     private val player get() = mobsController.player
 
@@ -71,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
@@ -88,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? {
@@ -125,7 +133,10 @@ class CursorMouseInputHandler @Inject constructor(
         }
 
         player.checkCursorBounds(gameWorld)
-        setPlayerDirectionToCursor()
+
+        if (player.controlMode == Player.ControlMode.WALK && mainConfig.isTouch) {
+            setPlayerDirectionToCursor()
+        }
 
         if (player.cursorX != pastCursorX || player.cursorY != pastCursorY) {
             player.blockDamage = 0f