@esengine/ecs-framework 2.1.29 → 2.1.30

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 (290) hide show
  1. package/bin/Core.d.ts +279 -0
  2. package/bin/Core.d.ts.map +1 -0
  3. package/bin/Core.js +400 -0
  4. package/bin/Core.js.map +1 -0
  5. package/bin/ECS/Component.d.ts +120 -0
  6. package/bin/ECS/Component.d.ts.map +1 -0
  7. package/bin/ECS/Component.js +129 -0
  8. package/bin/ECS/Component.js.map +1 -0
  9. package/bin/ECS/Components/IUpdatable.d.ts +22 -0
  10. package/bin/ECS/Components/IUpdatable.d.ts.map +1 -0
  11. package/bin/ECS/Components/IUpdatable.js +17 -0
  12. package/bin/ECS/Components/IUpdatable.js.map +1 -0
  13. package/bin/ECS/Components/SceneComponent.d.ts +40 -0
  14. package/bin/ECS/Components/SceneComponent.d.ts.map +1 -0
  15. package/bin/ECS/Components/SceneComponent.js +57 -0
  16. package/bin/ECS/Components/SceneComponent.js.map +1 -0
  17. package/bin/ECS/Core/ArchetypeSystem.d.ts +100 -0
  18. package/bin/ECS/Core/ArchetypeSystem.d.ts.map +1 -0
  19. package/bin/ECS/Core/ArchetypeSystem.js +193 -0
  20. package/bin/ECS/Core/ArchetypeSystem.js.map +1 -0
  21. package/bin/ECS/Core/ComponentIndex.d.ts +151 -0
  22. package/bin/ECS/Core/ComponentIndex.d.ts.map +1 -0
  23. package/bin/ECS/Core/ComponentIndex.js +405 -0
  24. package/bin/ECS/Core/ComponentIndex.js.map +1 -0
  25. package/bin/ECS/Core/ComponentPool.d.ts +88 -0
  26. package/bin/ECS/Core/ComponentPool.d.ts.map +1 -0
  27. package/bin/ECS/Core/ComponentPool.js +159 -0
  28. package/bin/ECS/Core/ComponentPool.js.map +1 -0
  29. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts +92 -0
  30. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts.map +1 -0
  31. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js +167 -0
  32. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js.map +1 -0
  33. package/bin/ECS/Core/ComponentStorage.d.ts +233 -0
  34. package/bin/ECS/Core/ComponentStorage.d.ts.map +1 -0
  35. package/bin/ECS/Core/ComponentStorage.js +463 -0
  36. package/bin/ECS/Core/ComponentStorage.js.map +1 -0
  37. package/bin/ECS/Core/DirtyTrackingSystem.d.ts +197 -0
  38. package/bin/ECS/Core/DirtyTrackingSystem.d.ts.map +1 -0
  39. package/bin/ECS/Core/DirtyTrackingSystem.js +297 -0
  40. package/bin/ECS/Core/DirtyTrackingSystem.js.map +1 -0
  41. package/bin/ECS/Core/EntityManager.d.ts +379 -0
  42. package/bin/ECS/Core/EntityManager.d.ts.map +1 -0
  43. package/bin/ECS/Core/EntityManager.js +686 -0
  44. package/bin/ECS/Core/EntityManager.js.map +1 -0
  45. package/bin/ECS/Core/EventBus.d.ts +218 -0
  46. package/bin/ECS/Core/EventBus.d.ts.map +1 -0
  47. package/bin/ECS/Core/EventBus.js +402 -0
  48. package/bin/ECS/Core/EventBus.js.map +1 -0
  49. package/bin/ECS/Core/EventSystem.d.ts +237 -0
  50. package/bin/ECS/Core/EventSystem.d.ts.map +1 -0
  51. package/bin/ECS/Core/EventSystem.js +478 -0
  52. package/bin/ECS/Core/EventSystem.js.map +1 -0
  53. package/bin/ECS/Core/Events/index.d.ts +3 -0
  54. package/bin/ECS/Core/Events/index.d.ts.map +1 -0
  55. package/bin/ECS/Core/Events/index.js +3 -0
  56. package/bin/ECS/Core/Events/index.js.map +1 -0
  57. package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts +35 -0
  58. package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts.map +1 -0
  59. package/bin/ECS/Core/FluentAPI/ComponentBuilder.js +48 -0
  60. package/bin/ECS/Core/FluentAPI/ComponentBuilder.js.map +1 -0
  61. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts +135 -0
  62. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts.map +1 -0
  63. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js +166 -0
  64. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js.map +1 -0
  65. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts +58 -0
  66. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts.map +1 -0
  67. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js +85 -0
  68. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js.map +1 -0
  69. package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts +110 -0
  70. package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts.map +1 -0
  71. package/bin/ECS/Core/FluentAPI/EntityBuilder.js +174 -0
  72. package/bin/ECS/Core/FluentAPI/EntityBuilder.js.map +1 -0
  73. package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts +53 -0
  74. package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts.map +1 -0
  75. package/bin/ECS/Core/FluentAPI/SceneBuilder.js +79 -0
  76. package/bin/ECS/Core/FluentAPI/SceneBuilder.js.map +1 -0
  77. package/bin/ECS/Core/FluentAPI/index.d.ts +6 -0
  78. package/bin/ECS/Core/FluentAPI/index.d.ts.map +1 -0
  79. package/bin/ECS/Core/FluentAPI/index.js +6 -0
  80. package/bin/ECS/Core/FluentAPI/index.js.map +1 -0
  81. package/bin/ECS/Core/FluentAPI.d.ts +2 -0
  82. package/bin/ECS/Core/FluentAPI.d.ts.map +1 -0
  83. package/bin/ECS/Core/FluentAPI.js +3 -0
  84. package/bin/ECS/Core/FluentAPI.js.map +1 -0
  85. package/bin/ECS/Core/Performance/index.d.ts +4 -0
  86. package/bin/ECS/Core/Performance/index.d.ts.map +1 -0
  87. package/bin/ECS/Core/Performance/index.js +4 -0
  88. package/bin/ECS/Core/Performance/index.js.map +1 -0
  89. package/bin/ECS/Core/Query/index.d.ts +4 -0
  90. package/bin/ECS/Core/Query/index.d.ts.map +1 -0
  91. package/bin/ECS/Core/Query/index.js +4 -0
  92. package/bin/ECS/Core/Query/index.js.map +1 -0
  93. package/bin/ECS/Core/QuerySystem.d.ts +438 -0
  94. package/bin/ECS/Core/QuerySystem.d.ts.map +1 -0
  95. package/bin/ECS/Core/QuerySystem.js +974 -0
  96. package/bin/ECS/Core/QuerySystem.js.map +1 -0
  97. package/bin/ECS/Core/SoAStorage.d.ts +97 -0
  98. package/bin/ECS/Core/SoAStorage.d.ts.map +1 -0
  99. package/bin/ECS/Core/SoAStorage.js +548 -0
  100. package/bin/ECS/Core/SoAStorage.js.map +1 -0
  101. package/bin/ECS/Core/Storage/index.d.ts +4 -0
  102. package/bin/ECS/Core/Storage/index.d.ts.map +1 -0
  103. package/bin/ECS/Core/Storage/index.js +4 -0
  104. package/bin/ECS/Core/Storage/index.js.map +1 -0
  105. package/bin/ECS/CoreEvents.d.ts +131 -0
  106. package/bin/ECS/CoreEvents.d.ts.map +1 -0
  107. package/bin/ECS/CoreEvents.js +163 -0
  108. package/bin/ECS/CoreEvents.js.map +1 -0
  109. package/bin/ECS/Entity.d.ts +455 -0
  110. package/bin/ECS/Entity.d.ts.map +1 -0
  111. package/bin/ECS/Entity.js +837 -0
  112. package/bin/ECS/Entity.js.map +1 -0
  113. package/bin/ECS/Scene.d.ts +225 -0
  114. package/bin/ECS/Scene.d.ts.map +1 -0
  115. package/bin/ECS/Scene.js +325 -0
  116. package/bin/ECS/Scene.js.map +1 -0
  117. package/bin/ECS/Systems/EntitySystem.d.ts +200 -0
  118. package/bin/ECS/Systems/EntitySystem.d.ts.map +1 -0
  119. package/bin/ECS/Systems/EntitySystem.js +431 -0
  120. package/bin/ECS/Systems/EntitySystem.js.map +1 -0
  121. package/bin/ECS/Systems/IntervalSystem.d.ts +33 -0
  122. package/bin/ECS/Systems/IntervalSystem.d.ts.map +1 -0
  123. package/bin/ECS/Systems/IntervalSystem.js +50 -0
  124. package/bin/ECS/Systems/IntervalSystem.js.map +1 -0
  125. package/bin/ECS/Systems/PassiveSystem.d.ts +17 -0
  126. package/bin/ECS/Systems/PassiveSystem.d.ts.map +1 -0
  127. package/bin/ECS/Systems/PassiveSystem.js +19 -0
  128. package/bin/ECS/Systems/PassiveSystem.js.map +1 -0
  129. package/bin/ECS/Systems/ProcessingSystem.d.ts +21 -0
  130. package/bin/ECS/Systems/ProcessingSystem.d.ts.map +1 -0
  131. package/bin/ECS/Systems/ProcessingSystem.js +20 -0
  132. package/bin/ECS/Systems/ProcessingSystem.js.map +1 -0
  133. package/bin/ECS/Systems/index.d.ts +5 -0
  134. package/bin/ECS/Systems/index.d.ts.map +1 -0
  135. package/bin/ECS/Systems/index.js +6 -0
  136. package/bin/ECS/Systems/index.js.map +1 -0
  137. package/bin/ECS/Utils/BigIntCompatibility.d.ts +164 -0
  138. package/bin/ECS/Utils/BigIntCompatibility.d.ts.map +1 -0
  139. package/bin/ECS/Utils/BigIntCompatibility.js +578 -0
  140. package/bin/ECS/Utils/BigIntCompatibility.js.map +1 -0
  141. package/bin/ECS/Utils/Bits.d.ts +163 -0
  142. package/bin/ECS/Utils/Bits.d.ts.map +1 -0
  143. package/bin/ECS/Utils/Bits.js +286 -0
  144. package/bin/ECS/Utils/Bits.js.map +1 -0
  145. package/bin/ECS/Utils/ComponentTypeManager.d.ts +50 -0
  146. package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +1 -0
  147. package/bin/ECS/Utils/ComponentTypeManager.js +84 -0
  148. package/bin/ECS/Utils/ComponentTypeManager.js.map +1 -0
  149. package/bin/ECS/Utils/EntityList.d.ts +108 -0
  150. package/bin/ECS/Utils/EntityList.d.ts.map +1 -0
  151. package/bin/ECS/Utils/EntityList.js +262 -0
  152. package/bin/ECS/Utils/EntityList.js.map +1 -0
  153. package/bin/ECS/Utils/EntityProcessorList.d.ts +56 -0
  154. package/bin/ECS/Utils/EntityProcessorList.d.ts.map +1 -0
  155. package/bin/ECS/Utils/EntityProcessorList.js +102 -0
  156. package/bin/ECS/Utils/EntityProcessorList.js.map +1 -0
  157. package/bin/ECS/Utils/IdentifierPool.d.ts +203 -0
  158. package/bin/ECS/Utils/IdentifierPool.d.ts.map +1 -0
  159. package/bin/ECS/Utils/IdentifierPool.js +325 -0
  160. package/bin/ECS/Utils/IdentifierPool.js.map +1 -0
  161. package/bin/ECS/Utils/Matcher.d.ts +143 -0
  162. package/bin/ECS/Utils/Matcher.d.ts.map +1 -0
  163. package/bin/ECS/Utils/Matcher.js +249 -0
  164. package/bin/ECS/Utils/Matcher.js.map +1 -0
  165. package/bin/ECS/Utils/index.d.ts +8 -0
  166. package/bin/ECS/Utils/index.d.ts.map +1 -0
  167. package/bin/ECS/Utils/index.js +9 -0
  168. package/bin/ECS/Utils/index.js.map +1 -0
  169. package/bin/ECS/index.d.ts +12 -0
  170. package/bin/ECS/index.d.ts.map +1 -0
  171. package/bin/ECS/index.js +12 -0
  172. package/bin/ECS/index.js.map +1 -0
  173. package/bin/Types/index.d.ts +471 -0
  174. package/bin/Types/index.d.ts.map +1 -0
  175. package/bin/Types/index.js +5 -0
  176. package/bin/Types/index.js.map +1 -0
  177. package/bin/Utils/Debug/ComponentDataCollector.d.ts +28 -0
  178. package/bin/Utils/Debug/ComponentDataCollector.d.ts.map +1 -0
  179. package/bin/Utils/Debug/ComponentDataCollector.js +248 -0
  180. package/bin/Utils/Debug/ComponentDataCollector.js.map +1 -0
  181. package/bin/Utils/Debug/DebugDataFormatter.d.ts +22 -0
  182. package/bin/Utils/Debug/DebugDataFormatter.d.ts.map +1 -0
  183. package/bin/Utils/Debug/DebugDataFormatter.js +117 -0
  184. package/bin/Utils/Debug/DebugDataFormatter.js.map +1 -0
  185. package/bin/Utils/Debug/DebugManager.d.ts +104 -0
  186. package/bin/Utils/Debug/DebugManager.d.ts.map +1 -0
  187. package/bin/Utils/Debug/DebugManager.js +647 -0
  188. package/bin/Utils/Debug/DebugManager.js.map +1 -0
  189. package/bin/Utils/Debug/EntityDataCollector.d.ts +92 -0
  190. package/bin/Utils/Debug/EntityDataCollector.d.ts.map +1 -0
  191. package/bin/Utils/Debug/EntityDataCollector.js +864 -0
  192. package/bin/Utils/Debug/EntityDataCollector.js.map +1 -0
  193. package/bin/Utils/Debug/PerformanceDataCollector.d.ts +32 -0
  194. package/bin/Utils/Debug/PerformanceDataCollector.d.ts.map +1 -0
  195. package/bin/Utils/Debug/PerformanceDataCollector.js +217 -0
  196. package/bin/Utils/Debug/PerformanceDataCollector.js.map +1 -0
  197. package/bin/Utils/Debug/SceneDataCollector.d.ts +16 -0
  198. package/bin/Utils/Debug/SceneDataCollector.d.ts.map +1 -0
  199. package/bin/Utils/Debug/SceneDataCollector.js +46 -0
  200. package/bin/Utils/Debug/SceneDataCollector.js.map +1 -0
  201. package/bin/Utils/Debug/SystemDataCollector.d.ts +11 -0
  202. package/bin/Utils/Debug/SystemDataCollector.d.ts.map +1 -0
  203. package/bin/Utils/Debug/SystemDataCollector.js +59 -0
  204. package/bin/Utils/Debug/SystemDataCollector.js.map +1 -0
  205. package/bin/Utils/Debug/WebSocketManager.d.ts +59 -0
  206. package/bin/Utils/Debug/WebSocketManager.d.ts.map +1 -0
  207. package/bin/Utils/Debug/WebSocketManager.js +148 -0
  208. package/bin/Utils/Debug/WebSocketManager.js.map +1 -0
  209. package/bin/Utils/Debug/index.d.ts +8 -0
  210. package/bin/Utils/Debug/index.d.ts.map +1 -0
  211. package/bin/Utils/Debug/index.js +8 -0
  212. package/bin/Utils/Debug/index.js.map +1 -0
  213. package/bin/Utils/Emitter.d.ts +43 -0
  214. package/bin/Utils/Emitter.d.ts.map +1 -0
  215. package/bin/Utils/Emitter.js +69 -0
  216. package/bin/Utils/Emitter.js.map +1 -0
  217. package/bin/Utils/Extensions/NumberExtension.d.ts +13 -0
  218. package/bin/Utils/Extensions/NumberExtension.d.ts.map +1 -0
  219. package/bin/Utils/Extensions/NumberExtension.js +17 -0
  220. package/bin/Utils/Extensions/NumberExtension.js.map +1 -0
  221. package/bin/Utils/Extensions/TypeUtils.d.ts +13 -0
  222. package/bin/Utils/Extensions/TypeUtils.d.ts.map +1 -0
  223. package/bin/Utils/Extensions/TypeUtils.js +15 -0
  224. package/bin/Utils/Extensions/TypeUtils.js.map +1 -0
  225. package/bin/Utils/Extensions/index.d.ts +3 -0
  226. package/bin/Utils/Extensions/index.d.ts.map +1 -0
  227. package/bin/Utils/Extensions/index.js +4 -0
  228. package/bin/Utils/Extensions/index.js.map +1 -0
  229. package/bin/Utils/GlobalManager.d.ts +32 -0
  230. package/bin/Utils/GlobalManager.d.ts.map +1 -0
  231. package/bin/Utils/GlobalManager.js +53 -0
  232. package/bin/Utils/GlobalManager.js.map +1 -0
  233. package/bin/Utils/Logger.d.ts +156 -0
  234. package/bin/Utils/Logger.d.ts.map +1 -0
  235. package/bin/Utils/Logger.js +256 -0
  236. package/bin/Utils/Logger.js.map +1 -0
  237. package/bin/Utils/PerformanceMonitor.d.ts +211 -0
  238. package/bin/Utils/PerformanceMonitor.d.ts.map +1 -0
  239. package/bin/Utils/PerformanceMonitor.js +270 -0
  240. package/bin/Utils/PerformanceMonitor.js.map +1 -0
  241. package/bin/Utils/Pool/IPoolable.d.ts +29 -0
  242. package/bin/Utils/Pool/IPoolable.d.ts.map +1 -0
  243. package/bin/Utils/Pool/IPoolable.js +2 -0
  244. package/bin/Utils/Pool/IPoolable.js.map +1 -0
  245. package/bin/Utils/Pool/Pool.d.ts +109 -0
  246. package/bin/Utils/Pool/Pool.d.ts.map +1 -0
  247. package/bin/Utils/Pool/Pool.js +238 -0
  248. package/bin/Utils/Pool/Pool.js.map +1 -0
  249. package/bin/Utils/Pool/PoolManager.d.ts +91 -0
  250. package/bin/Utils/Pool/PoolManager.d.ts.map +1 -0
  251. package/bin/Utils/Pool/PoolManager.js +197 -0
  252. package/bin/Utils/Pool/PoolManager.js.map +1 -0
  253. package/bin/Utils/Pool/index.d.ts +4 -0
  254. package/bin/Utils/Pool/index.d.ts.map +1 -0
  255. package/bin/Utils/Pool/index.js +4 -0
  256. package/bin/Utils/Pool/index.js.map +1 -0
  257. package/bin/Utils/Time.d.ts +47 -0
  258. package/bin/Utils/Time.d.ts.map +1 -0
  259. package/bin/Utils/Time.js +64 -0
  260. package/bin/Utils/Time.js.map +1 -0
  261. package/bin/Utils/Timers/ITimer.d.ts +16 -0
  262. package/bin/Utils/Timers/ITimer.d.ts.map +1 -0
  263. package/bin/Utils/Timers/ITimer.js +2 -0
  264. package/bin/Utils/Timers/ITimer.js.map +1 -0
  265. package/bin/Utils/Timers/Timer.d.ts +30 -0
  266. package/bin/Utils/Timers/Timer.d.ts.map +1 -0
  267. package/bin/Utils/Timers/Timer.js +58 -0
  268. package/bin/Utils/Timers/Timer.js.map +1 -0
  269. package/bin/Utils/Timers/TimerManager.d.ts +19 -0
  270. package/bin/Utils/Timers/TimerManager.d.ts.map +1 -0
  271. package/bin/Utils/Timers/TimerManager.js +33 -0
  272. package/bin/Utils/Timers/TimerManager.js.map +1 -0
  273. package/bin/Utils/index.d.ts +9 -0
  274. package/bin/Utils/index.d.ts.map +1 -0
  275. package/bin/Utils/index.js +9 -0
  276. package/bin/Utils/index.js.map +1 -0
  277. package/bin/index.d.ts +16 -0
  278. package/bin/index.d.ts.map +1 -0
  279. package/bin/index.js +19 -0
  280. package/bin/index.js.map +1 -0
  281. package/package.json +52 -25
  282. package/.npmignore +0 -40
  283. package/LICENSE +0 -201
  284. package/README.md +0 -465
  285. package/SECURITY.md +0 -53
  286. package/index.cjs +0 -2
  287. package/index.cjs.map +0 -1
  288. package/index.d.ts +0 -6562
  289. package/index.mjs +0 -2
  290. package/index.mjs.map +0 -1
@@ -0,0 +1,200 @@
1
+ import { Entity } from '../Entity';
2
+ import { Matcher } from '../Utils/Matcher';
3
+ import type { Scene } from '../Scene';
4
+ import type { ISystemBase } from '../../Types';
5
+ /**
6
+ * 实体系统的基类
7
+ *
8
+ * 用于处理一组符合特定条件的实体。系统是ECS架构中的逻辑处理单元,
9
+ * 负责对拥有特定组件组合的实体执行业务逻辑。
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * class MovementSystem extends EntitySystem {
14
+ * constructor() {
15
+ * super(Transform, Velocity);
16
+ * }
17
+ *
18
+ * protected process(entities: Entity[]): void {
19
+ * for (const entity of entities) {
20
+ * const transform = entity.getComponent(Transform);
21
+ * const velocity = entity.getComponent(Velocity);
22
+ * transform.position.add(velocity.value);
23
+ * }
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export declare abstract class EntitySystem implements ISystemBase {
29
+ private _updateOrder;
30
+ private _enabled;
31
+ private _performanceMonitor;
32
+ private _systemName;
33
+ private _initialized;
34
+ private _matcher;
35
+ private _trackedEntities;
36
+ private _lastQueryResult;
37
+ /**
38
+ * 获取系统处理的实体列表(动态查询)
39
+ */
40
+ get entities(): readonly Entity[];
41
+ /**
42
+ * 获取系统的更新时序
43
+ */
44
+ get updateOrder(): number;
45
+ set updateOrder(value: number);
46
+ /**
47
+ * 获取系统的启用状态
48
+ */
49
+ get enabled(): boolean;
50
+ /**
51
+ * 设置系统的启用状态
52
+ */
53
+ set enabled(value: boolean);
54
+ /**
55
+ * 获取系统名称
56
+ */
57
+ get systemName(): string;
58
+ constructor(matcher?: Matcher);
59
+ private _scene;
60
+ /**
61
+ * 这个系统所属的场景
62
+ */
63
+ get scene(): Scene | null;
64
+ set scene(value: Scene | null);
65
+ /**
66
+ * 获取实体匹配器
67
+ */
68
+ get matcher(): Matcher;
69
+ /**
70
+ * 设置更新时序
71
+ * @param order 更新时序
72
+ */
73
+ setUpdateOrder(order: number): void;
74
+ /**
75
+ * 系统初始化(框架调用)
76
+ *
77
+ * 在系统创建时调用。框架内部使用,用户不应直接调用。
78
+ */
79
+ initialize(): void;
80
+ /**
81
+ * 系统初始化回调
82
+ *
83
+ * 子类可以重写此方法进行初始化操作。
84
+ */
85
+ protected onInitialize(): void;
86
+ /**
87
+ * 重置系统状态
88
+ *
89
+ * 当系统从场景中移除时调用,重置初始化状态以便重新添加时能正确初始化。
90
+ */
91
+ reset(): void;
92
+ /**
93
+ * 查询匹配的实体
94
+ */
95
+ private queryEntities;
96
+ /**
97
+ * 检查是否为单一条件查询
98
+ */
99
+ private isSingleCondition;
100
+ /**
101
+ * 执行单一条件查询
102
+ */
103
+ private executeSingleConditionQuery;
104
+ /**
105
+ * 执行复合查询
106
+ */
107
+ private executeComplexQuery;
108
+ /**
109
+ * 更新系统
110
+ *
111
+ * 在每帧调用,处理系统的主要逻辑。
112
+ */
113
+ update(): void;
114
+ /**
115
+ * 后期更新系统
116
+ *
117
+ * 在所有系统的update方法执行完毕后调用。
118
+ */
119
+ lateUpdate(): void;
120
+ /**
121
+ * 在系统处理开始前调用
122
+ *
123
+ * 子类可以重写此方法进行预处理操作。
124
+ */
125
+ protected onBegin(): void;
126
+ /**
127
+ * 处理实体列表
128
+ *
129
+ * 系统的核心逻辑,子类必须实现此方法来定义具体的处理逻辑。
130
+ *
131
+ * @param entities 要处理的实体列表
132
+ */
133
+ protected process(entities: Entity[]): void;
134
+ /**
135
+ * 后期处理实体列表
136
+ *
137
+ * 在主要处理逻辑之后执行,子类可以重写此方法。
138
+ *
139
+ * @param entities 要处理的实体列表
140
+ */
141
+ protected lateProcess(entities: Entity[]): void;
142
+ /**
143
+ * 系统处理完毕后调用
144
+ *
145
+ * 子类可以重写此方法进行后处理操作。
146
+ */
147
+ protected onEnd(): void;
148
+ /**
149
+ * 检查系统是否需要处理
150
+ *
151
+ * 在启用系统时有用,但仅偶尔需要处理。
152
+ * 这只影响处理,不影响事件或订阅列表。
153
+ *
154
+ * @returns 如果系统应该处理,则为true,如果不处理则为false
155
+ */
156
+ protected onCheckProcessing(): boolean;
157
+ /**
158
+ * 获取系统的性能数据
159
+ *
160
+ * @returns 性能数据或undefined
161
+ */
162
+ getPerformanceData(): import("../../Utils/PerformanceMonitor").PerformanceData | undefined;
163
+ /**
164
+ * 获取系统的性能统计
165
+ *
166
+ * @returns 性能统计或undefined
167
+ */
168
+ getPerformanceStats(): import("../../Utils/PerformanceMonitor").PerformanceStats | undefined;
169
+ /**
170
+ * 重置系统的性能数据
171
+ */
172
+ resetPerformanceData(): void;
173
+ /**
174
+ * 获取系统信息的字符串表示
175
+ *
176
+ * @returns 系统信息字符串
177
+ */
178
+ toString(): string;
179
+ /**
180
+ * 更新实体跟踪,检查新增和移除的实体
181
+ */
182
+ private updateEntityTracking;
183
+ /**
184
+ * 当实体被添加到系统时调用
185
+ *
186
+ * 子类可以重写此方法来处理实体添加事件。
187
+ *
188
+ * @param entity 被添加的实体
189
+ */
190
+ protected onAdded(_entity: Entity): void;
191
+ /**
192
+ * 当实体从系统中移除时调用
193
+ *
194
+ * 子类可以重写此方法来处理实体移除事件。
195
+ *
196
+ * @param entity 被移除的实体
197
+ */
198
+ protected onRemoved(_entity: Entity): void;
199
+ }
200
+ //# sourceMappingURL=EntitySystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntitySystem.d.ts","sourceRoot":"","sources":["../../../src/ECS/Systems/EntitySystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,8BAAsB,YAAa,YAAW,WAAW;IACrD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAgB;IAExC;;OAEG;IACH,IAAW,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEvC;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,EAEnC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAW,OAAO,CAAC,KAAK,EAAE,OAAO,EAEhC;IAED;;OAEG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;gBAEW,OAAO,CAAC,EAAE,OAAO;IAK7B,OAAO,CAAC,MAAM,CAAsB;IAEpC;;OAEG;IACH,IAAW,KAAK,IAAI,KAAK,GAAG,IAAI,CAE/B;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAEnC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;;OAGG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO1C;;;;OAIG;IACI,UAAU,IAAI,IAAI;IAYzB;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAQ9B;;;;OAIG;IACI,KAAK,IAAI,IAAI;IAMpB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4BrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgCnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0E3B;;;;OAIG;IACI,MAAM,IAAI,IAAI;IAmBrB;;;;OAIG;IACI,UAAU,IAAI,IAAI;IAmBzB;;;;OAIG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;IAIzB;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAI3C;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;;;OAIG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IAIvB;;;;;;;OAOG;IACH,SAAS,CAAC,iBAAiB,IAAI,OAAO;IAItC;;;;OAIG;IACI,kBAAkB;IAIzB;;;;OAIG;IACI,mBAAmB;IAI1B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAKnC;;;;OAIG;IACI,QAAQ,IAAI,MAAM;IAQzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG7C"}
@@ -0,0 +1,431 @@
1
+ import { PerformanceMonitor } from '../../Utils/PerformanceMonitor';
2
+ import { Matcher } from '../Utils/Matcher';
3
+ /**
4
+ * 实体系统的基类
5
+ *
6
+ * 用于处理一组符合特定条件的实体。系统是ECS架构中的逻辑处理单元,
7
+ * 负责对拥有特定组件组合的实体执行业务逻辑。
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * class MovementSystem extends EntitySystem {
12
+ * constructor() {
13
+ * super(Transform, Velocity);
14
+ * }
15
+ *
16
+ * protected process(entities: Entity[]): void {
17
+ * for (const entity of entities) {
18
+ * const transform = entity.getComponent(Transform);
19
+ * const velocity = entity.getComponent(Velocity);
20
+ * transform.position.add(velocity.value);
21
+ * }
22
+ * }
23
+ * }
24
+ * ```
25
+ */
26
+ export class EntitySystem {
27
+ /**
28
+ * 获取系统处理的实体列表(动态查询)
29
+ */
30
+ get entities() {
31
+ return this.queryEntities();
32
+ }
33
+ /**
34
+ * 获取系统的更新时序
35
+ */
36
+ get updateOrder() {
37
+ return this._updateOrder;
38
+ }
39
+ set updateOrder(value) {
40
+ this.setUpdateOrder(value);
41
+ }
42
+ /**
43
+ * 获取系统的启用状态
44
+ */
45
+ get enabled() {
46
+ return this._enabled;
47
+ }
48
+ /**
49
+ * 设置系统的启用状态
50
+ */
51
+ set enabled(value) {
52
+ this._enabled = value;
53
+ }
54
+ /**
55
+ * 获取系统名称
56
+ */
57
+ get systemName() {
58
+ return this._systemName;
59
+ }
60
+ constructor(matcher) {
61
+ this._updateOrder = 0;
62
+ this._enabled = true;
63
+ this._performanceMonitor = PerformanceMonitor.instance;
64
+ this._initialized = false;
65
+ this._trackedEntities = new Set();
66
+ this._lastQueryResult = [];
67
+ this._scene = null;
68
+ this._matcher = matcher ? matcher : Matcher.empty();
69
+ this._systemName = this.constructor.name;
70
+ }
71
+ /**
72
+ * 这个系统所属的场景
73
+ */
74
+ get scene() {
75
+ return this._scene;
76
+ }
77
+ set scene(value) {
78
+ this._scene = value;
79
+ }
80
+ /**
81
+ * 获取实体匹配器
82
+ */
83
+ get matcher() {
84
+ return this._matcher;
85
+ }
86
+ /**
87
+ * 设置更新时序
88
+ * @param order 更新时序
89
+ */
90
+ setUpdateOrder(order) {
91
+ this._updateOrder = order;
92
+ if (this.scene && this.scene.entityProcessors) {
93
+ this.scene.entityProcessors.setDirty();
94
+ }
95
+ }
96
+ /**
97
+ * 系统初始化(框架调用)
98
+ *
99
+ * 在系统创建时调用。框架内部使用,用户不应直接调用。
100
+ */
101
+ initialize() {
102
+ // 防止重复初始化
103
+ if (this._initialized) {
104
+ return;
105
+ }
106
+ this._initialized = true;
107
+ // 调用用户可重写的初始化方法
108
+ this.onInitialize();
109
+ }
110
+ /**
111
+ * 系统初始化回调
112
+ *
113
+ * 子类可以重写此方法进行初始化操作。
114
+ */
115
+ onInitialize() {
116
+ // 初始化时触发一次实体查询,以便正确跟踪现有实体
117
+ if (this.scene) {
118
+ this.queryEntities();
119
+ }
120
+ // 子类可以重写此方法进行初始化
121
+ }
122
+ /**
123
+ * 重置系统状态
124
+ *
125
+ * 当系统从场景中移除时调用,重置初始化状态以便重新添加时能正确初始化。
126
+ */
127
+ reset() {
128
+ this._initialized = false;
129
+ this._trackedEntities.clear();
130
+ this._lastQueryResult = [];
131
+ }
132
+ /**
133
+ * 查询匹配的实体
134
+ */
135
+ queryEntities() {
136
+ if (!this.scene?.querySystem || !this._matcher) {
137
+ this._lastQueryResult = [];
138
+ return [];
139
+ }
140
+ const condition = this._matcher.getCondition();
141
+ const querySystem = this.scene.querySystem;
142
+ let currentEntities = [];
143
+ // 空条件返回所有实体
144
+ if (this._matcher.isEmpty()) {
145
+ currentEntities = querySystem.getAllEntities();
146
+ }
147
+ else if (this.isSingleCondition(condition)) {
148
+ // 单一条件优化查询
149
+ currentEntities = this.executeSingleConditionQuery(condition, querySystem);
150
+ }
151
+ else {
152
+ // 复合查询
153
+ currentEntities = this.executeComplexQuery(condition, querySystem);
154
+ }
155
+ // 检查实体变化并触发回调
156
+ this.updateEntityTracking(currentEntities);
157
+ this._lastQueryResult = currentEntities;
158
+ return currentEntities;
159
+ }
160
+ /**
161
+ * 检查是否为单一条件查询
162
+ */
163
+ isSingleCondition(condition) {
164
+ const conditionCount = (condition.all.length > 0 ? 1 : 0) +
165
+ (condition.any.length > 0 ? 1 : 0) +
166
+ (condition.none.length > 0 ? 1 : 0) +
167
+ (condition.tag !== undefined ? 1 : 0) +
168
+ (condition.name !== undefined ? 1 : 0) +
169
+ (condition.component !== undefined ? 1 : 0);
170
+ return conditionCount === 1;
171
+ }
172
+ /**
173
+ * 执行单一条件查询
174
+ */
175
+ executeSingleConditionQuery(condition, querySystem) {
176
+ // 按标签查询
177
+ if (condition.tag !== undefined) {
178
+ return querySystem.queryByTag(condition.tag).entities;
179
+ }
180
+ // 按名称查询
181
+ if (condition.name !== undefined) {
182
+ return querySystem.queryByName(condition.name).entities;
183
+ }
184
+ // 单组件查询
185
+ if (condition.component !== undefined) {
186
+ return querySystem.queryByComponent(condition.component).entities;
187
+ }
188
+ // 基础组件查询
189
+ if (condition.all.length > 0 && condition.any.length === 0 && condition.none.length === 0) {
190
+ return querySystem.queryAll(...condition.all).entities;
191
+ }
192
+ if (condition.all.length === 0 && condition.any.length > 0 && condition.none.length === 0) {
193
+ return querySystem.queryAny(...condition.any).entities;
194
+ }
195
+ if (condition.all.length === 0 && condition.any.length === 0 && condition.none.length > 0) {
196
+ return querySystem.queryNone(...condition.none).entities;
197
+ }
198
+ return [];
199
+ }
200
+ /**
201
+ * 执行复合查询
202
+ */
203
+ executeComplexQuery(condition, querySystem) {
204
+ let result = null;
205
+ // 1. 应用标签条件作为基础集合
206
+ if (condition.tag !== undefined) {
207
+ const tagResult = querySystem.queryByTag(condition.tag);
208
+ result = new Set(tagResult.entities);
209
+ }
210
+ // 2. 应用名称条件
211
+ if (condition.name !== undefined) {
212
+ const nameResult = querySystem.queryByName(condition.name);
213
+ const nameSet = new Set(nameResult.entities);
214
+ if (result) {
215
+ result = new Set([...result].filter(e => nameSet.has(e)));
216
+ }
217
+ else {
218
+ result = nameSet;
219
+ }
220
+ }
221
+ // 3. 应用单组件条件
222
+ if (condition.component !== undefined) {
223
+ const componentResult = querySystem.queryByComponent(condition.component);
224
+ const componentSet = new Set(componentResult.entities);
225
+ if (result) {
226
+ result = new Set([...result].filter(e => componentSet.has(e)));
227
+ }
228
+ else {
229
+ result = componentSet;
230
+ }
231
+ }
232
+ // 4. 应用all条件
233
+ if (condition.all.length > 0) {
234
+ const allResult = querySystem.queryAll(...condition.all);
235
+ const allSet = new Set(allResult.entities);
236
+ if (result) {
237
+ result = new Set([...result].filter(e => allSet.has(e)));
238
+ }
239
+ else {
240
+ result = allSet;
241
+ }
242
+ }
243
+ // 5. 应用any条件(求交集)
244
+ if (condition.any.length > 0) {
245
+ const anyResult = querySystem.queryAny(...condition.any);
246
+ const anySet = new Set(anyResult.entities);
247
+ if (result) {
248
+ result = new Set([...result].filter(e => anySet.has(e)));
249
+ }
250
+ else {
251
+ result = anySet;
252
+ }
253
+ }
254
+ // 6. 应用none条件(排除)
255
+ if (condition.none.length > 0) {
256
+ if (!result) {
257
+ // 如果没有前置条件,从所有实体开始
258
+ result = new Set(querySystem.getAllEntities());
259
+ }
260
+ const noneResult = querySystem.queryAny(...condition.none);
261
+ const noneSet = new Set(noneResult.entities);
262
+ result = new Set([...result].filter(e => !noneSet.has(e)));
263
+ }
264
+ return result ? Array.from(result) : [];
265
+ }
266
+ /**
267
+ * 更新系统
268
+ *
269
+ * 在每帧调用,处理系统的主要逻辑。
270
+ */
271
+ update() {
272
+ if (!this._enabled || !this.onCheckProcessing()) {
273
+ return;
274
+ }
275
+ const startTime = this._performanceMonitor.startMonitoring(this._systemName);
276
+ let entityCount = 0;
277
+ try {
278
+ this.onBegin();
279
+ // 动态查询实体并处理
280
+ const entities = this.queryEntities();
281
+ entityCount = entities.length;
282
+ this.process(entities);
283
+ }
284
+ finally {
285
+ this._performanceMonitor.endMonitoring(this._systemName, startTime, entityCount);
286
+ }
287
+ }
288
+ /**
289
+ * 后期更新系统
290
+ *
291
+ * 在所有系统的update方法执行完毕后调用。
292
+ */
293
+ lateUpdate() {
294
+ if (!this._enabled || !this.onCheckProcessing()) {
295
+ return;
296
+ }
297
+ const startTime = this._performanceMonitor.startMonitoring(`${this._systemName}_Late`);
298
+ let entityCount = 0;
299
+ try {
300
+ // 动态查询实体并处理
301
+ const entities = this.queryEntities();
302
+ entityCount = entities.length;
303
+ this.lateProcess(entities);
304
+ this.onEnd();
305
+ }
306
+ finally {
307
+ this._performanceMonitor.endMonitoring(`${this._systemName}_Late`, startTime, entityCount);
308
+ }
309
+ }
310
+ /**
311
+ * 在系统处理开始前调用
312
+ *
313
+ * 子类可以重写此方法进行预处理操作。
314
+ */
315
+ onBegin() {
316
+ // 子类可以重写此方法
317
+ }
318
+ /**
319
+ * 处理实体列表
320
+ *
321
+ * 系统的核心逻辑,子类必须实现此方法来定义具体的处理逻辑。
322
+ *
323
+ * @param entities 要处理的实体列表
324
+ */
325
+ process(entities) {
326
+ // 子类必须实现此方法
327
+ }
328
+ /**
329
+ * 后期处理实体列表
330
+ *
331
+ * 在主要处理逻辑之后执行,子类可以重写此方法。
332
+ *
333
+ * @param entities 要处理的实体列表
334
+ */
335
+ lateProcess(entities) {
336
+ // 子类可以重写此方法
337
+ }
338
+ /**
339
+ * 系统处理完毕后调用
340
+ *
341
+ * 子类可以重写此方法进行后处理操作。
342
+ */
343
+ onEnd() {
344
+ // 子类可以重写此方法
345
+ }
346
+ /**
347
+ * 检查系统是否需要处理
348
+ *
349
+ * 在启用系统时有用,但仅偶尔需要处理。
350
+ * 这只影响处理,不影响事件或订阅列表。
351
+ *
352
+ * @returns 如果系统应该处理,则为true,如果不处理则为false
353
+ */
354
+ onCheckProcessing() {
355
+ return true;
356
+ }
357
+ /**
358
+ * 获取系统的性能数据
359
+ *
360
+ * @returns 性能数据或undefined
361
+ */
362
+ getPerformanceData() {
363
+ return this._performanceMonitor.getSystemData(this._systemName);
364
+ }
365
+ /**
366
+ * 获取系统的性能统计
367
+ *
368
+ * @returns 性能统计或undefined
369
+ */
370
+ getPerformanceStats() {
371
+ return this._performanceMonitor.getSystemStats(this._systemName);
372
+ }
373
+ /**
374
+ * 重置系统的性能数据
375
+ */
376
+ resetPerformanceData() {
377
+ this._performanceMonitor.resetSystem(this._systemName);
378
+ }
379
+ /**
380
+ * 获取系统信息的字符串表示
381
+ *
382
+ * @returns 系统信息字符串
383
+ */
384
+ toString() {
385
+ const entityCount = this.entities.length;
386
+ const perfData = this.getPerformanceData();
387
+ const perfInfo = perfData ? ` (${perfData.executionTime.toFixed(2)}ms)` : '';
388
+ return `${this._systemName}[${entityCount} entities]${perfInfo}`;
389
+ }
390
+ /**
391
+ * 更新实体跟踪,检查新增和移除的实体
392
+ */
393
+ updateEntityTracking(currentEntities) {
394
+ const currentSet = new Set(currentEntities);
395
+ // 检查新增的实体
396
+ for (const entity of currentEntities) {
397
+ if (!this._trackedEntities.has(entity)) {
398
+ this._trackedEntities.add(entity);
399
+ this.onAdded(entity);
400
+ }
401
+ }
402
+ // 检查移除的实体
403
+ for (const entity of this._trackedEntities) {
404
+ if (!currentSet.has(entity)) {
405
+ this._trackedEntities.delete(entity);
406
+ this.onRemoved(entity);
407
+ }
408
+ }
409
+ }
410
+ /**
411
+ * 当实体被添加到系统时调用
412
+ *
413
+ * 子类可以重写此方法来处理实体添加事件。
414
+ *
415
+ * @param entity 被添加的实体
416
+ */
417
+ onAdded(_entity) {
418
+ // 子类可以重写此方法
419
+ }
420
+ /**
421
+ * 当实体从系统中移除时调用
422
+ *
423
+ * 子类可以重写此方法来处理实体移除事件。
424
+ *
425
+ * @param entity 被移除的实体
426
+ */
427
+ onRemoved(_entity) {
428
+ // 子类可以重写此方法
429
+ }
430
+ }
431
+ //# sourceMappingURL=EntitySystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntitySystem.js","sourceRoot":"","sources":["../../../src/ECS/Systems/EntitySystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { EntitySystem } from './EntitySystem';
2
+ import { Matcher } from '../Utils/Matcher';
3
+ /**
4
+ * 间隔系统抽象类
5
+ * 定义一个按时间间隔处理的抽象类,继承自EntitySystem类
6
+ * 子类需要实现process方法,用于实现具体的处理逻辑
7
+ */
8
+ export declare abstract class IntervalSystem extends EntitySystem {
9
+ /** 累积增量以跟踪间隔 */
10
+ private acc;
11
+ /** 更新之间需要等待多长时间 */
12
+ private readonly interval;
13
+ /** 时间间隔的余数,用于计算下一次需要等待的时间 */
14
+ private intervalRemainder;
15
+ /**
16
+ * 构造函数,初始化时间间隔
17
+ * @param interval 时间间隔
18
+ * @param matcher 实体匹配器
19
+ */
20
+ constructor(interval: number, matcher?: Matcher);
21
+ /**
22
+ * 判断是否需要进行处理
23
+ * 如果需要进行处理,则更新累积增量和时间间隔余数,返回true
24
+ * 否则返回false
25
+ */
26
+ protected onCheckProcessing(): boolean;
27
+ /**
28
+ * 获取本系统上次处理后的实际delta值
29
+ * 实际delta值等于时间间隔加上时间间隔余数
30
+ */
31
+ protected getIntervalDelta(): number;
32
+ }
33
+ //# sourceMappingURL=IntervalSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntervalSystem.d.ts","sourceRoot":"","sources":["../../../src/ECS/Systems/IntervalSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAG3C;;;;GAIG;AACH,8BAAsB,cAAe,SAAQ,YAAY;IACrD,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAa;IACxB,mBAAmB;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,6BAA6B;IAC7B,OAAO,CAAC,iBAAiB,CAAa;IAEtC;;;;OAIG;gBACS,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;IAK/C;;;;OAIG;cACgB,iBAAiB,IAAI,OAAO;IAkB/C;;;OAGG;IACH,SAAS,CAAC,gBAAgB,IAAI,MAAM;CAGvC"}