- modal_stack.gd 新增 has_open_excluding(skip):排除式开态查询(地图屏系登记册模态成员=常态 屏态,其上角标必须可点;只读查询零副作用,登记序/开合记账语义零改动) - board_zone_view.gd 战斗屏 HUD 右下角+level_map_screen.gd 地图屏顶栏 GP 徽右——各一枚「暂停」 角标(debug 角标同形制:UiKit.button 紧凑豁免宽度基准+FS_HINT 字号降档;可见性/置灰归组合根, 信号连接归组合根 ADR-0001;非对局期显式不可见防菜单误现——P1 丁) - main.gd 接线:两角标 pressed→_on_pause_badge_pressed(守卫兜底处理器:他层开着即拒开—— 常态防线=置灰,探针 emit 绕过 disabled 时由此兜住;地图屏开态经 has_open_excluding 不计自身) +_sync_pause_entry 单一同步点(可见性=_level_active∧屏态;置灰=has_open)挂模态开合单口与 屏级互斥口/进局/离局/续玩五路径 - ui_struct_probe:pause 结构断言+只读性契约(游戏语义信号清单巡检——pressed/toggled/text/ value/item/gui_input/focus/closed 十二名,白名单外零连接,合法连接恰 2=关闭钮+closed 外发) +零动效契约(子树零 AnimationPlayer+源码零 create_tween——R5/P4 甲)【首跑 L1 修正:全集 巡检把 Godot 容器布局生命线连接(child_order_changed/item_rect_changed 等引擎自动脏标记) 误判非法——收敛为信号名清单,任务书 v1.1「巡检信号名清单落码列全」本意】 - ui_input_probe case⑯:暂停层输入锁语义(角标真点击 press+release 开层→锁期挖掘零穿透→ 「继续」关层→同格挖掘重新到达;十七断言 PASS)【首跑 L1 修正:域恰 2 枚时 flag_t 带旗+dig_t 揭开后零无旗格可取——case 挪全 case 之尾+前沿移位扩大可挖域兜底(板面扰动零波及)】 - ui_click_probe:战斗屏角标开合/守卫断言(图例开着=置灰+emit 兜底拒开)+地图屏角标一次性 case(选路前开/关,地图屏选路态零扰动);ui_contrast_probe 增钥石徽深墨/烛光黄对(12 对全绿) - smoke_all._pause_overlay_projection:暂停层投影==MetaProgression 访问器逐项(余额徽/锻造三行/ 工坊六行解锁态/天赋树概览——隔离档 smoke_meta 复用,+5 check) - 任务书回填 T0 基线注记(冒烟 783/0·run_all 17 套·交集核对零命中,HEAD=44328b1 时点) - T2 闸读数:冒烟 788/0(基线 783/0,+5 本批)· ui_input 十七断言 PASS · ui_struct 全绿 · ui_contrast 12 对 PASS · ui_click 问题=0 · ui_layout_probe 退出码 0;纯呈现零数值=零 MC
101 lines
4.0 KiB
GDScript
101 lines
4.0 KiB
GDScript
# VERTICAL SLICE - NOT FOR PRODUCTION
|
||
# 实现 GDD:design/ux/battle.md(D 区扫雷图 ~760×548 容器〔底行 520→548——停点前移批 2026-09-23,
|
||
# 原 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 pause_badge: Button # 暂停层入口角标(迭代 17 卡③ P1 丁——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)
|
||
# 暂停层入口角标(迭代 17 卡③ P1 丁——战斗屏 HUD 右下角常驻;debug 角标同形制:紧凑钮豁免
|
||
# 宽度基准+字号降档+角距 16px。可见性/置灰归组合根 _sync_pause_entry(其他模态开着=置灰
|
||
# 不可点——has_open 守卫);信号连接归组合根(ADR-0001——装配器/视图零连接)
|
||
pause_badge = UiKit.button("暂停", 0.0) # 角落小件豁免宽度基准(同调试角标)
|
||
pause_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
|
||
pause_badge.tooltip_text = "查看钥石与永久强化进度(只读)"
|
||
pause_badge.visible = false # 显式初始化——非对局期不误现(可见性归组合根同步)
|
||
pause_badge.set_anchors_and_offsets_preset(Control.PRESET_BOTTOM_RIGHT, Control.PRESET_MODE_MINSIZE, 16)
|
||
board_area.add_child(pause_badge)
|
||
# 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()
|
||
|
||
|