DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / keyboard / DropItemKeyboardInputHandler.kt
1 package ru.deadsoftware.cavedroid.game.input.handler.keyboard
3 import ru.deadsoftware.cavedroid.game.GameScope
4 import ru.deadsoftware.cavedroid.game.GameUiWindow
5 import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
6 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
7 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
8 import ru.deadsoftware.cavedroid.game.mobs.MobsController
9 import ru.deadsoftware.cavedroid.game.model.item.Item
10 import ru.deadsoftware.cavedroid.game.objects.drop.Drop
11 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
12 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
13 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindKeyboardInputHandler
14 import javax.inject.Inject
16 @GameScope
17 @BindKeyboardInputHandler
18 class DropItemKeyboardInputHandler @Inject constructor(
19 private val gameWindowsManager: GameWindowsManager,
20 private val mobsController: MobsController,
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.getCurrentWindow() == GameUiWindow.NONE &&
27 !mobsController.player.inventory.activeItem.item.isNone()
28 }
30 private fun createDrop(item: Item, playerX: Float, playerY: Float, amount: Int) {
31 dropController.addDrop(
32 /* x = */ playerX + ((DROP_DISTANCE - Drop.DROP_SIZE / 2) * mobsController.player.direction.basis),
33 /* y = */ playerY,
34 /* item = */ item,
35 /* count = */ amount
36 )
37 }
39 override fun handle(action: KeyboardInputAction) {
40 val player = mobsController.player
41 val currentItem = player.inventory.activeItem
42 val dropAmount = if (currentItem.item.isTool()) currentItem.amount else 1
44 createDrop(currentItem.item, player.x, player.y, dropAmount)
45 player.inventory.decreaseCurrentItemAmount(dropAmount)
46 }
48 companion object {
49 const val DROP_DISTANCE = 20f
50 }
51 }