2026-05-29 19:54:56 +08:00

92 lines
2.4 KiB
GDScript

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))