Files
DKChan 4b174877be 补提交(布局几何单点化批·代码面+工具面+architecture行·跨会话遗留): battle_layout.tres 新表单行五字段(stage_h/info_panel_w/ap_bar_h/log_band_h_dig/log_band_h_settle)经 schema battle_layout_table.gd+域容器 config_domain_presentation.gd 收进 ConfigDb.presentation(ConfigDB 三容器→四容器,manifest 增 battle_layout 键,B区高度裁决 2026-10-30 用户裁=取代码标准 stage_h);views 五件构造签名增 layout 参(BattleStageView/HeroInfoPanelView/BoardZoneView/ApBarView/BattleLogView 常量高度改表值驱动)+ui_assembler 装配传 layout+probes 两件改址+main.gd 结算带注释去数值;tools/layout_config.py 新件+render_sample_sheet 两版读布局表现算(样张工具面);文档面: architecture.md ConfigDB 行换代(四容器成员 7/7/5/1、类变量 10)+HUD框架.md 三区表/装板不等式/调参表去数值化改指布局表+数据配置.md+interaction-patterns.md 明细带句去数值(battle.md 区表与待办清单登记面已随 1cdef6ba 在库);消费漏网 L1 就地补改九处(构造签名换型与 iter45 断点件收编的测试改址漏网,判据零变化): theme_projection_test:386/player_copy_sweep_test:44,98/adventure_feats_test:772/standee_fx_sweep_test:75/feat_vouchers_test:292 六处补 layout 实参,adventure_feats_test:791/level_shop_economy_test:1480/feat_vouchers_test:81 三处断点成员直读改经 a._bp_store(iter45卡②六成员搬移漏网,02 闸合回后首全量暴露);load_tables 超函数长键清偿(容器装配块抽 _assign_loaded 私有协函数——表行按域收进四容器+resolver 注入单一职责,与 _cross_validate 委托先例同型,S13 新增红修至基线口径内);窄验: 四件修复套件单跑全绿+gdstyle 基线外新违规 0
2026-10-31 05:05:08 +08:00

119 lines
4.9 KiB
GDScript

## 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 局部捕获)
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(layout: BattleLayoutTable) -> void:
size_flags_horizontal = Control.SIZE_EXPAND_FILL
var vb := VBoxContainer.new()
vb.add_theme_constant_override("separation", 4)
add_child(vb)
_build_views(vb, layout)
## 视图三件域:AP 条+棋盘区(含动效与 toast 叠层)
func _build_views(vb: VBoxContainer, layout: BattleLayoutTable) -> void:
ap_bar = ApBarView.new(layout)
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)
_build_board_children(board_area, vb)
## 棋盘子件域:视图+动效+toast 三叠层挂接+状态角标+操作提示条(hint 回挂 vb——树序与拆分前一致)
func _build_board_children(board_area: Control, vb: VBoxContainer) -> void:
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卡③同形制:紧凑钮豁免宽度基准+字号降档。可见性/置灰归组合根 _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()