初次提交

This commit is contained in:
2026-07-20 10:56:52 +08:00
commit 7bcc0026e0
462 changed files with 50191 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
## SpellRegistry — 法术注册表(Autoload: SpellRegistry
## 纯数据驱动:唯一来源 res://data/spells.json(游戏设计器「法术」面板维护)
## 无硬编码回退——法术定义只存在于 JSON。
extends Node
const JSON_DATA_PATH: String = "res://data/spells.json"
var _registry: Dictionary = {} # { spell_id: String → SpellNode }
func _ready() -> void:
if not FileAccess.file_exists(JSON_DATA_PATH):
push_error("SpellRegistry: 缺失 res://data/spells.json(无任何法术定义)")
return
var data = JSON.parse_string(FileAccess.get_file_as_string(JSON_DATA_PATH))
if not (data is Dictionary):
push_error("SpellRegistry: spells.json 格式错误(应为对象)")
return
for sid in data:
_registry[String(sid)] = _spell_from_dict(String(sid), data[sid])
func _spell_from_dict(sid: String, d: Dictionary) -> SpellNode:
var n := SpellNode.new()
n.id = sid
n.type = int(d.get("type", 0))
n.display_name = String(d.get("display_name", sid))
n.description = String(d.get("description", ""))
n.element_tags = d.get("element_tags", [])
n.meta = d.get("meta", {})
return n
## 运行时动态注册(如共鸣产出、未来扩展),非数据来源
func register_spell(spell: SpellNode) -> void:
if spell and spell.id != "":
_registry[spell.id] = spell
func get_spell(id: String) -> SpellNode:
return _registry.get(id, null)
func get_all_ids() -> Array:
return _registry.keys()
func has_spell(id: String) -> bool:
return _registry.has(id)
func get_registry_size() -> int:
return _registry.size()