chore: sync latest changes
This commit is contained in:
46
ROADMAP.md
46
ROADMAP.md
@@ -739,9 +739,18 @@ engine.on('choiceRequest', (choiceList) => {
|
||||
- [x] `public/scenes/demo.json` — left_door + trust_ending 各一个 prompt 示例
|
||||
- [x] 验证:TypeScript + Vite build 通过
|
||||
|
||||
### P14 成就系统 — 事件触发 + 条件检测 + Toast 弹窗(待实现)
|
||||
### P14 成就系统 — 纯变量检测 + 单一检查点 + Toast 队列 ✅ 已完成 2026-06-09
|
||||
|
||||
目标:Steam 式成就系统,驱动重玩探索。事件触发或变量条件检测,解锁时底部 toast 滑入。
|
||||
目标:Steam 式成就系统,驱动重玩探索。所有成就通过变量检测,在 `StateManager.apply` 末尾单一检查点触发。
|
||||
|
||||
**设计决策(对标 Detroit / Dark Pictures):**
|
||||
|
||||
| 决策 | 做法 |
|
||||
|------|------|
|
||||
| **检测方式** | **纯变量 + 单一检查点** — `condition: { variable, op, value }`,`StateManager.apply` 末尾 `achievementSystem.check(variables)` |
|
||||
| **Toast 弹出** | **逐个队列** — 同时解锁多个成就时一个消失后下一个才弹出 |
|
||||
| **图标** | **可选 URL** — 有 `icon` 路径则显示缩略图,为空则不显示图标栏 |
|
||||
| **入口** | **仅主菜单** — 不在游戏内 Esc 菜单,属于元游戏层 |
|
||||
|
||||
**数据结构:**
|
||||
|
||||
@@ -754,35 +763,26 @@ engine.on('choiceRequest', (choiceList) => {
|
||||
"description": "成功完成一次 QTE",
|
||||
"icon": "",
|
||||
"hidden": false,
|
||||
"trigger": { "event": "qteResult", "success": true }
|
||||
},
|
||||
{
|
||||
"id": "explorer",
|
||||
"title": "探索者",
|
||||
"description": "搜索过房间的每一个角落",
|
||||
"icon": "",
|
||||
"hidden": false,
|
||||
"trigger": { "variable": "investigation", "op": ">=", "value": 2 }
|
||||
"condition": { "variable": "qte_succeeded", "op": ">=", "value": 1 }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
触发条件支持:`{ event }`(qteResult / choiceMade / gameEnd / sceneReached)或 `{ variable, op, value }`。
|
||||
解锁持久化到 IndexedDB,toast 滑入 3 秒消失。
|
||||
QTE 成功 / 到达隐藏结局 / 通关等"事件型"成就,通过在对应 effects 或 onEnter 中变量来驱动检测。
|
||||
|
||||
**实现清单:**
|
||||
|
||||
- [ ] `engine/types.ts` — `GameData.achievements`、`AchievementDef` 接口
|
||||
- [ ] `engine/systems/AchievementSystem.ts` — 触发检测 + 解锁 + 回调 onUnlock
|
||||
- [ ] `engine/systems/SaveSystem.ts` — DB v5 新增 `achievements` 表
|
||||
- [ ] `engine/core/Engine.ts` — 事件点调用 `achievementSystem.check(event, data)`
|
||||
- [ ] `src/components/AchievementToast.vue` — 底部弹窗滑入/滑出动画
|
||||
- [ ] `src/components/AchievementPanel.vue` — 成就列表(全部/已解锁/未解锁)
|
||||
- [ ] `src/stores/gameStore.ts` — 成就解锁状态
|
||||
- [ ] `src/App.vue` — 整合 AchievementToast + 主菜单"成就"入口
|
||||
- [ ] `public/scenes/demo.json` — 2~3 个成就示例
|
||||
- [ ] 验证:QTE 成功触发 toast、变量成就自动检测、面板显示正确
|
||||
- [x] `engine/types.ts` — `GameData.achievements`、`AchievementDef { id, title, description, icon?, hidden, condition }`
|
||||
- [x] `engine/systems/AchievementSystem.ts` — `check(variables)` 遍历未解锁成就;`onUnlock` 回调;toast 队列管理
|
||||
- [x] `engine/systems/SaveSystem.ts` — DB v5 新增 `achievements` 表
|
||||
- [x] `engine/core/StateManager.ts` — `apply` 末尾 `onAfterApply` 回调
|
||||
- [x] `engine/core/Engine.ts` — `stateManager.onAfterApply → achievementSystem.check`
|
||||
- [x] `src/components/AchievementToast.vue` — 底部弹窗滑入/滑出动画
|
||||
- [x] `src/components/AchievementPanel.vue` — 成就列表(全部/已解锁/未解锁/隐藏)
|
||||
- [x] `src/stores/gameStore.ts` — 成就定义/解锁/toast 状态
|
||||
- [x] `src/App.vue` — 整合 AchievementToast + 主菜单"成就"入口
|
||||
- [x] `public/scenes/demo.json` — 3 个成就 + QTE success 变量 set + alone_ending onEnter
|
||||
|
||||
### P15 结局画廊 + 章节回顾 — 分支图可视化(待实现)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user