[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / mouse / UseItemMouseInputHandler.kt
diff --git a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/UseItemMouseInputHandler.kt
index e2d3f1dc23d737842503ad15dc6316905cae5703..04bc6198295fcf3fede52cfa413b685f3c6b6d9b 100644 (file)
import ru.deadsoftware.cavedroid.game.actions.placeToBackgroundAction
import ru.deadsoftware.cavedroid.game.actions.placeToForegroundAction
import ru.deadsoftware.cavedroid.game.actions.placeblock.IPlaceBlockAction
+import ru.deadsoftware.cavedroid.game.actions.useblock.IUseBlockAction
import ru.deadsoftware.cavedroid.game.actions.useitem.IUseItemAction
import ru.deadsoftware.cavedroid.game.input.IGameInputHandler
import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
import ru.deadsoftware.cavedroid.game.input.isInsideHotbar
import ru.deadsoftware.cavedroid.game.mobs.MobsController
import ru.deadsoftware.cavedroid.game.model.item.Item
-import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager
+import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
+import ru.deadsoftware.cavedroid.game.world.GameWorld
import javax.inject.Inject
@GameScope
private val mobsController: MobsController,
private val useItemActionMap: Map<String, @JvmSuppressWildcards IUseItemAction>,
private val placeBlockActionMap: Map<String, @JvmSuppressWildcards IPlaceBlockAction>,
+ private val useBlockActionMap: Map<String, @JvmSuppressWildcards IUseBlockAction>,
private val gameWindowsManager: GameWindowsManager,
+ private val gameWorld: GameWorld,
) : IGameInputHandler<MouseInputAction> {
private var buttonHoldTask: Timer.Task? = null
cancelHold()
val player = mobsController.player
- val item = player.currentItem.item
+ val item = player.inventory.activeItem.item
player.startHitting(false)
player.stopHitting()
if (item is Item.Placeable) {
placeBlockActionMap.placeToBackgroundAction(
- item = player.currentItem.item as Item.Placeable,
+ item = item,
x = player.cursorX,
y = player.cursorY
)
Timer.schedule(buttonHoldTask, TOUCH_HOLD_TIME_SEC)
}
+ private fun tryUseBlock() {
+ val block = gameWorld.getForeMap(mobsController.player.cursorX, mobsController.player.cursorY)
+ .takeIf { !it.isNone() }
+ ?: gameWorld.getBackMap(mobsController.player.cursorX, mobsController.player.cursorY)
+ .takeIf { !it.isNone() }
+ ?: return
+
+ useBlockActionMap[block.params.key]?.perform(
+ block = block,
+ x = mobsController.player.cursorX,
+ y = mobsController.player.cursorY
+ )
+ }
+
private fun handleUp(action: MouseInputAction) {
val player = mobsController.player
- val item = player.currentItem.item
+ val item = player.inventory.activeItem.item
cancelHold()
player.startHitting(false)
} else if (item is Item.Usable) {
useItemActionMap[item.useActionKey]?.perform(item, player.cursorX, player.cursorY)
?: Gdx.app.error(TAG, "use item action ${item.useActionKey} not found");
+ } else {
+ tryUseBlock()
}
}