Files
tianshu-engine/docs/ARCHITECTURE.md

1.5 KiB
Raw Blame History

架构决策记录

1. 引擎与 UI 分离

engine/ 下纯 TS 类,不 import Vue。UI 层通过 composables 桥接。

2. A/B 双缓冲

两个 <video> 元素轮换一个播放时另一个预加载候选视频。300ms CSS opacity 交叉淡化。

3. JSON 驱动

所有剧情数据放在 JSON 中,编辑器本质是 JSON 的可视化读写工具。

4. IndexedDB 存档

比 localStorage 容量大,可存储截屏缩略图。多槽位支持,跨会话持久化。

5. 故事图与玩家树

创作端的 JSON 是有向图Graph玩家端展示的是严格树Tree

  • 数据层:故事图 + 玩家存档
  • 渲染层:buildPlayerTree() 将图投影为树
  • 汇聚节点在树上复制展示,每条路径独立
  • 回环用 pathSet 精确剪枝 + depth > 10 兜底

详见 ROADMAP.md P23

6. 成就 — 纯变量单一检查点

所有成就通过变量检测,在 StateManager.apply 末尾单一检查点触发。事件型成就改写为变量型QTE 成功 = 在 effects 中 set 标记变量)。

7. i18n — 双文件分层

  • src/locales/ — UI 文本(静态 import构建时打包
  • public/locales/ — 故事文本fetch 动态加载)

useI18n.t() 优先查故事消息fallback 到 UI 消息。

8. 章节 — 单文件共享场景

所有场景在一个 JSON 中,章节用 startScene 标记边界。场景可跨章引用以保持叙事灵活性,但建议制作者保持各章 BFS 独立。