把项目从「手写 dist/」改成「wallpapers/ 是唯一真相来源,dist/ 由 pnpm build 生成」,
并补上配套的类型、门禁与抓取器。一次提交落地整条管线,因为拆开会留下不能构建的中间态。
- src/:运行时与模拟器源码(TS,strict),编译到 build/ 再拷进各分发
- tools/:build / dev / check-{syntax,paths,dist},以及抓取器与回归门禁 tools/checks/
(.scratch/ 下那批一次性脚本移入 tools/checks/ 并入库为长期门禁)
- wallpapers/:七档壁纸的源数据 + README.md(id/音频/预设的完整规范)
- docs/adr/0005-0008:构建管线与分发拓扑、模拟器契约、自包含 sim、每骨架资源布局
- .gitignore:排除 .scratch/ 的参考资料副本(上游 spine 整仓克隆 ~1.2 GB、
抓取侦查数据 ~680 MB)与调试转储;这些是本地调查材料,补偿会让仓库无法克隆
- 归一化 .gitignore/CONTEXT.md 行尾(工作区 CRLF、索引 LF 造成的整文件假 diff)
同时修掉三档卡住构建的未完工壁纸:
- kv45 的 meta.json 里 id 还是抓取期场景名 scene_main,经 downloader promote 正名为 kv45
- shajin / zhigengniao_juheye 的 meta.json 误用了骨架描述文件(name/spine/animations/pages)、
且都缺 preset.template.json;现按规范重建:骨架沉到 spines/<名>/(spine-ts 按 atlas 所在
目录解析贴图页)、补上元数据与单骨架预设,并清掉 zhigengniao 骨架里指向作者机的绝对路径
- 顺带 promote 已在 sources.yml 里的 kv46(月升之前,与兽共舞)
pnpm check 五道门全绿:10 个分发 / 7 档壁纸 / 141 处引用自包含。
4.0 KiB
09 — 模拟器设置面板还原 Wallpaper Engine 官方面板
Status: resolved Type: task
需求(用户原话)
wallpaper engine模拟设置面板严格还原官方面板
附官方面板截图(WE 2.8 里本项目这档壁纸的 Wallpaper Settings)。
官方面板的结构(从截图读出)
- 标题栏:
Wallpaper Settings+ 右侧⟳ 重置 - 属性一行一个:图标 + 标签 + 右侧控件
type:"text"的属性渲染成富文本说明块(<ul><li>列表 +<a>链接),缩进在相关行下方- 颜色属性之后有一条分隔线
- 底部:
确认/取消
改了什么
| 官方特征 | 旧实现 | 现在 |
|---|---|---|
标题 Wallpaper Settings + 重置 |
无标题栏,右上角一个「WE 模拟器」开关 | 照官方 |
| 图标 + 标签 + 右侧控件 | 两栏 grid,无图标 | 照官方(text 开头的 emoji 当图标) |
按 order 排序 |
按对象键序(属性表不按 order 写就错位) | 按 order,回退 index |
type:"text" 富文本说明块 |
截断成 90 字的一行提示,列表和链接全丢 | 白名单复制 <ul>/<li>/<a>/<small>/<br> |
condition 生效 |
完全忽略 | 键.value == 字面量 求值 |
| 颜色属性 = 色块 + 「显示颜色选项」 | 一个裸文本框 | 色块;勾选后换成取色器 |
| 底部 确认 / 取消 | 无 | 确认 = 立新基线;取消 = 回滚到基线 |
重置 |
无 | 恢复 project.json 默认值 |
fps / setPaused / 替身清单是 WE 面板里没有的调试开关,收进底部可折叠的「模拟器调试」,默认收起——不干扰"像不像官方"的判断。
顶部「⚠ 模拟环境」横幅保留:ADR 0006 要求做不到的 API 必须显式标记为替身。这是刻意不像官方的三处之一(另两处:折叠的调试区、面板只是贴右边缘的抽屉而非 WE 主窗口)。
三个只有真跑起来才会发现的问题
-
schemecolor的text是 i18n 键,不是文案。它是ui_browse_properties_scheme_color,官方面板显示「主题配色」。直接当标签用,面板上会赫然出现一串下划线键名。加了WE_I18N映射 + 去前缀的兜底。 -
condition必须求值,否则面板会多出不该有的行。author_info的condition是show_author_info.value == true;不求值就永远显示,关掉开关也赖着不走。认不出来的表达式返回 true(宁可多一行,也不要莫名少一行)。 -
<script>不能进活文档。说明块是作者写的 HTML,用DOMParser解析到惰性文档再按白名单复制,而不是innerHTML;<a>只放行http(s)。
验证
tools/checks/verify-panel.mts(真实 CDP)断言的是官方面板的可观察特征,不是我们的实现细节:
- 标题就是
Wallpaper Settings、有「重置」、横幅仍在 - 七行顺序逐字比对:主题配色 / 显示颜色选项 / 显示作者信息 / 壁纸预设切换 / 音频音量调整 / 音频文件路径 / 背景音乐选择
- 控件类型:color→色块、bool→checkbox、combo→select、slider→range
- 五个说明块都有
<ul><li>;作者信息的 bilibili 链接被保留且只放行 http(s) - condition:关掉「显示作者信息」→ 作者信息块消失、开关本身还在
- 重置恢复默认 1;取消回滚;确认保留
- 0 异常、0 控制台报错
tools/checks/shot-panel.mts 负责出图(把指针移到右边缘让面板滑出再截),产物 .scratch/shots/panel-official-look.png。
与截图对不上的两处(不是 bug)
截图的属性集与当前源码不一致,说明它来自另一个版本:
- 截图有「翻转」,当前
project.json的属性表里没有这一项。它可能是 WE 的内置行,也可能是旧版本作者自己声明的属性。 - 截图没有「背景音乐选择」(
bgm),而当前属性表里有——bgm是后加的。
面板是按当前属性表渲染的,所以它以属性表为准。