77 lines
1.5 KiB
C++
77 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <extra2d/core/types.h>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <typeindex>
|
|
|
|
namespace extra2d {
|
|
|
|
class Application;
|
|
|
|
/**
|
|
* @brief 模块基类
|
|
* 所有模块必须继承此类
|
|
*/
|
|
class Module {
|
|
public:
|
|
virtual ~Module() = default;
|
|
|
|
/**
|
|
* @brief 初始化模块
|
|
* @return 初始化成功返回 true
|
|
*/
|
|
virtual bool init() = 0;
|
|
|
|
/**
|
|
* @brief 关闭模块
|
|
*/
|
|
virtual void shutdown() = 0;
|
|
|
|
/**
|
|
* @brief 检查模块是否已初始化
|
|
* @return 已初始化返回 true
|
|
*/
|
|
virtual bool ok() const = 0;
|
|
|
|
/**
|
|
* @brief 获取模块名称
|
|
* @return 模块名称
|
|
*/
|
|
virtual const char* name() const = 0;
|
|
|
|
/**
|
|
* @brief 获取模块优先级(数值越小越优先)
|
|
* @return 优先级值
|
|
*/
|
|
virtual int priority() const { return 100; }
|
|
|
|
/**
|
|
* @brief 获取模块依赖列表
|
|
* @return 依赖模块类型列表
|
|
*/
|
|
virtual std::vector<std::type_index> deps() const { return {}; }
|
|
|
|
/**
|
|
* @brief 设置所属Application
|
|
* @param app Application指针
|
|
*/
|
|
void setApp(class Application* app) { app_ = app; }
|
|
|
|
/**
|
|
* @brief 获取Application
|
|
* @return Application指针
|
|
*/
|
|
class Application* app() const { return app_; }
|
|
|
|
protected:
|
|
class Application* app_ = nullptr;
|
|
};
|
|
|
|
/**
|
|
* @brief 模块工厂函数类型
|
|
*/
|
|
using ModuleFactory = std::function<UniquePtr<Module>()>;
|
|
|
|
} // namespace extra2d
|