class_name VerdictSegment extends RefCounted # ⑤ 判定段 Segment(P1-1 结算巨函数拆段;段边界=审计五段〔裁点③甲〕)。 # 职责:防御性优先级 hero 先判(双死结构不可达的纵深防御)→ 全量状态快照(despawn 前 # 组装——终局含 result)→ 终局行+收束分派 / 下一轮出口分发。 # 耦合边界(5.1 封装修复换代):引用束注入——构造收编排器组装的 20 键封闭束,本段断言 5 键 # (units/emit_row_cb/emit_snapshot_cb/battle_over_cb/exit_distribution_cb)解包;行发射/快照/ # 终局收束经回调回宿主保留面(exit_distribution 轮推进保留现设计——七段结构冻结)—— # 对编排器零引用。 # 返回值 = 裁定("victory"/"defeat"/"continue")——宿主 _settle 据此保持旧早退语义 #(终局不回置 _settling,_battle_over 接管);本段零算法改动(🔴 零行为变更契约)。 var units: UnitContainer # 单位容器(hero 存活/敌存活判定) var emit_row_cb: Callable # 宿主 _emit_row——行协议面单点(5 参 head 束形) var emit_snapshot_cb: Callable # 宿主 _emit_settlement_snapshot——结算快照发射(保留面) var battle_over_cb: Callable # 宿主 _battle_over——终局收束(保留面) var exit_distribution_cb: Callable # 宿主 _exit_distribution——下一轮出口分发(保留面) func _init(bundle: Dictionary) -> void: for k in ["units", "emit_row_cb", "emit_snapshot_cb", "battle_over_cb", "exit_distribution_cb"]: assert(bundle.has(k), "[判定段] 引用束缺键: %s" % k) units = bundle.units emit_row_cb = bundle.emit_row_cb emit_snapshot_cb = bundle.emit_snapshot_cb battle_over_cb = bundle.battle_over_cb exit_distribution_cb = bundle.exit_distribution_cb func run(ri: int) -> String: var verdict := "continue" if int(units.hero_unit().get("hp", 0)) <= 0: verdict = "defeat" elif units.query_alive("enemy").is_empty(): verdict = "victory" emit_snapshot_cb.call(verdict) # 全量状态快照(despawn 前组装——终局含 result) if verdict == "defeat": emit_row_cb.call({"type": "verdict", "source_class": "", "origin_cell": Vector2i(-1, -1)}, ri, "战斗失败", 0, {}) battle_over_cb.call("defeat") return verdict if verdict == "victory": emit_row_cb.call({"type": "verdict", "source_class": "", "origin_cell": Vector2i(-1, -1)}, ri, "战斗胜利", 1, {}) battle_over_cb.call("victory") return verdict emit_row_cb.call({"type": "verdict", "source_class": "", "origin_cell": Vector2i(-1, -1)}, ri, "下一轮次", 0, {}) exit_distribution_cb.call() return verdict