X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Frender%2FHudRenderer.kt;h=b6b22aeaa13ca621c96f2f9bc5d7c184c0695324;hb=456e76ce31c05500ab7d9e78e2b02019143929a4;hp=cea623a40d0194f6e87d13570ab9cfc75229278f;hpb=3512986410bc04017c9c15d3bebac5fe5cdd0e84;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt b/core/src/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt index cea623a..b6b22ae 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/render/HudRenderer.kt @@ -3,21 +3,24 @@ package ru.deadsoftware.cavedroid.game.render import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.glutils.ShapeRenderer import com.badlogic.gdx.math.Rectangle -import ru.deadsoftware.cavedroid.game.GameInput import ru.deadsoftware.cavedroid.game.GameScope import ru.deadsoftware.cavedroid.game.mobs.MobsController -import ru.deadsoftware.cavedroid.game.model.item.InventoryItem +import ru.deadsoftware.cavedroid.game.mobs.player.Player +import ru.deadsoftware.cavedroid.game.mobs.player.Player.ControlMode +import ru.deadsoftware.cavedroid.game.ui.TooltipManager import ru.deadsoftware.cavedroid.game.world.GameWorld import ru.deadsoftware.cavedroid.misc.Assets -import ru.deadsoftware.cavedroid.misc.ControlMode +import ru.deadsoftware.cavedroid.misc.annotations.multibinding.BindRenderer +import ru.deadsoftware.cavedroid.misc.utils.drawString import ru.deadsoftware.cavedroid.misc.utils.px import javax.inject.Inject @GameScope +@BindRenderer class HudRenderer @Inject constructor( - private val gameInput: GameInput, private val gameWorld: GameWorld, private val mobsController: MobsController, + private val tooltipManager: TooltipManager, ) : IGameRenderer { override val renderLayer = RENDER_LAYER @@ -26,6 +29,7 @@ class HudRenderer @Inject constructor( private val hotbarTexture get() = requireNotNull(Assets.textureRegions[HOTBAR_KEY]) private val hotbarSelectorTexture get() = requireNotNull(Assets.textureRegions[HOTBAR_SELECTOR_KEY]) private val wholeHeartTexture get() = requireNotNull(Assets.textureRegions[WHOLE_HEART_KEY]) + private val emptyHeartTexture get() = requireNotNull(Assets.textureRegions[EMPTY_HEART_KEY]) private val halfHeartTexture get() = requireNotNull(Assets.textureRegions[HALF_HEART_KEY]) private fun drawCursor(spriteBatch: SpriteBatch, viewport: Rectangle) { @@ -34,7 +38,7 @@ class HudRenderer @Inject constructor( if (gameWorld.hasForeAt(cursorX, cursorY) || gameWorld.hasBackAt(cursorX, cursorY) || - gameInput.controlMode == ControlMode.CURSOR + mobsController.player.controlMode == ControlMode.CURSOR ) { spriteBatch.draw(cursorTexture, cursorX.px - viewport.x, cursorY.px - viewport.y) } @@ -48,30 +52,40 @@ class HudRenderer @Inject constructor( } val wholeHeart = wholeHeartTexture + val halfHeart = halfHeartTexture + val emptyHeart = emptyHeartTexture + + val totalHearts = Player.MAX_HEALTH / 2 val wholeHearts = player.health / 2 - for (i in 0.. - if (item.isNone()) { + if (item.item.isNone()) { return@forEachIndexed } - spriteBatch.draw( - /* region = */ item.sprite, - /* x = */ hotbarX + HotbarConfig.horizontalMargin - + index * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace), - /* y = */ HotbarConfig.verticalMargin, + item.draw( + spriteBatch = spriteBatch, + shapeRenderer = shapeRenderer, + x = hotbarX + HotbarConfig.horizontalMargin + + index * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace), + y = HotbarConfig.verticalMargin, ) } } @@ -80,24 +94,33 @@ class HudRenderer @Inject constructor( spriteBatch.draw( /* region = */ hotbarSelectorTexture, /* x = */ hotbarX - HotbarSelectorConfig.horizontalPadding - + mobsController.player.slot * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace), + + mobsController.player.inventory.activeSlot * (HotbarConfig.itemSeparatorWidth + HotbarConfig.itemSlotSpace), /* y = */ -HotbarSelectorConfig.verticalPadding ) } - private fun drawHotbar(spriteBatch: SpriteBatch, viewport: Rectangle) { + private fun drawHotbar(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle) { val hotbar = hotbarTexture val hotbarX = viewport.width / 2 - hotbar.regionWidth / 2 spriteBatch.draw(hotbar, hotbarX, 0f) drawHealth(spriteBatch, hotbarX, hotbarTexture.regionHeight.toFloat()) - drawHotbarItems(spriteBatch, hotbarX) drawHotbarSelector(spriteBatch, hotbarX) + drawHotbarItems(spriteBatch, shapeRenderer, hotbarX) + + val tooltip = tooltipManager.currentHotbarTooltip + if (tooltip.isNotBlank()) { + spriteBatch.drawString( + str = tooltip, + x = viewport.width / 2 - Assets.getStringWidth(tooltip) / 2, + y = hotbarTexture.regionHeight.toFloat() + ) + } } override fun draw(spriteBatch: SpriteBatch, shapeRenderer: ShapeRenderer, viewport: Rectangle, delta: Float) { drawCursor(spriteBatch, viewport) - drawHotbar(spriteBatch, viewport) + drawHotbar(spriteBatch, shapeRenderer, viewport) } companion object { @@ -108,12 +131,14 @@ class HudRenderer @Inject constructor( private const val HOTBAR_SELECTOR_KEY = "hotbar_selector" private const val WHOLE_HEART_KEY = "heart_whole" private const val HALF_HEART_KEY = "heart_half" + private const val EMPTY_HEART_KEY = "heart_empty" private data object HotbarConfig { const val horizontalMargin = 3f const val verticalMargin = 3f const val itemSeparatorWidth = 4f const val itemSlotSpace = 16f + const val hotbarCells = 9 } private data object HotbarSelectorConfig {