DEADSOFTWARE

More bug fixes
authorfredboy <fredboy@protonmail.com>
Tue, 1 Jul 2025 12:50:23 +0000 (19:50 +0700)
committerfredboy <fredboy@protonmail.com>
Tue, 1 Jul 2025 12:50:23 +0000 (19:50 +0700)
core/data/assets/src/main/kotlin/ru/fredboy/cavedroid/data/assets/internal/TouchButtonsRepositoryImpl.kt
core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/GameInputProcessor.kt
core/ux/controls/src/main/kotlin/ru/fredboy/cavedroid/ux/controls/input/handler/touch/JoystickInputHandler.kt
core/ux/rendering/src/main/kotlin/ru/fredboy/cavedroid/ux/rendering/TouchControlsRenderer.kt
core/zygote/src/main/kotlin/ru/fredboy/cavedroid/zygote/base/BaseScreen.kt

index 616f64648233ff7217a595bf1d9e49fae6940b41..14f6c2a8427a5122608337d008036b41a790e0f7 100644 (file)
@@ -37,7 +37,7 @@ internal class TouchButtonsRepositoryImpl @Inject constructor() : TouchButtonsAs
         buttons.forEach { (name, data) ->
             guiMap[name] = TouchButton(
                 rectangle = Rectangle(data.x, data.y, data.width, data.height),
-                code = if (data.isMouse) getMouseKey(name) else Input.Keys.valueOf(name),
+                code = if (data.isMouse) getMouseKey(name) else Input.Keys.valueOf(data.key),
                 isMouse = data.isMouse,
             )
         }
index f3063158806cbf0492c579b85970c866991013e9..d9eff9004549712acece8ee6118a66cd406de8e1 100644 (file)
@@ -8,7 +8,6 @@ import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.model.Joystick
 import ru.fredboy.cavedroid.domain.assets.model.TouchButton
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase
-import ru.fredboy.cavedroid.domain.configuration.model.CameraContext
 import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
 import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository
 import ru.fredboy.cavedroid.game.controller.mob.MobController
@@ -63,9 +62,6 @@ class GameInputProcessor @Inject constructor(
     private var touchDownX = 0f
     private var touchDownY = 0f
 
-    init {
-        gameContextRepository.setJoystick(Joystick(mobController.player.speed))
-    }
 
     override fun keyDown(keycode: Int): Boolean {
         return handleKeyboardAction(keycode, true)
@@ -80,7 +76,7 @@ class GameInputProcessor @Inject constructor(
     }
 
     override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
-        val (touchX, touchY) = requireCameraContext().getViewportCoordinates(screenX, screenY)
+        val (touchX, touchY) = gameContextRepository.getCameraContext().getViewportCoordinates(screenX, screenY)
 
         touchDownX = touchX
         touchDownY = touchY
@@ -104,7 +100,7 @@ class GameInputProcessor @Inject constructor(
     }
 
     override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
-        val (touchX, touchY) = requireCameraContext().getViewportCoordinates(screenX, screenY)
+        val (touchX, touchY) = gameContextRepository.getCameraContext().getViewportCoordinates(screenX, screenY)
 
         val joy: Joystick? = gameContextRepository.getJoystick()
 
@@ -148,7 +144,7 @@ class GameInputProcessor @Inject constructor(
     }
 
     override fun touchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean {
-        val (touchX, touchY) = requireCameraContext().getViewportCoordinates(screenX, screenY)
+        val (touchX, touchY) = gameContextRepository.getCameraContext().getViewportCoordinates(screenX, screenY)
 
         if (abs(touchX - touchDownX) < 16 && abs(touchY - touchDownY) < DRAG_THRESHOLD) {
             return false
@@ -157,7 +153,7 @@ class GameInputProcessor @Inject constructor(
         val action = mouseInputActionMapper.mapDragged(
             mouseX = screenX.toFloat(),
             mouseY = screenY.toFloat(),
-            cameraViewport = requireCameraContext().viewport,
+            cameraViewport = gameContextRepository.getCameraContext().viewport,
             pointer = pointer,
         )
 
@@ -175,7 +171,7 @@ class GameInputProcessor @Inject constructor(
                 mouseY = Gdx.input.y.toFloat(),
                 amountX = amountX,
                 amountY = amountY,
-                cameraViewport = requireCameraContext().viewport,
+                cameraViewport = gameContextRepository.getCameraContext().viewport,
             )
         return handleMouseAction(action)
     }
@@ -185,6 +181,22 @@ class GameInputProcessor @Inject constructor(
         handleMousePosition()
     }
 
+    private val TouchButton.rectangleOnScreen
+        get() = Rectangle(
+            /* x = */ if (rectangle.x < 0f) {
+                applicationContextRepository.getWidth() + rectangle.x
+            } else {
+                rectangle.x
+            },
+            /* y = */ if (rectangle.y < 0f) {
+                applicationContextRepository.getHeight() + rectangle.y
+            } else {
+                rectangle.y
+            },
+            /* width = */ rectangle.width,
+            /* height = */ rectangle.height,
+        )
+
     private fun getTouchedKey(touchX: Float, touchY: Float): TouchButton {
         if (gameWindowsManager.currentWindowType != GameWindowType.NONE) {
             return nullButton
@@ -192,7 +204,7 @@ class GameInputProcessor @Inject constructor(
 
         for (entry in getTouchButtonsUseCase().entries) {
             val button = entry.value
-            if (button.rectangle.contains(touchX, touchY)) {
+            if (button.rectangleOnScreen.contains(touchX, touchY)) {
                 return button
             }
         }
@@ -261,10 +273,7 @@ class GameInputProcessor @Inject constructor(
     }
 
     private fun handleMousePosition() {
-        val cameraContext = gameContextRepository.getCameraContext() ?: run {
-            Gdx.app.error(TAG, "CameraContext was not set")
-            return
-        }
+        val cameraContext = gameContextRepository.getCameraContext()
 
         val screenX = cameraContext.xOnViewport(Gdx.input.x)
         val screenY = cameraContext.yOnViewport(Gdx.input.y)
@@ -279,10 +288,6 @@ class GameInputProcessor @Inject constructor(
         cursorMouseInputHandler.handle(action)
     }
 
-    private fun requireCameraContext(): CameraContext {
-        return requireNotNull(gameContextRepository.getCameraContext()) { "CameraContext was not set" }
-    }
-
     companion object {
         private const val TAG = "GameInputProcessor"
 
index b184d42aeb1dec500f6fc1c8c8ffe6a77e69a96e..b39c725b92ca64db1ec2c5a1ca77f14ae385b43d 100644 (file)
@@ -11,7 +11,6 @@ import ru.fredboy.cavedroid.entity.mob.model.Player
 import ru.fredboy.cavedroid.game.controller.mob.MobController
 import ru.fredboy.cavedroid.game.window.GameWindowType
 import ru.fredboy.cavedroid.game.window.GameWindowsManager
-import ru.fredboy.cavedroid.game.world.GameWorld
 import ru.fredboy.cavedroid.ux.controls.input.IMouseInputHandler
 import ru.fredboy.cavedroid.ux.controls.input.action.MouseInputAction
 import ru.fredboy.cavedroid.ux.controls.input.action.keys.MouseInputActionKey
@@ -26,7 +25,6 @@ class JoystickInputHandler @Inject constructor(
     private val gameContextRepository: GameContextRepository,
     private val mobController: MobController,
     private val gameWindowsManager: GameWindowsManager,
-    private val gameWorld: GameWorld,
     private val textureRegions: GetTextureRegionByNameUseCase,
 ) : IMouseInputHandler {
 
@@ -38,7 +36,7 @@ class JoystickInputHandler @Inject constructor(
             if (!value) {
                 resetVelocity()
                 if (TimeUtils.timeSinceMillis(activateTimeMs) < 200L &&
-                    mobController.player.controlMode != Player.ControlMode.CURSOR) {
+                    mobController.player.controlMode != Player.ControlMode.CURSOR && mobController.player.canJump) {
                     mobController.player.jump()
                 }
             } else {
index 8c81624a3660f6b2d1e09b01e6ff7383c79445ea..09c64200e0ee4681ebf3c40c9ee8841b52f87755 100644 (file)
@@ -7,6 +7,7 @@ import com.badlogic.gdx.math.Rectangle
 import ru.fredboy.cavedroid.common.di.GameScope
 import ru.fredboy.cavedroid.common.model.Joystick
 import ru.fredboy.cavedroid.common.utils.drawSprite
+import ru.fredboy.cavedroid.domain.assets.model.TouchButton
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
 import ru.fredboy.cavedroid.domain.assets.usecase.GetTouchButtonsUseCase
 import ru.fredboy.cavedroid.domain.configuration.repository.ApplicationContextRepository
@@ -56,6 +57,22 @@ class TouchControlsRenderer @Inject constructor(
         )
     }
 
+    private val TouchButton.rectangleOnScreen
+        get() = Rectangle(
+            /* x = */ if (rectangle.x < 0f) {
+                applicationContextRepository.getWidth() + rectangle.x
+            } else {
+                rectangle.x
+            },
+            /* y = */ if (rectangle.y < 0f) {
+                applicationContextRepository.getHeight() + rectangle.y
+            } else {
+                rectangle.y
+            },
+            /* width = */ rectangle.width,
+            /* height = */ rectangle.height,
+        )
+
     override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) {
         if (!applicationContextRepository.isTouch() || gameWindowsManager.currentWindowType != GameWindowType.NONE) {
             return
@@ -64,7 +81,7 @@ class TouchControlsRenderer @Inject constructor(
         val touchControlsMap = getTouchButtons()
 
         touchControlsMap.forEach { (key, value) ->
-            val touchKey = value.rectangle
+            val touchKey = value.rectangleOnScreen
             spriteBatch.draw(
                 /* region = */ textureRegions[key],
                 /* x = */ touchKey.x,
@@ -76,7 +93,7 @@ class TouchControlsRenderer @Inject constructor(
 
         // FIXME: Add pressed state for buttons
         if (mobController.player.controlMode == Player.ControlMode.CURSOR) {
-            val altKeyRect = touchControlsMap["alt"]?.rectangle ?: return
+            val altKeyRect = touchControlsMap["alt"]?.rectangleOnScreen ?: return
             spriteBatch.draw(shadeTexture, altKeyRect.x, altKeyRect.y, altKeyRect.width, altKeyRect.height)
         }
 
index 4f1284861459d1871327b3d23958301757147ac2..df76db7bfe18f33456328bc14b6ef4ddc4d2e3ad 100644 (file)
@@ -8,8 +8,11 @@ abstract class BaseScreen(
 ) : Screen {
 
     override fun resize(width: Int, height: Int) {
-        applicationContextRepository.setWidth(width.toFloat() / 2)
-        applicationContextRepository.setHeight(height.toFloat() / 2)
+        applicationContextRepository.setWidth(width.toFloat() * SCALE)
+        applicationContextRepository.setHeight(height.toFloat() * SCALE)
     }
 
+    companion object {
+        private const val SCALE = .5f
+    }
 }
\ No newline at end of file