死亡碎裂(standee mark_dead 增五碎块抛物线弹飞 0.45s——§4.6.4 灰化+碎裂禁瞬间消失+§8.4 冻结值);意图三档动画终稿(§4.6.4:档①普通攻击零表示不变/档②特殊准备=弹入+二次弹跳高举/档③重击蓄力=缓推 1.22+定格微顿+回落——三档运动签名互异灰度可辨);胜利纹章(battle_end open_victory 蜡封落定后十碎砖自四周拼纹章环,驻留至 close——§2.4);失败掸灰(open_defeat 八尘絮飘落——§2.5)+既有旗光收回挂探针;结算轮光带终稿(加 2px 亮金前导缘线——§2.2 逐行横扫方向可读)。全部程序化 tween 零新帧资产,确定性散布禁全局随机,时长全走 UiKit.motion 减动效包装。 新探针 smoke/fx_probe.tscn+gd:死亡碎裂5/意图三档+零表示/纹章10/掸灰8+旗光8/光带+缘线 五断言全 PASS。 连带:图例旗条目名回退『旗』(click_probe 图例基线精确匹配;T1 曾改旗(封印印记)——封印语义移描述列,色 #000000 保留)。轻闸=冒烟 557/0+五探针(ui_input/ui_probe/click/tune/fx)全 PASS。
86 lines
3.0 KiB
GDScript
86 lines
3.0 KiB
GDScript
# 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 格——可通行,左键移动(免费)"],
|
||
["#000000", "旗", "封印印记(呈现名·不能拔)——轮末自动判定标中;插错可左键直接挖开(安全格零奖励、雷格吃挖雷惩罚)"],
|
||
["#2e86de", "小人", "探险者——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()
|
||
_panel.add_theme_stylebox_override("panel", UiKit.panel_skinned(Vector4(12, 10, 12, 10))) # 石板皮(T2;缺位回退 flat)
|
||
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)
|
||
var title := UiKit.label("图例 · 格态", 20, true)
|
||
title.add_theme_color_override("font_color", UiKit.INK_TITLE) # 亮底墨字(§7.2 数据素面)
|
||
box.add_child(title)
|
||
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.add_theme_color_override("font_color", UiKit.INK_LABEL) # 亮底墨字(§7.2 数据素面)
|
||
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()
|