docs: add Editor API documentation
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# EntityCommands
|
||||
|
||||
**命名空间**: `XCEngine::Editor::Commands`
|
||||
|
||||
**类型**: `header-helper`
|
||||
|
||||
**源文件**: `editor/src/Commands/EntityCommands.h`
|
||||
|
||||
**描述**: 封装实体创建、重命名、删除、复制粘贴、重复和父子重挂接等场景编辑命令。
|
||||
|
||||
## 概述
|
||||
|
||||
`EntityCommands` 是当前 Scene 编辑工作流里最重要的一层命令辅助。
|
||||
Hierarchy 面板、Edit 菜单和快捷键触发的实体级操作,最终大多落到这里。
|
||||
|
||||
当前覆盖:
|
||||
|
||||
- 创建空实体、Camera、Light
|
||||
- 重命名与删除实体
|
||||
- 复制、粘贴、重复实体
|
||||
- 重挂接父节点并尽量保持世界变换
|
||||
- 从父节点分离实体
|
||||
|
||||
## 当前实现
|
||||
|
||||
- 结构性修改统一通过 [`UndoUtils::ExecuteSceneCommand`](../../Utils/UndoUtils/UndoUtils.md) 包装
|
||||
- 创建实体后会自动把新实体设置为当前选中对象
|
||||
- `CreateCameraEntity` 与 `CreateLightEntity` 会附加对应组件
|
||||
- `CanReparentEntity` 会阻止把对象挂到自己的子孙节点下
|
||||
- `ReparentEntityPreserveWorldTransform` 会缓存当前位置、旋转和缩放,再执行 `MoveEntity`
|
||||
|
||||
## 设计说明
|
||||
|
||||
把实体编辑动作做成独立命令层,是编辑器架构里非常关键的一步。
|
||||
如果直接在 Hierarchy 面板里 `CreateEntity`、`DeleteEntity`、`MoveEntity`,会很快遇到三个问题:
|
||||
|
||||
- 撤销历史无法统一
|
||||
- 菜单栏、快捷键、右键菜单会重复同一逻辑
|
||||
- 结构修改和 UI 交互代码缠在一起
|
||||
|
||||
`EntityCommands` 把“编辑行为语义”稳定下来,面板和 router 只需要负责调用它。
|
||||
|
||||
## 当前限制
|
||||
|
||||
- `CreateCubeEntity` / `CreateSphereEntity` / `CreatePlaneEntity` 在当前路由中实际上还是创建命名后的空实体,不会自动生成渲染组件
|
||||
- 粘贴和重复的深拷贝语义完全依赖 `ISceneManager` 当前实现
|
||||
- 多实体批量命令尚未覆盖
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [Commands](../Commands.md)
|
||||
- [HierarchyActionRouter](../../Actions/HierarchyActionRouter/HierarchyActionRouter.md)
|
||||
- [SceneManager](../../Managers/SceneManager/SceneManager.md)
|
||||
- [UndoUtils](../../Utils/UndoUtils/UndoUtils.md)
|
||||
Reference in New Issue
Block a user