X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Frender%2FBlocksRenderer.kt;h=68af67b1242e23b979cd3e9b37cd445b8044ac80;hb=1e285247085ba04351feb486a0be6aa577f43093;hp=ae243a374ea182a7dce46be95e041661ada6f76f;hpb=3512986410bc04017c9c15d3bebac5fe5cdd0e84;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 ae243a3..68af67b 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt @@ -1,11 +1,10 @@ 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 @@ -22,12 +21,11 @@ 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) { @@ -44,10 +42,16 @@ abstract class BlocksRenderer( val index = (MAX_BLOCK_DAMAGE_INDEX.toFloat() * (blockDamage.toFloat() / block.params.hitPoints.toFloat())) .let(MathUtils::floor) - val texture = blockDamageTexture(index) ?: return + val sprite = blockDamageSprite(index) ?: return if (gameWorld.hasForeAt(cursorX, cursorY) != background) { - spriteBatch.draw(texture, cursorX.px - viewport.x, cursorY.px - viewport.y) + 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) } } @@ -82,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 is Block.Furnace) { + backgroundBlock.draw(spriteBatch, drawX, drawY, gameWorld.getBackgroundFurnace(x, y)?.isActive ?: false) + } else { + backgroundBlock.draw(spriteBatch, drawX, drawY) + } } } @@ -92,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 is Block.Furnace) { + 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 }