netfishing/items/item_catalog.gd

43 lines
1 KiB
GDScript

class_name ItemCatalog
extends Resource
const ItemDataType = preload("res://items/item_data.gd")
@export var items: Array[ItemDataType] = []
func get_item_by_id(item_id: StringName) -> ItemDataType:
if item_id.is_empty():
return null
for item: ItemDataType in items:
if item != null and item.item_id == item_id:
return item
return null
func get_valid_items() -> Array[ItemDataType]:
var result: Array[ItemDataType] = []
var seen: Dictionary[StringName, bool] = {}
for item: ItemDataType in items:
if (
item == null
or not item.is_valid()
or seen.has(item.item_id)
):
continue
seen[item.item_id] = true
result.append(item)
return result
func get_available_item_by_id(item_id: StringName) -> ItemDataType:
var item: ItemDataType = get_item_by_id(item_id)
return item if item != null and item.is_available() else null
func get_available_items() -> Array[ItemDataType]:
var result: Array[ItemDataType] = []
for item: ItemDataType in get_valid_items():
if item.active:
result.append(item)
return result