feat(ux): T3 全链流程随独立屏——兑付覆盖层本屏域内弹出+出屏分支

_submit_choice 节点类型分支:战斗/Boss=出屏(visible=false 后发射);奖励/恢复/商店=本屏保持激活发射——兑付覆盖层由节点事件在本屏域内弹出(模态栈打开低层自动隐藏高层本屏、关闭自动恢复,零机制改动复用),兑付确认回图即本屏就地刷新(open_choices 幂等,was_visible 判据不重放淡入)。组合根 _on_route_chosen 改视图去留随动:出屏才收栈记录+_exit_level_screen 回战斗屏;放弃/冒险终局强制回战斗屏呈现摘要(T2 已落)。零自动推进纪律零改动。轻闸=冒烟 557/0+五探针 PASS(click_probe 岔路/商店路径含域内弹出全程实测)。
This commit is contained in:
DKChan committed 2026-09-28 06:42:39 +08:00
1 parent ae2ca4ffd4
commit a055722372
2 files changed
+11 -3

No files matched your search

+5 -2
View File
@@ -582,9 +582,12 @@ func _on_choices_presented(candidates: Array) -> void:
func _on_route_chosen(node_id: int) -> void:
_close_modal(level_screen)
# 形态升格分支(2026-09-28):视图已按节点类型定去留——战斗/Boss 出屏(visible=false,此处收栈
# 记录一致性+回战斗屏);奖励/恢复/商店本屏保持激活(兑付覆盖层由节点事件域内弹出,模态栈
# 打开低层时自动隐藏本屏、关闭自动恢复)
if not level_screen.visible:
_exit_level_screen() # 战斗/Boss 节点:切回战斗屏;奖励/恢复/商店:本屏保持激活(T3 接管域内弹出)
_close_modal(level_screen)
_exit_level_screen()
if runner != null and not runner.pick_next_node(node_id):
push_error("[组合根] 选路被拒(编号 %d 不在候选)" % node_id)
+6 -1
View File
@@ -318,7 +318,12 @@ func _candidate_at(local_pos: Vector2) -> int:
func _submit_choice(nid: int) -> void:
visible = false
# 形态升格分支(2026-09-28 独立屏):战斗/Boss 节点 = 出屏切回战斗屏;奖励/恢复/商店节点 =
# 本屏保持激活——兑付覆盖层由节点事件在本屏域内弹出(模态栈遮挡恢复语义复用),兑付确认后回图刷新
var node := _node_by_id(nid, _runner.nodes())
var t := String(node.get("type", ""))
if t != "reward" and t != "rest" and t != "shop":
visible = false
route_chosen.emit(nid)