feat(scene): 场景选择与物理落地 + 整包发布(T-WIN-012/013/014)
T-WIN-013:API 升级与场景选择 - 契约快照同步到 rest-api 0.5.0 / data-models 0.7.0 / database 0.4.0 - catalog_types.gd 新增 SceneConfig(物理/环境/出生点/相机)与 Scene; CatalogBundle 增加 scenes[];from_dict 按契约 7.1 再收敛一次 (缺项默认、越界夹紧、非法枚举回退),与服务端 normalizeSceneConfig 同规则 - 新增 src/scene/scene_runtime.gd:GLB 载入 -> 碰撞体(mesh 三角网 / auto 命名约定 *_col、*_colonly / none 不兜底)-> 场景级重力(Area3D SPACE_OVERRIDE_REPLACE,不改全局 ProjectSettings)-> 风(每物理帧 apply_central_force,阵风正弦叠加,支持 local 坐标系)-> 环境光与雾 -> 出生点与相机(follow/fixed/orbit);无碰撞体时兜底地面 - CatalogStore 增加 scenes/default_scene/find_scene/ensure_scene_cached/ fetch_thumbnail(场景缓存带 sha256 指纹,避免换包后仍用旧 GLB) - 主界面改为 2x2 四个选择器(曲目/动作/模型/场景)+ 场景参数面板 (缩略图 + 重力/摩擦/弹性/碰撞体/风摘要) - 游戏界面载入场景并落地物理,角色落在出生点;场景缺失/下载失败/ 解析失败一律回退内置空场景并提示,不阻塞开始跟练 T-WIN-012:「关于」清单展示当前版本号 - 版本唯一来源为 project.godot 的 application/config/version(v0.2.0) - about_manifest() 输出版本/引擎/契约/协议/地址/隐私清单; 无头测试无 autoload,读取 AppConfig 走 get_node_or_null 容错 - Credits 的单个 CONTRACT_VERSION 常量改为 CONTRACT_VERSIONS 字典 (六项契约各自独立递增),并双向核对 contracts/VERSION T-WIN-014:发布必须是单个完整包 - build/package-release.sh 重写:只产出单个 zip + SHA256SUMS, 清理历史 .partN,超限时告警而非回退分卷;新增源产物与解压后完整性 自检(PE 头 MZ / pck 魔数 GDPC / exe+pck 同目录同名)与体积-上限对比 - deploy/proxy 相关的 Gitea IIS 256MB 上限说明见 opendance-web 测试:tests/test_scene_config.gd(12 例)+ tests/test_about.gd(4 例); 无头测试 687 通过 / 0 失败(10 个套件),verify.sh 全部通过
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# T-WIN-012 「关于」清单展示当前版本号
|
||||
|
||||
- **状态**: done
|
||||
- **依赖**: T-WIN-010
|
||||
- **文档**: v1.6 §11(版本号展示)
|
||||
|
||||
## 目标
|
||||
|
||||
Windows 客户端在**「关于」清单**中展示当前运行版本号,且版本号只有一处权威定义。
|
||||
|
||||
## 方案
|
||||
|
||||
| 项 | 做法 |
|
||||
|--|--|
|
||||
| 唯一来源 | `project.godot` 的 `application/config/version`(运行期用 `ProjectSettings.get_setting` 读取) |
|
||||
| 界面位置 | 关于页面新增「清单」区块,逐行「标签:值」 |
|
||||
| 禁止重复 | 界面代码中**不出现版本号字面量**;由 `test_about.gd` 反例防护 |
|
||||
|
||||
`src/ui/about_screen.gd` 新增两个可直接单测的纯函数:
|
||||
|
||||
- `app_version()` —— 返回 `vX.Y.Z` 的来源值(唯一来源);
|
||||
- `about_manifest()` —— 返回清单各行(版本 / 引擎 / 契约版本 / 接收协议 / 接收地址 / 服务端地址 / 隐私说明)。
|
||||
|
||||
`about_manifest()` 读取 `AppConfig` 时走 `get_node_or_null("AppConfig")`,
|
||||
因为无头测试以 `--script` 运行**没有 autoload**,直接引用会在解析期报错。
|
||||
|
||||
## 顺带修正:契约版本不能再用单个常量
|
||||
|
||||
`Credits.CONTRACT_VERSION` 原为单个常量 `0.1.0`,但六项契约现在各自独立递增
|
||||
(`rest-api 0.5.0` / `data-models 0.7.0` / `skeleton-topology 0.2.0` …)。
|
||||
改为 `Credits.CONTRACT_VERSIONS` 字典 + `version_of()` / `summary()`,
|
||||
并让 `test_credits.gd` 逐项与 `contracts/VERSION` 双向核对
|
||||
(新增契约若忘记同步展示,测试直接失败)。
|
||||
|
||||
## 验收(文档 §11.3)
|
||||
|
||||
| 验收项 | 结果 |
|
||||
|--|--|
|
||||
| 关于清单可见 `vX.Y.Z` | ✅ 清单首行「客户端版本:v0.2.0」 |
|
||||
| 与导出产物文件名一致 | ✅ `opendance-windows-v0.2.0.zip` |
|
||||
| 与 `project.yaml` / `project.godot` 一致 | ✅ 测试 `test_version_is_semver_and_matches_project_yaml` 核对 |
|
||||
| 界面代码无版本号字面量 | ✅ 测试 `test_version_not_hardcoded_in_ui_sources` 核对 |
|
||||
Reference in New Issue
Block a user