class_name InventoryMapper extends RefCounted var _game_config func _init(game_config = null) -> void: _game_config = game_config func set_game_config(game_config) -> void: _game_config = game_config func extract_seed_items(data: Variant) -> Array[Dictionary]: var seeds: Array[Dictionary] = [] if not data is Array: return seeds for raw_item in data: if not raw_item is Dictionary: continue var item: Dictionary = raw_item.duplicate(true) var item_id := int(item.get("item_id", 0)) var item_type := int(item.get("type", 0)) var item_num := int(item.get("num", 0)) if item_num > 0 and (item_type == 1 or (item_id >= 101000 and item_id < 102000)): item["icon_id"] = _item_icon_id(item_id) seeds.append(item) return seeds func extract_fertilizer_items(data: Variant) -> Array[Dictionary]: var fertilizers: Array[Dictionary] = [] if not data is Array: return fertilizers for raw_item in data: if not raw_item is Dictionary: continue var item: Dictionary = raw_item.duplicate(true) var item_id := int(item.get("item_id", 0)) var item_type := int(item.get("type", 0)) var item_num := int(item.get("num", 0)) if item_num > 0 and (item_type == 108 or _item_type2(item_id) == 108): item["icon_id"] = _item_icon_id(item_id) fertilizers.append(item) return fertilizers func extract_warehouse_items(data: Variant) -> Array[Dictionary]: var items: Array[Dictionary] = [] if not data is Array: return items for raw_item in data: if not raw_item is Dictionary: continue var item: Dictionary = raw_item.duplicate(true) var item_id := int(item.get("item_id", 0)) var item_num := int(item.get("num", item.get("number", 0))) if item_id <= 0 or item_num <= 0: continue var item_config := _normalized_item_config(item_id) if item_config.is_empty(): continue item["num"] = item_num item["number"] = item_num item["config"] = item_config item["type"] = int(item_config.get("type", 0)) item["icon_id"] = int(item_config.get("icon", item_id)) items.append(item) return items func _item_icon_id(item_id: int) -> int: if _game_config == null: return item_id return int(_game_config.get_item_icon_id(item_id)) func _item_type2(item_id: int) -> int: if _game_config == null: return 0 return int(_game_config.get_item_type2(item_id)) func _normalized_item_config(item_id: int) -> Dictionary: if _game_config == null: return {} return _game_config.normalize_item_config(_game_config.get_item_config(item_id))