92 lines
2.4 KiB
GDScript
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))
|