X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2FGameItemsHolder.kt;h=7a7ccabb3651cc27b61996a67da991d9ee3f50db;hb=a21a93fd9fa33adebe52d1f4478866dcc3b66d96;hp=058e84d7f283a8ab47dc03df09d48a997cb3824e;hpb=1c004c0ce7e183e773b5b486295c25e39732e899;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt b/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt index 058e84d..7a7ccab 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt @@ -49,7 +49,18 @@ class GameItemsHolder @Inject constructor( } dtoMap.forEach { (key, dto) -> - itemsMap[key] = itemMapper.map(key, dto, blocksMap[key]) + try { + itemsMap[key] = itemMapper.map( + key = key, + dto = dto, + block = blocksMap[key], + slabTopBlock = blocksMap[dto.topSlabBlock] as? Block.Slab, + slabBottomBlock = blocksMap[dto.bottomSlabBlock] as? Block.Slab + ) + } catch (e: Exception) { + Gdx.app.error(TAG, "Failed to map item $key. Reason: ${e.message}") + e.printStackTrace() + } } fallbackItem = itemsMap[FALLBACK_ITEM_KEY] @@ -63,7 +74,7 @@ class GameItemsHolder @Inject constructor( } val jsonString = assetLoader.getAssetHandle("json/game_items.json").readString() - val gameItemsDto = JsonFormat.decodeFromString(GameItemsDto.GameItemsDtoJsonSerializer, jsonString) + val gameItemsDto = JsonFormat.decodeFromString(jsonString) loadBlocks(gameItemsDto.blocks) loadItems(gameItemsDto.items) @@ -95,6 +106,20 @@ class GameItemsHolder @Inject constructor( } } + fun getAllItems(): Collection { + return itemsMap.values + } + + fun getItemFromCreativeInventory(position: Int): Item { + return if (position in itemsMap.values.indices) { + itemsMap.values.elementAt(position) + } else { + fallbackItem + } + } + + fun getCreativeScrollAmount(): Int = itemsMap.size / 8 + fun getBlocksByType(type: Class): List { return blocksMap.values.filterIsInstance(type) }