工程(基线合一批·golden单基线跨平台+补锚14张+审核关卡立规): 分平台基线机制拆除(2026-11-08用户裁:跨平台渲染必须一致,禁加基线消化差异)——windows 6件基线提升到golden/根,删windows/mac两平台目录与根目录遗留(level_map.png+边车,零引用核实); 闸件去平台化(render_gate.sh GOLDEN直拼/golden_compare.py删_PLAT与plat_missing/golden_baseline_refresh.sh落点改根+--screens换代入口); 拆自愈采集(ci.yml步+tools/ci/golden_selfheal.sh——CI自动落基线=既当裁判又当选手,测量数据已采完退役); 补锚14张(用户裁:发现少了就补,备案清零)——shot_probe扩九态(营地五窗真点热点开窗/图例真点钮/战末结算与三选一直调喂真实形态文案/调试浮窗直调)+battle段呼吸相位冻结(motion_scale0.5+1.2s动画完结锚定,board_shot同款)+热点键→基线语义名映射(dummy→tree/board→codex); 渲染闸屏态浮层golden段(golden_compare 14面)+shot_checker 16屏清单; 基线审核关卡立规(test-conventions §8.2:逐张审核确认后才入库生效+审核记录落档+非卡片批基线操作同关卡;process-conventions五·实现行:未审核的基线禁合回;req-card/iter技能特殊标注——豁免面直改); 实测依据: mac真渲染vs windows基线四指标(棋盘0.025~0.033%/menu 0.674% changed,RGB零色偏,块平均≈0)全在容差带内——数据归档reports/基线合一批-反哺点-2026-11-08.md; 读数: shot_probe直跑16图问题=0+渲染闸直跑exit=0(20面全PASS,新候选changed=0.00%)+bash -n×3+py_compile+文档域闸绿; 基线审核记录: 20张全部DKChan 2026-11-08确认(README审核记录节)
This commit is contained in:
1 parent
26a01c026f
commit
126e583fed
38 files changed
+263
-110
No files matched your search
@@ -1,6 +1,7 @@
|
||||
# VERTICAL SLICE - NOT FOR PRODUCTION
|
||||
# 整屏截图探针(呈现层测试分级 B 档基建:视口截图程序化产出;七屏——
|
||||
# 菜单/设置面/生涯页/营地/关卡画面/战斗/状态面板,现行事实源=tools/render_gate.sh)。
|
||||
# 整屏截图探针(呈现层测试分级 B 档基建:视口截图程序化产出;七屏+九态——
|
||||
# 菜单/设置面/生涯页/营地/关卡画面/战斗/状态面板+营地五窗开态/图例/战末结算/三选一/调试浮窗,
|
||||
# 现行事实源=tools/render_gate.sh;九态=golden 补锚批 2026-11-08)。
|
||||
# 必须**窗口化**运行(真渲染设备——headless 无渲染面,get_image 得到空纹理):
|
||||
# Godot_console.exe --path . res://probe/shot_probe.tscn -- <输出目录>
|
||||
# 流程 = 真实按钮信号路径驱动(ui_click_probe 同款;存档/设置/元进度三面换注隔离档——禁碰真实档,
|
||||
@@ -129,6 +130,30 @@ func _ready() -> void:
|
||||
else:
|
||||
await get_tree().process_frame
|
||||
await _snap("camp")
|
||||
# ②b 营地五窗打开态(真点热点开窗→截→「返回」前缀真点关——screen_flow_probe 窗壳链同款)
|
||||
# 判据出处: design/ux/camp.md:45 五窗统一窗壳形态·互斥单开(营地窗态组)
|
||||
for k: StringName in [&"forge", &"chest", &"dummy", &"board", &"notebook"]:
|
||||
ProbeUiUtil.push_click_at(main, main.ui.modals.camp.scene.get_hotspot_rect(k).get_center())
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
var wv: Control = main.ui.modals.camp.forge if k == &"forge" else (
|
||||
main.ui.modals.camp.treasure if k == &"chest" else (
|
||||
main.ui.modals.camp.tree if k == &"dummy" else (
|
||||
main.ui.modals.camp.codex if k == &"board" else main.ui.modals.menu.career_overlay)))
|
||||
# 截图键=基线语义名(dummy→tree 天赋树/board→codex 图鉴——热点键≠呈现名,映射单点在此)
|
||||
var wkey: String = {"forge": "forge", "chest": "chest", "dummy": "tree",
|
||||
"board": "codex", "notebook": "notebook"}[String(k)]
|
||||
if not wv.visible:
|
||||
_problems.append("营地窗未打开: %s(真点热点路径)" % String(k))
|
||||
else:
|
||||
await _snap("camp_%s" % wkey)
|
||||
var back: Button = ProbeUiUtil.find_button(wv, "返回", "prefix")
|
||||
if back == null:
|
||||
_problems.append("营地窗返回钮缺失: %s" % String(k))
|
||||
else:
|
||||
ProbeUiUtil.push_click(main, back)
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
ProbeUiUtil.push_click_at(main, main.ui.modals.camp.scene.get_hotspot_rect(&"campfire").get_center()) # 收闭改接篝火动线(营地根态无关闭钮——卡④ T5)
|
||||
await get_tree().process_frame
|
||||
ProbeUiUtil.push_click(main, main.ui.modals.menu.confirm_dialog._confirm_btn) # 二次确认离场(关层收闭——选档层随收)
|
||||
@@ -152,9 +177,14 @@ func _ready() -> void:
|
||||
# ④ 战斗(节点一——candidate_rect 命中矩形真点选路提交,ui_click_probe 同款)
|
||||
# 判据出处: design/ux/battle.md:122 B 区构建:站桩/明细带/轮次指示(战斗出图与几何锚组)
|
||||
if main.ui.modals.run.level_screen != null and main.ui.modals.run.level_screen.visible:
|
||||
# 接触带呼吸相位冻结(board_shot_probe 同款:motion_scale<1.0 ⇒ 施静态带色)——
|
||||
# golden 基线逐像素比对禁动画相位抖动;必须在进战 rebuild 前置位(rebuild/带色施用按当时相位取样)
|
||||
UiKit.motion_scale = 0.5
|
||||
ProbeUiUtil.push_click_at(main, main.ui.modals.run.level_screen.candidate_rect(0).get_center())
|
||||
for i in 10:
|
||||
await get_tree().process_frame
|
||||
# 全板淡入+涟漪完结锚定(board_shot_probe 同款 1.2s=2×余量——基线禁采动画中途帧)
|
||||
await get_tree().create_timer(1.2).timeout
|
||||
await _snap("battle")
|
||||
# 战斗屏文字框/明度带锚点(全局 rect——checker 取样坐标源;明细带锚 S1 裁后改认现行文案)
|
||||
_meta["battle_log_hint"] = ProbeUiUtil.label_rect(main.ui.battle.stage, "上轮摘要")
|
||||
@@ -190,6 +220,63 @@ func _ready() -> void:
|
||||
await get_tree().process_frame
|
||||
if main.ui.modals.run.status_panel.visible:
|
||||
_problems.append("状态面板关闭后未隐藏(继续钮路径)")
|
||||
# ⑤b 图例浮窗(战斗屏 AP 条真点开→截→close() 关——ui_click_probe 真点先例)
|
||||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:88 图例面板=模态族(图例组)
|
||||
var lgb: Button = main.ui.battle.board_zone.ap_bar._btn_legend
|
||||
if lgb == null or not lgb.visible:
|
||||
_problems.append("图例钮缺失/不可见(战斗屏 AP 条)")
|
||||
else:
|
||||
ProbeUiUtil.push_click(main, lgb)
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
if not main.ui.modals.run.legend_overlay.visible:
|
||||
_problems.append("图例层未打开(图例钮路径)")
|
||||
else:
|
||||
await _snap("legend")
|
||||
main.ui.modals.run.legend_overlay.close()
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
# ⑤c 战末结算浮层(直调 open_victory 喂真实形态摘要——ui_struct_probe 合成先例)
|
||||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:276 终局:胜利金蜡封(战末结算组)
|
||||
main.ui.modals.run.end_overlay.open_victory("胜利", "继续", Rect2(200, 200, 400, 300),
|
||||
{"gp_summary": "GP +3", "ks_summary": "击杀 2", "bonus_summary": "无伤奖励", "gp_gain": 3, "gp_total": 3})
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
if not main.ui.modals.run.end_overlay.visible:
|
||||
_problems.append("战末结算浮层未打开(open_victory 直调)")
|
||||
else:
|
||||
await _snap("battle_end")
|
||||
main.ui.modals.run.end_overlay.close()
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
# ⑤d 三选一浮层(直调 open_pick 喂真实形态卡——ui_struct_probe 合成先例)
|
||||
# 判据出处: design/gdd/systems/冒险循环/奇物.md:166 三选一呈现(三选一组)
|
||||
main.ui.modals.run.curio_overlay.open_pick("三选一", [
|
||||
{"id": "probe_heal", "text": "回血\n恢复 3 点"},
|
||||
{"id": "probe_magic", "text": "爆裂轰击\n下一击 +5"},
|
||||
{"id": "probe_pierce", "text": "穿甲\n无视护甲"},
|
||||
])
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
if not main.ui.modals.run.curio_overlay.visible:
|
||||
_problems.append("三选一浮层未打开(open_pick 直调)")
|
||||
else:
|
||||
await _snap("curio_pick")
|
||||
main.ui.modals.run.curio_overlay.visible = false
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
# ⑤e 调试浮窗(函数直调开/关——ui_struct_probe/ui_tune_probe 先例;对局中可开)
|
||||
# 判据出处: design/engineering/test-conventions.md:65 人工体验=DebugOverlay/DS_DEBUG 调试面(调试浮窗组)
|
||||
main._show_debug_overlay()
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
if not main.ui.modals.menu.debug_overlay.visible:
|
||||
_problems.append("调试浮窗未打开(_show_debug_overlay 直调)")
|
||||
else:
|
||||
await _snap("debug")
|
||||
main._close_debug_overlay()
|
||||
for i in 3:
|
||||
await get_tree().process_frame
|
||||
else:
|
||||
_problems.append("关卡画面未出现(函数直调中间态路径)")
|
||||
# ── 几何元数据落盘(shot_checker 取样坐标源) ──
|
||||
@@ -197,8 +284,10 @@ func _ready() -> void:
|
||||
if mf != null:
|
||||
mf.store_string(JSON.stringify(_meta))
|
||||
mf.close()
|
||||
# ── 最小自检:七件存在且非零字节 ──
|
||||
for s in ["menu", "settings", "career", "camp", "level", "battle", "status"]:
|
||||
# ── 最小自检:十六件存在且非零字节 ──
|
||||
for s in ["menu", "settings", "career", "camp", "level", "battle", "status",
|
||||
"camp_forge", "camp_chest", "camp_tree", "camp_codex", "camp_notebook",
|
||||
"legend", "battle_end", "curio_pick", "debug"]:
|
||||
var p := out_dir.path_join("shot_%s.png" % s)
|
||||
if not FileAccess.file_exists(p):
|
||||
_problems.append("截图缺失: %s" % p)
|
||||
|
||||
Reference in new issue
Block a user