# VERTICAL SLICE - NOT FOR PRODUCTION # 实现 GDD:design/ux/battle.md(D 区图例按钮 + 模态 overlay——格态语义图例; # 状态槽空态说明成文载入〔增益状态 D1×①〕)。 # Date: 2026-09-12 # pattern 6 模态 overlay 层级纪律:打开时由组合根隐藏上方遮挡层 + 锁棋盘输入; # 本类自持开关(toggle),探针断言"打开后自身 visible"——遮挡物断言归场景探针。 class_name LegendOverlay extends Control signal closed const ENTRIES := [ ["#C9AF83", "完整覆尘地砖", "未开格——左键挖开(1AP,须相邻)· 右键插旗(1AP)"], ["#B39A78", "碎裂裸土", "已开 0 格——可通行,左键移动(免费)"], ["#C63D22", "旗", "一次性承诺(不能拔)——轮末自动判定标中;插错可左键直接挖开(安全格零奖励、雷格吃挖雷惩罚)"], ["#2E6E8E", "小人", "探险者——8 向相邻未开格常驻微光 = 可挖域"], ["#F0A828", "金徽章", "已开格奖励身份 icon(旗之下、数值之上,不进数字区)"], ["#33261B", "状态槽空态", "无状态效果时槽位隐藏,数据框上移补位——非异常"], ] var _panel: PanelContainer func _init() -> void: var dim := ColorRect.new() dim.color = Color(UiKit.DIM, 0.55) dim.set_anchors_preset(Control.PRESET_FULL_RECT) dim.gui_input.connect(func(ev: InputEvent): if ev is InputEventMouseButton and ev.pressed: close()) add_child(dim) var center := CenterContainer.new() center.set_anchors_preset(Control.PRESET_FULL_RECT) dim.add_child(center) _panel = PanelContainer.new() center.add_child(_panel) var box := VBoxContainer.new() box.custom_minimum_size = Vector2(520, 0) box.add_theme_constant_override("separation", 6) _panel.add_child(box) box.add_child(UiKit.label("图例 · 格态", 20, true)) box.add_child(HSeparator.new()) for e in ENTRIES: var row := HBoxContainer.new() row.add_theme_constant_override("separation", 8) var chip := ColorRect.new() chip.custom_minimum_size = Vector2(18, 18) chip.color = Color(e[0]) row.add_child(chip) var lab := UiKit.label("%s —— %s" % [e[1], e[2]], 13, false) lab.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART lab.custom_minimum_size = Vector2(440, 0) row.add_child(lab) box.add_child(row) box.add_child(HSeparator.new()) var close_btn := UiKit.button("关闭") close_btn.pressed.connect(close) box.add_child(close_btn) visible = false func is_open() -> bool: return visible func toggle() -> void: if visible: close() else: open() func open() -> void: visible = true func close() -> void: if not visible: return visible = false closed.emit()