DEADSOFTWARE

Input handler modules code generation
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / keyboard / DropItemKeyboardInputHandler.kt
index 7e6454c32dbb9eddd0890eee6f197a2237d317a8..01a0c1f162e8e95622a9dedebd6c96b11636954f 100644 (file)
@@ -2,22 +2,24 @@ package ru.deadsoftware.cavedroid.game.input.handler.keyboard
 
 import ru.deadsoftware.cavedroid.game.GameScope
 import ru.deadsoftware.cavedroid.game.GameUiWindow
-import ru.deadsoftware.cavedroid.game.input.IGameInputHandler
+import ru.deadsoftware.cavedroid.game.input.IKeyboardInputHandler
+import ru.deadsoftware.cavedroid.game.input.KeyboardInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.KeyboardInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.KeyboardInputActionKey
 import ru.deadsoftware.cavedroid.game.mobs.MobsController
 import ru.deadsoftware.cavedroid.game.model.item.Item
-import ru.deadsoftware.cavedroid.game.objects.Drop
-import ru.deadsoftware.cavedroid.game.objects.DropController
-import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager
+import ru.deadsoftware.cavedroid.game.objects.drop.Drop
+import ru.deadsoftware.cavedroid.game.objects.drop.DropController
+import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
 import javax.inject.Inject
 
 @GameScope
+@KeyboardInputHandler
 class DropItemKeyboardInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
     private val mobsController: MobsController,
     private val dropController: DropController,
-) : IGameInputHandler<KeyboardInputAction> {
+) : IKeyboardInputHandler {
 
     override fun checkConditions(action: KeyboardInputAction): Boolean {
         return action.actionKey is KeyboardInputActionKey.DropItem &&
@@ -25,32 +27,25 @@ class DropItemKeyboardInputHandler @Inject constructor(
                 !mobsController.player.inventory.activeItem.item.isNone()
     }
 
-    private fun createDrop(item: Item, playerX: Float, playerY: Float) {
-        dropController.addDrop(playerX + ((DROP_DISTANCE - Drop.DROP_SIZE / 2) * mobsController.player.direction.basis), playerY, item)
+    private fun createDrop(item: Item, playerX: Float, playerY: Float, amount: Int) {
+        dropController.addDrop(
+            /* x = */ playerX + ((DROP_DISTANCE - Drop.DROP_SIZE / 2) * mobsController.player.direction.basis),
+            /* y = */ playerY,
+            /* item = */ item,
+            /* count = */ amount
+        )
     }
 
     override fun handle(action: KeyboardInputAction) {
         val player = mobsController.player
         val currentItem = player.inventory.activeItem
+        val dropAmount =  if (currentItem.item.isTool()) currentItem.amount else 1
 
-        if (!currentItem.item.isTool()) {
-            createDrop(currentItem.item, player.x, player.y)
-        } else {
-            for (i in 1..currentItem.amount) {
-                createDrop(currentItem.item, player.x, player.y)
-            }
-        }
-
-        player.inventory.decreaseCurrentItemAmount(
-            if (currentItem.item.isTool()) {
-                currentItem.amount
-            } else {
-                1
-            }
-        )
+        createDrop(currentItem.item, player.x, player.y, dropAmount)
+        player.inventory.decreaseCurrentItemAmount(dropAmount)
     }
 
     companion object {
-        private const val DROP_DISTANCE = 20f
+        const val DROP_DISTANCE = 20f
     }
 }
\ No newline at end of file