@esengine/ecs-framework
Version:
用于Laya、Cocos Creator等JavaScript游戏引擎的高性能ECS框架
2,459 lines (2,444 loc) • 148 kB
TypeScript
/**
* @esengine/ecs-framework v2.1.22
* 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 {
context: any;
/**
* 调用stop以停止此计时器再次运行。这对非重复计时器没有影响。
*/
stop(): void;
/**
* 将计时器的运行时间重置为0
*/
reset(): void;
/**
* 返回投向T的上下文,作为方便
*/
getContext<T>(): T;
}
/**
* 私有类隐藏ITimer的实现
*/
declare class Timer implements ITimer {
context: any;
_timeInSeconds: number;
_repeats: boolean;
_onTime: (timer: ITimer) => 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: any, onTime: (timer: ITimer) => void): void;
/**
* 空出对象引用,以便在js需要时GC可以清理它们的引用
*/
unload(): void;
}
/**
* 允许动作的延迟和重复执行
*/
declare class TimerManager extends GlobalManager {
_timers: Timer[];
update(): void;
/**
* 调度一个一次性或重复的计时器,该计时器将调用已传递的动作
* @param timeInSeconds
* @param repeats
* @param context
* @param onTime
*/
schedule(timeInSeconds: number, repeats: boolean, context: any, onTime: (timer: ITimer) => void): Timer;
}
/**
* 性能监控数据
*/
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: any[]) => T, maxSize?: number, estimatedObjectSize?: number): Pool<T>;
/**
* 从池中获取对象
* @returns 对象实例
*/
obtain(): T;
/**
* 将对象归还到池中
* @param obj 要归还的对象
*/
free(obj: T): void;
/**
* 预热池,创建指定数量的对象
* @param count 要创建的对象数量
*/
warmUp(count: number): void;
/**
* 清空池
*/
clear(): void;
/**
* 获取池中对象数量
*/
get size(): number;
/**
* 获取池的最大大小
*/
get maxSize(): number;
/**
* 设置池的最大大小
*/
set maxSize(value: number);
/**
* 获取池的统计信息
*/
getStats(): PoolStats;
/**
* 重置统计信息
*/
resetStats(): void;
/**
* 更新命中率
*/
private _updateHitRate;
/**
* 更新内存使用估算
*/
private _updateMemoryUsage;
/**
* 静态方法:从指定类型的池中获取对象
* @param type 对象类型
* @returns 对象实例
*/
static obtain<T extends IPoolable>(type: new (...args: any[]) => T): T;
/**
* 静态方法:将对象归还到对应类型的池中
* @param type 对象类型
* @param obj 要归还的对象
*/
static free<T extends IPoolable>(type: new (...args: any[]) => T, obj: T): void;
/**
* 静态方法:预热指定类型的池
* @param type 对象类型
* @param count 要创建的对象数量
*/
static warmUp<T extends IPoolable>(type: new (...args: any[]) => T, count: number): void;
/**
* 静态方法:清空指定类型的池
* @param type 对象类型
*/
static clearPool<T extends IPoolable>(type: new (...args: any[]) => T): void;
/**
* 静态方法:清空所有池
*/
static clearAllPools(): void;
/**
* 静态方法:获取池的统计信息
* @returns 池的统计信息
*/
static getStats(): {
[typeName: string]: PoolStats;
};
/**
* 静态方法:获取所有池的总内存使用量
* @returns 总内存使用量(字节)
*/
static getTotalMemoryUsage(): number;
/**
* 静态方法:获取性能报告
* @returns 格式化的性能报告
*/
static getPerformanceReport(): string;
}
/**
* 分层对象池
* 使用多个不同大小的池来优化内存使用
*/
declare class TieredObjectPool<T extends IPoolable> {
private pools;
private createFn;
private resetFn;
private tierSizes;
private totalObtained;
private totalReleased;
/**
* 构造函数
* @param createFn 创建对象的函数
* @param resetFn 重置对象的函数
* @param tierSizes 各层级的大小,默认[10, 50, 200]
* @param estimatedObjectSize 估算的单个对象大小
*/
constructor(createFn: () => T, resetFn: (obj: T) => void, tierSizes?: number[], estimatedObjectSize?: number);
/**
* 获取对象
* @returns 对象实例
*/
obtain(): T;
/**
* 释放对象
* @param obj 要释放的对象
*/
release(obj: T): void;
/**
* 预热所有池
* @param totalCount 总预热数量
*/
warmUp(totalCount: number): void;
/**
* 清空所有池
*/
clear(): void;
/**
* 获取统计信息
*/
getStats(): {
totalSize: number;
totalMaxSize: number;
totalMemoryUsage: number;
tierStats: PoolStats[];
hitRate: number;
};
/**
* 获取总创建数量
*/
private getTotalCreated;
}
/**
* 池管理器
* 统一管理所有对象池
*/
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> | TieredObjectPool<T>): void;
/**
* 获取池
* @param name 池名称
* @returns 池实例
*/
getPool<T extends IPoolable>(name: string): Pool<T> | TieredObjectPool<T> | null;
/**
* 更新池管理器(应在游戏循环中调用)
*/
update(): void;
/**
* 压缩所有池(清理碎片)
*/
compactAllPools(): void;
/**
* 获取所有池的统计信息
*/
getAllStats(): Map<string, any>;
/**
* 生成性能报告
*/
generateReport(): string;
}
/**
* 框架核心类型定义
*/
/**
* 组件接口
*
* 定义组件的基本契约,所有组件都应该实现此接口
*/
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;
/** 系统处理的实体列表 */
readonly entities: readonly any[];
/** 更新顺序/优先级 */
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?: any;
}
/**
* 事件统计信息接口
*/
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, any>;
}
/**
* ECS调试配置接口
*/
interface IECSDebugConfig {
/** 是否启用调试 */
enabled: boolean;
/** WebSocket服务器URL */
websocketUrl: string;
/** 是否自动重连 */
autoReconnect?: boolean;
/** 数据更新间隔(毫秒) */
updateInterval?: number;
/** 数据通道配置 */
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 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[];
}>;
}
/**
* 系统调试数据接口
*/
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;
}
/**
* 组件类型定义
*/
type ComponentType<T extends Component = Component> = new (...args: any[]) => T;
/**
* 高性能组件存储器
* 使用SoA(Structure of Arrays)模式存储组件
*/
declare class ComponentStorage<T extends Component> {
private components;
private entityToIndex;
private indexToEntity;
private freeIndices;
private componentType;
private _size;
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>;
/**
* 压缩存储(移除空洞)
*/
compact(): void;
/**
* 获取存储统计信息
*/
getStats(): {
totalSlots: number;
usedSlots: number;
freeSlots: number;
fragmentation: number;
};
}
/**
* 组件存储管理器
* 管理所有组件类型的存储器
*/
declare class ComponentStorageManager {
private storages;
/**
* 获取或创建组件存储器
* @param componentType 组件类型
* @returns 组件存储器
*/
getStorage<T extends Component>(componentType: ComponentType<T>): ComponentStorage<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): bigint;
/**
* 压缩所有存储器
*/
compactAll(): void;
/**
* 获取所有存储器的统计信息
*/
getAllStats(): Map<string, any>;
/**
* 清空所有存储器
*/
clear(): void;
}
/**
* 增强的事件总线实现
* 基于TypeSafeEventSystem,提供类型安全的事件发布订阅机制
*/
declare class EventBus implements IEventBus {
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;
/**
* 实体比较器
*
* 用于比较两个实体的优先级,首先按更新顺序比较,然后按ID比较。
*/
declare class EntityComparer {
/**
* 比较两个实体
*
* @param self - 第一个实体
* @param other - 第二个实体
* @returns 比较结果,负数表示self优先级更高,正数表示other优先级更高,0表示相等
*/
compare(self: Entity, other: Entity): number;
}
/**
* 组件缓存配置
*/
interface ComponentCacheConfig {
maxSize: number;
ttl: number;
enableLRU: boolean;
}
/**
* 高性能组件缓存
*/
declare class ComponentCache {
private cache;
private accessOrder;
private config;
constructor(config?: ComponentCacheConfig);
get<T extends Component>(type: ComponentType<T>): T | null;
set<T extends Component>(type: ComponentType<T>, component: T): void;
delete(type: ComponentType): boolean;
clear(): void;
has(type: ComponentType): boolean;
private evictLeastRecentlyUsed;
private updateAccessOrder;
private removeFromAccessOrder;
getStats(): {
size: number;
maxSize: number;
hitRate: number;
averageAccessCount: number;
};
}
/**
* 游戏实体类
*
* ECS架构中的实体(Entity),作为组件的容器。
* 实体本身不包含游戏逻辑,所有功能都通过组件来实现。
* 支持父子关系,可以构建实体层次结构。
*
* @example
* ```typescript
* // 创建实体
* const entity = new Entity("Player", 1);
*
* // 添加组件
* const healthComponent = entity.addComponent(new HealthComponent(100));
*
* // 获取组件
* const health = entity.getComponent(HealthComponent);
*
* // 添加位置组件
* entity.addComponent(new PositionComponent(100, 200));
*
* // 添加子实体
* const weapon = new Entity("Weapon", 2);
* entity.addChild(weapon);
* ```
*/
declare class Entity {
/**
* 实体比较器实例
*/
static entityComparer: EntityComparer;
/**
* 全局事件总线实例
* 用于发射组件相关事件
*/
static eventBus: EventBus | null;
/**
* 实体名称
*
* 用于标识和调试的友好名称。
*/
name: string;
/**
* 实体唯一标识符
*
* 在场景中唯一的数字标识符。
*/
readonly id: number;
/**
* 组件集合
*
* 存储实体拥有的所有组件。
*/
readonly components: Component[];
/**
* 所属场景引用
*
* 指向实体所在的场景实例。
*/
scene: any;
/**
* 更新间隔
*
* 控制实体更新的频率,值越大更新越不频繁。
*/
updateInterval: number;
/**
* 销毁状态标志
*
* 标记实体是否已被销毁。
*/
_isDestroyed: boolean;
/**
* 父实体引用
*
* 指向父级实体,用于构建实体层次结构。
*/
private _parent;
/**
* 子实体集合
*
* 存储所有子级实体的数组。
*/
private _children;
/**
* 激活状态
*
* 控制实体是否处于激活状态。
*/
private _active;
/**
* 实体标签
*
* 用于分类和查询的数字标签。
*/
private _tag;
/**
* 启用状态
*
* 控制实体是否启用更新和处理。
*/
private _enabled;
/**
* 更新顺序
*
* 控制实体在系统中的更新优先级。
*/
private _updateOrder;
/**
* 组件位掩码
*
* 用于快速查询实体拥有的组件类型。
*/
private _componentMask;
/**
* 组件类型到索引的映射
*
* 用于快速定位组件在数组中的位置。
*/
private _componentTypeToIndex;
/**
* 组件缓存
*
* 高性能组件访问缓存。
*/
private _componentCache;
/**
* 组件访问统计
*
* 记录组件访问的性能统计信息。
*/
private _componentAccessStats;
/**
* 构造函数
*
* @param name - 实体名称
* @param id - 实体唯一标识符
*/
constructor(name: string, id: number);
/**
* 获取销毁状态
*
* @returns 如果实体已被销毁则返回true
*/
get isDestroyed(): boolean;
/**
* 获取父实体
*
* @returns 父实体,如果没有父实体则返回null
*/
get parent(): Entity | null;
/**
* 获取子实体数组的只读副本
*
* @returns 子实体数组的副本
*/
get children(): readonly Entity[];
/**
* 获取子实体数量
*
* @returns 子实体的数量
*/
get childCount(): number;
/**
* 获取活跃状态
*
* @returns 如果实体处于活跃状态则返回true
*/
get active(): boolean;
/**
* 设置活跃状态
*
* 设置实体的活跃状态,会影响子实体的有效活跃状态。
*
* @param value - 新的活跃状态
*/
set active(value: boolean);
/**
* 获取实体的有效活跃状态
*
* 考虑父实体的活跃状态,只有当实体本身和所有父实体都处于活跃状态时才返回true。
*
* @returns 有效的活跃状态
*/
get activeInHierarchy(): boolean;
/**
* 获取实体标签
*
* @returns 实体的数字标签
*/
get tag(): number;
/**
* 设置实体标签
*
* @param value - 新的标签值
*/
set tag(value: number);
/**
* 获取启用状态
*
* @returns 如果实体已启用则返回true
*/
get enabled(): boolean;
/**
* 设置启用状态
*
* @param value - 新的启用状态
*/
set enabled(value: boolean);
/**
* 获取更新顺序
*
* @returns 实体的更新顺序值
*/
get updateOrder(): number;
/**
* 设置更新顺序
*
* @param value - 新的更新顺序值
*/
set updateOrder(value: number);
/**
* 获取组件位掩码
*
* @returns 实体的组件位掩码
*/
get componentMask(): bigint;
/**
* 创建并添加组件
*
* @param componentType - 组件类型
* @param args - 组件构造函数参数
* @returns 创建的组件实例
*/
createComponent<T extends Component>(componentType: ComponentType<T>, ...args: any[]): T;
/**
* 内部添加组件方法(不进行重复检查,用于初始化)
*
* @param component - 要添加的组件实例
* @returns 添加的组件实例
*/
private addComponentInternal;
/**
* 添加组件到实体
*
* @param component - 要添加的组件实例
* @returns 添加的组件实例
* @throws {Error} 如果组件类型已存在
*/
addComponent<T extends Component>(component: T): T;
/**
* 获取指定类型的组件
*
* @param type - 组件类型
* @returns 组件实例或null
*/
getComponent<T extends Component>(type: ComponentType<T>): T | null;
/**
* 更新组件访问统计
*
* @param type - 组件类型
*/
private updateComponentAccessStats;
/**
* 记录缓存命中
*
* @param type - 组件类型
*/
private recordCacheHit;
/**
* 记录缓存未命中
*
* @param type - 组件类型
*/
private recordCacheMiss;
/**
* 重建组件索引映射
*/
private rebuildComponentIndex;
/**
* 检查实体是否有指定类型的组件
*
* @param type - 组件类型
* @returns 如果有该组件则返回true
*/
hasComponent<T extends Component>(type: ComponentType<T>): boolean;
/**
* 获取或创建指定类型的组件
*
* @param type - 组件类型
* @param args - 组件构造函数参数(仅在创建时使用)
* @returns 组件实例
*/
getOrCreateComponent<T extends Component>(type: ComponentType<T>, ...args: any[]): T;
/**
* 移除指定的组件
*
* @param component - 要移除的组件实例
*/
removeComponent(component: Component): void;
/**
* 移除指定类型的组件
*
* @param type - 组件类型
* @returns 被移除的组件实例或null
*/
removeComponentByType<T extends Component>(type: ComponentType<T>): T | null;
/**
* 移除所有组件
*/
removeAllComponents(): void;
/**
* 批量添加组件
*
* @param components - 要添加的组件数组
* @returns 添加的组件数组
*/
addComponents<T extends Component>(components: T[]): T[];
/**
* 批量移除组件类型
*
* @param componentTypes - 要移除的组件类型数组
* @returns 被移除的组件数组
*/
removeComponentsByTypes<T extends Component>(componentTypes: ComponentType<T>[]): (T | null)[];
/**
* 获取组件缓存统计信息
*
* @returns 缓存统计信息
*/
getComponentCacheStats(): {
cacheStats: ReturnType<ComponentCache['getStats']>;
accessStats: Map<string, {
accessCount: number;
lastAccessed: number;
cacheHits: number;
cacheMisses: number;
hitRate: number;
}>;
indexMappingSize: number;
totalComponents: number;
};
/**
* 预热组件缓存
*
* 将所有组件添加到缓存中,提升后续访问性能
*/
warmUpComponentCache(): void;
/**
* 清理组件缓存
*
* 清除过期的缓存项,释放内存
*/
cleanupComponentCache(): void;
/**
* 获取所有指定类型的组件
*
* @param type - 组件类型
* @returns 组件实例数组
*/
getComponents<T extends Component>(type: ComponentType<T>): T[];
/**
* 添加子实体
*
* @param child - 要添加的子实体
* @returns 添加的子实体
*/
addChild(child: Entity): Entity;
/**
* 移除子实体
*
* @param child - 要移除的子实体
* @returns 是否成功移除
*/
removeChild(child: Entity): boolean;
/**
* 移除所有子实体
*/
removeAllChildren(): void;
/**
* 根据名称查找子实体
*
* @param name - 子实体名称
* @param recursive - 是否递归查找
* @returns 找到的子实体或null
*/
findChild(name: string, recursive?: boolean): Entity | null;
/**
* 根据标签查找子实体
*
* @param tag - 标签
* @param recursive - 是否递归查找
* @returns 找到的子实体数组
*/
findChildrenByTag(tag: number, recursive?: boolean): Entity[];
/**
* 获取根实体
*
* @returns 层次结构的根实体
*/
getRoot(): Entity;
/**
* 检查是否是指定实体的祖先
*
* @param entity - 要检查的实体
* @returns 如果是祖先则返回true
*/
isAncestorOf(entity: Entity): boolean;
/**
* 检查是否是指定实体的后代
*
* @param entity - 要检查的实体
* @returns 如果是后代则返回true
*/
isDescendantOf(entity: Entity): boolean;
/**
* 获取层次深度
*
* @returns 在层次结构中的深度(根实体为0)
*/
getDepth(): number;
/**
* 遍历所有子实体(深度优先)
*
* @param callback - 对每个子实体执行的回调函数
* @param recursive - 是否递归遍历
*/
forEachChild(callback: (child: Entity, index: number) => void, recursive?: boolean): void;
/**
* 活跃状态改变时的回调
*/
private onActiveChanged;
/**
* 更新实体
*
* 调用所有组件的更新方法,并更新子实体。
*/
update(): void;
/**
* 销毁实体
*
* 移除所有组件、子实体并标记为已销毁。
*/
destroy(): void;
/**
* 比较实体
*
* @param other - 另一个实体
* @returns 比较结果
*/
compareTo(other: Entity): number;
/**
* 获取实体的字符串表示
*
* @returns 实体的字符串描述
*/
toString(): string;
/**
* 获取实体的调试信息(包含组件缓存信息)
*
* @returns 包含实体详细信息的对象
*/
getDebugInfo(): {
name: string;
id: number;
enabled: boolean;
active: boolean;
activeInHierarchy: boolean;
destroyed: boolean;
componentCount: number;
componentTypes: string[];
componentMask: string;
parentId: number | null;
childCount: number;
childIds: number[];
depth: number;
componentCache: {
size: number;
maxSize: number;
hitRate: number;
averageAccessCount: number;
};
componentAccessStats: Array<{
componentType: string;
accessCount: number;
cacheHits: number;
cacheMisses: number;
hitRate: number;
lastAccessed: string;
}>;
indexMappingSize: number;
};
}
/**
* 高性能实体列表管理器
* 管理场景中的所有实体,支持快速查找和批量操作
*/
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: any[]) => 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;
};
}
/**
* 高性能位操作类
* 基于BigInt实现,支持任意数量的位操作
*/
declare class Bits {
private _value;
constructor(initialValue?: bigint);
/**
* 设置指定位置的位为1
*/
set(index: number): void;
/**
* 清除指定位置的位(设为0)
*/
clear(index: number): void;
/**
* 获取指定位置的位值
*/
get(index: number): boolean;
/**
* 检查是否包含所有指定的位
*/
containsAll(other: Bits): boolean;
/**
* 检查是否包含任意一个指定的位
*/
intersects(other: Bits): boolean;
/**
* 检查是否不包含任何指定的位
*/
excludes(other: Bits): boolean;
/**
* 清空所有位
*/
clearAll(): void;
/**
* 检查是否为空(没有设置任何位)
*/
isEmpty(): boolean;
/**
* 获取设置的位数量
*/
cardinality(): number;
/**
* 位运算:与
*/
and(other: Bits): Bits;
/**
* 位运算:或
*/
or(other: Bits): Bits;
/**
* 位运算:异或
*/
xor(other: Bits): Bits;
/**
* 位运算:非
*/
not(maxBits?: number): Bits;
/**
* 复制另一个Bits对象
*/
copyFrom(other: Bits): void;
/**
* 创建当前Bits的副本
*/
clone(): Bits;
/**
* 获取原始BigInt值
*/
getValue(): bigint;
/**
* 设置原始BigInt值
*/
setValue(value: bigint): void;
/**
* 获取调试信息
*/
toString(): string;
/**
* 获取二进制表示
*/
toBinaryString(maxBits?: number): string;
/**
* 获取十六进制表示
*/
toHexString(): string;
/**
* 从二进制字符串创建Bits
*/
static fromBinaryString(binaryString: string): Bits;
/**
* 从十六进制字符串创建Bits
*/
static fromHexString(hexString: string): Bits;
/**
* 比较两个Bits对象是否相等
*/
equals(other: Bits): boolean;
/**
* 获取最高位的索引
*/
getHighestBitIndex(): number;
/**
* 获取最低位的索引
*/
getLowestBitIndex(): number;
}
/**
* 高性能实体匹配器
* 用于快速匹配符合条件的实体
*/
declare class Matcher {
protected allSet: (new (...args: any[]) => Component)[];
protected exclusionSet: (new (...args: any[]) => Component)[];
protected oneSet: (new (...args: any[]) => Component)[];
private _allBits?;
private _exclusionBits?;
private _oneBits?;
private _isDirty;
static empty(): Matcher;
getAllSet(): (new (...args: any[]) => Component)[];
getExclusionSet(): (new (...args: any[]) => Component)[];
getOneSet(): (new (...args: any[]) => Component)[];
/**
* 检查实体是否匹配条件
* @param entity 要检查的实体
* @returns 是否匹配
*/
isInterestedEntity(entity: Entity): boolean;
/**
* 检查组件位掩码是否匹配条件
* @param componentBits 组件位掩码
* @returns 是否匹配
*/
isInterested(componentBits: Bits): boolean;
/**
* 添加所有包含的组件类型
* @param types 所有包含的组件类型列表
*/
all(...types: (new (...args: any[]) => Component)[]): Matcher;
/**
* 添加排除包含的组件类型
* @param types 排除包含的组件类型列表
*/
exclude(...types: (new (...args: any[]) => Component)[]): Matcher;
/**
* 添加至少包含其中之一的组件类型
* @param types 至少包含其中之一的组件类型列表
*/
one(...types: (new (...args: any[]) => Component)[]): Matcher;
/**
* 获取实体的组件位掩码
* @param entity 实体
* @returns 组件位掩码
*/
private getEntityBits;
/**
* 如果位掩码已过期,则更新它们
*/
private updateBitsIfDirty;
/**
* 创建匹配器的字符串表示(用于调试)
* @returns 字符串表示
*/
toString(): string;
}
/**
* 实体系统的基类
*
* 用于处理一组符合特定条件的实体。系统是ECS架构中的逻辑处理单元,
* 负责对拥有特定组件组合的实体执行业务逻辑。
*
* @example
* ```typescript
* class MovementSystem extends EntitySystem {
* constructor() {
* super(Matcher.empty().all(Transform, Velocity));
* }
*
* protected process(entities: Entity[]): void {
* for (const entity of entities) {
* const transform = entity.getComponent(Transform);
* const velocity = entity.getComponent(Velocity);
* transform.position.add(velocity.value);
* }
* }
* }
* ```
*/
declare abstract class EntitySystem implements ISystemBase {
private _entities;
private _updateOrder;
private _enabled;
private _performanceMonitor;
private _systemName;
/**
* 获取系统处理的实体列表
*/
get entities(): readonly Entity[];
/**
* 获取系统的更新时序
*/
get updateOrder(): number;
set updateOrder(value: number);
/**
* 获取系统的启用状态
*/
get enabled(): boolean;
/**
* 设置系统的启用状态
*/
set enabled(value: boolean);
/**
* 获取系统名称
*/
get systemName(): string;
constructor(matcher?: Matcher);
private _scene;
/**
* 这个系统所属的场景
*/
get scene(): Scene;
set scene(value: Scene);
private _matcher;
/**
* 获取实体匹配器
*/
get matcher(): Matcher;
/**
* 设置更新时序
* @param order 更新时序
*/
setUpdateOrder(order: number): void;
/**
* 系统初始化
*
* 在系统创建时调用,自动检查场景中已存在的实体是否匹配此系统。
* 子类可以重写此方法进行额外的初始化操作。
*/
initialize(): void;
/**
* 当实体的组件发生变化时调用
*
* 检查实体是否仍然符合系统的匹配条件,并相应地添加或移除实体。
*
* @param entity 发生变化的实体
*/
onChanged(entity: Entity): void;
/**
* 添加实体到系统
*
* @param entity 要添加的实体
*/
add(entity: Entity): void;
/**
* 当实体被添加到系统时调用
*
* 子类可以重写此方法来处理实体添加事件。
*
* @param entity 被添加的实体
*/
protected onAdded(entity: Entity): void;
/**
* 从系统中移除实体
*
* @param entity 要移除的实体
*/
remove(entity: Entity): void;
/**
* 当实体从系统中移除时调用
*
* 子类可以重写此方法来处理实体移除事件。
*
* @param entity 被移除的实体
*/
protected onRemoved(entity: Entity): void;
/**
* 更新系统
*
* 在每帧调用,处理系统的主要逻辑。
*/
update(): void;
/**
* 后期更新系统
*
* 在所有系统的update方法执行完毕后调用。
*/
lateUpdate(): void;
/**
* 在系统处理开始前调用
*
* 子类可以重写此方法进行预处理操作。
*/
protected begin(): void;
/**
* 处理实体列表
*
* 系统的核心逻辑,子类必须实现此方法来定义具体的处理逻辑。
*
* @param entities 要处理的实体列表
*/
protected process(entities: Entity[]): void;
/**
* 后期处理实体列表
*
* 在主要处理逻辑之后执行,子类可以重写此方法。
*
* @param entities 要处理的实体列表
*/
protected lateProcess(entities: Entity[]): void;
/**
* 系统处理完毕后调用
*
* 子类可以重写此方法进行后处理操作。
*/
protected end(): void;
/**
* 检查系统是否需要处理
*
* 在启用系统时有用,但仅偶尔需要处理。
* 这只影响处理,不影响事件或订阅列表。
*
* @returns 如果系统应该处理,则为true,如果不处理则为false
*/
protected checkProcessing(): boolean;
/**
* 获取系统的性能数据
*
* @returns 性能数据或undefined
*/
getPerformanceData(): PerformanceData | undefined;
/**
* 获取系统的性能统计
*
* @returns 性能统计或undefined
*/
getPerformanceStats(): PerformanceStats | undefined;
/**
* 重置系统的性能数据
*/
resetPerformanceData(): void;
/**
* 获取系统信息的字符串表示
*
* @returns 系统信息字符串
*/
toString(): string;
}
/**
* 实体处理器列表管理器
* 管理场景中的所有实体系统
*/
declare class EntityProcessorList {
private _processors;
private _isDirty;
/**
* 设置为脏状态,需要重新排序
*/
setDirty(): void;
/**
* 添加实体处理器
* @param processor 要添加的处理器
*/
add(processor: EntitySystem): void;
/**
* 移除实体处理器
* @param processor 要移除的处理器
*/
remove(proce