51 lines
1.3 KiB
GDScript
51 lines
1.3 KiB
GDScript
class_name SimulationItems
|
|
extends RefCounted
|
|
|
|
static var _items: Dictionary = {}
|
|
static var _cache_valid := false
|
|
|
|
|
|
static func _ensure_cache() -> void:
|
|
if _cache_valid:
|
|
return
|
|
_items = {}
|
|
_add_weapon(SimulationIds.ITEM_SWORD, "Sword", 24.0, 2.4, 0.55)
|
|
_add_weapon(SimulationIds.ITEM_CLAW, "Claw", 10.0, 1.2, 0.4)
|
|
_cache_valid = true
|
|
|
|
|
|
static func _add_weapon(
|
|
item_id: StringName, display_name: String, damage: float, reach: float, cooldown: float
|
|
) -> void:
|
|
var item := ItemDefinition.new()
|
|
item.item_id = item_id
|
|
item.display_name = display_name
|
|
item.category = SimulationIds.ITEM_CATEGORY_WEAPON
|
|
item.equip_slot = SimulationIds.EQUIP_SLOT_HAND
|
|
item.damage = damage
|
|
item.reach = reach
|
|
item.attack_cooldown = cooldown
|
|
_items[item_id] = item
|
|
|
|
|
|
static func invalidate_cache() -> void:
|
|
_cache_valid = false
|
|
|
|
|
|
static func get_item(item_id: StringName) -> ItemDefinition:
|
|
_ensure_cache()
|
|
return _items.get(item_id) as ItemDefinition
|
|
|
|
|
|
static func get_items() -> Array[ItemDefinition]:
|
|
_ensure_cache()
|
|
var values: Array[ItemDefinition] = []
|
|
for item in _items.values():
|
|
values.append(item)
|
|
return values
|
|
|
|
|
|
static func get_weapon(item_id: StringName) -> ItemDefinition:
|
|
var item := get_item(item_id)
|
|
return item if item != null and item.is_weapon() else null
|