Files
XCEngine/docs/plan/Editor重构3.26.md

166 lines
5.5 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.
# Editor 重构 3.26
## 当前判断
截至 2026-03-27如果只看 editor 的 UI 架构与编辑器壳层整理,不把 `Viewport / RHI``Scene / Game` 的真实内容算进去,这一轮重构大约已经完成 **96%**
如果把“编辑器整体可用度”一起算进去,则仍然没有结束,因为:
- `Scene` panel 仍然是空壳。
- `Game` panel 仍然是空壳。
- `Viewport` 尚未跟随 RHI 重构完成回归。
所以现在的真实状态是:
- **UI 架构已经基本收稳**
- **编辑器产品功能还没有做完**
## 已经完成的核心重构
### 1. 分层已经基本建立
当前 editor 已经形成比较稳定的职责划分:
- `UI` 负责主题、token、共享控件、popup、property-grid。
- `Actions` 负责菜单、快捷键、右键菜单、按钮动作的共享路由。
- `Commands` 负责 scene/project/entity/component 的编辑行为。
- `Layout` 负责 dock host、默认布局、布局重置与持久化。
- `Panels` 逐步退化为窗口壳层。
- `Core / Managers` 负责 editor context、selection、undo、scene、project 等共享状态。
- `ComponentEditors` 负责 inspector 中各组件的编辑器与注册体系。
这说明 editor 已经从“每个 panel 自己堆逻辑”的结构,切换到“共享层驱动”的结构。
### 2. 共享 UI 基础层已经落稳
已经把大量原先散落在 panel 内部的视觉和控件逻辑收口到 shared UI 层,包括:
- 主题和样式 token
- panel chrome
- toolbar/search/button
- popup / modal state
- empty state
- asset tile
- hierarchy tree node
- component section
- property grid / scalar / vector 编辑控件
这部分的意义是:后面再调 editor 外观,不应该回到 panel 内部逐个修补。
### 3. Action 路由已经成型
当前已形成两条主路由:
- `MainMenuActionRouter`
- `EditActionRouter`
并且 `Hierarchy / Project / Inspector / Console / MenuBar` 的主要菜单和快捷键语义已经接入共享 action/router。
当前已经做到:
- `Edit` 菜单不再只是一套写死逻辑,而是跟随 active action route 切换。
- menu / shortcut / context menu / toolbar 的动作开始共用同一套 action 定义。
- rename、popup、about、exit、reset layout 等交互已不再零散写在 panel 内部。
### 4. Commands 层已经承担主要编辑语义
当前主要编辑行为已进入 command 层:
- 新建 / 打开 / 保存场景
- 脏场景 fallback 保存
- 创建 / 删除 / 复制 / 粘贴 / duplicate / rename / reparent entity
- 创建文件夹 / 删除资源 / 打开资源 / 移动资源
- 添加 / 删除组件
同时undo / dirty / selection reset 等关键边界,已经尽量不再散落在 panel。
### 5. Dock / Workspace / Application 壳层已收口
当前已经完成:
- `EditorWorkspace` 统一 panel 装配与生命周期调度
- `DockLayoutController` 统一 dockspace 和 layout reset
- ImGui layout 持久化到项目 `.xceditor/imgui_layout.ini`
- `Application.cpp` 中的窗口、renderer、ImGui session、layer attach/detach 已完成明显拆分
这说明 editor 顶层壳层已经不再像之前那样把 UI、layout、backend、panel 生命周期混在一起。
### 6. Inspector 的 ComponentEditor 注册体系已稳定
当前 inspector 不再直接硬编码全部组件逻辑,而是通过:
- `IComponentEditor`
- `ComponentEditorRegistry`
- 各具体 `Transform / Camera / Light` component editor
来统一:
- 组件显示
- Add Component 菜单构建
- 组件可添加性 / 可删除性判断
这部分已经是后续扩展自定义组件 inspector 的正确落点。
### 7. 回归测试基础已补齐
当前已新增 `editor_tests`,并已覆盖关键 editor 行为,包括:
- hierarchy edit route 的 copy / paste / duplicate / delete / rename request
- project edit route 的 open / back / delete
- scene dirty save + load 后的 selection / undo reset
- reparent 时的 parent 切换、cycle 拦截与 world transform 保持
- main menu 的 exit / reset layout / about popup request
- hierarchy rename helper
- project create-folder / move-asset / open-folder helper
本轮收尾继续补充后,测试会进一步覆盖:
- clean scene 下的新建场景重置行为
- clean scene 下 fallback save 的 no-op 路径
- project move-asset 的非法输入保护
## 当前仍然剩下什么
### 架构收尾项
1. 继续压缩少量 panel 本地瞬时状态
目标是把还能共享的 popup / router / state 再往 shared 层收一点。
2. 继续补 editor 回归测试
重点补 command/router 边界,而不是 UI 像素测试。
3. 为 viewport 回归保留 editor shell 接口
但暂时不把 RHI/renderer 接进来。
### 暂缓项
以下内容不计入当前这一轮 UI 架构收尾:
- `Scene` panel 真正内容
- `Game` panel 真正内容
- `Viewport` 渲染接入
原因不是不做,而是这些工作和 renderer / RHI 重构直接绑定,应该放到后续阶段。
## 本轮新增文档
本次已补正式架构说明:
- `docs/plan/Editor架构说明.md`
这个文档用于明确:
- 各层职责边界
- 允许依赖方向
- panel / action / command / manager / component editor 的落点规则
- event bus、undo、dirty、selection 的统一约定
## 阶段性结论
当前 editor 可以明确地说:
- **UI 架构层面已经基本重构完成**
- **剩余主要是封口、验证和后续 viewport 接入准备**
也就是说,后面不应该再回到“看到一个 panel 问题就地补一段特殊逻辑”的方式,而应该继续沿着现有分层做增量完善。