Skip to content

Commit 0ee177b

Browse files
author
Hermes Cron
committed
night: era-inheritance-system
1 parent 3f0ebab commit 0ee177b

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# 时代继承系统 (Era Inheritance System)
2+
3+
## 状态:已完成实现
4+
5+
## 目标
6+
7+
建立 Epoch(时代)→ Era(纪元)→ SubEra(子纪元)三层树状层级结构,实现元数据的向上继承解析。
8+
9+
## 已实现组件
10+
11+
### 数据模型 (`models/eraTheme/`)
12+
13+
- **`types.ts`** - 定义 `EraNode``EraColors``EraTypography``EraUIStyle``EraPromptVars``EraRealmConfig` 等核心类型
14+
- **`assembly.ts`** - 核心继承解析函数 `resolveEraNode(id)`
15+
- 从节点自身向根节点遍历(path 是 `[root, ..., leaf]`
16+
- `getFirstDefined(getter)` 从叶向根查找第一个定义的字段值
17+
- `getNodeOnly(getter)` 仅返回节点自身定义的字段(用于 openingScenes、characterArchetypes、writingSamples 等叶子专属数据)
18+
- `sources[]` 数组记录每个继承字段的来源节点 ID
19+
- **7 个 Epoch 文件** - `epoch-primordial``epoch-ancient``epoch-modern``epoch-contemporary``epoch-near-future``epoch-far-future``epoch-post-human`
20+
- **`assembly.test.ts`** - 39 个测试用例覆盖:
21+
- 树形关系完整性(parent 引用校验、3 层路径校验)
22+
- SubEra 必填字段校验(colors、typography、uiStyle、promptVars)
23+
- 颜色值有效性(hex 或 RGB 字符串格式)
24+
- 继承覆盖完整性(sources 数组、节点自身覆盖优先、liMode 继承)
25+
- UI Copy 一致性
26+
27+
### 继承字段分类
28+
29+
| 字段 | 继承方式 | 说明 |
30+
|------|---------|------|
31+
| `colors` | 最近覆盖 | Epoch → Era → SubEra,最近的定义胜出 |
32+
| `typography` | 最近覆盖 | 同上 |
33+
| `uiStyle` | 最近覆盖 | 同上 |
34+
| `bgmTags` | 最近覆盖 | 同上 |
35+
| `artStyle` | 最近覆盖 | 同上 |
36+
| `promptVars` | 最近覆盖 | 同上 |
37+
| `conflictTypes` | 最近覆盖 | 同上 |
38+
| `liMode` | 最近覆盖 | 同上 |
39+
| `realm` | 最近覆盖 | 同上 |
40+
| `openingScenes` | 仅自身 | 不继承,只使用节点自身定义 |
41+
| `characterArchetypes` | 仅自身 | 同上 |
42+
| `writingSamples` | 仅自身 | 同上 |
43+
| `uiCopy` | 仅自身 | 同上 |
44+
45+
### 消费者(已集成)
46+
47+
- `prompts/runtime/eraTheme.ts` - `构建时代主题注入``构建时代角色原型注入``构建时代文风注入`
48+
- `prompts/runtime/eraLiMode.ts` - 使用 `resolveEraNode` 获取里模式配置
49+
- `prompts/runtime/eraOpeningScene.ts` - 使用 `resolveEraNode` 获取开局场景
50+
- `components/features/NewGame/useNewGameWizardState.ts` - 新建游戏向导使用 `resolveEraNode` 解析时代配置
51+
- `utils/gameSettings.ts` - 游戏设置使用 `resolveEraNode` 解析里模式名称
52+
53+
### 向后兼容
54+
55+
- `getEraById()` 包含 legacy ID 映射表(`era_ancient_wuxia``ancient_eastern_wuxia` 等)
56+
- `时代主题方案列表``获取时代主题方案()` 旧接口仍然可用
57+
58+
## 测试验证
59+
60+
```bash
61+
npx vitest run models/eraTheme/assembly.test.ts
62+
# ✓ 39 tests passed
63+
```
64+
65+
## 构建验证
66+
67+
```bash
68+
npm run build
69+
# ✓ built in ~9.6s
70+
```

0 commit comments

Comments
 (0)