X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Frender%2FBlocksRenderer.kt;h=5af20e82f86a6b02ed319457fa97581c8edd425f;hb=9606fce8cc7c9b264abd7cb38583faaebb610540;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..5af20e8 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt @@ -1,11 +1,11 @@ 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 +13,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 +21,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) } } @@ -81,7 +86,11 @@ abstract class BlocksRenderer( if (foregroundBlock.canSeeThrough && !backgroundBlock.isNone()) { val drawX = x.px - viewport.x val drawY = y.px - viewport.y - backgroundBlock.draw(spriteBatch, drawX, drawY) + if (backgroundBlock.isFurnace()) { + backgroundBlock.draw(spriteBatch, drawX, drawY, gameWorld.getBackgroundFurnace(x, y)?.isActive ?: false) + } else { + backgroundBlock.draw(spriteBatch, drawX, drawY) + } } } @@ -91,12 +100,16 @@ abstract class BlocksRenderer( if (!foregroundBlock.isNone() && foregroundBlock.params.isBackground == background) { val drawX = x.px - viewport.x val drawY = y.px - viewport.y - foregroundBlock.draw(spriteBatch, drawX, drawY) + + if (foregroundBlock.isFurnace()) { + foregroundBlock.draw(spriteBatch, drawX, drawY, gameWorld.getForegroundFurnace(x, y)?.isActive ?: false) + } else { + foregroundBlock.draw(spriteBatch, drawX, drawY) + } } } companion object { - private const val BLOCK_DAMAGE_TEXTURE_PREFIX = "break_" private const val MAX_BLOCK_DAMAGE_INDEX = 10 }