34 lines
1.5 KiB
GDScript
34 lines
1.5 KiB
GDScript
class_name VerdictSegment
|
||
extends RefCounted
|
||
# ⑤ 判定段 Segment(P1-1 结算巨函数拆段;段边界=审计五段〔裁点③甲〕)。
|
||
# 职责:防御性优先级 hero 先判(双死结构不可达的纵深防御)→ 全量状态快照(despawn 前
|
||
# 组装——终局含 result)→ 终局行+收束分派 / 下一轮出口分发。
|
||
# 返回值 = 裁定("victory"/"defeat"/"continue")——宿主 _settle 据此保持旧早退语义
|
||
#(终局不回置 _settling,_battle_over 接管);本段零算法改动(🔴 零行为变更契约)。
|
||
|
||
var oc: BattleOrchestrator # 宿主(类型标注=段内 := 推断前提;循环类名引用 Godot 4 全局类安全) 宿主
|
||
|
||
|
||
func _init(host) -> void:
|
||
oc = host
|
||
|
||
|
||
func run(ri: int) -> String:
|
||
var verdict := "continue"
|
||
if int(oc._enemy_system.hero_unit().get("hp", 0)) <= 0:
|
||
verdict = "defeat"
|
||
elif oc._enemy_system.query_alive("enemy").is_empty():
|
||
verdict = "victory"
|
||
oc._emit_settlement_snapshot(verdict) # 全量状态快照(despawn 前组装——终局含 result)
|
||
if verdict == "defeat":
|
||
oc._emit_row("verdict", "", Vector2i(-1, -1), ri, "战斗失败", 0, {}, "")
|
||
oc._battle_over("defeat")
|
||
return verdict
|
||
if verdict == "victory":
|
||
oc._emit_row("verdict", "", Vector2i(-1, -1), ri, "战斗胜利", 1, {}, "")
|
||
oc._battle_over("victory")
|
||
return verdict
|
||
oc._emit_row("verdict", "", Vector2i(-1, -1), ri, "下一轮次", 0, {}, "")
|
||
oc._exit_distribution()
|
||
return verdict
|