1 package ru.fredboy.cavedroid.ux.controls.input.handler.keyboard
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
17 @BindKeyboardInputHandler
18 class DropItemKeyboardInputHandler @Inject constructor(
19 private val gameWindowsManager: GameWindowsManager,
20 private val mobController: MobController,
21 private val dropController: DropController,
22 ) : IKeyboardInputHandler {
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()
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),
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
44 createDrop(currentItem.item, player.x, player.y, dropAmount)
45 player.decreaseCurrentItemCount(dropAmount)
49 const val DROP_DISTANCE = 20f