@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,50 @@
1
+ import { Component } from '../Component';
2
+ import { Bits } from './Bits';
3
+ /**
4
+ * 组件类型管理器
5
+ * 负责管理组件类型的注册和ID分配
6
+ */
7
+ export declare class ComponentTypeManager {
8
+ private static _instance;
9
+ private _componentTypes;
10
+ private _typeNames;
11
+ private _nextTypeId;
12
+ /**
13
+ * 获取单例实例
14
+ */
15
+ static get instance(): ComponentTypeManager;
16
+ private constructor();
17
+ /**
18
+ * 获取组件类型的ID
19
+ * @param componentType 组件类型构造函数
20
+ * @returns 组件类型ID
21
+ */
22
+ getTypeId<T extends Component>(componentType: new (...args: any[]) => T): number;
23
+ /**
24
+ * 获取组件类型名称
25
+ * @param typeId 组件类型ID
26
+ * @returns 组件类型名称
27
+ */
28
+ getTypeName(typeId: number): string;
29
+ /**
30
+ * 创建包含指定组件类型的Bits对象
31
+ * @param componentTypes 组件类型构造函数数组
32
+ * @returns Bits对象
33
+ */
34
+ createBits(...componentTypes: (new (...args: any[]) => Component)[]): Bits;
35
+ /**
36
+ * 获取实体的组件位掩码
37
+ * @param components 组件数组
38
+ * @returns Bits对象
39
+ */
40
+ getEntityBits(components: Component[]): Bits;
41
+ /**
42
+ * 重置管理器(主要用于测试)
43
+ */
44
+ reset(): void;
45
+ /**
46
+ * 获取已注册的组件类型数量
47
+ */
48
+ get registeredTypeCount(): number;
49
+ }
50
+ //# sourceMappingURL=ComponentTypeManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentTypeManager.d.ts","sourceRoot":"","sources":["../../../src/ECS/Utils/ComponentTypeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;GAGG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAuB;IAC/C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,WAAW,CAAK;IAExB;;OAEG;IACH,WAAkB,QAAQ,IAAI,oBAAoB,CAKjD;IAED,OAAO;IAEP;;;;OAIG;IACI,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM;IAYvF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI1C;;;;OAIG;IACI,UAAU,CAAC,GAAG,cAAc,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,SAAS,CAAC,EAAE,GAAG,IAAI;IAWjF;;;;OAIG;IACI,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAWnD;;OAEG;IACI,KAAK,IAAI,IAAI;IAMpB;;OAEG;IACH,IAAW,mBAAmB,IAAI,MAAM,CAEvC;CACJ"}
@@ -0,0 +1,84 @@
1
+ import { Bits } from './Bits';
2
+ /**
3
+ * 组件类型管理器
4
+ * 负责管理组件类型的注册和ID分配
5
+ */
6
+ export class ComponentTypeManager {
7
+ /**
8
+ * 获取单例实例
9
+ */
10
+ static get instance() {
11
+ if (!ComponentTypeManager._instance) {
12
+ ComponentTypeManager._instance = new ComponentTypeManager();
13
+ }
14
+ return ComponentTypeManager._instance;
15
+ }
16
+ constructor() {
17
+ this._componentTypes = new Map();
18
+ this._typeNames = new Map();
19
+ this._nextTypeId = 0;
20
+ }
21
+ /**
22
+ * 获取组件类型的ID
23
+ * @param componentType 组件类型构造函数
24
+ * @returns 组件类型ID
25
+ */
26
+ getTypeId(componentType) {
27
+ let typeId = this._componentTypes.get(componentType);
28
+ if (typeId === undefined) {
29
+ typeId = this._nextTypeId++;
30
+ this._componentTypes.set(componentType, typeId);
31
+ this._typeNames.set(typeId, componentType.name);
32
+ }
33
+ return typeId;
34
+ }
35
+ /**
36
+ * 获取组件类型名称
37
+ * @param typeId 组件类型ID
38
+ * @returns 组件类型名称
39
+ */
40
+ getTypeName(typeId) {
41
+ return this._typeNames.get(typeId) || 'Unknown';
42
+ }
43
+ /**
44
+ * 创建包含指定组件类型的Bits对象
45
+ * @param componentTypes 组件类型构造函数数组
46
+ * @returns Bits对象
47
+ */
48
+ createBits(...componentTypes) {
49
+ const bits = new Bits();
50
+ for (const componentType of componentTypes) {
51
+ const typeId = this.getTypeId(componentType);
52
+ bits.set(typeId);
53
+ }
54
+ return bits;
55
+ }
56
+ /**
57
+ * 获取实体的组件位掩码
58
+ * @param components 组件数组
59
+ * @returns Bits对象
60
+ */
61
+ getEntityBits(components) {
62
+ const bits = new Bits();
63
+ for (const component of components) {
64
+ const typeId = this.getTypeId(component.constructor);
65
+ bits.set(typeId);
66
+ }
67
+ return bits;
68
+ }
69
+ /**
70
+ * 重置管理器(主要用于测试)
71
+ */
72
+ reset() {
73
+ this._componentTypes.clear();
74
+ this._typeNames.clear();
75
+ this._nextTypeId = 0;
76
+ }
77
+ /**
78
+ * 获取已注册的组件类型数量
79
+ */
80
+ get registeredTypeCount() {
81
+ return this._componentTypes.size;
82
+ }
83
+ }
84
+ //# sourceMappingURL=ComponentTypeManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentTypeManager.js","sourceRoot":"","sources":["../../../src/ECS/Utils/ComponentTypeManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAM7B;;OAEG;IACI,MAAM,KAAK,QAAQ;QACtB,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC;YAClC,oBAAoB,CAAC,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,oBAAoB,CAAC,SAAS,CAAC;IAC1C,CAAC;IAED;QAdQ,oBAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC9C,eAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QACvC,gBAAW,GAAG,CAAC,CAAC;IAYD,CAAC;IAExB;;;;OAIG;IACI,SAAS,CAAsB,aAAwC;QAC1E,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAErD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,GAAG,cAAqD;QACtE,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAExB,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,UAAuB;QACxC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAExB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAgD,CAAC,CAAC;YAC1F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK;QACR,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,CAAC;CACJ"}
@@ -0,0 +1,108 @@
1
+ import { Entity } from '../Entity';
2
+ import { Component } from '../Component';
3
+ /**
4
+ * 高性能实体列表管理器
5
+ * 管理场景中的所有实体,支持快速查找和批量操作
6
+ */
7
+ export declare class EntityList {
8
+ buffer: Entity[];
9
+ private _scene;
10
+ private _idToEntity;
11
+ private _nameToEntities;
12
+ private _entitiesToAdd;
13
+ private _entitiesToRemove;
14
+ private _isUpdating;
15
+ get count(): number;
16
+ constructor(scene: any);
17
+ /**
18
+ * 添加实体(立即添加或延迟添加)
19
+ * @param entity 要添加的实体
20
+ */
21
+ add(entity: Entity): void;
22
+ /**
23
+ * 立即添加实体
24
+ * @param entity 要添加的实体
25
+ */
26
+ private addImmediate;
27
+ /**
28
+ * 移除实体(立即移除或延迟移除)
29
+ * @param entity 要移除的实体
30
+ */
31
+ remove(entity: Entity): void;
32
+ /**
33
+ * 立即移除实体
34
+ * @param entity 要移除的实体
35
+ */
36
+ private removeImmediate;
37
+ /**
38
+ * 移除所有实体
39
+ */
40
+ removeAllEntities(): void;
41
+ /**
42
+ * 更新实体列表,处理延迟操作
43
+ */
44
+ updateLists(): void;
45
+ /**
46
+ * 更新所有实体
47
+ */
48
+ update(): void;
49
+ /**
50
+ * 根据名称查找实体(使用索引,O(1)复杂度)
51
+ * @param name 实体名称
52
+ * @returns 找到的第一个实体或null
53
+ */
54
+ findEntity(name: string): Entity | null;
55
+ /**
56
+ * 根据名称查找所有实体
57
+ * @param name 实体名称
58
+ * @returns 找到的所有实体数组
59
+ */
60
+ findEntitiesByName(name: string): Entity[];
61
+ /**
62
+ * 根据ID查找实体(使用索引,O(1)复杂度)
63
+ * @param id 实体ID
64
+ * @returns 找到的实体或null
65
+ */
66
+ findEntityById(id: number): Entity | null;
67
+ /**
68
+ * 根据标签查找实体
69
+ * @param tag 标签
70
+ * @returns 找到的所有实体数组
71
+ */
72
+ findEntitiesByTag(tag: number): Entity[];
73
+ /**
74
+ * 根据组件类型查找实体
75
+ * @param componentType 组件类型
76
+ * @returns 找到的所有实体数组
77
+ */
78
+ findEntitiesWithComponent<T extends Component>(componentType: new (...args: any[]) => T): Entity[];
79
+ /**
80
+ * 批量操作:对所有实体执行指定操作
81
+ * @param action 要执行的操作
82
+ */
83
+ forEach(action: (entity: Entity) => void): void;
84
+ /**
85
+ * 批量操作:对符合条件的实体执行指定操作
86
+ * @param predicate 筛选条件
87
+ * @param action 要执行的操作
88
+ */
89
+ forEachWhere(predicate: (entity: Entity) => boolean, action: (entity: Entity) => void): void;
90
+ /**
91
+ * 更新名称索引
92
+ * @param entity 实体
93
+ * @param isAdd 是否为添加操作
94
+ */
95
+ private updateNameIndex;
96
+ /**
97
+ * 获取实体列表的统计信息
98
+ * @returns 统计信息
99
+ */
100
+ getStats(): {
101
+ totalEntities: number;
102
+ activeEntities: number;
103
+ pendingAdd: number;
104
+ pendingRemove: number;
105
+ nameIndexSize: number;
106
+ };
107
+ }
108
+ //# sourceMappingURL=EntityList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityList.d.ts","sourceRoot":"","sources":["../../../src/ECS/Utils/EntityList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;GAGG;AACH,qBAAa,UAAU;IACZ,MAAM,EAAE,MAAM,EAAE,CAAM;IAC7B,OAAO,CAAC,MAAM,CAAM;IAGpB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,eAAe,CAA+B;IAGtD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,WAAW,CAAS;IAE5B,IAAW,KAAK,IAAI,MAAM,CAEzB;gBAEW,KAAK,EAAE,GAAG;IAItB;;;OAGG;IACI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAShC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB;;;OAGG;IACI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASnC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAYhC;;OAEG;IACI,WAAW,IAAI,IAAI;IAkB1B;;OAEG;IACI,MAAM,IAAI,IAAI;IAkBrB;;;;OAIG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK9C;;;;OAIG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIjD;;;;OAIG;IACI,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhD;;;;OAIG;IACI,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAY/C;;;;OAIG;IACI,yBAAyB,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE;IAYzG;;;OAGG;IACI,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAMtD;;;;OAIG;IACI,YAAY,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAQnG;;;;OAIG;IACH,OAAO,CAAC,eAAe;IA4BvB;;;OAGG;IACI,QAAQ,IAAI;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACzB;CAgBJ"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * 高性能实体列表管理器
3
+ * 管理场景中的所有实体,支持快速查找和批量操作
4
+ */
5
+ export class EntityList {
6
+ get count() {
7
+ return this.buffer.length;
8
+ }
9
+ constructor(scene) {
10
+ this.buffer = [];
11
+ // 索引映射,提升查找性能
12
+ this._idToEntity = new Map();
13
+ this._nameToEntities = new Map();
14
+ // 延迟操作队列
15
+ this._entitiesToAdd = [];
16
+ this._entitiesToRemove = [];
17
+ this._isUpdating = false;
18
+ this._scene = scene;
19
+ }
20
+ /**
21
+ * 添加实体(立即添加或延迟添加)
22
+ * @param entity 要添加的实体
23
+ */
24
+ add(entity) {
25
+ if (this._isUpdating) {
26
+ // 如果正在更新中,延迟添加
27
+ this._entitiesToAdd.push(entity);
28
+ }
29
+ else {
30
+ this.addImmediate(entity);
31
+ }
32
+ }
33
+ /**
34
+ * 立即添加实体
35
+ * @param entity 要添加的实体
36
+ */
37
+ addImmediate(entity) {
38
+ // 检查是否已存在
39
+ if (this._idToEntity.has(entity.id)) {
40
+ return;
41
+ }
42
+ this.buffer.push(entity);
43
+ this._idToEntity.set(entity.id, entity);
44
+ // 更新名称索引
45
+ this.updateNameIndex(entity, true);
46
+ }
47
+ /**
48
+ * 移除实体(立即移除或延迟移除)
49
+ * @param entity 要移除的实体
50
+ */
51
+ remove(entity) {
52
+ if (this._isUpdating) {
53
+ // 如果正在更新中,延迟移除
54
+ this._entitiesToRemove.push(entity);
55
+ }
56
+ else {
57
+ this.removeImmediate(entity);
58
+ }
59
+ }
60
+ /**
61
+ * 立即移除实体
62
+ * @param entity 要移除的实体
63
+ */
64
+ removeImmediate(entity) {
65
+ const index = this.buffer.indexOf(entity);
66
+ if (index !== -1) {
67
+ this.buffer.splice(index, 1);
68
+ this._idToEntity.delete(entity.id);
69
+ // 更新名称索引
70
+ this.updateNameIndex(entity, false);
71
+ }
72
+ }
73
+ /**
74
+ * 移除所有实体
75
+ */
76
+ removeAllEntities() {
77
+ for (let i = this.buffer.length - 1; i >= 0; i--) {
78
+ this.buffer[i].destroy();
79
+ }
80
+ this.buffer.length = 0;
81
+ this._idToEntity.clear();
82
+ this._nameToEntities.clear();
83
+ this._entitiesToAdd.length = 0;
84
+ this._entitiesToRemove.length = 0;
85
+ }
86
+ /**
87
+ * 更新实体列表,处理延迟操作
88
+ */
89
+ updateLists() {
90
+ // 处理延迟添加的实体
91
+ if (this._entitiesToAdd.length > 0) {
92
+ for (const entity of this._entitiesToAdd) {
93
+ this.addImmediate(entity);
94
+ }
95
+ this._entitiesToAdd.length = 0;
96
+ }
97
+ // 处理延迟移除的实体
98
+ if (this._entitiesToRemove.length > 0) {
99
+ for (const entity of this._entitiesToRemove) {
100
+ this.removeImmediate(entity);
101
+ }
102
+ this._entitiesToRemove.length = 0;
103
+ }
104
+ }
105
+ /**
106
+ * 更新所有实体
107
+ */
108
+ update() {
109
+ this._isUpdating = true;
110
+ try {
111
+ for (let i = 0; i < this.buffer.length; i++) {
112
+ const entity = this.buffer[i];
113
+ if (entity.enabled && !entity.isDestroyed) {
114
+ entity.update();
115
+ }
116
+ }
117
+ }
118
+ finally {
119
+ this._isUpdating = false;
120
+ }
121
+ // 处理延迟操作
122
+ this.updateLists();
123
+ }
124
+ /**
125
+ * 根据名称查找实体(使用索引,O(1)复杂度)
126
+ * @param name 实体名称
127
+ * @returns 找到的第一个实体或null
128
+ */
129
+ findEntity(name) {
130
+ const entities = this._nameToEntities.get(name);
131
+ return entities && entities.length > 0 ? entities[0] : null;
132
+ }
133
+ /**
134
+ * 根据名称查找所有实体
135
+ * @param name 实体名称
136
+ * @returns 找到的所有实体数组
137
+ */
138
+ findEntitiesByName(name) {
139
+ return this._nameToEntities.get(name) || [];
140
+ }
141
+ /**
142
+ * 根据ID查找实体(使用索引,O(1)复杂度)
143
+ * @param id 实体ID
144
+ * @returns 找到的实体或null
145
+ */
146
+ findEntityById(id) {
147
+ return this._idToEntity.get(id) || null;
148
+ }
149
+ /**
150
+ * 根据标签查找实体
151
+ * @param tag 标签
152
+ * @returns 找到的所有实体数组
153
+ */
154
+ findEntitiesByTag(tag) {
155
+ const result = [];
156
+ for (const entity of this.buffer) {
157
+ if (entity.tag === tag) {
158
+ result.push(entity);
159
+ }
160
+ }
161
+ return result;
162
+ }
163
+ /**
164
+ * 根据组件类型查找实体
165
+ * @param componentType 组件类型
166
+ * @returns 找到的所有实体数组
167
+ */
168
+ findEntitiesWithComponent(componentType) {
169
+ const result = [];
170
+ for (const entity of this.buffer) {
171
+ if (entity.hasComponent(componentType)) {
172
+ result.push(entity);
173
+ }
174
+ }
175
+ return result;
176
+ }
177
+ /**
178
+ * 批量操作:对所有实体执行指定操作
179
+ * @param action 要执行的操作
180
+ */
181
+ forEach(action) {
182
+ for (const entity of this.buffer) {
183
+ action(entity);
184
+ }
185
+ }
186
+ /**
187
+ * 批量操作:对符合条件的实体执行指定操作
188
+ * @param predicate 筛选条件
189
+ * @param action 要执行的操作
190
+ */
191
+ forEachWhere(predicate, action) {
192
+ for (const entity of this.buffer) {
193
+ if (predicate(entity)) {
194
+ action(entity);
195
+ }
196
+ }
197
+ }
198
+ /**
199
+ * 更新名称索引
200
+ * @param entity 实体
201
+ * @param isAdd 是否为添加操作
202
+ */
203
+ updateNameIndex(entity, isAdd) {
204
+ if (!entity.name) {
205
+ return;
206
+ }
207
+ if (isAdd) {
208
+ let entities = this._nameToEntities.get(entity.name);
209
+ if (!entities) {
210
+ entities = [];
211
+ this._nameToEntities.set(entity.name, entities);
212
+ }
213
+ entities.push(entity);
214
+ }
215
+ else {
216
+ const entities = this._nameToEntities.get(entity.name);
217
+ if (entities) {
218
+ const index = entities.indexOf(entity);
219
+ if (index !== -1) {
220
+ entities.splice(index, 1);
221
+ // 如果数组为空,删除映射
222
+ if (entities.length === 0) {
223
+ this._nameToEntities.delete(entity.name);
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ /**
230
+ * 获取实体列表的统计信息
231
+ * @returns 统计信息
232
+ */
233
+ getStats() {
234
+ let activeCount = 0;
235
+ for (const entity of this.buffer) {
236
+ if (entity.enabled && !entity.isDestroyed) {
237
+ activeCount++;
238
+ }
239
+ }
240
+ return {
241
+ totalEntities: this.buffer.length,
242
+ activeEntities: activeCount,
243
+ pendingAdd: this._entitiesToAdd.length,
244
+ pendingRemove: this._entitiesToRemove.length,
245
+ nameIndexSize: this._nameToEntities.size
246
+ };
247
+ }
248
+ }
249
+ //# sourceMappingURL=EntityList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityList.js","sourceRoot":"","sources":["../../../src/ECS/Utils/EntityList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { EntitySystem } from '../Systems/EntitySystem';
2
+ /**
3
+ * 实体处理器列表管理器
4
+ * 管理场景中的所有实体系统
5
+ */
6
+ export declare class EntityProcessorList {
7
+ private _processors;
8
+ private _isDirty;
9
+ /**
10
+ * 设置为脏状态,需要重新排序
11
+ */
12
+ setDirty(): void;
13
+ /**
14
+ * 添加实体处理器
15
+ * @param processor 要添加的处理器
16
+ */
17
+ add(processor: EntitySystem): void;
18
+ /**
19
+ * 移除实体处理器
20
+ * @param processor 要移除的处理器
21
+ */
22
+ remove(processor: EntitySystem): void;
23
+ /**
24
+ * 获取指定类型的处理器
25
+ * @param type 处理器类型
26
+ */
27
+ getProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T | null;
28
+ /**
29
+ * 开始处理
30
+ */
31
+ begin(): void;
32
+ /**
33
+ * 结束处理
34
+ */
35
+ end(): void;
36
+ /**
37
+ * 更新所有处理器
38
+ */
39
+ update(): void;
40
+ /**
41
+ * 后期更新所有处理器
42
+ */
43
+ lateUpdate(): void;
44
+ /**
45
+ * 排序处理器
46
+ */
47
+ private sortProcessors;
48
+ /** 获取处理器列表 */
49
+ get processors(): EntitySystem[];
50
+ /** 获取处理器数量 */
51
+ get count(): number;
52
+ }
53
+ //# sourceMappingURL=EntityProcessorList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityProcessorList.d.ts","sourceRoot":"","sources":["../../../src/ECS/Utils/EntityProcessorList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;GAGG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;;OAGG;IACI,GAAG,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAKzC;;;OAGG;IACI,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAO5C;;;OAGG;IACI,YAAY,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;IAStF;;OAEG;IACI,KAAK,IAAI,IAAI;IAOpB;;OAEG;IACI,GAAG,IAAI,IAAI;IAIlB;;OAEG;IACI,MAAM,IAAI,IAAI;IAOrB;;OAEG;IACI,UAAU,IAAI,IAAI;IAMzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB,cAAc;IACd,IAAW,UAAU,mBAEpB;IAED,cAAc;IACd,IAAW,KAAK,WAEf;CAGJ"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * 实体处理器列表管理器
3
+ * 管理场景中的所有实体系统
4
+ */
5
+ export class EntityProcessorList {
6
+ constructor() {
7
+ this._processors = [];
8
+ this._isDirty = false;
9
+ }
10
+ /**
11
+ * 设置为脏状态,需要重新排序
12
+ */
13
+ setDirty() {
14
+ this._isDirty = true;
15
+ }
16
+ /**
17
+ * 添加实体处理器
18
+ * @param processor 要添加的处理器
19
+ */
20
+ add(processor) {
21
+ this._processors.push(processor);
22
+ this.setDirty();
23
+ }
24
+ /**
25
+ * 移除实体处理器
26
+ * @param processor 要移除的处理器
27
+ */
28
+ remove(processor) {
29
+ const index = this._processors.indexOf(processor);
30
+ if (index !== -1) {
31
+ this._processors.splice(index, 1);
32
+ }
33
+ }
34
+ /**
35
+ * 获取指定类型的处理器
36
+ * @param type 处理器类型
37
+ */
38
+ getProcessor(type) {
39
+ for (const processor of this._processors) {
40
+ if (processor instanceof type) {
41
+ return processor;
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ /**
47
+ * 开始处理
48
+ */
49
+ begin() {
50
+ this.sortProcessors();
51
+ for (const processor of this._processors) {
52
+ processor.initialize();
53
+ }
54
+ }
55
+ /**
56
+ * 结束处理
57
+ */
58
+ end() {
59
+ // 清理处理器
60
+ }
61
+ /**
62
+ * 更新所有处理器
63
+ */
64
+ update() {
65
+ this.sortProcessors();
66
+ for (const processor of this._processors) {
67
+ processor.update();
68
+ }
69
+ }
70
+ /**
71
+ * 后期更新所有处理器
72
+ */
73
+ lateUpdate() {
74
+ for (const processor of this._processors) {
75
+ processor.lateUpdate();
76
+ }
77
+ }
78
+ /**
79
+ * 排序处理器
80
+ */
81
+ sortProcessors() {
82
+ if (this._isDirty) {
83
+ this._processors.sort((a, b) => a.updateOrder - b.updateOrder);
84
+ this._isDirty = false;
85
+ }
86
+ }
87
+ /** 获取处理器列表 */
88
+ get processors() {
89
+ return this._processors;
90
+ }
91
+ /** 获取处理器数量 */
92
+ get count() {
93
+ return this._processors.length;
94
+ }
95
+ }
96
+ //# sourceMappingURL=EntityProcessorList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityProcessorList.js","sourceRoot":"","sources":["../../../src/ECS/Utils/EntityProcessorList.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAAhC;QACY,gBAAW,GAAmB,EAAE,CAAC;QACjC,aAAQ,GAAG,KAAK,CAAC;IAmG7B,CAAC;IAjGG;;OAEG;IACI,QAAQ;QACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,SAAuB;QAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,SAAuB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,YAAY,CAAyB,IAA+B;QACvE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,SAAS,YAAY,IAAI,EAAE,CAAC;gBAC5B,OAAO,SAAc,CAAC;YAC1B,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,KAAK;QACR,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;OAEG;IACI,GAAG;QACN,QAAQ;IACZ,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,SAAS,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED;;OAEG;IACI,UAAU;QACb,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;OAEG;IACK,cAAc;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,cAAc;IACd,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,cAAc;IACd,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACnC,CAAC;CAGJ"}