@esengine/ecs-framework 2.1.4 → 2.1.6

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 (201) 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 +21 -46
  6. package/{bin/wasm → wasm}/ecs_wasm_core_bg.wasm +0 -0
  7. package/bin/Core.d.ts +0 -198
  8. package/bin/Core.d.ts.map +0 -1
  9. package/bin/Core.js +0 -247
  10. package/bin/Core.js.map +0 -1
  11. package/bin/ECS/Component.d.ts +0 -119
  12. package/bin/ECS/Component.d.ts.map +0 -1
  13. package/bin/ECS/Component.js +0 -129
  14. package/bin/ECS/Component.js.map +0 -1
  15. package/bin/ECS/Components/IUpdatable.d.ts +0 -22
  16. package/bin/ECS/Components/IUpdatable.d.ts.map +0 -1
  17. package/bin/ECS/Components/IUpdatable.js +0 -22
  18. package/bin/ECS/Components/IUpdatable.js.map +0 -1
  19. package/bin/ECS/Components/SceneComponent.d.ts +0 -40
  20. package/bin/ECS/Components/SceneComponent.d.ts.map +0 -1
  21. package/bin/ECS/Components/SceneComponent.js +0 -61
  22. package/bin/ECS/Components/SceneComponent.js.map +0 -1
  23. package/bin/ECS/Core/BitMaskOptimizer.d.ts +0 -75
  24. package/bin/ECS/Core/BitMaskOptimizer.d.ts.map +0 -1
  25. package/bin/ECS/Core/BitMaskOptimizer.js +0 -161
  26. package/bin/ECS/Core/BitMaskOptimizer.js.map +0 -1
  27. package/bin/ECS/Core/ComponentPool.d.ts +0 -72
  28. package/bin/ECS/Core/ComponentPool.d.ts.map +0 -1
  29. package/bin/ECS/Core/ComponentPool.js +0 -123
  30. package/bin/ECS/Core/ComponentPool.js.map +0 -1
  31. package/bin/ECS/Core/ComponentStorage.d.ts +0 -182
  32. package/bin/ECS/Core/ComponentStorage.d.ts.map +0 -1
  33. package/bin/ECS/Core/ComponentStorage.js +0 -346
  34. package/bin/ECS/Core/ComponentStorage.js.map +0 -1
  35. package/bin/ECS/Core/EventSystem.d.ts +0 -236
  36. package/bin/ECS/Core/EventSystem.d.ts.map +0 -1
  37. package/bin/ECS/Core/EventSystem.js +0 -476
  38. package/bin/ECS/Core/EventSystem.js.map +0 -1
  39. package/bin/ECS/Core/FluentAPI.d.ts +0 -371
  40. package/bin/ECS/Core/FluentAPI.d.ts.map +0 -1
  41. package/bin/ECS/Core/FluentAPI.js +0 -543
  42. package/bin/ECS/Core/FluentAPI.js.map +0 -1
  43. package/bin/ECS/Core/IndexUpdateBatcher.d.ts +0 -100
  44. package/bin/ECS/Core/IndexUpdateBatcher.d.ts.map +0 -1
  45. package/bin/ECS/Core/IndexUpdateBatcher.js +0 -219
  46. package/bin/ECS/Core/IndexUpdateBatcher.js.map +0 -1
  47. package/bin/ECS/Core/QuerySystem.d.ts +0 -422
  48. package/bin/ECS/Core/QuerySystem.d.ts.map +0 -1
  49. package/bin/ECS/Core/QuerySystem.js +0 -937
  50. package/bin/ECS/Core/QuerySystem.js.map +0 -1
  51. package/bin/ECS/CoreEvents.d.ts +0 -19
  52. package/bin/ECS/CoreEvents.d.ts.map +0 -1
  53. package/bin/ECS/CoreEvents.js +0 -20
  54. package/bin/ECS/CoreEvents.js.map +0 -1
  55. package/bin/ECS/Entity.d.ts +0 -538
  56. package/bin/ECS/Entity.d.ts.map +0 -1
  57. package/bin/ECS/Entity.js +0 -1030
  58. package/bin/ECS/Entity.js.map +0 -1
  59. package/bin/ECS/Scene.d.ts +0 -226
  60. package/bin/ECS/Scene.d.ts.map +0 -1
  61. package/bin/ECS/Scene.js +0 -308
  62. package/bin/ECS/Scene.js.map +0 -1
  63. package/bin/ECS/Systems/EntitySystem.d.ts +0 -185
  64. package/bin/ECS/Systems/EntitySystem.d.ts.map +0 -1
  65. package/bin/ECS/Systems/EntitySystem.js +0 -278
  66. package/bin/ECS/Systems/EntitySystem.js.map +0 -1
  67. package/bin/ECS/Systems/IntervalSystem.d.ts +0 -33
  68. package/bin/ECS/Systems/IntervalSystem.d.ts.map +0 -1
  69. package/bin/ECS/Systems/IntervalSystem.js +0 -50
  70. package/bin/ECS/Systems/IntervalSystem.js.map +0 -1
  71. package/bin/ECS/Systems/PassiveSystem.d.ts +0 -20
  72. package/bin/ECS/Systems/PassiveSystem.d.ts.map +0 -1
  73. package/bin/ECS/Systems/PassiveSystem.js +0 -21
  74. package/bin/ECS/Systems/PassiveSystem.js.map +0 -1
  75. package/bin/ECS/Systems/ProcessingSystem.d.ts +0 -24
  76. package/bin/ECS/Systems/ProcessingSystem.d.ts.map +0 -1
  77. package/bin/ECS/Systems/ProcessingSystem.js +0 -22
  78. package/bin/ECS/Systems/ProcessingSystem.js.map +0 -1
  79. package/bin/ECS/Systems/index.d.ts +0 -5
  80. package/bin/ECS/Systems/index.d.ts.map +0 -1
  81. package/bin/ECS/Systems/index.js +0 -6
  82. package/bin/ECS/Systems/index.js.map +0 -1
  83. package/bin/ECS/Utils/Bits.d.ts +0 -74
  84. package/bin/ECS/Utils/Bits.d.ts.map +0 -1
  85. package/bin/ECS/Utils/Bits.js +0 -142
  86. package/bin/ECS/Utils/Bits.js.map +0 -1
  87. package/bin/ECS/Utils/ComponentTypeManager.d.ts +0 -50
  88. package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +0 -1
  89. package/bin/ECS/Utils/ComponentTypeManager.js +0 -84
  90. package/bin/ECS/Utils/ComponentTypeManager.js.map +0 -1
  91. package/bin/ECS/Utils/EntityList.d.ts +0 -108
  92. package/bin/ECS/Utils/EntityList.d.ts.map +0 -1
  93. package/bin/ECS/Utils/EntityList.js +0 -249
  94. package/bin/ECS/Utils/EntityList.js.map +0 -1
  95. package/bin/ECS/Utils/EntityProcessorList.d.ts +0 -53
  96. package/bin/ECS/Utils/EntityProcessorList.d.ts.map +0 -1
  97. package/bin/ECS/Utils/EntityProcessorList.js +0 -96
  98. package/bin/ECS/Utils/EntityProcessorList.js.map +0 -1
  99. package/bin/ECS/Utils/IdentifierPool.d.ts +0 -18
  100. package/bin/ECS/Utils/IdentifierPool.d.ts.map +0 -1
  101. package/bin/ECS/Utils/IdentifierPool.js +0 -27
  102. package/bin/ECS/Utils/IdentifierPool.js.map +0 -1
  103. package/bin/ECS/Utils/Matcher.d.ts +0 -63
  104. package/bin/ECS/Utils/Matcher.d.ts.map +0 -1
  105. package/bin/ECS/Utils/Matcher.js +0 -140
  106. package/bin/ECS/Utils/Matcher.js.map +0 -1
  107. package/bin/ECS/Utils/index.d.ts +0 -7
  108. package/bin/ECS/Utils/index.d.ts.map +0 -1
  109. package/bin/ECS/Utils/index.js +0 -8
  110. package/bin/ECS/Utils/index.js.map +0 -1
  111. package/bin/ECS/index.d.ts +0 -7
  112. package/bin/ECS/index.d.ts.map +0 -1
  113. package/bin/ECS/index.js +0 -29
  114. package/bin/ECS/index.js.map +0 -1
  115. package/bin/Testing/Performance/benchmark.d.ts +0 -6
  116. package/bin/Testing/Performance/benchmark.d.ts.map +0 -1
  117. package/bin/Testing/Performance/benchmark.js +0 -639
  118. package/bin/Testing/Performance/benchmark.js.map +0 -1
  119. package/bin/Testing/Performance/component-performance.d.ts +0 -2
  120. package/bin/Testing/Performance/component-performance.d.ts.map +0 -1
  121. package/bin/Testing/Performance/component-performance.js +0 -43
  122. package/bin/Testing/Performance/component-performance.js.map +0 -1
  123. package/bin/Testing/Unit/bitmask-optimizer.test.d.ts +0 -2
  124. package/bin/Testing/Unit/bitmask-optimizer.test.d.ts.map +0 -1
  125. package/bin/Testing/Unit/bitmask-optimizer.test.js +0 -164
  126. package/bin/Testing/Unit/bitmask-optimizer.test.js.map +0 -1
  127. package/bin/Testing/Unit/component-pool.test.d.ts +0 -5
  128. package/bin/Testing/Unit/component-pool.test.d.ts.map +0 -1
  129. package/bin/Testing/Unit/component-pool.test.js +0 -149
  130. package/bin/Testing/Unit/component-pool.test.js.map +0 -1
  131. package/bin/Testing/test-runner.d.ts +0 -51
  132. package/bin/Testing/test-runner.d.ts.map +0 -1
  133. package/bin/Testing/test-runner.js +0 -159
  134. package/bin/Testing/test-runner.js.map +0 -1
  135. package/bin/Types/index.d.ts +0 -22
  136. package/bin/Types/index.d.ts.map +0 -1
  137. package/bin/Types/index.js +0 -20
  138. package/bin/Types/index.js.map +0 -1
  139. package/bin/Utils/Emitter.d.ts +0 -43
  140. package/bin/Utils/Emitter.d.ts.map +0 -1
  141. package/bin/Utils/Emitter.js +0 -69
  142. package/bin/Utils/Emitter.js.map +0 -1
  143. package/bin/Utils/Extensions/NumberExtension.d.ts +0 -13
  144. package/bin/Utils/Extensions/NumberExtension.d.ts.map +0 -1
  145. package/bin/Utils/Extensions/NumberExtension.js +0 -17
  146. package/bin/Utils/Extensions/NumberExtension.js.map +0 -1
  147. package/bin/Utils/Extensions/TypeUtils.d.ts +0 -13
  148. package/bin/Utils/Extensions/TypeUtils.d.ts.map +0 -1
  149. package/bin/Utils/Extensions/TypeUtils.js +0 -15
  150. package/bin/Utils/Extensions/TypeUtils.js.map +0 -1
  151. package/bin/Utils/Extensions/index.d.ts +0 -3
  152. package/bin/Utils/Extensions/index.d.ts.map +0 -1
  153. package/bin/Utils/Extensions/index.js +0 -4
  154. package/bin/Utils/Extensions/index.js.map +0 -1
  155. package/bin/Utils/GlobalManager.d.ts +0 -32
  156. package/bin/Utils/GlobalManager.d.ts.map +0 -1
  157. package/bin/Utils/GlobalManager.js +0 -53
  158. package/bin/Utils/GlobalManager.js.map +0 -1
  159. package/bin/Utils/PerformanceMonitor.d.ts +0 -211
  160. package/bin/Utils/PerformanceMonitor.d.ts.map +0 -1
  161. package/bin/Utils/PerformanceMonitor.js +0 -270
  162. package/bin/Utils/PerformanceMonitor.js.map +0 -1
  163. package/bin/Utils/Pool.d.ts +0 -239
  164. package/bin/Utils/Pool.d.ts.map +0 -1
  165. package/bin/Utils/Pool.js +0 -449
  166. package/bin/Utils/Pool.js.map +0 -1
  167. package/bin/Utils/Time.d.ts +0 -55
  168. package/bin/Utils/Time.d.ts.map +0 -1
  169. package/bin/Utils/Time.js +0 -78
  170. package/bin/Utils/Time.js.map +0 -1
  171. package/bin/Utils/Timers/ITimer.d.ts +0 -16
  172. package/bin/Utils/Timers/ITimer.d.ts.map +0 -1
  173. package/bin/Utils/Timers/ITimer.js +0 -2
  174. package/bin/Utils/Timers/ITimer.js.map +0 -1
  175. package/bin/Utils/Timers/Timer.d.ts +0 -22
  176. package/bin/Utils/Timers/Timer.d.ts.map +0 -1
  177. package/bin/Utils/Timers/Timer.js +0 -46
  178. package/bin/Utils/Timers/Timer.js.map +0 -1
  179. package/bin/Utils/Timers/TimerManager.d.ts +0 -19
  180. package/bin/Utils/Timers/TimerManager.d.ts.map +0 -1
  181. package/bin/Utils/Timers/TimerManager.js +0 -33
  182. package/bin/Utils/Timers/TimerManager.js.map +0 -1
  183. package/bin/Utils/WasmCore.d.ts +0 -234
  184. package/bin/Utils/WasmCore.d.ts.map +0 -1
  185. package/bin/Utils/WasmCore.js +0 -596
  186. package/bin/Utils/WasmCore.js.map +0 -1
  187. package/bin/Utils/index.d.ts +0 -16
  188. package/bin/Utils/index.d.ts.map +0 -1
  189. package/bin/Utils/index.js +0 -37
  190. package/bin/Utils/index.js.map +0 -1
  191. package/bin/index.cjs +0 -51
  192. package/bin/index.d.ts.map +0 -1
  193. package/bin/index.esm.d.ts +0 -45
  194. package/bin/index.esm.d.ts.map +0 -1
  195. package/bin/index.esm.js +0 -46
  196. package/bin/index.esm.js.map +0 -1
  197. package/bin/index.js.map +0 -1
  198. /package/{bin/wasm → wasm}/ecs_wasm_core.d.ts +0 -0
  199. /package/{bin/wasm → wasm}/ecs_wasm_core.js +0 -0
  200. /package/{bin/wasm → wasm}/ecs_wasm_core_bg.wasm.d.ts +0 -0
  201. /package/{bin/wasm → wasm}/package.json +0 -0
@@ -1,476 +0,0 @@
1
- /**
2
- * 类型安全的高性能事件系统
3
- * 支持同步/异步事件、优先级、批处理等功能
4
- */
5
- export class TypeSafeEventSystem {
6
- constructor() {
7
- this.listeners = new Map();
8
- this.stats = new Map();
9
- this.batchQueue = new Map();
10
- this.batchTimers = new Map();
11
- this.batchConfigs = new Map();
12
- this.nextListenerId = 0;
13
- this.isEnabled = true;
14
- this.maxListeners = 100; // 每个事件类型的最大监听器数量
15
- }
16
- /**
17
- * 添加事件监听器
18
- * @param eventType 事件类型
19
- * @param handler 事件处理器
20
- * @param config 监听器配置
21
- * @returns 监听器ID(用于移除)
22
- */
23
- on(eventType, handler, config = {}) {
24
- return this.addListener(eventType, handler, config);
25
- }
26
- /**
27
- * 添加一次性事件监听器
28
- * @param eventType 事件类型
29
- * @param handler 事件处理器
30
- * @param config 监听器配置
31
- * @returns 监听器ID
32
- */
33
- once(eventType, handler, config = {}) {
34
- return this.addListener(eventType, handler, { ...config, once: true });
35
- }
36
- /**
37
- * 添加异步事件监听器
38
- * @param eventType 事件类型
39
- * @param handler 异步事件处理器
40
- * @param config 监听器配置
41
- * @returns 监听器ID
42
- */
43
- onAsync(eventType, handler, config = {}) {
44
- return this.addListener(eventType, handler, { ...config, async: true });
45
- }
46
- /**
47
- * 移除事件监听器
48
- * @param eventType 事件类型
49
- * @param listenerId 监听器ID
50
- * @returns 是否成功移除
51
- */
52
- off(eventType, listenerId) {
53
- const listeners = this.listeners.get(eventType);
54
- if (!listeners)
55
- return false;
56
- const index = listeners.findIndex(l => l.id === listenerId);
57
- if (index === -1)
58
- return false;
59
- listeners.splice(index, 1);
60
- // 如果没有监听器了,清理相关数据
61
- if (listeners.length === 0) {
62
- this.listeners.delete(eventType);
63
- this.stats.delete(eventType);
64
- }
65
- return true;
66
- }
67
- /**
68
- * 移除指定事件类型的所有监听器
69
- * @param eventType 事件类型
70
- */
71
- offAll(eventType) {
72
- this.listeners.delete(eventType);
73
- this.stats.delete(eventType);
74
- this.clearBatch(eventType);
75
- }
76
- /**
77
- * 触发事件
78
- * @param eventType 事件类型
79
- * @param event 事件数据
80
- * @returns Promise(如果有异步监听器)
81
- */
82
- async emit(eventType, event) {
83
- if (!this.isEnabled)
84
- return;
85
- // 检查是否启用了批处理
86
- const batchConfig = this.batchConfigs.get(eventType);
87
- if (batchConfig?.enabled) {
88
- this.addToBatch(eventType, event);
89
- return;
90
- }
91
- await this.executeEvent(eventType, event);
92
- }
93
- /**
94
- * 同步触发事件(忽略异步监听器)
95
- * @param eventType 事件类型
96
- * @param event 事件数据
97
- */
98
- emitSync(eventType, event) {
99
- if (!this.isEnabled)
100
- return;
101
- const listeners = this.listeners.get(eventType);
102
- if (!listeners || listeners.length === 0)
103
- return;
104
- const startTime = performance.now();
105
- const toRemove = [];
106
- // 按优先级排序
107
- const sortedListeners = this.sortListenersByPriority(listeners);
108
- for (const listener of sortedListeners) {
109
- if (listener.config.async)
110
- continue; // 跳过异步监听器
111
- try {
112
- if (listener.config.context) {
113
- listener.handler.call(listener.config.context, event);
114
- }
115
- else {
116
- listener.handler(event);
117
- }
118
- if (listener.config.once) {
119
- toRemove.push(listener.id);
120
- }
121
- }
122
- catch (error) {
123
- console.error(`Error in event handler for ${eventType}:`, error);
124
- }
125
- }
126
- // 移除一次性监听器
127
- this.removeListeners(eventType, toRemove);
128
- // 更新统计信息
129
- this.updateStats(eventType, performance.now() - startTime);
130
- }
131
- /**
132
- * 设置事件批处理配置
133
- * @param eventType 事件类型
134
- * @param config 批处理配置
135
- */
136
- setBatchConfig(eventType, config) {
137
- this.batchConfigs.set(eventType, config);
138
- }
139
- /**
140
- * 立即处理指定事件类型的批处理队列
141
- * @param eventType 事件类型
142
- */
143
- flushBatch(eventType) {
144
- const batch = this.batchQueue.get(eventType);
145
- if (!batch || batch.length === 0)
146
- return;
147
- // 清除定时器
148
- const timer = this.batchTimers.get(eventType);
149
- if (timer) {
150
- clearTimeout(timer);
151
- this.batchTimers.delete(eventType);
152
- }
153
- // 处理批处理事件
154
- this.processBatch(eventType, batch);
155
- // 清空队列
156
- this.batchQueue.delete(eventType);
157
- }
158
- /**
159
- * 获取事件统计信息
160
- * @param eventType 事件类型(可选)
161
- * @returns 统计信息
162
- */
163
- getStats(eventType) {
164
- if (eventType) {
165
- return this.stats.get(eventType) || this.createEmptyStats(eventType);
166
- }
167
- return new Map(this.stats);
168
- }
169
- /**
170
- * 重置统计信息
171
- * @param eventType 事件类型(可选,不指定则重置所有)
172
- */
173
- resetStats(eventType) {
174
- if (eventType) {
175
- this.stats.delete(eventType);
176
- }
177
- else {
178
- this.stats.clear();
179
- }
180
- }
181
- /**
182
- * 启用/禁用事件系统
183
- * @param enabled 是否启用
184
- */
185
- setEnabled(enabled) {
186
- this.isEnabled = enabled;
187
- }
188
- /**
189
- * 检查是否有指定事件类型的监听器
190
- * @param eventType 事件类型
191
- * @returns 是否有监听器
192
- */
193
- hasListeners(eventType) {
194
- const listeners = this.listeners.get(eventType);
195
- return listeners ? listeners.length > 0 : false;
196
- }
197
- /**
198
- * 获取指定事件类型的监听器数量
199
- * @param eventType 事件类型
200
- * @returns 监听器数量
201
- */
202
- getListenerCount(eventType) {
203
- const listeners = this.listeners.get(eventType);
204
- return listeners ? listeners.length : 0;
205
- }
206
- /**
207
- * 清空所有事件监听器和数据
208
- */
209
- clear() {
210
- this.listeners.clear();
211
- this.stats.clear();
212
- this.clearAllBatches();
213
- }
214
- /**
215
- * 设置每个事件类型的最大监听器数量
216
- * @param max 最大数量
217
- */
218
- setMaxListeners(max) {
219
- this.maxListeners = max;
220
- }
221
- /**
222
- * 添加监听器的内部实现
223
- * @param eventType 事件类型
224
- * @param handler 事件处理器
225
- * @param config 配置
226
- * @returns 监听器ID
227
- */
228
- addListener(eventType, handler, config) {
229
- let listeners = this.listeners.get(eventType);
230
- if (!listeners) {
231
- listeners = [];
232
- this.listeners.set(eventType, listeners);
233
- }
234
- // 检查监听器数量限制
235
- if (listeners.length >= this.maxListeners) {
236
- console.warn(`Maximum listeners (${this.maxListeners}) exceeded for event type: ${eventType}`);
237
- return '';
238
- }
239
- const listenerId = `listener_${this.nextListenerId++}`;
240
- const listener = {
241
- handler,
242
- config: {
243
- priority: 0,
244
- ...config
245
- },
246
- id: listenerId
247
- };
248
- listeners.push(listener);
249
- // 初始化统计信息
250
- if (!this.stats.has(eventType)) {
251
- this.stats.set(eventType, this.createEmptyStats(eventType));
252
- }
253
- return listenerId;
254
- }
255
- /**
256
- * 执行事件的内部实现
257
- * @param eventType 事件类型
258
- * @param event 事件数据
259
- */
260
- async executeEvent(eventType, event) {
261
- const listeners = this.listeners.get(eventType);
262
- if (!listeners || listeners.length === 0)
263
- return;
264
- const startTime = performance.now();
265
- const toRemove = [];
266
- // 按优先级排序
267
- const sortedListeners = this.sortListenersByPriority(listeners);
268
- // 分离同步和异步监听器
269
- const syncListeners = sortedListeners.filter(l => !l.config.async);
270
- const asyncListeners = sortedListeners.filter(l => l.config.async);
271
- // 执行同步监听器
272
- for (const listener of syncListeners) {
273
- try {
274
- if (listener.config.context) {
275
- listener.handler.call(listener.config.context, event);
276
- }
277
- else {
278
- listener.handler(event);
279
- }
280
- if (listener.config.once) {
281
- toRemove.push(listener.id);
282
- }
283
- }
284
- catch (error) {
285
- console.error(`Error in sync event handler for ${eventType}:`, error);
286
- }
287
- }
288
- // 执行异步监听器
289
- const asyncPromises = asyncListeners.map(async (listener) => {
290
- try {
291
- if (listener.config.context) {
292
- await listener.handler.call(listener.config.context, event);
293
- }
294
- else {
295
- await listener.handler(event);
296
- }
297
- if (listener.config.once) {
298
- toRemove.push(listener.id);
299
- }
300
- }
301
- catch (error) {
302
- console.error(`Error in async event handler for ${eventType}:`, error);
303
- }
304
- });
305
- // 等待所有异步监听器完成
306
- await Promise.all(asyncPromises);
307
- // 移除一次性监听器
308
- this.removeListeners(eventType, toRemove);
309
- // 更新统计信息
310
- this.updateStats(eventType, performance.now() - startTime);
311
- }
312
- /**
313
- * 按优先级排序监听器
314
- * @param listeners 监听器数组
315
- * @returns 排序后的监听器数组
316
- */
317
- sortListenersByPriority(listeners) {
318
- return listeners.slice().sort((a, b) => (b.config.priority || 0) - (a.config.priority || 0));
319
- }
320
- /**
321
- * 移除指定的监听器
322
- * @param eventType 事件类型
323
- * @param listenerIds 要移除的监听器ID数组
324
- */
325
- removeListeners(eventType, listenerIds) {
326
- if (listenerIds.length === 0)
327
- return;
328
- const listeners = this.listeners.get(eventType);
329
- if (!listeners)
330
- return;
331
- for (const id of listenerIds) {
332
- const index = listeners.findIndex(l => l.id === id);
333
- if (index !== -1) {
334
- listeners.splice(index, 1);
335
- }
336
- }
337
- // 如果没有监听器了,清理相关数据
338
- if (listeners.length === 0) {
339
- this.listeners.delete(eventType);
340
- this.stats.delete(eventType);
341
- }
342
- }
343
- /**
344
- * 添加事件到批处理队列
345
- * @param eventType 事件类型
346
- * @param event 事件数据
347
- */
348
- addToBatch(eventType, event) {
349
- let batch = this.batchQueue.get(eventType);
350
- if (!batch) {
351
- batch = [];
352
- this.batchQueue.set(eventType, batch);
353
- }
354
- batch.push(event);
355
- const config = this.batchConfigs.get(eventType);
356
- // 如果达到批处理大小,立即处理
357
- if (batch.length >= config.batchSize) {
358
- this.flushBatch(eventType);
359
- return;
360
- }
361
- // 设置延迟处理定时器
362
- if (!this.batchTimers.has(eventType)) {
363
- const timer = setTimeout(() => {
364
- this.flushBatch(eventType);
365
- }, config.delay);
366
- this.batchTimers.set(eventType, timer);
367
- }
368
- }
369
- /**
370
- * 处理批处理事件
371
- * @param eventType 事件类型
372
- * @param batch 批处理事件数组
373
- */
374
- async processBatch(eventType, batch) {
375
- // 创建批处理事件对象
376
- const batchEvent = {
377
- type: eventType,
378
- events: batch,
379
- count: batch.length,
380
- timestamp: Date.now()
381
- };
382
- // 触发批处理事件
383
- await this.executeEvent(`${eventType}:batch`, batchEvent);
384
- }
385
- /**
386
- * 清除指定事件类型的批处理
387
- * @param eventType 事件类型
388
- */
389
- clearBatch(eventType) {
390
- this.batchQueue.delete(eventType);
391
- const timer = this.batchTimers.get(eventType);
392
- if (timer) {
393
- clearTimeout(timer);
394
- this.batchTimers.delete(eventType);
395
- }
396
- }
397
- /**
398
- * 清除所有批处理
399
- */
400
- clearAllBatches() {
401
- this.batchQueue.clear();
402
- for (const timer of this.batchTimers.values()) {
403
- clearTimeout(timer);
404
- }
405
- this.batchTimers.clear();
406
- this.batchConfigs.clear();
407
- }
408
- /**
409
- * 更新事件统计信息
410
- * @param eventType 事件类型
411
- * @param executionTime 执行时间
412
- */
413
- updateStats(eventType, executionTime) {
414
- let stats = this.stats.get(eventType);
415
- if (!stats) {
416
- stats = this.createEmptyStats(eventType);
417
- this.stats.set(eventType, stats);
418
- }
419
- stats.triggerCount++;
420
- stats.totalExecutionTime += executionTime;
421
- stats.averageExecutionTime = stats.totalExecutionTime / stats.triggerCount;
422
- stats.lastTriggerTime = Date.now();
423
- stats.listenerCount = this.getListenerCount(eventType);
424
- }
425
- /**
426
- * 创建空的统计信息
427
- * @param eventType 事件类型
428
- * @returns 空的统计信息
429
- */
430
- createEmptyStats(eventType) {
431
- return {
432
- eventType,
433
- listenerCount: 0,
434
- triggerCount: 0,
435
- totalExecutionTime: 0,
436
- averageExecutionTime: 0,
437
- lastTriggerTime: 0
438
- };
439
- }
440
- }
441
- /**
442
- * 全局事件系统实例
443
- */
444
- export const GlobalEventSystem = new TypeSafeEventSystem();
445
- /**
446
- * 事件装饰器 - 用于自动注册事件监听器
447
- * @param eventType 事件类型
448
- * @param config 监听器配置
449
- */
450
- export function EventListener(eventType, config = {}) {
451
- return function (target, propertyKey, descriptor) {
452
- const originalMethod = descriptor.value;
453
- // 在类实例化时自动注册监听器
454
- const initMethod = target.constructor.prototype.initEventListeners || function () { };
455
- target.constructor.prototype.initEventListeners = function () {
456
- initMethod.call(this);
457
- GlobalEventSystem.on(eventType, originalMethod.bind(this), config);
458
- };
459
- };
460
- }
461
- /**
462
- * 异步事件装饰器
463
- * @param eventType 事件类型
464
- * @param config 监听器配置
465
- */
466
- export function AsyncEventListener(eventType, config = {}) {
467
- return function (target, propertyKey, descriptor) {
468
- const originalMethod = descriptor.value;
469
- const initMethod = target.constructor.prototype.initEventListeners || function () { };
470
- target.constructor.prototype.initEventListeners = function () {
471
- initMethod.call(this);
472
- GlobalEventSystem.onAsync(eventType, originalMethod.bind(this), config);
473
- };
474
- };
475
- }
476
- //# sourceMappingURL=EventSystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventSystem.js","sourceRoot":"","sources":["../../../src/ECS/Core/EventSystem.ts"],"names":[],"mappings":"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"}