Frostbite2D/Fostbite2D/include/fostbite2D/module/module.h

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