## VERTICAL SLICE - NOT FOR PRODUCTION ## 通用确认弹窗:open(text, confirm_label, cancel_label) 双钮外发 confirmed/cancelled; ## open_three(text, confirm_label, secondary_label, cancel_label) 三钮增设 secondary_confirmed ##(营地大门两分支——卡④ T4;双钮调用方零改动:次钮随 open 隐藏)。 ## 文案与按钮语义装配归调用方——本类零业务触碰。 class_name ConfirmDialog extends Control signal confirmed signal secondary_confirmed ## 次确认(三钮形态中钮——营地大门「开始新冒险」出口;卡④ T4) signal cancelled var _text: Label var _confirm_btn: Button var _secondary_btn: Button var _cancel_btn: Button func _init() -> void: var box: VBoxContainer = UiKit.modal_shell(self, Color(UiKit.DIM, 0.55), Vector2(460, 0), 12, UiKit.panel_skinned(Vector4(14, 12, 14, 12))).box _text = UiKit.label("",UiKit.FS_BODY, false, UiKit.INK_TITLE) _text.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART _text.custom_minimum_size = Vector2(430, 0) box.add_child(_text) box.add_child(HSeparator.new()) var btn_row := HBoxContainer.new() btn_row.add_theme_constant_override("separation", 12) btn_row.alignment = BoxContainer.ALIGNMENT_CENTER box.add_child(btn_row) _cancel_btn = UiKit.button("取消") _cancel_btn.pressed.connect(_emit_cancelled) _secondary_btn = UiKit.button("次选项") _secondary_btn.pressed.connect(_emit_secondary) _confirm_btn = UiKit.button("确认") _confirm_btn.pressed.connect(_emit_confirmed) # 位次定值(HUD框架.md:90 三条纪律·其三——推进钮在左、次推进居中、维持在右;四处消费方 # 共用本件同一序。信号按按钮对象路由、不按位次——换序不改路由〔营地交互修复批契约 3〕) btn_row.add_child(_confirm_btn) btn_row.add_child(_secondary_btn) btn_row.add_child(_cancel_btn) visible = false func open(text: String, confirm_label: String, cancel_label: String = "取消") -> void: _text.text = text _confirm_btn.text = confirm_label _cancel_btn.text = cancel_label _secondary_btn.visible = false # 双钮形态(次钮隐藏——既有调用方零改动) # z 序纪律:层序唯一事实源=main.LAYER_CONTRACT(树序与登记序同源派生);开合单口 # 归组合根 ModalFlow(挂起兜底/遮挡记账/开侧同步)——本类只管文案与显示,不自行抬层 visible = true ## 三钮形态(营地大门有断点分支——继续上一段冒险/开始新冒险/取消;Q5 裁甲) func open_three(text: String, confirm_label: String, secondary_label: String, cancel_label: String) -> void: open(text, confirm_label, cancel_label) _secondary_btn.text = secondary_label _secondary_btn.visible = true func close() -> void: visible = false func is_open() -> bool: return visible func _emit_confirmed() -> void: confirmed.emit() func _emit_secondary() -> void: secondary_confirmed.emit() func _emit_cancelled() -> void: cancelled.emit()