DEADSOFTWARE

Add my repo for automultibind
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / mouse / CloseGameWindowMouseInputHandler.kt
1 package ru.deadsoftware.cavedroid.game.input.handler.mouse
3 import com.badlogic.gdx.graphics.g2d.TextureRegion
4 import ru.deadsoftware.cavedroid.game.GameScope
5 import ru.deadsoftware.cavedroid.game.GameUiWindow
6 import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager
7 import ru.deadsoftware.cavedroid.game.input.IGameInputHandler
8 import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
9 import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
10 import ru.deadsoftware.cavedroid.game.input.isInsideWindow
11 import ru.deadsoftware.cavedroid.game.mobs.MobsController
12 import ru.deadsoftware.cavedroid.game.objects.DropController
13 import ru.deadsoftware.cavedroid.misc.Assets
14 import javax.inject.Inject
16 @GameScope
17 class CloseGameWindowMouseInputHandler @Inject constructor(
18 private val gameWindowsManager: GameWindowsManager,
19 private val mobsController: MobsController,
20 private val dropController: DropController,
21 ) : IGameInputHandler<MouseInputAction> {
23 private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
24 private val survivalInventoryTexture get() = requireNotNull(Assets.textureRegions["survival"])
25 private val craftingInventoryTexture get() = requireNotNull(Assets.textureRegions["crafting_table"])
27 override fun checkConditions(action: MouseInputAction): Boolean {
28 return gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE &&
29 (action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Touch) &&
30 !action.actionKey.touchUp &&
31 !isInsideWindow(action, getCurrentWindowTexture())
32 }
34 private fun getCurrentWindowTexture(): TextureRegion {
35 return when (val window = gameWindowsManager.getCurrentWindow()) {
36 GameUiWindow.CREATIVE_INVENTORY -> creativeInventoryTexture
37 GameUiWindow.SURVIVAL_INVENTORY -> survivalInventoryTexture
38 GameUiWindow.CRAFTING_TABLE -> craftingInventoryTexture
39 else -> throw UnsupportedOperationException("Cant close window ${window.name}")
40 }
41 }
43 override fun handle(action: MouseInputAction) {
44 val selectedItem = gameWindowsManager.currentWindow?.selectedItem
45 if (selectedItem != null) {
46 for (i in 1 .. selectedItem.amount) {
47 dropController.addDrop(
48 /* x = */ mobsController.player.x + (32f * mobsController.player.direction.basis),
49 /* y = */ mobsController.player.y,
50 /* item = */ selectedItem.item
51 )
52 }
53 gameWindowsManager.currentWindow?.selectedItem = null
54 }
55 gameWindowsManager.closeWindow()
56 }
58 }