- 三新件: camp_esc_overlay(modal_shell+三钮,退出=danger_button,零动效零新素材)/main_esc_flow(静态承接件零成员态:is_camp_context+on_esc_input四态路由+_other_modal_open登记册集合查询+三出口动线)/camp_hud_band(48px浮层+keystone_badge,refresh_camp=bus目标册契约面) - 接线: ui_registry contract+node()第六槽(营地层与设置层之间——契约3栈语义正解);ui_camp_modals六枚落满(卡⑥终态);main_ui_build实例化+三出口薄委托接线+bus目标册纳入HUD栏;main.gd _unhandled_input(契约9接线定稿:KEY_ESCAPE配physical/pressed非echo/禁轮询/不挂ui_cancel)+三薄委托零新增成员;presenter.open_camp尾挂刷新单口(契约5时机②);main_overlay_flow._on_settings_closed语境分支(谓词=esc_overlay.visible谁开谁收) - 契约9分支序修正: ①先于②(设置开在浮窗之上态先命中无反馈——浮窗不隔层关闭;首装②先被实机场景证伪,孤检2红溯源后按卡面编号归位) - 断言批: screen_flow Esc步十断言(根态唤起/再按关窗/echo零响应/子界面无反馈/HUD直写显式触发9999/设置开态不误关/关设置回浮窗/返回动线四可见性/菜单语境不唤起)+ui_struct浮窗段(三钮仅三/零动效双件源码+子树AnimPlayer=0/debug_badge零波及) - 验证: 冒烟PASS+system_test 69项0失败+七探针全绿(screen_flow/ui_struct含Esc段/ui_click问题=0/ui_probe/ui_contrast36对/shot);S9/S10/S13归基线
33 lines
1.6 KiB
GDScript
33 lines
1.6 KiB
GDScript
## Esc 浮窗视图(营地语境 Esc 唤起):返回主菜单/设置/退出游戏三钮(裁决 9——三项且仅三项)。
|
|
## 壳=UiKit.modal_shell(居中模态壳,ui_kit 工厂单点);退出钮=UiKit.danger_button;零新素材零新色值。
|
|
## Q2 再按 Esc 关窗=组合根 Esc 路由直呼 flow.close(本视图无自关通路);三钮 pressed 外发意图不内含动线。
|
|
## 零动效(契约 6——直开直关,子树零 AnimationPlayer、源码零动效令牌)。
|
|
class_name CampEscOverlay
|
|
extends Control
|
|
|
|
signal return_requested ## 返回主菜单意图(动线归 MainEscFlow._on_return_to_menu——首步 close 浮窗)
|
|
signal settings_requested ## 设置意图(开设置层——浮窗登记在其下,栈语义关后重现)
|
|
signal quit_requested ## 退出游戏意图(_quit_game 原样复用)
|
|
|
|
var _return_btn: Button
|
|
var _settings_btn: Button
|
|
var _quit_btn: Button
|
|
|
|
|
|
func setup_buttons() -> void:
|
|
var box: VBoxContainer = UiKit.modal_shell(self, Color(UiKit.DIM, 0.55), Vector2(360, 0), 12,
|
|
UiKit.panel_skinned(Vector4(14, 12, 14, 12))).box
|
|
_return_btn = UiKit.button("返回主菜单")
|
|
box.add_child(_return_btn)
|
|
_settings_btn = UiKit.button("设置")
|
|
box.add_child(_settings_btn)
|
|
_quit_btn = UiKit.danger_button("退出游戏")
|
|
box.add_child(_quit_btn)
|
|
visible = false # 登记模态初始隐(开合走栈——模态纪律)
|
|
|
|
|
|
func bind_signals() -> void:
|
|
_return_btn.pressed.connect(func() -> void: return_requested.emit())
|
|
_settings_btn.pressed.connect(func() -> void: settings_requested.emit())
|
|
_quit_btn.pressed.connect(func() -> void: quit_requested.emit())
|