From c5a09fd90ca4750f3dec371f104ab024ca72c066 Mon Sep 17 00:00:00 2001
From: DKChan <524912269@qq.com>
Date: Tue, 13 Oct 2026 05:41:59 +0800
Subject: [PATCH] =?UTF-8?q?refactor(=E6=94=B9=E5=90=8D=E6=89=B9):=20?=
=?UTF-8?q?=E6=9A=82=E5=81=9C=E5=B1=82/=E6=9A=82=E5=81=9C=E8=A7=92?=
=?UTF-8?q?=E6=A0=87=E2=86=92=E7=8A=B6=E6=80=81=E9=9D=A2=E6=9D=BF/?=
=?UTF-8?q?=E7=8A=B6=E6=80=81=E8=A7=92=E6=A0=87=E2=80=94=E2=80=94=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=E4=BB=A4=E5=85=A8=E9=87=8F=E6=94=B9=E5=90=8D(?=
=?UTF-8?q?=E6=96=87=E6=A1=884=E5=A4=84+=E6=A0=87=E8=AF=86=E7=AC=A6?=
=?UTF-8?q?=E5=85=A8=E5=A5=97PauseOverlay=E2=86=92StatusPanel/pause=5Fover?=
=?UTF-8?q?lay.gd=E2=86=92status=5Fpanel.gd/=E6=88=90=E5=91=98=E6=96=B9?=
=?UTF-8?q?=E6=B3=95=E6=97=8F+=E6=8E=A2=E9=92=88=E5=BF=AB=E7=85=A7?=
=?UTF-8?q?=E9=94=AE+=E6=B3=A8=E9=87=8A=E4=B8=8E=E6=8E=A2=E9=92=88?=
=?UTF-8?q?=E6=B6=88=E6=81=AF86=E5=A4=84=E6=B8=85=E9=9B=B6;=E8=A1=8C?=
=?UTF-8?q?=E4=B8=BA=E5=A5=91=E7=BA=A6=E5=9B=9B=E4=BB=B6=E9=9B=B6=E5=8A=A8?=
=?UTF-8?q?=E2=80=94=E2=80=94=E5=8F=AA=E8=AF=BBR4/=E6=A8=A1=E6=80=81?=
=?UTF-8?q?=E9=81=AE=E7=BD=A9P2=E7=94=B2/=E8=BE=93=E5=85=A5=E9=94=81R3/?=
=?UTF-8?q?=E9=9B=B6=E5=8A=A8=E6=95=88P4=E7=94=B2)+render=5Fgate=E6=88=AA?=
=?UTF-8?q?=E5=9B=BE=E9=94=AEshot=5Fpause=E2=86=92shot=5Fstatus=E5=90=8C?=
=?UTF-8?q?=E6=AD=A5+=E6=96=87=E6=A1=A3=E5=85=AD=E9=9D=A2(=E5=85=83?=
=?UTF-8?q?=E8=BF=9B=E5=BA=A6v1.19/07/=E7=94=9F=E6=B6=AF/06=E6=9D=A1/archi?=
=?UTF-8?q?tecture=20json+html;camp=E9=9B=B6=E5=91=BD=E4=B8=AD;08-Alpha?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=E6=A0=87=E5=87=86untracked=E7=A6=81=E7=A2=B0?=
=?UTF-8?q?=E7=95=99=E7=BD=AE)=E2=80=94=E2=80=94=E5=86=92=E7=83=9F938/0+ru?=
=?UTF-8?q?n=5Fall24=E5=A5=97+probe=20--click/--full+render=5Fgate?=
=?UTF-8?q?=E5=85=A8=E7=BB=BF;rg=20=E6=9A=82=E5=81=9C|pause=20game/?=
=?UTF-8?q?=E5=BD=92=E9=9B=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dev/architecture/code-architecture.html | 8 +-
.../dev/architecture/code-architecture.json | 4 +-
design/gdd/06-待办清单.md | 6 +-
design/gdd/07-体验验证清单.md | 4 +-
design/gdd/systems/跨局循环/元进度.md | 3 +-
design/gdd/systems/跨局循环/生涯.md | 4 +-
game/presentation/main.gd | 86 +++++++++----------
game/presentation/modal_stack.gd | 4 +-
game/presentation/ui_assembler.gd | 2 +-
game/presentation/views/board_zone_view.gd | 20 ++---
game/presentation/views/career_overlay.gd | 12 +--
game/presentation/views/debug_overlay.gd | 2 +-
game/presentation/views/level_map_screen.gd | 22 ++---
.../{pause_overlay.gd => status_panel.gd} | 14 +--
game/presentation/views/ui_kit.gd | 2 +-
game/smoke/shot_probe.gd | 32 +++----
game/smoke/smoke_all.gd | 18 ++--
game/smoke/ui_click_probe.gd | 66 +++++++-------
game/smoke/ui_contrast_probe.gd | 2 +-
game/smoke/ui_input_probe.gd | 42 ++++-----
game/smoke/ui_struct_probe.gd | 58 ++++++-------
game/smoke/ui_tune_probe.gd | 8 +-
tools/render_gate.sh | 4 +-
23 files changed, 212 insertions(+), 211 deletions(-)
rename game/presentation/views/{pause_overlay.gd => status_panel.gd} (92%)
diff --git a/design/dev/architecture/code-architecture.html b/design/dev/architecture/code-architecture.html
index 4986e8c3..508bdf24 100644
--- a/design/dev/architecture/code-architecture.html
+++ b/design/dev/architecture/code-architecture.html
@@ -5300,8 +5300,8 @@ OTHER DEALINGS IN THE FONT SOFTWARE.
settlement_fx_view.gd
-
- 暂停浮层 · 只读入口 · 浮层与对话框(组合根挂载) · pause_overlay.gd
+
+ 状态面板 · 只读入口 · 浮层与对话框(组合根挂载) · status_panel.gd
@@ -5310,9 +5310,9 @@ OTHER DEALINGS IN THE FONT SOFTWARE.
- 暂停浮层
+ 状态面板
只读入口
- pause_overlay.gd
+ status_panel.gd
diff --git a/design/dev/architecture/code-architecture.json b/design/dev/architecture/code-architecture.json
index c8713aea..d90646d6 100644
--- a/design/dev/architecture/code-architecture.json
+++ b/design/dev/architecture/code-architecture.json
@@ -148,7 +148,7 @@
{
"id": "pause",
"type": "frontend",
- "label": "暂停浮层",
+ "label": "状态面板",
"sublabel": "只读入口",
"pos": [
120,
@@ -158,7 +158,7 @@
152,
56
],
- "tag": "pause_overlay.gd"
+ "tag": "status_panel.gd"
},
{
"id": "settings",
diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md
index f9d2eeac..31aa1537 100644
--- a/design/gdd/06-待办清单.md
+++ b/design/gdd/06-待办清单.md
@@ -363,13 +363,13 @@
**状态**:部分收口(2026-09-21 元进度实现批再收窄;2026-09-23 换算率标定批再收窄)——**三柜台结构与 provisional 定价已落地**(属性锻造三档血+3/攻+1/甲+1、base 10 公比 150;Boss 两档 L1 5/1·L2 8/2·L3 12/3;工坊六件阈值 1/1/2/2/3/3 按总通关次数——全部读 `data/tables/meta.tres`);换算率三行已投值 6/9/1(同批,冒险条件口径实测,护甲行强条目重测履行);剩余面 = 定价数字与 Boss 两档——**已编入 Alpha 收官 M4 数值批〔未排期,2026-10-07 用户令移出迭代 18 暂不启动〕〔2026-10-06 用户令自迭代 17 卡②移出——不影响 17 在飞开发〕(2026-10-05——裁点已全裁〔2026-10-06 用户令:P1甲/P2甲/P3甲/P4甲〕待 U0:design/research/需求卡片-M4数值批-2026-10-05.md;定价数字与 Boss 两档终值 = 件④。注:本条「base 10 公比 150」文本滞后——meta.tres 现行 forge base_price=20(2026-09-22 数值设计批对齿 10→20),随件④收口时刷新)**
-#### 解锁界面与钥石呈现的交互形态(残余:暂停层只读入口)
+#### 解锁界面与钥石呈现的交互形态(残余:状态面板〔原暂停层〕只读入口)
-**现状**:视觉终稿半已兑现——营地界面视觉终稿随 M-3 迭代 9 卡⑭落码(石纹全屏底+顶栏铭牌/钥石徽+三柜台列,前置样张闸过审);功能界面(营地入口/CampOverlay 三柜台/A 区顶栏钥石余额常驻/结算屏入账明细)2026-09-21 已落地。**剩余面=局内暂停层只读入口**:现行无暂停层,局内无可暂停查看钥石与解锁态的入口。
+**现状**:视觉终稿半已兑现——营地界面视觉终稿随 M-3 迭代 9 卡⑭落码(石纹全屏底+顶栏铭牌/钥石徽+三柜台列,前置样张闸过审);功能界面(营地入口/CampOverlay 三柜台/A 区顶栏钥石余额常驻/结算屏入账明细)2026-09-21 已落地。**剩余面=局内状态面板只读入口(已随改名批换代——2026-10-13 用户令「暂停层/暂停角标」更名「状态面板/状态角标」,全标识符与文案换代、行为零变化)**:局内可只读查看钥石与解锁态的入口已交付,待实机目检。
**归属**:HUD 批(M-4,批未立项)——已随迭代 17 卡③实施
-**状态**:✅ 代码面已交付待实机目检(2026-10-06,迭代 17 卡③暂停层只读入口批——worktree g-plan2-iter17-pause 分支 iter17-pause-20261006,提交 c08a901/fc9eb1e/d44fdd5+收口笔;P1丁常驻角标/P2甲设置层同档 dim 遮罩/P3甲余额+三柜台进度/P4甲零动效直开直关全落;badge 已按 Q10 甲工厂化入 ui_kit 并同步迁营地钥石徽;机检=冒烟 788/0+run_all 17 套+四探针全绿〔含输入锁 case⑯/只读巡检/零动效契约/钥石徽对比度对〕+doc 三闸零新增;**人闸=用户实机目检** 迭代17暂停层人闸清单(已退役,git 历史可查)——过闸后本条销号;Esc 快捷通道维持本清单键盘/手柄条登记随键盘批办理)
+**状态**:✅ 代码面已交付待实机目检(2026-10-06,迭代 17 卡③暂停层只读入口批〔时名——2026-10-13 改名状态面板〕——worktree g-plan2-iter17-pause 分支 iter17-pause-20261006,提交 c08a901/fc9eb1e/d44fdd5+收口笔;P1丁常驻角标/P2甲设置层同档 dim 遮罩/P3甲余额+三柜台进度/P4甲零动效直开直关全落;badge 已按 Q10 甲工厂化入 ui_kit 并同步迁营地钥石徽;机检=冒烟 788/0+run_all 17 套+四探针全绿〔含输入锁 case⑯/只读巡检/零动效契约/钥石徽对比度对〕+doc 三闸零新增;改名批机检=冒烟 938/0+run_all 24 套+probe --click/--full+render_gate 全绿;**人闸=用户实机目检** 迭代17人闸清单(已退役,git 历史可查)——过闸后本条销号;Esc 快捷通道维持本清单键盘/手柄条登记随键盘批办理)
#### 未开格类型徽章呈现时机(2026-09-18 方向已拍板,待实施批)
**现状**:2026-09-18 用户拍板方向——未开格常显奖励类型微光(周围 8 格泛光:魔法=紫 / 穿刺=蓝 / 群伤=红 / 治疗=绿 / 其他增益=黄),让玩家能针对敌人护甲类型规划优先开哪些格。设计依据:护甲克制轴已落地(穿刺弹/魔法矢),玩家需要类型先验才能兑现克制博弈。**2026-09-22 美术圣经审阅批更新(T1 裁决:采纳彩色常显微光)**:原五色与圣经语义色条款三方冲突(紫落 300°–345° 禁入带/治疗绿违反绿零逻辑/穿刺蓝违反蓝只说己方),经用户裁决采纳微光后五组色相已重选候选——芥末黄(通用增益)/黄绿(治疗)/青(穿刺)/紫罗兰(魔法)/绯红(群伤),见 [art-bible](../art/art-bible.md) §4.2「类型微光色带」(候选值,样张批冻结);圣经 §4.6.3 呈现约束已同步为「角嵌纹样(形状)+常显微光(色彩)」双通道,类型预读呈现方案在美术侧已成文。连带裁决面:① 本方向修订[不做清单](05-不做清单.md)「未开格不显示奖励身份」裁定(owner 修订,合法);② ~~与 art-bible §4.6.3 家族类型徽章口径对齐归美术批~~——已完成(2026-09-22 美术文档修订批);③ 探宝罗盘(预读 3×3)价值被清空,效果重定归秘宝内容批;④ ~~色板与既有格面徽标/UI 用色冲突检查归样张批~~——冲突面已在色相重选时规避,样张批保留组间互辨抽测义务;⑤ 原「资源预读与推理的边界」条目并入口径(2026-09-19 用户拍板:预读边界按本条微光方案定——类型级常显;探宝罗盘重定两方案另立条目评估);⑥ 实施窗口 = 表现层升级批(会改推理信息面,切片期默认不开、保护验收读数基线)。**2026-09-30 口径校正(用户裁决)**:微光正确口径=**英雄周围 8 格内的未开格显示类型微光**(非全板常显)——本条历史文本中的「常显」为无范围复述、「魔法=紫/穿刺=蓝…」为 2026-09-18 原案旧色(已被 T1 重选五组取代,现行见 art-bible §4.2);概念权威定义已落 [HUD框架](systems/表现与支撑/HUD框架.md)「未开格类型微光」节(2026-09-30 收口批落位),本条此后只承载实施状态、不再承载定义。
diff --git a/design/gdd/07-体验验证清单.md b/design/gdd/07-体验验证清单.md
index c8ba1a61..42a1cb50 100644
--- a/design/gdd/07-体验验证清单.md
+++ b/design/gdd/07-体验验证清单.md
@@ -188,7 +188,7 @@
- **入口与开合**:主菜单「营地与系统」组出现「生涯」钮(营地钮与设置钮之间);点击开全屏页、点「返回」回主菜单(继续上局钮可见性随开合正确恢复)。
- **页呈现两类六项**:组一·冒险战绩(冒险总局数 / 通关局数〔括注「三关全通」〕 / 各关通关次数〔一行三关,关名带层号〕 / Boss 首杀〔X/3 关〕 / Boss 总击杀);组二·资源(钥石余额徽)——数值与存档实况一致(对照:玩几局后总局数含放弃与失败、三关全通才计通关)。〔原「属性锻造已购合计」「天赋树已购概览」两观测项随生涯页三投影删除摘除——2026-10-12 用户裁⑧,天赋树实装批随批〕
- **旧档载入**:v5 现役档(升级前存档)载入后生涯页正常显示,总局数/通关局数从 0 起计(终身计数域 v6 新增,缺省补零),钥石等既有进度原样。
-- **零跳转与局内零入口**:页内除「返回」外无任何前往他处的按钮;冒险进行中(战斗屏/关卡地图屏/暂停层)无生涯入口。
+- **零跳转与局内零入口**:页内除「返回」外无任何前往他处的按钮;冒险进行中(战斗屏/关卡地图屏/状态面板)无生涯入口。
- **对比度与零动效**:页文字亮墨族在深棕底上可读(机检 3 对已入 ui_contrast 闸);开页/关页无过渡动画。
- **红灯信号**:计数与实玩局数对不上(收束入账重复或漏计);旧档载入报错或计数域显示异常;页内出现购买/跳转入口;入口在局内可点。
- **结论回流**:呈现问题归生涯批后续修正(本批需求卡片 v1.2 在案);「通关局数」口径如与体感冲突=P1 甲裁决复核(三关全通才计 1,用户已裁);期二内容(历史回看/图鉴)缺位属分期计划非缺陷。
@@ -198,7 +198,7 @@
- **四柜台并排**:树淬炼柜台=主界面(脊柱两行一线一节点行板+Fork 三行双态切换钮+脉分组头);锻造工坊柜台未点亮=锁定态、点亮=展开零交互占位面板;秘宝匣柜台未点亮=锁定态、点亮=展开(工坊六行+同调装配段+Y 升级行);图鉴常开独立位;宽度不足横向滚动。
- **树购买交互**:余额不足购买钮态、行门槛/前置拦截 toast、购买后行板即时刷新(Lv/钮禁用态)。
- **刷新双入口**:树上「刷新升级」行与秘宝匣装配段 Y 升级行都能买、同账累计(树上 Lv 读数随买走)。
-- **连带面**:暂停层属性锻造段已消失(钥石+工坊+天赋树概览);生涯页两类六项(三柜台概览行已删);局内六键体感(先手首战首轮 +1AP/锋踩雷减半/守标错下轮 +AP/聚结算框 GP 即实得/散货架八折标价)。
+- **连带面**:状态面板属性锻造段已消失(钥石+工坊+天赋树概览);生涯页两类六项(三柜台概览行已删);局内六键体感(先手首战首轮 +1AP/锋踩雷减半/守标错下轮 +AP/聚结算框 GP 即实得/散货架八折标价)。
- 验证方式:用户实机目检(本批自动闸外唯一人闸)。
### ㉑ 秘宝解锁-装配正常流程体验(迭代 22 秘宝体系实现重构落地批随批登记——2026-10-12)
diff --git a/design/gdd/systems/跨局循环/元进度.md b/design/gdd/systems/跨局循环/元进度.md
index d19d01fa..da494587 100644
--- a/design/gdd/systems/跨局循环/元进度.md
+++ b/design/gdd/systems/跨局循环/元进度.md
@@ -103,7 +103,7 @@
### 解锁界面:双入口框架
-(2026-09-18 拍板)主菜单设营地独立入口(消费钥石、查看与管理永久强化);局内暂停层也可查看钥石余额与已解锁清单(只读)。钥石余额在 HUD 常驻展示。呈现 spec 已出生:[ux/camp.md](../../ux/camp.md) v1.0(2026-09-30 审计拍板点 4A 裁决落文——退役/封存件「已退役/已解锁·能力封存中」呈现语义随 spec 落位);视觉终稿已随迭代 9 9A 段落码(2026-09-30)。本节锁框架与需求,呈现细节归 spec;局内暂停层入口已实装(2026-10-06 迭代 17 卡③——实机目检待用户,06 登记条在册)。
+(2026-09-18 拍板)主菜单设营地独立入口(消费钥石、查看与管理永久强化);局内状态面板(原称暂停层,2026-10-13 改名——游戏非实时无暂停语义)也可查看钥石余额与已解锁清单(只读)。钥石余额在 HUD 常驻展示。呈现 spec 已出生:[ux/camp.md](../../ux/camp.md) v1.0(2026-09-30 审计拍板点 4A 裁决落文——退役/封存件「已退役/已解锁·能力封存中」呈现语义随 spec 落位);视觉终稿已随迭代 9 9A 段落码(2026-09-30)。本节锁框架与需求,呈现细节归 spec;局内状态面板入口已实装(2026-10-06 迭代 17 卡③〔时名暂停层〕——实机目检待用户,06 登记条在册)。
### 单局循环零依赖:排期边界的推论
@@ -163,6 +163,7 @@ MVP 不要求本系统的闭环([不做清单](../../05-不做清单.md)整体
| 版本 | 日期 | 改动 |
|---|---|---|
| v1.18 | 2026-10-13 | **迭代 23 反哺落文批(实现报告 §五,用户裁「在这里进行更新」)**:①「跨局注入」节补终态句——入战 AC 三层第一层「甲型基础 AC」= 选中甲路线行 base_ac(forge.tres 轻 10/重 12/魔法护甲 9 provisional),effective_ac 三层已随迭代 23 在役;②属性锻造段落代——「实装待办在册 06、待用户发令」过期态换代为已随迭代 23 实装入库(新表 forge.tres),并登记营地钥石入口族三写口(forge_buy_level/forge_buy_unlock/forge_select_*——buy_forge 退役后的新族,契约 9 写口唯一)。机制与数值零改动 |
+| v1.19 | 2026-10-13 | **暂停层改名批随迁(用户令:暂停层/暂停角标→状态面板/状态角标,全标识符+文案换代、行为零变化)**:「解锁界面:双入口框架」节正文名称换代+改名括注(版本历史行内旧名按历史记载保留);pause_overlay.gd→status_panel.gd(StatusPanel)。机制零改动 |
| v0.1 | 2026-09-15 | 自归档线索整合为范围草案(旧体系未单独成文) |
| v0.2 | 2026-09-17 | 代币→钥石统一拍板随批措辞清偿:资源模型裁决闭合(同一资源,渠道 = 关卡大奖励入账 + Boss 掉落),「代币记账」改名「钥石入账」。机制未动(本文仍为范围草案) |
| v0.3 | 2026-09-17 | 数值纪律收口批:正文 knob 现行值改指路存根(事实源 data/tables/*.tres 与 registry),3 处失同步修正(钥石入账 +10/关 三处改「每关固定值,行值读冒险表 keystone_per_level」) |
diff --git a/design/gdd/systems/跨局循环/生涯.md b/design/gdd/systems/跨局循环/生涯.md
index b17a3003..344aff46 100644
--- a/design/gdd/systems/跨局循环/生涯.md
+++ b/design/gdd/systems/跨局循环/生涯.md
@@ -24,7 +24,7 @@
边界三条(均为 2026-10-06 用户裁 P4 甲):
-1. **局内不放生涯入口**。冒险进行中玩家只看暂停层(迭代 17 卡③并行批——局内只读查看钥石与解锁进度);若历史回看能从局内到达,等于绕回 P-C7 退役前的形态,禁止。
+1. **局内不放生涯入口**。冒险进行中玩家只看状态面板(迭代 17 卡③并行批——局内只读查看钥石与解锁进度);若历史回看能从局内到达,等于绕回 P-C7 退役前的形态,禁止。
2. **生涯内零跳转**。不放「去营地」之类的操作引导,生涯纯只读。
3. **与 P-C7 的关系**:生涯的成立正是 P-C7 裁决的补偿面——「冒险中无回看」的已知代价由生涯承接(06 条目原文口径),本文不提议在冒险中恢复任何回看入口。
@@ -67,7 +67,7 @@
| 界面 | 管什么(现状指证) | 与生涯的边界 |
|---|---|---|
| 营地([camp UX spec](../../ux/camp.md)) | 跨局成长**操作**面(花钥石买强化 / 装配 / 点树)+ 底栏「最近冒险」条带——`camp_overlay_view.gd:431` `_rebuild_recent()` 逐局拼行(`:442`「完成/放弃/失败 · 通关 N 关 · 钥石 +N · 种子 N」,无截断上限),数据源 = `camp_shop_presenter.gd:85` 投影的同一份 `recent_summaries` | 营地不改生涯只读定位;生涯不做任何购买入口,也不放「去买」按钮。营地条带的去留是本提纲必答项——见 §五 P6 |
-| 暂停层(迭代 17 卡③,并行批开发中) | **局内**只读查看这一局进行中的钥石与解锁进度 | 暂停层看当局当前值,生涯看跨局累计与历史;局内无生涯入口(P4 甲) |
+| 状态面板(迭代 17 卡③,并行批开发中) | **局内**只读查看这一局进行中的钥石与解锁进度 | 状态面板看当局当前值,生涯看跨局累计与历史;局内无生涯入口(P4 甲) |
| 结算屏([settlement-summary UX spec](../../ux/settlement-summary.md)) | 冒险收束当下的入账明细——`main.gd:537` `_on_adventure_finished` 收束时呈现摘要与钥石明细(复用终局面账行,`battle_end_overlay.gd:118-129`) | 收束当下的呈现保留不动;生涯承接的是收束之后的任意时刻回看 |
| 帮助手册(Beta 批,未实装——教学内容归 Beta 帮助手册,`ui_assembler.gd:99` 注记) | 讲「怎么玩」 | 生涯讲「我玩过什么」。图鉴条目文案与手册是否共用内容源,接口登记归 Beta 批一并裁 |
| 图例面板(legend_overlay) | 局内符号/徽标即时解码 | 不合并——图例是局内解码面,图鉴是跨局收集面 |
diff --git a/game/presentation/main.gd b/game/presentation/main.gd
index f5cfdc84..2267c49d 100644
--- a/game/presentation/main.gd
+++ b/game/presentation/main.gd
@@ -119,7 +119,7 @@ var shop_overlay: ShopOverlay # 商店覆盖层(GP+商店房实施
var camp_overlay: CampOverlay # 营地覆盖层(元进度实现批——主菜单营地入口兑付呈现)
var settings_store # 系统级设置独立存储(迭代 8 卡④——音量/全屏/减动效)
var settings_overlay: SettingsOverlay # 设置覆盖层(迭代 8 卡④——最小设置面)
-var pause_overlay: PauseOverlay # 局内暂停层·只读(迭代 17 卡③——钥石余额+营地三柜台进度查看;登记设置层同档)
+var status_panel: StatusPanel # 局内状态面板·只读(迭代 17 卡③——钥石余额+营地三柜台进度查看;登记设置层同档)
var career_overlay: CareerOverlay # 生涯页·只读全屏页(迭代 18 卡④——跨局汇总六类九项;登记营地同档〔设置层旁、确认弹窗之前〕)
var debug_overlay: DebugOverlay # 调试浮窗(迭代 14.5 调试整合批——种子/数值调整/批量模拟/两层调试入口收一)
@@ -230,7 +230,7 @@ func _build_ui() -> void:
func() -> Variant: return settlement, func() -> Variant: return runner)
board_zone.action_requested.connect(_on_board_action)
- board_zone.pause_badge.pressed.connect(_on_pause_badge_pressed) # 暂停层入口(迭代 17 卡③——战斗屏 HUD 角标)
+ board_zone.status_badge.pressed.connect(_on_status_badge_pressed) # 状态面板入口(迭代 17 卡③——战斗屏 HUD 角标)
board_zone.debug_badge.pressed.connect(_on_debug_badge_pressed) # 调试浮窗入口(迭代 18 卡⑦ P2 甲——战斗屏 HUD 角标)
info_panel.treasure_slot_clicked.connect(_treasure_ui.on_slot_clicked) # 迭代 7 T4——两步交互第一步
board_zone.stop_pressed.connect(_on_stop_pressed)
@@ -249,7 +249,7 @@ func _build_ui() -> void:
logger.ap_per_round = int(db.action_economy.ap_per_round)
# 模态覆盖层(登记序 = 树序 = z 遮挡序:图例 < 明细回看 < 节点 < 关卡画面 < 三选一 < 终局
- # < 商店 < 营地 < 设置 < 暂停(只读) < 生涯页(只读·迭代 18 卡④) < 确认弹窗 < 调试浮窗)
+ # < 商店 < 营地 < 设置 < 状态面板(只读) < 生涯页(只读·迭代 18 卡④) < 确认弹窗 < 调试浮窗)
var overlays: Dictionary = UiAssembler.build_overlays(self, db)
legend_overlay = overlays.legend_overlay
node_overlay = overlays.node_overlay
@@ -264,18 +264,18 @@ func _build_ui() -> void:
legend_overlay.closed.connect(_on_modal_closed.bind(legend_overlay))
node_overlay.continue_pressed.connect(_on_node_continue)
level_screen.route_chosen.connect(_on_route_chosen)
- level_screen.pause_badge.pressed.connect(_on_pause_badge_pressed) # 暂停层入口(迭代 17 卡③——地图屏顶栏角标)
+ level_screen.status_badge.pressed.connect(_on_status_badge_pressed) # 状态面板入口(迭代 17 卡③——地图屏顶栏角标)
level_screen.debug_badge.pressed.connect(_on_debug_badge_pressed) # 调试浮窗入口(迭代 18 卡⑦ P2 甲——地图屏顶栏角标)
level_screen.abandon_requested.connect(_on_abandon_requested) # 放弃入口(2026-09-21 用户拍板——台账 119)
_end_overlay.continue_pressed.connect(_on_battle_end_continue)
settings_overlay = SettingsOverlay.new(settings_store) # 迭代 8 卡④——最小设置面(音量/全屏/减动效)
add_child(settings_overlay)
settings_overlay.closed.connect(_on_settings_closed)
- # 局内暂停层·只读(迭代 17 卡③——P2 甲:登记设置层同档带 dim 遮罩,确认弹窗之前;
+ # 局内状态面板·只读(迭代 17 卡③——P2 甲:登记设置层同档带 dim 遮罩,确认弹窗之前;
# 数据=组合根开层实时读 MetaProgression 访问器喂入(R4),本层零写通路)
- pause_overlay = PauseOverlay.new()
- add_child(pause_overlay)
- pause_overlay.closed.connect(_on_pause_closed)
+ status_panel = StatusPanel.new()
+ add_child(status_panel)
+ status_panel.closed.connect(_on_status_closed)
# 生涯页·只读全屏页(迭代 18 卡④——P3 甲:登记序=营地同档,设置层旁、确认弹窗之前;
# 树序同步=addChild 同位(登记序=树序=z 序纪律);数据=组合根开层实时读 SaveManager 计数
# 访问器+MetaProgression 访问器喂入,本层零写通路零跳转;入口=开始层「营地与系统」组生涯钮)
@@ -354,9 +354,9 @@ func _build_ui() -> void:
debug_overlay.debug_levels_requested.connect(_start_debug_levels)
# 模态登记(缺陷⑤纪律——登记序 = 树序:含 move_child 调位后的关卡画面/三选一终位;
- # 暂停层设置层同档、确认弹窗之前——P2 甲;生涯页同档随暂停层之后(迭代 18 卡④ P3 甲))
+ # 状态面板设置层同档、确认弹窗之前——P2 甲;生涯页同档随状态面板之后(迭代 18 卡④ P3 甲))
_modals = ModalStack.new()
- for m: Control in [legend_overlay, node_overlay, level_screen, curio_overlay, _end_overlay, shop_overlay, camp_overlay, settings_overlay, pause_overlay, career_overlay, confirm_dialog, debug_overlay]:
+ for m: Control in [legend_overlay, node_overlay, level_screen, curio_overlay, _end_overlay, shop_overlay, camp_overlay, settings_overlay, status_panel, career_overlay, confirm_dialog, debug_overlay]:
_register_modal(m)
_tune_sim = TuneSimController.new(db, debug_overlay, int(db.hero.max_hp))
@@ -387,13 +387,13 @@ func _open_modal(m: Control) -> void:
# 打开时显式隐藏树序在其上方的可见层(遮挡物隐藏),关闭恢复——单一模态栈
_flush_row_queue() # 卡⑦——任何覆盖层开启前排空排播队列(明细带恒完整,回看/停点面不缺行)
_modals.open(m)
- _sync_pause_entry() # 迭代 17 卡③——暂停层入口角标可见性/置灰随开态同步
+ _sync_status_entry() # 迭代 17 卡③——状态面板入口角标可见性/置灰随开态同步
_sync_debug_overlay() # 迭代 18 卡⑦——浮窗当局数据/按钮态随开态同步(T3 刷新=模态开合信号驱动)
func _close_modal(m: Control) -> void:
_modals.close(m)
- _sync_pause_entry() # 迭代 17 卡③——关闭恢复角标可点态(无残留——R3 同源口径)
+ _sync_status_entry() # 迭代 17 卡③——关闭恢复角标可点态(无残留——R3 同源口径)
_sync_debug_overlay() # 迭代 18 卡⑦——他层关闭复活浮窗时同步刷新(P1 甲关后自动恢复语义配套)
@@ -463,7 +463,7 @@ func _resume_from_menu() -> void:
_start_overlay.visible = false
_wire_adventure()
_level_active = true
- _sync_pause_entry() # 迭代 17 卡③——续玩恢复点亮暂停入口角标
+ _sync_status_entry() # 迭代 17 卡③——续玩恢复点亮状态面板入口角标
level_screen.set_abandon_available(true)
_reset_run_scope()
log_view.clear()
@@ -521,7 +521,7 @@ func _start_adventure() -> void:
_close_modal(debug_overlay) # 开冒险路径显式关浮窗(迭代 18 卡⑦ T2 防护——DS_DEBUG 默认开态下开局不带窗;对局中经角标再开)
_wire_adventure()
_level_active = true
- _sync_pause_entry() # 迭代 17 卡③——进对局点亮暂停入口角标
+ _sync_status_entry() # 迭代 17 卡③——进对局点亮状态面板入口角标
level_screen.set_abandon_available(true) # 放弃入口挂选路停点(天然非战斗期——2026-09-21 用户拍板)
_reset_run_scope()
log_view.clear()
@@ -605,7 +605,7 @@ func _on_adventure_finished(summary: Dictionary) -> void:
var result: String = String(summary.get("result", ""))
settlement = null
_exit_level_screen() # 终局兜底:独立屏在开态(放弃入口)也先回战斗屏呈现摘要——屏级互斥单一出口
- _sync_pause_entry() # 迭代 17 卡③——离局熄灭暂停入口角标(防菜单误现)
+ _sync_status_entry() # 迭代 17 卡③——离局熄灭状态面板入口角标(防菜单误现)
_sync_settlement_visuals() # → 全关
HudPresenter.battle_end_feedback(stage, ap_bar, false) # 灰化/idle 回正/状态全清——HUD 单通道(T3 收口批)
# 存档入账(元进度实现批):settle = Boss 两档入账 + 工坊解锁 + 摘要入档 + 写盘(唯一写档点不变——
@@ -979,7 +979,7 @@ func _enter_level_screen() -> void:
_level_screen_active = true
_battle_root.visible = false
_open_modal(level_screen)
- _sync_pause_entry() # 迭代 17 卡③——屏级互斥切换同步(_open_modal 单口不识屏级状态)
+ _sync_status_entry() # 迭代 17 卡③——屏级互斥切换同步(_open_modal 单口不识屏级状态)
func _exit_level_screen() -> void:
@@ -987,7 +987,7 @@ func _exit_level_screen() -> void:
_battle_root.visible = true
if level_screen.visible:
_close_modal(level_screen)
- _sync_pause_entry() # 迭代 17 卡③——同上
+ _sync_status_entry() # 迭代 17 卡③——同上
func _on_abandon_requested() -> void:
@@ -1016,12 +1016,12 @@ func _on_settings_closed() -> void:
_refresh_resume_button()
-# ---- 局内暂停层·只读(迭代 17 卡③——入口角标在两屏装配段〔组 B〕;开合与数据喂入归组合根)----
+# ---- 局内状态面板·只读(迭代 17 卡③——入口角标在两屏装配段〔组 B〕;开合与数据喂入归组合根)----
-# 暂停层快照投影(R4 数据只读同源:每次开层实时读 MetaProgression 访问器现值拼装——
-# 快照仅服务单次开层生命周期(open_pause 重建各行),跨开层零持有;零写调用。
-# 属性锻造三行投影已删——迭代 21 柜台退役连带〔暂停层锻造段同步删除〕)
-func _pause_data() -> Dictionary:
+# 状态面板快照投影(R4 数据只读同源:每次开层实时读 MetaProgression 访问器现值拼装——
+# 快照仅服务单次开层生命周期(open_status 重建各行),跨开层零持有;零写调用。
+# 属性锻造三行投影已删——迭代 21 柜台退役连带〔状态面板锻造段同步删除〕)
+func _status_data() -> Dictionary:
return {
"balance": meta.keystone_balance(),
"workshop": meta.treasure_shop_status(), # 迭代 22 T2——秘宝匣 12 件解锁投影(旧工坊面退役)
@@ -1030,13 +1030,13 @@ func _pause_data() -> Dictionary:
}
-func _open_pause_layer() -> void:
- _open_modal(pause_overlay) # 模态栈单口(开层前排空排播队列——既有层同款行为,目检确认项)
- pause_overlay.open_pause(_pause_data())
+func _open_status_panel() -> void:
+ _open_modal(status_panel) # 模态栈单口(开层前排空排播队列——既有层同款行为,目检确认项)
+ status_panel.open_status(_status_data())
-func _on_pause_closed() -> void:
- _close_modal(pause_overlay) # 模态栈单口
+func _on_status_closed() -> void:
+ _close_modal(status_panel) # 模态栈单口
# ---- 生涯页·只读(迭代 18 卡④——入口=开始层生涯钮;开合仿设置面先例:开始层互斥;
@@ -1055,7 +1055,7 @@ func _on_career_closed() -> void:
# 生涯页快照投影(只读同源——每次开层实时读 SaveManager 计数访问器 + MetaProgression 访问器
-# 现值拼装(暂停层 _pause_data 同构);快照仅服务单次开层生命周期,跨开层零持有;零写调用。
+# 现值拼装(状态面板 _status_data 同构);快照仅服务单次开层生命周期,跨开层零持有;零写调用。
# 账号成长态三投影已删〔forge_levels_total/workshop/tree——2026-10-12 用户裁:生涯页不统计
# 天赋树与账号成长态,只统计终身计数〕)
func _career_data() -> Dictionary:
@@ -1080,35 +1080,35 @@ func _career_data() -> Dictionary:
# 入口角标点击(两屏同款处理器):P1 守卫兜底——其他模态开着即拒开(常态防线=角标置灰,
# 探针 pressed.emit 绕过 disabled 时由此兜住;地图屏自身的登记开态不计——has_open_excluding)
-func _on_pause_badge_pressed() -> void:
+func _on_status_badge_pressed() -> void:
var map_on: bool = level_screen != null and level_screen.visible
# P1 守卫兜底——其他模态开着即拒开(常态防线=角标置灰,探针 pressed.emit 绕过 disabled 时由此兜住;
- # 地图屏自身的登记开态不计;迭代 18 卡⑦ T2——判据排除调试浮窗:对局中浮窗开着时暂停角标仍可点)
+ # 地图屏自身的登记开态不计;迭代 18 卡⑦ T2——判据排除调试浮窗:对局中浮窗开着时状态角标仍可点)
if _modals == null or (map_on and _modals.has_open_excluding_any([level_screen, debug_overlay])) \
or (not map_on and _modals.has_open_excluding(debug_overlay)):
return
- _open_pause_layer()
+ _open_status_panel()
# 入口角标可见性/置灰同步(P1 丁+守卫——单一同步点):战斗屏角标=对局内且地图屏未激活;
# 地图屏角标=随屏;置灰=登记册上除地图屏自身外任一层开着(防「看得见点不着」态)。
# 调用面=模态开合单口与屏级互斥口(凡影响开态/屏态的路径必经其一)。
-func _sync_pause_entry() -> void:
- if pause_overlay == null or _modals == null or board_zone == null or level_screen == null:
+func _sync_status_entry() -> void:
+ if status_panel == null or _modals == null or board_zone == null or level_screen == null:
return
var map_on: bool = level_screen.visible
var battle_live: bool = _level_active or settlement != null # 调试两层无 _level_active——settlement 判据补位(迭代 18 卡⑦)
- board_zone.pause_badge.visible = _level_active and not map_on
- level_screen.pause_badge.visible = map_on
+ board_zone.status_badge.visible = _level_active and not map_on
+ level_screen.status_badge.visible = map_on
# 置灰判据改排除式(迭代 18 卡⑦ T2——调试浮窗开态不计入:对局中浮窗开着时角标仍可点)
- board_zone.pause_badge.disabled = _modals.has_open_excluding(debug_overlay)
- level_screen.pause_badge.disabled = _modals.has_open_excluding_any([level_screen, debug_overlay])
- # 调试浮窗角标(迭代 18 卡⑦ P2 甲——迁宿主两屏,DS_DEBUG 门控;17卡③暂停角标同形制同守卫):
+ board_zone.status_badge.disabled = _modals.has_open_excluding(debug_overlay)
+ level_screen.status_badge.disabled = _modals.has_open_excluding_any([level_screen, debug_overlay])
+ # 调试浮窗角标(迭代 18 卡⑦ P2 甲——迁宿主两屏,DS_DEBUG 门控;17卡③状态角标同形制同守卫):
# 战斗屏=对局内(冒险或调试两层)且地图屏未激活;地图屏=随屏;开始菜单零角标(DS_DEBUG=1 启动即开)
board_zone.debug_badge.visible = _debug_entry and not map_on and battle_live
level_screen.debug_badge.visible = _debug_entry and map_on
- board_zone.debug_badge.disabled = board_zone.pause_badge.disabled
- level_screen.debug_badge.disabled = level_screen.pause_badge.disabled
+ board_zone.debug_badge.disabled = board_zone.status_badge.disabled
+ level_screen.debug_badge.disabled = level_screen.status_badge.disabled
# ---- 探针缝保缝(T4/D4 拆件——click/ui_probe 营地段直呼组合根面;实现归 camp_shop_presenter.gd)----
@@ -1303,7 +1303,7 @@ func _on_diagnose_pressed() -> void:
func _show_debug_overlay() -> void:
# 门禁改向(迭代 18 卡⑦ P2/P3 甲——对局中可开;本函数仍是唯一开窗入口 C6,门禁逻辑收函数内):
- # 旧「仅开始菜单可开」门随入口迁宿主退役——棋盘输入锁/暂停角标判据已排除浮窗(T2 防护),
+ # 旧「仅开始菜单可开」门随入口迁宿主退役——棋盘输入锁/状态角标判据已排除浮窗(T2 防护),
# 遮挡语义=P1 甲 ModalStack 登记制(他模态开时暂隐、关后自动恢复),此处零场景限制
if debug_overlay == null:
return
@@ -1311,7 +1311,7 @@ func _show_debug_overlay() -> void:
_sync_debug_overlay()
-# 调试浮窗角标点击(两屏同款处理器——17卡③暂停角标同形制守卫;C6:仍收口 _show_debug_overlay 单口)
+# 调试浮窗角标点击(两屏同款处理器——17卡③状态角标同形制守卫;C6:仍收口 _show_debug_overlay 单口)
func _on_debug_badge_pressed() -> void:
var map_on: bool = level_screen != null and level_screen.visible
if _modals == null or (map_on and _modals.has_open_excluding_any([level_screen, debug_overlay])) \
@@ -1321,7 +1321,7 @@ func _on_debug_badge_pressed() -> void:
# 浮窗上下文同步(迭代 18 卡⑦——当局数据刷新+对局中按钮禁用单点):调用面=开窗口与模态开合
-# 单口(凡影响开态/对局态的路径必经其一——与 _sync_pause_entry 同款纪律)
+# 单口(凡影响开态/对局态的路径必经其一——与 _sync_status_entry 同款纪律)
func _sync_debug_overlay() -> void:
if debug_overlay == null:
return
diff --git a/game/presentation/modal_stack.gd b/game/presentation/modal_stack.gd
index 45b8ce68..f78c48cb 100644
--- a/game/presentation/modal_stack.gd
+++ b/game/presentation/modal_stack.gd
@@ -43,14 +43,14 @@ func has_open() -> bool:
return false
-# 排除式开态查询(迭代 17 卡③ 2026-10-06——暂停层入口守卫判据):skip 层自身的开态不计入
+# 排除式开态查询(迭代 17 卡③ 2026-10-06——状态面板入口守卫判据):skip 层自身的开态不计入
#(关卡地图屏系登记册模态成员=常态屏态,其上的地图屏角标必须可点;其余任一层开着=角标置灰)。
# 只读查询零副作用——登记序/开合记账语义零改动。
func has_open_excluding(skip: Control) -> bool:
return has_open_excluding_any([skip])
-# 多排除式开态查询(迭代 18 卡⑦ T2 防护——调试浮窗对局中可开后,棋盘输入锁与暂停角标置灰
+# 多排除式开态查询(迭代 18 卡⑦ T2 防护——调试浮窗对局中可开后,棋盘输入锁与状态角标置灰
# 判据须同时排除调试浮窗自身〔否则 DS_DEBUG 默认开×遮挡复活×has_open 组合=棋盘永久锁死——
# 审计🔴 S1+ 停机点防线〕;地图屏场景=地图屏+调试浮窗双排除)。语义同 has_open_excluding,
# skip 集参数化;只读查询零副作用,登记序/开合记账语义零改动。
diff --git a/game/presentation/ui_assembler.gd b/game/presentation/ui_assembler.gd
index 9a9e08a0..d4cb9e3e 100644
--- a/game/presentation/ui_assembler.gd
+++ b/game/presentation/ui_assembler.gd
@@ -163,7 +163,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
# 迭代 18 卡⑦ P2 甲——旧右下角调试角标退役(原迭代 14.5 装配段删除):入口迁宿主两屏
#(board_zone_view.debug_badge / level_map_screen.debug_badge),DS_DEBUG 门控与可见性
- # 同步归组合根 _sync_pause_entry;开始层零调试入口(DS_DEBUG=1 会话=浮窗启动即开)
+ # 同步归组合根 _sync_status_entry;开始层零调试入口(DS_DEBUG=1 会话=浮窗启动即开)
# 右列:立绘看台 + 玩法速览牌(M2——帮助全文保留表值驱动,仅容器化;内容含地形变异段不删)
var right := VBoxContainer.new()
diff --git a/game/presentation/views/board_zone_view.gd b/game/presentation/views/board_zone_view.gd
index 1fef6e35..63ba1246 100644
--- a/game/presentation/views/board_zone_view.gd
+++ b/game/presentation/views/board_zone_view.gd
@@ -11,8 +11,8 @@ var ap_bar: ApBarView
var board_view: BoardView
var toast: ToastStack
var fx: BoardFxView
-var pause_badge: Button # 暂停层入口角标(迭代 17 卡③ P1 丁——debug 角标同形制;连接归组合根)
-var debug_badge: Button # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——DS_DEBUG 门控归组合根;暂停角标同形制)
+var status_badge: Button # 状态面板入口角标(迭代 17 卡③ P1 丁——debug 角标同形制;连接归组合根)
+var debug_badge: Button # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——DS_DEBUG 门控归组合根;状态角标同形制)
var _board_area: Control # resized 命名转发用(原 lambda 局部捕获——P1-3 转命名 2026-09-29)
signal action_requested(cell: Vector2i, kind: String)
@@ -43,22 +43,22 @@ func _init() -> void:
board_area.add_child(fx)
toast = ToastStack.new()
board_area.add_child(toast)
- # 角标对(迭代 18 卡⑦ P2 甲——调试+暂停两枚右下角常驻,HBox 并排锚角距 16px):
- # 17卡③暂停角标同形制:紧凑钮豁免宽度基准+字号降档。可见性/置灰归组合根 _sync_pause_entry
+ # 角标对(迭代 18 卡⑦ P2 甲——调试+状态两枚右下角常驻,HBox 并排锚角距 16px):
+ # 17卡③状态角标同形制:紧凑钮豁免宽度基准+字号降档。可见性/置灰归组合根 _sync_status_entry
#(DS_DEBUG 门控/其他模态开着=置灰不可点——排除式开态查询);信号连接归组合根(ADR-0001)。
# preset 在子件全部入列后调用——MINSIZE 锚按当时最小尺寸计偏移(空容器调用=零尺寸锚外溢屏边)
var corner := HBoxContainer.new()
corner.add_theme_constant_override("separation", 8)
- debug_badge = UiKit.button("调试", 0.0) # 角落小件豁免宽度基准(同暂停角标)
+ debug_badge = UiKit.button("调试", 0.0) # 角落小件豁免宽度基准(同状态角标)
debug_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
debug_badge.tooltip_text = "打开调试浮窗(当局数据/种子/数值调整)"
debug_badge.visible = false # 显式初始化——非调试会话不误现(可见性归组合根同步)
corner.add_child(debug_badge)
- pause_badge = UiKit.button("暂停", 0.0) # 角落小件豁免宽度基准(同调试角标)
- pause_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
- pause_badge.tooltip_text = "查看钥石与永久强化进度(只读)"
- pause_badge.visible = false # 显式初始化——非对局期不误现(可见性归组合根同步)
- corner.add_child(pause_badge)
+ status_badge = UiKit.button("状态", 0.0) # 角落小件豁免宽度基准(同调试角标)
+ status_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
+ status_badge.tooltip_text = "查看钥石与永久强化进度(只读)"
+ status_badge.visible = false # 显式初始化——非对局期不误现(可见性归组合根同步)
+ corner.add_child(status_badge)
# 右下角锚定(迭代 18 卡⑦):MINSIZE 预设须在入树后调用——容器出树的最小尺寸缓存陈旧为 0
#(裸 Button 无此病,容器延迟到首轮排序才重算),零尺寸锚角会使钮对悬出屏边;
# grow 向左上=后续最小尺寸变化向屏内生长。预设延迟帧尾——届时容器最小尺寸已就绪
diff --git a/game/presentation/views/career_overlay.gd b/game/presentation/views/career_overlay.gd
index ba0890d7..a405a122 100644
--- a/game/presentation/views/career_overlay.gd
+++ b/game/presentation/views/career_overlay.gd
@@ -8,9 +8,9 @@
# (页内零「前往他处」入口,仅只读展示+关闭)+局内不放生涯入口(开始覆盖层「营地与系统」组唯一入口)。
# 期二/期三内容(历史回看/图鉴/单局明细)零触碰——页内无任何期二占位件。
# 只读契约(需求卡片契约 3/4):数据快照由组合根 open_career 喂入(每次开层实时读 SaveManager
-# 计数访问器 + MetaProgression 访问器重建——暂停层 R4 同构,快照仅单次开层生命周期,跨开层
+# 计数访问器 + MetaProgression 访问器重建——状态面板 R4 同构,快照仅单次开层生命周期,跨开层
# 零持有);本类零核心访问、零写通路——唯一信号 closed(关闭意图,组合根经模态栈单口收口)。
-# 零动效(暂停层 P4 甲先例同款):直开直关,无 tween 无 AnimationPlayer。
+# 零动效(状态面板 P4 甲先例同款):直开直关,无 tween 无 AnimationPlayer。
# R1 公共件单点:全部构成件经 UiKit 工厂产出(page_shell/label/button/keystone_badge),
# 零新素材零新色值零新字体零自建样式。页壳=page_shell 暖亮底(商店同壳——主菜单页族形态)。
class_name CareerOverlay
@@ -23,7 +23,7 @@ var _cleared_label: Label # 通关局数(三关全通才计 1
var _clears_label: Label # 各关通关次数(一行三关——display_name ×次数)
var _boss_first_label: Label # Boss 首杀(已首杀关数/总关数)
var _boss_kills_label: Label # Boss 总击杀(含重复)
-var _keystone_badge: UiKit.KeystoneBadge # 钥石余额(badge 工厂件——暂停层同形制)
+var _keystone_badge: UiKit.KeystoneBadge # 钥石余额(badge 工厂件——状态面板同形制)
func _init() -> void:
@@ -34,7 +34,7 @@ func _init() -> void:
var top_sp := Control.new()
top_sp.size_flags_horizontal = Control.SIZE_EXPAND_FILL
top.add_child(top_sp)
- var close_btn := UiKit.button("返回", 90.0) # 紧凑返回钮(设置/暂停面先例形制)
+ var close_btn := UiKit.button("返回", 90.0) # 紧凑返回钮(设置/状态面板先例形制)
close_btn.tooltip_text = "关闭生涯页,返回主菜单(本页只读,不发生任何购买或修改)"
close_btn.pressed.connect(_emit_closed)
top.add_child(close_btn)
@@ -68,7 +68,7 @@ func _init() -> void:
visible = false # 显式初始化——不靠树序巧合(缺陷⑤家族纪律)
-# ---- 开层(组合根唯一调用口——快照随开随建,只读同源口径同暂停层 R4)----
+# ---- 开层(组合根唯一调用口——快照随开随建,只读同源口径同状态面板 R4)----
func open_career(data: Dictionary) -> void:
_total_label.text = "%d 局" % int(data.get("total", 0))
@@ -87,7 +87,7 @@ func _emit_closed() -> void:
closed.emit()
-# ---- 行构件(名称列 + 数值列——暂停层行族同构;数值 Label 返回供探针/冒烟投影断言)----
+# ---- 行构件(名称列 + 数值列——状态面板行族同构;数值 Label 返回供探针/冒烟投影断言)----
func _section_head(box: VBoxContainer, text: String) -> void:
box.add_child(UiKit.label(text,UiKit.FS_BODY, true, UiKit.INK_L_GOLD))
diff --git a/game/presentation/views/debug_overlay.gd b/game/presentation/views/debug_overlay.gd
index ef0fff8c..1a1b51b4 100644
--- a/game/presentation/views/debug_overlay.gd
+++ b/game/presentation/views/debug_overlay.gd
@@ -2,7 +2,7 @@
# Date: 2026-10-04(迭代 14.5 调试整合批——主菜单三散件(随机种子/角色数值调整板/两层调试入口)收一张调试浮窗,
# 原 views/tune_panel.gd 整体吸收退役)
# 开发调试浮窗:全局可开(迭代 18 卡⑦——DS_DEBUG=1 会话启动即开〔组合根 _ready〕+战斗屏 HUD/关卡地图屏
-# 两枚角标再开〔P2 甲,17卡③暂停角标同形制〕;遮挡语义=ModalStack 登记制:他模态开时暂隐、关后自动恢复;
+# 两枚角标再开〔P2 甲,17卡③状态角标同形制〕;遮挡语义=ModalStack 登记制:他模态开时暂隐、关后自动恢复;
# 旧「仅开始菜单可开」门随入口迁宿主退役)。当局数据只读区块=本局种子唯一查看位(T3,P4 甲六项)。
# 列表页形态可扩展:后续调试项按区块往下追加,超高滚动。
# 纯视图边界(规范 1.3):数值应用/批量模拟/对局启动全部经信号外发由组合根承接
diff --git a/game/presentation/views/level_map_screen.gd b/game/presentation/views/level_map_screen.gd
index 39aad110..9cbcb146 100644
--- a/game/presentation/views/level_map_screen.gd
+++ b/game/presentation/views/level_map_screen.gd
@@ -61,8 +61,8 @@ var _cand_ids: Array[int] = [] # 本停点候选 id 集(图上命
var _content_size := Vector2(620, 240) # 图内容包络(open_choices 按图拟合——画布 min 尺寸随它)
var _hover_id := -1 # 悬停预承诺候选(-1 = 无)
var abandon_btn: Button # 放弃入口(可见性归组合根 set_abandon_available——只在冒险模式开)
-var pause_badge: Button # 暂停层入口角标(迭代 17 卡③ P1 丁——顶栏 GP 徽右侧;连接归组合根)
-var debug_badge: Button # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——DS_DEBUG 门控;暂停角标同形制)
+var status_badge: Button # 状态面板入口角标(迭代 17 卡③ P1 丁——顶栏 GP 徽右侧;连接归组合根)
+var debug_badge: Button # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——DS_DEBUG 门控;状态角标同形制)
var _abandon_timer := ArmedTimer.new() # 放弃确认窗(T3/D3 P4 乙——_process 帧驱动倒计时机制收口;窗口=CONFIRM_WINDOW_S)
var _node_icons := {} # 节点图标贴图(load_tex 守卫——缺位 null → 字形回退,冒烟/无素材检出安全)
var _noise_rect: TextureRect # 屏底石纹(换层色板渐变承载面——null = 纯色回退无挂点)
@@ -114,16 +114,16 @@ func _init() -> void:
gp_box.add_child(gp_row)
_gp_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_ON_GOLD)
gp_row.add_child(_gp_value)
- # 暂停层入口角标(迭代 17 卡③ P1 丁——顶栏常驻;debug 角标同形制:紧凑钮豁免宽度基准+字号降档。
- # 置灰守卫归组合根 _sync_pause_entry(其他模态开着=不可点;本屏自身的登记开态不计——has_open_excluding);
+ # 状态面板入口角标(迭代 17 卡③ P1 丁——顶栏常驻;debug 角标同形制:紧凑钮豁免宽度基准+字号降档。
+ # 置灰守卫归组合根 _sync_status_entry(其他模态开着=不可点;本屏自身的登记开态不计——has_open_excluding);
# 信号连接归组合根(ADR-0001——视图零连接))
- pause_badge = UiKit.button("暂停", 0.0)
- pause_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
- pause_badge.tooltip_text = "查看钥石与永久强化进度(只读)"
- pause_badge.size_flags_vertical = Control.SIZE_SHRINK_CENTER
- top.add_child(pause_badge)
- # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——顶栏暂停角标右侧;17卡③同形制:紧凑钮豁免宽度基准+
- # 字号降档。可见性/置灰归组合根 _sync_pause_entry(DS_DEBUG 门控/其他模态开着=置灰——排除式
+ status_badge = UiKit.button("状态", 0.0)
+ status_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
+ status_badge.tooltip_text = "查看钥石与永久强化进度(只读)"
+ status_badge.size_flags_vertical = Control.SIZE_SHRINK_CENTER
+ top.add_child(status_badge)
+ # 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——顶栏状态角标右侧;17卡③同形制:紧凑钮豁免宽度基准+
+ # 字号降档。可见性/置灰归组合根 _sync_status_entry(DS_DEBUG 门控/其他模态开着=置灰——排除式
# 开态查询,本屏自身开态不计);信号连接归组合根(ADR-0001——视图零连接))
debug_badge = UiKit.button("调试", 0.0)
debug_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
diff --git a/game/presentation/views/pause_overlay.gd b/game/presentation/views/status_panel.gd
similarity index 92%
rename from game/presentation/views/pause_overlay.gd
rename to game/presentation/views/status_panel.gd
index 0811d7cf..abec822c 100644
--- a/game/presentation/views/pause_overlay.gd
+++ b/game/presentation/views/status_panel.gd
@@ -1,16 +1,16 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
-# 局内暂停层·只读(迭代 17 卡③ 暂停层只读入口批 2026-10-06——需求卡片 v1.1;事实源=06-待办清单
-# 「解锁界面与钥石呈现的交互形态(残余:暂停层只读入口)」)。
+# 局内状态面板·只读(迭代 17 卡③ 状态面板只读入口批 2026-10-06——需求卡片 v1.1;事实源=06-待办清单
+# 「解锁界面与钥石呈现的交互形态(残余:状态面板只读入口)」)。
# 裁决落形:P1 丁=入口为战斗屏 HUD / 关卡地图屏常驻角标(入口装配在 ui_assembler/两屏,本类不含入口);
# P2 甲=登记 modal_stack 设置层同档(确认弹窗之前)带 dim 遮罩;P3 甲=展示钥石余额+进度概览
# (道具工坊六件解锁态 / 天赋树已购概览——层内行序与分组复用营地屏同序;属性锻造三行段随
# 迭代 21 柜台退役连带删除——数据源 forge_levels 域已清退);P4 甲=进出零动效直开直关
# (无 tween 无 AnimationPlayer——R5)。
-# 只读契约:R4 数据只读同源——账面快照由组合根 open_pause 喂入(每次开层实时读 MetaProgression
+# 只读契约:R4 数据只读同源——账面快照由组合根 open_status 喂入(每次开层实时读 MetaProgression
# 访问器重建,快照仅用单次开层生命周期,跨开层零持有);本类零核心访问、零写通路——唯一信号
# closed(关闭意图,组合根经模态栈单口收口)。R1 公共件单点:全部构成件经 UiKit 工厂产出
#(modal_shell/panel_skinned/label/button/keystone_badge),零裸色值零自建样式。
-class_name PauseOverlay
+class_name StatusPanel
extends Control
signal closed
@@ -25,7 +25,7 @@ func _init() -> void:
UiKit.panel_skinned(Vector4(20, 16, 20, 16))) # 石板皮(缺位回退数据板——同设置面先例)
var box: VBoxContainer = shell.box
- var title := UiKit.label("暂停",UiKit.FS_TITLE, true, UiKit.INK_TITLE)
+ var title := UiKit.label("状态",UiKit.FS_TITLE, true, UiKit.INK_TITLE)
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
box.add_child(title)
var hint := UiKit.label("查看本局钥石与永久强化进度(只读——购买请回营地)",UiKit.FS_HINT, false, UiKit.INK_HINT)
@@ -53,7 +53,7 @@ func _init() -> void:
close_row.alignment = BoxContainer.ALIGNMENT_CENTER
box.add_child(close_row)
var close_btn := UiKit.button("继续", 90.0) # 紧凑返回钮(设置面先例形制;文案=代拍板白名单「继续」级措辞)
- close_btn.tooltip_text = "关闭暂停层,继续当前冒险(本层只读,不发生任何购买或修改)"
+ close_btn.tooltip_text = "关闭状态面板,继续当前冒险(本层只读,不发生任何购买或修改)"
close_btn.pressed.connect(_emit_closed)
close_row.add_child(close_btn)
visible = false # 显式初始化——不靠树序巧合(缺陷⑤家族纪律)
@@ -74,7 +74,7 @@ func _section_holder(box: VBoxContainer) -> VBoxContainer:
# ---- 开层(组合根唯一调用口——快照随开随建,R4 单次开层生命周期口径)----
-func open_pause(data: Dictionary) -> void:
+func open_status(data: Dictionary) -> void:
_balance_badge.set_text("钥石 %d" % int(data.get("balance", 0)))
_rebuild_workshop(data)
_rebuild_tree(data)
diff --git a/game/presentation/views/ui_kit.gd b/game/presentation/views/ui_kit.gd
index ca9c4ea1..42680f90 100644
--- a/game/presentation/views/ui_kit.gd
+++ b/game/presentation/views/ui_kit.gd
@@ -510,7 +510,7 @@ static func icon_rect(tex_path: String, px: float) -> TextureRect:
# 钥石徽(badge 工厂件——Q10 甲收编 2026-10-06:原营地顶栏钥石徽本地拼装〔camp_overlay_view〕
-# 参数化收编,消费方 = 营地覆盖层 + 暂停层钥石余额行(迭代 17 卡③)。形制 = 烛光黄底+木色描边
+# 参数化收编,消费方 = 营地覆盖层 + 状态面板钥石余额行(迭代 17 卡③)。形制 = 烛光黄底+木色描边
# +钥石图标(icon_rect 守卫装载,缺位=纯文本回退)+深墨字;零新素材零新色值——值全取现行 token)
class KeystoneBadge:
extends PanelContainer
diff --git a/game/smoke/shot_probe.gd b/game/smoke/shot_probe.gd
index 83a646c4..b113902b 100644
--- a/game/smoke/shot_probe.gd
+++ b/game/smoke/shot_probe.gd
@@ -1,12 +1,12 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# 整屏截图探针(迭代 9 卡⑰a 2026-09-30——呈现层测试分级 B 档基建:视口截图程序化产出;
-# 迭代 19 卡① T1 2026-10-08 扩屏四屏→七屏——新纳 设置面/生涯页/暂停层,正主=tools/render_gate.sh)。
+# 迭代 19 卡① T1 2026-10-08 扩屏四屏→七屏——新纳 设置面/生涯页/状态面板,正主=tools/render_gate.sh)。
# 必须**窗口化**运行(真渲染设备——headless 无渲染面,get_image 得到空纹理):
# Godot_console.exe --path . res://smoke/shot_probe.tscn -- <输出目录>
# 流程 = 真实按钮信号路径驱动(ui_click_probe 同款;存档/设置/元进度三面换注隔离档——禁碰真实档,
# 坑册「断点写盘随 save_manager 引用走」教训同款覆盖):菜单(启动态)→ 设置面(settingsbtn
# 真实信号路径)→ 生涯页(careerbtn 同款)→ 营地(campbtn)→ 关卡画面(lvbtn→停点出图)→
-# 战斗(level_screen.press_candidate(0) 真实选路提交)→ 暂停层(地图屏暂停角标真实信号路径)。
+# 战斗(level_screen.press_candidate(0) 真实选路提交)→ 状态面板(地图屏状态角标真实信号路径)。
# 每屏双帧 + frame_post_draw 同步后抓 get_viewport().get_texture(),PNG 落输出目录;
# 最小自检 = 七件存在且非零字节(像素方差断言归 tools/shot_checker.py——B 档骨架分工)。
# 商店房注记(迭代 19 卡① T1 考证结论,代拍板白名单授权):真实路径必经 L1 打穿→L2 商店节点
@@ -134,27 +134,27 @@ func _ready() -> void:
var dc := int(Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME))
_meta["battle_draw_calls"] = dc
print("[shot_probe] battle draw_calls=%d(基线 270/目标 <200)" % dc)
- # ⑤ 暂停层(迭代 19 卡① T1 扩屏——战斗屏暂停角标真实信号路径;层在战斗屏之上开合)
- var pb: Button = main.board_zone.pause_badge
+ # ⑤ 状态面板(迭代 19 卡① T1 扩屏——战斗屏状态角标真实信号路径;层在战斗屏之上开合)
+ var pb: Button = main.board_zone.status_badge
if pb == null or not pb.visible or pb.disabled:
- _problems.append("暂停入口角标缺失/置灰(战斗屏 board_zone)")
+ _problems.append("状态面板入口角标缺失/置灰(战斗屏 board_zone)")
else:
pb.pressed.emit()
for i in 3:
await get_tree().process_frame
- if not main.pause_overlay.visible:
- _problems.append("暂停层未打开(角标路径)")
+ if not main.status_panel.visible:
+ _problems.append("状态面板未打开(角标路径)")
else:
- _meta["pause_title"] = ProbeUiUtil.label_rect(main.pause_overlay, "暂停")
- await _snap("pause")
- var pause_close: Button = ProbeUiUtil.find_button(main.pause_overlay, "继续", "prefix")
- if pause_close == null:
- _problems.append("暂停层继续钮缺失")
+ _meta["status_title"] = ProbeUiUtil.label_rect(main.status_panel, "状态")
+ await _snap("status")
+ var status_close: Button = ProbeUiUtil.find_button(main.status_panel, "继续", "prefix")
+ if status_close == null:
+ _problems.append("状态面板继续钮缺失")
else:
- pause_close.pressed.emit()
+ status_close.pressed.emit()
await get_tree().process_frame
- if main.pause_overlay.visible:
- _problems.append("暂停层关闭后未隐藏(继续钮路径)")
+ if main.status_panel.visible:
+ _problems.append("状态面板关闭后未隐藏(继续钮路径)")
else:
_problems.append("关卡画面未出现(lvbtn 路径)")
# ── 几何元数据落盘(shot_checker 取样坐标源) ──
@@ -163,7 +163,7 @@ func _ready() -> void:
mf.store_string(JSON.stringify(_meta))
mf.close()
# ── 最小自检:七件存在且非零字节(迭代 19 卡① T1 扩屏后口径) ──
- for s in ["menu", "settings", "career", "camp", "level", "battle", "pause"]:
+ for s in ["menu", "settings", "career", "camp", "level", "battle", "status"]:
var p := out_dir.path_join("shot_%s.png" % s)
if not FileAccess.file_exists(p):
_problems.append("截图缺失: %s" % p)
diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd
index b3bfa71d..f59bb110 100644
--- a/game/smoke/smoke_all.gd
+++ b/game/smoke/smoke_all.gd
@@ -4412,7 +4412,7 @@ func _smoke_meta() -> void:
_meta_settle_and_workshop()
_meta_injection()
_smoke_forge_axes()
- _pause_overlay_projection()
+ _status_panel_projection()
_career_overlay_projection()
@@ -4572,11 +4572,11 @@ func _smoke_forge_axes() -> void:
"树零攻防来源复核(12 行 effects 键集无 atk/armor_class——契约 1)〔锻造工坊批 V10〕")
-# ---- 暂停层只读投影一致性(迭代 17 卡③——R4 数据只读同源:暂停层展示值逐项 == MetaProgression
-# 访问器读数;投影拼装与 main._pause_data 同构(同访问器族同序)。只读性连接巡检与零动效
+# ---- 状态面板只读投影一致性(迭代 17 卡③——R4 数据只读同源:状态面板展示值逐项 == MetaProgression
+# 访问器读数;投影拼装与 main._status_data 同构(同访问器族同序)。只读性连接巡检与零动效
# 断言归 ui_struct_probe 呈现侧,本段只管数据面)----
-func _pause_overlay_projection() -> void:
- print("--- 暂停层·只读投影一致性(隔离档 smoke_meta_buy 复用)---")
+func _status_panel_projection() -> void:
+ print("--- 状态面板·只读投影一致性(隔离档 smoke_meta_buy 复用)---")
_meta_smoke_cleanup()
var sv = _meta_new_save(_META_SMOKE_PATHS[0])
var mp = load("res://core/meta_progression.gd").new(_db, sv)
@@ -4584,12 +4584,12 @@ func _pause_overlay_projection() -> void:
sv.add_keystone(37)
sv.unlock_item("morning_order")
sv.write_to_disk()
- # 投影拼装(main._pause_data 同构)+ 视图喂入
+ # 投影拼装(main._status_data 同构)+ 视图喂入
var data := {"balance": mp.keystone_balance(), "workshop": mp.treasure_shop_status(),
"tree": mp.tree_camp_rows(), "fork_groups": mp.tree_fork_groups()}
- var po = load("res://presentation/views/pause_overlay.gd").new()
- po.open_pause(data)
- check(po.visible, "暂停层开层可见(open_pause 直开——P4 甲零动效路径)")
+ var po = load("res://presentation/views/status_panel.gd").new()
+ po.open_status(data)
+ check(po.visible, "状态面板开层可见(open_status 直开——P4 甲零动效路径)")
check(String(po._balance_badge.value_label.text) == "钥石 %d" % mp.keystone_balance(),
"余额徽投影 = keystone_balance() 读数(%s)" % po._balance_badge.value_label.text)
var ws: Array = mp.treasure_shop_status()
diff --git a/game/smoke/ui_click_probe.gd b/game/smoke/ui_click_probe.gd
index a4cd9149..25631a2b 100644
--- a/game/smoke/ui_click_probe.gd
+++ b/game/smoke/ui_click_probe.gd
@@ -27,8 +27,8 @@ var _tested_review := false
var _tested_end_review := false # 迭代 6 T7——终局面板回看入口(z 序修复回归)
var _tested_refresh_chain := false
var _tested_tooltip := false
-var _tested_pause := false # 迭代 17 卡③——暂停层角标开合/守卫断言(每 run 一次)
-var _tested_map_pause := false # 迭代 17 卡③——地图屏角标一次性 case(选路态零扰动)
+var _tested_status := false # 迭代 17 卡③——状态面板角标开合/守卫断言(每 run 一次)
+var _tested_map_status := false # 迭代 17 卡③——地图屏角标一次性 case(选路态零扰动)
var _inter_confirms := 0 # 大奖励屏确认计数(冒险推进停点——首见确认推进 L2,再见 = L2 通关收口)
var _settlement_confirms := 0 # 卡⑥ 胜利结算框确认计数(观测面——每场普通战斗胜利恰一)
var _route_clicks := 0 # 选路覆盖层点击计数(岔路使用率观测面)
@@ -286,22 +286,22 @@ func _ready() -> void:
continue
if main.level_screen.visible:
# 节点图选路口(零自动推进停点)——图上命中路径交替选候选(岔路使用行为;布局决策 2 改造)
- # 迭代 17 卡③——地图屏角标一次性 case:选路前经角标开/关暂停层(层在地图屏之上开合,
+ # 迭代 17 卡③——地图屏角标一次性 case:选路前经角标开/关状态面板(层在地图屏之上开合,
# 关闭后地图屏选路态零扰动——P2 甲层级语义)
- if not _tested_map_pause and not main.pause_overlay.visible:
- _tested_map_pause = true
- var mpb: Button = main.level_screen.pause_badge
+ if not _tested_map_status and not main.status_panel.visible:
+ _tested_map_status = true
+ var mpb: Button = main.level_screen.status_badge
if mpb == null or not mpb.visible or mpb.disabled:
- _problems.append("地图屏暂停角标缺失/未点亮/被置灰(P1 丁)")
+ _problems.append("地图屏状态角标缺失/未点亮/被置灰(P1 丁)")
else:
mpb.pressed.emit()
- if not main.pause_overlay.visible or not main.level_screen.visible:
- _problems.append("地图屏角标开暂停层失败或地图屏被误藏(P2 甲层级失守)")
- var rbtn2: Button = ProbeUiUtil.find_button(main.pause_overlay, "继续", "prefix")
+ if not main.status_panel.visible or not main.level_screen.visible:
+ _problems.append("地图屏角标开状态面板失败或地图屏被误藏(P2 甲层级失守)")
+ var rbtn2: Button = ProbeUiUtil.find_button(main.status_panel, "继续", "prefix")
if rbtn2 != null:
rbtn2.pressed.emit()
- if main.pause_overlay.visible or not main.level_screen.visible:
- _problems.append("暂停层关闭后地图屏态失守(恢复语义破)")
+ if main.status_panel.visible or not main.level_screen.visible:
+ _problems.append("状态面板关闭后地图屏态失守(恢复语义破)")
main.level_screen.press_candidate(_route_clicks % 2)
_route_clicks += 1
_flags_placed.clear()
@@ -559,38 +559,38 @@ func _run_modal_probes_once() -> void:
if main.legend_overlay.is_open() or main._input_locked():
_problems.append("图例关闭后未恢复输入/可见性")
# ②/②b 明细回看模态探针退役(M9/P-C7——冒险中回看归「生涯」,06 登记)
- # ⑤ 暂停层(迭代 17 卡③——P1 丁角标真实信号路径 + P2 甲模态语义 + P1 守卫 + R3 锁恢复):
+ # ⑤ 状态面板(迭代 17 卡③——P1 丁角标真实信号路径 + P2 甲模态语义 + P1 守卫 + R3 锁恢复):
# 角标打开 → 只读层可见+输入锁定+余额徽非空 → 「继续」关闭恢复;图例开着 → 角标置灰且点击被守卫兜住
- if not _tested_pause and not main.legend_overlay.is_open() and not main.pause_overlay.visible:
- _tested_pause = true
- var pbtn: Button = main.board_zone.pause_badge
+ if not _tested_status and not main.legend_overlay.is_open() and not main.status_panel.visible:
+ _tested_status = true
+ var pbtn: Button = main.board_zone.status_badge
if pbtn == null or not pbtn.visible or pbtn.disabled:
- _problems.append("战斗屏暂停角标缺失/未点亮/被置灰(P1 丁入口失守 visible=%s disabled=%s)"
+ _problems.append("战斗屏状态角标缺失/未点亮/被置灰(P1 丁入口失守 visible=%s disabled=%s)"
% [str(pbtn != null and pbtn.visible), str(pbtn != null and pbtn.disabled)])
else:
- pbtn.pressed.emit() # 真实按钮信号路径 → 组合根 _on_pause_badge_pressed
- if not main.pause_overlay.visible:
- _problems.append("暂停层未随角标打开(组合根接线失守)")
+ pbtn.pressed.emit() # 真实按钮信号路径 → 组合根 _on_status_badge_pressed
+ if not main.status_panel.visible:
+ _problems.append("状态面板未随角标打开(组合根接线失守)")
if not main._input_locked():
- _problems.append("暂停层打开时输入未锁定(R3)")
- var bal_txt: String = main.pause_overlay._balance_badge.value_label.text
+ _problems.append("状态面板打开时输入未锁定(R3)")
+ var bal_txt: String = main.status_panel._balance_badge.value_label.text
if not bal_txt.begins_with("钥石 "):
- _problems.append("暂停层余额徽投影缺失(%s)" % bal_txt)
- var resume_btn: Button = ProbeUiUtil.find_button(main.pause_overlay, "继续", "prefix")
+ _problems.append("状态面板余额徽投影缺失(%s)" % bal_txt)
+ var resume_btn: Button = ProbeUiUtil.find_button(main.status_panel, "继续", "prefix")
if resume_btn == null:
- _problems.append("暂停层关闭钮缺失(「继续」)")
+ _problems.append("状态面板关闭钮缺失(「继续」)")
else:
resume_btn.pressed.emit()
- if main.pause_overlay.visible or main._input_locked():
- _problems.append("暂停层关闭后未恢复(visible=%s locked=%s——R3 残留)"
- % [str(main.pause_overlay.visible), str(main._input_locked())])
+ if main.status_panel.visible or main._input_locked():
+ _problems.append("状态面板关闭后未恢复(visible=%s locked=%s——R3 残留)"
+ % [str(main.status_panel.visible), str(main._input_locked())])
# P1 守卫:图例开着 → 两处入口角标置灰;置灰态点击被处理器兜住(探针 emit 绕过 disabled)
main.ap_bar._btn_legend.pressed.emit()
- if not main.board_zone.pause_badge.disabled:
- _problems.append("图例开着时战斗屏暂停角标未置灰(P1 守卫失守)")
- main.board_zone.pause_badge.pressed.emit()
- if main.pause_overlay.visible:
- _problems.append("置灰态仍可开暂停层(守卫兜底失守)")
+ if not main.board_zone.status_badge.disabled:
+ _problems.append("图例开着时战斗屏状态角标未置灰(P1 守卫失守)")
+ main.board_zone.status_badge.pressed.emit()
+ if main.status_panel.visible:
+ _problems.append("置灰态仍可开状态面板(守卫兜底失守)")
main.legend_overlay.close()
# ③ tooltip(状态效果槽悬停——来源+语义+剩余):有槽可见时触发
if not _tested_tooltip:
diff --git a/game/smoke/ui_contrast_probe.gd b/game/smoke/ui_contrast_probe.gd
index f40b6a68..117bd05b 100644
--- a/game/smoke/ui_contrast_probe.gd
+++ b/game/smoke/ui_contrast_probe.gd
@@ -28,7 +28,7 @@ func _pairs() -> Array:
["锚·正文墨/数据板", UiKit.INK, UiKit.PANEL_DATA, 1.0], # 全站锚点:正文墨对数据板
["锚·暖白/屏根", UiKit.WARM, UiKit.BG_ROOT, 1.0], # 全站锚点:暗底正文
["锚·暖白弱/舞台底", UiKit.WARM_FAINT, UiKit.STAGE_BG, 1.0], # 全站锚点:B区辅助墨
- ["钥石徽·深墨/烛光黄", UiKit.INK_ON_GOLD, UiKit.CANDLE, 1.0], # 迭代17卡③——badge 工厂件文字(营地徽+暂停层余额行同形制)
+ ["钥石徽·深墨/烛光黄", UiKit.INK_ON_GOLD, UiKit.CANDLE, 1.0], # 迭代17卡③——badge 工厂件文字(营地徽+状态面板余额行同形制)
["生涯页·行名墨/暖亮页底", UiKit.WARM, UiKit.BG_BRIGHT, 1.0], # 迭代18卡④——生涯页行名列/提示文(WARM_SOFT 同族亮墨)
["生涯页·行值墨/暖亮页底", UiKit.CANDLE, UiKit.BG_BRIGHT, 1.0], # 迭代18卡④——生涯页数值列(烛光黄 bold)
["生涯页·组帽墨/暖亮页底", UiKit.INK_L_GOLD, UiKit.BG_BRIGHT, 1.0],# 迭代18卡④——生涯页分组小节头(金亮 bold)
diff --git a/game/smoke/ui_input_probe.gd b/game/smoke/ui_input_probe.gd
index cba6f874..3876cb81 100644
--- a/game/smoke/ui_input_probe.gd
+++ b/game/smoke/ui_input_probe.gd
@@ -439,17 +439,17 @@ func _ready() -> void:
if int(bv.cells_probe()[ring_cell].fog_state) == 0:
_problems.append("case⑮ 卸装后 dist==R+1 格未复原遮蔽")
main.save_manager.set_attunement_equipped([])
- # ---- case⑯ 暂停层输入锁语义(迭代 17 卡③ R3——开层锁棋盘、关层恢复无残留;真实 push_input
- # 路径:入口角标本体 press+release 真点击 → 暂停层开;锁期挖掘点击零穿透;「继续」关层后
+ # ---- case⑯ 状态面板输入锁语义(迭代 17 卡③ R3——开层锁棋盘、关层恢复无残留;真实 push_input
+ # 路径:入口角标本体 press+release 真点击 → 状态面板开;锁期挖掘点击零穿透;「继续」关层后
# 同格挖掘重新到达——锁语义与既有模态同款,无状态残留。置于全 case 之尾:取格若需前沿移位
#(真实点击 move 扩大可挖域),其板面扰动不再波及任何既有断言——域恰 2 枚时 flag_t 带旗+
# dig_t 揭开后域内零无旗格,正是首跑实测踩中的形态)----
- var pause_dig := Vector2i(-9, -9)
+ var status_dig := Vector2i(-9, -9)
for c in bv.diggable_probe():
if not ms.has_flag(c):
- pause_dig = c
+ status_dig = c
break
- if pause_dig.x == -9:
+ if status_dig.x == -9:
var mv16 := _pick_frontier(bv, ms)
if mv16.x == -9:
_problems.append("case⑯ 板面无可迫近边界(锁断言取格中断)")
@@ -459,41 +459,41 @@ func _ready() -> void:
await get_tree().process_frame
for c in bv.diggable_probe():
if not ms.has_flag(c):
- pause_dig = c
+ status_dig = c
break
- if pause_dig.x == -9:
+ if status_dig.x == -9:
_problems.append("case⑯ 无可挖无旗格(板面异常——锁断言中断)")
else:
- var pbtn16: Button = main.board_zone.pause_badge
+ var pbtn16: Button = main.board_zone.status_badge
var bpos: Vector2 = pbtn16.get_global_rect().get_center()
_push_click(bpos, MOUSE_BUTTON_LEFT)
_push_release(bpos, MOUSE_BUTTON_LEFT) # Button pressed 信号走 release 沿——按压+释放成对
await get_tree().process_frame
- if not main.pause_overlay.visible or not main._input_locked():
- _problems.append("case⑯ 角标真点击未开暂停层(visible=%s locked=%s——入口可达性失守)"
- % [str(main.pause_overlay.visible), str(main._input_locked())])
+ if not main.status_panel.visible or not main._input_locked():
+ _problems.append("case⑯ 角标真点击未开状态面板(visible=%s locked=%s——入口可达性失守)"
+ % [str(main.status_panel.visible), str(main._input_locked())])
else:
- _push_click(_pos(bv, pause_dig), MOUSE_BUTTON_LEFT)
+ _push_click(_pos(bv, status_dig), MOUSE_BUTTON_LEFT)
await get_tree().process_frame
await get_tree().process_frame
- if _has_action(pause_dig, "dig") or ms.is_revealed(pause_dig):
- _problems.append("case⑯ 暂停层开启时挖掘穿透(R3 输入锁破——目标=%s)" % pause_dig)
- var resume_btn: Button = ProbeUiUtil.find_button(main.pause_overlay, "继续", "prefix")
+ if _has_action(status_dig, "dig") or ms.is_revealed(status_dig):
+ _problems.append("case⑯ 状态面板开启时挖掘穿透(R3 输入锁破——目标=%s)" % status_dig)
+ var resume_btn: Button = ProbeUiUtil.find_button(main.status_panel, "继续", "prefix")
if resume_btn == null:
- _problems.append("case⑯ 暂停层关闭钮缺失")
+ _problems.append("case⑯ 状态面板关闭钮缺失")
else:
resume_btn.pressed.emit()
await get_tree().process_frame
- if main.pause_overlay.visible or main._input_locked():
+ if main.status_panel.visible or main._input_locked():
_problems.append("case⑯ 关闭后未恢复(visible=%s locked=%s——R3 残留)"
- % [str(main.pause_overlay.visible), str(main._input_locked())])
- _push_click(_pos(bv, pause_dig), MOUSE_BUTTON_LEFT)
+ % [str(main.status_panel.visible), str(main._input_locked())])
+ _push_click(_pos(bv, status_dig), MOUSE_BUTTON_LEFT)
await get_tree().process_frame
await get_tree().process_frame
- if not _has_action(pause_dig, "dig") or not ms.is_revealed(pause_dig):
+ if not _has_action(status_dig, "dig") or not ms.is_revealed(status_dig):
_problems.append("case⑯ 关闭后挖掘未到达(恢复无残留验证失守)")
if _problems.is_empty():
- print("[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/flag_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标/视野迷雾/暂停层输入锁 十七断言全绿(真实 push_input 路径——⑫图上命中⑬画布拟合 2026-09-28 增,⑭变异角标 2026-09-29 增,④b 旗纹理槽回归 2026-10-02 增,⑮视野迷雾 2026-10-03 增〔+提灯接线断言 2026-10-05 迭代14⑤〕,⑯暂停层输入锁 2026-10-06 迭代17卡③增)")
+ print("[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/flag_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标/视野迷雾/状态面板输入锁 十七断言全绿(真实 push_input 路径——⑫图上命中⑬画布拟合 2026-09-28 增,⑭变异角标 2026-09-29 增,④b 旗纹理槽回归 2026-10-02 增,⑮视野迷雾 2026-10-03 增〔+提灯接线断言 2026-10-05 迭代14⑤〕,⑯状态面板输入锁 2026-10-06 迭代17卡③增)")
get_tree().quit(0)
else:
for p in _problems:
diff --git a/game/smoke/ui_struct_probe.gd b/game/smoke/ui_struct_probe.gd
index cd4daa84..e2e479e2 100644
--- a/game/smoke/ui_struct_probe.gd
+++ b/game/smoke/ui_struct_probe.gd
@@ -94,19 +94,19 @@ func _ready() -> void:
_settle(6)
_audit("battle_hud", [main.board_zone, main.info_panel, main.stage])
_standeefit_contract(main)
- # ---- 暂停层(迭代 17 卡③):组合根真实路径开层→结构断言→关闭。附只读性契约
+ # ---- 状态面板(迭代 17 卡③):组合根真实路径开层→结构断言→关闭。附只读性契约
#(R4——子树信号连接白名单巡检)与零动效契约(R5/P4 甲——零 AnimationPlayer/零 tween)。
# 巡检信号名清单=子树全控件的 get_signal_list() 全集(不放行任何未列名信号——新连接
- # 一律红,须先入册审查);白名单={视图自身 _emit_closed, 组合根 _on_pause_closed}。
- main._open_pause_layer()
+ # 一律红,须先入册审查);白名单={视图自身 _emit_closed, 组合根 _on_status_closed}。
+ main._open_status_panel()
_settle()
- await _audit("pause", [main.pause_overlay])
- _pause_readonly_contract(main)
- _pause_zero_motion_contract(main)
- main._on_pause_closed()
+ await _audit("status", [main.status_panel])
+ _status_readonly_contract(main)
+ _status_zero_motion_contract(main)
+ main._on_status_closed()
_settle()
- if main.pause_overlay.visible:
- problems.append("[pause] 关闭后层未隐藏(模态栈单口失守)")
+ if main.status_panel.visible:
+ problems.append("[status] 关闭后层未隐藏(模态栈单口失守)")
# ---- 图例层(迭代 19 卡②——两枚从未过结构族的旧模态之一):ap_bar legend_toggled
# 信号真路径开(board_zone 信号→组合根 _on_legend_toggled→_open_modal)→结构断言族→
@@ -226,7 +226,7 @@ func _pick_battle_node(main: Node) -> int:
return -1
-# ⑧pause 只读性契约(迭代 17 卡③ R4):暂停层子树全控件 × 游戏语义信号连接巡检——清单外零连接。
+# ⑧status 只读性契约(迭代 17 卡③ R4):状态面板子树全控件 × 游戏语义信号连接巡检——清单外零连接。
# 巡检信号名清单(需求卡片 v1.1「巡检信号名清单落码时列全进探针」)= 玩家交互可携带写意图的通道
# 全集(按钮按下/拨杆/文本/滑值/选项/键盘焦点)+ 本层外发信号 closed;引擎内部布局生命线信号
# 不计(child_order_changed/item_rect_changed/visibility_changed/size_flags_changed/
@@ -240,8 +240,8 @@ const _PAUSE_READONLY_SIGNALS: Array[String] = [
]
-func _pause_readonly_contract(main: Node) -> void:
- var overlay: Control = main.pause_overlay
+func _status_readonly_contract(main: Node) -> void:
+ var overlay: Control = main.status_panel
var stack: Array = [overlay]
var conn_count := 0
while not stack.is_empty():
@@ -254,36 +254,36 @@ func _pause_readonly_contract(main: Node) -> void:
var m := String(cb.get_method())
if host == overlay and m == "_emit_closed":
continue
- if host == main and m == "_on_pause_closed":
+ if host == main and m == "_on_status_closed":
continue
- problems.append("[pause][readonly] 非法信号连接 %s.%s → %s.%s(零写通路巡检——白名单=视图 _emit_closed/组合根 _on_pause_closed)"
+ problems.append("[status][readonly] 非法信号连接 %s.%s → %s.%s(零写通路巡检——白名单=视图 _emit_closed/组合根 _on_status_closed)"
% [n.name, sig_name, host, m])
for ch in n.get_children():
stack.append(ch)
if conn_count != 2:
- problems.append("[pause][readonly] 信号连接数=%d 应=2(关闭钮 pressed+closed 外发——多连接=写通路嫌疑)" % conn_count)
+ problems.append("[status][readonly] 信号连接数=%d 应=2(关闭钮 pressed+closed 外发——多连接=写通路嫌疑)" % conn_count)
-# ⑨pause 零动效契约(迭代 17 卡③ R5/P4 甲——零动效直开直关路径存在断言):
+# ⑨status 零动效契约(迭代 17 卡③ R5/P4 甲——零动效直开直关路径存在断言):
# 子树零 AnimationPlayer + 视图源码零 tween/动效包装调用(源码 token 扫描=ui_contrast 静态段同手法)
-func _pause_zero_motion_contract(main: Node) -> void:
- var overlay: Control = main.pause_overlay
+func _status_zero_motion_contract(main: Node) -> void:
+ var overlay: Control = main.status_panel
var stack: Array = [overlay]
while not stack.is_empty():
var n: Node = stack.pop_back()
if n is AnimationPlayer:
- problems.append("[pause][motion] 子树含 AnimationPlayer(R5 零动效破)")
+ problems.append("[status][motion] 子树含 AnimationPlayer(R5 零动效破)")
for ch in n.get_children():
stack.append(ch)
- var src := FileAccess.get_file_as_string("res://presentation/views/pause_overlay.gd")
+ var src := FileAccess.get_file_as_string("res://presentation/views/status_panel.gd")
for token in ["create_tween", "UiKit.motion"]:
if src.contains(token):
- problems.append("[pause][motion] 视图源码含「%s」(R5 零动效直开直关破——P4 甲)" % token)
+ problems.append("[status][motion] 视图源码含「%s」(R5 零动效直开直关破——P4 甲)" % token)
# ---- 生涯页契约族(迭代 18 卡④——需求卡片契约 3/4+提纲 P3/P4 甲)----
-# ⑩career 只读性契约(契约 3——暂停层 ⑧ 同形制):生涯页子树全控件 × 游戏语义信号连接巡检——
+# ⑩career 只读性契约(契约 3——状态面板 ⑧ 同形制):生涯页子树全控件 × 游戏语义信号连接巡检——
# 清单外零连接。白名单={视图自身 _emit_closed〔返回钮〕, 组合根 _on_career_closed};页内任何
# 购买/导航/写入方向的新连接一律红,须先入册审查。
func _career_readonly_contract(main: Node) -> void:
@@ -310,7 +310,7 @@ func _career_readonly_contract(main: Node) -> void:
problems.append("[career][readonly] 信号连接数=%d 应=2(返回钮 pressed+closed 外发——多连接=写通路嫌疑)" % conn_count)
-# ⑪career 零动效契约(暂停层 ⑨ 同形制——P4 甲直开直关)
+# ⑪career 零动效契约(状态面板 ⑨ 同形制——P4 甲直开直关)
func _career_zero_motion_contract(main: Node) -> void:
var overlay: Control = main.career_overlay
var stack: Array = [overlay]
@@ -326,21 +326,21 @@ func _career_zero_motion_contract(main: Node) -> void:
problems.append("[career][motion] 视图源码含「%s」(零动效直开直关破)" % token)
-# ⑫career 登记/树序契约(P3 甲——登记序=营地同档:暂停层之后、确认弹窗之前;树序同步=addChild
+# ⑫career 登记/树序契约(P3 甲——登记序=营地同档:状态面板之后、确认弹窗之前;树序同步=addChild
# 同位。登记序=树序=z 序纪律〔缺陷⑤〕——两序任一失守即红)
func _career_registry_contract(main: Node) -> void:
var list: Array = main._modals._list
var ci: int = list.find(main.career_overlay)
- var pi: int = list.find(main.pause_overlay)
+ var pi: int = list.find(main.status_panel)
var fi: int = list.find(main.confirm_dialog)
if ci < 0 or pi < 0 or fi < 0:
- problems.append("[career][registry] 生涯页未入登记册(或暂停层/确认弹窗缺登记)")
+ problems.append("[career][registry] 生涯页未入登记册(或状态面板/确认弹窗缺登记)")
return
if ci != pi + 1 or ci > fi:
- problems.append("[career][registry] 登记序违约(应=暂停层后、确认弹窗前——P3 甲营地同档;pause=%d career=%d confirm=%d)" % [pi, ci, fi])
+ problems.append("[career][registry] 登记序违约(应=状态面板后、确认弹窗前——P3 甲营地同档;status=%d career=%d confirm=%d)" % [pi, ci, fi])
var ti: int = main.career_overlay.get_index()
- if ti <= main.pause_overlay.get_index() or ti > main.confirm_dialog.get_index():
- problems.append("[career][registry] 树序与登记序不同步(addChild 位应=暂停层后、确认弹窗前;tree_index=%d)" % ti)
+ if ti <= main.status_panel.get_index() or ti > main.confirm_dialog.get_index():
+ problems.append("[career][registry] 树序与登记序不同步(addChild 位应=状态面板后、确认弹窗前;tree_index=%d)" % ti)
# ⑬career 零跳转契约(提纲 P4 甲——页内零「前往他处」入口:除「返回」外任何导航钮=红)
diff --git a/game/smoke/ui_tune_probe.gd b/game/smoke/ui_tune_probe.gd
index 0bfc9cfa..63ea6216 100644
--- a/game/smoke/ui_tune_probe.gd
+++ b/game/smoke/ui_tune_probe.gd
@@ -6,7 +6,7 @@
# 驱动真实 UI 路径——①启动即开(DS_DEBUG=1 默认打开,探针自设环境变量)+悬浮菜单之上+登记册末位树序
# ②滑条联动 ③应用 ④重置 ⑤批量模拟 N=10 ⑥关闭 ⑦hero 表运行期不可变
# ⑧单次加成生效(经 _start_adventure_from_menu 真实路径+显式种子钉死)+开冒险路径显式关浮窗
-# ⑨对局中可开(战斗屏角标真实信号路径)+棋盘输入不锁+暂停角标不置灰(T2 防护=S1+ 停机点回归闸)
+# ⑨对局中可开(战斗屏角标真实信号路径)+棋盘输入不锁+状态角标不置灰(T2 防护=S1+ 停机点回归闸)
# +对局中两钮禁用+当局数据六项值对(与只读访问器逐项一致)+只读巡检(白名单外零连接)+零动效契约
# ⑩种子三分单点断言(显式输入优先/首局恒 42/非首局空框连抽 4 次不全等 42——C1/P5 甲/P6 甲载体)
# 运行:Godot_console.exe --headless --path . res://smoke/ui_tune_probe.tscn
@@ -110,7 +110,7 @@ func _ready() -> void:
problems.append("战斗加成单次生效违例(atk=%s max_hp=%s,期望 %d/%d)" % [
str(hero.get("atk", "?")), str(hero.get("max_hp", "?")), boosted_atk, boosted_hp])
# ⑨ 对局中可开(18卡⑦ P2 甲/T2 防护——S1+ 停机点回归闸):战斗屏角标真实信号路径开窗;
- # 棋盘输入不锁、暂停角标不置灰(旧 has_open 判据在「默认开×遮挡复活」下必锁死的破约回归面);
+ # 棋盘输入不锁、状态角标不置灰(旧 has_open 判据在「默认开×遮挡复活」下必锁死的破约回归面);
# 对局中批量模拟/两层调试两钮禁用;当局数据六项与只读访问器逐项一致;关闭钮真实路径收窗恢复
var dbg_badge: Button = main.board_zone.debug_badge
if dbg_badge == null or not dbg_badge.visible:
@@ -123,8 +123,8 @@ func _ready() -> void:
problems.append("对局中角标开浮窗失败(P2 甲对局中可达失守)")
if main._input_locked():
problems.append("对局中开浮窗后棋盘输入锁死(T2 防护失守——S1+ 停机点)")
- if main.board_zone.pause_badge.disabled:
- problems.append("对局中开浮窗后暂停角标置灰(T2 防护失守——S1+ 停机点)")
+ if main.board_zone.status_badge.disabled:
+ problems.append("对局中开浮窗后状态角标置灰(T2 防护失守——S1+ 停机点)")
if main.debug_overlay.is_running():
problems.append("对局中上下文锁定误判为模拟在跑(is_running 语义互扰)")
if not main.debug_overlay._sim_btn.disabled or not main.debug_overlay._dbg_btn.disabled:
diff --git a/tools/render_gate.sh b/tools/render_gate.sh
index 5810cf17..b65f3379 100644
--- a/tools/render_gate.sh
+++ b/tools/render_gate.sh
@@ -5,7 +5,7 @@
# 骨架复用 probe_gate:①每段 timeout 守卫(挂死=FAIL 不静默)②段前预清+段后清本 game 目录孤儿
# Godot(按命令行精确匹配本 game 路径,不误杀其他 worktree 会话)③末尾残留清点=批末闸(必须 0)。
# 段:
-# ① shot_probe 七屏窗口化截图(menu/settings/career/camp/level/battle/pause——迭代 19 卡① T1 扩屏)
+# ① shot_probe 七屏窗口化截图(menu/settings/career/camp/level/battle/status——迭代 19 卡① T1 扩屏)
# → tools/shot_checker.py A-D 语义断言自动判定(A 屏级骨架全屏/B 文字对比度/C 明度三档带/
# D 文字禁压纹理;E 焦点预算=语义面仍归人闸不机检)。首跑存量 FAIL 按 S1 停机点全量呈报登记 06。
# ② 取证段(Q7:超时/零字节/文件缺失任一即 FAIL——「渲染真实发生」必须成立,不做像素判定):
@@ -61,7 +61,7 @@ elif [ "$st" -ne 0 ] || ! grep -q "问题=0" "$TMP/shot.log"; then
echo "[render_gate] FAIL — shot_probe 未干净完成(exit=$st,缺失屏/空文件/路径断裂见上)"; _rc=1
fi
if [ "$_rc" -eq 0 ]; then
- python tools/shot_checker.py "$SHOT" shot_menu.png shot_settings.png shot_career.png shot_camp.png shot_level.png shot_battle.png shot_pause.png | sed 's/^/[render_gate] /'
+ python tools/shot_checker.py "$SHOT" shot_menu.png shot_settings.png shot_career.png shot_camp.png shot_level.png shot_battle.png shot_status.png | sed 's/^/[render_gate] /'
_rc="${PIPESTATUS[0]}"
[ "$_rc" -ne 0 ] && echo "[render_gate] FAIL — shot_checker A-D 断言存在红(S1 停机点:首跑存量 FAIL 全量呈报登记 06)"
fi