70 lines
1.6 KiB
C
70 lines
1.6 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <types/base/types.h>
|
|||
|
|
|
|||
|
|
namespace extra2d {
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 模块类型枚举
|
|||
|
|
*/
|
|||
|
|
enum class ModuleType : uint8 {
|
|||
|
|
Core, // 核心模块(必须)
|
|||
|
|
System, // 系统模块(平台相关)
|
|||
|
|
Feature, // 功能模块
|
|||
|
|
Extension // 扩展模块
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 模块接口 - 基于事件总线
|
|||
|
|
*
|
|||
|
|
* 模块不再通过虚函数被调用,而是通过监听事件响应
|
|||
|
|
* 模块可以发送事件,但不应直接调用其他模块
|
|||
|
|
*
|
|||
|
|
* 设计理念:
|
|||
|
|
* - 模块是引擎的内置组件,在编译时确定
|
|||
|
|
* - 模块之间通过事件总线通信,零直接依赖
|
|||
|
|
* - 模块的生命周期由 ModuleRegistry 管理
|
|||
|
|
*/
|
|||
|
|
class IModule {
|
|||
|
|
public:
|
|||
|
|
virtual ~IModule() = default;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取模块名称
|
|||
|
|
* @return 模块唯一标识名
|
|||
|
|
*/
|
|||
|
|
virtual const char* name() const = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取模块类型
|
|||
|
|
* @return 模块类型,用于分类和优先级管理
|
|||
|
|
*/
|
|||
|
|
virtual ModuleType type() const { return ModuleType::Feature; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取模块优先级
|
|||
|
|
* @return 优先级数值,越小优先级越高
|
|||
|
|
*/
|
|||
|
|
virtual int priority() const { return 0; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 初始化模块
|
|||
|
|
*
|
|||
|
|
* 在此注册事件监听器
|
|||
|
|
* 返回 false 表示初始化失败,引擎将停止
|
|||
|
|
*
|
|||
|
|
* @return 初始化是否成功
|
|||
|
|
*/
|
|||
|
|
virtual bool init() { return true; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 关闭模块
|
|||
|
|
*
|
|||
|
|
* 在此执行清理工作
|
|||
|
|
* 事件监听器会自动注销(RAII)
|
|||
|
|
*/
|
|||
|
|
virtual void shutdown() {}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
} // namespace extra2d
|