Extra2D/Extra2D/include/extra2d/core/module.h

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