DEADSOFTWARE

Add tools
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameItemsHolder.kt
index 058e84d7f283a8ab47dc03df09d48a997cb3824e..7a7ccabb3651cc27b61996a67da991d9ee3f50db 100644 (file)
@@ -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<GameItemsDto>(jsonString)
 
         loadBlocks(gameItemsDto.blocks)
         loadItems(gameItemsDto.items)
@@ -95,6 +106,20 @@ class GameItemsHolder @Inject constructor(
         }
     }
 
+    fun getAllItems(): Collection<Item> {
+        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 <T : Block> getBlocksByType(type: Class<T>): List<T> {
         return blocksMap.values.filterIsInstance(type)
     }