Files
gamedev-the-steward/world/targets/WorldTargetCapability.gd
T
2026-08-12 20:06:51 +02:00

53 lines
1.3 KiB
GDScript

class_name WorldTargetCapability
extends RefCounted
var _capability_id: StringName
var _attributes: Dictionary
func _init(capability_id: StringName = &"", attributes: Dictionary = {}) -> void:
_capability_id = capability_id
_attributes = attributes.duplicate(true)
func is_valid() -> bool:
return not _capability_id.is_empty() and not _contains_object(_attributes)
func get_capability_id() -> StringName:
return _capability_id
func get_attributes() -> Dictionary:
return _attributes.duplicate(true)
func get_attribute(attribute_id: StringName, default_value: Variant = null) -> Variant:
var value: Variant = _attributes.get(String(attribute_id), default_value)
return value.duplicate(true) if value is Array or value is Dictionary else value
func to_dictionary() -> Dictionary:
return {
"capability_id": String(_capability_id),
"attributes": _attributes.duplicate(true),
}
func copy() -> WorldTargetCapability:
return WorldTargetCapability.new(_capability_id, _attributes)
static func _contains_object(value: Variant) -> bool:
if value is Object:
return true
if value is Array:
for item in value:
if _contains_object(item):
return true
elif value is Dictionary:
for key in value:
if _contains_object(key) or _contains_object(value[key]):
return true
return false