# VERTICAL SLICE - NOT FOR PRODUCTION # 实现 GDD:design/ux/battle.md(D 区扫雷图 ~760×548 容器〔底行 548——原 A 区顶栏空间并入〕——顶部 AP 条 44px〔左:点阵+停手; # 右:图例+弃图刷新〕、棋盘主体居中、toast 槽上缘内侧、演出层)。 # Date: 2026-09-12 # 高内聚边界:容器组合 + 信号转发——动作意图全部信号外发到组合根,零核心写调用。 class_name BoardZoneView extends PanelContainer var ap_bar: ApBarView var board_view: BoardView var toast: ToastStack var fx: BoardFxView var status_badge: Button # 状态面板入口角标(迭代 17 卡③ P1 丁——debug 角标同形制;连接归组合根) var debug_badge: Button # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——调试门控归组合根;状态角标同形制) var _board_area: Control # resized 命名转发用(原 lambda 局部捕获——P1-3 转命名 2026-09-29) signal action_requested(cell: Vector2i, kind: String) signal stop_pressed signal refresh_confirmed signal legend_toggled signal hover_forbidden(cell: Vector2i) signal chord_attempted(cell: Vector2i) func _init() -> void: size_flags_horizontal = Control.SIZE_EXPAND_FILL var vb := VBoxContainer.new() vb.add_theme_constant_override("separation", 4) add_child(vb) ap_bar = ApBarView.new() vb.add_child(ap_bar) var board_area := Control.new() board_area.size_flags_vertical = Control.SIZE_EXPAND_FILL board_area.clip_contents = true vb.add_child(board_area) _board_area = board_area board_area.resized.connect(_on_board_area_resized) board_view = BoardView.new() board_view.set_anchors_preset(Control.PRESET_FULL_RECT) board_area.add_child(board_view) fx = BoardFxView.new() board_area.add_child(fx) toast = ToastStack.new() board_area.add_child(toast) # 角标对(迭代 18 卡⑦ P2 甲——调试+状态两枚右下角常驻,HBox 并排锚角距 16px): # 17卡③状态角标同形制:紧凑钮豁免宽度基准+字号降档。可见性/置灰归组合根 _sync_status_entry #(调试门控/其他模态开着=置灰不可点——排除式开态查询);信号连接归组合根。 # preset 在子件全部入列后调用——MINSIZE 锚按当时最小尺寸计偏移(空容器调用=零尺寸锚外溢屏边) var corner := HBoxContainer.new() corner.add_theme_constant_override("separation", 8) debug_badge = UiKit.button("调试", 0.0) # 角落小件豁免宽度基准(同状态角标) debug_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT) debug_badge.tooltip_text = "打开调试浮窗(当局数据/种子/数值调整)" debug_badge.visible = false # 显式初始化——非调试会话不误现(可见性归组合根同步) corner.add_child(debug_badge) status_badge = UiKit.button("状态", 0.0) # 角落小件豁免宽度基准(同调试角标) status_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT) status_badge.tooltip_text = "查看钥石与永久强化进度(只读)" status_badge.visible = false # 显式初始化——非对局期不误现(可见性归组合根同步) corner.add_child(status_badge) # 右下角锚定(迭代 18 卡⑦):MINSIZE 预设须在入树后调用——容器出树的最小尺寸缓存陈旧为 0 #(裸 Button 无此病,容器延迟到首轮排序才重算),零尺寸锚角会使钮对悬出屏边; # grow 向左上=后续最小尺寸变化向屏内生长。预设延迟帧尾——届时容器最小尺寸已就绪 corner.grow_horizontal = Control.GROW_DIRECTION_BEGIN corner.grow_vertical = Control.GROW_DIRECTION_BEGIN corner.set_anchors_and_offsets_preset.call_deferred(Control.PRESET_BOTTOM_RIGHT, Control.PRESET_MODE_MINSIZE, 16) board_area.add_child(corner) # M8(UI 落码批):棋盘底常驻操作提示条(demo ⑦——文案经 board_view 输入代码证实; # 旧 chord 一次性 toast 提示退役归此常驻条;审计第 7 条用户批) var hint := PanelContainer.new() hint.add_theme_stylebox_override("panel", UiKit.panel_flat( Color(0.09, 0.07, 0.05, 0.82), UiKit.HINT_STRIP_EDGE, 0, 1, Vector4(12, 2, 12, 2))) hint.size_flags_horizontal = Control.SIZE_SHRINK_CENTER hint.mouse_filter = Control.MOUSE_FILTER_IGNORE vb.add_child(hint) var hl := UiKit.label("左键 挖掘 / 移动 · 右键 封印(不可逆) · 同格双击 快开",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT) hint.add_child(hl) # 信号转发(组合根只接线一处) board_view.action_requested.connect(_forward_action) board_view.hover_forbidden.connect(_forward_hover) board_view.chord_attempted.connect(_forward_chord) ap_bar.stop_pressed.connect(_emit_stop_pressed) ap_bar.refresh_confirmed.connect(_emit_refresh_confirmed) ap_bar.legend_toggled.connect(_emit_legend_toggled) func _on_board_area_resized() -> void: board_view.set_cell_area(_board_area.size) func _forward_action(c: Vector2i, kind: String) -> void: action_requested.emit(c, kind) func _forward_hover(c: Vector2i) -> void: hover_forbidden.emit(c) func _forward_chord(c: Vector2i) -> void: chord_attempted.emit(c) func _emit_stop_pressed() -> void: stop_pressed.emit() func _emit_refresh_confirmed() -> void: refresh_confirmed.emit() func _emit_legend_toggled() -> void: legend_toggled.emit()