1 package ru.fredboy.cavedroid.ux.controls.input.handler.mouse
3 import ru.fredboy.cavedroid.common.di.GameScope
4 import ru.fredboy.cavedroid.domain.assets.usecase.GetTextureRegionByNameUseCase
5 import ru.fredboy.cavedroid.domain.items.usecase.GetItemByIndexUseCase
6 import ru.fredboy.cavedroid.game.controller.mob.MobController
7 import ru.fredboy.cavedroid.game.window.GameWindowType
8 import ru.fredboy.cavedroid.game.window.GameWindowsConfigs
9 import ru.fredboy.cavedroid.game.window.GameWindowsManager
10 import ru.fredboy.cavedroid.ux.controls.input.IMouseInputHandler
11 import ru.fredboy.cavedroid.ux.controls.input.action.MouseInputAction
12 import ru.fredboy.cavedroid.ux.controls.input.action.keys.MouseInputActionKey
13 import ru.fredboy.cavedroid.ux.controls.input.annotation.BindMouseInputHandler
14 import ru.fredboy.cavedroid.ux.controls.input.isInsideWindow
15 import javax.inject.Inject
18 @BindMouseInputHandler
19 class SelectCreativeInventoryItemMouseInputHandler @Inject constructor(
20 private val gameWindowsManager: GameWindowsManager,
21 private val mobController: MobController,
22 private val textureRegions: GetTextureRegionByNameUseCase,
23 private val getItemByIndexUseCase: GetItemByIndexUseCase,
24 ) : IMouseInputHandler {
26 private val creativeInventoryTexture get() = requireNotNull(textureRegions["creative"])
28 override fun checkConditions(action: MouseInputAction): Boolean {
29 return gameWindowsManager.currentWindowType == GameWindowType.CREATIVE_INVENTORY &&
30 !gameWindowsManager.isDragging &&
31 (action.actionKey is MouseInputActionKey.Left || action.actionKey is MouseInputActionKey.Screen) &&
32 action.actionKey.touchUp && isInsideWindow(action, creativeInventoryTexture)
35 override fun handle(action: MouseInputAction) {
36 val creativeTexture = creativeInventoryTexture
37 val xOnGrid = (action.screenX - (action.cameraViewport.width / 2 - creativeTexture.regionWidth / 2 +
38 GameWindowsConfigs.Creative.itemsGridMarginLeft)) /
39 GameWindowsConfigs.Creative.itemsGridColWidth
40 val yOnGrid = (action.screenY - (action.cameraViewport.height / 2 - creativeTexture.regionHeight / 2 +
41 GameWindowsConfigs.Creative.itemsGridMarginTop)) /
42 GameWindowsConfigs.Creative.itemsGridRowHeight
44 if (xOnGrid < 0 || xOnGrid >= GameWindowsConfigs.Creative.itemsInRow ||
45 yOnGrid < 0 || yOnGrid >= GameWindowsConfigs.Creative.itemsInCol) {
49 val itemIndex = (gameWindowsManager.creativeScrollAmount * GameWindowsConfigs.Creative.itemsInRow +
50 (xOnGrid.toInt() + yOnGrid.toInt() * GameWindowsConfigs.Creative.itemsInRow))
51 val item = getItemByIndexUseCase[itemIndex]
52 mobController.player.inventory.addItem(item)