feat: add emergent world foundations
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
class_name WorldEntityRef
|
||||
extends RefCounted
|
||||
|
||||
const SCHEMA_VERSION := 1
|
||||
|
||||
var _entity_type: StringName
|
||||
var _entity_id: StringName
|
||||
|
||||
|
||||
func _init(entity_type: StringName = &"", entity_id: StringName = &"") -> void:
|
||||
_entity_type = entity_type
|
||||
_entity_id = entity_id
|
||||
|
||||
|
||||
static func create(entity_type: StringName, entity_id: StringName) -> WorldEntityRef:
|
||||
var entity_ref := WorldEntityRef.new(entity_type, entity_id)
|
||||
return entity_ref if entity_ref.is_valid() else null
|
||||
|
||||
|
||||
static func from_dictionary(record_data: Dictionary) -> WorldEntityRef:
|
||||
if int(record_data.get("schema_version", -1)) != SCHEMA_VERSION:
|
||||
return null
|
||||
if not record_data.has_all(["entity_type", "entity_id"]):
|
||||
return null
|
||||
return create(StringName(record_data["entity_type"]), StringName(record_data["entity_id"]))
|
||||
|
||||
|
||||
func is_valid() -> bool:
|
||||
return not _entity_type.is_empty() and not _entity_id.is_empty()
|
||||
|
||||
|
||||
func get_entity_type() -> StringName:
|
||||
return _entity_type
|
||||
|
||||
|
||||
func get_entity_id() -> StringName:
|
||||
return _entity_id
|
||||
|
||||
|
||||
func index_key() -> String:
|
||||
var type_text := String(_entity_type)
|
||||
var id_text := String(_entity_id)
|
||||
return "%d:%s%d:%s" % [type_text.length(), type_text, id_text.length(), id_text]
|
||||
|
||||
|
||||
func equals(other: WorldEntityRef) -> bool:
|
||||
return (
|
||||
other != null
|
||||
and _entity_type == other.get_entity_type()
|
||||
and _entity_id == other.get_entity_id()
|
||||
)
|
||||
|
||||
|
||||
func duplicate_ref() -> WorldEntityRef:
|
||||
return WorldEntityRef.new(_entity_type, _entity_id)
|
||||
|
||||
|
||||
func to_dictionary() -> Dictionary:
|
||||
return {
|
||||
"schema_version": SCHEMA_VERSION,
|
||||
"entity_type": String(_entity_type),
|
||||
"entity_id": String(_entity_id),
|
||||
}
|
||||
Reference in New Issue
Block a user