Files
gplan-2/game/presentation/views/board_zone_view.gd
T
DKChan 6b1e447d27 feat(调试入口): 全局浮层角标——UI 最顶层、任何 UI 不遮挡(2026-10-16 用户令)
用户定稿:调试入口不做置顶钮式按需出现,要的是「UI 最顶层浮层、不被任何 UI 遮挡」。
实现=三枚屏内角标(菜单右下/战斗 HUD 右下/地图顶栏)合并为一枚全局浮层角标:

- LAYER_CONTRACT 末位新增 {"key": "debug_badge", "kind": "float"}——只落树序(最顶绘制序)、
  不注册 ModalStack:open() 遮挡记账只隐藏登记层,故任何模态/覆盖层开都不遮它(用户需求
  的机制根因);_layer_node 补映射;main 直接子层、构建走 ui_assembler.build_debug_badge
- 位置:右下角 16px 惯例位;地图屏底栏 85px 常驻→_sync_status_entry 按 map_on 抬 offset
  至底栏上方 16px;战斗屏状态角标经 MarginContainer 让位(right 16/bottom 52)不再被压
- 屏内角标全退役:menu_screen/board_zone_view/level_map_screen 三处 debug_badge 删除,
  main 两处接线与 _sync_status_entry 四条可见性/置灰行清除(浮层常显不置灰——点它就是开浮窗)
- 浮窗 desc 文案改「UI 最顶层「调试」浮层角标随时可开——任何界面不遮挡」
- 断言/探针换代:smoke V2f 查 main.debug_badge boot 可见;click_probe 遮挡判据移至设置面
  开中段(浮层角标此时仍应可见=直接验「不遮挡」);tune_probe ①点击路径与⑨对局中角标
  全改 main.debug_badge(T2 防线断言不动——浮窗 non_locking×遮挡复活×has_open 组合回归)

冒烟 1127/0 过;全量闸待跑。
2026-10-16 23:53:57 +08:00

109 lines
4.5 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## VERTICAL SLICE - NOT FOR PRODUCTION
## D 区容器:AP 条+棋盘+toast+演出层+两枚角标的组合壳,子件信号原样转发组合根(组合根只接线一处)。
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 丁;连接归组合根)
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 丁——右下角常驻;2026-10-16 调试角标迁全局浮层后本屏只留状态):
# 17卡③同形制:紧凑钮豁免宽度基准+字号降档。可见性/置灰归组合根 _sync_status_entry
#(其他模态开着=置灰不可点——排除式开态查询);信号连接归组合根。
# 全局调试浮层角标常驻右下角 16px(main 直接子层、ModalStack 登记外——任何 UI 不遮挡),
# 状态角标经 MarginContainer 让位抬高(right 16/bottom 52=浮层钮高约24+间距8+16 贴底);
# preset 在子件全部入列后调用——MINSIZE 锚按当时最小尺寸计偏移(空容器调用=零尺寸锚外溢屏边)
var corner_wrap := MarginContainer.new()
corner_wrap.add_theme_constant_override("margin_right", 16)
corner_wrap.add_theme_constant_override("margin_bottom", 52)
corner_wrap.grow_horizontal = Control.GROW_DIRECTION_BEGIN
corner_wrap.grow_vertical = Control.GROW_DIRECTION_BEGIN
corner_wrap.set_anchors_and_offsets_preset.call_deferred(Control.PRESET_BOTTOM_RIGHT, Control.PRESET_MODE_MINSIZE, 0)
board_area.add_child(corner_wrap)
var corner := HBoxContainer.new()
corner.add_theme_constant_override("separation", 8)
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)
corner_wrap.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()