1 package ru.deadsoftware.cavedroid.game.model.mapper
3 import com.badlogic.gdx.graphics.Texture
5 import ru.deadsoftware.cavedroid.game.GameItemsHolder
6 import ru.deadsoftware.cavedroid.game.model.block.*
7 import ru.deadsoftware.cavedroid.game.model.block.Block.*
8 import ru.deadsoftware.cavedroid.game.model.dto.BlockDto
9 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
10 import javax.inject.Inject
13 class BlockMapper @Inject constructor(
14 private val assetLoader: AssetLoader,
17 fun map(key: String, dto: BlockDto): Block {
18 val commonBlockParams = mapCommonParams(key, dto)
20 return when (dto.meta) {
21 "water" -> Water(commonBlockParams, requireNotNull(dto.state))
22 "lava" -> Lava(commonBlockParams, requireNotNull(dto.state))
23 "slab" -> Slab(commonBlockParams, requireNotNull(dto.fullBlock))
24 else -> Normal(commonBlockParams)
28 private fun mapCommonParams(key: String, dto: BlockDto): CommonBlockParams {
29 return CommonBlockParams(
32 collisionMargins = BlockMargins(
39 dropInfo = mapBlockDropInfo(dto),
40 hasCollision = dto.collision,
41 isBackground = dto.background,
42 isTransparent = dto.transparent,
43 requiresBlock = dto.blockRequired,
44 animationInfo = mapBlockAnimationInfo(dto),
45 texture = loadTexture(dto.texture),
46 spriteMargins = BlockMargins(
47 left = dto.spriteLeft,
49 right = dto.spriteRight,
50 bottom = dto.spriteBottom,
55 private fun mapBlockDropInfo(dto: BlockDto): BlockDropInfo? {
57 val dropCount = dto.dropCount
59 if (drop == GameItemsHolder.FALLBACK_ITEM_KEY || dropCount == 0) {
69 private fun mapBlockAnimationInfo(dto: BlockDto): BlockAnimationInfo? {
74 return BlockAnimationInfo(
75 framesCount = dto.frames,
79 private fun loadTexture(textureName: String): Texture? {
80 if (textureName == GameItemsHolder.FALLBACK_BLOCK_KEY) {
84 return Texture(assetLoader.getAssetHandle("textures/blocks/$textureName.png"))