feat: add emergent world foundations
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
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
|
||||
Reference in New Issue
Block a user