@esengine/ecs-framework 2.1.3 → 2.1.5

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.
Files changed (196) hide show
  1. package/README.md +385 -0
  2. package/{bin/index.d.ts → index.d.ts} +9 -6
  3. package/index.js +7 -0
  4. package/index.js.map +7 -0
  5. package/package.json +20 -48
  6. package/bin/Core.d.ts +0 -198
  7. package/bin/Core.d.ts.map +0 -1
  8. package/bin/Core.js +0 -247
  9. package/bin/Core.js.map +0 -1
  10. package/bin/ECS/Component.d.ts +0 -119
  11. package/bin/ECS/Component.d.ts.map +0 -1
  12. package/bin/ECS/Component.js +0 -129
  13. package/bin/ECS/Component.js.map +0 -1
  14. package/bin/ECS/Components/IUpdatable.d.ts +0 -22
  15. package/bin/ECS/Components/IUpdatable.d.ts.map +0 -1
  16. package/bin/ECS/Components/IUpdatable.js +0 -22
  17. package/bin/ECS/Components/IUpdatable.js.map +0 -1
  18. package/bin/ECS/Components/SceneComponent.d.ts +0 -40
  19. package/bin/ECS/Components/SceneComponent.d.ts.map +0 -1
  20. package/bin/ECS/Components/SceneComponent.js +0 -61
  21. package/bin/ECS/Components/SceneComponent.js.map +0 -1
  22. package/bin/ECS/Core/BitMaskOptimizer.d.ts +0 -75
  23. package/bin/ECS/Core/BitMaskOptimizer.d.ts.map +0 -1
  24. package/bin/ECS/Core/BitMaskOptimizer.js +0 -161
  25. package/bin/ECS/Core/BitMaskOptimizer.js.map +0 -1
  26. package/bin/ECS/Core/ComponentPool.d.ts +0 -72
  27. package/bin/ECS/Core/ComponentPool.d.ts.map +0 -1
  28. package/bin/ECS/Core/ComponentPool.js +0 -123
  29. package/bin/ECS/Core/ComponentPool.js.map +0 -1
  30. package/bin/ECS/Core/ComponentStorage.d.ts +0 -182
  31. package/bin/ECS/Core/ComponentStorage.d.ts.map +0 -1
  32. package/bin/ECS/Core/ComponentStorage.js +0 -346
  33. package/bin/ECS/Core/ComponentStorage.js.map +0 -1
  34. package/bin/ECS/Core/EventSystem.d.ts +0 -236
  35. package/bin/ECS/Core/EventSystem.d.ts.map +0 -1
  36. package/bin/ECS/Core/EventSystem.js +0 -476
  37. package/bin/ECS/Core/EventSystem.js.map +0 -1
  38. package/bin/ECS/Core/FluentAPI.d.ts +0 -371
  39. package/bin/ECS/Core/FluentAPI.d.ts.map +0 -1
  40. package/bin/ECS/Core/FluentAPI.js +0 -543
  41. package/bin/ECS/Core/FluentAPI.js.map +0 -1
  42. package/bin/ECS/Core/IndexUpdateBatcher.d.ts +0 -100
  43. package/bin/ECS/Core/IndexUpdateBatcher.d.ts.map +0 -1
  44. package/bin/ECS/Core/IndexUpdateBatcher.js +0 -219
  45. package/bin/ECS/Core/IndexUpdateBatcher.js.map +0 -1
  46. package/bin/ECS/Core/QuerySystem.d.ts +0 -422
  47. package/bin/ECS/Core/QuerySystem.d.ts.map +0 -1
  48. package/bin/ECS/Core/QuerySystem.js +0 -937
  49. package/bin/ECS/Core/QuerySystem.js.map +0 -1
  50. package/bin/ECS/CoreEvents.d.ts +0 -19
  51. package/bin/ECS/CoreEvents.d.ts.map +0 -1
  52. package/bin/ECS/CoreEvents.js +0 -20
  53. package/bin/ECS/CoreEvents.js.map +0 -1
  54. package/bin/ECS/Entity.d.ts +0 -538
  55. package/bin/ECS/Entity.d.ts.map +0 -1
  56. package/bin/ECS/Entity.js +0 -1030
  57. package/bin/ECS/Entity.js.map +0 -1
  58. package/bin/ECS/Scene.d.ts +0 -226
  59. package/bin/ECS/Scene.d.ts.map +0 -1
  60. package/bin/ECS/Scene.js +0 -308
  61. package/bin/ECS/Scene.js.map +0 -1
  62. package/bin/ECS/Systems/EntitySystem.d.ts +0 -185
  63. package/bin/ECS/Systems/EntitySystem.d.ts.map +0 -1
  64. package/bin/ECS/Systems/EntitySystem.js +0 -278
  65. package/bin/ECS/Systems/EntitySystem.js.map +0 -1
  66. package/bin/ECS/Systems/IntervalSystem.d.ts +0 -33
  67. package/bin/ECS/Systems/IntervalSystem.d.ts.map +0 -1
  68. package/bin/ECS/Systems/IntervalSystem.js +0 -50
  69. package/bin/ECS/Systems/IntervalSystem.js.map +0 -1
  70. package/bin/ECS/Systems/PassiveSystem.d.ts +0 -20
  71. package/bin/ECS/Systems/PassiveSystem.d.ts.map +0 -1
  72. package/bin/ECS/Systems/PassiveSystem.js +0 -21
  73. package/bin/ECS/Systems/PassiveSystem.js.map +0 -1
  74. package/bin/ECS/Systems/ProcessingSystem.d.ts +0 -24
  75. package/bin/ECS/Systems/ProcessingSystem.d.ts.map +0 -1
  76. package/bin/ECS/Systems/ProcessingSystem.js +0 -22
  77. package/bin/ECS/Systems/ProcessingSystem.js.map +0 -1
  78. package/bin/ECS/Systems/index.d.ts +0 -5
  79. package/bin/ECS/Systems/index.d.ts.map +0 -1
  80. package/bin/ECS/Systems/index.js +0 -6
  81. package/bin/ECS/Systems/index.js.map +0 -1
  82. package/bin/ECS/Utils/Bits.d.ts +0 -74
  83. package/bin/ECS/Utils/Bits.d.ts.map +0 -1
  84. package/bin/ECS/Utils/Bits.js +0 -142
  85. package/bin/ECS/Utils/Bits.js.map +0 -1
  86. package/bin/ECS/Utils/ComponentTypeManager.d.ts +0 -50
  87. package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +0 -1
  88. package/bin/ECS/Utils/ComponentTypeManager.js +0 -84
  89. package/bin/ECS/Utils/ComponentTypeManager.js.map +0 -1
  90. package/bin/ECS/Utils/EntityList.d.ts +0 -108
  91. package/bin/ECS/Utils/EntityList.d.ts.map +0 -1
  92. package/bin/ECS/Utils/EntityList.js +0 -249
  93. package/bin/ECS/Utils/EntityList.js.map +0 -1
  94. package/bin/ECS/Utils/EntityProcessorList.d.ts +0 -53
  95. package/bin/ECS/Utils/EntityProcessorList.d.ts.map +0 -1
  96. package/bin/ECS/Utils/EntityProcessorList.js +0 -96
  97. package/bin/ECS/Utils/EntityProcessorList.js.map +0 -1
  98. package/bin/ECS/Utils/IdentifierPool.d.ts +0 -18
  99. package/bin/ECS/Utils/IdentifierPool.d.ts.map +0 -1
  100. package/bin/ECS/Utils/IdentifierPool.js +0 -27
  101. package/bin/ECS/Utils/IdentifierPool.js.map +0 -1
  102. package/bin/ECS/Utils/Matcher.d.ts +0 -63
  103. package/bin/ECS/Utils/Matcher.d.ts.map +0 -1
  104. package/bin/ECS/Utils/Matcher.js +0 -140
  105. package/bin/ECS/Utils/Matcher.js.map +0 -1
  106. package/bin/ECS/Utils/index.d.ts +0 -7
  107. package/bin/ECS/Utils/index.d.ts.map +0 -1
  108. package/bin/ECS/Utils/index.js +0 -8
  109. package/bin/ECS/Utils/index.js.map +0 -1
  110. package/bin/ECS/index.d.ts +0 -7
  111. package/bin/ECS/index.d.ts.map +0 -1
  112. package/bin/ECS/index.js +0 -29
  113. package/bin/ECS/index.js.map +0 -1
  114. package/bin/Testing/Performance/benchmark.d.ts +0 -6
  115. package/bin/Testing/Performance/benchmark.d.ts.map +0 -1
  116. package/bin/Testing/Performance/benchmark.js +0 -639
  117. package/bin/Testing/Performance/benchmark.js.map +0 -1
  118. package/bin/Testing/Performance/component-performance.d.ts +0 -2
  119. package/bin/Testing/Performance/component-performance.d.ts.map +0 -1
  120. package/bin/Testing/Performance/component-performance.js +0 -43
  121. package/bin/Testing/Performance/component-performance.js.map +0 -1
  122. package/bin/Testing/Unit/bitmask-optimizer.test.d.ts +0 -2
  123. package/bin/Testing/Unit/bitmask-optimizer.test.d.ts.map +0 -1
  124. package/bin/Testing/Unit/bitmask-optimizer.test.js +0 -164
  125. package/bin/Testing/Unit/bitmask-optimizer.test.js.map +0 -1
  126. package/bin/Testing/Unit/component-pool.test.d.ts +0 -5
  127. package/bin/Testing/Unit/component-pool.test.d.ts.map +0 -1
  128. package/bin/Testing/Unit/component-pool.test.js +0 -149
  129. package/bin/Testing/Unit/component-pool.test.js.map +0 -1
  130. package/bin/Testing/test-runner.d.ts +0 -51
  131. package/bin/Testing/test-runner.d.ts.map +0 -1
  132. package/bin/Testing/test-runner.js +0 -159
  133. package/bin/Testing/test-runner.js.map +0 -1
  134. package/bin/Types/index.d.ts +0 -22
  135. package/bin/Types/index.d.ts.map +0 -1
  136. package/bin/Types/index.js +0 -20
  137. package/bin/Types/index.js.map +0 -1
  138. package/bin/Utils/Emitter.d.ts +0 -43
  139. package/bin/Utils/Emitter.d.ts.map +0 -1
  140. package/bin/Utils/Emitter.js +0 -69
  141. package/bin/Utils/Emitter.js.map +0 -1
  142. package/bin/Utils/Extensions/NumberExtension.d.ts +0 -13
  143. package/bin/Utils/Extensions/NumberExtension.d.ts.map +0 -1
  144. package/bin/Utils/Extensions/NumberExtension.js +0 -17
  145. package/bin/Utils/Extensions/NumberExtension.js.map +0 -1
  146. package/bin/Utils/Extensions/TypeUtils.d.ts +0 -13
  147. package/bin/Utils/Extensions/TypeUtils.d.ts.map +0 -1
  148. package/bin/Utils/Extensions/TypeUtils.js +0 -15
  149. package/bin/Utils/Extensions/TypeUtils.js.map +0 -1
  150. package/bin/Utils/Extensions/index.d.ts +0 -3
  151. package/bin/Utils/Extensions/index.d.ts.map +0 -1
  152. package/bin/Utils/Extensions/index.js +0 -4
  153. package/bin/Utils/Extensions/index.js.map +0 -1
  154. package/bin/Utils/GlobalManager.d.ts +0 -32
  155. package/bin/Utils/GlobalManager.d.ts.map +0 -1
  156. package/bin/Utils/GlobalManager.js +0 -53
  157. package/bin/Utils/GlobalManager.js.map +0 -1
  158. package/bin/Utils/PerformanceMonitor.d.ts +0 -211
  159. package/bin/Utils/PerformanceMonitor.d.ts.map +0 -1
  160. package/bin/Utils/PerformanceMonitor.js +0 -270
  161. package/bin/Utils/PerformanceMonitor.js.map +0 -1
  162. package/bin/Utils/Pool.d.ts +0 -239
  163. package/bin/Utils/Pool.d.ts.map +0 -1
  164. package/bin/Utils/Pool.js +0 -449
  165. package/bin/Utils/Pool.js.map +0 -1
  166. package/bin/Utils/Time.d.ts +0 -55
  167. package/bin/Utils/Time.d.ts.map +0 -1
  168. package/bin/Utils/Time.js +0 -78
  169. package/bin/Utils/Time.js.map +0 -1
  170. package/bin/Utils/Timers/ITimer.d.ts +0 -16
  171. package/bin/Utils/Timers/ITimer.d.ts.map +0 -1
  172. package/bin/Utils/Timers/ITimer.js +0 -2
  173. package/bin/Utils/Timers/ITimer.js.map +0 -1
  174. package/bin/Utils/Timers/Timer.d.ts +0 -22
  175. package/bin/Utils/Timers/Timer.d.ts.map +0 -1
  176. package/bin/Utils/Timers/Timer.js +0 -46
  177. package/bin/Utils/Timers/Timer.js.map +0 -1
  178. package/bin/Utils/Timers/TimerManager.d.ts +0 -19
  179. package/bin/Utils/Timers/TimerManager.d.ts.map +0 -1
  180. package/bin/Utils/Timers/TimerManager.js +0 -33
  181. package/bin/Utils/Timers/TimerManager.js.map +0 -1
  182. package/bin/Utils/WasmCore.d.ts +0 -234
  183. package/bin/Utils/WasmCore.d.ts.map +0 -1
  184. package/bin/Utils/WasmCore.js +0 -596
  185. package/bin/Utils/WasmCore.js.map +0 -1
  186. package/bin/Utils/index.d.ts +0 -16
  187. package/bin/Utils/index.d.ts.map +0 -1
  188. package/bin/Utils/index.js +0 -37
  189. package/bin/Utils/index.js.map +0 -1
  190. package/bin/index.cjs +0 -51
  191. package/bin/index.d.ts.map +0 -1
  192. package/bin/index.esm.d.ts +0 -45
  193. package/bin/index.esm.d.ts.map +0 -1
  194. package/bin/index.esm.js +0 -46
  195. package/bin/index.esm.js.map +0 -1
  196. package/bin/index.js.map +0 -1
@@ -1,123 +0,0 @@
1
- /**
2
- * 组件对象池,用于复用组件实例以减少内存分配
3
- */
4
- export class ComponentPool {
5
- constructor(createFn, resetFn, maxSize = 1000) {
6
- this.pool = [];
7
- this.createFn = createFn;
8
- this.resetFn = resetFn;
9
- this.maxSize = maxSize;
10
- }
11
- /**
12
- * 获取一个组件实例
13
- */
14
- acquire() {
15
- if (this.pool.length > 0) {
16
- return this.pool.pop();
17
- }
18
- return this.createFn();
19
- }
20
- /**
21
- * 释放一个组件实例回池中
22
- */
23
- release(component) {
24
- if (this.pool.length < this.maxSize) {
25
- if (this.resetFn) {
26
- this.resetFn(component);
27
- }
28
- this.pool.push(component);
29
- }
30
- }
31
- /**
32
- * 预填充对象池
33
- */
34
- prewarm(count) {
35
- for (let i = 0; i < count && this.pool.length < this.maxSize; i++) {
36
- this.pool.push(this.createFn());
37
- }
38
- }
39
- /**
40
- * 清空对象池
41
- */
42
- clear() {
43
- this.pool.length = 0;
44
- }
45
- /**
46
- * 获取池中可用对象数量
47
- */
48
- getAvailableCount() {
49
- return this.pool.length;
50
- }
51
- /**
52
- * 获取池的最大容量
53
- */
54
- getMaxSize() {
55
- return this.maxSize;
56
- }
57
- }
58
- /**
59
- * 全局组件池管理器
60
- */
61
- export class ComponentPoolManager {
62
- constructor() {
63
- this.pools = new Map();
64
- }
65
- static getInstance() {
66
- if (!ComponentPoolManager.instance) {
67
- ComponentPoolManager.instance = new ComponentPoolManager();
68
- }
69
- return ComponentPoolManager.instance;
70
- }
71
- /**
72
- * 注册组件池
73
- */
74
- registerPool(componentName, createFn, resetFn, maxSize) {
75
- this.pools.set(componentName, new ComponentPool(createFn, resetFn, maxSize));
76
- }
77
- /**
78
- * 获取组件实例
79
- */
80
- acquireComponent(componentName) {
81
- const pool = this.pools.get(componentName);
82
- return pool ? pool.acquire() : null;
83
- }
84
- /**
85
- * 释放组件实例
86
- */
87
- releaseComponent(componentName, component) {
88
- const pool = this.pools.get(componentName);
89
- if (pool) {
90
- pool.release(component);
91
- }
92
- }
93
- /**
94
- * 预热所有池
95
- */
96
- prewarmAll(count = 100) {
97
- for (const pool of this.pools.values()) {
98
- pool.prewarm(count);
99
- }
100
- }
101
- /**
102
- * 清空所有池
103
- */
104
- clearAll() {
105
- for (const pool of this.pools.values()) {
106
- pool.clear();
107
- }
108
- }
109
- /**
110
- * 获取池统计信息
111
- */
112
- getPoolStats() {
113
- const stats = new Map();
114
- for (const [name, pool] of this.pools) {
115
- stats.set(name, {
116
- available: pool.getAvailableCount(),
117
- maxSize: pool.getMaxSize()
118
- });
119
- }
120
- return stats;
121
- }
122
- }
123
- //# sourceMappingURL=ComponentPool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComponentPool.js","sourceRoot":"","sources":["../../../src/ECS/Core/ComponentPool.ts"],"names":[],"mappings":"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"}
@@ -1,182 +0,0 @@
1
- import { Component } from '../Component';
2
- /**
3
- * 组件类型定义
4
- */
5
- export type ComponentType<T extends Component = Component> = new (...args: any[]) => T;
6
- /**
7
- * 组件注册表
8
- * 管理组件类型的位掩码分配
9
- */
10
- export declare class ComponentRegistry {
11
- private static componentTypes;
12
- private static nextBitIndex;
13
- private static maxComponents;
14
- /**
15
- * 注册组件类型并分配位掩码
16
- * @param componentType 组件类型
17
- * @returns 分配的位索引
18
- */
19
- static register<T extends Component>(componentType: ComponentType<T>): number;
20
- /**
21
- * 获取组件类型的位掩码
22
- * @param componentType 组件类型
23
- * @returns 位掩码
24
- */
25
- static getBitMask<T extends Component>(componentType: ComponentType<T>): bigint;
26
- /**
27
- * 获取组件类型的位索引
28
- * @param componentType 组件类型
29
- * @returns 位索引
30
- */
31
- static getBitIndex<T extends Component>(componentType: ComponentType<T>): number;
32
- /**
33
- * 检查组件类型是否已注册
34
- * @param componentType 组件类型
35
- * @returns 是否已注册
36
- */
37
- static isRegistered<T extends Component>(componentType: ComponentType<T>): boolean;
38
- /**
39
- * 获取所有已注册的组件类型
40
- * @returns 组件类型映射
41
- */
42
- static getAllRegisteredTypes(): Map<Function, number>;
43
- }
44
- /**
45
- * 高性能组件存储器
46
- * 使用SoA(Structure of Arrays)模式存储组件
47
- */
48
- export declare class ComponentStorage<T extends Component> {
49
- private components;
50
- private entityToIndex;
51
- private indexToEntity;
52
- private freeIndices;
53
- private componentType;
54
- private _size;
55
- constructor(componentType: ComponentType<T>);
56
- /**
57
- * 添加组件
58
- * @param entityId 实体ID
59
- * @param component 组件实例
60
- */
61
- addComponent(entityId: number, component: T): void;
62
- /**
63
- * 获取组件
64
- * @param entityId 实体ID
65
- * @returns 组件实例或null
66
- */
67
- getComponent(entityId: number): T | null;
68
- /**
69
- * 检查实体是否有此组件
70
- * @param entityId 实体ID
71
- * @returns 是否有组件
72
- */
73
- hasComponent(entityId: number): boolean;
74
- /**
75
- * 移除组件
76
- * @param entityId 实体ID
77
- * @returns 被移除的组件或null
78
- */
79
- removeComponent(entityId: number): T | null;
80
- /**
81
- * 高效遍历所有组件
82
- * @param callback 回调函数
83
- */
84
- forEach(callback: (component: T, entityId: number, index: number) => void): void;
85
- /**
86
- * 获取所有组件(密集数组)
87
- * @returns 组件数组
88
- */
89
- getDenseArray(): {
90
- components: T[];
91
- entityIds: number[];
92
- };
93
- /**
94
- * 清空所有组件
95
- */
96
- clear(): void;
97
- /**
98
- * 获取组件数量
99
- */
100
- get size(): number;
101
- /**
102
- * 获取组件类型
103
- */
104
- get type(): ComponentType<T>;
105
- /**
106
- * 压缩存储(移除空洞)
107
- */
108
- compact(): void;
109
- /**
110
- * 获取存储统计信息
111
- */
112
- getStats(): {
113
- totalSlots: number;
114
- usedSlots: number;
115
- freeSlots: number;
116
- fragmentation: number;
117
- };
118
- }
119
- /**
120
- * 组件存储管理器
121
- * 管理所有组件类型的存储器
122
- */
123
- export declare class ComponentStorageManager {
124
- private storages;
125
- /**
126
- * 获取或创建组件存储器
127
- * @param componentType 组件类型
128
- * @returns 组件存储器
129
- */
130
- getStorage<T extends Component>(componentType: ComponentType<T>): ComponentStorage<T>;
131
- /**
132
- * 添加组件
133
- * @param entityId 实体ID
134
- * @param component 组件实例
135
- */
136
- addComponent<T extends Component>(entityId: number, component: T): void;
137
- /**
138
- * 获取组件
139
- * @param entityId 实体ID
140
- * @param componentType 组件类型
141
- * @returns 组件实例或null
142
- */
143
- getComponent<T extends Component>(entityId: number, componentType: ComponentType<T>): T | null;
144
- /**
145
- * 检查实体是否有组件
146
- * @param entityId 实体ID
147
- * @param componentType 组件类型
148
- * @returns 是否有组件
149
- */
150
- hasComponent<T extends Component>(entityId: number, componentType: ComponentType<T>): boolean;
151
- /**
152
- * 移除组件
153
- * @param entityId 实体ID
154
- * @param componentType 组件类型
155
- * @returns 被移除的组件或null
156
- */
157
- removeComponent<T extends Component>(entityId: number, componentType: ComponentType<T>): T | null;
158
- /**
159
- * 移除实体的所有组件
160
- * @param entityId 实体ID
161
- */
162
- removeAllComponents(entityId: number): void;
163
- /**
164
- * 获取实体的组件位掩码
165
- * @param entityId 实体ID
166
- * @returns 组件位掩码
167
- */
168
- getComponentMask(entityId: number): bigint;
169
- /**
170
- * 压缩所有存储器
171
- */
172
- compactAll(): void;
173
- /**
174
- * 获取所有存储器的统计信息
175
- */
176
- getAllStats(): Map<string, any>;
177
- /**
178
- * 清空所有存储器
179
- */
180
- clear(): void;
181
- }
182
- //# sourceMappingURL=ComponentStorage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComponentStorage.d.ts","sourceRoot":"","sources":["../../../src/ECS/Core/ComponentStorage.ts"],"names":[],"mappings":"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"}
@@ -1,346 +0,0 @@
1
- /**
2
- * 组件注册表
3
- * 管理组件类型的位掩码分配
4
- */
5
- export class ComponentRegistry {
6
- /**
7
- * 注册组件类型并分配位掩码
8
- * @param componentType 组件类型
9
- * @returns 分配的位索引
10
- */
11
- static register(componentType) {
12
- if (this.componentTypes.has(componentType)) {
13
- return this.componentTypes.get(componentType);
14
- }
15
- if (this.nextBitIndex >= this.maxComponents) {
16
- throw new Error(`Maximum number of component types (${this.maxComponents}) exceeded`);
17
- }
18
- const bitIndex = this.nextBitIndex++;
19
- this.componentTypes.set(componentType, bitIndex);
20
- return bitIndex;
21
- }
22
- /**
23
- * 获取组件类型的位掩码
24
- * @param componentType 组件类型
25
- * @returns 位掩码
26
- */
27
- static getBitMask(componentType) {
28
- const bitIndex = this.componentTypes.get(componentType);
29
- if (bitIndex === undefined) {
30
- throw new Error(`Component type ${componentType.name} is not registered`);
31
- }
32
- return BigInt(1) << BigInt(bitIndex);
33
- }
34
- /**
35
- * 获取组件类型的位索引
36
- * @param componentType 组件类型
37
- * @returns 位索引
38
- */
39
- static getBitIndex(componentType) {
40
- const bitIndex = this.componentTypes.get(componentType);
41
- if (bitIndex === undefined) {
42
- throw new Error(`Component type ${componentType.name} is not registered`);
43
- }
44
- return bitIndex;
45
- }
46
- /**
47
- * 检查组件类型是否已注册
48
- * @param componentType 组件类型
49
- * @returns 是否已注册
50
- */
51
- static isRegistered(componentType) {
52
- return this.componentTypes.has(componentType);
53
- }
54
- /**
55
- * 获取所有已注册的组件类型
56
- * @returns 组件类型映射
57
- */
58
- static getAllRegisteredTypes() {
59
- return new Map(this.componentTypes);
60
- }
61
- }
62
- ComponentRegistry.componentTypes = new Map();
63
- ComponentRegistry.nextBitIndex = 0;
64
- ComponentRegistry.maxComponents = 64; // 支持最多64种组件类型
65
- /**
66
- * 高性能组件存储器
67
- * 使用SoA(Structure of Arrays)模式存储组件
68
- */
69
- export class ComponentStorage {
70
- constructor(componentType) {
71
- this.components = [];
72
- this.entityToIndex = new Map();
73
- this.indexToEntity = [];
74
- this.freeIndices = [];
75
- this._size = 0;
76
- this.componentType = componentType;
77
- // 确保组件类型已注册
78
- if (!ComponentRegistry.isRegistered(componentType)) {
79
- ComponentRegistry.register(componentType);
80
- }
81
- }
82
- /**
83
- * 添加组件
84
- * @param entityId 实体ID
85
- * @param component 组件实例
86
- */
87
- addComponent(entityId, component) {
88
- // 检查实体是否已有此组件
89
- if (this.entityToIndex.has(entityId)) {
90
- throw new Error(`Entity ${entityId} already has component ${this.componentType.name}`);
91
- }
92
- let index;
93
- if (this.freeIndices.length > 0) {
94
- // 重用空闲索引
95
- index = this.freeIndices.pop();
96
- this.components[index] = component;
97
- this.indexToEntity[index] = entityId;
98
- }
99
- else {
100
- // 添加到末尾
101
- index = this.components.length;
102
- this.components.push(component);
103
- this.indexToEntity.push(entityId);
104
- }
105
- this.entityToIndex.set(entityId, index);
106
- this._size++;
107
- }
108
- /**
109
- * 获取组件
110
- * @param entityId 实体ID
111
- * @returns 组件实例或null
112
- */
113
- getComponent(entityId) {
114
- const index = this.entityToIndex.get(entityId);
115
- return index !== undefined ? this.components[index] : null;
116
- }
117
- /**
118
- * 检查实体是否有此组件
119
- * @param entityId 实体ID
120
- * @returns 是否有组件
121
- */
122
- hasComponent(entityId) {
123
- return this.entityToIndex.has(entityId);
124
- }
125
- /**
126
- * 移除组件
127
- * @param entityId 实体ID
128
- * @returns 被移除的组件或null
129
- */
130
- removeComponent(entityId) {
131
- const index = this.entityToIndex.get(entityId);
132
- if (index === undefined) {
133
- return null;
134
- }
135
- const component = this.components[index];
136
- this.entityToIndex.delete(entityId);
137
- this.components[index] = null;
138
- this.freeIndices.push(index);
139
- this._size--;
140
- return component;
141
- }
142
- /**
143
- * 高效遍历所有组件
144
- * @param callback 回调函数
145
- */
146
- forEach(callback) {
147
- for (let i = 0; i < this.components.length; i++) {
148
- const component = this.components[i];
149
- if (component) {
150
- callback(component, this.indexToEntity[i], i);
151
- }
152
- }
153
- }
154
- /**
155
- * 获取所有组件(密集数组)
156
- * @returns 组件数组
157
- */
158
- getDenseArray() {
159
- const components = [];
160
- const entityIds = [];
161
- for (let i = 0; i < this.components.length; i++) {
162
- const component = this.components[i];
163
- if (component) {
164
- components.push(component);
165
- entityIds.push(this.indexToEntity[i]);
166
- }
167
- }
168
- return { components, entityIds };
169
- }
170
- /**
171
- * 清空所有组件
172
- */
173
- clear() {
174
- this.components.length = 0;
175
- this.entityToIndex.clear();
176
- this.indexToEntity.length = 0;
177
- this.freeIndices.length = 0;
178
- this._size = 0;
179
- }
180
- /**
181
- * 获取组件数量
182
- */
183
- get size() {
184
- return this._size;
185
- }
186
- /**
187
- * 获取组件类型
188
- */
189
- get type() {
190
- return this.componentType;
191
- }
192
- /**
193
- * 压缩存储(移除空洞)
194
- */
195
- compact() {
196
- if (this.freeIndices.length === 0) {
197
- return; // 没有空洞,无需压缩
198
- }
199
- const newComponents = [];
200
- const newIndexToEntity = [];
201
- const newEntityToIndex = new Map();
202
- let newIndex = 0;
203
- for (let i = 0; i < this.components.length; i++) {
204
- const component = this.components[i];
205
- if (component) {
206
- newComponents[newIndex] = component;
207
- newIndexToEntity[newIndex] = this.indexToEntity[i];
208
- newEntityToIndex.set(this.indexToEntity[i], newIndex);
209
- newIndex++;
210
- }
211
- }
212
- this.components = newComponents;
213
- this.indexToEntity = newIndexToEntity;
214
- this.entityToIndex = newEntityToIndex;
215
- this.freeIndices.length = 0;
216
- }
217
- /**
218
- * 获取存储统计信息
219
- */
220
- getStats() {
221
- const totalSlots = this.components.length;
222
- const usedSlots = this._size;
223
- const freeSlots = this.freeIndices.length;
224
- const fragmentation = totalSlots > 0 ? freeSlots / totalSlots : 0;
225
- return {
226
- totalSlots,
227
- usedSlots,
228
- freeSlots,
229
- fragmentation
230
- };
231
- }
232
- }
233
- /**
234
- * 组件存储管理器
235
- * 管理所有组件类型的存储器
236
- */
237
- export class ComponentStorageManager {
238
- constructor() {
239
- this.storages = new Map();
240
- }
241
- /**
242
- * 获取或创建组件存储器
243
- * @param componentType 组件类型
244
- * @returns 组件存储器
245
- */
246
- getStorage(componentType) {
247
- let storage = this.storages.get(componentType);
248
- if (!storage) {
249
- storage = new ComponentStorage(componentType);
250
- this.storages.set(componentType, storage);
251
- }
252
- return storage;
253
- }
254
- /**
255
- * 添加组件
256
- * @param entityId 实体ID
257
- * @param component 组件实例
258
- */
259
- addComponent(entityId, component) {
260
- const componentType = component.constructor;
261
- const storage = this.getStorage(componentType);
262
- storage.addComponent(entityId, component);
263
- }
264
- /**
265
- * 获取组件
266
- * @param entityId 实体ID
267
- * @param componentType 组件类型
268
- * @returns 组件实例或null
269
- */
270
- getComponent(entityId, componentType) {
271
- const storage = this.storages.get(componentType);
272
- return storage ? storage.getComponent(entityId) : null;
273
- }
274
- /**
275
- * 检查实体是否有组件
276
- * @param entityId 实体ID
277
- * @param componentType 组件类型
278
- * @returns 是否有组件
279
- */
280
- hasComponent(entityId, componentType) {
281
- const storage = this.storages.get(componentType);
282
- return storage ? storage.hasComponent(entityId) : false;
283
- }
284
- /**
285
- * 移除组件
286
- * @param entityId 实体ID
287
- * @param componentType 组件类型
288
- * @returns 被移除的组件或null
289
- */
290
- removeComponent(entityId, componentType) {
291
- const storage = this.storages.get(componentType);
292
- return storage ? storage.removeComponent(entityId) : null;
293
- }
294
- /**
295
- * 移除实体的所有组件
296
- * @param entityId 实体ID
297
- */
298
- removeAllComponents(entityId) {
299
- for (const storage of this.storages.values()) {
300
- storage.removeComponent(entityId);
301
- }
302
- }
303
- /**
304
- * 获取实体的组件位掩码
305
- * @param entityId 实体ID
306
- * @returns 组件位掩码
307
- */
308
- getComponentMask(entityId) {
309
- let mask = BigInt(0);
310
- for (const [componentType, storage] of this.storages.entries()) {
311
- if (storage.hasComponent(entityId)) {
312
- mask |= ComponentRegistry.getBitMask(componentType);
313
- }
314
- }
315
- return mask;
316
- }
317
- /**
318
- * 压缩所有存储器
319
- */
320
- compactAll() {
321
- for (const storage of this.storages.values()) {
322
- storage.compact();
323
- }
324
- }
325
- /**
326
- * 获取所有存储器的统计信息
327
- */
328
- getAllStats() {
329
- const stats = new Map();
330
- for (const [componentType, storage] of this.storages.entries()) {
331
- const typeName = componentType.name || 'Unknown';
332
- stats.set(typeName, storage.getStats());
333
- }
334
- return stats;
335
- }
336
- /**
337
- * 清空所有存储器
338
- */
339
- clear() {
340
- for (const storage of this.storages.values()) {
341
- storage.clear();
342
- }
343
- this.storages.clear();
344
- }
345
- }
346
- //# sourceMappingURL=ComponentStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComponentStorage.js","sourceRoot":"","sources":["../../../src/ECS/Core/ComponentStorage.ts"],"names":[],"mappings":"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"}