DEADSOFTWARE

Create new game items holder
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / model / mapper / ItemMapper.kt
1 package ru.deadsoftware.cavedroid.game.model.mapper
3 import com.badlogic.gdx.graphics.Texture
4 import com.badlogic.gdx.graphics.g2d.Sprite
5 import dagger.Reusable
6 import ru.deadsoftware.cavedroid.game.GameItemsHolder
7 import ru.deadsoftware.cavedroid.game.model.block.Block
8 import ru.deadsoftware.cavedroid.game.model.dto.ItemDto
9 import ru.deadsoftware.cavedroid.game.model.item.CommonItemParams
10 import ru.deadsoftware.cavedroid.game.model.item.Item
11 import ru.deadsoftware.cavedroid.game.model.item.Item.*
12 import ru.deadsoftware.cavedroid.misc.utils.AssetLoader
13 import ru.deadsoftware.cavedroid.misc.utils.SpriteOrigin
14 import javax.inject.Inject
16 @Reusable
17 class ItemMapper @Inject constructor(
18 private val assetLoader: AssetLoader,
19 ) {
21 fun map(key: String, dto: ItemDto, block: Block?): Item {
22 val params = mapCommonParams(key, dto)
24 return when (dto.type) {
25 "bucket" -> Bucket(params, requireNotNull(loadSprite(dto)), requireNotNull(dto.actionKey))
26 "shovel" -> Shovel(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier)
27 "sword" -> Sword(params, requireNotNull(loadSprite(dto)), dto.mobDamageMultiplier, dto.blockDamageMultiplier)
28 "block" -> Placeable(params, requireNotNull(block))
29 else -> throw IllegalArgumentException("Unknown item type ${dto.type}")
30 }
31 }
33 private fun mapCommonParams(key: String, dto: ItemDto): CommonItemParams {
34 return CommonItemParams(
35 id = dto.id,
36 key = key,
37 name = dto.name,
38 inHandSpriteOrigin = SpriteOrigin(
39 x = dto.originX,
40 y = dto.origin_y,
41 )
42 )
43 }
45 private fun loadSprite(dto: ItemDto): Sprite? {
46 if (dto.type == "block" || dto.texture == GameItemsHolder.FALLBACK_ITEM_KEY) {
47 return null
48 }
50 return Sprite(Texture(assetLoader.getAssetHandle("textures/items/${dto.texture}.png")))
51 }
53 }