#pragma once #include #include #include #include namespace extra2d::events { /** * @brief 引擎事件总线 */ DECLARE_EVENT_BUS(Engine) // ============================================================================ // 应用生命周期事件 // ============================================================================ /** * @brief 应用初始化完成事件 */ DECLARE_EVENT_0(OnInit, Engine) /** * @brief 应用关闭事件 */ DECLARE_EVENT_0(OnShutdown, Engine) /** * @brief 应用暂停事件 */ DECLARE_EVENT_0(OnPause, Engine) /** * @brief 应用恢复事件 */ DECLARE_EVENT_0(OnResume, Engine) /** * @brief 帧更新事件 * @param dt 帧间隔时间 */ DECLARE_EVENT_1(OnUpdate, Engine, float) /** * @brief 帧更新后事件 * @param dt 帧间隔时间 */ DECLARE_EVENT_1(OnLateUpdate, Engine, float) /** * @brief 固定更新事件 * @param dt 固定时间步长 */ DECLARE_EVENT_1(OnFixedUpdate, Engine, float) // ============================================================================ // 窗口事件 // ============================================================================ /** * @brief 窗口大小改变事件 * @param width 新宽度 * @param height 新高度 */ DECLARE_EVENT_2(OnResize, Engine, int32, int32) /** * @brief 窗口关闭事件 */ DECLARE_EVENT_0(OnClose, Engine) /** * @brief 窗口获得焦点事件 */ DECLARE_EVENT_0(OnFocus, Engine) /** * @brief 窗口失去焦点事件 */ DECLARE_EVENT_0(OnBlur, Engine) /** * @brief 模块配置事件(模板事件,支持任意配置类型) * * 使用示例: * // 发送 AppConfig * OnModuleConfig::emit(config); * * // 发送其他配置 * struct RenderConfig { int width, height; }; * OnModuleConfig::emit(renderConfig); */ DECLARE_EVENT_T(OnModuleConfig, Engine) /** * @brief 窗口显示事件 */ DECLARE_EVENT_0(OnShow, Engine) /** * @brief 窗口隐藏事件 */ DECLARE_EVENT_0(OnHide, Engine) // ============================================================================ // 输入事件 // ============================================================================ /** * @brief 键盘按下事件 * @param key 按键码 */ DECLARE_EVENT_1(OnKeyDown, Engine, int32) /** * @brief 键盘释放事件 * @param key 按键码 */ DECLARE_EVENT_1(OnKeyUp, Engine, int32) /** * @brief 鼠标按下事件 * @param button 鼠标按键 * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_3(OnMouseDown, Engine, int32, int32, int32) /** * @brief 鼠标释放事件 * @param button 鼠标按键 * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_3(OnMouseUp, Engine, int32, int32, int32) /** * @brief 鼠标移动事件 * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_2(OnMouseMove, Engine, int32, int32) /** * @brief 鼠标滚轮事件 * @param delta 滚轮增量 */ DECLARE_EVENT_1(OnMouseWheel, Engine, int32) /** * @brief 触摸开始事件 * @param touchId 触摸点ID * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_3(OnTouchBegin, Engine, int32, int32, int32) /** * @brief 触摸移动事件 * @param touchId 触摸点ID * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_3(OnTouchMove, Engine, int32, int32, int32) /** * @brief 触摸结束事件 * @param touchId 触摸点ID * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_3(OnTouchEnd, Engine, int32, int32, int32) /** * @brief 触摸取消事件 * @param touchId 触摸点ID * @param x X 坐标 * @param y Y 坐标 */ DECLARE_EVENT_3(OnTouchCancel, Engine, int32, int32, int32) /** * @brief 游戏手柄连接事件 * @param deviceId 设备ID */ DECLARE_EVENT_1(OnGamepadConnect, Engine, int32) /** * @brief 游戏手柄断开事件 * @param deviceId 设备ID */ DECLARE_EVENT_1(OnGamepadDisconnect, Engine, int32) // ============================================================================ // 场景事件 // ============================================================================ /** * @brief 场景加载完成事件 */ DECLARE_EVENT_0(OnSceneLoad, Engine) /** * @brief 场景卸载事件 */ DECLARE_EVENT_0(OnSceneUnload, Engine) // ============================================================================ // 系统事件 // ============================================================================ /** * @brief 低内存警告事件 */ DECLARE_EVENT_0(OnLowMemory, Engine) /** * @brief 进入后台事件 */ DECLARE_EVENT_0(OnEnterBackground, Engine) /** * @brief 进入前台事件 */ DECLARE_EVENT_0(OnEnterForeground, Engine) // ============================================================================ // 渲染事件 // ============================================================================ /** * @brief 渲染开始事件 * * 在渲染帧开始时触发,渲染器应清空命令缓冲区 */ DECLARE_EVENT_0(OnRenderBegin, Engine) /** * @brief 渲染提交事件 * * 场景图模块通过此事件提交渲染命令 * @param cmd 渲染命令 */ DECLARE_EVENT_1(OnRenderSubmit, Engine, extra2d::RenderCommand) /** * @brief 渲染设置相机事件 * * 场景图模块通过此事件设置相机矩阵 * @param viewProjection 视图投影矩阵 */ DECLARE_EVENT_1(OnRenderSetCamera, Engine, extra2d::Mat4) /** * @brief 渲染结束事件 * * 在渲染帧结束时触发,渲染器执行所有收集的命令 */ DECLARE_EVENT_0(OnRenderEnd, Engine) /** * @brief 渲染呈现事件 * * 在渲染完成并准备好呈现时触发,窗口模块应调用 swapBuffers */ DECLARE_EVENT_0(OnRenderPresent, Engine) } // namespace extra2d::events