X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmodel%2Fmapper%2FItemMapper.kt;h=a1a6f0c68d0cb2357eebc5262fa2acb9c1b6f777;hb=3a443514027417133d7a7e18766720dfea028a87;hp=796fc8b28fdb25a81f6c59477d7e42c56ffb2788;hpb=63ffd8af5e9788f36fc75b6d5c29ae525eb74692;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt b/core/src/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt index 796fc8b..a1a6f0c 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/model/mapper/ItemMapper.kt @@ -1,6 +1,5 @@ package ru.deadsoftware.cavedroid.game.model.mapper -import com.badlogic.gdx.graphics.Texture import com.badlogic.gdx.graphics.g2d.Sprite import dagger.Reusable import ru.deadsoftware.cavedroid.game.GameItemsHolder @@ -9,8 +8,10 @@ import ru.deadsoftware.cavedroid.game.model.dto.ItemDto import ru.deadsoftware.cavedroid.game.model.item.CommonItemParams import ru.deadsoftware.cavedroid.game.model.item.Item import ru.deadsoftware.cavedroid.game.model.item.Item.* +import ru.deadsoftware.cavedroid.misc.Assets import ru.deadsoftware.cavedroid.misc.utils.AssetLoader import ru.deadsoftware.cavedroid.misc.utils.SpriteOrigin +import ru.deadsoftware.cavedroid.misc.utils.colorFromHexString import javax.inject.Inject @Reusable @@ -18,36 +19,52 @@ class ItemMapper @Inject constructor( private val assetLoader: AssetLoader, ) { - fun map(key: String, dto: ItemDto, block: Block?): Item { + fun map(key: String, dto: ItemDto, block: Block?, slabTopBlock: Block.Slab?, slabBottomBlock: Block.Slab?): Item { val params = mapCommonParams(key, dto) return when (dto.type) { - "bucket" -> Bucket(params, requireNotNull(loadSprite(dto)), requireNotNull(dto.actionKey)) - "shovel" -> Shovel(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier) - "sword" -> Sword(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier) - "block" -> Placeable(params, requireNotNull(block)) + "normal" -> Normal(params, requireNotNull(loadSprite(dto))) + "usable" -> Usable(params, requireNotNull(loadSprite(dto)), requireNotNull(dto.actionKey)) + "shovel" -> Shovel(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier, requireNotNull(dto.toolLevel)) + "sword" -> Sword(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier, requireNotNull(dto.toolLevel)) + "pickaxe" -> Pickaxe(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier, requireNotNull(dto.toolLevel)) + "axe" -> Axe(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier, requireNotNull(dto.toolLevel)) + "shears" -> Shears(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier, requireNotNull(dto.toolLevel)) + "block" -> Block(params, requireNotNull(block)) + "slab" -> Slab(params, requireNotNull(slabTopBlock), requireNotNull(slabBottomBlock)) + "food" -> Food(params, requireNotNull(loadSprite(dto)), requireNotNull(dto.heal)) + "none" -> None(params) else -> throw IllegalArgumentException("Unknown item type ${dto.type}") } } private fun mapCommonParams(key: String, dto: ItemDto): CommonItemParams { return CommonItemParams( - id = dto.id, key = key, name = dto.name, inHandSpriteOrigin = SpriteOrigin( x = dto.originX, y = dto.origin_y, - ) + ), + maxStack = dto.maxStack, + burningTimeMs = dto.burningTime, + smeltProductKey = dto.smeltProduct, ) } private fun loadSprite(dto: ItemDto): Sprite? { - if (dto.type == "block" || dto.texture == GameItemsHolder.FALLBACK_ITEM_KEY) { + if (dto.type == "none" || dto.type == "block" || dto.texture == GameItemsHolder.FALLBACK_ITEM_KEY) { return null } - return Sprite(Texture(assetLoader.getAssetHandle("textures/items/${dto.texture}.png"))) + val texture = Assets.resolveItemTexture(assetLoader, dto.texture) + return Sprite(texture) + .apply { + flip(false, true) + dto.tint?.let { + color = colorFromHexString(it) + } + } } } \ No newline at end of file