93 lines
1.7 KiB
C++
93 lines
1.7 KiB
C++
#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
|