DEADSOFTWARE

Add crafting
[cavedroid.git] / core / src / main / kotlin / ru / deadsoftware / cavedroid / game / input / handler / mouse / CloseGameWindowMouseInputHandler.kt
1 package ru.deadsoftware.cavedroid.game.input.handler.mouse
3 import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindMouseInputHandler
4 import com.badlogic.gdx.graphics.g2d.TextureRegion
5 import ru.deadsoftware.cavedroid.game.GameScope
6 import ru.deadsoftware.cavedroid.game.GameUiWindow
7 import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
8 import ru.deadsoftware.cavedroid.game.input.IMouseInputHandler
9 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
10 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
11 import ru.deadsoftware.cavedroid.game.input.isInsideWindow
12 import ru.deadsoftware.cavedroid.game.mobs.MobsController
13 import ru.deadsoftware.cavedroid.game.objects.drop.DropController
14 import ru.deadsoftware.cavedroid.misc.Assets
15 import javax.inject.Inject
17 @GameScope
18 @BindMouseInputHandler
19 class CloseGameWindowMouseInputHandler @Inject constructor(
20 private val gameWindowsManager: GameWindowsManager,
21 private val mobsController: MobsController,
22 private val dropController: DropController,
23 ) : IMouseInputHandler {
25 private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
26 private val survivalInventoryTexture get() = requireNotNull(Assets.textureRegions["survival"])
27 private val craftingInventoryTexture get() = requireNotNull(Assets.textureRegions["crafting_table"])
28 private val furnaceInventoryTexture get() = requireNotNull(Assets.textureRegions["furnace"])
29 private val chestInventoryTexture get() = requireNotNull(Assets.textureRegions["chest"])
31 override fun checkConditions(action: MouseInputAction): Boolean {
32 return gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE &&
33 (action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Screen) &&
34 action.actionKey.touchUp &&
35 !isInsideWindow(action, getCurrentWindowTexture())
36 }
38 private fun getCurrentWindowTexture(): TextureRegion {
39 return when (val window = gameWindowsManager.getCurrentWindow()) {
40 GameUiWindow.CREATIVE_INVENTORY -> creativeInventoryTexture
41 GameUiWindow.SURVIVAL_INVENTORY -> survivalInventoryTexture
42 GameUiWindow.CRAFTING_TABLE -> craftingInventoryTexture
43 GameUiWindow.FURNACE -> furnaceInventoryTexture
44 GameUiWindow.CHEST -> chestInventoryTexture
45 else -> throw UnsupportedOperationException("Cant close window ${window.name}")
46 }
47 }
49 override fun handle(action: MouseInputAction) {
50 val selectedItem = gameWindowsManager.currentWindow?.selectedItem
51 if (selectedItem != null) {
52 dropController.addDrop(
53 /* x = */ mobsController.player.x + (32f * mobsController.player.direction.basis),
54 /* y = */ mobsController.player.y,
55 /* item = */ selectedItem.item,
56 /* count = */ selectedItem.amount,
57 )
58 gameWindowsManager.currentWindow?.selectedItem = null
59 }
60 gameWindowsManager.closeWindow()
61 }
63 }