2.7 KiB
2.7 KiB
Layer
命名空间: XCEngine::Core
类型: class
头文件: XCEngine/Core/Layer.h
描述: 一个轻量 Layer 基类,定义 attach、detach、update、event 和 ImGui 渲染钩子。
角色概述
Layer 代表一种经典应用框架式组织单元。它和 Unity 的 MonoBehaviour 或场景组件不是一回事,更像是:
- 应用层 / 编辑器层 / overlay 层的逻辑片段
- 由 LayerStack 排序和驱动
这种模式在编辑器、工具程序和引擎壳层中很常见,因为它把“功能模块的生命周期”和“场景对象组件系统”分离开了。
当前实现行为
1. 这是一个纯虚拟钩子基类
除构造、析构和 getName() 外,所有行为方法都是默认 no-op:
onAttach()onDetach()onUpdate(float dt)onEvent(void* event)onImGuiRender()
这说明它本质上是一个扩展接口,而不是自带逻辑的运行时类型。
2. 事件接口当前是弱类型
onEvent(void* event) 只接收 void*。这意味着:
- 当前 Layer 系统没有自己的强类型事件层
- 使用者需要自己知道传入的 event 指针语义
和现代商业引擎里更强类型的事件包装相比,这是一种更轻但也更脆弱的做法。
3. 命名风格有历史痕迹
这些接口使用的是 lowerCamelCase:
onAttachonDetachonUpdate
而项目里很多别的模块更偏 PascalCase 风格。这通常意味着它来自更偏应用框架/编辑器壳层的一套约定,而不是当前全局统一风格的代表。
当前代码库中的使用情况
在当前取证范围内,没有看到 Layer / LayerStack 在 engine/src 里形成大规模实际调用链。也就是说:
- API 形状已经明确
- 但它目前更像基础框架预留能力,而不是已广泛深入主运行时的核心机制
线程语义
- 当前基类不提供线程安全保证。
- 所有钩子的典型使用方式都应视为由外部主循环串行驱动。
当前实现限制
onEvent(void*)是弱类型接口。- 基类不提供 enabled/disabled、priority 或 attach state 管理。
- 没有看到直接测试覆盖。