diff --git a/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt b/core/src/ru/deadsoftware/cavedroid/game/render/BlocksRenderer.kt
index 65d9e0ade81636d8855f1c509b51ae13a889f08f..68af67b1242e23b979cd3e9b37cd445b8044ac80 100644 (file)
package ru.deadsoftware.cavedroid.game.render
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.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 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
import ru.deadsoftware.cavedroid.game.model.block.Block
import ru.deadsoftware.cavedroid.game.world.GameWorld
import ru.deadsoftware.cavedroid.misc.Assets
abstract class BlocksRenderer(
protected val gameWorld: GameWorld,
abstract class BlocksRenderer(
protected val gameWorld: GameWorld,
- protected val gameInput: GameInput,
+ protected val mobsController: MobsController,
) : IGameRenderer {
protected abstract val background: Boolean
) : IGameRenderer {
protected abstract val background: Boolean
private val Block.canSeeThrough
get() = isNone() || params.isTransparent
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
}
return null
}
- val textureKey = "$BLOCK_DAMAGE_TEXTURE_PREFIX$index"
- return Assets.textureRegions[textureKey]
+ return Assets.blockDamageSprites[index]
}
protected fun drawBlockDamage(spriteBatch: SpriteBatch, viewport: Rectangle) {
}
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) {
val block = if (background) {
- gameWorld.getBackMap(gameInput.curX, gameInput.curY)
+ gameWorld.getBackMap(cursorX, cursorY)
} else {
} 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 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)
}
}
}
}
if (foregroundBlock.canSeeThrough && !backgroundBlock.isNone()) {
val drawX = x.px - viewport.x
val drawY = y.px - viewport.y
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)
+ }
}
}
}
}
if (!foregroundBlock.isNone() && foregroundBlock.params.isBackground == background) {
val drawX = x.px - viewport.x
val drawY = y.px - viewport.y
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 {
}
}
companion object {
- private const val BLOCK_DAMAGE_TEXTURE_PREFIX = "break_"
private const val MAX_BLOCK_DAMAGE_INDEX = 10
}
private const val MAX_BLOCK_DAMAGE_INDEX = 10
}