修卡(营地五界面真窗口化批·godot-master终审折入): v1.0→v1.1——阻断一处(生涯标题「生 涯」墨token WARM压亮石板皮≈1.1:1静默违§7.2: T1明写订正WARM→INK_TITLE设置/状态面板先例,契约9「token零改」范围限定=BG_BRIGHT内容板文字)+建议三处(T2段尾收闭点名生涯窗on_camp_closed名单不含career_overlay防残留泄段/V3裸等值改V1容差0.01判等+V2恰等80注记/V7喂入后await帧再断防陈旧布局值); 审裁决=修后即可开工; grilling四轮零待裁点
This commit is contained in:
1 parent
df80bfb38d
commit
4de6111c56
1 file changed
+9
-7
@@ -1,4 +1,6 @@
|
||||
# 需求卡片 · 营地五界面真窗口化批(v1.0)
|
||||
# 需求卡片 · 营地五界面真窗口化批(v1.1)
|
||||
|
||||
> **版本**:v1.1(2026-11-02)——godot-master 终审阻断一处+建议三处全折入(裁决=修后即可开工);grilling 四轮在案、零待裁点。
|
||||
|
||||
> **用途**:迭代实现批的实施合同。把营地五个功能界面的承载形态从「近全屏面板/全屏深色叠层」换成统一居中定尺寸窗壳;开合路由、互斥、关闭钮、ESC 序等行为面(迭代 47 已落地)零改。
|
||||
> **来源**:待办清单「营地五界面窗口化批——营地功能页点开后的呈现形态(2026-10-22 登记,来源=会话提及)」条目(状态=文档设计已闭合+已写卡)。
|
||||
@@ -84,7 +86,7 @@
|
||||
6. 🔴 **窗内滚动**:窗体尺寸不随内容增长——内容超高由既有内容滚动面(F4)在窗内滚动承载;生涯页内容列补同款滚动面(同壳同形态)。
|
||||
7. 🔴 **零新美术素材**:窗壳程序化,全部经 UiKit 工厂既有 token;禁新色值/新贴图。
|
||||
8. 🔴 **窗板选型=石板皮**:窗板样式盒=`UiKit.panel_skinned(Vector4(14, 12, 14, 12))`(暖亮模态惯例 9 消费面、camp_esc 浮窗同款;禁 `PANEL_DEFAULT`——主题无 PanelContainer 默认面板,落引擎灰板与营地暖亮档冲突)。
|
||||
9. 🔴 **生涯页文字与底色耦合维持**:生涯页文字 token(WARM/WARM_SOFT/CANDLE/INK_L_GOLD)全部对深棕 BG_BRIGHT 调校(career_overlay.gd:38-40 对比度口径)——生涯窗内容板底色维持 BG_BRIGHT(`UiKit.panel_flat(BG_BRIGHT, PANEL_BORDER, RADIUS_OBJECT, 1, 边距)`),token 零改零重测;禁把生涯文字压上米色 PANEL_DATA 底(亮字亮底 <4.5:1 违 art-bible §7.2)。
|
||||
9. 🔴 **生涯页文字与底色耦合维持**:生涯页文字 token(WARM/WARM_SOFT/CANDLE/INK_L_GOLD)全部对深棕 BG_BRIGHT 调校(career_overlay.gd:38-40 对比度口径)——生涯窗内容板底色维持 BG_BRIGHT(`UiKit.panel_flat(BG_BRIGHT, PANEL_BORDER, RADIUS_OBJECT, 1, 边距)`),token 零改零重测(**范围=BG_BRIGHT 内容板上的文字**);窗板石板皮上的顶行标题墨随亮底惯例订正 `WARM`→`INK_TITLE`(§8.2 T1 明写——亮面板配深墨族,设置/状态面板先例;WARM 压亮石板 ≈1.1:1 违 §7.2,非本契约破约);禁把生涯文字压上米色 PANEL_DATA 底(亮字亮底 <4.5:1 违 art-bible §7.2)。
|
||||
10. 🔴 **判据口径**:验收断言从真实入口进入(进档→场景点选真实信号路由)、判据绑窗板几何/可见性/树序/滚动实高等可观测提交面;全批无变异类测试、无撤销类取证;浮点几何判等用 `is_equal_approx`/`absf < 0.01`(禁裸 `==` 假红)。
|
||||
|
||||
---
|
||||
@@ -148,7 +150,7 @@
|
||||
|
||||
### 8.2 T1——生涯页同壳改造(估时 0.25–0.5 个工作日)
|
||||
|
||||
- [ ] `career_overlay.gd` `_init` 原地改写:`UiKit.page_shell` 调用与 `page.base.color` 字面量退役;换 `var shell := UiKit.modal_shell(self, Color(UiKit.DIM, 0.6), Vector2.ZERO, 8, UiKit.panel_skinned(Vector4(14, 12, 14, 12)))`+`shell.panel.custom_minimum_size = CampSubViewBase.WINDOW_SIZE`;顶行(「生 涯」标题+spacer+「返回」钮,文案与连接零改)迁入 `shell.box`;内容列(hint+组一行板)包 ScrollContainer(`SIZE_EXPAND_FILL`、横向禁滚——同 F4 形态)进 `shell.box`;滚动面外再垫内容板 PanelContainer(样式盒=`UiKit.panel_flat(UiKit.BG_BRIGHT, UiKit.PANEL_BORDER, UiKit.RADIUS_OBJECT, 1, Vector4(12, 12, 12, 12))`——原页底色随壳迁移,文字 token 零改,设计契约 9);成员标签变量与 `open_career` 签名零改。
|
||||
- [ ] `career_overlay.gd` `_init` 原地改写:`UiKit.page_shell` 调用与 `page.base.color` 字面量退役;换 `var shell := UiKit.modal_shell(self, Color(UiKit.DIM, 0.6), Vector2.ZERO, 8, UiKit.panel_skinned(Vector4(14, 12, 14, 12)))`+`shell.panel.custom_minimum_size = CampSubViewBase.WINDOW_SIZE`;顶行(「生 涯」标题+spacer+「返回」钮,文案与连接零改)迁入 `shell.box`,**标题墨 token 订正 `WARM`→`INK_TITLE`**(亮面板配深墨族——设置/状态面板先例;契约 9 的「token 零改」范围=BG_BRIGHT 内容板上的文字,顶行压石板皮不在此列);内容列(hint+组一行板)包 ScrollContainer(`SIZE_EXPAND_FILL`、横向禁滚——同 F4 形态)进 `shell.box`;滚动面外再垫内容板 PanelContainer(样式盒=`UiKit.panel_flat(UiKit.BG_BRIGHT, UiKit.PANEL_BORDER, UiKit.RADIUS_OBJECT, 1, Vector4(12, 12, 12, 12))`——原页底色随壳迁移,内容板文字 token 零改,设计契约 9);成员标签变量与 `open_career` 签名零改。
|
||||
- [ ] 文件头注随动(只读全屏页→只读功能窗口);头注 :3 陈旧入口陈述(「入口唯一在开始覆盖层『营地与系统』组」——卡④ T3 改挂帐篷旁笔记本后遗留)一并订正为笔记本入口。
|
||||
- [ ] 孤立验证:`…console.exe --headless --path game --script res://tests/unit/presentation/theme_projection_test.gd` 生涯投影段与全件 exit 0。
|
||||
- [ ] 复跑 `python tools/gdstyle_gate.py`:career_overlay.gd 零新键。
|
||||
@@ -159,14 +161,14 @@
|
||||
|
||||
- [ ] `screen_flow_probe.gd` 新增 `func _step_camp_window_shell() -> void`,插 `_ready` 中 `_step_camp_esc_and_hud()` 之后;前置 `ProbeUiUtil.open_camp_via_savesel(main, "smoke_screen_flow_winshell")`(真实进档入口)。断言明细(新码全类型标注;每断言带〔窗口化批 Vn〕尾缀):
|
||||
- **V1 四窗几何**:循环 `[&"forge", &"chest", &"dummy", &"board"]` 逐一键 `object_pressed.emit(k)`(每窗先经真实关闭钮关前窗),经视图子树取 CenterContainer 下的 PanelContainer 为窗板,断 `get_global_rect()` 位置 ≈ (280, 80)、尺寸 ≈ (720, 640)(浮点容差 0.01)。
|
||||
- **V2 场景根留底**:每窗开态断 `main.ui.modals.camp.scene.visible == true` 且窗板矩形四边距视口边 ≥80px(V1 等值蕴含,独立断言钉场景根可见)。
|
||||
- **V3 遮罩 0.6**:每窗开态断视图首个子节点 ColorRect(遮罩件)`color.a ≈ 0.6` 且 `size == 视口尺寸`。
|
||||
- **V2 场景根留底**:每窗开态断 `main.ui.modals.camp.scene.visible == true` 且窗板矩形四边距视口边 ≥80px((800−640)/2 恰等 80——判等沿 V1 容差 0.01;V1 等值蕴含,独立断言钉场景根可见)。
|
||||
- **V3 遮罩 0.6**:每窗开态断视图首个子节点 ColorRect(遮罩件)`color.a ≈ 0.6` 且 `size` 与视口尺寸沿 V1 容差 0.01 判等(禁裸 `==`——契约 10)。
|
||||
- **V4 关闭钮回归**:四窗经底栏「返回营地」、生涯窗经顶行「返回」真实 Button `pressed.emit()` → 断窗隐(visible==false)且场景根仍 visible。
|
||||
- **V5 互斥单开与点选遮挡**:每窗开态断五窗集(forge/treasure/tree/codex/career_overlay)visible 计数 == 1(轮转开合逐窗断);另在树窗开态取锻炉命中区中心(`camp_scene.get_hotspot_rect(&"forge")` 公开读面,camp_scene_view.gd:83——场景根全屏锚下局部==全局)`push_input` 真实鼠标点击事件 → 断无任何新窗打开、树窗仍开(窗下场景点选被遮罩挡——模态遮挡可达性探针标配)。
|
||||
- **V6 ESC 先关窗**:`object_pressed.emit(&"notebook")` 开生涯窗 → `push_input` 真实 Esc 键事件(:114-120 同款)→ 断生涯窗隐且 esc 浮窗未开。
|
||||
- **V7 内容超高窗内滚动**:`object_pressed.emit(&"dummy")` 开树窗 → `tree_view.refresh_camp()` 喂真实 `main._camp_data()` 投影追加 30 行合成行(行结构与树投影同型:vein=spine/kind=stat/node_id=probe_row_i/can_buy=false)→ 断(a)窗板 rect 仍 ≈ (280, 80, 720, 640)(窗不随内容涨)(b)树滚动容器内容实高(`_tree_holder.size.y`)> 滚动容器实高(超高实据)。
|
||||
- **V7 内容超高窗内滚动**:`object_pressed.emit(&"dummy")` 开树窗 → `tree_view.refresh_camp()` 喂真实 `main._camp_data()` 投影追加 30 行合成行(行结构与树投影同型:vein=spine/kind=stat/node_id=probe_row_i/can_buy=false)→ 喂入后 `await` 帧再断(queue_free 摘行与 min size 重算帧末延迟——探针 `_frames()` 惯例)→ 断(a)窗板 rect 仍 ≈ (280, 80, 720, 640)(窗不随内容涨)(b)树滚动容器内容实高(`_tree_holder.size.y`)> 滚动容器实高(超高实据)。
|
||||
- **V8 生涯同壳**:`object_pressed.emit(&"notebook")` 开生涯窗 → 断窗板 rect 同 V1 等值+「返回」钮在位+内容列滚动面在(窗内容子树 ScrollContainer 存在且纵向 EXPAND_FILL——同壳滚动面结构钉)。
|
||||
- [ ] 段尾收闭:关窗+`main._on_camp_closed()` 复归菜单语境(后续 `_step_save_select_open_back` 段前提不受扰)。
|
||||
- [ ] 段尾收闭:最后开的窗(含生涯窗——`on_camp_closed` 关闭名单只含场景根+四子界面+选档层,不含 career_overlay)经各自真实关闭钮关闭后,再 `main._on_camp_closed()` 复归菜单语境(防生涯窗残留开态泄入后续段——后续 `_step_save_select_open_back` 段前提不受扰)。
|
||||
- [ ] 孤立验证:`…console.exe --headless --path game res://probe/screen_flow_probe.tscn` exit 0(新段+既有段全绿)。
|
||||
- [ ] 窄验 shot_probe:窗口化跑 `…console.exe --path game res://probe/shot_probe.tscn -- <临时目录>` exit 0,确认生涯段(「返回」钮/「生 涯」meta)与七屏自检在窗壳形态下通过(shot_career.png 通用判据 std/色数读数记实现报告)。
|
||||
|
||||
|
||||
Reference in new issue
Block a user