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
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)
}
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
}
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()
}
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
val action = mouseInputActionMapper.mapDragged(
mouseX = screenX.toFloat(),
mouseY = screenY.toFloat(),
- cameraViewport = requireCameraContext().viewport,
+ cameraViewport = gameContextRepository.getCameraContext().viewport,
pointer = pointer,
)
mouseY = Gdx.input.y.toFloat(),
amountX = amountX,
amountY = amountY,
- cameraViewport = requireCameraContext().viewport,
+ cameraViewport = gameContextRepository.getCameraContext().viewport,
)
return handleMouseAction(action)
}
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
for (entry in getTouchButtonsUseCase().entries) {
val button = entry.value
- if (button.rectangle.contains(touchX, touchY)) {
+ if (button.rectangleOnScreen.contains(touchX, touchY)) {
return button
}
}
}
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)
cursorMouseInputHandler.handle(action)
}
- private fun requireCameraContext(): CameraContext {
- return requireNotNull(gameContextRepository.getCameraContext()) { "CameraContext was not set" }
- }
-
companion object {
private const val TAG = "GameInputProcessor"
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
private val gameContextRepository: GameContextRepository,
private val mobController: MobController,
private val gameWindowsManager: GameWindowsManager,
- private val gameWorld: GameWorld,
private val textureRegions: GetTextureRegionByNameUseCase,
) : IMouseInputHandler {
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 {
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
)
}
+ 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
val touchControlsMap = getTouchButtons()
touchControlsMap.forEach { (key, value) ->
- val touchKey = value.rectangle
+ val touchKey = value.rectangleOnScreen
spriteBatch.draw(
/* region = */ textureRegions[key],
/* x = */ touchKey.x,
// 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)
}