DEADSOFTWARE

Add crafting
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / mouse / CloseGameWindowMouseInputHandler.kt
index 1f76039c78fe1575c5fcf6c878e1f69d68cfb30d..e80ff476b00fdfbb02c1c7623ddb2b8969b3ee6a 100644 (file)
@@ -8,16 +8,21 @@ import ru.deadsoftware.cavedroid.game.input.IGameInputHandler
 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
 import ru.deadsoftware.cavedroid.game.input.isInsideWindow
+import ru.deadsoftware.cavedroid.game.mobs.MobsController
+import ru.deadsoftware.cavedroid.game.objects.DropController
 import ru.deadsoftware.cavedroid.misc.Assets
 import javax.inject.Inject
 
 @GameScope
 class CloseGameWindowMouseInputHandler @Inject constructor(
     private val gameWindowsManager: GameWindowsManager,
+    private val mobsController: MobsController,
+    private val dropController: DropController,
 ) : IGameInputHandler<MouseInputAction> {
 
     private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
     private val survivalInventoryTexture get() = requireNotNull(Assets.textureRegions["survival"])
+    private val craftingInventoryTexture get() = requireNotNull(Assets.textureRegions["crafting_table"])
 
     override fun checkConditions(action: MouseInputAction): Boolean {
         return gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE &&
@@ -30,11 +35,23 @@ class CloseGameWindowMouseInputHandler @Inject constructor(
         return when (val window = gameWindowsManager.getCurrentWindow()) {
             GameUiWindow.CREATIVE_INVENTORY -> creativeInventoryTexture
             GameUiWindow.SURVIVAL_INVENTORY -> survivalInventoryTexture
+            GameUiWindow.CRAFTING_TABLE -> craftingInventoryTexture
             else -> throw UnsupportedOperationException("Cant close window ${window.name}")
         }
     }
 
     override fun handle(action: MouseInputAction) {
+        val selectedItem = gameWindowsManager.currentWindow?.selectedItem
+        if (selectedItem != null) {
+            for (i in 1 .. selectedItem.amount) {
+                dropController.addDrop(
+                    /* x = */ mobsController.player.x + (32f * mobsController.player.direction.basis),
+                    /* y = */ mobsController.player.y,
+                    /* item = */ selectedItem.item
+                )
+            }
+            gameWindowsManager.currentWindow?.selectedItem = null
+        }
         gameWindowsManager.closeWindow()
     }