import type { Core } from '../Core'; import type { ServiceContainer } from './ServiceContainer'; /** * 插件状态 */ export enum PluginState { /** * 未安装 */ NotInstalled = 'not_installed', /** * 已安装 */ Installed = 'installed', /** * 安装失败 */ Failed = 'failed' } /** * 插件接口 * * 所有插件都必须实现此接口。 * 插件提供了一种扩展框架功能的标准方式。 * * @example * ```typescript * class MyPlugin implements IPlugin { * readonly name = 'my-plugin'; * readonly version = '1.0.0'; * readonly dependencies = ['other-plugin']; * * async install(core: Core, services: ServiceContainer) { * // 注册服务 * services.registerSingleton(MyService); * * // 添加系统 * const world = core.getWorld(); * if (world) { * world.addSystem(new MySystem()); * } * } * * async uninstall() { * // 清理资源 * } * } * ``` */ export interface IPlugin { /** * 插件唯一名称 * * 用于依赖解析和插件管理。 */ readonly name: string; /** * 插件版本 * * 遵循语义化版本规范 (semver)。 */ readonly version: string; /** * 依赖的其他插件名称列表 * * 这些插件必须在当前插件之前安装。 */ readonly dependencies?: readonly string[]; /** * 安装插件 * * 在此方法中初始化插件,注册服务、系统等。 * 可以是同步或异步的。 * * @param core - Core实例,用于访问World等 * @param services - 服务容器,用于注册服务 */ install(core: Core, services: ServiceContainer): void | Promise; /** * 卸载插件 * * 清理插件占用的资源。 * 可以是同步或异步的。 */ uninstall(): void | Promise; } /** * 插件元数据 */ export interface IPluginMetadata { /** * 插件名称 */ name: string; /** * 插件版本 */ version: string; /** * 插件状态 */ state: PluginState; /** * 安装时间戳 */ installedAt?: number; /** * 错误信息(如果安装失败) */ error?: string; }