- 删除 design/dev/architecture/adr-0001~0007 共 7 份文件(内容留 git 历史可查) - architecture.md:删「ADR 审计」「ADR 立项清单」两节;清除全文 ADR-000X 注记、QQ 表/S 表 ADR 引用;未决表关闭已落定项(QQ-01/02/03),立项清单在途事项转登记 QQ-11~14;补 A1 生成姿态事实、autoload 四件清单、board_generator 性能姿态;文档状态立「事实源地位」条 - CLAUDE.md:恢复 RNG 单点硬性红线(去 ADR-0007 引用);新增「架构事实唯一源」红线;规范导航架构行标注唯一事实源 - doc-conventions:§5 增「架构事实唯一源」行;§11 活文档清单补架构文档 - registry:architecture.yaml 删 18 处 adr 字段、autoload_set 补 SaveManager/MetaProgression、board_rending 更新为 Node2D 已落地事实;entities.yaml 12 处引用清除 - game/ 代码注释约 60 处清 ADR-000X 引用(事实与日期保留);豁免标记 ADR-0007-exempt → rng-seed-exempt(main.gd/static_scan.sh/architecture.md/06/iter27 五处同步) - GDD/qa 实现报告/research 卡片/roadmap/tests README 引用全清;死链校验 1206 链接 0 死链、gdd_lint 0 不通过 - 代码中 adr/adr5 等为 adventure_runner 既有局部变量名(非 ADR 引用),未动
115 lines
5.2 KiB
GDScript
115 lines
5.2 KiB
GDScript
# 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 甲——DS_DEBUG 门控归组合根;状态角标同形制)
|
||
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
|
||
#(DS_DEBUG 门控/其他模态开着=置灰不可点——排除式开态查询);信号连接归组合根。
|
||
# 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()
|
||
|
||
|