Appearance
设置页的缺口
背景:ADR-035 审计发现设置面板对标 DanceXR 仍有缺口,其中"默认物理开关"等 P1 项长期悬空。 过程:core/types.ts 增 defaultPhysicsEnabled;model-loader 默认物理改读 UIState;settings 性能页加 toggle;同步修正 ADR-035 状态与 v1.1.4 release notes 编号。
序、清单上的幽灵
王逸翻开 ADR-035《设置面板差距分析》。文档底部写着"等待排期实施",像一个被遗忘的抽屉。
但抽屉里的东西,大半已经自己跑出来了。
审计一遍:音频设置(音量/静音/偏移/BPM量化/伴音自动加载)——落地了。截图(格式+质量+Go 端 SaveScreenshot)——落地了。快捷键重绑——落地了。帧率上限滑块——落地了。UI 缩放、缓存清理——落地了。
清单上的勾,比文档承认的多。
只有几行还空着:语言切换、渲染独立开关、垂直同步、渲染分辨率缩放、默认模型行为、灵敏度、默认物理开关、反 Y 轴、设置导入导出、自动更新。
其中"默认物理开关"是 P1——最该先做、却一直没做的那一个。
"把这个勾上。"王逸指了指那一行。
一、开关的胎儿期
物理模拟的默认行为,藏在 scene/manager/model-loader.ts 里:每个 actor 加载时,physicsEnabled: true。
硬编码的 true。像一颗没有开关的灯泡——永远亮着,用户想关也关不掉。
stage(舞台)模型则是 false。两套默认,两套脾气。
要补的开关,是一句条件:uiState.defaultPhysicsEnabled !== false。默认仍是 true(行为不变),但当 UIState 里写下"关",灯泡就灭。
core/types.ts 的 UIState 结构长出了新器官:defaultPhysicsEnabled?: boolean——可选,向后兼容,老存档没有它时一切照旧。
二、议会的表决
开关的本体在 menus/settings.ts 的性能页。
lucide:atom 图标,一行「默认启用物理模拟」的 toggle,下面一行浅灰 hint 说明它的作用。写入 UIState,落盘,下次加载自动生效。
这里有个文档没写的细节:addToggleRow 的 opts 只接受 bind 和 onUpdate,没有 desc 字段。想加说明文字,不能传 desc——得用 hint div,和 fps 卡片同款写法。一个参数表的脾气,踩过才记得。
UI 的一致性,常藏在某个 helper 不接受某个字段的固执里。
三、文档的还魂
开关落地了,文档却还在装睡。
ADR-035 的状态行从「等待排期实施」改为「部分完成 (In Progress)」,文末补了一张「实施进度」表——逐项 ✅/🟡/❌,把清单上那些自己跑出来的勾,正式记入账本。
顺手还修了一个更深的错位:docs/releases/v1.1.4.md 把 ADR 编号标反了——032 写成云渲染调研(实为 033)、034 写成设置差距分析(实为菜单统一化)、035 写成快捷键注册表(实为设置差距分析),还漏了 036。编号纠偏,四份 ADR 各归其位。
文档的过期不是疏忽,是代码跑得比笔快。笔追上来时,先校准它指的方向。
四、王的还账
晚上,王逸打开设置页。性能页里多了一行 atom 图标,写着「默认启用物理模拟」。
他关掉它,加载一个模型——没有物理摆动,干干净净。再打开,裙摆如期飞扬。
ADR-035 的抽屉,终于不再有幽灵。
缺口不是缺陷,是尚未被承认的已完成。治理的第一课,是先看清哪些勾已经自己打上了。
教训:文档状态要随代码实时回写,否则"等待排期"会变成对已完成工作的谎言。