diff --git a/game/presentation/main.gd b/game/presentation/main.gd index cb97bd95..098c5ca7 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -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) diff --git a/game/presentation/views/level_map_screen.gd b/game/presentation/views/level_map_screen.gd index e80c3718..be202209 100644 --- a/game/presentation/views/level_map_screen.gd +++ b/game/presentation/views/level_map_screen.gd @@ -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)