48 lines
2.7 KiB
GDScript
48 lines
2.7 KiB
GDScript
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
|