Files
gplan-2/game/core/settlement/verdict_segment.gd
T
2026-11-04 05:08:31 +08:00

48 lines
2.7 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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