Files
template/docs/intermediate/data-state-overview.md
T
AncTe 627a40bc4b docs(10-03): write data-state-overview, hero-attribute, hero-items
- 数据端总览:state 入口、常用对象表与 L0-L3 分层标注
- 勇士属性:基础/最终属性、修饰器、save 语义、只读与试算
- 勇士道具:四种类别区分与 addItem/useItem/iterateItems 等接口
2026-10-17 18:00:04 +08:00

65 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据端总览
数据端的一切都从主对象 `state` 开始。本篇列出作者最常需要的对象与接口,并说明如何从 `state` 拿到它们,作为中级教程其余篇章的查表入口。
## state:一切入口
`state` 是数据端的主对象(类型为 `ICoreState`),地图、勇士、怪物、战斗、Flag 等全部挂在它下面。在数据端代码里,它通常由框架传入——例如道具效果拿到 `(item, state)`、插件拿到 `state`;你也可以从任一数据端对象向外取得它。
```ts
// 从 state 出发访问勇士、地图与 Flag
const hp = state.hero.attribute.getFinalAttribute('hp');
const floorId = state.hero.location.floorId;
const cleared = state.flags.getFieldValue('cleared');
```
## 常用对象与获取方式
下表把最常用的对象与接口列在一起:
| 对象 | 获取方式 | 用途 | 分层 |
| --- | --- | --- | --- |
| `hero` | `state.hero` | 勇士状态(属性、道具、装备、位置) | L1 |
| `maps` | `state.maps` | 楼层集合与楼层激活 | L1 |
| `flags` | `state.flags` | 全局可存档变量 | L1 |
| `enemyManager` | `state.enemyManager` | 怪物创建与查询 | L1 |
| `enemyContext` | `state.enemyContext` | 怪物属性构建与光环 | L2 |
| `combat` | `state.combat` | 战斗流程 | L2 |
| `eventSystem` | `state.eventSystem` | 地图事件执行 | L2 |
| `pathfinding` | `state.pathfinding` | 勇士寻路 | L2 |
| `tileStore` | `state.tileStore` | 图块定义存储 | L0 |
| `itemStore` | `state.itemStore` | 道具定义存储 | L0 |
| `mapStore` | `state.mapStore` | 地图定义存储 | L0 |
| `eventStore` | `state.eventStore` | 游戏事件存储 | L0 |
| `faceManager` | `state.faceManager` | 朝向管理 | L0 |
| `roleFace` | `state.roleFace` | 朝向绑定 | L0 |
| `replaySystem` | `state.replaySystem` | 录像系统 | L0 |
| `loader` | `state.loader` | 数据端加载对象 | L3 |
| `loadManager` | `state.loadManager` | 加载管理器 | L3 |
| `getDataPlugin(id)` | `state.getDataPlugin('xxx')` | 取得已加装的插件 | L3 |
| `emitTip(...)` | `state.emitTip('提示')` | 通知渲染端提示 | L0 |
```ts
const plugin = state.getDataPlugin('main');
state.emitTip('获得黄钥匙');
```
## 分层标注(L0–L3)
上表的「分层」列标注了对象所属的模块层级:L0 公共层、L1 数据层、L2 系统层、L3 顶层。分层的意义在于区分「哪些内容会进存档」「哪些内容负责产生动作」,但**不影响你如何使用它们**——所有对象都能从 `state` 直接访问,调用方式完全一致。
```ts
// 无论哪个分层,访问方式都相同
state.flags.setFieldValue('door-open', true); // L1
const map = state.maps.getActiveMap('floor-1'); // L1
state.emitTip('获得黄钥匙'); // L0
```
## 从这里继续
- 勇士的数值与加成:见[勇士属性](./hero-attribute.md);
- 勇士的道具与装备:见[勇士道具](./hero-items.md);
- 地图的层次结构:见[地图结构](./map-structure.md);
- 全局可存档变量:见[Flag 变量](./flags.md);
- 在关键动作上挂接处理:见[钩子](./hooks.md)。