chore: sync latest changes

This commit is contained in:
2026-06-09 17:21:54 +08:00
parent bca137535b
commit 451c6ea025
12 changed files with 503 additions and 28 deletions

View File

@@ -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 }`
解锁持久化到 IndexedDBtoast 滑入 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 结局画廊 + 章节回顾 — 分支图可视化(待实现)