// // EditorContext:Editor 层与 SandboxApp 之间的桥接上下文。 // // Editor 是 App 层代码(不属于引擎),它需要的引擎门面与沙盒能力 // 全部经此聚合注入——面板只认识 EditorContext,不反向依赖 main.cpp。 // #ifndef HELLOVULKAN_EDITORCONTEXT_H #define HELLOVULKAN_EDITORCONTEXT_H #include #include #include #include #include #include // kDisplayViewport / kDisplayDirect #include class MaterialEditorPanel; // 面板间联动通道(Details 双击槽位 / Content // Browser 双击 .material → 打开材质编辑器) class ControllerEditorPanel; // Details Controller 槽 Edit → 打开控制器编辑器 // 沙盒特有状态(面板可选读取,空指针 = 该面板区块不显示) struct EditorContext { // 引擎门面 Engine::Renderer *renderer = nullptr; Engine::ECS::Scene *scene = nullptr; Engine::Assets::AssetManager *assets = nullptr; Engine::Application *app = nullptr; // 编辑器相机(Scene view 专用,归 Renderer 持有——与场景相机实体 // 无关;面板经此做 F 焦点/Gizmo 视图/对齐跳转) Engine::EditorCamera *editorCamera = nullptr; // 材质编辑器面板(Editor 持有;指派/编辑分离的联动入口) MaterialEditorPanel *materialEditor = nullptr; // 控制器编辑器面板(Editor 持有;指派/编辑分离的联动入口) ControllerEditorPanel *controllerEditor = nullptr; // 当前选中实体(Controller 编辑器 Preview 的驱动目标) entt::entity *selected = nullptr; // PIE 运行态(Play-In-Editor):Editor 持有,只读指针。 // 面板门控用——运行态禁 Gizmo/编辑器热键,渲染源已是 primary 相机 const bool *playState = nullptr; // PIE 暂停态(timeScale=0):Editor 持有,只读指针(视口 PAUSED 提示) const bool *pausedState = nullptr; }; #endif //HELLOVULKAN_EDITORCONTEXT_H