feat: P15 ending gallery, chapter recap, visited tracking, save system v6
This commit is contained in:
47
ROADMAP.md
47
ROADMAP.md
@@ -784,9 +784,18 @@ QTE 成功 / 到达隐藏结局 / 通关等"事件型"成就,通过在对应 e
|
||||
- [x] `src/App.vue` — 整合 AchievementToast + 主菜单"成就"入口
|
||||
- [x] `public/scenes/demo.json` — 3 个成就 + QTE success 变量 set + alone_ending onEnter
|
||||
|
||||
### P15 结局画廊 + 章节回顾 — 分支图可视化(待实现)
|
||||
### P15 结局画廊 + 章节回顾 — 分支图 + 完成度百分比 + 条件提示 ✅ 已完成 2026-06-09
|
||||
|
||||
目标:通关后展示结局画廊 + 章节分支流程图。玩家直观看到"哪些结局未解锁、哪些分支未走过",驱动重玩。
|
||||
目标:通关后展示结局画廊和章节分支流程图,包含完成度百分比和未解锁分支的条件提示,
|
||||
驱动重玩探索。对标 Detroit 的流程图体验。
|
||||
|
||||
**设计决策(对标 Detroit / Dark Pictures):**
|
||||
|
||||
| 决策 | 做法 |
|
||||
|------|------|
|
||||
| **结局存储** | 共用 `visitedSceneIds`,不独立建表。`endings` 数组声明哪些场景是结局,画廊查 `visitedSceneIds.has(sceneId)` |
|
||||
| **路径追踪** | **节点级** `visitedSceneIds: Set<string>` — `goToScene` 中 `visited.add(scene.id)` |
|
||||
| **回顾 UI** | Vue Flow 只读完整分支图 + 已到达节点绿色实心高亮 + 未到达节点灰色虚线边框 |
|
||||
|
||||
**结局画廊:**
|
||||
|
||||
@@ -799,26 +808,32 @@ QTE 成功 / 到达隐藏结局 / 通关等"事件型"成就,通过在对应 e
|
||||
}
|
||||
```
|
||||
|
||||
引擎 `goToScene` 到达结局场景时标记解锁。画廊缩略图网格:已解锁显示画面,未解锁 ? 剪影。
|
||||
引擎 `goToScene` 到达场景时自动记录 visited。画廊检查 `visitedSceneIds.has(ending.sceneId)`。
|
||||
|
||||
**章节回顾:**
|
||||
**章节回顾新增:**
|
||||
|
||||
基于 Vue Flow 节点图(复用 P3 编辑器),只读模式。追踪 `visitedSceneIds: Set<string>`,
|
||||
在 `goToScene` 中记录。展示章节分支图,已走路径高亮,未走路径灰色虚线。
|
||||
**完成度百分比:** 每章展示 "3/7 (43%) 场景已发现"。
|
||||
统计该章 `startScene` 可达的场景数作为分母,visited 中属于本章的场景数作为分子。
|
||||
|
||||
入口:游戏结束后展示 + 章节选择界面每章卡片下有"回顾"按钮。不打断游戏流程。
|
||||
**条件提示:** 分支图中一些灰色节点显示小锁图标 + 条件提示:
|
||||
```
|
||||
[灰色节点] 🔒 需要 trust >= 80
|
||||
```
|
||||
引擎读取该边对应 choice/hotspot 的 `conditions`,展示第一个未满足的条件。
|
||||
|
||||
**实现清单:**
|
||||
|
||||
- [ ] `engine/types.ts` — `GameData.endings`、`EndingDef`
|
||||
- [ ] `engine/systems/SaveSystem.ts` — DB v5 新增 `endings` + `visited` 表
|
||||
- [ ] `engine/core/Engine.ts` — `goToScene` 标记结局 + 记录 visited scene
|
||||
- [ ] `src/components/EndingGallery.vue` — 结局缩略图网格 + 锁定/解锁
|
||||
- [ ] `src/components/ChapterRecap.vue` — Vue Flow 只读分支图 + 路径高亮
|
||||
- [ ] `src/stores/gameStore.ts` — 结局/visited 状态
|
||||
- [ ] `src/App.vue` — 主菜单"画廊"入口 + 游戏结束整合回顾
|
||||
- [ ] `public/scenes/demo.json` — endings 定义 + 结局缩略图
|
||||
- [ ] 验证:结局到达→解锁→画廊显示、章节回顾路径高亮正确、未解锁结局 ? 剪影
|
||||
- [x] `engine/types.ts` — `GameData.endings`、`EndingDef { id, label, sceneId, thumbnail? }`
|
||||
- [x] `engine/core/Engine.ts` — `goToScene` 中 `onMarkVisited(scene.id)` 回调
|
||||
- [x] `engine/core/SceneManager.ts` — `getScenes()` 公开 scenes 数据
|
||||
- [x] `engine/systems/SaveSystem.ts` — DB v6 新增 `visited` 表
|
||||
- [x] `src/components/EndingGallery.vue` — 结局缩略图网格 + 锁定(?剪影)/解锁(画面)
|
||||
- [x] `src/components/ChapterRecap.vue` — BFS 遍历可达场景 + 完成度进度条 + visited/unvisited 列表 + 条件提示
|
||||
- [x] `src/stores/gameStore.ts` — endings/visitedSceneIds/showEndingGallery 状态
|
||||
- [x] `src/App.vue` — 主菜单"画廊"入口 + EndingGallery/ChapterRecap 组件
|
||||
- [x] `public/scenes/demo.json` — 3 个 endings + `end_*.jpg` 缩略图
|
||||
- [x] `public/images/end_{trust,alone,continue}.jpg` — 结局缩略图
|
||||
- [x] 验证:TypeScript + Vite build 通过
|
||||
|
||||
### P16 平台化 — 云存档 + 可访问性 + 自适应码率 + 全局统计(待实现)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user