DEADSOFTWARE

e00ff62db871fa55c936d67259917eddd37ca098
[cavedroid.git] /
1 package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard
2
3 import ru.fredboy.cavedroid.common.di.GameScope
4 import ru.fredboy.cavedroid.domain.configuration.repository.GameContextRepository
5 import ru.fredboy.cavedroid.entity.mob.model.Player
6 import ru.fredboy.cavedroid.game.controller.mob.MobController
7 import ru.fredboy.cavedroid.game.world.GameWorld
8 import ru.fredboy.cavedroid.ux.controls.input.IKeyboardInputHandler
9 import ru.fredboy.cavedroid.ux.controls.input.action.KeyboardInputAction
10 import ru.fredboy.cavedroid.ux.controls.input.action.keys.KeyboardInputActionKey
11 import ru.fredboy.cavedroid.ux.controls.input.annotation.BindKeyboardInputHandler
12 import javax.inject.Inject
13
14 @GameScope
15 @BindKeyboardInputHandler
16 class SwimUpKeyboardInputHandler @Inject constructor(
17 private val gameContextRepository: GameContextRepository,
18 private val mobController: MobController,
19 private val gameWorld: GameWorld,
20 ) : IKeyboardInputHandler {
21
22 private fun checkSwim(): Boolean {
23 return gameWorld.getForeMap(mobController.player.mapX, mobController.player.lowerMapY).isFluid()
24 }
25
26 override fun checkConditions(action: KeyboardInputAction): Boolean {
27 return action.actionKey is KeyboardInputActionKey.Up && action.isKeyDown &&
28 !mobController.player.swim &&
29 !mobController.player.canJump &&
30 checkSwim() && !mobController.player.isFlyMode &&
31 (mobController.player.controlMode == Player.ControlMode.WALK || !gameContextRepository.isTouch())
32 }
33
34 override fun handle(action: KeyboardInputAction) {
35 mobController.player.swim = true
36 }
37
38 }