DEADSOFTWARE

Fix touch enywhere
[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.misc.Assets
12 import javax.inject.Inject
14 @GameScope
15 class CloseGameWindowMouseInputHandler @Inject constructor(
16 private val gameWindowsManager: GameWindowsManager,
17 ) : IGameInputHandler<MouseInputAction> {
19 private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
20 private val survivalInventoryTexture get() = requireNotNull(Assets.textureRegions["survival"])
22 override fun checkConditions(action: MouseInputAction): Boolean {
23 return gameWindowsManager.getCurrentWindow() != GameUiWindow.NONE &&
24 (action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Touch) &&
25 !action.actionKey.touchUp &&
26 !isInsideWindow(action, getCurrentWindowTexture())
27 }
29 private fun getCurrentWindowTexture(): TextureRegion {
30 return when (val window = gameWindowsManager.getCurrentWindow()) {
31 GameUiWindow.CREATIVE_INVENTORY -> creativeInventoryTexture
32 GameUiWindow.SURVIVAL_INVENTORY -> survivalInventoryTexture
33 else -> throw UnsupportedOperationException("Cant close window ${window.name}")
34 }
35 }
37 override fun handle(action: MouseInputAction) {
38 gameWindowsManager.closeWindow()
39 }
41 }