@esengine/ecs-framework 2.1.30 → 2.1.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs +2 -0
- package/index.cjs.map +1 -0
- package/index.d.ts +6357 -0
- package/index.mjs +2 -0
- package/index.mjs.map +1 -0
- package/index.umd.js +2 -0
- package/index.umd.js.map +1 -0
- package/package.json +27 -50
- package/bin/Core.d.ts +0 -279
- package/bin/Core.d.ts.map +0 -1
- package/bin/Core.js +0 -400
- package/bin/Core.js.map +0 -1
- package/bin/ECS/Component.d.ts +0 -120
- package/bin/ECS/Component.d.ts.map +0 -1
- package/bin/ECS/Component.js +0 -129
- package/bin/ECS/Component.js.map +0 -1
- package/bin/ECS/Components/IUpdatable.d.ts +0 -22
- package/bin/ECS/Components/IUpdatable.d.ts.map +0 -1
- package/bin/ECS/Components/IUpdatable.js +0 -17
- package/bin/ECS/Components/IUpdatable.js.map +0 -1
- package/bin/ECS/Components/SceneComponent.d.ts +0 -40
- package/bin/ECS/Components/SceneComponent.d.ts.map +0 -1
- package/bin/ECS/Components/SceneComponent.js +0 -57
- package/bin/ECS/Components/SceneComponent.js.map +0 -1
- package/bin/ECS/Core/ArchetypeSystem.d.ts +0 -100
- package/bin/ECS/Core/ArchetypeSystem.d.ts.map +0 -1
- package/bin/ECS/Core/ArchetypeSystem.js +0 -193
- package/bin/ECS/Core/ArchetypeSystem.js.map +0 -1
- package/bin/ECS/Core/ComponentIndex.d.ts +0 -151
- package/bin/ECS/Core/ComponentIndex.d.ts.map +0 -1
- package/bin/ECS/Core/ComponentIndex.js +0 -405
- package/bin/ECS/Core/ComponentIndex.js.map +0 -1
- package/bin/ECS/Core/ComponentPool.d.ts +0 -88
- package/bin/ECS/Core/ComponentPool.d.ts.map +0 -1
- package/bin/ECS/Core/ComponentPool.js +0 -159
- package/bin/ECS/Core/ComponentPool.js.map +0 -1
- package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts +0 -92
- package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts.map +0 -1
- package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js +0 -167
- package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js.map +0 -1
- package/bin/ECS/Core/ComponentStorage.d.ts +0 -233
- package/bin/ECS/Core/ComponentStorage.d.ts.map +0 -1
- package/bin/ECS/Core/ComponentStorage.js +0 -463
- package/bin/ECS/Core/ComponentStorage.js.map +0 -1
- package/bin/ECS/Core/DirtyTrackingSystem.d.ts +0 -197
- package/bin/ECS/Core/DirtyTrackingSystem.d.ts.map +0 -1
- package/bin/ECS/Core/DirtyTrackingSystem.js +0 -297
- package/bin/ECS/Core/DirtyTrackingSystem.js.map +0 -1
- package/bin/ECS/Core/EntityManager.d.ts +0 -379
- package/bin/ECS/Core/EntityManager.d.ts.map +0 -1
- package/bin/ECS/Core/EntityManager.js +0 -686
- package/bin/ECS/Core/EntityManager.js.map +0 -1
- package/bin/ECS/Core/EventBus.d.ts +0 -218
- package/bin/ECS/Core/EventBus.d.ts.map +0 -1
- package/bin/ECS/Core/EventBus.js +0 -402
- package/bin/ECS/Core/EventBus.js.map +0 -1
- package/bin/ECS/Core/EventSystem.d.ts +0 -237
- package/bin/ECS/Core/EventSystem.d.ts.map +0 -1
- package/bin/ECS/Core/EventSystem.js +0 -478
- package/bin/ECS/Core/EventSystem.js.map +0 -1
- package/bin/ECS/Core/Events/index.d.ts +0 -3
- package/bin/ECS/Core/Events/index.d.ts.map +0 -1
- package/bin/ECS/Core/Events/index.js +0 -3
- package/bin/ECS/Core/Events/index.js.map +0 -1
- package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts +0 -35
- package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI/ComponentBuilder.js +0 -48
- package/bin/ECS/Core/FluentAPI/ComponentBuilder.js.map +0 -1
- package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts +0 -135
- package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js +0 -166
- package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js.map +0 -1
- package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts +0 -58
- package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js +0 -85
- package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js.map +0 -1
- package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts +0 -110
- package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI/EntityBuilder.js +0 -174
- package/bin/ECS/Core/FluentAPI/EntityBuilder.js.map +0 -1
- package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts +0 -53
- package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI/SceneBuilder.js +0 -79
- package/bin/ECS/Core/FluentAPI/SceneBuilder.js.map +0 -1
- package/bin/ECS/Core/FluentAPI/index.d.ts +0 -6
- package/bin/ECS/Core/FluentAPI/index.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI/index.js +0 -6
- package/bin/ECS/Core/FluentAPI/index.js.map +0 -1
- package/bin/ECS/Core/FluentAPI.d.ts +0 -2
- package/bin/ECS/Core/FluentAPI.d.ts.map +0 -1
- package/bin/ECS/Core/FluentAPI.js +0 -3
- package/bin/ECS/Core/FluentAPI.js.map +0 -1
- package/bin/ECS/Core/Performance/index.d.ts +0 -4
- package/bin/ECS/Core/Performance/index.d.ts.map +0 -1
- package/bin/ECS/Core/Performance/index.js +0 -4
- package/bin/ECS/Core/Performance/index.js.map +0 -1
- package/bin/ECS/Core/Query/index.d.ts +0 -4
- package/bin/ECS/Core/Query/index.d.ts.map +0 -1
- package/bin/ECS/Core/Query/index.js +0 -4
- package/bin/ECS/Core/Query/index.js.map +0 -1
- package/bin/ECS/Core/QuerySystem.d.ts +0 -438
- package/bin/ECS/Core/QuerySystem.d.ts.map +0 -1
- package/bin/ECS/Core/QuerySystem.js +0 -974
- package/bin/ECS/Core/QuerySystem.js.map +0 -1
- package/bin/ECS/Core/SoAStorage.d.ts +0 -97
- package/bin/ECS/Core/SoAStorage.d.ts.map +0 -1
- package/bin/ECS/Core/SoAStorage.js +0 -548
- package/bin/ECS/Core/SoAStorage.js.map +0 -1
- package/bin/ECS/Core/Storage/index.d.ts +0 -4
- package/bin/ECS/Core/Storage/index.d.ts.map +0 -1
- package/bin/ECS/Core/Storage/index.js +0 -4
- package/bin/ECS/Core/Storage/index.js.map +0 -1
- package/bin/ECS/CoreEvents.d.ts +0 -131
- package/bin/ECS/CoreEvents.d.ts.map +0 -1
- package/bin/ECS/CoreEvents.js +0 -163
- package/bin/ECS/CoreEvents.js.map +0 -1
- package/bin/ECS/Entity.d.ts +0 -455
- package/bin/ECS/Entity.d.ts.map +0 -1
- package/bin/ECS/Entity.js +0 -837
- package/bin/ECS/Entity.js.map +0 -1
- package/bin/ECS/Scene.d.ts +0 -225
- package/bin/ECS/Scene.d.ts.map +0 -1
- package/bin/ECS/Scene.js +0 -325
- package/bin/ECS/Scene.js.map +0 -1
- package/bin/ECS/Systems/EntitySystem.d.ts +0 -200
- package/bin/ECS/Systems/EntitySystem.d.ts.map +0 -1
- package/bin/ECS/Systems/EntitySystem.js +0 -431
- package/bin/ECS/Systems/EntitySystem.js.map +0 -1
- package/bin/ECS/Systems/IntervalSystem.d.ts +0 -33
- package/bin/ECS/Systems/IntervalSystem.d.ts.map +0 -1
- package/bin/ECS/Systems/IntervalSystem.js +0 -50
- package/bin/ECS/Systems/IntervalSystem.js.map +0 -1
- package/bin/ECS/Systems/PassiveSystem.d.ts +0 -17
- package/bin/ECS/Systems/PassiveSystem.d.ts.map +0 -1
- package/bin/ECS/Systems/PassiveSystem.js +0 -19
- package/bin/ECS/Systems/PassiveSystem.js.map +0 -1
- package/bin/ECS/Systems/ProcessingSystem.d.ts +0 -21
- package/bin/ECS/Systems/ProcessingSystem.d.ts.map +0 -1
- package/bin/ECS/Systems/ProcessingSystem.js +0 -20
- package/bin/ECS/Systems/ProcessingSystem.js.map +0 -1
- package/bin/ECS/Systems/index.d.ts +0 -5
- package/bin/ECS/Systems/index.d.ts.map +0 -1
- package/bin/ECS/Systems/index.js +0 -6
- package/bin/ECS/Systems/index.js.map +0 -1
- package/bin/ECS/Utils/BigIntCompatibility.d.ts +0 -164
- package/bin/ECS/Utils/BigIntCompatibility.d.ts.map +0 -1
- package/bin/ECS/Utils/BigIntCompatibility.js +0 -578
- package/bin/ECS/Utils/BigIntCompatibility.js.map +0 -1
- package/bin/ECS/Utils/Bits.d.ts +0 -163
- package/bin/ECS/Utils/Bits.d.ts.map +0 -1
- package/bin/ECS/Utils/Bits.js +0 -286
- package/bin/ECS/Utils/Bits.js.map +0 -1
- package/bin/ECS/Utils/ComponentTypeManager.d.ts +0 -50
- package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +0 -1
- package/bin/ECS/Utils/ComponentTypeManager.js +0 -84
- package/bin/ECS/Utils/ComponentTypeManager.js.map +0 -1
- package/bin/ECS/Utils/EntityList.d.ts +0 -108
- package/bin/ECS/Utils/EntityList.d.ts.map +0 -1
- package/bin/ECS/Utils/EntityList.js +0 -262
- package/bin/ECS/Utils/EntityList.js.map +0 -1
- package/bin/ECS/Utils/EntityProcessorList.d.ts +0 -56
- package/bin/ECS/Utils/EntityProcessorList.d.ts.map +0 -1
- package/bin/ECS/Utils/EntityProcessorList.js +0 -102
- package/bin/ECS/Utils/EntityProcessorList.js.map +0 -1
- package/bin/ECS/Utils/IdentifierPool.d.ts +0 -203
- package/bin/ECS/Utils/IdentifierPool.d.ts.map +0 -1
- package/bin/ECS/Utils/IdentifierPool.js +0 -325
- package/bin/ECS/Utils/IdentifierPool.js.map +0 -1
- package/bin/ECS/Utils/Matcher.d.ts +0 -143
- package/bin/ECS/Utils/Matcher.d.ts.map +0 -1
- package/bin/ECS/Utils/Matcher.js +0 -249
- package/bin/ECS/Utils/Matcher.js.map +0 -1
- package/bin/ECS/Utils/index.d.ts +0 -8
- package/bin/ECS/Utils/index.d.ts.map +0 -1
- package/bin/ECS/Utils/index.js +0 -9
- package/bin/ECS/Utils/index.js.map +0 -1
- package/bin/ECS/index.d.ts +0 -12
- package/bin/ECS/index.d.ts.map +0 -1
- package/bin/ECS/index.js +0 -12
- package/bin/ECS/index.js.map +0 -1
- package/bin/Types/index.d.ts +0 -471
- package/bin/Types/index.d.ts.map +0 -1
- package/bin/Types/index.js +0 -5
- package/bin/Types/index.js.map +0 -1
- package/bin/Utils/Debug/ComponentDataCollector.d.ts +0 -28
- package/bin/Utils/Debug/ComponentDataCollector.d.ts.map +0 -1
- package/bin/Utils/Debug/ComponentDataCollector.js +0 -248
- package/bin/Utils/Debug/ComponentDataCollector.js.map +0 -1
- package/bin/Utils/Debug/DebugDataFormatter.d.ts +0 -22
- package/bin/Utils/Debug/DebugDataFormatter.d.ts.map +0 -1
- package/bin/Utils/Debug/DebugDataFormatter.js +0 -117
- package/bin/Utils/Debug/DebugDataFormatter.js.map +0 -1
- package/bin/Utils/Debug/DebugManager.d.ts +0 -104
- package/bin/Utils/Debug/DebugManager.d.ts.map +0 -1
- package/bin/Utils/Debug/DebugManager.js +0 -647
- package/bin/Utils/Debug/DebugManager.js.map +0 -1
- package/bin/Utils/Debug/EntityDataCollector.d.ts +0 -92
- package/bin/Utils/Debug/EntityDataCollector.d.ts.map +0 -1
- package/bin/Utils/Debug/EntityDataCollector.js +0 -864
- package/bin/Utils/Debug/EntityDataCollector.js.map +0 -1
- package/bin/Utils/Debug/PerformanceDataCollector.d.ts +0 -32
- package/bin/Utils/Debug/PerformanceDataCollector.d.ts.map +0 -1
- package/bin/Utils/Debug/PerformanceDataCollector.js +0 -217
- package/bin/Utils/Debug/PerformanceDataCollector.js.map +0 -1
- package/bin/Utils/Debug/SceneDataCollector.d.ts +0 -16
- package/bin/Utils/Debug/SceneDataCollector.d.ts.map +0 -1
- package/bin/Utils/Debug/SceneDataCollector.js +0 -46
- package/bin/Utils/Debug/SceneDataCollector.js.map +0 -1
- package/bin/Utils/Debug/SystemDataCollector.d.ts +0 -11
- package/bin/Utils/Debug/SystemDataCollector.d.ts.map +0 -1
- package/bin/Utils/Debug/SystemDataCollector.js +0 -59
- package/bin/Utils/Debug/SystemDataCollector.js.map +0 -1
- package/bin/Utils/Debug/WebSocketManager.d.ts +0 -59
- package/bin/Utils/Debug/WebSocketManager.d.ts.map +0 -1
- package/bin/Utils/Debug/WebSocketManager.js +0 -148
- package/bin/Utils/Debug/WebSocketManager.js.map +0 -1
- package/bin/Utils/Debug/index.d.ts +0 -8
- package/bin/Utils/Debug/index.d.ts.map +0 -1
- package/bin/Utils/Debug/index.js +0 -8
- package/bin/Utils/Debug/index.js.map +0 -1
- package/bin/Utils/Emitter.d.ts +0 -43
- package/bin/Utils/Emitter.d.ts.map +0 -1
- package/bin/Utils/Emitter.js +0 -69
- package/bin/Utils/Emitter.js.map +0 -1
- package/bin/Utils/Extensions/NumberExtension.d.ts +0 -13
- package/bin/Utils/Extensions/NumberExtension.d.ts.map +0 -1
- package/bin/Utils/Extensions/NumberExtension.js +0 -17
- package/bin/Utils/Extensions/NumberExtension.js.map +0 -1
- package/bin/Utils/Extensions/TypeUtils.d.ts +0 -13
- package/bin/Utils/Extensions/TypeUtils.d.ts.map +0 -1
- package/bin/Utils/Extensions/TypeUtils.js +0 -15
- package/bin/Utils/Extensions/TypeUtils.js.map +0 -1
- package/bin/Utils/Extensions/index.d.ts +0 -3
- package/bin/Utils/Extensions/index.d.ts.map +0 -1
- package/bin/Utils/Extensions/index.js +0 -4
- package/bin/Utils/Extensions/index.js.map +0 -1
- package/bin/Utils/GlobalManager.d.ts +0 -32
- package/bin/Utils/GlobalManager.d.ts.map +0 -1
- package/bin/Utils/GlobalManager.js +0 -53
- package/bin/Utils/GlobalManager.js.map +0 -1
- package/bin/Utils/Logger.d.ts +0 -156
- package/bin/Utils/Logger.d.ts.map +0 -1
- package/bin/Utils/Logger.js +0 -256
- package/bin/Utils/Logger.js.map +0 -1
- package/bin/Utils/PerformanceMonitor.d.ts +0 -211
- package/bin/Utils/PerformanceMonitor.d.ts.map +0 -1
- package/bin/Utils/PerformanceMonitor.js +0 -270
- package/bin/Utils/PerformanceMonitor.js.map +0 -1
- package/bin/Utils/Pool/IPoolable.d.ts +0 -29
- package/bin/Utils/Pool/IPoolable.d.ts.map +0 -1
- package/bin/Utils/Pool/IPoolable.js +0 -2
- package/bin/Utils/Pool/IPoolable.js.map +0 -1
- package/bin/Utils/Pool/Pool.d.ts +0 -109
- package/bin/Utils/Pool/Pool.d.ts.map +0 -1
- package/bin/Utils/Pool/Pool.js +0 -238
- package/bin/Utils/Pool/Pool.js.map +0 -1
- package/bin/Utils/Pool/PoolManager.d.ts +0 -91
- package/bin/Utils/Pool/PoolManager.d.ts.map +0 -1
- package/bin/Utils/Pool/PoolManager.js +0 -197
- package/bin/Utils/Pool/PoolManager.js.map +0 -1
- package/bin/Utils/Pool/index.d.ts +0 -4
- package/bin/Utils/Pool/index.d.ts.map +0 -1
- package/bin/Utils/Pool/index.js +0 -4
- package/bin/Utils/Pool/index.js.map +0 -1
- package/bin/Utils/Time.d.ts +0 -47
- package/bin/Utils/Time.d.ts.map +0 -1
- package/bin/Utils/Time.js +0 -64
- package/bin/Utils/Time.js.map +0 -1
- package/bin/Utils/Timers/ITimer.d.ts +0 -16
- package/bin/Utils/Timers/ITimer.d.ts.map +0 -1
- package/bin/Utils/Timers/ITimer.js +0 -2
- package/bin/Utils/Timers/ITimer.js.map +0 -1
- package/bin/Utils/Timers/Timer.d.ts +0 -30
- package/bin/Utils/Timers/Timer.d.ts.map +0 -1
- package/bin/Utils/Timers/Timer.js +0 -58
- package/bin/Utils/Timers/Timer.js.map +0 -1
- package/bin/Utils/Timers/TimerManager.d.ts +0 -19
- package/bin/Utils/Timers/TimerManager.d.ts.map +0 -1
- package/bin/Utils/Timers/TimerManager.js +0 -33
- package/bin/Utils/Timers/TimerManager.js.map +0 -1
- package/bin/Utils/index.d.ts +0 -9
- package/bin/Utils/index.d.ts.map +0 -1
- package/bin/Utils/index.js +0 -9
- package/bin/Utils/index.js.map +0 -1
- package/bin/index.d.ts +0 -16
- package/bin/index.d.ts.map +0 -1
- package/bin/index.js +0 -19
- package/bin/index.js.map +0 -1
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 世代式ID池管理器
|
|
3
|
-
*
|
|
4
|
-
* 用于管理实体ID的分配和回收,支持世代版本控制以防止悬空引用问题。
|
|
5
|
-
* 世代式ID由索引和版本组成,当ID被回收时版本会递增,确保旧引用失效。
|
|
6
|
-
*
|
|
7
|
-
* 支持动态扩展,理论上可以支持到65535个索引(16位),每个索引65535个版本(16位)。
|
|
8
|
-
* 总计可以处理超过42亿个独特的ID组合,完全满足ECS大规模实体需求。
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* const pool = new IdentifierPool();
|
|
13
|
-
*
|
|
14
|
-
* // 分配ID
|
|
15
|
-
* const id = pool.checkOut(); // 例如: 65536 (版本1,索引0)
|
|
16
|
-
*
|
|
17
|
-
* // 回收ID
|
|
18
|
-
* pool.checkIn(id);
|
|
19
|
-
*
|
|
20
|
-
* // 验证ID是否有效
|
|
21
|
-
* const isValid = pool.isValid(id); // false,因为版本已递增
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export declare class IdentifierPool {
|
|
25
|
-
/**
|
|
26
|
-
* 下一个可用的索引
|
|
27
|
-
*/
|
|
28
|
-
private _nextAvailableIndex;
|
|
29
|
-
/**
|
|
30
|
-
* 空闲的索引列表
|
|
31
|
-
*/
|
|
32
|
-
private _freeIndices;
|
|
33
|
-
/**
|
|
34
|
-
* 每个索引对应的世代版本
|
|
35
|
-
* 动态扩展的Map,按需分配内存
|
|
36
|
-
*/
|
|
37
|
-
private _generations;
|
|
38
|
-
/**
|
|
39
|
-
* 延迟回收队列
|
|
40
|
-
* 防止在同一帧内立即重用ID,避免时序问题
|
|
41
|
-
*/
|
|
42
|
-
private _pendingRecycle;
|
|
43
|
-
/**
|
|
44
|
-
* 延迟回收时间(毫秒)
|
|
45
|
-
*/
|
|
46
|
-
private _recycleDelay;
|
|
47
|
-
/**
|
|
48
|
-
* 最大索引限制(16位)
|
|
49
|
-
* 这是框架设计选择:16位索引 + 16位版本 = 32位ID,确保高效位操作
|
|
50
|
-
* 不是硬件限制,而是性能和内存效率的权衡
|
|
51
|
-
*/
|
|
52
|
-
private static readonly MAX_INDEX;
|
|
53
|
-
/**
|
|
54
|
-
* 最大世代限制(16位)
|
|
55
|
-
*/
|
|
56
|
-
private static readonly MAX_GENERATION;
|
|
57
|
-
/**
|
|
58
|
-
* 内存扩展块大小
|
|
59
|
-
* 当需要更多内存时,一次性预分配的索引数量
|
|
60
|
-
*/
|
|
61
|
-
private _expansionBlockSize;
|
|
62
|
-
/**
|
|
63
|
-
* 统计信息
|
|
64
|
-
*/
|
|
65
|
-
private _stats;
|
|
66
|
-
/**
|
|
67
|
-
* 构造函数
|
|
68
|
-
*
|
|
69
|
-
* @param recycleDelay 延迟回收时间(毫秒),默认为100ms
|
|
70
|
-
* @param expansionBlockSize 内存扩展块大小,默认为1024
|
|
71
|
-
*/
|
|
72
|
-
constructor(recycleDelay?: number, expansionBlockSize?: number);
|
|
73
|
-
/**
|
|
74
|
-
* 获取一个可用的ID
|
|
75
|
-
*
|
|
76
|
-
* 返回一个32位ID,高16位为世代版本,低16位为索引。
|
|
77
|
-
*
|
|
78
|
-
* @returns 新分配的实体ID
|
|
79
|
-
* @throws {Error} 当达到索引限制时抛出错误
|
|
80
|
-
*/
|
|
81
|
-
checkOut(): number;
|
|
82
|
-
/**
|
|
83
|
-
* 回收一个ID
|
|
84
|
-
*
|
|
85
|
-
* 验证ID的有效性后,将其加入延迟回收队列。
|
|
86
|
-
* ID不会立即可重用,而是在延迟时间后才真正回收。
|
|
87
|
-
*
|
|
88
|
-
* @param id 要回收的实体ID
|
|
89
|
-
* @returns 是否成功回收(ID是否有效且未被重复回收)
|
|
90
|
-
*/
|
|
91
|
-
checkIn(id: number): boolean;
|
|
92
|
-
/**
|
|
93
|
-
* 验证ID是否有效
|
|
94
|
-
*
|
|
95
|
-
* 检查ID的索引和世代版本是否匹配当前状态。
|
|
96
|
-
*
|
|
97
|
-
* @param id 要验证的实体ID
|
|
98
|
-
* @returns ID是否有效
|
|
99
|
-
*/
|
|
100
|
-
isValid(id: number): boolean;
|
|
101
|
-
/**
|
|
102
|
-
* 获取统计信息
|
|
103
|
-
*
|
|
104
|
-
* @returns 池的当前状态统计
|
|
105
|
-
*/
|
|
106
|
-
getStats(): {
|
|
107
|
-
/** 已分配的总索引数 */
|
|
108
|
-
totalAllocated: number;
|
|
109
|
-
/** 总计回收次数 */
|
|
110
|
-
totalRecycled: number;
|
|
111
|
-
/** 当前活跃实体数 */
|
|
112
|
-
currentActive: number;
|
|
113
|
-
/** 当前空闲的索引数 */
|
|
114
|
-
currentlyFree: number;
|
|
115
|
-
/** 等待回收的ID数 */
|
|
116
|
-
pendingRecycle: number;
|
|
117
|
-
/** 理论最大实体数(设计限制) */
|
|
118
|
-
maxPossibleEntities: number;
|
|
119
|
-
/** 当前使用的最大索引 */
|
|
120
|
-
maxUsedIndex: number;
|
|
121
|
-
/** 内存使用(字节) */
|
|
122
|
-
memoryUsage: number;
|
|
123
|
-
/** 内存扩展次数 */
|
|
124
|
-
memoryExpansions: number;
|
|
125
|
-
/** 平均世代版本 */
|
|
126
|
-
averageGeneration: number;
|
|
127
|
-
/** 世代存储大小 */
|
|
128
|
-
generationStorageSize: number;
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* 强制执行延迟回收处理
|
|
132
|
-
*
|
|
133
|
-
* 在某些情况下可能需要立即处理延迟回收队列,
|
|
134
|
-
* 比如内存压力大或者需要精确的统计信息时。
|
|
135
|
-
*/
|
|
136
|
-
forceProcessDelayedRecycle(): void;
|
|
137
|
-
/**
|
|
138
|
-
* 清理过期的延迟回收项
|
|
139
|
-
*
|
|
140
|
-
* 将超过延迟时间的回收项真正回收到空闲列表中。
|
|
141
|
-
*
|
|
142
|
-
* @param forceAll 是否强制处理所有延迟回收项
|
|
143
|
-
* @private
|
|
144
|
-
*/
|
|
145
|
-
private _processDelayedRecycle;
|
|
146
|
-
/**
|
|
147
|
-
* 预分配世代信息
|
|
148
|
-
*
|
|
149
|
-
* @param startIndex 起始索引
|
|
150
|
-
* @param count 分配数量
|
|
151
|
-
* @private
|
|
152
|
-
*/
|
|
153
|
-
private _preAllocateGenerations;
|
|
154
|
-
/**
|
|
155
|
-
* 确保指定索引的世代信息存在
|
|
156
|
-
*
|
|
157
|
-
* @param index 索引
|
|
158
|
-
* @private
|
|
159
|
-
*/
|
|
160
|
-
private _ensureGenerationCapacity;
|
|
161
|
-
/**
|
|
162
|
-
* 计算内存使用量
|
|
163
|
-
*
|
|
164
|
-
* @returns 内存使用字节数
|
|
165
|
-
* @private
|
|
166
|
-
*/
|
|
167
|
-
private _calculateMemoryUsage;
|
|
168
|
-
/**
|
|
169
|
-
* 打包索引和世代为32位ID
|
|
170
|
-
*
|
|
171
|
-
* @param index 索引(16位)
|
|
172
|
-
* @param generation 世代版本(16位)
|
|
173
|
-
* @returns 打包后的32位ID
|
|
174
|
-
* @private
|
|
175
|
-
*/
|
|
176
|
-
private _packId;
|
|
177
|
-
/**
|
|
178
|
-
* 从ID中解包索引
|
|
179
|
-
*
|
|
180
|
-
* @param id 32位ID
|
|
181
|
-
* @returns 索引部分(16位)
|
|
182
|
-
* @private
|
|
183
|
-
*/
|
|
184
|
-
private _unpackIndex;
|
|
185
|
-
/**
|
|
186
|
-
* 从ID中解包世代版本
|
|
187
|
-
*
|
|
188
|
-
* @param id 32位ID
|
|
189
|
-
* @returns 世代版本部分(16位)
|
|
190
|
-
* @private
|
|
191
|
-
*/
|
|
192
|
-
private _unpackGeneration;
|
|
193
|
-
/**
|
|
194
|
-
* 内部ID有效性检查
|
|
195
|
-
*
|
|
196
|
-
* @param index 索引
|
|
197
|
-
* @param generation 世代版本
|
|
198
|
-
* @returns 是否有效
|
|
199
|
-
* @private
|
|
200
|
-
*/
|
|
201
|
-
private _isValidId;
|
|
202
|
-
}
|
|
203
|
-
//# sourceMappingURL=IdentifierPool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IdentifierPool.d.ts","sourceRoot":"","sources":["../../../src/ECS/Utils/IdentifierPool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,cAAc;IACvB;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAK;IAEhC;;OAEG;IACH,OAAO,CAAC,YAAY,CAAgB;IAEpC;;;OAGG;IACH,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;OAGG;IACH,OAAO,CAAC,eAAe,CAIf;IAER;;OAEG;IACH,OAAO,CAAC,aAAa,CAAe;IAEpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAU;IAE3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEhD;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAKZ;IAEF;;;;;OAKG;gBACS,YAAY,GAAE,MAAY,EAAE,kBAAkB,GAAE,MAAa;IAQzE;;;;;;;OAOG;IACI,QAAQ,IAAI,MAAM;IAgCzB;;;;;;;;OAQG;IACI,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA+BnC;;;;;;;OAOG;IACI,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAMnC;;;;OAIG;IACI,QAAQ,IAAI;QACf,eAAe;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAgB;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa;QACb,gBAAgB,EAAE,MAAM,CAAC;QACzB,aAAa;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa;QACb,qBAAqB,EAAE,MAAM,CAAC;KACjC;IA+BD;;;;;OAKG;IACI,0BAA0B,IAAI,IAAI;IAIzC;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAuC9B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAIf;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAIpB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;CAQrB"}
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 世代式ID池管理器
|
|
3
|
-
*
|
|
4
|
-
* 用于管理实体ID的分配和回收,支持世代版本控制以防止悬空引用问题。
|
|
5
|
-
* 世代式ID由索引和版本组成,当ID被回收时版本会递增,确保旧引用失效。
|
|
6
|
-
*
|
|
7
|
-
* 支持动态扩展,理论上可以支持到65535个索引(16位),每个索引65535个版本(16位)。
|
|
8
|
-
* 总计可以处理超过42亿个独特的ID组合,完全满足ECS大规模实体需求。
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* const pool = new IdentifierPool();
|
|
13
|
-
*
|
|
14
|
-
* // 分配ID
|
|
15
|
-
* const id = pool.checkOut(); // 例如: 65536 (版本1,索引0)
|
|
16
|
-
*
|
|
17
|
-
* // 回收ID
|
|
18
|
-
* pool.checkIn(id);
|
|
19
|
-
*
|
|
20
|
-
* // 验证ID是否有效
|
|
21
|
-
* const isValid = pool.isValid(id); // false,因为版本已递增
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export class IdentifierPool {
|
|
25
|
-
/**
|
|
26
|
-
* 构造函数
|
|
27
|
-
*
|
|
28
|
-
* @param recycleDelay 延迟回收时间(毫秒),默认为100ms
|
|
29
|
-
* @param expansionBlockSize 内存扩展块大小,默认为1024
|
|
30
|
-
*/
|
|
31
|
-
constructor(recycleDelay = 100, expansionBlockSize = 1024) {
|
|
32
|
-
/**
|
|
33
|
-
* 下一个可用的索引
|
|
34
|
-
*/
|
|
35
|
-
this._nextAvailableIndex = 0;
|
|
36
|
-
/**
|
|
37
|
-
* 空闲的索引列表
|
|
38
|
-
*/
|
|
39
|
-
this._freeIndices = [];
|
|
40
|
-
/**
|
|
41
|
-
* 每个索引对应的世代版本
|
|
42
|
-
* 动态扩展的Map,按需分配内存
|
|
43
|
-
*/
|
|
44
|
-
this._generations = new Map();
|
|
45
|
-
/**
|
|
46
|
-
* 延迟回收队列
|
|
47
|
-
* 防止在同一帧内立即重用ID,避免时序问题
|
|
48
|
-
*/
|
|
49
|
-
this._pendingRecycle = [];
|
|
50
|
-
/**
|
|
51
|
-
* 延迟回收时间(毫秒)
|
|
52
|
-
*/
|
|
53
|
-
this._recycleDelay = 100;
|
|
54
|
-
/**
|
|
55
|
-
* 统计信息
|
|
56
|
-
*/
|
|
57
|
-
this._stats = {
|
|
58
|
-
totalAllocated: 0,
|
|
59
|
-
totalRecycled: 0,
|
|
60
|
-
currentActive: 0,
|
|
61
|
-
memoryExpansions: 0
|
|
62
|
-
};
|
|
63
|
-
this._recycleDelay = recycleDelay;
|
|
64
|
-
this._expansionBlockSize = expansionBlockSize;
|
|
65
|
-
// 预分配第一个块的世代信息
|
|
66
|
-
this._preAllocateGenerations(0, this._expansionBlockSize);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* 获取一个可用的ID
|
|
70
|
-
*
|
|
71
|
-
* 返回一个32位ID,高16位为世代版本,低16位为索引。
|
|
72
|
-
*
|
|
73
|
-
* @returns 新分配的实体ID
|
|
74
|
-
* @throws {Error} 当达到索引限制时抛出错误
|
|
75
|
-
*/
|
|
76
|
-
checkOut() {
|
|
77
|
-
// 处理延迟回收队列
|
|
78
|
-
this._processDelayedRecycle();
|
|
79
|
-
let index;
|
|
80
|
-
if (this._freeIndices.length > 0) {
|
|
81
|
-
// 重用回收的索引
|
|
82
|
-
index = this._freeIndices.pop();
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
// 分配新索引
|
|
86
|
-
if (this._nextAvailableIndex > IdentifierPool.MAX_INDEX) {
|
|
87
|
-
throw new Error(`实体索引已达到框架设计限制 (${IdentifierPool.MAX_INDEX})。` +
|
|
88
|
-
`这意味着您已经分配了超过65535个不同的实体索引。` +
|
|
89
|
-
`这是16位索引设计的限制,考虑优化实体回收策略或升级到64位ID设计。`);
|
|
90
|
-
}
|
|
91
|
-
index = this._nextAvailableIndex++;
|
|
92
|
-
// 按需扩展世代存储
|
|
93
|
-
this._ensureGenerationCapacity(index);
|
|
94
|
-
}
|
|
95
|
-
const generation = this._generations.get(index) || 1;
|
|
96
|
-
this._stats.totalAllocated++;
|
|
97
|
-
this._stats.currentActive++;
|
|
98
|
-
return this._packId(index, generation);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* 回收一个ID
|
|
102
|
-
*
|
|
103
|
-
* 验证ID的有效性后,将其加入延迟回收队列。
|
|
104
|
-
* ID不会立即可重用,而是在延迟时间后才真正回收。
|
|
105
|
-
*
|
|
106
|
-
* @param id 要回收的实体ID
|
|
107
|
-
* @returns 是否成功回收(ID是否有效且未被重复回收)
|
|
108
|
-
*/
|
|
109
|
-
checkIn(id) {
|
|
110
|
-
const index = this._unpackIndex(id);
|
|
111
|
-
const generation = this._unpackGeneration(id);
|
|
112
|
-
// 验证ID有效性
|
|
113
|
-
if (!this._isValidId(index, generation)) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
// 检查是否已经在待回收队列中
|
|
117
|
-
const alreadyPending = this._pendingRecycle.some(item => item.index === index && item.generation === generation);
|
|
118
|
-
if (alreadyPending) {
|
|
119
|
-
return false; // 已经在回收队列中,拒绝重复回收
|
|
120
|
-
}
|
|
121
|
-
// 加入延迟回收队列
|
|
122
|
-
this._pendingRecycle.push({
|
|
123
|
-
index,
|
|
124
|
-
generation,
|
|
125
|
-
timestamp: Date.now()
|
|
126
|
-
});
|
|
127
|
-
this._stats.currentActive--;
|
|
128
|
-
this._stats.totalRecycled++;
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* 验证ID是否有效
|
|
133
|
-
*
|
|
134
|
-
* 检查ID的索引和世代版本是否匹配当前状态。
|
|
135
|
-
*
|
|
136
|
-
* @param id 要验证的实体ID
|
|
137
|
-
* @returns ID是否有效
|
|
138
|
-
*/
|
|
139
|
-
isValid(id) {
|
|
140
|
-
const index = this._unpackIndex(id);
|
|
141
|
-
const generation = this._unpackGeneration(id);
|
|
142
|
-
return this._isValidId(index, generation);
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* 获取统计信息
|
|
146
|
-
*
|
|
147
|
-
* @returns 池的当前状态统计
|
|
148
|
-
*/
|
|
149
|
-
getStats() {
|
|
150
|
-
// 计算平均世代版本
|
|
151
|
-
let totalGeneration = 0;
|
|
152
|
-
let generationCount = 0;
|
|
153
|
-
for (const [index, generation] of this._generations) {
|
|
154
|
-
if (index < this._nextAvailableIndex) {
|
|
155
|
-
totalGeneration += generation;
|
|
156
|
-
generationCount++;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const averageGeneration = generationCount > 0
|
|
160
|
-
? totalGeneration / generationCount
|
|
161
|
-
: 1;
|
|
162
|
-
return {
|
|
163
|
-
totalAllocated: this._stats.totalAllocated,
|
|
164
|
-
totalRecycled: this._stats.totalRecycled,
|
|
165
|
-
currentActive: this._stats.currentActive,
|
|
166
|
-
currentlyFree: this._freeIndices.length,
|
|
167
|
-
pendingRecycle: this._pendingRecycle.length,
|
|
168
|
-
maxPossibleEntities: IdentifierPool.MAX_INDEX + 1,
|
|
169
|
-
maxUsedIndex: this._nextAvailableIndex - 1,
|
|
170
|
-
memoryUsage: this._calculateMemoryUsage(),
|
|
171
|
-
memoryExpansions: this._stats.memoryExpansions,
|
|
172
|
-
averageGeneration: Math.round(averageGeneration * 100) / 100,
|
|
173
|
-
generationStorageSize: this._generations.size
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* 强制执行延迟回收处理
|
|
178
|
-
*
|
|
179
|
-
* 在某些情况下可能需要立即处理延迟回收队列,
|
|
180
|
-
* 比如内存压力大或者需要精确的统计信息时。
|
|
181
|
-
*/
|
|
182
|
-
forceProcessDelayedRecycle() {
|
|
183
|
-
this._processDelayedRecycle(true);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* 清理过期的延迟回收项
|
|
187
|
-
*
|
|
188
|
-
* 将超过延迟时间的回收项真正回收到空闲列表中。
|
|
189
|
-
*
|
|
190
|
-
* @param forceAll 是否强制处理所有延迟回收项
|
|
191
|
-
* @private
|
|
192
|
-
*/
|
|
193
|
-
_processDelayedRecycle(forceAll = false) {
|
|
194
|
-
if (this._pendingRecycle.length === 0)
|
|
195
|
-
return;
|
|
196
|
-
const now = Date.now();
|
|
197
|
-
const readyToRecycle = [];
|
|
198
|
-
const stillPending = [];
|
|
199
|
-
// 分离已到期和未到期的项
|
|
200
|
-
for (const item of this._pendingRecycle) {
|
|
201
|
-
if (forceAll || now - item.timestamp >= this._recycleDelay) {
|
|
202
|
-
readyToRecycle.push(item);
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
stillPending.push(item);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
// 处理到期的回收项
|
|
209
|
-
for (const item of readyToRecycle) {
|
|
210
|
-
// 再次验证ID有效性(防止重复回收)
|
|
211
|
-
if (this._isValidId(item.index, item.generation)) {
|
|
212
|
-
// 递增世代版本
|
|
213
|
-
let newGeneration = item.generation + 1;
|
|
214
|
-
// 防止世代版本溢出
|
|
215
|
-
if (newGeneration > IdentifierPool.MAX_GENERATION) {
|
|
216
|
-
newGeneration = 1; // 重置为1而不是0
|
|
217
|
-
}
|
|
218
|
-
this._generations.set(item.index, newGeneration);
|
|
219
|
-
// 添加到空闲列表
|
|
220
|
-
this._freeIndices.push(item.index);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
// 更新待回收队列
|
|
224
|
-
this._pendingRecycle = stillPending;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* 预分配世代信息
|
|
228
|
-
*
|
|
229
|
-
* @param startIndex 起始索引
|
|
230
|
-
* @param count 分配数量
|
|
231
|
-
* @private
|
|
232
|
-
*/
|
|
233
|
-
_preAllocateGenerations(startIndex, count) {
|
|
234
|
-
for (let i = 0; i < count; i++) {
|
|
235
|
-
const index = startIndex + i;
|
|
236
|
-
if (index <= IdentifierPool.MAX_INDEX) {
|
|
237
|
-
this._generations.set(index, 1);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
this._stats.memoryExpansions++;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* 确保指定索引的世代信息存在
|
|
244
|
-
*
|
|
245
|
-
* @param index 索引
|
|
246
|
-
* @private
|
|
247
|
-
*/
|
|
248
|
-
_ensureGenerationCapacity(index) {
|
|
249
|
-
if (!this._generations.has(index)) {
|
|
250
|
-
// 计算需要扩展的起始位置
|
|
251
|
-
const expansionStart = Math.floor(index / this._expansionBlockSize) * this._expansionBlockSize;
|
|
252
|
-
// 预分配一个块
|
|
253
|
-
this._preAllocateGenerations(expansionStart, this._expansionBlockSize);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* 计算内存使用量
|
|
258
|
-
*
|
|
259
|
-
* @returns 内存使用字节数
|
|
260
|
-
* @private
|
|
261
|
-
*/
|
|
262
|
-
_calculateMemoryUsage() {
|
|
263
|
-
const generationMapSize = this._generations.size * 16; // Map overhead + number pair
|
|
264
|
-
const freeIndicesSize = this._freeIndices.length * 8;
|
|
265
|
-
const pendingRecycleSize = this._pendingRecycle.length * 32;
|
|
266
|
-
return generationMapSize + freeIndicesSize + pendingRecycleSize;
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* 打包索引和世代为32位ID
|
|
270
|
-
*
|
|
271
|
-
* @param index 索引(16位)
|
|
272
|
-
* @param generation 世代版本(16位)
|
|
273
|
-
* @returns 打包后的32位ID
|
|
274
|
-
* @private
|
|
275
|
-
*/
|
|
276
|
-
_packId(index, generation) {
|
|
277
|
-
return (generation << 16) | index;
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* 从ID中解包索引
|
|
281
|
-
*
|
|
282
|
-
* @param id 32位ID
|
|
283
|
-
* @returns 索引部分(16位)
|
|
284
|
-
* @private
|
|
285
|
-
*/
|
|
286
|
-
_unpackIndex(id) {
|
|
287
|
-
return id & 0xFFFF;
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* 从ID中解包世代版本
|
|
291
|
-
*
|
|
292
|
-
* @param id 32位ID
|
|
293
|
-
* @returns 世代版本部分(16位)
|
|
294
|
-
* @private
|
|
295
|
-
*/
|
|
296
|
-
_unpackGeneration(id) {
|
|
297
|
-
return (id >>> 16) & 0xFFFF;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* 内部ID有效性检查
|
|
301
|
-
*
|
|
302
|
-
* @param index 索引
|
|
303
|
-
* @param generation 世代版本
|
|
304
|
-
* @returns 是否有效
|
|
305
|
-
* @private
|
|
306
|
-
*/
|
|
307
|
-
_isValidId(index, generation) {
|
|
308
|
-
if (index < 0 || index >= this._nextAvailableIndex) {
|
|
309
|
-
return false;
|
|
310
|
-
}
|
|
311
|
-
const currentGeneration = this._generations.get(index);
|
|
312
|
-
return currentGeneration !== undefined && currentGeneration === generation;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* 最大索引限制(16位)
|
|
317
|
-
* 这是框架设计选择:16位索引 + 16位版本 = 32位ID,确保高效位操作
|
|
318
|
-
* 不是硬件限制,而是性能和内存效率的权衡
|
|
319
|
-
*/
|
|
320
|
-
IdentifierPool.MAX_INDEX = 0xFFFF; // 65535
|
|
321
|
-
/**
|
|
322
|
-
* 最大世代限制(16位)
|
|
323
|
-
*/
|
|
324
|
-
IdentifierPool.MAX_GENERATION = 0xFFFF; // 65535
|
|
325
|
-
//# sourceMappingURL=IdentifierPool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IdentifierPool.js","sourceRoot":"","sources":["../../../src/ECS/Utils/IdentifierPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { ComponentType } from '../Core/ComponentStorage';
|
|
2
|
-
/**
|
|
3
|
-
* 查询条件类型
|
|
4
|
-
*/
|
|
5
|
-
interface QueryCondition {
|
|
6
|
-
all: ComponentType[];
|
|
7
|
-
any: ComponentType[];
|
|
8
|
-
none: ComponentType[];
|
|
9
|
-
tag?: number;
|
|
10
|
-
name?: string;
|
|
11
|
-
component?: ComponentType;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* 实体匹配条件描述符
|
|
15
|
-
*
|
|
16
|
-
* 用于描述实体查询条件,不执行实际查询
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* const matcher = Matcher.all(Position, Velocity)
|
|
21
|
-
* .any(Health, Shield)
|
|
22
|
-
* .none(Dead);
|
|
23
|
-
*
|
|
24
|
-
* // 获取查询条件
|
|
25
|
-
* const condition = matcher.getCondition();
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
export declare class Matcher {
|
|
29
|
-
private readonly condition;
|
|
30
|
-
private constructor();
|
|
31
|
-
/**
|
|
32
|
-
* 创建匹配器,要求所有指定的组件
|
|
33
|
-
* @param types 组件类型
|
|
34
|
-
*/
|
|
35
|
-
static all(...types: ComponentType[]): Matcher;
|
|
36
|
-
/**
|
|
37
|
-
* 创建匹配器,要求至少一个指定的组件
|
|
38
|
-
* @param types 组件类型
|
|
39
|
-
*/
|
|
40
|
-
static any(...types: ComponentType[]): Matcher;
|
|
41
|
-
/**
|
|
42
|
-
* 创建匹配器,排除指定的组件
|
|
43
|
-
* @param types 组件类型
|
|
44
|
-
*/
|
|
45
|
-
static none(...types: ComponentType[]): Matcher;
|
|
46
|
-
/**
|
|
47
|
-
* 创建按标签查询的匙配器
|
|
48
|
-
* @param tag 标签值
|
|
49
|
-
*/
|
|
50
|
-
static byTag(tag: number): Matcher;
|
|
51
|
-
/**
|
|
52
|
-
* 创建按名称查询的匙配器
|
|
53
|
-
* @param name 实体名称
|
|
54
|
-
*/
|
|
55
|
-
static byName(name: string): Matcher;
|
|
56
|
-
/**
|
|
57
|
-
* 创建单组件查询的匙配器
|
|
58
|
-
* @param componentType 组件类型
|
|
59
|
-
*/
|
|
60
|
-
static byComponent(componentType: ComponentType): Matcher;
|
|
61
|
-
/**
|
|
62
|
-
* 创建复杂查询构建器
|
|
63
|
-
*/
|
|
64
|
-
static complex(): Matcher;
|
|
65
|
-
/**
|
|
66
|
-
* 创建空匙配器(向后兼容)
|
|
67
|
-
*/
|
|
68
|
-
static empty(): Matcher;
|
|
69
|
-
/**
|
|
70
|
-
* 必须包含所有指定组件
|
|
71
|
-
* @param types 组件类型
|
|
72
|
-
*/
|
|
73
|
-
all(...types: ComponentType[]): Matcher;
|
|
74
|
-
/**
|
|
75
|
-
* 必须包含至少一个指定组件
|
|
76
|
-
* @param types 组件类型
|
|
77
|
-
*/
|
|
78
|
-
any(...types: ComponentType[]): Matcher;
|
|
79
|
-
/**
|
|
80
|
-
* 不能包含任何指定组件
|
|
81
|
-
* @param types 组件类型
|
|
82
|
-
*/
|
|
83
|
-
none(...types: ComponentType[]): Matcher;
|
|
84
|
-
/**
|
|
85
|
-
* 排除指定组件(别名方法)
|
|
86
|
-
* @param types 组件类型
|
|
87
|
-
*/
|
|
88
|
-
exclude(...types: ComponentType[]): Matcher;
|
|
89
|
-
/**
|
|
90
|
-
* 至少包含其中之一(别名方法)
|
|
91
|
-
* @param types 组件类型
|
|
92
|
-
*/
|
|
93
|
-
one(...types: ComponentType[]): Matcher;
|
|
94
|
-
/**
|
|
95
|
-
* 按标签查询
|
|
96
|
-
* @param tag 标签值
|
|
97
|
-
*/
|
|
98
|
-
withTag(tag: number): Matcher;
|
|
99
|
-
/**
|
|
100
|
-
* 按名称查询
|
|
101
|
-
* @param name 实体名称
|
|
102
|
-
*/
|
|
103
|
-
withName(name: string): Matcher;
|
|
104
|
-
/**
|
|
105
|
-
* 单组件查询
|
|
106
|
-
* @param componentType 组件类型
|
|
107
|
-
*/
|
|
108
|
-
withComponent(componentType: ComponentType): Matcher;
|
|
109
|
-
/**
|
|
110
|
-
* 移除标签条件
|
|
111
|
-
*/
|
|
112
|
-
withoutTag(): Matcher;
|
|
113
|
-
/**
|
|
114
|
-
* 移除名称条件
|
|
115
|
-
*/
|
|
116
|
-
withoutName(): Matcher;
|
|
117
|
-
/**
|
|
118
|
-
* 移除单组件条件
|
|
119
|
-
*/
|
|
120
|
-
withoutComponent(): Matcher;
|
|
121
|
-
/**
|
|
122
|
-
* 获取查询条件(只读)
|
|
123
|
-
*/
|
|
124
|
-
getCondition(): Readonly<QueryCondition>;
|
|
125
|
-
/**
|
|
126
|
-
* 检查是否为空条件
|
|
127
|
-
*/
|
|
128
|
-
isEmpty(): boolean;
|
|
129
|
-
/**
|
|
130
|
-
* 重置所有条件
|
|
131
|
-
*/
|
|
132
|
-
reset(): Matcher;
|
|
133
|
-
/**
|
|
134
|
-
* 克隆匹配器
|
|
135
|
-
*/
|
|
136
|
-
clone(): Matcher;
|
|
137
|
-
/**
|
|
138
|
-
* 字符串表示
|
|
139
|
-
*/
|
|
140
|
-
toString(): string;
|
|
141
|
-
}
|
|
142
|
-
export {};
|
|
143
|
-
//# sourceMappingURL=Matcher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Matcher.d.ts","sourceRoot":"","sources":["../../../src/ECS/Utils/Matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;GAEG;AACH,UAAU,cAAc;IACpB,GAAG,EAAE,aAAa,EAAE,CAAC;IACrB,GAAG,EAAE,aAAa,EAAE,CAAC;IACrB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,OAAO;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAIxB;IAEF,OAAO;IAIP;;;OAGG;WACW,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAKrD;;;OAGG;WACW,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAKrD;;;OAGG;WACW,IAAI,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAKtD;;;OAGG;WACW,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKzC;;;OAGG;WACW,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK3C;;;OAGG;WACW,WAAW,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO;IAKhE;;OAEG;WACW,OAAO,IAAI,OAAO;IAIhC;;OAEG;WACW,KAAK,IAAI,OAAO;IAI9B;;;OAGG;IACI,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAK9C;;;OAGG;IACI,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAK9C;;;OAGG;IACI,IAAI,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAK/C;;;OAGG;IACI,OAAO,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAIlD;;;OAGG;IACI,GAAG,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO;IAI9C;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKpC;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKtC;;;OAGG;IACI,aAAa,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO;IAK3D;;OAEG;IACI,UAAU,IAAI,OAAO;IAK5B;;OAEG;IACI,WAAW,IAAI,OAAO;IAK7B;;OAEG;IACI,gBAAgB,IAAI,OAAO;IAKlC;;OAEG;IACI,YAAY,IAAI,QAAQ,CAAC,cAAc,CAAC;IAW/C;;OAEG;IACI,OAAO,IAAI,OAAO;IASzB;;OAEG;IACI,KAAK,IAAI,OAAO;IAUvB;;OAEG;IACI,KAAK,IAAI,OAAO;IAiBvB;;OAEG;IACI,QAAQ,IAAI,MAAM;CA8B5B"}
|