UNPKG

@esengine/ecs-framework

Version:

用于Laya、Cocos Creator等JavaScript游戏引擎的高性能ECS框架

2,272 lines (2,254 loc) 197 kB
/** * @esengine/ecs-framework v2.1.47 * TypeScript definitions */ /** * 全局管理器的基类。所有全局管理器都应该从此类继承。 */ declare class GlobalManager { /** * 表示管理器是否启用 */ _enabled: boolean; /** * 获取或设置管理器是否启用 */ get enabled(): boolean; set enabled(value: boolean); /** * 设置管理器是否启用 * @param isEnabled 如果为true,则启用管理器;否则禁用管理器 */ setEnabled(isEnabled: boolean): void; /** * 在启用管理器时调用的回调方法 */ protected onEnabled(): void; /** * 在禁用管理器时调用的回调方法 */ protected onDisabled(): void; /** * 更新管理器状态的方法 */ update(): void; } interface ITimer<TContext = unknown> { context: TContext; /** * 调用stop以停止此计时器再次运行。这对非重复计时器没有影响。 */ stop(): void; /** * 将计时器的运行时间重置为0 */ reset(): void; /** * 返回投向T的上下文,作为方便 */ getContext<T>(): T; } /** * 私有类隐藏ITimer的实现 */ declare class Timer<TContext = unknown> implements ITimer<TContext> { context: TContext; _timeInSeconds: number; _repeats: boolean; _onTime: (timer: ITimer<TContext>) => void; _isDone: boolean; _elapsedTime: number; getContext<T>(): T; /** * 定时器是否已完成 */ get isDone(): boolean; /** * 定时器已运行的时间 */ get elapsedTime(): number; reset(): void; stop(): void; tick(): boolean; initialize(timeInsSeconds: number, repeats: boolean, context: TContext, onTime: (timer: ITimer<TContext>) => void): void; /** * 空出对象引用,以便在js需要时GC可以清理它们的引用 */ unload(): void; } /** * 允许动作的延迟和重复执行 */ declare class TimerManager extends GlobalManager { _timers: Array<Timer<unknown>>; update(): void; /** * 调度一个一次性或重复的计时器,该计时器将调用已传递的动作 * @param timeInSeconds * @param repeats * @param context * @param onTime */ schedule<TContext = unknown>(timeInSeconds: number, repeats: boolean, context: TContext, onTime: (timer: ITimer<TContext>) => void): Timer<TContext>; } /** * 性能监控数据 */ interface PerformanceData { /** 系统名称 */ name: string; /** 执行时间(毫秒) */ executionTime: number; /** 处理的实体数量 */ entityCount: number; /** 平均每个实体的处理时间 */ averageTimePerEntity: number; /** 最后更新时间戳 */ lastUpdateTime: number; /** 内存使用量(字节) */ memoryUsage?: number; /** CPU使用率(百分比) */ cpuUsage?: number; } /** * 性能统计信息 */ interface PerformanceStats { /** 总执行时间 */ totalTime: number; /** 平均执行时间 */ averageTime: number; /** 最小执行时间 */ minTime: number; /** 最大执行时间 */ maxTime: number; /** 执行次数 */ executionCount: number; /** 最近的执行时间列表 */ recentTimes: number[]; /** 标准差 */ standardDeviation: number; /** 95百分位数 */ percentile95: number; /** 99百分位数 */ percentile99: number; } /** * 性能警告类型 */ declare enum PerformanceWarningType { HIGH_EXECUTION_TIME = "high_execution_time", HIGH_MEMORY_USAGE = "high_memory_usage", HIGH_CPU_USAGE = "high_cpu_usage", FREQUENT_GC = "frequent_gc", LOW_FPS = "low_fps", HIGH_ENTITY_COUNT = "high_entity_count" } /** * 性能警告 */ interface PerformanceWarning { type: PerformanceWarningType; systemName: string; message: string; severity: 'low' | 'medium' | 'high' | 'critical'; timestamp: number; value: number; threshold: number; suggestion?: string; } /** * 性能阈值配置 */ interface PerformanceThresholds { /** 执行时间阈值(毫秒) */ executionTime: { warning: number; critical: number; }; /** 内存使用阈值(MB) */ memoryUsage: { warning: number; critical: number; }; /** CPU使用率阈值(百分比) */ cpuUsage: { warning: number; critical: number; }; /** FPS阈值 */ fps: { warning: number; critical: number; }; /** 实体数量阈值 */ entityCount: { warning: number; critical: number; }; } /** * 高性能监控器 * 用于监控ECS系统的性能表现,提供详细的分析和优化建议 */ declare class PerformanceMonitor { private static _instance; private _systemData; private _systemStats; private _warnings; private _isEnabled; private _maxRecentSamples; private _maxWarnings; private _thresholds; private _fpsHistory; private _lastFrameTime; private _frameCount; private _fpsUpdateInterval; private _lastFpsUpdate; private _currentFps; private _memoryCheckInterval; private _lastMemoryCheck; private _memoryHistory; private _gcCount; private _lastGcCheck; private _gcCheckInterval; /** * 获取单例实例 */ static get instance(): PerformanceMonitor; private constructor(); /** * 启用性能监控 */ enable(): void; /** * 禁用性能监控 */ disable(): void; /** * 检查是否启用了性能监控 */ get isEnabled(): boolean; /** * 开始监控系统性能 * @param systemName 系统名称 * @returns 开始时间戳 */ startMonitoring(systemName: string): number; /** * 结束监控并记录性能数据 * @param systemName 系统名称 * @param startTime 开始时间戳 * @param entityCount 处理的实体数量 */ endMonitoring(systemName: string, startTime: number, entityCount?: number): void; /** * 更新系统统计信息 * @param systemName 系统名称 * @param executionTime 执行时间 */ private updateStats; /** * 计算高级统计信息 * @param stats 统计信息对象 */ private calculateAdvancedStats; /** * 获取系统的当前性能数据 * @param systemName 系统名称 * @returns 性能数据或undefined */ getSystemData(systemName: string): PerformanceData | undefined; /** * 获取系统的统计信息 * @param systemName 系统名称 * @returns 统计信息或undefined */ getSystemStats(systemName: string): PerformanceStats | undefined; /** * 获取所有系统的性能数据 * @returns 所有系统的性能数据 */ getAllSystemData(): Map<string, PerformanceData>; /** * 获取所有系统的统计信息 * @returns 所有系统的统计信息 */ getAllSystemStats(): Map<string, PerformanceStats>; /** * 获取性能报告 * @returns 格式化的性能报告字符串 */ getPerformanceReport(): string; /** * 重置所有性能数据 */ reset(): void; /** * 重置指定系统的性能数据 * @param systemName 系统名称 */ resetSystem(systemName: string): void; /** * 获取性能警告 * @param thresholdMs 警告阈值(毫秒) * @returns 超过阈值的系统列表 */ getPerformanceWarnings(thresholdMs?: number): string[]; /** * 设置最大保留样本数 * @param maxSamples 最大样本数 */ setMaxRecentSamples(maxSamples: number): void; } /** * 可池化对象接口 */ interface IPoolable { /** * 重置对象状态,准备重用 */ reset(): void; } /** * 对象池统计信息 */ interface PoolStats { /** 池中对象数量 */ size: number; /** 池的最大大小 */ maxSize: number; /** 总共创建的对象数量 */ totalCreated: number; /** 总共获取的次数 */ totalObtained: number; /** 总共释放的次数 */ totalReleased: number; /** 命中率(从池中获取的比例) */ hitRate: number; /** 内存使用估算(字节) */ estimatedMemoryUsage: number; } /** * 高性能通用对象池 * 支持任意类型的对象池化,包含详细的统计信息 */ declare class Pool<T extends IPoolable> { private static _pools; private _objects; private _createFn; private _maxSize; private _stats; private _objectSize; /** * 构造函数 * @param createFn 创建对象的函数 * @param maxSize 池的最大大小,默认100 * @param estimatedObjectSize 估算的单个对象大小(字节),默认1024 */ constructor(createFn: () => T, maxSize?: number, estimatedObjectSize?: number); /** * 获取指定类型的对象池 * @param type 对象类型 * @param maxSize 池的最大大小 * @param estimatedObjectSize 估算的单个对象大小 * @returns 对象池实例 */ static getPool<T extends IPoolable>(type: new (...args: unknown[]) => T, maxSize?: number, estimatedObjectSize?: number): Pool<T>; /** * 从池中获取对象 * @returns 对象实例 */ obtain(): T; /** * 释放对象回池中 * @param obj 要释放的对象 */ release(obj: T): void; /** * 获取池统计信息 * @returns 统计信息对象 */ getStats(): Readonly<PoolStats>; /** * 清空池 */ clear(): void; /** * 压缩池(移除多余的对象) * @param targetSize 目标大小,默认为当前大小的一半 */ compact(targetSize?: number): void; /** * 预填充池 * @param count 预填充的对象数量 */ prewarm(count: number): void; /** * 设置最大池大小 * @param maxSize 新的最大大小 */ setMaxSize(maxSize: number): void; /** * 获取池中可用对象数量 * @returns 可用对象数量 */ getAvailableCount(): number; /** * 检查池是否为空 * @returns 如果池为空返回true */ isEmpty(): boolean; /** * 检查池是否已满 * @returns 如果池已满返回true */ isFull(): boolean; /** * 获取所有已注册的池类型 * @returns 所有池类型的数组 */ static getAllPoolTypes(): Function[]; /** * 获取所有池的统计信息 * @returns 包含所有池统计信息的对象 */ static getAllPoolStats(): Record<string, PoolStats>; /** * 压缩所有池 */ static compactAllPools(): void; /** * 清空所有池 */ static clearAllPools(): void; /** * 获取全局池统计信息的格式化字符串 * @returns 格式化的统计信息字符串 */ static getGlobalStatsString(): string; /** * 更新命中率 */ private _updateHitRate; /** * 更新内存使用估算 */ private _updateMemoryUsage; } /** * 池管理器 * 统一管理所有对象池 */ declare class PoolManager { private static instance; private pools; private autoCompactInterval; private lastCompactTime; static getInstance(): PoolManager; /** * 注册池 * @param name 池名称 * @param pool 池实例 */ registerPool<T extends IPoolable>(name: string, pool: Pool<T>): void; /** * 获取池 * @param name 池名称 * @returns 池实例 */ getPool<T extends IPoolable>(name: string): Pool<T> | null; /** * 更新池管理器(应在游戏循环中调用) */ update(): void; /** * 创建或获取标准池 * @param name 池名称 * @param createFn 创建函数 * @param maxSize 最大大小 * @param estimatedObjectSize 估算对象大小 * @returns 池实例 */ createPool<T extends IPoolable>(name: string, createFn: () => T, maxSize?: number, estimatedObjectSize?: number): Pool<T>; /** * 移除池 * @param name 池名称 * @returns 是否成功移除 */ removePool(name: string): boolean; /** * 获取所有池名称 * @returns 池名称数组 */ getPoolNames(): string[]; /** * 获取池数量 * @returns 池数量 */ getPoolCount(): number; /** * 压缩所有池 */ compactAllPools(): void; /** * 清空所有池 */ clearAllPools(): void; /** * 获取所有池的统计信息 * @returns 统计信息映射 */ getAllStats(): Map<string, PoolStats>; /** * 获取总体统计信息 * @returns 总体统计信息 */ getGlobalStats(): PoolStats; /** * 获取格式化的统计信息字符串 * @returns 格式化字符串 */ getStatsString(): string; /** * 设置自动压缩间隔 * @param intervalMs 间隔毫秒数 */ setAutoCompactInterval(intervalMs: number): void; /** * 预填充所有池 */ prewarmAllPools(): void; /** * 重置池管理器 */ reset(): void; } /** * 框架核心类型定义 */ /** * 组件接口 * * 定义组件的基本契约,所有组件都应该实现此接口 */ interface IComponent { /** 组件唯一标识符 */ readonly id: number; /** 组件所属的实体ID */ entityId?: string | number; /** 组件启用状态 */ enabled: boolean; /** 更新顺序 */ updateOrder: number; /** 组件添加到实体时的回调 */ onAddedToEntity(): void; /** 组件从实体移除时的回调 */ onRemovedFromEntity(): void; /** 组件启用时的回调 */ onEnabled(): void; /** 组件禁用时的回调 */ onDisabled(): void; /** 更新组件 */ update(): void; } /** * 系统基础接口 * * 为现有的EntitySystem类提供类型定义 */ interface ISystemBase { /** 系统名称 */ readonly systemName: string; /** 更新顺序/优先级 */ updateOrder: number; /** 系统启用状态 */ enabled: boolean; /** 系统初始化 */ initialize(): void; /** 更新系统(主要处理阶段) */ update(): void; /** 延迟更新系统 */ lateUpdate?(): void; } /** * 组件类型定义 * * 用于类型安全的组件操作 * 支持任意构造函数签名,提供更好的类型安全性 */ type ComponentType$1<T extends IComponent = IComponent> = new (...args: any[]) => T; /** * 事件总线接口 * 提供类型安全的事件发布订阅机制 */ interface IEventBus { /** * 发射事件 * @param eventType 事件类型 * @param data 事件数据 */ emit<T>(eventType: string, data: T): void; /** * 异步发射事件 * @param eventType 事件类型 * @param data 事件数据 */ emitAsync<T>(eventType: string, data: T): Promise<void>; /** * 监听事件 * @param eventType 事件类型 * @param handler 事件处理器 * @param config 监听器配置 * @returns 监听器ID */ on<T>(eventType: string, handler: (data: T) => void, config?: IEventListenerConfig): string; /** * 监听事件(一次性) * @param eventType 事件类型 * @param handler 事件处理器 * @param config 监听器配置 * @returns 监听器ID */ once<T>(eventType: string, handler: (data: T) => void, config?: IEventListenerConfig): string; /** * 异步监听事件 * @param eventType 事件类型 * @param handler 异步事件处理器 * @param config 监听器配置 * @returns 监听器ID */ onAsync<T>(eventType: string, handler: (data: T) => Promise<void>, config?: IEventListenerConfig): string; /** * 移除事件监听器 * @param eventType 事件类型 * @param listenerId 监听器ID */ off(eventType: string, listenerId: string): boolean; /** * 移除指定事件类型的所有监听器 * @param eventType 事件类型 */ offAll(eventType: string): void; /** * 检查是否有指定事件的监听器 * @param eventType 事件类型 */ hasListeners(eventType: string): boolean; /** * 获取事件统计信息 * @param eventType 事件类型(可选) */ getStats(eventType?: string): IEventStats | Map<string, IEventStats>; /** * 清空所有监听器 */ clear(): void; } /** * 事件监听器配置接口 */ interface IEventListenerConfig { /** 是否只执行一次 */ once?: boolean; /** 优先级(数字越大优先级越高) */ priority?: number; /** 是否异步执行 */ async?: boolean; /** 执行上下文 */ context?: unknown; } /** * 事件统计信息接口 */ interface IEventStats { /** 事件类型 */ eventType: string; /** 监听器数量 */ listenerCount: number; /** 触发次数 */ triggerCount: number; /** 总执行时间(毫秒) */ totalExecutionTime: number; /** 平均执行时间(毫秒) */ averageExecutionTime: number; /** 最后触发时间 */ lastTriggerTime: number; } /** * 事件数据基类接口 */ interface IEventData { /** 事件时间戳 */ timestamp: number; /** 事件来源 */ source?: string; /** 事件ID */ eventId?: string; } /** * 实体事件数据接口 */ interface IEntityEventData extends IEventData { /** 实体ID */ entityId: number; /** 实体名称 */ entityName?: string; /** 实体标签 */ entityTag?: string; } /** * 组件事件数据接口 */ interface IComponentEventData extends IEntityEventData { /** 组件类型名称 */ componentType: string; /** 组件实例 */ component?: IComponent; } /** * 系统事件数据接口 */ interface ISystemEventData extends IEventData { /** 系统名称 */ systemName: string; /** 系统类型 */ systemType: string; } /** * 场景事件数据接口 */ interface ISceneEventData extends IEventData { /** 场景名称 */ sceneName: string; /** 前一个场景名称 */ previousSceneName?: string; } /** * 性能事件数据接口 */ interface IPerformanceEventData extends IEventData { /** 操作类型 */ operation: string; /** 执行时间(毫秒) */ executionTime: number; /** 内存使用量 */ memoryUsage?: number; /** 额外数据 */ metadata?: Record<string, unknown>; } /** * ECS调试配置接口 */ interface IECSDebugConfig { /** 是否启用调试 */ enabled: boolean; /** WebSocket服务器URL */ websocketUrl: string; /** 是否自动重连 */ autoReconnect?: boolean; /** 数据更新间隔(毫秒)- 已弃用,使用debugFrameRate替代 */ updateInterval?: number; /** 调试数据发送帧率 (60fps, 30fps, 15fps) */ debugFrameRate?: 60 | 30 | 15; /** 数据通道配置 */ channels: { entities: boolean; systems: boolean; performance: boolean; components: boolean; scenes: boolean; }; } /** * Core配置接口 */ interface ICoreConfig { /** 是否启用调试模式 */ debug?: boolean; /** 是否启用实体系统 */ enableEntitySystems?: boolean; /** 调试配置 */ debugConfig?: IECSDebugConfig; } /** * ECS调试数据接口 */ interface IECSDebugData { /** 时间戳 */ timestamp: number; /** 框架版本 */ frameworkVersion?: string; /** 是否正在运行 */ isRunning: boolean; /** 框架是否已加载 */ frameworkLoaded: boolean; /** 当前场景名称 */ currentScene: string; /** 实体数据 */ entities?: IEntityDebugData; /** 系统数据 */ systems?: ISystemDebugData; /** 性能数据 */ performance?: IPerformanceDebugData; /** 组件数据 */ components?: IComponentDebugData; /** 场景数据 */ scenes?: ISceneDebugData; } /** * 实体层次结构节点接口 */ interface IEntityHierarchyNode { id: number; name: string; active: boolean; enabled: boolean; activeInHierarchy: boolean; componentCount: number; componentTypes: string[]; parentId: number | null; children: IEntityHierarchyNode[]; depth: number; tag: number; updateOrder: number; } /** * 实体调试数据接口 */ interface IEntityDebugData { /** 总实体数 */ totalEntities: number; /** 激活实体数 */ activeEntities: number; /** 待添加实体数 */ pendingAdd: number; /** 待移除实体数 */ pendingRemove: number; /** 按Archetype分组的实体分布 */ entitiesPerArchetype: Array<{ signature: string; count: number; memory: number; }>; /** 组件数量最多的前几个实体 */ topEntitiesByComponents: Array<{ id: string; name: string; componentCount: number; memory: number; }>; /** 实体详情列表 */ entityDetails?: Array<{ id: string | number; name?: string; tag?: string; enabled: boolean; componentCount: number; components: string[]; }>; /** 实体层次结构(根实体) */ entityHierarchy?: Array<{ id: number; name: string; active: boolean; enabled: boolean; activeInHierarchy: boolean; componentCount: number; componentTypes: string[]; parentId: number | null; children: IEntityHierarchyNode[]; depth: number; tag: number; updateOrder: number; }>; /** 实体详细信息映射 */ entityDetailsMap?: Record<number, { id: number; name: string; active: boolean; enabled: boolean; activeInHierarchy: boolean; destroyed: boolean; tag: number; updateOrder: number; componentMask: string; parentId: number | null; parentName: string | null; childCount: number; childIds: number[]; depth: number; components: Array<{ typeName: string; properties: Record<string, unknown>; }>; componentCount: number; componentTypes: string[]; }>; } /** * 系统调试数据接口 */ interface ISystemDebugData { /** 总系统数 */ totalSystems: number; /** 系统信息列表 */ systemsInfo: Array<{ name: string; type: string; entityCount: number; executionTime?: number; averageExecutionTime?: number; minExecutionTime?: number; maxExecutionTime?: number; executionTimeHistory?: number[]; memoryUsage?: number; updateOrder: number; enabled: boolean; lastUpdateTime?: number; }>; } /** * 性能调试数据接口 */ interface IPerformanceDebugData { /** ECS框架执行时间(毫秒) */ frameTime: number; /** 引擎总帧时间(毫秒) */ engineFrameTime?: number; /** ECS占总帧时间百分比 */ ecsPercentage?: number; /** 内存使用量(MB) */ memoryUsage: number; /** FPS */ fps: number; /** 平均ECS执行时间(毫秒) */ averageFrameTime: number; /** 最小ECS执行时间(毫秒) */ minFrameTime: number; /** 最大ECS执行时间(毫秒) */ maxFrameTime: number; /** ECS执行时间历史记录 */ frameTimeHistory: number[]; /** 系统性能详情 */ systemPerformance: Array<{ systemName: string; averageTime: number; maxTime: number; minTime: number; samples: number; percentage?: number; }>; /** 系统占比分析数据 */ systemBreakdown?: Array<{ systemName: string; executionTime: number; percentage: number; }>; /** 内存分配详情 */ memoryDetails?: { entities: number; components: number; systems: number; pooled: number; totalMemory: number; usedMemory: number; freeMemory: number; gcCollections: number; }; } /** * 组件调试数据接口 */ interface IComponentDebugData { /** 组件类型数 */ componentTypes: number; /** 组件实例总数 */ componentInstances: number; /** 组件分布统计 */ componentStats: Array<{ typeName: string; instanceCount: number; memoryPerInstance: number; totalMemory: number; poolSize: number; poolUtilization: number; averagePerEntity?: number; }>; } /** * 场景调试数据接口 */ interface ISceneDebugData { /** 当前场景名称 */ currentSceneName: string; /** 场景是否已初始化 */ isInitialized: boolean; /** 场景运行时间(秒) */ sceneRunTime: number; /** 场景实体数 */ sceneEntityCount: number; /** 场景系统数 */ sceneSystemCount: number; /** 场景内存使用量 */ sceneMemory: number; /** 场景启动时间 */ sceneUptime: number; } /** * 游戏组件基类 * * ECS架构中的组件(Component),用于实现具体的游戏功能。 * 组件包含数据和行为,可以被添加到实体上以扩展实体的功能。 * * @example * ```typescript * class HealthComponent extends Component { * public health: number = 100; * * public takeDamage(damage: number): void { * this.health -= damage; * if (this.health <= 0) { * this.entity.destroy(); * } * } * } * ``` */ declare abstract class Component implements IComponent { /** * 组件ID生成器 * * 用于为每个组件分配唯一的ID。 */ static _idGenerator: number; /** * 组件唯一标识符 * * 在整个游戏生命周期中唯一的数字ID。 */ readonly id: number; /** * 组件所属的实体 * * 指向拥有此组件的实体实例。 */ entity: Entity; /** * 组件启用状态 * * 控制组件是否参与更新循环。 */ private _enabled; /** * 更新顺序 * * 决定组件在更新循环中的执行顺序。 */ private _updateOrder; /** * 创建组件实例 * * 自动分配唯一ID给组件。 */ constructor(); /** * 获取组件启用状态 * * 组件的实际启用状态取决于自身状态和所属实体的状态。 * * @returns 如果组件和所属实体都启用则返回true */ get enabled(): boolean; /** * 设置组件启用状态 * * 当状态改变时会触发相应的生命周期回调。 * * @param value - 新的启用状态 */ set enabled(value: boolean); /** * 获取更新顺序 * * @returns 组件的更新顺序值 */ get updateOrder(): number; /** * 设置更新顺序 * * @param value - 新的更新顺序值 */ set updateOrder(value: number); /** * 组件添加到实体时的回调 * * 当组件被添加到实体时调用,可以在此方法中进行初始化操作。 */ onAddedToEntity(): void; /** * 组件从实体移除时的回调 * * 当组件从实体中移除时调用,可以在此方法中进行清理操作。 */ onRemovedFromEntity(): void; /** * 组件启用时的回调 * * 当组件被启用时调用。 */ onEnabled(): void; /** * 组件禁用时的回调 * * 当组件被禁用时调用。 */ onDisabled(): void; /** * 更新组件 * * 每帧调用,用于更新组件的逻辑。 * 子类应该重写此方法来实现具体的更新逻辑。 */ update(): void; } /** * 64位掩码兼容层 */ /** * 64位掩码数据结构,使用两个32位整数表示 */ interface BitMask64Data { /** 低32位 */ lo: number; /** 高32位 */ hi: number; } declare class BitMask64Utils { /** 零掩码常量,所有位都为0 */ static readonly ZERO: BitMask64Data; /** * 根据位索引创建64位掩码 * @param bitIndex 位索引,范围 [0, 63] * @returns 包含指定位设置为1的掩码 * @throws 当位索引超出范围时抛出错误 */ static create(bitIndex: number): BitMask64Data; /** * 从32位数字创建64位掩码 * @param value 32位数字值 * @returns 低32位为输入值、高32位为0的掩码 */ static fromNumber(value: number): BitMask64Data; /** * 检查掩码是否包含任意指定的位 * @param mask 要检查的掩码 * @param bits 指定的位模式 * @returns 如果掩码包含bits中的任意位则返回true */ static hasAny(mask: BitMask64Data, bits: BitMask64Data): boolean; /** * 检查掩码是否包含所有指定的位 * @param mask 要检查的掩码 * @param bits 指定的位模式 * @returns 如果掩码包含bits中的所有位则返回true */ static hasAll(mask: BitMask64Data, bits: BitMask64Data): boolean; /** * 检查掩码是否不包含任何指定的位 * @param mask 要检查的掩码 * @param bits 指定的位模式 * @returns 如果掩码不包含bits中的任何位则返回true */ static hasNone(mask: BitMask64Data, bits: BitMask64Data): boolean; /** * 检查掩码是否为零 * @param mask 要检查的掩码 * @returns 如果掩码所有位都为0则返回true */ static isZero(mask: BitMask64Data): boolean; /** * 检查两个掩码是否相等 * @param a 第一个掩码 * @param b 第二个掩码 * @returns 如果两个掩码完全相等则返回true */ static equals(a: BitMask64Data, b: BitMask64Data): boolean; /** * 设置掩码中指定位为1 * @param mask 要修改的掩码(原地修改) * @param bitIndex 位索引,范围 [0, 63] * @throws 当位索引超出范围时抛出错误 */ static setBit(mask: BitMask64Data, bitIndex: number): void; /** * 清除掩码中指定位为0 * @param mask 要修改的掩码(原地修改) * @param bitIndex 位索引,范围 [0, 63] * @throws 当位索引超出范围时抛出错误 */ static clearBit(mask: BitMask64Data, bitIndex: number): void; /** * 对目标掩码执行按位或操作 * @param target 目标掩码(原地修改) * @param other 用于按位或的掩码 */ static orInPlace(target: BitMask64Data, other: BitMask64Data): void; /** * 对目标掩码执行按位与操作 * @param target 目标掩码(原地修改) * @param other 用于按位与的掩码 */ static andInPlace(target: BitMask64Data, other: BitMask64Data): void; /** * 对目标掩码执行按位异或操作 * @param target 目标掩码(原地修改) * @param other 用于按位异或的掩码 */ static xorInPlace(target: BitMask64Data, other: BitMask64Data): void; /** * 清除掩码的所有位为0 * @param mask 要清除的掩码(原地修改) */ static clear(mask: BitMask64Data): void; /** * 将源掩码的值复制到目标掩码 * @param source 源掩码 * @param target 目标掩码(原地修改) */ static copy(source: BitMask64Data, target: BitMask64Data): void; /** * 创建掩码的深拷贝 * @param mask 要拷贝的掩码 * @returns 新的掩码对象,内容与源掩码相同 */ static clone(mask: BitMask64Data): BitMask64Data; /** * 将掩码转换为字符串表示 * @param mask 要转换的掩码 * @param radix 进制,支持2(二进制)或16(十六进制),默认为2 * @returns 掩码的字符串表示,二进制不带前缀,十六进制带0x前缀 * @throws 当进制不支持时抛出错误 */ static toString(mask: BitMask64Data, radix?: number): string; /** * 计算掩码中设置为1的位数 * @param mask 要计算的掩码 * @returns 掩码中1的位数 */ static popCount(mask: BitMask64Data): number; } /** * 启用SoA优化装饰器 * 默认关闭SoA,只有在大规模批量操作场景下才建议开启 */ declare function EnableSoA<T extends ComponentType>(target: T): T; /** * 高精度数值装饰器 * 标记字段需要保持完整精度,存储为复杂对象而非TypedArray */ declare function HighPrecision(target: any, propertyKey: string | symbol): void; /** * 64位浮点数装饰器 * 标记字段使用Float64Array存储(更高精度但更多内存) */ declare function Float64(target: any, propertyKey: string | symbol): void; /** * 32位浮点数装饰器 * 标记字段使用Float32Array存储(默认类型,平衡性能和精度) */ declare function Float32(target: any, propertyKey: string | symbol): void; /** * 32位整数装饰器 * 标记字段使用Int32Array存储(适用于整数值) */ declare function Int32(target: any, propertyKey: string | symbol): void; /** * 序列化Map装饰器 * 标记Map字段需要序列化/反序列化存储 */ declare function SerializeMap(target: any, propertyKey: string | symbol): void; /** * SoA存储器(需要装饰器启用) * 使用Structure of Arrays存储模式,在大规模批量操作时提供优异性能 */ declare class SoAStorage<T extends Component> { private static readonly _logger; private fields; private stringFields; private serializedFields; private complexFields; private entityToIndex; private indexToEntity; private freeIndices; private _size; private _capacity; readonly type: ComponentType<T>; constructor(componentType: ComponentType<T>); private initializeFields; addComponent(entityId: number, component: T): void; private updateComponentAtIndex; /** * 序列化值为JSON字符串 */ private serializeValue; /** * 反序列化JSON字符串为值 */ private deserializeValue; /** * 深拷贝对象 */ private deepClone; getComponent(entityId: number): T | null; private getFieldType; hasComponent(entityId: number): boolean; removeComponent(entityId: number): T | null; private resize; getActiveIndices(): number[]; getFieldArray(fieldName: string): Float32Array | Float64Array | Int32Array | null; getTypedFieldArray<K extends keyof T>(fieldName: K): Float32Array | Float64Array | Int32Array | null; getEntityIndex(entityId: number): number | undefined; getEntityIdByIndex(index: number): number | undefined; size(): number; clear(): void; compact(): void; getStats(): any; /** * 执行向量化批量操作 * @param operation 操作函数,接收字段数组和活跃索引 */ performVectorizedOperation(operation: (fieldArrays: Map<string, Float32Array | Float64Array | Int32Array>, activeIndices: number[]) => void): void; } /** * 日志级别 */ declare enum LogLevel { Debug = 0, Info = 1, Warn = 2, Error = 3, Fatal = 4, None = 5 } /** * 日志接口 */ interface ILogger { debug(message: string, ...args: unknown[]): void; info(message: string, ...args: unknown[]): void; warn(message: string, ...args: unknown[]): void; error(message: string, ...args: unknown[]): void; fatal(message: string, ...args: unknown[]): void; } /** * 日志颜色配置接口 */ interface LoggerColorConfig { debug?: string; info?: string; warn?: string; error?: string; fatal?: string; reset?: string; } /** * 预定义的颜色常量 */ declare const Colors: { readonly BLACK: "\u001B[30m"; readonly RED: "\u001B[31m"; readonly GREEN: "\u001B[32m"; readonly YELLOW: "\u001B[33m"; readonly BLUE: "\u001B[34m"; readonly MAGENTA: "\u001B[35m"; readonly CYAN: "\u001B[36m"; readonly WHITE: "\u001B[37m"; readonly BRIGHT_BLACK: "\u001B[90m"; readonly BRIGHT_RED: "\u001B[91m"; readonly BRIGHT_GREEN: "\u001B[92m"; readonly BRIGHT_YELLOW: "\u001B[93m"; readonly BRIGHT_BLUE: "\u001B[94m"; readonly BRIGHT_MAGENTA: "\u001B[95m"; readonly BRIGHT_CYAN: "\u001B[96m"; readonly BRIGHT_WHITE: "\u001B[97m"; readonly RESET: "\u001B[0m"; readonly BOLD: "\u001B[1m"; readonly UNDERLINE: "\u001B[4m"; }; /** * 日志配置 */ interface LoggerConfig { /** 日志级别 */ level: LogLevel; /** 是否启用时间戳 */ enableTimestamp: boolean; /** 是否启用颜色 */ enableColors: boolean; /** 日志前缀 */ prefix?: string; /** 自定义输出函数 */ output?: (level: LogLevel, message: string) => void; /** 自定义颜色配置 */ colors?: LoggerColorConfig; } /** * 默认控制台日志实现 */ declare class ConsoleLogger implements ILogger { private _config; constructor(config?: Partial<LoggerConfig>); /** * 输出调试级别日志 * @param message 日志消息 * @param args 附加参数 */ debug(message: string, ...args: unknown[]): void; /** * 输出信息级别日志 * @param message 日志消息 * @param args 附加参数 */ info(message: string, ...args: unknown[]): void; /** * 输出警告级别日志 * @param message 日志消息 * @param args 附加参数 */ warn(message: string, ...args: unknown[]): void; /** * 输出错误级别日志 * @param message 日志消息 * @param args 附加参数 */ error(message: string, ...args: unknown[]): void; /** * 输出致命错误级别日志 * @param message 日志消息 * @param args 附加参数 */ fatal(message: string, ...args: unknown[]): void; /** * 设置日志级别 * @param level 日志级别 */ setLevel(level: LogLevel): void; /** * 设置颜色配置 * @param colors 颜色配置 */ setColors(colors: LoggerColorConfig): void; /** * 设置日志前缀 * @param prefix 前缀字符串 */ setPrefix(prefix: string): void; /** * 内部日志输出方法 * @param level 日志级别 * @param message 日志消息 * @param args 附加参数 */ private log; /** * 输出到控制台 * @param level 日志级别 * @param message 格式化后的消息 * @param args 附加参数 */ private outputToConsole; /** * 获取控制台颜色配置 * @returns 颜色配置对象 */ private getColors; } /** * 日志管理器 */ declare class LoggerManager { private static _instance; private _loggers; private _defaultLogger; private constructor(); /** * 获取日志管理器实例 * @returns 日志管理器实例 */ static getInstance(): LoggerManager; /** * 获取或创建日志器 * @param name 日志器名称 * @returns 日志器实例 */ getLogger(name?: string): ILogger; /** * 设置日志器 * @param name 日志器名称 * @param logger 日志器实例 */ setLogger(name: string, logger: ILogger): void; /** * 设置全局日志级别 * @param level 日志级别 */ setGlobalLevel(level: LogLevel): void; /** * 创建子日志器 * @param parentName 父日志器名称 * @param childName 子日志器名称 * @returns 子日志器实例 */ createChildLogger(parentName: string, childName: string): ILogger; /** * 设置全局颜色配置 * @param colors 颜色配置 */ setGlobalColors(colors: LoggerColorConfig): void; /** * 重置为默认颜色配置 */ resetColors(): void; } /** * 默认日志器实例 */ declare const Logger: ILogger; /** * 创建命名日志器 * @param name 日志器名称 * @returns 日志器实例 */ declare function createLogger(name: string): ILogger; /** * 设置全局日志颜色配置 * @param colors 颜色配置 */ declare function setLoggerColors(colors: LoggerColorConfig): void; /** * 重置日志颜色为默认配置 */ declare function resetLoggerColors(): void; /** * 设置全局日志级别 * @param level 日志级别 */ declare function setGlobalLogLevel(level: LogLevel): void; /** * 组件类型定义 */ type ComponentType<T extends Component = Component> = new (...args: any[]) => T; /** * 组件注册表 * 管理组件类型的位掩码分配 */ declare class ComponentRegistry { protected static readonly _logger: ILogger; private static componentTypes; private static componentNameToType; private static componentNameToId; private static maskCache; private static nextBitIndex; private static maxComponents; /** * 注册组件类型并分配位掩码 * @param componentType 组件类型 * @returns 分配的位索引 */ static register<T extends Component>(componentType: ComponentType<T>): number; /** * 获取组件类型的位掩码 * @param componentType 组件类型 * @returns 位掩码 */ static getBitMask<T extends Component>(componentType: ComponentType<T>): BitMask64Data; /** * 获取组件类型的位索引 * @param componentType 组件类型 * @returns 位索引 */ static getBitIndex<T extends Component>(componentType: ComponentType<T>): number; /** * 检查组件类型是否已注册 * @param componentType 组件类型 * @returns 是否已注册 */ static isRegistered<T extends Component>(componentType: ComponentType<T>): boolean; /** * 通过名称获取组件类型 * @param componentName 组件名称 * @returns 组件类型构造函数 */ static getComponentType(componentName: string): Function | null; /** * 获取所有已注册的组件类型 * @returns 组件类型映射 */ static getAllRegisteredTypes(): Map<Function, number>; /** * 获取所有组件名称到类型的映射 * @returns 名称到类型的映射 */ static getAllComponentNames(): Map<string, Function>; /** * 通过名称获取组件类型ID * @param componentName 组件名称 * @returns 组件类型ID */ static getComponentId(componentName: string): number | undefined; /** * 注册组件类型(通过名称) * @param componentName 组件名称 * @returns 分配的组件ID */ static registerComponentByName(componentName: string): number; /** * 创建单个组件的掩码 * @param componentName 组件名称 * @returns 组件掩码 */ static createSingleComponentMask(componentName: string): BitMask64Data; /** * 创建多个组件的掩码 * @param componentNames 组件名称数组 * @returns 组合掩码 */ static createComponentMask(componentNames: string[]): BitMask64Data; /** * 清除掩码缓存 */ static clearMaskCache(): void; /** * 重置注册表(用于测试) */ static reset(): void; } /** * 高性能组件存储器 */ declare class ComponentStorage<T extends Component> { private dense; private entityIds; private entityToIndex; private componentType; constructor(componentType: ComponentType<T>); /** * 添加组件 * @param entityId 实体ID * @param component 组件实例 */ addComponent(entityId: number, component: T): void; /** * 获取组件 * @param entityId 实体ID * @returns 组件实例或null */ getComponent(entityId: number): T | null; /** * 检查实体是否有此组件 * @param entityId 实体ID * @returns 是否有组件 */ hasComponent(entityId: number): boolean; /** * 移除组件 * @param entityId 实体ID * @returns 被移除的组件或null */ removeComponent(entityId: number): T | null; /** * 高效遍历所有组件 * @param callback 回调函数 */ forEach(callback: (component: T, entityId: number, index: number) => void): void; /** * 获取所有组件 * @returns 组件数组 */ getDenseArray(): { components: T[]; entityIds: number[]; }; /** * 清空所有组件 */ clear(): void; /** * 获取组件数量 */ get size(): number; /** * 获取组件类型 */ get type(): ComponentType<T>; /** * 获取存储统计信息 */ getStats(): { totalSlots: number; usedSlots: number; freeSlots: number; fragmentation: number; }; } /** * 组件存储管理器 * 管理所有组件类型的存储器 */ declare class ComponentStorageManager { private static readonly _logger; private storages; /** * 检查组件类型是否启用SoA存储 * @param componentType 组件类型 * @returns 是否为SoA存储 */ isSoAStorage<T extends Component>(componentType: ComponentType<T>): boolean; /** * 获取SoA存储器(类型安全) * @param componentType 组件类型 * @returns SoA存储器或null */ getSoAStorage<T extends Component>(componentType: ComponentType<T>): SoAStorage<T> | null; /** * 直接获取SoA字段数组(类型安全) * @param componentType 组件类型 * @param fieldName 字段名 * @returns TypedArray或null */ getFieldArray<T extends Component>(componentType: ComponentType<T>, fieldName: string): Float32Array | Float64Array | Int32Array | null; /** * 直接获取SoA字段数组(类型安全,带字段名检查) * @param componentType 组件类型 * @param fieldName 字段名(类型检查) * @returns TypedArray或null */ getTypedFieldArray<T extends Component, K extends keyof T>(componentType: ComponentType<T>, fieldName: K): Float32Array | Float64Array | Int32Array | null; /** * 获取SoA存储的活跃索引 * @param componentType 组件类型 * @returns 活跃索引数组或空数组 */ getActiveIndices<T extends Component>(componentType: ComponentType<T>): number[]; /** * 获取实体在SoA存储中的索引 * @param componentType 组件类型 * @param entityId 实体ID * @returns 存储索引或undefined */ getEntityIndex<T extends Component>(componentType: ComponentType<T>, entityId: number): number | undefined; /** * 根据索引获取实体ID * @param componentType 组件类型 * @param index 存储索引 * @returns 实体ID或undefined */ getEntityIdByIndex<T extends Component>(componentType: ComponentType<T>, index: number): number | undefined; /** * 获取或创建组件存储器(默认原始存储) * @param componentType 组件类型 * @returns 组件存储器 */ getStorage<T extends Component>(componentType: ComponentType<T>): ComponentStorage<T> | SoAStorage<T>; /** * 添加组件 * @param entityId 实体ID * @param component 组件实例 */ addComponent<T extends Component>(entityId: number, component: T): void; /** * 获取组件 * @param entityId 实体ID * @param componentType 组件类型 * @returns 组件实例或null */ getComponent<T extends Component>(entityId: number, componentType: ComponentType<T>): T | null; /** * 检查实体是否有组件 * @param entityId 实体ID * @param componentType 组件类型 * @returns 是否有组件 */ hasComponent<T extends Component>(entityId: number, componentType: ComponentType<T>): boolean; /** * 移除组件 * @param entityId 实体ID * @param componentType 组件类型 * @returns 被移除的组件或null */ removeComponent<T extends Component>(entityId: number, componentType: ComponentType<T>): T | null; /** * 移除实体的所有组件 * @param entityId 实体ID */ removeAllComponents(entityId: number): void; /** * 获取实体的组件位掩码 * @param entityId 实体ID * @returns 组件位掩码 */ getComponentMask(entityId: number): BitMask64Data; /** * 获取所有存储器的统计信息 */ getAllStats(): Map<string, any>; /** * 清空所有存储器 */ clear(): void; } /** * 增强的事件总线实现 * 基于TypeSafeEventSystem,提供类型安全的事件发布订阅机制 */ declare class EventBus implements IEventBus { private static readonly _logger; private eventSystem; private eventIdCounter; private isDebugMode; constructor(debugMode?: boolean); /** * 发射事件 * @param eventType 事件类型 * @param data 事件数据 */ emit<T>(eventType: string, data: T): void; /** * 异步发射事件 * @param eventType 事件类型 * @param data 事件数据 */ emitAsync<T>(eventType: string, data: T): Promise<void>; /** * 监听事件 * @param eventType 事件类型 * @param handler 事件处理器 * @param config 监听器配置 * @returns 监听器ID */ on<T>(eventType: string, handler: (data: T) => void, config?: IEventListenerConfig): string; /** * 监听事件(一次性) * @param eventType 事件类型 * @param handler 事件处理器 * @param config 监听器配置 * @returns 监听器ID */ once<T>(eventType: string, handler: (data: T) => void, config?: IEventListenerConfig): string; /** * 异步监听事件 * @param eventType 事件类型 * @param handler 异步事件处理器 * @param config 监听器配置 * @returns 监听器ID */ onAsync<T>(eventType: string, handler: (data: T) => Promise<void>, config?: IEventListenerConfig): string; /** * 移除事件监听器 * @param eventType 事件类型 * @param listenerId 监听器ID */ off(eventType: string, listenerId: string): boolean; /** * 移除指定事件类型的所有监听器 * @param eventType 事件类型 */ offAll(eventType: string): void; /** * 检查是否有指定事件的监听器 * @param eventType 事件类型 */ hasListeners(eventType: string): boolean; /** * 获取事件统计信息 * @param eventType 事件类型(可选) */ getStats(eventType?: string): IEventStats | Map<string, IEventStats>; /** * 清空所有监听器 */ clear(): void; /** * 启用或禁用事件系统 * @param enabled 是否启用 */ setEnabled(enabled: boolean): void; /** * 设置调试模式 * @param debug 是否启用调试 */ setDebugMode(debug: boolean): void; /** * 设置最大监听器数量 * @param max 最大数量 */ setMaxListeners(max: number): void; /** * 获取监听器数量 * @param eventType 事件类型 */ getListenerCount(eventType: string): number; /** * 设置事件批处理配置 * @param eventType 事件类型 * @param batchSize 批处理大小 * @param delay 延迟时间(毫秒) */ setBatchConfig(eventType: string, batchSize: number, delay: number): void; /** * 刷新指定事件的批处理队列 * @param eventType 事件类型 */ flushBatch(eventType: string): void; /** * 重置事件统计 * @param eventType 事件类型(可选) */ resetStats(eventType?: string): void; /** * 发射实体创建事件 * @param entityData 实体事件数据 */ emitEntityCreated(entityData: IEntityEventData): void; /** * 发射实体销毁事件 * @param entityData 实体事件数据 */ emitEntityDestroyed(entityData: IEntityEventData): void; /** * 发射组件添加事件 * @param componentData 组件事件数据 */ emitComponentAdded(componentData: IComponentEventData): void; /** * 发射组件移除事件 * @param componentData 组件事件数据 */ emitComponentRemoved(componentData: IComponentEventData): void; /** * 发射系统添加事件 * @param systemData 系统事件数据 */ emitSystemAdded(systemData: ISystemEventData): void; /** * 发射系统移除事件 * @param systemData 系统事件数据 */ emitSystemRemoved(systemData: ISystemEventData): void; /** * 发射场景变化事件 * @param sceneData 场景事件数据 */ emitSceneChanged(sceneData: ISceneEventData): void; /** * 发射性能警告事件 * @param performanceData 性能事件数据 */ emitPerformanceWarning(performanceData: IPerformanceEventData): void; /** * 监听实体创建事件 * @param handler 事件处理器 * @param config 监听器配置 */ onEntityCreated(handler: (data: IEntityEventData) => void, config?: IEventListenerConfig): string; /** * 监听组件添加事件 * @param handler 事件处理器 * @param config 监听器配置 */ onComponentAdded(handler: (data: IComponentEventData) => void, config?: IEventListenerConfig): string; /** * 监听系统错误事件 * @param handler 事件处理器 * @param config 监听器配置 */ onSystemError(handler: (data: ISystemEventData) => void, config?: IEventListenerConfig): string; /** * 监听性能警告事件 * @param handler 事件处理器 * @param config 监听器配置 */ onPerformanceWarning(handler: (data: IPerformanceEventData) => void, config?: IEventListenerConfig): string; /** * 验证事件类型 * @param eventType 事件类型 */ private validateEventType; /** * 增强事件数据 * @param eventType 事件类型 * @param data 原始数据 */ private enhanceEventData; /** * 转换EventStats为IEventStats * @param stats EventStats实例 */ private convertEventStats; } /** * 全局事件总线实例 * 提供全局访问的事件总线 */ declare class GlobalEventBus { private static instance; /** * 获取全局事件总线实例 * @param debugMode 是否启用调试模式 */ static getInstance(debugMode?: boolean): EventBus; /** * 重置全局事件总线实例 * @param debugMode 是否启用调试模式 */ static reset(debugMode?: boolean): EventBus; } /** * 事件装饰器工厂 * 用于自动注册事件监听器 */ declare function EventHandler$1(eventType: string, config?: IEventListenerConfig): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor; /** * 异步事件装饰器工厂 * 用于自动注册异步事件监听器 */ declare function AsyncEventHandler$1(eventType: string, config?: IEventListenerConfig): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor; /** * 高性能实体列表管理器 * 管理场景中的所有实体,支持快速查找和批量操作 */ declare class EntityList { buffer: Entity[]; private _scene; private _idToEntity; private _nameToEntities; private _entitiesToAdd; private _entitiesToRemove; private _isUpdating; get count(): number; constructor(scene: any); /** * 添加实体(立即添加或延迟添加) * @param entity 要添加的实体 */ add(entity: Entity): void; /** * 立即添加实体 * @param entity 要添加的实体 */ private addImmediate; /** * 移除实体(立即移除或延迟移除) * @param entity 要移除的实体 */ remove(entity: Entity): void; /** * 立即移除实体 * @param entity 要移除的实体 */ private removeImmediate; /** * 移除所有实体 */ removeAllEntities(): void; /** * 更新实体列表,处理延迟操作 */ updateLists(): void; /** * 更新所有实体 */ update(): void; /** * 根据名称查找实体(使用索引,O(1)复杂度) * @param name 实体名称 * @returns 找到的第一个实体或null */ findEntity(name: string): Entity | null; /** * 根据名称查找所有实体 * @param name 实体名称 * @returns 找到的所有实体数组 */ findEntitiesByName(name: string): Entity[]; /** * 根据ID查找实体(使用索引,O(1)复杂度) * @param id 实体ID * @returns 找到的实体或null */ findEntityById(id: number): Entity | null; /** * 根据标签查找实体 * @param tag 标签 * @returns 找到的所有实体数组 */ findEntitiesByTag(tag: number): Entity[]; /** * 根据组件类型查找实体 * @param componentType 组件类型 * @returns 找到的所有实体数组 */ findEntitiesWithComponent<T extends Component>(componentType: new (...args: unknown[]) => T): Entity[]; /** * 批量操作:对所有实体执行指定操作 * @param action 要执行的操作 */ forEach(action: (entity: Entity) => void): void; /** * 批量操作:对符合条件的实体执行指定操作 * @param predicate 筛选条件 * @param action 要执行的操作 */ forEachWhere(predicate: (entity: Entity) => boolean, action: (entity: Entity) => void): void; /** * 更新名称索引 * @param entity 实体 * @param isAdd 是否为添加操作 */ private updateNameIndex; /** * 获取实体列表的统计信息 * @returns 统计信息 */ getStats(): { totalEntities: number; activeEntities: number; pendingAdd: number; pendingRemove: number; nameIndexSize: number; }; } /** * 查询条件类型 */ interface QueryCondition { all: ComponentType[]; any: ComponentType[]; none: ComponentType[]; tag?: number; name?: string; component?: ComponentType; } /** * 实体匹配条件描述符 * * 用于描述实体查询条件,不执行实际查询 * * @example * ```typescript * const matcher = Matcher.all(Position, Velocity) * .any(Health, Shield) * .none(Dead); * * // 获取查询条件 * const condition = matcher.getCondition(); * ``` */ declare class Matcher { private readonly condition; private constructor(); /** * 创建匹配器,要求所有指定的组件 * @param types 组件类型 */ static all(...types: ComponentType[]): Matcher; /** * 创建匹配器,要求至少一个指定的组件 * @param types 组件类型 */ static any(...types: ComponentType[]): Matcher; /** * 创建匹配器,排除指定的组件 * @param types 组件类型 */ static none(...types: ComponentType[]): Matcher; /** * 创建按标签查询的匙配器 * @param tag 标签值 */ static byTag(tag: number): Matcher; /** * 创建按名称查询的匙配器 * @param name 实体名称 */ static byName(name: string): Matcher; /** * 创建单组件查询的匙配器 * @param componentType 组件类型 */ static byComponent(componentType: ComponentType): Matcher; /** * 创建复杂查询构建器 */ static complex(): Matcher; /** * 创建空匙配器(向后兼容) */ static empty(): Matcher; /** * 必须包含所有指定组件 * @param types 组件类型 */ all(...types: ComponentType[]): Matcher; /** * 必须包含至少一个指定组件 * @param types 组件类型 */ any(...types: ComponentType[]): Matcher; /** * 不能包含任何指定组件 * @param types 组件类型 */ none(...types: ComponentType[]): Matcher; /** * 排除指定组件(别名方法) * @param types 组件类型 */ exclude(...types: ComponentType[]): Matcher; /** * 至少包含其中之一(别名方法) * @param types 组件类型 */ one(...types: ComponentType[]): Matcher; /** * 按标签查询 * @param tag 标签值 */ withTag(tag: number): Matcher; /** * 按名称查询 * @param name 实体名称 */ withName(name: string): Matcher; /** * 单组件查询 * @param componentType 组件类型 */ withComponent(componentType: ComponentType): Matcher; /** * 移除标签条件 */ withoutTag(): Matcher; /** * 移除名称条件 */ withoutName(): Matcher; /** * 移除单组件条件 */ withoutComponent(): Matcher; /** * 获取查询条件(只读) */ getCondition(): Readonly<QueryCondition>; /** * 检查是否为空条件 */ isEmpty(): boolean; /** * 重置所有条件 */ reset(): Matcher; /** * 克隆匹配器