[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / input / handler / mouse / CursorMouseInputHandler.kt
diff --git a/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt b/core/src/ru/deadsoftware/cavedroid/game/input/handler/mouse/CursorMouseInputHandler.kt
index 54aacf2b5cd6c6ebeee03517a93bf7578bff8595..585a5ab09d181a62cb0ff1767664118282c4047c 100644 (file)
import com.badlogic.gdx.math.MathUtils
import ru.deadsoftware.cavedroid.MainConfig
+import ru.deadsoftware.cavedroid.game.GameItemsHolder
import ru.deadsoftware.cavedroid.game.GameScope
+import ru.deadsoftware.cavedroid.game.GameUiWindow
import ru.deadsoftware.cavedroid.game.input.IGameInputHandler
import ru.deadsoftware.cavedroid.game.input.action.MouseInputAction
import ru.deadsoftware.cavedroid.game.input.action.keys.MouseInputActionKey
import ru.deadsoftware.cavedroid.game.mobs.Mob
import ru.deadsoftware.cavedroid.game.mobs.MobsController
-import ru.deadsoftware.cavedroid.game.mobs.Player
+import ru.deadsoftware.cavedroid.game.mobs.player.Player
import ru.deadsoftware.cavedroid.game.model.block.Block
+import ru.deadsoftware.cavedroid.game.ui.TooltipManager
+import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsConfigs
+import ru.deadsoftware.cavedroid.game.ui.windows.GameWindowsManager
import ru.deadsoftware.cavedroid.game.world.GameWorld
+import ru.deadsoftware.cavedroid.misc.Assets
import ru.deadsoftware.cavedroid.misc.utils.bl
import ru.deadsoftware.cavedroid.misc.utils.px
import javax.inject.Inject
private val mainConfig: MainConfig,
private val mobsController: MobsController,
private val gameWorld: GameWorld,
+ private val gameWindowsManager: GameWindowsManager,
+ private val gameItemsHolder: GameItemsHolder,
+ private val tooltipManager: TooltipManager,
) : IGameInputHandler<MouseInputAction> {
private val player get() = mobsController.player
+ private val creativeInventoryTexture get() = requireNotNull(Assets.textureRegions["creative"])
+
private val Block.isAutoselectable
get() = !isNone() && params.hasCollision
private fun GameWorld.isCurrentBlockAutoselectable() =
getForeMap(player.cursorX, player.cursorY).isAutoselectable
- private fun checkCursorBounds() {
- if (player.gameMode == 0) {
- val minCursorX = player.mapX - SURVIVAL_CURSOR_RANGE
- val maxCursorX = player.mapX + SURVIVAL_CURSOR_RANGE
- val minCursorY = player.middleMapY - SURVIVAL_CURSOR_RANGE
- val maxCursorY = player.middleMapY + SURVIVAL_CURSOR_RANGE
-
- player.cursorX = MathUtils.clamp(player.cursorX, minCursorX, maxCursorX)
- player.cursorY = MathUtils.clamp(player.cursorY, minCursorY, maxCursorY)
- }
-
- player.cursorY = MathUtils.clamp(player.cursorY, 0, gameWorld.height - 1)
- }
-
private fun setPlayerDirectionToCursor() {
if (player.controlMode != Player.ControlMode.CURSOR) {
return
private fun handleWalkTouch() {
player.cursorX = player.mapX + player.direction.basis
player.cursorY = player.upperMapY
+ player.headRotation = 0f
for (i in 1..2) {
if (gameWorld.isCurrentBlockAutoselectable()) {
player.headRotation = getPlayerHeadRotation(worldX, worldY)
}
+ private fun getCreativeTooltip(action: MouseInputAction): String? {
+ val creativeTexture = creativeInventoryTexture
+ val xOnGrid = (action.screenX - (action.cameraViewport.width / 2 - creativeTexture.regionWidth / 2 +
+ GameWindowsConfigs.Creative.itemsGridMarginLeft)) /
+ GameWindowsConfigs.Creative.itemsGridColWidth
+ val yOnGrid = (action.screenY - (action.cameraViewport.height / 2 - creativeTexture.regionHeight / 2 +
+ GameWindowsConfigs.Creative.itemsGridMarginTop)) /
+ GameWindowsConfigs.Creative.itemsGridRowHeight
+
+ if (xOnGrid < 0 || xOnGrid >= GameWindowsConfigs.Creative.itemsInRow ||
+ yOnGrid < 0 || yOnGrid >= GameWindowsConfigs.Creative.itemsInCol) {
+ return null
+ }
+
+ val itemIndex = (gameWindowsManager.creativeScrollAmount * GameWindowsConfigs.Creative.itemsInRow +
+ (xOnGrid.toInt() + yOnGrid.toInt() * GameWindowsConfigs.Creative.itemsInRow))
+ val item = gameItemsHolder.getItemFromCreativeInventory(itemIndex)
+
+ return item.params.name
+ }
+
override fun checkConditions(action: MouseInputAction): Boolean {
return action.actionKey is MouseInputActionKey.None
}
!mainConfig.isTouch -> handleMouse(action)
}
- checkCursorBounds()
+ player.checkCursorBounds(gameWorld)
setPlayerDirectionToCursor()
if (player.cursorX != pastCursorX || player.cursorY != pastCursorY) {
player.blockDamage = 0f
}
+
+ if (gameWindowsManager.getCurrentWindow() == GameUiWindow.CREATIVE_INVENTORY) {
+ tooltipManager.showMouseTooltip(getCreativeTooltip(action).orEmpty())
+ }
}
companion object {