fix: 审计差距①④⑤⑦四件落地(底栏85定高+特性行限宽截断/结算两列账行+DIM_NIGHT压暗0.62/0.6+紧凑钮/标题屏主操作语义对齐demo/E5爆破带回滚magic族)+danger_button min_w参数化(放弃90宽)——轻闸冒烟782/0+probe_gate --click全绿;两探针适配两列账行(ui_probe _gp_val/ui_click_probe 名值拼串);ui_audit_probe.gd.uid 侧车补提交
This commit is contained in:
1 parent
4336fd26bc
commit
58e8903a3c
7 files changed
+101
-33
No files matched your search
@@ -138,11 +138,14 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
|
||||
# 组帽·冒险(M2 分组)
|
||||
box.add_child(UiKit.label("── 冒 险 ──",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT))
|
||||
# 唯一试玩入口 = 正式「开始冒险」(三关序列);单关测试直入口(L2/L3)退役(2026-09-23 用户拍板)
|
||||
var resumebtn := UiKit.button("▶ 继续上局") # 迭代 8 卡②——有断点才亮(可见性与关数文案归组合根刷新)
|
||||
var resumebtn := UiKit.primary_button("▶ 继续上局") # 迭代 8 卡②——有断点才亮(可见性与关数文案归组合根刷新);主操作钮=审计差距⑤对齐 demo
|
||||
resumebtn.tooltip_text = "自最近停点恢复"
|
||||
resumebtn.visible = false
|
||||
box.add_child(resumebtn)
|
||||
var lvbtn := UiKit.primary_button("▶ 开始冒险", "三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城")
|
||||
# 主操作语义对齐 demo(2026-10-06 审计差距⑤——有档时「继续上局」才是首动作=主黄钮,
|
||||
# 「开始冒险」=常规石钮;tooltip 保留)
|
||||
var lvbtn := UiKit.button("▶ 开始冒险")
|
||||
lvbtn.tooltip_text = "三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城"
|
||||
box.add_child(lvbtn)
|
||||
|
||||
# 组帽·营地与系统
|
||||
|
||||
@@ -15,10 +15,16 @@ const COL_WARM := UiKit.WARM
|
||||
var _dim: ColorRect
|
||||
var _seal: Panel
|
||||
var _verdict: Label
|
||||
var _rows_box: VBoxContainer # M9 三行账(GP/钥石/本关加成——demo ⑧;失败侧整行隐藏=P-C4 维持 OQ14)
|
||||
var _gp_row: Label
|
||||
var _ks_row: Label
|
||||
var _bonus_row_l: Label
|
||||
var _rows_box: VBoxContainer # M9 三行账(GP/钥石/本关加成——demo ⑧两列对齐 2026-10-06 审计差距④;失败侧整行隐藏=P-C4 维持 OQ14)
|
||||
var _gp_row: HBoxContainer
|
||||
var _gp_name: Label
|
||||
var _gp_val: Label
|
||||
var _ks_row: HBoxContainer
|
||||
var _ks_name: Label
|
||||
var _ks_val: Label
|
||||
var _bonus_row_l: HBoxContainer
|
||||
var _bonus_name: Label
|
||||
var _bonus_val: Label
|
||||
var _cele: TextureRect # M9 庆祝立绘(idle 占位浮动——正式帧待资产批)
|
||||
var _btn: Button
|
||||
var _board_rect := Rect2()
|
||||
@@ -75,20 +81,32 @@ func _init() -> void:
|
||||
_rows_box.add_theme_constant_override("separation", 6)
|
||||
_rows_box.visible = false
|
||||
box.add_child(_rows_box)
|
||||
_gp_row = UiKit.label("",UiKit.FS_SUB, true, UiKit.GOLD_DEEP)
|
||||
_gp_row.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
# 两列对齐账行(审计差距④对齐 demo ⑧——项目名左/数值右,定宽 360)
|
||||
_gp_row = _ledger_row()
|
||||
_gp_name = _ledger_name(UiKit.FS_SUB, UiKit.GOLD_DEEP, true)
|
||||
_gp_val = _ledger_value(UiKit.FS_SUB, UiKit.GOLD_DEEP, true)
|
||||
_gp_row.add_child(_gp_name)
|
||||
_gp_row.add_child(_gp_val)
|
||||
_rows_box.add_child(_gp_row)
|
||||
_ks_row = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_LABEL)
|
||||
_ks_row.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
_ks_row = _ledger_row()
|
||||
_ks_name = _ledger_name(UiKit.FS_BODY, UiKit.INK_LABEL, false)
|
||||
_ks_val = _ledger_value(UiKit.FS_BODY, UiKit.INK_LABEL, true)
|
||||
_ks_row.add_child(_ks_name)
|
||||
_ks_row.add_child(_ks_val)
|
||||
_ks_row.visible = false
|
||||
_rows_box.add_child(_ks_row)
|
||||
_bonus_row_l = UiKit.label("",UiKit.FS_HINT, false, UiKit.INK_LABEL)
|
||||
_bonus_row_l.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
_bonus_row_l = _ledger_row()
|
||||
_bonus_name = _ledger_name(UiKit.FS_HINT, UiKit.INK_LABEL, false)
|
||||
_bonus_val = _ledger_value(UiKit.FS_HINT, UiKit.INK_LABEL, true)
|
||||
_bonus_row_l.add_child(_bonus_name)
|
||||
_bonus_row_l.add_child(_bonus_val)
|
||||
_bonus_row_l.visible = false
|
||||
_rows_box.add_child(_bonus_row_l)
|
||||
box.add_child(HSeparator.new())
|
||||
# M9:明细回看钮退役(P-C7——冒险中回看归「生涯」)
|
||||
_btn = UiKit.primary_button("继续")
|
||||
_btn.size_flags_horizontal = Control.SIZE_SHRINK_CENTER # 审计差距④——紧凑钮(原全宽)
|
||||
_btn.custom_minimum_size.x = 150
|
||||
_btn.pressed.connect(_emit_continue_pressed)
|
||||
box.add_child(_btn)
|
||||
visible = false
|
||||
@@ -99,14 +117,14 @@ func _init() -> void:
|
||||
# 传入(入账次序 = LevelRunner 入账先于组合根 handler,runner.gp 即战后总量);空串 = 不显示(失败侧恒空)。
|
||||
func open_victory(verdict_line: String, continue_label: String, board_rect: Rect2, gp_summary: String = "",
|
||||
ks_summary: String = "", bonus_summary: String = "", gp_gain := -1, gp_total := -1) -> void:
|
||||
_dim.color = Color(COL_WARM, 0.28)
|
||||
_dim.color = Color(UiKit.DIM_NIGHT, 0.62) # 审计差距④——全屏压暗对齐 demo(原 0.28 暖纱透底)
|
||||
_verdict.text = verdict_line
|
||||
_seal.visible = true # 胜利徽记(面板头部静态)
|
||||
_seal.modulate = Color.WHITE
|
||||
_gp_row.text = gp_summary
|
||||
_ks_row.text = ks_summary
|
||||
_set_ledger_row(_gp_name, _gp_val, gp_summary, true) # GP 行=固定名「战利品 GP」(滚动/整串均只入值列)
|
||||
_set_ledger_row(_ks_name, _ks_val, ks_summary)
|
||||
_ks_row.visible = ks_summary != ""
|
||||
_bonus_row_l.text = bonus_summary
|
||||
_set_ledger_row(_bonus_name, _bonus_val, bonus_summary)
|
||||
_bonus_row_l.visible = bonus_summary != ""
|
||||
_rows_box.visible = gp_summary != "" or ks_summary != "" or bonus_summary != ""
|
||||
_btn.text = continue_label
|
||||
@@ -125,7 +143,7 @@ func open_victory(verdict_line: String, continue_label: String, board_rect: Rect
|
||||
|
||||
func open_defeat(verdict_line: String, continue_label: String, board_rect: Rect2) -> void:
|
||||
# 明度不变的暮蓝色相氛围(全屏唯一暮蓝档——§2.5 最静一拍)
|
||||
_dim.color = Color(COL_DUSK, 0.45)
|
||||
_dim.color = Color(COL_DUSK, 0.6) # 审计差距④同族压暗(原 0.45)
|
||||
_verdict.text = verdict_line
|
||||
_board_rect = board_rect
|
||||
visible = true
|
||||
@@ -153,6 +171,41 @@ func verdict_text() -> String:
|
||||
return _verdict.text
|
||||
|
||||
|
||||
# 两列账行工厂(审计差距④——名左/值右,定宽 360)
|
||||
func _ledger_row() -> HBoxContainer:
|
||||
var r := HBoxContainer.new()
|
||||
r.custom_minimum_size = Vector2(360, 0)
|
||||
return r
|
||||
|
||||
|
||||
func _ledger_name(size: int, col: Color, _bold: bool) -> Label:
|
||||
var l := UiKit.label("", size, true, col)
|
||||
l.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
return l
|
||||
|
||||
|
||||
func _ledger_value(size: int, col: Color, bold: bool) -> Label:
|
||||
return UiKit.label("", size, bold, col)
|
||||
|
||||
|
||||
# 拆名/值(组合根传入整串):gp_shape=固定名「战利品 GP」值取余串;其余行按「:」或「 · 」切;
|
||||
# 无分隔符=整串入值列、名空
|
||||
func _set_ledger_row(name_l: Label, val_l: Label, s: String, gp_shape := false) -> void:
|
||||
if gp_shape and s.begins_with("战利品 GP"):
|
||||
name_l.text = "战利品 GP"
|
||||
val_l.text = s.substr(6).strip_edges()
|
||||
return
|
||||
var sep := s.find(":")
|
||||
if sep < 0:
|
||||
sep = s.find(" · ")
|
||||
if sep >= 0:
|
||||
name_l.text = s.substr(0, sep)
|
||||
val_l.text = s.substr(sep).strip_edges()
|
||||
else:
|
||||
name_l.text = ""
|
||||
val_l.text = s
|
||||
|
||||
|
||||
func _fx_center() -> Vector2:
|
||||
return get_viewport_rect().size * 0.5
|
||||
|
||||
@@ -254,11 +307,11 @@ func _play_victory_dust() -> void:
|
||||
# M9 GP 行数字滚动(demo ⑧——0.8s 三次缓出;减动效直出终值)
|
||||
func _roll_gp(gp_gain: int, gp_total: int) -> void:
|
||||
if UiKit.motion_scale < 1.0:
|
||||
_gp_row.text = "战利品 GP +%d · 合计 %d" % [gp_gain, gp_total]
|
||||
_gp_val.text = "+%d · 合计 %d" % [gp_gain, gp_total]
|
||||
return
|
||||
var tw := create_tween()
|
||||
tw.tween_method(func(v: float) -> void:
|
||||
_gp_row.text = "战利品 GP +%d · 合计 %d" % [roundi(gp_gain * v), gp_total],
|
||||
_gp_val.text = "+%d · 合计 %d" % [roundi(gp_gain * v), gp_total],
|
||||
0.0, 1.0, UiKit.motion(0.8)).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT)
|
||||
|
||||
|
||||
|
||||
@@ -121,7 +121,11 @@ func _init() -> void:
|
||||
# 底部状态栏(M5 合并单条:亮米面板一站读齐=头像+生命+属性+本关加成/流派件——demo ④;
|
||||
# 道具槽不摆=道具读数无关卡画面成文出口(读快照私域越权),随 runner 出口批补——台账 352 注记;
|
||||
# _hp_value/_attr_value/_bonus_value/_feat_value 投喂键全部保留)
|
||||
# 底栏定高纪律(2026-10-06 审计差距①对齐 demo——单条 ~85px 紧凑亮条;任何子件不再能把栏撑爆:
|
||||
# 特性持有行限宽截断+tooltip 全文,旧「autowrap 无限宽→最小高度逐字竖排爆栏」形态根除)
|
||||
var bottom := PanelContainer.new()
|
||||
bottom.custom_minimum_size = Vector2(0, 85)
|
||||
bottom.size_flags_vertical = Control.SIZE_SHRINK_END
|
||||
bottom.add_theme_stylebox_override("panel",
|
||||
UiKit.panel_flat(UiKit.MAP_BAR_PLATE, UiKit.CAMP_HEADER_BAND, 0, 2, Vector4(12, 6, 12, 6)))
|
||||
box.add_child(bottom)
|
||||
@@ -165,18 +169,22 @@ func _init() -> void:
|
||||
_bonus_row.add_child(bonus_box)
|
||||
var bonus_inner := VBoxContainer.new()
|
||||
bonus_box.add_child(bonus_inner)
|
||||
var bonus_cap := UiKit.label("特性",UiKit.FS_CAPTION, false, UiKit.WARM_SOFT)
|
||||
var bonus_cap := UiKit.label("特性",UiKit.FS_CAPTION, false, UiKit.INK_HINT) # 淡墨→深墨(亮板可读,审计差距①)
|
||||
bonus_inner.add_child(bonus_cap)
|
||||
_bonus_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.WARM)
|
||||
_bonus_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_TITLE) # 淡墨→深墨(同上)
|
||||
bonus_inner.add_child(_bonus_value)
|
||||
# 特性持有行(迭代 12 呈现补齐 2026-10-04——用户反馈关卡选择页看不到局内奖励;组合根投喂)
|
||||
_feat_value = UiKit.label("",UiKit.FS_HINT, false, UiKit.WARM_SOFT)
|
||||
_feat_value.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
# 审计差距①修(2026-10-06):限宽单行截断+tooltip 全文(旧 autowrap 无限宽=爆栏元凶);
|
||||
# 墨色 WARM_SOFT→INK_HINT(暖白系对亮板 ≈1:1 不可读——§7.2 违例修复)
|
||||
_feat_value = UiKit.label("",UiKit.FS_HINT, false, UiKit.INK_HINT)
|
||||
_feat_value.custom_minimum_size = Vector2(240, 0)
|
||||
_feat_value.clip_text = true
|
||||
_feat_value.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
|
||||
bonus_box.add_child(_feat_value)
|
||||
var spacer := Control.new()
|
||||
spacer.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
strip.add_child(spacer)
|
||||
abandon_btn = UiKit.danger_button("放弃") # 打磨包 2026-09-29 文案 + M5 危险钮皮(M10 公共件)
|
||||
abandon_btn = UiKit.danger_button("放弃", "", 90.0) # 审计差距①对齐 demo:小号危险钮 ~90×38(原 216 宽砖);打磨包 2026-09-29 文案 + M5 危险钮皮
|
||||
abandon_btn.pressed.connect(_on_abandon_pressed)
|
||||
abandon_btn.visible = false
|
||||
strip.add_child(abandon_btn)
|
||||
@@ -211,6 +219,7 @@ func _draw_hp_bar(bar: Control) -> void:
|
||||
# 特性持有投影(迭代 12 呈现补齐——组合根投喂聚合文案;空文案=行隐藏)
|
||||
func set_feat_holdings(text: String) -> void:
|
||||
_feat_value.text = text
|
||||
_feat_value.tooltip_text = text # 截断全量兜底(限宽单行省略——悬停看全文)
|
||||
|
||||
|
||||
func set_abandon_available(v: bool) -> void:
|
||||
|
||||
@@ -52,14 +52,15 @@ const TG_MAGIC := Color8(138, 114, 196) # 魔法
|
||||
const TG_PIERCE := Color8(87, 160, 160) # 穿甲
|
||||
const TG_AOE := Color8(226, 86, 118) # 群伤/AOE #E25676(demo --tg-aoe)
|
||||
|
||||
# 类型色带分族判定(N4c/Q4 甲——三选一与商店货架同源同判:id/kind 小写子串匹配,默认=通用增益带;
|
||||
# blast=爆裂群伤归 TG_AOE(reward.tres 现成 clear_blast/spark_aoe 消费面);max_hp 含 hp 归回复族)
|
||||
# 类型色带分族判定(N4c/Q4 甲——三选一与商店货架同源同判:id/kind 小写子串匹配,默认=通用增益带。
|
||||
# E5 回滚 2026-10-06:审计实证 demo「工兵爆破」卡=紫带(magic 族)——blast 归回 TG_MAGIC,
|
||||
# TG_AOE 只接 aoe 键(spark_aoe 消费面保留);max_hp 含 hp 归回复族)
|
||||
static func tg_band(id_lower: String) -> Color:
|
||||
if id_lower.contains("heal") or id_lower.contains("hp"):
|
||||
return TG_HEAL
|
||||
if id_lower.contains("aoe") or id_lower.contains("blast"):
|
||||
if id_lower.contains("aoe"):
|
||||
return TG_AOE
|
||||
if id_lower.contains("magic"):
|
||||
if id_lower.contains("blast") or id_lower.contains("magic"):
|
||||
return TG_MAGIC
|
||||
if id_lower.contains("pierce"):
|
||||
return TG_PIERCE
|
||||
@@ -83,6 +84,7 @@ const FOG_OUTLINE := Color8(30, 24, 18) # 雾面轮廓墨(原 board_
|
||||
const ICON_TINT_ON_GOLD := Color(24.0 / 240.0, 20.0 / 226.0, 16.0 / 200.0) # 当前金底图标墨 = WARM 分量乘法调制(双色墨制——原 level_map_screen 局部)
|
||||
|
||||
const DUSK := Color8(90, 108, 140) # 暮蓝(全作唯一暮蓝档——失败终局)
|
||||
const DIM_NIGHT := Color8(24, 18, 12) # 终局压暗底 #18120C(demo 结算仪式暗纱——胜利侧 dim 基色)
|
||||
|
||||
const WARM := Color8(240, 226, 200) # 暖白(暗底正文)
|
||||
const WARM_SOFT := Color8(232, 213, 168) # 暖白次级(说明文)#E8D5A8(M0 换代——灰米 #C8BCA6 退役,配色总纲「米色去灰」)
|
||||
@@ -435,8 +437,8 @@ static func primary_button(text: String, tip := "") -> Button:
|
||||
|
||||
|
||||
# 危险钮(深红平涂——放弃/删除类;破坏性确认位置纪律=不得与常规确认同位)
|
||||
static func danger_button(text: String, tip := "") -> Button:
|
||||
var b := button(text)
|
||||
static func danger_button(text: String, tip := "", min_w := 216.0) -> Button:
|
||||
var b := button(text, min_w)
|
||||
var sb := panel_flat(Color8(180, 78, 54), Color8(110, 42, 28),RADIUS_OBJECT, 2, Vector4(10, 2, 10, 2))
|
||||
b.add_theme_stylebox_override("normal", sb)
|
||||
b.add_theme_stylebox_override("hover", panel_flat(Color8(196, 90, 62), Color8(110, 42, 28),RADIUS_OBJECT, 2, Vector4(10, 2, 10, 2)))
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://ddqhkbsad4wno
|
||||
@@ -249,7 +249,7 @@ func _ready() -> void:
|
||||
# 卡⑥ 战斗胜利总结结算框(真实信号路径——每场普通胜利到达):断言已拍板面后点「下一节点」
|
||||
if not main._input_locked():
|
||||
_problems.append("胜利结算框打开时输入未锁定")
|
||||
var gp_line: String = main._end_overlay._gp_row.text
|
||||
var gp_line: String = "%s %s" % [main._end_overlay._gp_name.text, main._end_overlay._gp_val.text] # 两列账行(审计差距④)——名/值列拼回整串断言
|
||||
if not gp_line.contains("GP +%d" % main._last_gain_amount) or not gp_line.contains("合计 %d" % int(main.runner.gp)):
|
||||
_problems.append("胜利结算框 GP 增量/总量与钱包实态不符(%s|实态 +%d/%d)" % [gp_line, main._last_gain_amount, int(main.runner.gp)])
|
||||
if main._end_overlay.verdict_text() == "":
|
||||
|
||||
@@ -222,8 +222,8 @@ func _ready() -> void:
|
||||
main.meta = meta_saved
|
||||
if not main._end_overlay.is_open():
|
||||
problems.append("冒险终局面板未开(合成摘要路径)")
|
||||
elif not main._end_overlay._gp_row.visible or not main._end_overlay._gp_row.text.contains("57"):
|
||||
problems.append("终局面板 GP 行缺失或取数不对(%s)" % main._end_overlay._gp_row.text)
|
||||
elif not main._end_overlay._gp_row.visible or not main._end_overlay._gp_val.text.contains("57"):
|
||||
problems.append("终局面板 GP 行缺失或取数不对(%s)" % main._end_overlay._gp_val.text)
|
||||
main._end_overlay.close()
|
||||
main._close_modal(main._end_overlay)
|
||||
if problems.is_empty():
|
||||
|
||||
Reference in new issue
Block a user