DEADSOFTWARE

Drop items on Q and add empty hearts to health bar
[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.IGameInputHandler
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
11 import ru.deadsoftware.cavedroid.game.objects.DropController
12 import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager
13 import javax.inject.Inject
15 @GameScope
16 class DropItemKeyboardInputHandler @Inject constructor(
17 private val gameWindowsManager: GameWindowsManager,
18 private val mobsController: MobsController,
19 private val dropController: DropController,
20 ) : IGameInputHandler<KeyboardInputAction> {
22 override fun checkConditions(action: KeyboardInputAction): Boolean {
23 return action.actionKey is KeyboardInputActionKey.DropItem &&
24 action.isKeyDown && gameWindowsManager.getCurrentWindow() == GameUiWindow.NONE &&
25 !mobsController.player.inventory.activeItem.item.isNone()
26 }
28 private fun createDrop(item: Item, playerX: Float, playerY: Float) {
29 dropController.addDrop(playerX + ((DROP_DISTANCE - Drop.DROP_SIZE / 2) * mobsController.player.direction.basis), playerY, item)
30 }
32 override fun handle(action: KeyboardInputAction) {
33 val player = mobsController.player
34 val currentItem = player.inventory.activeItem
36 if (!currentItem.item.isTool()) {
37 createDrop(currentItem.item, player.x, player.y)
38 } else {
39 for (i in 1..currentItem.amount) {
40 createDrop(currentItem.item, player.x, player.y)
41 }
42 }
44 player.inventory.decreaseCurrentItemAmount(
45 if (currentItem.item.isTool()) {
46 currentItem.amount
47 } else {
48 1
49 }
50 )
51 }
53 companion object {
54 private const val DROP_DISTANCE = 20f
55 }
56 }