91 lines
3.1 KiB
GDScript
91 lines
3.1 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 _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)
|
||
# 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), Color8(74, 62, 48), 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("左键 挖掘 / 移动 · 右键 封印(不可逆) · 同格双击 快开", 12, 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()
|
||
|
||
|