DEADSOFTWARE

Update version script
[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 pointer: Int,
24 ): MouseInputAction? {
25 val actionKey = mapActionKey(button, touchUp, pointer) ?: return null
27 return MouseInputAction(
28 screenX = getScreenX(mouseX),
29 screenY = getScreenY(mouseY),
30 actionKey = actionKey,
31 cameraViewport = cameraViewport,
32 )
33 }
35 fun mapDragged(
36 mouseX: Float,
37 mouseY: Float,
38 cameraViewport: Rectangle,
39 pointer: Int,
40 ): MouseInputAction {
41 return MouseInputAction(
42 screenX = getScreenX(mouseX),
43 screenY = getScreenY(mouseY),
44 actionKey = MouseInputActionKey.Dragged(pointer),
45 cameraViewport = cameraViewport,
46 )
47 }
49 fun mapScrolled(
50 mouseX: Float,
51 mouseY: Float,
52 amountX: Float,
53 amountY: Float,
54 cameraViewport: Rectangle,
55 ): MouseInputAction {
56 return MouseInputAction(
57 screenX = getScreenX(mouseX),
58 screenY = getScreenY(mouseY),
59 actionKey = MouseInputActionKey.Scroll(amountX, amountY),
60 cameraViewport = cameraViewport,
61 )
62 }
64 private fun mapActionKey(button: Int, touchUp: Boolean, pointer: Int): MouseInputActionKey? {
65 return when (button) {
66 Input.Buttons.LEFT -> MouseInputActionKey.Left(touchUp)
67 Input.Buttons.RIGHT -> MouseInputActionKey.Right(touchUp)
68 Input.Buttons.MIDDLE -> MouseInputActionKey.Middle(touchUp)
69 -1 -> MouseInputActionKey.Screen(touchUp, pointer)
70 else -> null
71 }
72 }
74 private fun getScreenX(mouseX: Float): Float {
75 return mouseX * (mainConfig.width / Gdx.graphics.width)
76 }
78 private fun getScreenY(mouseY: Float): Float {
79 return mouseY * (mainConfig.height / Gdx.graphics.height)
80 }
82 }