@esengine/ecs-framework 2.0.3

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 (187) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +277 -0
  3. package/bin/Core.d.ts +198 -0
  4. package/bin/Core.d.ts.map +1 -0
  5. package/bin/Core.js +249 -0
  6. package/bin/Core.js.map +1 -0
  7. package/bin/ECS/Component.d.ts +119 -0
  8. package/bin/ECS/Component.d.ts.map +1 -0
  9. package/bin/ECS/Component.js +129 -0
  10. package/bin/ECS/Component.js.map +1 -0
  11. package/bin/ECS/Components/IUpdatable.d.ts +22 -0
  12. package/bin/ECS/Components/IUpdatable.d.ts.map +1 -0
  13. package/bin/ECS/Components/IUpdatable.js +17 -0
  14. package/bin/ECS/Components/IUpdatable.js.map +1 -0
  15. package/bin/ECS/Components/SceneComponent.d.ts +40 -0
  16. package/bin/ECS/Components/SceneComponent.d.ts.map +1 -0
  17. package/bin/ECS/Components/SceneComponent.js +57 -0
  18. package/bin/ECS/Components/SceneComponent.js.map +1 -0
  19. package/bin/ECS/Core/ComponentStorage.d.ts +182 -0
  20. package/bin/ECS/Core/ComponentStorage.d.ts.map +1 -0
  21. package/bin/ECS/Core/ComponentStorage.js +346 -0
  22. package/bin/ECS/Core/ComponentStorage.js.map +1 -0
  23. package/bin/ECS/Core/EventSystem.d.ts +236 -0
  24. package/bin/ECS/Core/EventSystem.d.ts.map +1 -0
  25. package/bin/ECS/Core/EventSystem.js +476 -0
  26. package/bin/ECS/Core/EventSystem.js.map +1 -0
  27. package/bin/ECS/Core/FluentAPI.d.ts +392 -0
  28. package/bin/ECS/Core/FluentAPI.d.ts.map +1 -0
  29. package/bin/ECS/Core/FluentAPI.js +575 -0
  30. package/bin/ECS/Core/FluentAPI.js.map +1 -0
  31. package/bin/ECS/Core/QuerySystem.d.ts +574 -0
  32. package/bin/ECS/Core/QuerySystem.d.ts.map +1 -0
  33. package/bin/ECS/Core/QuerySystem.js +1356 -0
  34. package/bin/ECS/Core/QuerySystem.js.map +1 -0
  35. package/bin/ECS/CoreEvents.d.ts +19 -0
  36. package/bin/ECS/CoreEvents.d.ts.map +1 -0
  37. package/bin/ECS/CoreEvents.js +20 -0
  38. package/bin/ECS/CoreEvents.js.map +1 -0
  39. package/bin/ECS/Entity.d.ts +585 -0
  40. package/bin/ECS/Entity.d.ts.map +1 -0
  41. package/bin/ECS/Entity.js +1079 -0
  42. package/bin/ECS/Entity.js.map +1 -0
  43. package/bin/ECS/Scene.d.ts +210 -0
  44. package/bin/ECS/Scene.d.ts.map +1 -0
  45. package/bin/ECS/Scene.js +267 -0
  46. package/bin/ECS/Scene.js.map +1 -0
  47. package/bin/ECS/Systems/EntitySystem.d.ts +185 -0
  48. package/bin/ECS/Systems/EntitySystem.d.ts.map +1 -0
  49. package/bin/ECS/Systems/EntitySystem.js +278 -0
  50. package/bin/ECS/Systems/EntitySystem.js.map +1 -0
  51. package/bin/ECS/Systems/IntervalSystem.d.ts +33 -0
  52. package/bin/ECS/Systems/IntervalSystem.d.ts.map +1 -0
  53. package/bin/ECS/Systems/IntervalSystem.js +50 -0
  54. package/bin/ECS/Systems/IntervalSystem.js.map +1 -0
  55. package/bin/ECS/Systems/PassiveSystem.d.ts +20 -0
  56. package/bin/ECS/Systems/PassiveSystem.d.ts.map +1 -0
  57. package/bin/ECS/Systems/PassiveSystem.js +21 -0
  58. package/bin/ECS/Systems/PassiveSystem.js.map +1 -0
  59. package/bin/ECS/Systems/ProcessingSystem.d.ts +24 -0
  60. package/bin/ECS/Systems/ProcessingSystem.d.ts.map +1 -0
  61. package/bin/ECS/Systems/ProcessingSystem.js +22 -0
  62. package/bin/ECS/Systems/ProcessingSystem.js.map +1 -0
  63. package/bin/ECS/Systems/index.d.ts +5 -0
  64. package/bin/ECS/Systems/index.d.ts.map +1 -0
  65. package/bin/ECS/Systems/index.js +6 -0
  66. package/bin/ECS/Systems/index.js.map +1 -0
  67. package/bin/ECS/Transform.d.ts +178 -0
  68. package/bin/ECS/Transform.d.ts.map +1 -0
  69. package/bin/ECS/Transform.js +249 -0
  70. package/bin/ECS/Transform.js.map +1 -0
  71. package/bin/ECS/Utils/Bits.d.ts +74 -0
  72. package/bin/ECS/Utils/Bits.d.ts.map +1 -0
  73. package/bin/ECS/Utils/Bits.js +142 -0
  74. package/bin/ECS/Utils/Bits.js.map +1 -0
  75. package/bin/ECS/Utils/ComponentTypeManager.d.ts +50 -0
  76. package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +1 -0
  77. package/bin/ECS/Utils/ComponentTypeManager.js +84 -0
  78. package/bin/ECS/Utils/ComponentTypeManager.js.map +1 -0
  79. package/bin/ECS/Utils/EntityList.d.ts +108 -0
  80. package/bin/ECS/Utils/EntityList.d.ts.map +1 -0
  81. package/bin/ECS/Utils/EntityList.js +249 -0
  82. package/bin/ECS/Utils/EntityList.js.map +1 -0
  83. package/bin/ECS/Utils/EntityProcessorList.d.ts +53 -0
  84. package/bin/ECS/Utils/EntityProcessorList.d.ts.map +1 -0
  85. package/bin/ECS/Utils/EntityProcessorList.js +96 -0
  86. package/bin/ECS/Utils/EntityProcessorList.js.map +1 -0
  87. package/bin/ECS/Utils/IdentifierPool.d.ts +18 -0
  88. package/bin/ECS/Utils/IdentifierPool.d.ts.map +1 -0
  89. package/bin/ECS/Utils/IdentifierPool.js +27 -0
  90. package/bin/ECS/Utils/IdentifierPool.js.map +1 -0
  91. package/bin/ECS/Utils/Matcher.d.ts +63 -0
  92. package/bin/ECS/Utils/Matcher.d.ts.map +1 -0
  93. package/bin/ECS/Utils/Matcher.js +140 -0
  94. package/bin/ECS/Utils/Matcher.js.map +1 -0
  95. package/bin/ECS/Utils/index.d.ts +7 -0
  96. package/bin/ECS/Utils/index.d.ts.map +1 -0
  97. package/bin/ECS/Utils/index.js +8 -0
  98. package/bin/ECS/Utils/index.js.map +1 -0
  99. package/bin/ECS/index.d.ts +8 -0
  100. package/bin/ECS/index.d.ts.map +1 -0
  101. package/bin/ECS/index.js +9 -0
  102. package/bin/ECS/index.js.map +1 -0
  103. package/bin/Math/Edge.d.ts +23 -0
  104. package/bin/Math/Edge.d.ts.map +1 -0
  105. package/bin/Math/Edge.js +24 -0
  106. package/bin/Math/Edge.js.map +1 -0
  107. package/bin/Math/MathHelper.d.ts +75 -0
  108. package/bin/Math/MathHelper.d.ts.map +1 -0
  109. package/bin/Math/MathHelper.js +91 -0
  110. package/bin/Math/MathHelper.js.map +1 -0
  111. package/bin/Math/Rectangle.d.ts +126 -0
  112. package/bin/Math/Rectangle.d.ts.map +1 -0
  113. package/bin/Math/Rectangle.js +181 -0
  114. package/bin/Math/Rectangle.js.map +1 -0
  115. package/bin/Math/Vector2.d.ts +229 -0
  116. package/bin/Math/Vector2.d.ts.map +1 -0
  117. package/bin/Math/Vector2.js +338 -0
  118. package/bin/Math/Vector2.js.map +1 -0
  119. package/bin/Math/index.d.ts +5 -0
  120. package/bin/Math/index.d.ts.map +1 -0
  121. package/bin/Math/index.js +6 -0
  122. package/bin/Math/index.js.map +1 -0
  123. package/bin/Types/index.d.ts +22 -0
  124. package/bin/Types/index.d.ts.map +1 -0
  125. package/bin/Types/index.js +20 -0
  126. package/bin/Types/index.js.map +1 -0
  127. package/bin/Utils/Emitter.d.ts +43 -0
  128. package/bin/Utils/Emitter.d.ts.map +1 -0
  129. package/bin/Utils/Emitter.js +69 -0
  130. package/bin/Utils/Emitter.js.map +1 -0
  131. package/bin/Utils/Extensions/EdgeExt.d.ts +26 -0
  132. package/bin/Utils/Extensions/EdgeExt.d.ts.map +1 -0
  133. package/bin/Utils/Extensions/EdgeExt.js +41 -0
  134. package/bin/Utils/Extensions/EdgeExt.js.map +1 -0
  135. package/bin/Utils/Extensions/NumberExtension.d.ts +13 -0
  136. package/bin/Utils/Extensions/NumberExtension.d.ts.map +1 -0
  137. package/bin/Utils/Extensions/NumberExtension.js +17 -0
  138. package/bin/Utils/Extensions/NumberExtension.js.map +1 -0
  139. package/bin/Utils/Extensions/TypeUtils.d.ts +13 -0
  140. package/bin/Utils/Extensions/TypeUtils.d.ts.map +1 -0
  141. package/bin/Utils/Extensions/TypeUtils.js +15 -0
  142. package/bin/Utils/Extensions/TypeUtils.js.map +1 -0
  143. package/bin/Utils/Extensions/index.d.ts +4 -0
  144. package/bin/Utils/Extensions/index.d.ts.map +1 -0
  145. package/bin/Utils/Extensions/index.js +5 -0
  146. package/bin/Utils/Extensions/index.js.map +1 -0
  147. package/bin/Utils/GlobalManager.d.ts +32 -0
  148. package/bin/Utils/GlobalManager.d.ts.map +1 -0
  149. package/bin/Utils/GlobalManager.js +53 -0
  150. package/bin/Utils/GlobalManager.js.map +1 -0
  151. package/bin/Utils/PerformanceMonitor.d.ts +211 -0
  152. package/bin/Utils/PerformanceMonitor.d.ts.map +1 -0
  153. package/bin/Utils/PerformanceMonitor.js +270 -0
  154. package/bin/Utils/PerformanceMonitor.js.map +1 -0
  155. package/bin/Utils/Pool.d.ts +239 -0
  156. package/bin/Utils/Pool.d.ts.map +1 -0
  157. package/bin/Utils/Pool.js +449 -0
  158. package/bin/Utils/Pool.js.map +1 -0
  159. package/bin/Utils/Screen.d.ts +12 -0
  160. package/bin/Utils/Screen.d.ts.map +1 -0
  161. package/bin/Utils/Screen.js +14 -0
  162. package/bin/Utils/Screen.js.map +1 -0
  163. package/bin/Utils/Time.d.ts +55 -0
  164. package/bin/Utils/Time.d.ts.map +1 -0
  165. package/bin/Utils/Time.js +78 -0
  166. package/bin/Utils/Time.js.map +1 -0
  167. package/bin/Utils/Timers/ITimer.d.ts +16 -0
  168. package/bin/Utils/Timers/ITimer.d.ts.map +1 -0
  169. package/bin/Utils/Timers/ITimer.js +2 -0
  170. package/bin/Utils/Timers/ITimer.js.map +1 -0
  171. package/bin/Utils/Timers/Timer.d.ts +22 -0
  172. package/bin/Utils/Timers/Timer.d.ts.map +1 -0
  173. package/bin/Utils/Timers/Timer.js +46 -0
  174. package/bin/Utils/Timers/Timer.js.map +1 -0
  175. package/bin/Utils/Timers/TimerManager.d.ts +19 -0
  176. package/bin/Utils/Timers/TimerManager.d.ts.map +1 -0
  177. package/bin/Utils/Timers/TimerManager.js +33 -0
  178. package/bin/Utils/Timers/TimerManager.js.map +1 -0
  179. package/bin/Utils/index.d.ts +6 -0
  180. package/bin/Utils/index.d.ts.map +1 -0
  181. package/bin/Utils/index.js +7 -0
  182. package/bin/Utils/index.js.map +1 -0
  183. package/bin/index.d.ts +21 -0
  184. package/bin/index.d.ts.map +1 -0
  185. package/bin/index.js +26 -0
  186. package/bin/index.js.map +1 -0
  187. package/package.json +68 -0
@@ -0,0 +1,574 @@
1
+ import { Entity } from '../Entity';
2
+ import { Component } from '../Component';
3
+ import { ComponentType } from './ComponentStorage';
4
+ /**
5
+ * 查询条件类型
6
+ */
7
+ export declare enum QueryConditionType {
8
+ /** 必须包含所有指定组件 */
9
+ ALL = "all",
10
+ /** 必须包含任意一个指定组件 */
11
+ ANY = "any",
12
+ /** 不能包含任何指定组件 */
13
+ NONE = "none"
14
+ }
15
+ /**
16
+ * 查询条件
17
+ */
18
+ export interface QueryCondition {
19
+ type: QueryConditionType;
20
+ componentTypes: ComponentType[];
21
+ mask: bigint;
22
+ }
23
+ /**
24
+ * 组件元组类型
25
+ */
26
+ export type ComponentTuple<T extends readonly ComponentType[]> = {
27
+ [K in keyof T]: T[K] extends ComponentType<infer C> ? C : never;
28
+ };
29
+ /**
30
+ * 类型安全的查询结果
31
+ */
32
+ export interface TypedQueryResult<T extends readonly ComponentType[]> {
33
+ entities: Entity[];
34
+ components: ComponentTuple<T>[];
35
+ count: number;
36
+ executionTime: number;
37
+ fromCache: boolean;
38
+ }
39
+ /**
40
+ * 实体和组件的配对结果
41
+ */
42
+ export interface EntityComponentPair<T extends readonly ComponentType[]> {
43
+ entity: Entity;
44
+ components: ComponentTuple<T>;
45
+ }
46
+ /**
47
+ * 实体查询结果
48
+ */
49
+ export interface QueryResult {
50
+ entities: Entity[];
51
+ count: number;
52
+ /** 查询执行时间(毫秒) */
53
+ executionTime: number;
54
+ /** 是否来自缓存 */
55
+ fromCache: boolean;
56
+ }
57
+ /**
58
+ * 查询性能统计
59
+ */
60
+ interface QueryPerformanceStats {
61
+ totalQueries: number;
62
+ averageExecutionTime: number;
63
+ cacheHitRate: number;
64
+ indexHitRate: number;
65
+ slowQueries: Array<{
66
+ query: string;
67
+ executionTime: number;
68
+ timestamp: number;
69
+ }>;
70
+ }
71
+ /**
72
+ * 高性能实体查询系统
73
+ * 使用位掩码进行快速组件匹配,支持多级索引和智能缓存
74
+ */
75
+ export declare class QuerySystem {
76
+ private entities;
77
+ private queryCache;
78
+ private cacheTimeout;
79
+ private maxCacheSize;
80
+ private cacheHits;
81
+ private cacheMisses;
82
+ private entityIndex;
83
+ private performanceStats;
84
+ private indexDirty;
85
+ private lastIndexUpdate;
86
+ private indexUpdateThreshold;
87
+ private pendingEntityAdds;
88
+ private pendingEntityRemoves;
89
+ private batchUpdateScheduled;
90
+ /**
91
+ * 设置实体列表
92
+ * @param entities 实体数组
93
+ */
94
+ setEntities(entities: Entity[]): void;
95
+ /**
96
+ * 添加实体
97
+ * @param entity 实体
98
+ */
99
+ addEntity(entity: Entity): void;
100
+ /**
101
+ * 批量添加实体
102
+ * @param entities 实体数组
103
+ */
104
+ addEntities(entities: Entity[]): void;
105
+ /**
106
+ * 移除实体
107
+ * @param entity 实体
108
+ */
109
+ removeEntity(entity: Entity): void;
110
+ /**
111
+ * 批量移除实体
112
+ * @param entities 实体数组
113
+ */
114
+ removeEntities(entities: Entity[]): void;
115
+ /**
116
+ * 调度批量更新
117
+ */
118
+ private scheduleBatchUpdate;
119
+ /**
120
+ * 处理批量更新
121
+ */
122
+ private processBatchUpdates;
123
+ /**
124
+ * 强制立即处理所有待处理的更新
125
+ */
126
+ flushUpdates(): void;
127
+ /**
128
+ * 无效化所有索引
129
+ */
130
+ private invalidateIndexes;
131
+ /**
132
+ * 将实体添加到索引
133
+ * @param entity 实体
134
+ */
135
+ private addEntityToIndexes;
136
+ /**
137
+ * 从索引中移除实体
138
+ * @param entity 实体
139
+ */
140
+ private removeEntityFromIndexes;
141
+ /**
142
+ * 重建所有索引
143
+ */
144
+ private rebuildIndexes;
145
+ /**
146
+ * 确保索引是最新的
147
+ */
148
+ private ensureIndexesUpdated;
149
+ /**
150
+ * 查询包含所有指定组件的实体
151
+ * @param componentTypes 组件类型数组
152
+ * @returns 查询结果
153
+ */
154
+ queryAll(...componentTypes: ComponentType[]): QueryResult;
155
+ /**
156
+ * 查询包含任意指定组件的实体
157
+ * @param componentTypes 组件类型数组
158
+ * @returns 查询结果
159
+ */
160
+ queryAny(...componentTypes: ComponentType[]): QueryResult;
161
+ /**
162
+ * 查询不包含任何指定组件的实体
163
+ * @param componentTypes 组件类型数组
164
+ * @returns 查询结果
165
+ */
166
+ queryNone(...componentTypes: ComponentType[]): QueryResult;
167
+ /**
168
+ * 复合查询:同时满足多个条件
169
+ * @param conditions 查询条件数组
170
+ * @returns 查询结果
171
+ */
172
+ queryComplex(...conditions: QueryCondition[]): QueryResult;
173
+ /**
174
+ * 流式查询构建器
175
+ * @returns 查询构建器实例
176
+ */
177
+ createQuery(): QueryBuilder;
178
+ /**
179
+ * 根据标签查询实体
180
+ * @param tag 标签
181
+ * @returns 查询结果
182
+ */
183
+ queryByTag(tag: number): QueryResult;
184
+ /**
185
+ * 根据名称查询实体
186
+ * @param name 名称
187
+ * @returns 查询结果
188
+ */
189
+ queryByName(name: string): QueryResult;
190
+ /**
191
+ * 根据单个组件类型快速查询
192
+ * @param componentType 组件类型
193
+ * @returns 查询结果
194
+ */
195
+ queryByComponent<T extends Component>(componentType: ComponentType<T>): QueryResult;
196
+ /**
197
+ * 类型安全的查询所有指定组件的实体
198
+ * @param componentTypes 组件类型数组
199
+ * @returns 类型安全的查询结果
200
+ */
201
+ queryAllTyped<T extends readonly ComponentType[]>(...componentTypes: T): TypedQueryResult<T>;
202
+ /**
203
+ * 查询具有特定组件组合的实体并返回组件实例
204
+ * @param componentTypes 组件类型数组
205
+ * @returns 实体和对应组件的映射
206
+ */
207
+ queryWithComponents<T extends readonly ComponentType[]>(...componentTypes: T): EntityComponentPair<T>[];
208
+ /**
209
+ * 迭代查询结果,为每个匹配的实体执行回调
210
+ * @param componentTypes 组件类型数组
211
+ * @param callback 回调函数
212
+ */
213
+ forEachWithComponents<T extends readonly ComponentType[]>(componentTypes: T, callback: (entity: Entity, components: ComponentTuple<T>) => void): void;
214
+ /**
215
+ * 查询单个组件类型的实体,返回类型安全的结果
216
+ * @param componentType 组件类型
217
+ * @returns 实体和组件的配对数组
218
+ */
219
+ queryComponentTyped<T extends Component>(componentType: ComponentType<T>): Array<{
220
+ entity: Entity;
221
+ component: T;
222
+ }>;
223
+ /**
224
+ * 查询两个组件类型的实体,返回类型安全的结果
225
+ * @param componentType1 第一个组件类型
226
+ * @param componentType2 第二个组件类型
227
+ * @returns 实体和组件的配对数组
228
+ */
229
+ queryTwoComponents<T1 extends Component, T2 extends Component>(componentType1: ComponentType<T1>, componentType2: ComponentType<T2>): Array<{
230
+ entity: Entity;
231
+ component1: T1;
232
+ component2: T2;
233
+ }>;
234
+ /**
235
+ * 查询三个组件类型的实体,返回类型安全的结果
236
+ * @param componentType1 第一个组件类型
237
+ * @param componentType2 第二个组件类型
238
+ * @param componentType3 第三个组件类型
239
+ * @returns 实体和组件的配对数组
240
+ */
241
+ queryThreeComponents<T1 extends Component, T2 extends Component, T3 extends Component>(componentType1: ComponentType<T1>, componentType2: ComponentType<T2>, componentType3: ComponentType<T3>): Array<{
242
+ entity: Entity;
243
+ component1: T1;
244
+ component2: T2;
245
+ component3: T3;
246
+ }>;
247
+ /**
248
+ * 执行单个条件查询
249
+ * @param condition 查询条件
250
+ * @returns 查询结果
251
+ */
252
+ private query;
253
+ /**
254
+ * 使用索引优化查询
255
+ * @param condition 查询条件
256
+ * @returns 查询结果或null(如果无法优化)
257
+ */
258
+ private queryWithIndexOptimization;
259
+ /**
260
+ * 更新性能统计
261
+ * @param executionTime 执行时间
262
+ * @param fromIndex 是否来自索引
263
+ */
264
+ private updatePerformanceStats;
265
+ /**
266
+ * 根据条件过滤实体
267
+ * @param entities 实体数组
268
+ * @param condition 查询条件
269
+ * @returns 过滤后的实体数组
270
+ */
271
+ private filterEntitiesByCondition;
272
+ /**
273
+ * 检查实体是否匹配条件
274
+ * @param entity 实体
275
+ * @param condition 查询条件
276
+ * @returns 是否匹配
277
+ */
278
+ private matchesCondition;
279
+ /**
280
+ * 创建组件类型的位掩码
281
+ * @param componentTypes 组件类型数组
282
+ * @returns 位掩码
283
+ */
284
+ private createMask;
285
+ /**
286
+ * 生成缓存键
287
+ * @param condition 查询条件
288
+ * @returns 缓存键
289
+ */
290
+ private generateCacheKey;
291
+ /**
292
+ * 生成复合查询的缓存键
293
+ * @param conditions 查询条件数组
294
+ * @returns 缓存键
295
+ */
296
+ private generateComplexCacheKey;
297
+ /**
298
+ * 获取缓存结果
299
+ * @param cacheKey 缓存键
300
+ * @returns 缓存项或null
301
+ */
302
+ private getCachedResult;
303
+ /**
304
+ * 缓存查询结果
305
+ * @param cacheKey 缓存键
306
+ * @param entities 实体数组
307
+ */
308
+ private cacheResult;
309
+ /**
310
+ * 清空查询缓存
311
+ */
312
+ clearCache(): void;
313
+ /**
314
+ * 删除最少使用的缓存项
315
+ */
316
+ private evictLeastUsedCache;
317
+ /**
318
+ * 获取详细的查询统计信息
319
+ */
320
+ getStats(): {
321
+ entityCount: number;
322
+ cacheSize: number;
323
+ cacheHits: number;
324
+ cacheMisses: number;
325
+ hitRate: number;
326
+ maxCacheSize: number;
327
+ indexStats: {
328
+ maskIndexSize: number;
329
+ componentIndexSize: number;
330
+ tagIndexSize: number;
331
+ nameIndexSize: number;
332
+ };
333
+ performanceStats: QueryPerformanceStats;
334
+ };
335
+ /**
336
+ * 获取性能报告
337
+ */
338
+ getPerformanceReport(): string;
339
+ /**
340
+ * 优化索引配置
341
+ */
342
+ optimizeIndexes(): void;
343
+ /**
344
+ * 批量查询多个条件
345
+ * @param queries 查询条件数组
346
+ * @returns 查询结果数组
347
+ */
348
+ batchQuery(queries: QueryCondition[]): QueryResult[];
349
+ /**
350
+ * 设置缓存配置
351
+ * @param maxSize 最大缓存大小
352
+ * @param timeout 缓存超时时间(毫秒)
353
+ */
354
+ setCacheConfig(maxSize: number, timeout: number): void;
355
+ /**
356
+ * 重置统计信息
357
+ */
358
+ resetStats(): void;
359
+ /**
360
+ * 预热查询缓存
361
+ * @param commonQueries 常用查询条件数组
362
+ */
363
+ warmUpCache(commonQueries: QueryCondition[]): void;
364
+ /**
365
+ * 获取实体变更监听器
366
+ * @param condition 查询条件
367
+ * @param callback 变更回调
368
+ * @returns 取消监听的函数
369
+ */
370
+ watchQuery(condition: QueryCondition, callback: (entities: Entity[], changeType: 'added' | 'removed' | 'updated') => void): () => void;
371
+ /**
372
+ * 获取查询结果的快照
373
+ * @param condition 查询条件
374
+ * @returns 查询快照
375
+ */
376
+ createSnapshot(condition: QueryCondition): {
377
+ entities: Entity[];
378
+ timestamp: number;
379
+ condition: QueryCondition;
380
+ };
381
+ /**
382
+ * 比较两个查询快照
383
+ * @param snapshot1 第一个快照
384
+ * @param snapshot2 第二个快照
385
+ * @returns 比较结果
386
+ */
387
+ compareSnapshots(snapshot1: ReturnType<QuerySystem['createSnapshot']>, snapshot2: ReturnType<QuerySystem['createSnapshot']>): {
388
+ added: Entity[];
389
+ removed: Entity[];
390
+ unchanged: Entity[];
391
+ };
392
+ /**
393
+ * 执行并行查询
394
+ * @param conditions 查询条件数组
395
+ * @returns Promise<查询结果数组>
396
+ */
397
+ parallelQuery(conditions: QueryCondition[]): Promise<QueryResult[]>;
398
+ /**
399
+ * 获取查询建议
400
+ * @param entities 实体数组
401
+ * @returns 查询优化建议
402
+ */
403
+ getQuerySuggestions(entities: Entity[]): string[];
404
+ /**
405
+ * 导出查询统计数据
406
+ * @returns 统计数据的JSON字符串
407
+ */
408
+ exportStats(): string;
409
+ /**
410
+ * 导入查询统计数据
411
+ * @param statsJson 统计数据的JSON字符串
412
+ */
413
+ importStats(statsJson: string): void;
414
+ }
415
+ /**
416
+ * 流式查询构建器
417
+ * 提供链式调用的查询API
418
+ */
419
+ export declare class QueryBuilder {
420
+ private conditions;
421
+ private querySystem;
422
+ constructor(querySystem: QuerySystem);
423
+ /**
424
+ * 添加"包含所有"条件
425
+ * @param componentTypes 组件类型
426
+ * @returns 查询构建器
427
+ */
428
+ withAll(...componentTypes: ComponentType[]): QueryBuilder;
429
+ /**
430
+ * 添加"包含任意"条件
431
+ * @param componentTypes 组件类型
432
+ * @returns 查询构建器
433
+ */
434
+ withAny(...componentTypes: ComponentType[]): QueryBuilder;
435
+ /**
436
+ * 添加"不包含"条件
437
+ * @param componentTypes 组件类型
438
+ * @returns 查询构建器
439
+ */
440
+ without(...componentTypes: ComponentType[]): QueryBuilder;
441
+ /**
442
+ * 执行查询
443
+ * @returns 查询结果
444
+ */
445
+ execute(): QueryResult;
446
+ /**
447
+ * 获取第一个匹配的实体
448
+ * @returns 实体或null
449
+ */
450
+ first(): Entity | null;
451
+ /**
452
+ * 检查是否有匹配的实体
453
+ * @returns 是否有匹配
454
+ */
455
+ any(): boolean;
456
+ /**
457
+ * 获取匹配实体的数量
458
+ * @returns 实体数量
459
+ */
460
+ count(): number;
461
+ /**
462
+ * 对每个匹配的实体执行操作
463
+ * @param callback 回调函数
464
+ */
465
+ forEach(callback: (entity: Entity, index: number) => void): void;
466
+ /**
467
+ * 转换为数组
468
+ * @returns 实体数组
469
+ */
470
+ toArray(): Entity[];
471
+ /**
472
+ * 创建组件类型的位掩码
473
+ * @param componentTypes 组件类型数组
474
+ * @returns 位掩码
475
+ */
476
+ private createMask;
477
+ /**
478
+ * 重置查询条件
479
+ * @returns 查询构建器
480
+ */
481
+ reset(): QueryBuilder;
482
+ private tagFilter?;
483
+ private nameFilter?;
484
+ private limitCount?;
485
+ private offsetCount?;
486
+ private sortFunction?;
487
+ /**
488
+ * 添加标签过滤条件
489
+ * @param tag 标签
490
+ * @returns 查询构建器实例
491
+ */
492
+ withTag(tag: number): QueryBuilder;
493
+ /**
494
+ * 添加名称过滤条件
495
+ * @param name 名称
496
+ * @returns 查询构建器实例
497
+ */
498
+ withName(name: string): QueryBuilder;
499
+ /**
500
+ * 限制结果数量
501
+ * @param limit 最大结果数量
502
+ * @returns 查询构建器实例
503
+ */
504
+ limit(limit: number): QueryBuilder;
505
+ /**
506
+ * 跳过指定数量的结果
507
+ * @param offset 跳过的数量
508
+ * @returns 查询构建器实例
509
+ */
510
+ offset(offset: number): QueryBuilder;
511
+ /**
512
+ * 对结果进行排序
513
+ * @param compareFn 比较函数
514
+ * @returns 查询构建器实例
515
+ */
516
+ orderBy(compareFn: (a: Entity, b: Entity) => number): QueryBuilder;
517
+ /**
518
+ * 按更新顺序排序
519
+ * @returns 查询构建器实例
520
+ */
521
+ orderByUpdateOrder(): QueryBuilder;
522
+ /**
523
+ * 按ID排序
524
+ * @returns 查询构建器实例
525
+ */
526
+ orderById(): QueryBuilder;
527
+ /**
528
+ * 按名称排序
529
+ * @returns 查询构建器实例
530
+ */
531
+ orderByName(): QueryBuilder;
532
+ /**
533
+ * 克隆查询构建器
534
+ * @returns 新的查询构建器
535
+ */
536
+ clone(): QueryBuilder;
537
+ /**
538
+ * 添加自定义过滤器
539
+ * @param predicate 过滤谓词
540
+ * @returns 查询构建器实例
541
+ */
542
+ filter(predicate: (entity: Entity) => boolean): QueryBuilder;
543
+ /**
544
+ * 映射查询结果
545
+ * @param mapper 映射函数
546
+ * @returns 映射后的结果数组
547
+ */
548
+ map<T>(mapper: (entity: Entity) => T): T[];
549
+ /**
550
+ * 查找第一个满足条件的实体
551
+ * @param predicate 查找谓词
552
+ * @returns 实体或null
553
+ */
554
+ find(predicate?: (entity: Entity) => boolean): Entity | null;
555
+ /**
556
+ * 检查是否所有实体都满足条件
557
+ * @param predicate 检查谓词
558
+ * @returns 是否所有实体都满足条件
559
+ */
560
+ every(predicate: (entity: Entity) => boolean): boolean;
561
+ /**
562
+ * 检查是否有实体满足条件
563
+ * @param predicate 检查谓词
564
+ * @returns 是否有实体满足条件
565
+ */
566
+ some(predicate: (entity: Entity) => boolean): boolean;
567
+ /**
568
+ * 获取查询的调试信息
569
+ * @returns 调试信息字符串
570
+ */
571
+ getDebugInfo(): string;
572
+ }
573
+ export {};
574
+ //# sourceMappingURL=QuerySystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuerySystem.d.ts","sourceRoot":"","sources":["../../../src/ECS/Core/QuerySystem.ts"],"names":[],"mappings":"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"}