初次提交
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user