DEADSOFTWARE

Update README
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / mapper / MouseInputActionMapper.kt
1 package ru.deadsoftware.cavedroid.game.input.mapper
3 import com.badlogic.gdx.Gdx
4 import com.badlogic.gdx.Input
5 import com.badlogic.gdx.math.Rectangle
6 import ru.deadsoftware.cavedroid.MainConfig
7 import ru.deadsoftware.cavedroid.game.GameScope
8 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
9 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
10 import javax.inject.Inject
12 @GameScope
13 class MouseInputActionMapper @Inject constructor(
14 val mainConfig: MainConfig,
15 ) {
17 fun map(
18 mouseX: Float,
19 mouseY: Float,
20 cameraViewport: Rectangle,
21 button: Int,
22 touchUp: Boolean
23 ): MouseInputAction? {
24 val actionKey = mapActionKey(button, touchUp) ?: return null
26 return MouseInputAction(
27 screenX = getScreenX(mouseX),
28 screenY = getScreenY(mouseY),
29 actionKey = actionKey,
30 cameraViewport = cameraViewport,
31 )
32 }
34 fun mapDragged(
35 mouseX: Float,
36 mouseY: Float,
37 cameraViewport: Rectangle,
38 ): MouseInputAction {
39 return MouseInputAction(
40 screenX = getScreenX(mouseX),
41 screenY = getScreenY(mouseY),
42 actionKey = MouseInputActionKey.Dragged,
43 cameraViewport = cameraViewport,
44 )
45 }
47 fun mapScrolled(
48 mouseX: Float,
49 mouseY: Float,
50 amountX: Float,
51 amountY: Float,
52 cameraViewport: Rectangle,
53 ): MouseInputAction {
54 return MouseInputAction(
55 screenX = getScreenX(mouseX),
56 screenY = getScreenY(mouseY),
57 actionKey = MouseInputActionKey.Scroll(amountX, amountY),
58 cameraViewport = cameraViewport,
59 )
60 }
62 private fun mapActionKey(button: Int, touchUp: Boolean): MouseInputActionKey? {
63 return when (button) {
64 Input.Buttons.LEFT -> MouseInputActionKey.Left(touchUp)
65 Input.Buttons.RIGHT -> MouseInputActionKey.Right(touchUp)
66 Input.Buttons.MIDDLE -> MouseInputActionKey.Middle(touchUp)
67 -1 -> MouseInputActionKey.Touch(touchUp)
68 else -> null
69 }
70 }
72 private fun getScreenX(mouseX: Float): Float {
73 return mouseX * (mainConfig.width / Gdx.graphics.width)
74 }
76 private fun getScreenY(mouseY: Float): Float {
77 return mouseY * (mainConfig.height / Gdx.graphics.height)
78 }
80 }