初次提交
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
## StatusRegistry — 状态效果注册表(Autoload: StatusRegistry)
|
||||
## 纯数据驱动:唯一来源 res://data/status_effects.json(游戏设计器「状态」面板维护)
|
||||
extends Node
|
||||
|
||||
const STATUS_JSON: String = "res://data/status_effects.json"
|
||||
|
||||
var _registry: Dictionary = {} # { status_id: int → StatusTypeDef }
|
||||
|
||||
func _ready() -> void:
|
||||
if not FileAccess.file_exists(STATUS_JSON):
|
||||
push_error("StatusRegistry: 缺失 res://data/status_effects.json(无状态效果定义)")
|
||||
return
|
||||
var data = JSON.parse_string(FileAccess.get_file_as_string(STATUS_JSON))
|
||||
if not (data is Dictionary):
|
||||
push_error("StatusRegistry: status_effects.json 格式错误")
|
||||
return
|
||||
for k in data:
|
||||
var sid: int = int(k)
|
||||
var d: Dictionary = data[k]
|
||||
var t := StatusTypeDef.new()
|
||||
t.id = sid
|
||||
t.display_name = String(d.get("name", "Status %d" % sid))
|
||||
t.duration = float(d.get("duration", 3.0))
|
||||
t.tick_interval = float(d.get("tick_interval", 1.0))
|
||||
t.stack_mode = int(d.get("stack_mode", 0))
|
||||
t.max_stacks = int(d.get("max_stacks", 1))
|
||||
t.dot_damage_per_tick = float(d.get("dot_damage", 0.0))
|
||||
t.dot_damage_type = int(d.get("dot_damage_type", 0))
|
||||
t.vfx_id = String(d.get("vfx_id", ""))
|
||||
t.is_combo_tracker = bool(d.get("is_combo_tracker", false))
|
||||
_registry[sid] = t
|
||||
|
||||
func get_type(status_id: int) -> StatusTypeDef:
|
||||
return _registry.get(status_id, null)
|
||||
|
||||
func has_type(status_id: int) -> bool:
|
||||
return _registry.has(status_id)
|
||||
|
||||
func get_registry_size() -> int:
|
||||
return _registry.size()
|
||||
Reference in New Issue
Block a user