X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Frender%2FBlocksRenderer.kt;h=378ed7b9191c048884db9d80fdc953e7273cb155;hb=969518fd0bbde98b81c885c62f973d74ff5f61bb;hp=65d9e0ade81636d8855f1c509b51ae13a889f08f;hpb=7bb5658145e70efdfbd66ab264bf958057f26124;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt b/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt index 65d9e0a..378ed7b 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt @@ -1,11 +1,12 @@ package ru.deadsoftware.cavedroid.game.render +import com.badlogic.gdx.graphics.g2d.Sprite import com.badlogic.gdx.graphics.g2d.SpriteBatch import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.glutils.ShapeRenderer import com.badlogic.gdx.math.MathUtils import com.badlogic.gdx.math.Rectangle -import ru.deadsoftware.cavedroid.game.GameInput +import ru.deadsoftware.cavedroid.game.mobs.MobsController import ru.deadsoftware.cavedroid.game.model.block.Block import ru.deadsoftware.cavedroid.game.world.GameWorld import ru.deadsoftware.cavedroid.misc.Assets @@ -13,7 +14,7 @@ import ru.deadsoftware.cavedroid.misc.utils.px abstract class BlocksRenderer( protected val gameWorld: GameWorld, - protected val gameInput: GameInput, + protected val mobsController: MobsController, ) : IGameRenderer { protected abstract val background: Boolean @@ -21,32 +22,37 @@ abstract class BlocksRenderer( private val Block.canSeeThrough get() = isNone() || params.isTransparent - private fun blockDamageTexture(index: Int): TextureRegion? { - if (index !in 0..MAX_BLOCK_DAMAGE_INDEX) { + private fun blockDamageSprite(index: Int): Sprite? { + if (index !in 0..< MAX_BLOCK_DAMAGE_INDEX) { return null } - val textureKey = "$BLOCK_DAMAGE_TEXTURE_PREFIX$index" - return Assets.textureRegions[textureKey] + return Assets.blockDamageSprites[index] } protected fun drawBlockDamage(spriteBatch: SpriteBatch, viewport: Rectangle) { - val blockDamage = gameInput.blockDamage - if (blockDamage <= 0) { - return - } + val player = mobsController.player + val blockDamage = player.blockDamage.takeIf { it > 0f } ?: return + val cursorX = player.cursorX + val cursorY = player.cursorY val block = if (background) { - gameWorld.getBackMap(gameInput.curX, gameInput.curY) + gameWorld.getBackMap(cursorX, cursorY) } else { - gameWorld.getForeMap(gameInput.curX, gameInput.curY) + gameWorld.getForeMap(cursorX, cursorY) } val index = (MAX_BLOCK_DAMAGE_INDEX.toFloat() * (blockDamage.toFloat() / block.params.hitPoints.toFloat())) .let(MathUtils::floor) - val texture = blockDamageTexture(index) ?: return - - if (gameWorld.hasForeAt(gameInput.curX, gameInput.curY) != background) { - spriteBatch.draw(texture, gameInput.curX.px - viewport.x, gameInput.curY.px - viewport.y) + val sprite = blockDamageSprite(index) ?: return + + if (gameWorld.hasForeAt(cursorX, cursorY) != background) { + sprite.setBounds( + /* x = */ cursorX.px - viewport.x + block.params.spriteMargins.left, + /* y = */ cursorY.px - viewport.y + block.params.spriteMargins.top, + /* width = */ block.spriteWidth, + /* height = */ block.spriteHeight + ) + sprite.draw(spriteBatch) } } @@ -96,7 +102,6 @@ abstract class BlocksRenderer( } companion object { - private const val BLOCK_DAMAGE_TEXTURE_PREFIX = "break_" private const val MAX_BLOCK_DAMAGE_INDEX = 10 }