初次提交

This commit is contained in:
2026-07-20 10:56:52 +08:00
commit 7bcc0026e0
462 changed files with 50191 additions and 0 deletions
@@ -0,0 +1,47 @@
## SubPayloadRegistry — 子荷载登记表(Autoload: SubPayloadRegistry
## 权威来源:architecture_design.md §3.4.A
## 生命周期:
## - compile_wand 开始时调用 clear_for_wand(wand_id),清除该法杯旧荷载
## - 关卡进入 BATTLE 后,SubPayloadRegistry 进入只读状态(P6-N10
## - 战斗中敌人死亡触发的旧子荷载居然能正常结算
extends Node
const MAX_PAYLOAD_ID: int = 1024
## { payload_id: int → Array[SpellNode] }
var _payloads: Dictionary = {}
var _next_id: int = 0
var _read_only: bool = false # BATTLE 期间禁止修改
## compile_wand 开始时调用,清除属于该法杯的旧荷载
func clear_for_compile() -> void:
_payloads.clear()
_next_id = 0
_read_only = false
## 注册一组节点为子荷载,返回 payload_id
func register(nodes: Array) -> int:
if _read_only:
push_warning("SubPayloadRegistry: 战斗中禁止注册新荷载 (P6-N10)")
return -1
if _next_id >= MAX_PAYLOAD_ID:
push_error("SubPayloadRegistry: 已达上限 MAX_PAYLOAD_ID=%d" % MAX_PAYLOAD_ID)
return -1
var id: int = _next_id
_next_id += 1
_payloads[id] = nodes
return id
## 关卡开始后锁定登记表,全局只读
func lock_for_battle() -> void:
_read_only = true
## 查找子荷载节点列表(第三方不得修改返回值)
func get_nodes(payload_id: int) -> Array:
return _payloads.get(payload_id, [])
func has_payload(payload_id: int) -> bool:
return _payloads.has(payload_id)
func get_payload_count() -> int:
return _payloads.size()