#pragma once namespace frostbite2D { /** * @brief 模块基类 * 所有模块只需继承此类,实现需要的生命周期方法 */ class Module { public: /** * @brief 虚析构函数 */ virtual ~Module() = default; /** * @brief 设置模块(初始化) * 在 Application::run() 开始前调用 */ virtual void setupModule() {} /** * @brief 销毁模块 * 在 Application 关闭时调用 */ virtual void destroyModule() {} /** * @brief 更新时 * 每帧调用 * @param ctx 更新上下文 */ virtual void onUpdate() { } /** * @brief 渲染前 * 在渲染开始前调用 * @param ctx 渲染上下文 */ virtual void beforeRender() { } /** * @brief 渲染时 * 在渲染阶段调用 * @param ctx 渲染上下文 */ virtual void onRender() {} /** * @brief 渲染后 * 在渲染完成后调用 * @param ctx 渲染上下文 */ virtual void afterRender() { } /** * @brief 事件处理 * 处理系统事件 * @param ctx 事件上下文 */ virtual void handleEvent() { } /** * @brief 获取模块名称 * @return 模块名称字符串 */ virtual const char *getName() const = 0; /** * @brief 获取模块优先级 * 数值越小越先执行 * @return 优先级值 */ virtual int getPriority() const { return 0; } /** * @brief 检查模块是否已初始化 * @return 已初始化返回 true */ bool isInitialized() const { return initialized_; } protected: friend class Application; /** * @brief 设置初始化状态 * @param initialized 初始化状态 */ void setInitialized(bool initialized) { initialized_ = initialized; } bool initialized_ = false; }; } // namespace frostbite2D