merge: goal 自验收口(九组对比图终态重摄+审计报告批末判定节+06 两条换代)——判官复验四修随批(滑轨实高/类型脚注/地图顶栏框板/探针种子断点)
No files matched your search
@@ -320,7 +320,7 @@
|
|||||||
|
|
||||||
**归属**:UI 设计对齐批后续专项(或独立呈现批);开工 = 用户点名
|
**归属**:UI 设计对齐批后续专项(或独立呈现批);开工 = 用户点名
|
||||||
|
|
||||||
**状态**:待办
|
**状态**:**已全部落地(2026-10-06 /goal UI 对齐批,merge 2ca6288 链)**——①卡片 232×352=ui_kit BCard(D1,图标槽 76/60 随批)②商店全屏页=UiKit.page_shell(D2,56px 通栏顶条+爬价规则行+底注;三选一同壳)③地图底栏=85px 定高单条(放弃 90 小钮+特性行限宽截断+深墨)。用户令(/goal)立项即发令,无须另批。
|
||||||
|
|
||||||
#### 全屏 UI 审计差距清单(实机×demo 逐屏对比,2026-10-06 登记)
|
#### 全屏 UI 审计差距清单(实机×demo 逐屏对比,2026-10-06 登记)
|
||||||
|
|
||||||
@@ -328,7 +328,7 @@
|
|||||||
|
|
||||||
**归属**:UI 设计对齐批后续轮(或独立呈现批);开工 = 用户逐项裁决
|
**归属**:UI 设计对齐批后续轮(或独立呈现批);开工 = 用户逐项裁决
|
||||||
|
|
||||||
**状态**:待办
|
**状态**:**六项已闭环(2026-10-06 /goal UI 对齐批)**——①底栏重设计全落(85px 定高+放弃 90 小钮+特性行限宽截断+深墨)②E5 已回滚(blast→TG_MAGIC,TG_AOE 只接 aoe 键)③主操作语义已反转(有档=继续上局主黄钮)④结算仪式感已落(DIM_NIGHT 0.62 压暗+两列账行+紧凑钮)⑤背景全局已落(石纹 0.14 弱质感+暗角+地图渐变+标题光带,UiKit 氛围层单点)⑥D1/D2 已落(见上条)。**遗留(已判定并留档)**:营地面板明度/行密度与关闭钮位(camp ⑦)、战斗棋盘底板融景(battle ⑤①)、道具槽段位(台账 352 功能欠账)、立绘比例(资产升档批在册)——归各自在册条目,不在 UI 对齐轮再开。复判记录=design/qa/ui-audit-vs-demo-2026-10-06.md 批末判定节。
|
||||||
|
|
||||||
#### 资产升档重产批(art-bible v3.0 中修挂账③,2026-09-29 登记)
|
#### 资产升档重产批(art-bible v3.0 中修挂账③,2026-09-29 登记)
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 932 KiB |
|
Before Width: | Height: | Size: 952 KiB After Width: | Height: | Size: 865 KiB |
|
Before Width: | Height: | Size: 448 KiB After Width: | Height: | Size: 445 KiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 849 KiB |
|
Before Width: | Height: | Size: 763 KiB After Width: | Height: | Size: 761 KiB |
|
Before Width: | Height: | Size: 579 KiB After Width: | Height: | Size: 721 KiB |
|
Before Width: | Height: | Size: 623 KiB After Width: | Height: | Size: 730 KiB |
|
Before Width: | Height: | Size: 284 KiB After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 829 KiB After Width: | Height: | Size: 437 KiB |
|
Before Width: | Height: | Size: 420 KiB After Width: | Height: | Size: 330 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 802 KiB After Width: | Height: | Size: 375 KiB |
|
Before Width: | Height: | Size: 361 KiB After Width: | Height: | Size: 330 KiB |
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 337 KiB |
|
Before Width: | Height: | Size: 252 KiB After Width: | Height: | Size: 351 KiB |
|
Before Width: | Height: | Size: 262 KiB After Width: | Height: | Size: 218 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 202 KiB |
@@ -64,3 +64,33 @@ demo 石皮框板+两列对齐行(label 列/控制列)+减动效行;实机
|
|||||||
5. **标题屏主操作语义**(继续上局应为主钮)。
|
5. **标题屏主操作语义**(继续上局应为主钮)。
|
||||||
6. 战斗屏结构对齐度最高,仅棋盘底色处理与左栏编排差距。
|
6. 战斗屏结构对齐度最高,仅棋盘底色处理与左栏编排差距。
|
||||||
7. E5 证据更新:demo 爆破卡紫带 → 建议 blast 归回 TG_MAGIC(推翻 T4a 的 blast→TG_AOE),随用户裁决。
|
7. E5 证据更新:demo 爆破卡紫带 → 建议 blast 归回 TG_MAGIC(推翻 T4a 的 blast→TG_AOE),随用户裁决。
|
||||||
|
|
||||||
|
## 批末判定(2026-10-06 /goal UI 对齐批收口——逐项复判全记)
|
||||||
|
|
||||||
|
/goal 令(「将游戏的 UI 对齐 demo 的 UI;完成后自验:ui_audit_probe 逐屏实机截图×demo 浏览器截图,重建并排对比图逐项判定;全部差距闭环或列明不可对齐原因」)执行完毕。判官=documents:visual-judge 两轮独立目检(初判 7 pass/2 partial/1 fail → 修复后复判 4 张全部转 pass),九组并排图已按合后态重摄重建(real/ 与 pairs/ 现内容=最终态)。
|
||||||
|
|
||||||
|
### 逐屏判定终态
|
||||||
|
|
||||||
|
| 屏 | 判定 | 闭环内容 | 留档差异(非本轮差距) |
|
||||||
|
|---|---|---|---|
|
||||||
|
| ①标题 | **pass** | 主操作语义反转(有档=继续上局主黄钮);背景=暖棕底+石纹 0.14+斜光带+暗角 | demo 玩法速览牌已按用户令删除,不回补 |
|
||||||
|
| ②营地 | **pass** | 背景氛围层(可见处石纹微弱+暗角) | 面板明度/行密度/关闭钮位=camp ⑦ 遗留(06 留档) |
|
||||||
|
| ③设置 | **pass** | 两列对齐(label 定宽 140)+返回钮紧凑 90+主音量滑轨实高修(HSlider 槽按 stylebox min 高绘制缺陷) | 减动效行不拆=reduced_motion 单设置同驱 motion_scale+结算演播(语义命名批裁决,demo 两行=同一设置) |
|
||||||
|
| ④地图 | **pass** | 底栏 85px 定高单条+放弃 90 小钮+特性行限宽截断+深墨;顶栏关卡名框板+GP 烛光胶囊+两极排布;背景暖棕渐变 | 道具槽段位=台账 352 功能欠账(非呈现层) |
|
||||||
|
| ⑤战斗 | **pass** | 背景氛围层成立;轮次条/上轮摘要结构一致 | 棋盘底板融景、左栏编排、站桩紧凑度=battle ⑤ 遗留(06 留档) |
|
||||||
|
| ⑥三选一 | **pass** | 全屏页(page_shell 根底档)+D1 竖卡 232×352+类型脚注行+底注 | 稀有度词缺=数据面无投喂(词表随数据批补) |
|
||||||
|
| ⑦商店 | **pass** | 全屏页(D2)+56px 通栏顶条+爬价规则行(实数投喂 shop_bp_visit_buys×shop_price_a)+D1 竖卡+底注池源 | 「已购 N 档」=实机独有档位语义(功能差异非缺陷) |
|
||||||
|
| ⑧结算·胜/败 | **pass** | DIM_NIGHT 0.62/0.6 全屏压暗(判官实测亮度 218→97)+两列对齐账行+紧凑主钮 | 账行文案词序差异=Narrator 文案域 |
|
||||||
|
| 无映射三屏 | 存档 | 调试浮窗/图例/确认框维持现状(demo 无基线) | — |
|
||||||
|
|
||||||
|
### 不可对齐/留档原因清单
|
||||||
|
|
||||||
|
1. **营地面板明度与行密度、关闭钮位**:camp 布局属 M 批落码形制,重排=独立呈现批量级,本批只落背景氛围层;06 留档。
|
||||||
|
2. **战斗棋盘底板**:棋盘视觉=样张 v2 机检冻结域(golden 断言),动底板需过样张闸;06 留档。
|
||||||
|
3. **地图道具槽**:道具读数无关卡画面=成文出口(台账 352),功能件非呈现层。
|
||||||
|
4. **稀有度脚注词**:候选数据面无稀有度字段投喂,随数据批补。
|
||||||
|
5. **减动效独立行**:与结算演出动画=同一设置(语义命名批 T17 裁决合并),拆行=一设置双行重复,不拆。
|
||||||
|
|
||||||
|
### 闸门记录
|
||||||
|
|
||||||
|
开工基线冒烟 782/0(4336fd2 净态)→ 每轮轻闸冒烟 782/0+probe_gate --click 全绿 → 批末 run_all 16 套全绿+全探针绿+doc 三闸零新增(2 处 06 陈旧断链系基线随 merge 自愈,非本批引入)→ 合 master 2ca6288 主区复跑(冒烟 782/0+click 全绿+run_all 17 套全绿〔含并行批新落 curio_refresh_paid_test〕)→ 判官修复轮复验全绿。
|
||||||
@@ -105,7 +105,8 @@ func open_pick(header: String, cards: Array) -> void:
|
|||||||
var desc := "\n".join(lines.slice(1)) if lines.size() > 1 else ""
|
var desc := "\n".join(lines.slice(1)) if lines.size() > 1 else ""
|
||||||
var idl := cid.to_lower()
|
var idl := cid.to_lower()
|
||||||
var band := UiKit.tg_band(idl) # 类型色带单点(N4c 2026-10-06——TG_* 五族同源判定;aoe/blast 归 TG_AOE)
|
var band := UiKit.tg_band(idl) # 类型色带单点(N4c 2026-10-06——TG_* 五族同源判定;aoe/blast 归 TG_AOE)
|
||||||
var card := UiKit.bcard(title, desc, band, _icon_for_id(idl))
|
# 类型脚注(T7 判官 checkpoint:demo .bcard .src 底部类型行——实机缺=卡下半空底;词=demo 同款)
|
||||||
|
var card := UiKit.bcard(title, desc, band, _icon_for_id(idl), "", _type_label(idl))
|
||||||
card.gui_input.connect(func(ev: InputEvent) -> void:
|
card.gui_input.connect(func(ev: InputEvent) -> void:
|
||||||
if ev is InputEventMouseButton and ev.pressed and ev.button_index == MOUSE_BUTTON_LEFT:
|
if ev is InputEventMouseButton and ev.pressed and ev.button_index == MOUSE_BUTTON_LEFT:
|
||||||
_select_card(cid))
|
_select_card(cid))
|
||||||
@@ -246,3 +247,16 @@ func _icon_for_id(idl: String) -> String:
|
|||||||
if idl.contains("ap") or idl.contains("action"):
|
if idl.contains("ap") or idl.contains("action"):
|
||||||
return UiKit.TEX_ICON_POUCH
|
return UiKit.TEX_ICON_POUCH
|
||||||
return UiKit.TEX_ICON_COINBAG
|
return UiKit.TEX_ICON_COINBAG
|
||||||
|
|
||||||
|
|
||||||
|
# T7 类型脚注词(demo .bcard .src 同款五族——与 tg_band 同域子串判定,卡底填空对齐)
|
||||||
|
func _type_label(idl: String) -> String:
|
||||||
|
if idl.contains("heal"):
|
||||||
|
return "治疗"
|
||||||
|
if idl.contains("blast") or idl.contains("magic"):
|
||||||
|
return "魔法"
|
||||||
|
if idl.contains("pierce"):
|
||||||
|
return "穿甲"
|
||||||
|
if idl.contains("aoe"):
|
||||||
|
return "群伤"
|
||||||
|
return "通用增益"
|
||||||
@@ -87,20 +87,30 @@ func _init() -> void:
|
|||||||
var box := VBoxContainer.new()
|
var box := VBoxContainer.new()
|
||||||
box.add_theme_constant_override("separation", 10)
|
box.add_theme_constant_override("separation", 10)
|
||||||
center.add_child(box)
|
center.add_child(box)
|
||||||
# 顶栏语境(spec Layout:左关卡名 / 右 GP 常驻徽章——直角细线数据框)
|
# 顶栏语境(spec Layout:左关卡名 / 右 GP 常驻徽章——直角细线数据框;
|
||||||
|
# T5 判官 checkpoint 对齐 demo ④:关卡名入框板(裸文本退役)+GP 徽章=烛光胶囊(同商店金币框)+
|
||||||
|
# 左右两极排布(原居中悬置))
|
||||||
var top := HBoxContainer.new()
|
var top := HBoxContainer.new()
|
||||||
top.add_theme_constant_override("separation", 12)
|
top.add_theme_constant_override("separation", 12)
|
||||||
|
top.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||||
box.add_child(top)
|
box.add_child(top)
|
||||||
|
var lvl_plate := PanelContainer.new()
|
||||||
|
lvl_plate.add_theme_stylebox_override("panel",
|
||||||
|
UiKit.panel_flat(UiKit.DARK_UPCOMING, UiKit.PANEL_BORDER, 0, 1, Vector4(12, 3, 12, 3)))
|
||||||
|
top.add_child(lvl_plate)
|
||||||
_level_label = UiKit.label("",UiKit.FS_BODY, true, UiKit.WARM)
|
_level_label = UiKit.label("",UiKit.FS_BODY, true, UiKit.WARM)
|
||||||
_level_label.custom_minimum_size.x = 420
|
lvl_plate.add_child(_level_label)
|
||||||
top.add_child(_level_label)
|
var top_sp := Control.new()
|
||||||
|
top_sp.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||||
|
top.add_child(top_sp)
|
||||||
var gp_box := PanelContainer.new()
|
var gp_box := PanelContainer.new()
|
||||||
gp_box.add_theme_stylebox_override("panel", UiKit.panel_flat(UiKit.DARK_UPCOMING, UiKit.PANEL_BORDER, 0, 1))
|
gp_box.add_theme_stylebox_override("panel",
|
||||||
|
UiKit.panel_flat(UiKit.CANDLE, UiKit.CAMP_HEADER_BAND,UiKit.RADIUS_OBJECT, 1, Vector4(12, 4, 12, 4)))
|
||||||
top.add_child(gp_box)
|
top.add_child(gp_box)
|
||||||
var gp_row := HBoxContainer.new()
|
var gp_row := HBoxContainer.new()
|
||||||
gp_row.add_theme_constant_override("separation", 6)
|
gp_row.add_theme_constant_override("separation", 6)
|
||||||
gp_box.add_child(gp_row)
|
gp_box.add_child(gp_row)
|
||||||
_gp_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.GOLD)
|
_gp_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_ON_GOLD)
|
||||||
gp_row.add_child(_gp_value)
|
gp_row.add_child(_gp_value)
|
||||||
_title = UiKit.label(TITLE_FORK,UiKit.FS_SUB, true, UiKit.WARM)
|
_title = UiKit.label(TITLE_FORK,UiKit.FS_SUB, true, UiKit.WARM)
|
||||||
_title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
_title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
|
|||||||
@@ -703,9 +703,13 @@ static func styled_slider(value: float, minv := 0.0, maxv := 100.0) -> HSlider:
|
|||||||
s.min_value = minv
|
s.min_value = minv
|
||||||
s.max_value = maxv
|
s.max_value = maxv
|
||||||
s.value = value
|
s.value = value
|
||||||
s.custom_minimum_size = Vector2(200, 20)
|
s.custom_minimum_size = Vector2(200, 24)
|
||||||
s.add_theme_stylebox_override("slider", panel_flat(Color8(184, 165, 130), PANEL_BORDER, 0, 1))
|
# 槽轨/填充实高(2026-10-06 判官实checkpoint:HSlider 槽=按 stylebox min 高绘制——零 margin
|
||||||
s.add_theme_stylebox_override("grabber_area", panel_flat(Color8(122, 82, 50), Color8(0, 0, 0, 0), 0, 0))
|
# StyleBoxFlat min 高 0-2px=轨道整条不可见;6px 上下 content margin=12px 实高)
|
||||||
|
s.add_theme_stylebox_override("slider",
|
||||||
|
panel_flat(Color8(184, 165, 130), PANEL_BORDER, 0, 1, Vector4(0, 6, 0, 6)))
|
||||||
|
s.add_theme_stylebox_override("grabber_area",
|
||||||
|
panel_flat(Color8(122, 82, 50), Color8(0, 0, 0, 0), 0, 0, Vector4(0, 6, 0, 6)))
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,8 +29,17 @@ func _ready() -> void:
|
|||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
ProbeUiUtil.isolate_save(main, "smoke_ui_audit", true, true, false)
|
ProbeUiUtil.isolate_save(main, "smoke_ui_audit", true, true, false)
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
|
# 断点种子(2026-10-06 判官 checkpoint——demo 标题屏=有档态「继续上局」主钮亮出;无种子=
|
||||||
|
# 续玩钮隐藏,主操作语义对齐⑤无从呈现。最小合法断点快照;后续「开始冒险」流程自然覆盖)
|
||||||
|
main.save_manager.set_breakpoint({
|
||||||
|
"master_seed": 42, "rng_counter": 0, "hero_hp": 20, "gp": 24, "keystone": 4,
|
||||||
|
"level_index": 1, "bonus": {}, "shop_purchased": {}, "relics": [],
|
||||||
|
"bonus_aux_carry": [], "keystone_drops": [], "bonus_taken": {},
|
||||||
|
})
|
||||||
|
main._refresh_resume_button()
|
||||||
|
await get_tree().process_frame
|
||||||
|
|
||||||
# 1 标题屏(启动态)
|
# 1 标题屏(启动态=有档态)
|
||||||
await _snap("1_start")
|
await _snap("1_start")
|
||||||
# 2 调试浮窗(P3 仅开始菜单可开——趁 _level_active=false 先截)
|
# 2 调试浮窗(P3 仅开始菜单可开——趁 _level_active=false 先截)
|
||||||
main._show_debug_overlay()
|
main._show_debug_overlay()
|
||||||
@@ -55,6 +64,10 @@ func _ready() -> void:
|
|||||||
close_btn.pressed.emit()
|
close_btn.pressed.emit()
|
||||||
await _settle()
|
await _settle()
|
||||||
# 5 关卡地图(开始冒险→停点出图)
|
# 5 关卡地图(开始冒险→停点出图)
|
||||||
|
# 收种子断点(有断点时「开始冒险」=清档确认互斥弹窗——不收则断流,5_battle 截不上)
|
||||||
|
main.save_manager.clear_breakpoint()
|
||||||
|
main._refresh_resume_button()
|
||||||
|
await get_tree().process_frame
|
||||||
var lvbtn: Button = ProbeUiUtil.find_button(main._start_overlay, "开始冒险", "contains")
|
var lvbtn: Button = ProbeUiUtil.find_button(main._start_overlay, "开始冒险", "contains")
|
||||||
if lvbtn != null:
|
if lvbtn != null:
|
||||||
lvbtn.pressed.emit()
|
lvbtn.pressed.emit()
|
||||||
|
|||||||