@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,120 @@
1
+ import type { IComponent } from '../Types';
2
+ /**
3
+ * 游戏组件基类
4
+ *
5
+ * ECS架构中的组件(Component),用于实现具体的游戏功能。
6
+ * 组件包含数据和行为,可以被添加到实体上以扩展实体的功能。
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * class HealthComponent extends Component {
11
+ * public health: number = 100;
12
+ *
13
+ * public takeDamage(damage: number): void {
14
+ * this.health -= damage;
15
+ * if (this.health <= 0) {
16
+ * this.entity.destroy();
17
+ * }
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ export declare abstract class Component implements IComponent {
23
+ /**
24
+ * 组件ID生成器
25
+ *
26
+ * 用于为每个组件分配唯一的ID。
27
+ */
28
+ static _idGenerator: number;
29
+ /**
30
+ * 组件唯一标识符
31
+ *
32
+ * 在整个游戏生命周期中唯一的数字ID。
33
+ */
34
+ readonly id: number;
35
+ /**
36
+ * 组件所属的实体
37
+ *
38
+ * 指向拥有此组件的实体实例。
39
+ */
40
+ entity: Entity;
41
+ /**
42
+ * 组件启用状态
43
+ *
44
+ * 控制组件是否参与更新循环。
45
+ */
46
+ private _enabled;
47
+ /**
48
+ * 更新顺序
49
+ *
50
+ * 决定组件在更新循环中的执行顺序。
51
+ */
52
+ private _updateOrder;
53
+ /**
54
+ * 创建组件实例
55
+ *
56
+ * 自动分配唯一ID给组件。
57
+ */
58
+ constructor();
59
+ /**
60
+ * 获取组件启用状态
61
+ *
62
+ * 组件的实际启用状态取决于自身状态和所属实体的状态。
63
+ *
64
+ * @returns 如果组件和所属实体都启用则返回true
65
+ */
66
+ get enabled(): boolean;
67
+ /**
68
+ * 设置组件启用状态
69
+ *
70
+ * 当状态改变时会触发相应的生命周期回调。
71
+ *
72
+ * @param value - 新的启用状态
73
+ */
74
+ set enabled(value: boolean);
75
+ /**
76
+ * 获取更新顺序
77
+ *
78
+ * @returns 组件的更新顺序值
79
+ */
80
+ get updateOrder(): number;
81
+ /**
82
+ * 设置更新顺序
83
+ *
84
+ * @param value - 新的更新顺序值
85
+ */
86
+ set updateOrder(value: number);
87
+ /**
88
+ * 组件添加到实体时的回调
89
+ *
90
+ * 当组件被添加到实体时调用,可以在此方法中进行初始化操作。
91
+ */
92
+ onAddedToEntity(): void;
93
+ /**
94
+ * 组件从实体移除时的回调
95
+ *
96
+ * 当组件从实体中移除时调用,可以在此方法中进行清理操作。
97
+ */
98
+ onRemovedFromEntity(): void;
99
+ /**
100
+ * 组件启用时的回调
101
+ *
102
+ * 当组件被启用时调用。
103
+ */
104
+ onEnabled(): void;
105
+ /**
106
+ * 组件禁用时的回调
107
+ *
108
+ * 当组件被禁用时调用。
109
+ */
110
+ onDisabled(): void;
111
+ /**
112
+ * 更新组件
113
+ *
114
+ * 每帧调用,用于更新组件的逻辑。
115
+ * 子类应该重写此方法来实现具体的更新逻辑。
116
+ */
117
+ update(): void;
118
+ }
119
+ import type { Entity } from './Entity';
120
+ //# sourceMappingURL=Component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../src/ECS/Component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,8BAAsB,SAAU,YAAW,UAAU;IACjD;;;;OAIG;IACH,OAAc,YAAY,EAAE,MAAM,CAAK;IAEvC;;;;OAIG;IACH,SAAgB,EAAE,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACI,MAAM,EAAG,MAAM,CAAC;IAEvB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAiB;IAEjC;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAa;IAEjC;;;;OAIG;;IAKH;;;;;;OAMG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;;;;;OAMG;IACH,IAAW,OAAO,CAAC,KAAK,EAAE,OAAO,EAShC;IAED;;;;OAIG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,IAAW,WAAW,CAAC,KAAK,EAAE,MAAM,EAEnC;IAED;;;;OAIG;IACI,eAAe,IAAI,IAAI;IAG9B;;;;OAIG;IACI,mBAAmB,IAAI,IAAI;IAGlC;;;;OAIG;IACI,SAAS,IAAI,IAAI;IAGxB;;;;OAIG;IACI,UAAU,IAAI,IAAI;IAGzB;;;;;OAKG;IACI,MAAM,IAAI,IAAI;CAGxB;AAGD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * 游戏组件基类
3
+ *
4
+ * ECS架构中的组件(Component),用于实现具体的游戏功能。
5
+ * 组件包含数据和行为,可以被添加到实体上以扩展实体的功能。
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * class HealthComponent extends Component {
10
+ * public health: number = 100;
11
+ *
12
+ * public takeDamage(damage: number): void {
13
+ * this.health -= damage;
14
+ * if (this.health <= 0) {
15
+ * this.entity.destroy();
16
+ * }
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ export class Component {
22
+ /**
23
+ * 创建组件实例
24
+ *
25
+ * 自动分配唯一ID给组件。
26
+ */
27
+ constructor() {
28
+ /**
29
+ * 组件启用状态
30
+ *
31
+ * 控制组件是否参与更新循环。
32
+ */
33
+ this._enabled = true;
34
+ /**
35
+ * 更新顺序
36
+ *
37
+ * 决定组件在更新循环中的执行顺序。
38
+ */
39
+ this._updateOrder = 0;
40
+ this.id = Component._idGenerator++;
41
+ }
42
+ /**
43
+ * 获取组件启用状态
44
+ *
45
+ * 组件的实际启用状态取决于自身状态和所属实体的状态。
46
+ *
47
+ * @returns 如果组件和所属实体都启用则返回true
48
+ */
49
+ get enabled() {
50
+ return this.entity ? this.entity.enabled && this._enabled : this._enabled;
51
+ }
52
+ /**
53
+ * 设置组件启用状态
54
+ *
55
+ * 当状态改变时会触发相应的生命周期回调。
56
+ *
57
+ * @param value - 新的启用状态
58
+ */
59
+ set enabled(value) {
60
+ if (this._enabled !== value) {
61
+ this._enabled = value;
62
+ if (this._enabled) {
63
+ this.onEnabled();
64
+ }
65
+ else {
66
+ this.onDisabled();
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * 获取更新顺序
72
+ *
73
+ * @returns 组件的更新顺序值
74
+ */
75
+ get updateOrder() {
76
+ return this._updateOrder;
77
+ }
78
+ /**
79
+ * 设置更新顺序
80
+ *
81
+ * @param value - 新的更新顺序值
82
+ */
83
+ set updateOrder(value) {
84
+ this._updateOrder = value;
85
+ }
86
+ /**
87
+ * 组件添加到实体时的回调
88
+ *
89
+ * 当组件被添加到实体时调用,可以在此方法中进行初始化操作。
90
+ */
91
+ onAddedToEntity() {
92
+ }
93
+ /**
94
+ * 组件从实体移除时的回调
95
+ *
96
+ * 当组件从实体中移除时调用,可以在此方法中进行清理操作。
97
+ */
98
+ onRemovedFromEntity() {
99
+ }
100
+ /**
101
+ * 组件启用时的回调
102
+ *
103
+ * 当组件被启用时调用。
104
+ */
105
+ onEnabled() {
106
+ }
107
+ /**
108
+ * 组件禁用时的回调
109
+ *
110
+ * 当组件被禁用时调用。
111
+ */
112
+ onDisabled() {
113
+ }
114
+ /**
115
+ * 更新组件
116
+ *
117
+ * 每帧调用,用于更新组件的逻辑。
118
+ * 子类应该重写此方法来实现具体的更新逻辑。
119
+ */
120
+ update() {
121
+ }
122
+ }
123
+ /**
124
+ * 组件ID生成器
125
+ *
126
+ * 用于为每个组件分配唯一的ID。
127
+ */
128
+ Component._idGenerator = 0;
129
+ //# sourceMappingURL=Component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Component.js","sourceRoot":"","sources":["../../src/ECS/Component.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAgB,SAAS;IAoC3B;;;;OAIG;IACH;QAnBA;;;;WAIG;QACK,aAAQ,GAAY,IAAI,CAAC;QAEjC;;;;WAIG;QACK,iBAAY,GAAW,CAAC,CAAC;QAQ7B,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9E,CAAC;IAED;;;;;;OAMG;IACH,IAAW,OAAO,CAAC,KAAc;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,eAAe;IACtB,CAAC;IAED;;;;OAIG;IACI,mBAAmB;IAC1B,CAAC;IAED;;;;OAIG;IACI,SAAS;IAChB,CAAC;IAED;;;;OAIG;IACI,UAAU;IACjB,CAAC;IAED;;;;;OAKG;IACI,MAAM;IACb,CAAC;;AAlID;;;;GAIG;AACW,sBAAY,GAAW,CAAC,AAAZ,CAAa"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 可更新接口
3
+ * 当添加到组件时,只要组件和实体被启用,就会在每帧调用update方法
4
+ */
5
+ export interface IUpdatable {
6
+ enabled: boolean;
7
+ updateOrder: number;
8
+ update(): void;
9
+ }
10
+ /**
11
+ * 用于比较组件更新排序的比较器
12
+ */
13
+ export declare class IUpdatableComparer {
14
+ compare(a: IUpdatable, b: IUpdatable): number;
15
+ }
16
+ /**
17
+ * 检查对象是否实现了IUpdatable接口
18
+ * @param props 要检查的对象
19
+ * @returns 如果实现了IUpdatable接口返回true,否则返回false
20
+ */
21
+ export declare function isIUpdatable(props: any): props is IUpdatable;
22
+ //# sourceMappingURL=IUpdatable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IUpdatable.d.ts","sourceRoot":"","sources":["../../../src/ECS/Components/IUpdatable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,IAAI,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IACpB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM;CAGvD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,UAAU,CAE5D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 用于比较组件更新排序的比较器
3
+ */
4
+ export class IUpdatableComparer {
5
+ compare(a, b) {
6
+ return a.updateOrder - b.updateOrder;
7
+ }
8
+ }
9
+ /**
10
+ * 检查对象是否实现了IUpdatable接口
11
+ * @param props 要检查的对象
12
+ * @returns 如果实现了IUpdatable接口返回true,否则返回false
13
+ */
14
+ export function isIUpdatable(props) {
15
+ return typeof props['update'] !== 'undefined';
16
+ }
17
+ //# sourceMappingURL=IUpdatable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IUpdatable.js","sourceRoot":"","sources":["../../../src/ECS/Components/IUpdatable.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACpB,OAAO,CAAC,CAAa,EAAE,CAAa;QACvC,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;IACzC,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAU;IACnC,OAAO,OAAQ,KAAoB,CAAC,QAAQ,CAAC,KAAK,WAAW,CAAC;AAClE,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { Scene } from '../Scene';
2
+ /**
3
+ * 场景组件基类
4
+ * 附加到场景的组件,用于实现场景级别的功能
5
+ */
6
+ export declare class SceneComponent {
7
+ /** 组件所属的场景 */
8
+ scene: Scene;
9
+ /** 更新顺序 */
10
+ updateOrder: number;
11
+ /** 是否启用 */
12
+ private _enabled;
13
+ /** 获取是否启用 */
14
+ get enabled(): boolean;
15
+ /** 设置是否启用 */
16
+ set enabled(value: boolean);
17
+ /**
18
+ * 当组件启用时调用
19
+ */
20
+ onEnabled(): void;
21
+ /**
22
+ * 当组件禁用时调用
23
+ */
24
+ onDisabled(): void;
25
+ /**
26
+ * 当组件从场景中移除时调用
27
+ */
28
+ onRemovedFromScene(): void;
29
+ /**
30
+ * 每帧更新
31
+ */
32
+ update(): void;
33
+ /**
34
+ * 比较组件的更新顺序
35
+ * @param other 其他组件
36
+ * @returns 比较结果
37
+ */
38
+ compare(other: SceneComponent): number;
39
+ }
40
+ //# sourceMappingURL=SceneComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneComponent.d.ts","sourceRoot":"","sources":["../../../src/ECS/Components/SceneComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC;;;GAGG;AACH,qBAAa,cAAc;IACvB,cAAc;IACP,KAAK,EAAG,KAAK,CAAC;IACrB,WAAW;IACJ,WAAW,EAAE,MAAM,CAAK;IAC/B,WAAW;IACX,OAAO,CAAC,QAAQ,CAAiB;IAEjC,aAAa;IACb,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,aAAa;IACb,IAAW,OAAO,CAAC,KAAK,EAAE,OAAO,EAShC;IAED;;OAEG;IACI,SAAS,IAAI,IAAI;IAGxB;;OAEG;IACI,UAAU,IAAI,IAAI;IAGzB;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAGjC;;OAEG;IACI,MAAM,IAAI,IAAI;IAGrB;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;CAGhD"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * 场景组件基类
3
+ * 附加到场景的组件,用于实现场景级别的功能
4
+ */
5
+ export class SceneComponent {
6
+ constructor() {
7
+ /** 更新顺序 */
8
+ this.updateOrder = 0;
9
+ /** 是否启用 */
10
+ this._enabled = true;
11
+ }
12
+ /** 获取是否启用 */
13
+ get enabled() {
14
+ return this._enabled;
15
+ }
16
+ /** 设置是否启用 */
17
+ set enabled(value) {
18
+ if (this._enabled !== value) {
19
+ this._enabled = value;
20
+ if (this._enabled) {
21
+ this.onEnabled();
22
+ }
23
+ else {
24
+ this.onDisabled();
25
+ }
26
+ }
27
+ }
28
+ /**
29
+ * 当组件启用时调用
30
+ */
31
+ onEnabled() {
32
+ }
33
+ /**
34
+ * 当组件禁用时调用
35
+ */
36
+ onDisabled() {
37
+ }
38
+ /**
39
+ * 当组件从场景中移除时调用
40
+ */
41
+ onRemovedFromScene() {
42
+ }
43
+ /**
44
+ * 每帧更新
45
+ */
46
+ update() {
47
+ }
48
+ /**
49
+ * 比较组件的更新顺序
50
+ * @param other 其他组件
51
+ * @returns 比较结果
52
+ */
53
+ compare(other) {
54
+ return this.updateOrder - other.updateOrder;
55
+ }
56
+ }
57
+ //# sourceMappingURL=SceneComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneComponent.js","sourceRoot":"","sources":["../../../src/ECS/Components/SceneComponent.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,cAAc;IAA3B;QAGI,WAAW;QACJ,gBAAW,GAAW,CAAC,CAAC;QAC/B,WAAW;QACH,aAAQ,GAAY,IAAI,CAAC;IAmDrC,CAAC;IAjDG,aAAa;IACb,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,aAAa;IACb,IAAW,OAAO,CAAC,KAAc;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACI,SAAS;IAChB,CAAC;IAED;;OAEG;IACI,UAAU;IACjB,CAAC;IAED;;OAEG;IACI,kBAAkB;IACzB,CAAC;IAED;;OAEG;IACI,MAAM;IACb,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,KAAqB;QAChC,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAChD,CAAC;CACJ"}
@@ -0,0 +1,100 @@
1
+ import { Entity } from '../Entity';
2
+ import { ComponentType } from './ComponentStorage';
3
+ /**
4
+ * 原型标识符
5
+ */
6
+ export type ArchetypeId = string;
7
+ /**
8
+ * 原型数据结构
9
+ */
10
+ export interface Archetype {
11
+ /** 原型唯一标识符 */
12
+ id: ArchetypeId;
13
+ /** 包含的组件类型 */
14
+ componentTypes: ComponentType[];
15
+ /** 属于该原型的实体列表 */
16
+ entities: Entity[];
17
+ /** 原型创建时间 */
18
+ createdAt: number;
19
+ /** 最后更新时间 */
20
+ updatedAt: number;
21
+ }
22
+ /**
23
+ * 原型查询结果
24
+ */
25
+ export interface ArchetypeQueryResult {
26
+ /** 匹配的原型列表 */
27
+ archetypes: Archetype[];
28
+ /** 所有匹配实体的总数 */
29
+ totalEntities: number;
30
+ /** 查询执行时间(毫秒) */
31
+ executionTime: number;
32
+ /** 是否使用了缓存 */
33
+ fromCache: boolean;
34
+ }
35
+ /**
36
+ * Archetype系统
37
+ *
38
+ * 根据实体的组件组合将实体分组到不同的原型中,提供高效的查询性能。
39
+ */
40
+ export declare class ArchetypeSystem {
41
+ /** 所有原型的映射表 */
42
+ private _archetypes;
43
+ /** 实体到原型的映射 */
44
+ private _entityToArchetype;
45
+ /** 组件类型到原型的映射 */
46
+ private _componentToArchetypes;
47
+ /** 查询缓存 */
48
+ private _queryCache;
49
+ private _cacheTimeout;
50
+ private _maxCacheSize;
51
+ /**
52
+ * 添加实体到原型系统
53
+ */
54
+ addEntity(entity: Entity): void;
55
+ /**
56
+ * 从原型系统中移除实体
57
+ */
58
+ removeEntity(entity: Entity): void;
59
+ /**
60
+ * 查询包含指定组件组合的原型
61
+ */
62
+ queryArchetypes(componentTypes: ComponentType[], operation?: 'AND' | 'OR'): ArchetypeQueryResult;
63
+ /**
64
+ * 获取实体所属的原型
65
+ */
66
+ getEntityArchetype(entity: Entity): Archetype | undefined;
67
+ /**
68
+ * 获取所有原型
69
+ */
70
+ getAllArchetypes(): Archetype[];
71
+ /**
72
+ * 清空所有数据
73
+ */
74
+ clear(): void;
75
+ /**
76
+ * 获取实体的组件类型列表
77
+ */
78
+ private getEntityComponentTypes;
79
+ /**
80
+ * 生成原型ID
81
+ */
82
+ private generateArchetypeId;
83
+ /**
84
+ * 创建新原型
85
+ */
86
+ private createArchetype;
87
+ /**
88
+ * 检查原型是否包含所有指定组件
89
+ */
90
+ private archetypeContainsAllComponents;
91
+ /**
92
+ * 更新组件索引
93
+ */
94
+ private updateComponentIndexes;
95
+ /**
96
+ * 使查询缓存失效
97
+ */
98
+ private invalidateQueryCache;
99
+ }
100
+ //# sourceMappingURL=ArchetypeSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArchetypeSystem.d.ts","sourceRoot":"","sources":["../../../src/ECS/Core/ArchetypeSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,cAAc;IACd,EAAE,EAAE,WAAW,CAAC;IAChB,cAAc;IACd,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,iBAAiB;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,cAAc;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,gBAAgB;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,SAAS,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IACxB,eAAe;IACf,OAAO,CAAC,WAAW,CAAqC;IAExD,eAAe;IACf,OAAO,CAAC,kBAAkB,CAAgC;IAE1D,iBAAiB;IACjB,OAAO,CAAC,sBAAsB,CAA4C;IAE1E,WAAW;IACX,OAAO,CAAC,WAAW,CAGd;IAEL,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,aAAa,CAAO;IAE5B;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBtC;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAczC;;OAEG;IACI,eAAe,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,SAAS,GAAE,KAAK,GAAG,IAAY,GAAG,oBAAoB;IA2D9G;;OAEG;IACI,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIhE;;OAEG;IACI,gBAAgB,IAAI,SAAS,EAAE;IAItC;;OAEG;IACI,KAAK,IAAI,IAAI;IAOpB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAI/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAStC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAG/B"}