feat: add versioned simulation state records

This commit is contained in:
2026-07-05 12:52:07 +02:00
parent c690937afa
commit 30cac28fc0
12 changed files with 514 additions and 1 deletions
+42
View File
@@ -0,0 +1,42 @@
class_name ResourceStateRecord
extends RefCounted
const SCHEMA_VERSION := 1
var data: Dictionary
func _init(record_data: Dictionary = {}) -> void:
data = record_data.duplicate(true)
static func capture(node: ResourceNode) -> ResourceStateRecord:
return ResourceStateRecord.new({
"schema_version": SCHEMA_VERSION,
"node_id": String(node.node_id),
"amount_remaining": node.amount_remaining,
"reserved_by": node.reserved_by,
"enabled": node.enabled
})
static func from_dictionary(record_data: Dictionary) -> ResourceStateRecord:
if int(record_data.get("schema_version", -1)) != SCHEMA_VERSION:
return null
if not record_data.has_all([
"node_id", "amount_remaining", "reserved_by", "enabled"
]):
return null
if String(record_data["node_id"]).is_empty():
return null
return ResourceStateRecord.new(record_data)
func restore(node: ResourceNode) -> bool:
if node == null or node.node_id != StringName(data["node_id"]):
return false
node.restore_persistent_state(
float(data["amount_remaining"]),
int(data["reserved_by"]),
bool(data["enabled"])
)
return true
func to_dictionary() -> Dictionary:
return data.duplicate(true)