DEADSOFTWARE

60a9ff89dbe7434b6d6d227b26414295f2608c90
[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.items.model.item.Item
5 import ru.fredboy.cavedroid.entity.drop.model.Drop
6 import ru.fredboy.cavedroid.game.controller.drop.DropController
7 import ru.fredboy.cavedroid.game.controller.mob.MobController
8 import ru.fredboy.cavedroid.game.window.GameWindowType
9 import ru.fredboy.cavedroid.game.window.GameWindowsManager
10 import ru.fredboy.cavedroid.ux.controls.input.IKeyboardInputHandler
11 import ru.fredboy.cavedroid.ux.controls.input.action.KeyboardInputAction
12 import ru.fredboy.cavedroid.ux.controls.input.action.keys.KeyboardInputActionKey
13 import ru.fredboy.cavedroid.ux.controls.input.annotation.BindKeyboardInputHandler
14 import javax.inject.Inject
15
16 @GameScope
17 @BindKeyboardInputHandler
18 class DropItemKeyboardInputHandler @Inject constructor(
19 private val gameWindowsManager: GameWindowsManager,
20 private val mobController: MobController,
21 private val dropController: DropController,
22 ) : IKeyboardInputHandler {
23
24 override fun checkConditions(action: KeyboardInputAction): Boolean {
25 return action.actionKey is KeyboardInputActionKey.DropItem &&
26 action.isKeyDown && gameWindowsManager.currentWindowType == GameWindowType.NONE &&
27 !mobController.player.activeItem.item.isNone()
28 }
29
30 private fun createDrop(item: Item, playerX: Float, playerY: Float, amount: Int) {
31 dropController.addDrop(
32 /* x = */ playerX + ((DROP_DISTANCE - Drop.DROP_SIZE / 2) * mobController.player.direction.basis),
33 /* y = */ playerY,
34 /* item = */ item,
35 /* count = */ amount
36 )
37 }
38
39 override fun handle(action: KeyboardInputAction) {
40 val player = mobController.player
41 val currentItem = player.activeItem
42 val dropAmount = if (currentItem.item.isTool()) currentItem.amount else 1
43
44 createDrop(currentItem.item, player.x, player.y, dropAmount)
45 player.decreaseCurrentItemCount(dropAmount)
46 }
47
48 companion object {
49 const val DROP_DISTANCE = 20f
50 }
51 }