@esengine/ecs-framework 2.1.30 → 2.1.32

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 (288) hide show
  1. package/index.cjs +2 -0
  2. package/index.cjs.map +1 -0
  3. package/index.d.ts +6357 -0
  4. package/index.mjs +2 -0
  5. package/index.mjs.map +1 -0
  6. package/index.umd.js +2 -0
  7. package/index.umd.js.map +1 -0
  8. package/package.json +27 -50
  9. package/bin/Core.d.ts +0 -279
  10. package/bin/Core.d.ts.map +0 -1
  11. package/bin/Core.js +0 -400
  12. package/bin/Core.js.map +0 -1
  13. package/bin/ECS/Component.d.ts +0 -120
  14. package/bin/ECS/Component.d.ts.map +0 -1
  15. package/bin/ECS/Component.js +0 -129
  16. package/bin/ECS/Component.js.map +0 -1
  17. package/bin/ECS/Components/IUpdatable.d.ts +0 -22
  18. package/bin/ECS/Components/IUpdatable.d.ts.map +0 -1
  19. package/bin/ECS/Components/IUpdatable.js +0 -17
  20. package/bin/ECS/Components/IUpdatable.js.map +0 -1
  21. package/bin/ECS/Components/SceneComponent.d.ts +0 -40
  22. package/bin/ECS/Components/SceneComponent.d.ts.map +0 -1
  23. package/bin/ECS/Components/SceneComponent.js +0 -57
  24. package/bin/ECS/Components/SceneComponent.js.map +0 -1
  25. package/bin/ECS/Core/ArchetypeSystem.d.ts +0 -100
  26. package/bin/ECS/Core/ArchetypeSystem.d.ts.map +0 -1
  27. package/bin/ECS/Core/ArchetypeSystem.js +0 -193
  28. package/bin/ECS/Core/ArchetypeSystem.js.map +0 -1
  29. package/bin/ECS/Core/ComponentIndex.d.ts +0 -151
  30. package/bin/ECS/Core/ComponentIndex.d.ts.map +0 -1
  31. package/bin/ECS/Core/ComponentIndex.js +0 -405
  32. package/bin/ECS/Core/ComponentIndex.js.map +0 -1
  33. package/bin/ECS/Core/ComponentPool.d.ts +0 -88
  34. package/bin/ECS/Core/ComponentPool.d.ts.map +0 -1
  35. package/bin/ECS/Core/ComponentPool.js +0 -159
  36. package/bin/ECS/Core/ComponentPool.js.map +0 -1
  37. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts +0 -92
  38. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.d.ts.map +0 -1
  39. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js +0 -167
  40. package/bin/ECS/Core/ComponentStorage/ComponentRegistry.js.map +0 -1
  41. package/bin/ECS/Core/ComponentStorage.d.ts +0 -233
  42. package/bin/ECS/Core/ComponentStorage.d.ts.map +0 -1
  43. package/bin/ECS/Core/ComponentStorage.js +0 -463
  44. package/bin/ECS/Core/ComponentStorage.js.map +0 -1
  45. package/bin/ECS/Core/DirtyTrackingSystem.d.ts +0 -197
  46. package/bin/ECS/Core/DirtyTrackingSystem.d.ts.map +0 -1
  47. package/bin/ECS/Core/DirtyTrackingSystem.js +0 -297
  48. package/bin/ECS/Core/DirtyTrackingSystem.js.map +0 -1
  49. package/bin/ECS/Core/EntityManager.d.ts +0 -379
  50. package/bin/ECS/Core/EntityManager.d.ts.map +0 -1
  51. package/bin/ECS/Core/EntityManager.js +0 -686
  52. package/bin/ECS/Core/EntityManager.js.map +0 -1
  53. package/bin/ECS/Core/EventBus.d.ts +0 -218
  54. package/bin/ECS/Core/EventBus.d.ts.map +0 -1
  55. package/bin/ECS/Core/EventBus.js +0 -402
  56. package/bin/ECS/Core/EventBus.js.map +0 -1
  57. package/bin/ECS/Core/EventSystem.d.ts +0 -237
  58. package/bin/ECS/Core/EventSystem.d.ts.map +0 -1
  59. package/bin/ECS/Core/EventSystem.js +0 -478
  60. package/bin/ECS/Core/EventSystem.js.map +0 -1
  61. package/bin/ECS/Core/Events/index.d.ts +0 -3
  62. package/bin/ECS/Core/Events/index.d.ts.map +0 -1
  63. package/bin/ECS/Core/Events/index.js +0 -3
  64. package/bin/ECS/Core/Events/index.js.map +0 -1
  65. package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts +0 -35
  66. package/bin/ECS/Core/FluentAPI/ComponentBuilder.d.ts.map +0 -1
  67. package/bin/ECS/Core/FluentAPI/ComponentBuilder.js +0 -48
  68. package/bin/ECS/Core/FluentAPI/ComponentBuilder.js.map +0 -1
  69. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts +0 -135
  70. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.d.ts.map +0 -1
  71. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js +0 -166
  72. package/bin/ECS/Core/FluentAPI/ECSFluentAPI.js.map +0 -1
  73. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts +0 -58
  74. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.d.ts.map +0 -1
  75. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js +0 -85
  76. package/bin/ECS/Core/FluentAPI/EntityBatchOperator.js.map +0 -1
  77. package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts +0 -110
  78. package/bin/ECS/Core/FluentAPI/EntityBuilder.d.ts.map +0 -1
  79. package/bin/ECS/Core/FluentAPI/EntityBuilder.js +0 -174
  80. package/bin/ECS/Core/FluentAPI/EntityBuilder.js.map +0 -1
  81. package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts +0 -53
  82. package/bin/ECS/Core/FluentAPI/SceneBuilder.d.ts.map +0 -1
  83. package/bin/ECS/Core/FluentAPI/SceneBuilder.js +0 -79
  84. package/bin/ECS/Core/FluentAPI/SceneBuilder.js.map +0 -1
  85. package/bin/ECS/Core/FluentAPI/index.d.ts +0 -6
  86. package/bin/ECS/Core/FluentAPI/index.d.ts.map +0 -1
  87. package/bin/ECS/Core/FluentAPI/index.js +0 -6
  88. package/bin/ECS/Core/FluentAPI/index.js.map +0 -1
  89. package/bin/ECS/Core/FluentAPI.d.ts +0 -2
  90. package/bin/ECS/Core/FluentAPI.d.ts.map +0 -1
  91. package/bin/ECS/Core/FluentAPI.js +0 -3
  92. package/bin/ECS/Core/FluentAPI.js.map +0 -1
  93. package/bin/ECS/Core/Performance/index.d.ts +0 -4
  94. package/bin/ECS/Core/Performance/index.d.ts.map +0 -1
  95. package/bin/ECS/Core/Performance/index.js +0 -4
  96. package/bin/ECS/Core/Performance/index.js.map +0 -1
  97. package/bin/ECS/Core/Query/index.d.ts +0 -4
  98. package/bin/ECS/Core/Query/index.d.ts.map +0 -1
  99. package/bin/ECS/Core/Query/index.js +0 -4
  100. package/bin/ECS/Core/Query/index.js.map +0 -1
  101. package/bin/ECS/Core/QuerySystem.d.ts +0 -438
  102. package/bin/ECS/Core/QuerySystem.d.ts.map +0 -1
  103. package/bin/ECS/Core/QuerySystem.js +0 -974
  104. package/bin/ECS/Core/QuerySystem.js.map +0 -1
  105. package/bin/ECS/Core/SoAStorage.d.ts +0 -97
  106. package/bin/ECS/Core/SoAStorage.d.ts.map +0 -1
  107. package/bin/ECS/Core/SoAStorage.js +0 -548
  108. package/bin/ECS/Core/SoAStorage.js.map +0 -1
  109. package/bin/ECS/Core/Storage/index.d.ts +0 -4
  110. package/bin/ECS/Core/Storage/index.d.ts.map +0 -1
  111. package/bin/ECS/Core/Storage/index.js +0 -4
  112. package/bin/ECS/Core/Storage/index.js.map +0 -1
  113. package/bin/ECS/CoreEvents.d.ts +0 -131
  114. package/bin/ECS/CoreEvents.d.ts.map +0 -1
  115. package/bin/ECS/CoreEvents.js +0 -163
  116. package/bin/ECS/CoreEvents.js.map +0 -1
  117. package/bin/ECS/Entity.d.ts +0 -455
  118. package/bin/ECS/Entity.d.ts.map +0 -1
  119. package/bin/ECS/Entity.js +0 -837
  120. package/bin/ECS/Entity.js.map +0 -1
  121. package/bin/ECS/Scene.d.ts +0 -225
  122. package/bin/ECS/Scene.d.ts.map +0 -1
  123. package/bin/ECS/Scene.js +0 -325
  124. package/bin/ECS/Scene.js.map +0 -1
  125. package/bin/ECS/Systems/EntitySystem.d.ts +0 -200
  126. package/bin/ECS/Systems/EntitySystem.d.ts.map +0 -1
  127. package/bin/ECS/Systems/EntitySystem.js +0 -431
  128. package/bin/ECS/Systems/EntitySystem.js.map +0 -1
  129. package/bin/ECS/Systems/IntervalSystem.d.ts +0 -33
  130. package/bin/ECS/Systems/IntervalSystem.d.ts.map +0 -1
  131. package/bin/ECS/Systems/IntervalSystem.js +0 -50
  132. package/bin/ECS/Systems/IntervalSystem.js.map +0 -1
  133. package/bin/ECS/Systems/PassiveSystem.d.ts +0 -17
  134. package/bin/ECS/Systems/PassiveSystem.d.ts.map +0 -1
  135. package/bin/ECS/Systems/PassiveSystem.js +0 -19
  136. package/bin/ECS/Systems/PassiveSystem.js.map +0 -1
  137. package/bin/ECS/Systems/ProcessingSystem.d.ts +0 -21
  138. package/bin/ECS/Systems/ProcessingSystem.d.ts.map +0 -1
  139. package/bin/ECS/Systems/ProcessingSystem.js +0 -20
  140. package/bin/ECS/Systems/ProcessingSystem.js.map +0 -1
  141. package/bin/ECS/Systems/index.d.ts +0 -5
  142. package/bin/ECS/Systems/index.d.ts.map +0 -1
  143. package/bin/ECS/Systems/index.js +0 -6
  144. package/bin/ECS/Systems/index.js.map +0 -1
  145. package/bin/ECS/Utils/BigIntCompatibility.d.ts +0 -164
  146. package/bin/ECS/Utils/BigIntCompatibility.d.ts.map +0 -1
  147. package/bin/ECS/Utils/BigIntCompatibility.js +0 -578
  148. package/bin/ECS/Utils/BigIntCompatibility.js.map +0 -1
  149. package/bin/ECS/Utils/Bits.d.ts +0 -163
  150. package/bin/ECS/Utils/Bits.d.ts.map +0 -1
  151. package/bin/ECS/Utils/Bits.js +0 -286
  152. package/bin/ECS/Utils/Bits.js.map +0 -1
  153. package/bin/ECS/Utils/ComponentTypeManager.d.ts +0 -50
  154. package/bin/ECS/Utils/ComponentTypeManager.d.ts.map +0 -1
  155. package/bin/ECS/Utils/ComponentTypeManager.js +0 -84
  156. package/bin/ECS/Utils/ComponentTypeManager.js.map +0 -1
  157. package/bin/ECS/Utils/EntityList.d.ts +0 -108
  158. package/bin/ECS/Utils/EntityList.d.ts.map +0 -1
  159. package/bin/ECS/Utils/EntityList.js +0 -262
  160. package/bin/ECS/Utils/EntityList.js.map +0 -1
  161. package/bin/ECS/Utils/EntityProcessorList.d.ts +0 -56
  162. package/bin/ECS/Utils/EntityProcessorList.d.ts.map +0 -1
  163. package/bin/ECS/Utils/EntityProcessorList.js +0 -102
  164. package/bin/ECS/Utils/EntityProcessorList.js.map +0 -1
  165. package/bin/ECS/Utils/IdentifierPool.d.ts +0 -203
  166. package/bin/ECS/Utils/IdentifierPool.d.ts.map +0 -1
  167. package/bin/ECS/Utils/IdentifierPool.js +0 -325
  168. package/bin/ECS/Utils/IdentifierPool.js.map +0 -1
  169. package/bin/ECS/Utils/Matcher.d.ts +0 -143
  170. package/bin/ECS/Utils/Matcher.d.ts.map +0 -1
  171. package/bin/ECS/Utils/Matcher.js +0 -249
  172. package/bin/ECS/Utils/Matcher.js.map +0 -1
  173. package/bin/ECS/Utils/index.d.ts +0 -8
  174. package/bin/ECS/Utils/index.d.ts.map +0 -1
  175. package/bin/ECS/Utils/index.js +0 -9
  176. package/bin/ECS/Utils/index.js.map +0 -1
  177. package/bin/ECS/index.d.ts +0 -12
  178. package/bin/ECS/index.d.ts.map +0 -1
  179. package/bin/ECS/index.js +0 -12
  180. package/bin/ECS/index.js.map +0 -1
  181. package/bin/Types/index.d.ts +0 -471
  182. package/bin/Types/index.d.ts.map +0 -1
  183. package/bin/Types/index.js +0 -5
  184. package/bin/Types/index.js.map +0 -1
  185. package/bin/Utils/Debug/ComponentDataCollector.d.ts +0 -28
  186. package/bin/Utils/Debug/ComponentDataCollector.d.ts.map +0 -1
  187. package/bin/Utils/Debug/ComponentDataCollector.js +0 -248
  188. package/bin/Utils/Debug/ComponentDataCollector.js.map +0 -1
  189. package/bin/Utils/Debug/DebugDataFormatter.d.ts +0 -22
  190. package/bin/Utils/Debug/DebugDataFormatter.d.ts.map +0 -1
  191. package/bin/Utils/Debug/DebugDataFormatter.js +0 -117
  192. package/bin/Utils/Debug/DebugDataFormatter.js.map +0 -1
  193. package/bin/Utils/Debug/DebugManager.d.ts +0 -104
  194. package/bin/Utils/Debug/DebugManager.d.ts.map +0 -1
  195. package/bin/Utils/Debug/DebugManager.js +0 -647
  196. package/bin/Utils/Debug/DebugManager.js.map +0 -1
  197. package/bin/Utils/Debug/EntityDataCollector.d.ts +0 -92
  198. package/bin/Utils/Debug/EntityDataCollector.d.ts.map +0 -1
  199. package/bin/Utils/Debug/EntityDataCollector.js +0 -864
  200. package/bin/Utils/Debug/EntityDataCollector.js.map +0 -1
  201. package/bin/Utils/Debug/PerformanceDataCollector.d.ts +0 -32
  202. package/bin/Utils/Debug/PerformanceDataCollector.d.ts.map +0 -1
  203. package/bin/Utils/Debug/PerformanceDataCollector.js +0 -217
  204. package/bin/Utils/Debug/PerformanceDataCollector.js.map +0 -1
  205. package/bin/Utils/Debug/SceneDataCollector.d.ts +0 -16
  206. package/bin/Utils/Debug/SceneDataCollector.d.ts.map +0 -1
  207. package/bin/Utils/Debug/SceneDataCollector.js +0 -46
  208. package/bin/Utils/Debug/SceneDataCollector.js.map +0 -1
  209. package/bin/Utils/Debug/SystemDataCollector.d.ts +0 -11
  210. package/bin/Utils/Debug/SystemDataCollector.d.ts.map +0 -1
  211. package/bin/Utils/Debug/SystemDataCollector.js +0 -59
  212. package/bin/Utils/Debug/SystemDataCollector.js.map +0 -1
  213. package/bin/Utils/Debug/WebSocketManager.d.ts +0 -59
  214. package/bin/Utils/Debug/WebSocketManager.d.ts.map +0 -1
  215. package/bin/Utils/Debug/WebSocketManager.js +0 -148
  216. package/bin/Utils/Debug/WebSocketManager.js.map +0 -1
  217. package/bin/Utils/Debug/index.d.ts +0 -8
  218. package/bin/Utils/Debug/index.d.ts.map +0 -1
  219. package/bin/Utils/Debug/index.js +0 -8
  220. package/bin/Utils/Debug/index.js.map +0 -1
  221. package/bin/Utils/Emitter.d.ts +0 -43
  222. package/bin/Utils/Emitter.d.ts.map +0 -1
  223. package/bin/Utils/Emitter.js +0 -69
  224. package/bin/Utils/Emitter.js.map +0 -1
  225. package/bin/Utils/Extensions/NumberExtension.d.ts +0 -13
  226. package/bin/Utils/Extensions/NumberExtension.d.ts.map +0 -1
  227. package/bin/Utils/Extensions/NumberExtension.js +0 -17
  228. package/bin/Utils/Extensions/NumberExtension.js.map +0 -1
  229. package/bin/Utils/Extensions/TypeUtils.d.ts +0 -13
  230. package/bin/Utils/Extensions/TypeUtils.d.ts.map +0 -1
  231. package/bin/Utils/Extensions/TypeUtils.js +0 -15
  232. package/bin/Utils/Extensions/TypeUtils.js.map +0 -1
  233. package/bin/Utils/Extensions/index.d.ts +0 -3
  234. package/bin/Utils/Extensions/index.d.ts.map +0 -1
  235. package/bin/Utils/Extensions/index.js +0 -4
  236. package/bin/Utils/Extensions/index.js.map +0 -1
  237. package/bin/Utils/GlobalManager.d.ts +0 -32
  238. package/bin/Utils/GlobalManager.d.ts.map +0 -1
  239. package/bin/Utils/GlobalManager.js +0 -53
  240. package/bin/Utils/GlobalManager.js.map +0 -1
  241. package/bin/Utils/Logger.d.ts +0 -156
  242. package/bin/Utils/Logger.d.ts.map +0 -1
  243. package/bin/Utils/Logger.js +0 -256
  244. package/bin/Utils/Logger.js.map +0 -1
  245. package/bin/Utils/PerformanceMonitor.d.ts +0 -211
  246. package/bin/Utils/PerformanceMonitor.d.ts.map +0 -1
  247. package/bin/Utils/PerformanceMonitor.js +0 -270
  248. package/bin/Utils/PerformanceMonitor.js.map +0 -1
  249. package/bin/Utils/Pool/IPoolable.d.ts +0 -29
  250. package/bin/Utils/Pool/IPoolable.d.ts.map +0 -1
  251. package/bin/Utils/Pool/IPoolable.js +0 -2
  252. package/bin/Utils/Pool/IPoolable.js.map +0 -1
  253. package/bin/Utils/Pool/Pool.d.ts +0 -109
  254. package/bin/Utils/Pool/Pool.d.ts.map +0 -1
  255. package/bin/Utils/Pool/Pool.js +0 -238
  256. package/bin/Utils/Pool/Pool.js.map +0 -1
  257. package/bin/Utils/Pool/PoolManager.d.ts +0 -91
  258. package/bin/Utils/Pool/PoolManager.d.ts.map +0 -1
  259. package/bin/Utils/Pool/PoolManager.js +0 -197
  260. package/bin/Utils/Pool/PoolManager.js.map +0 -1
  261. package/bin/Utils/Pool/index.d.ts +0 -4
  262. package/bin/Utils/Pool/index.d.ts.map +0 -1
  263. package/bin/Utils/Pool/index.js +0 -4
  264. package/bin/Utils/Pool/index.js.map +0 -1
  265. package/bin/Utils/Time.d.ts +0 -47
  266. package/bin/Utils/Time.d.ts.map +0 -1
  267. package/bin/Utils/Time.js +0 -64
  268. package/bin/Utils/Time.js.map +0 -1
  269. package/bin/Utils/Timers/ITimer.d.ts +0 -16
  270. package/bin/Utils/Timers/ITimer.d.ts.map +0 -1
  271. package/bin/Utils/Timers/ITimer.js +0 -2
  272. package/bin/Utils/Timers/ITimer.js.map +0 -1
  273. package/bin/Utils/Timers/Timer.d.ts +0 -30
  274. package/bin/Utils/Timers/Timer.d.ts.map +0 -1
  275. package/bin/Utils/Timers/Timer.js +0 -58
  276. package/bin/Utils/Timers/Timer.js.map +0 -1
  277. package/bin/Utils/Timers/TimerManager.d.ts +0 -19
  278. package/bin/Utils/Timers/TimerManager.d.ts.map +0 -1
  279. package/bin/Utils/Timers/TimerManager.js +0 -33
  280. package/bin/Utils/Timers/TimerManager.js.map +0 -1
  281. package/bin/Utils/index.d.ts +0 -9
  282. package/bin/Utils/index.d.ts.map +0 -1
  283. package/bin/Utils/index.js +0 -9
  284. package/bin/Utils/index.js.map +0 -1
  285. package/bin/index.d.ts +0 -16
  286. package/bin/index.d.ts.map +0 -1
  287. package/bin/index.js +0 -19
  288. package/bin/index.js.map +0 -1
@@ -1,463 +0,0 @@
1
- import { BigIntFactory } from '../Utils/BigIntCompatibility';
2
- import { SoAStorage, EnableSoA, HighPrecision, Float64, Int32, SerializeMap, SerializeSet, SerializeArray, DeepCopy } from './SoAStorage';
3
- import { createLogger } from '../../Utils/Logger';
4
- // 重新导出装饰器
5
- export { EnableSoA, HighPrecision, Float64, Int32, SerializeMap, SerializeSet, SerializeArray, DeepCopy };
6
- /**
7
- * 组件注册表
8
- * 管理组件类型的位掩码分配
9
- */
10
- export class ComponentRegistry {
11
- /**
12
- * 注册组件类型并分配位掩码
13
- * @param componentType 组件类型
14
- * @returns 分配的位索引
15
- */
16
- static register(componentType) {
17
- if (this.componentTypes.has(componentType)) {
18
- return this.componentTypes.get(componentType);
19
- }
20
- if (this.nextBitIndex >= this.maxComponents) {
21
- throw new Error(`Maximum number of component types (${this.maxComponents}) exceeded`);
22
- }
23
- const bitIndex = this.nextBitIndex++;
24
- this.componentTypes.set(componentType, bitIndex);
25
- this.componentNameToType.set(componentType.name, componentType);
26
- this.componentNameToId.set(componentType.name, bitIndex);
27
- return bitIndex;
28
- }
29
- /**
30
- * 获取组件类型的位掩码
31
- * @param componentType 组件类型
32
- * @returns 位掩码
33
- */
34
- static getBitMask(componentType) {
35
- const bitIndex = this.componentTypes.get(componentType);
36
- if (bitIndex === undefined) {
37
- throw new Error(`Component type ${componentType.name} is not registered`);
38
- }
39
- return BigIntFactory.one().shiftLeft(bitIndex);
40
- }
41
- /**
42
- * 获取组件类型的位索引
43
- * @param componentType 组件类型
44
- * @returns 位索引
45
- */
46
- static getBitIndex(componentType) {
47
- const bitIndex = this.componentTypes.get(componentType);
48
- if (bitIndex === undefined) {
49
- throw new Error(`Component type ${componentType.name} is not registered`);
50
- }
51
- return bitIndex;
52
- }
53
- /**
54
- * 检查组件类型是否已注册
55
- * @param componentType 组件类型
56
- * @returns 是否已注册
57
- */
58
- static isRegistered(componentType) {
59
- return this.componentTypes.has(componentType);
60
- }
61
- /**
62
- * 通过名称获取组件类型
63
- * @param componentName 组件名称
64
- * @returns 组件类型构造函数
65
- */
66
- static getComponentType(componentName) {
67
- return this.componentNameToType.get(componentName) || null;
68
- }
69
- /**
70
- * 获取所有已注册的组件类型
71
- * @returns 组件类型映射
72
- */
73
- static getAllRegisteredTypes() {
74
- return new Map(this.componentTypes);
75
- }
76
- /**
77
- * 获取所有组件名称到类型的映射
78
- * @returns 名称到类型的映射
79
- */
80
- static getAllComponentNames() {
81
- return new Map(this.componentNameToType);
82
- }
83
- /**
84
- * 通过名称获取组件类型ID
85
- * @param componentName 组件名称
86
- * @returns 组件类型ID
87
- */
88
- static getComponentId(componentName) {
89
- return this.componentNameToId.get(componentName);
90
- }
91
- /**
92
- * 注册组件类型(通过名称)
93
- * @param componentName 组件名称
94
- * @returns 分配的组件ID
95
- */
96
- static registerComponentByName(componentName) {
97
- if (this.componentNameToId.has(componentName)) {
98
- return this.componentNameToId.get(componentName);
99
- }
100
- if (this.nextBitIndex >= this.maxComponents) {
101
- throw new Error(`Maximum number of component types (${this.maxComponents}) exceeded`);
102
- }
103
- const bitIndex = this.nextBitIndex++;
104
- this.componentNameToId.set(componentName, bitIndex);
105
- return bitIndex;
106
- }
107
- /**
108
- * 创建单个组件的掩码
109
- * @param componentName 组件名称
110
- * @returns 组件掩码
111
- */
112
- static createSingleComponentMask(componentName) {
113
- const cacheKey = `single:${componentName}`;
114
- if (this.maskCache.has(cacheKey)) {
115
- return this.maskCache.get(cacheKey);
116
- }
117
- const componentId = this.getComponentId(componentName);
118
- if (componentId === undefined) {
119
- throw new Error(`Component type ${componentName} is not registered`);
120
- }
121
- const mask = BigIntFactory.one().shiftLeft(componentId);
122
- this.maskCache.set(cacheKey, mask);
123
- return mask;
124
- }
125
- /**
126
- * 创建多个组件的掩码
127
- * @param componentNames 组件名称数组
128
- * @returns 组合掩码
129
- */
130
- static createComponentMask(componentNames) {
131
- const sortedNames = [...componentNames].sort();
132
- const cacheKey = `multi:${sortedNames.join(',')}`;
133
- if (this.maskCache.has(cacheKey)) {
134
- return this.maskCache.get(cacheKey);
135
- }
136
- let mask = BigIntFactory.zero();
137
- for (const name of componentNames) {
138
- const componentId = this.getComponentId(name);
139
- if (componentId !== undefined) {
140
- mask = mask.or(BigIntFactory.one().shiftLeft(componentId));
141
- }
142
- }
143
- this.maskCache.set(cacheKey, mask);
144
- return mask;
145
- }
146
- /**
147
- * 清除掩码缓存
148
- */
149
- static clearMaskCache() {
150
- this.maskCache.clear();
151
- }
152
- /**
153
- * 重置注册表(用于测试)
154
- */
155
- static reset() {
156
- this.componentTypes.clear();
157
- this.componentNameToType.clear();
158
- this.componentNameToId.clear();
159
- this.maskCache.clear();
160
- this.nextBitIndex = 0;
161
- }
162
- }
163
- ComponentRegistry._logger = createLogger('ComponentStorage');
164
- ComponentRegistry.componentTypes = new Map();
165
- ComponentRegistry.componentNameToType = new Map();
166
- ComponentRegistry.componentNameToId = new Map();
167
- ComponentRegistry.maskCache = new Map();
168
- ComponentRegistry.nextBitIndex = 0;
169
- ComponentRegistry.maxComponents = 64; // 支持最多64种组件类型
170
- /**
171
- * 高性能组件存储器
172
- * 使用SoA(Structure of Arrays)模式存储组件
173
- */
174
- export class ComponentStorage {
175
- constructor(componentType) {
176
- this.components = [];
177
- this.entityToIndex = new Map();
178
- this.indexToEntity = [];
179
- this.freeIndices = [];
180
- this._size = 0;
181
- this.componentType = componentType;
182
- // 确保组件类型已注册
183
- if (!ComponentRegistry.isRegistered(componentType)) {
184
- ComponentRegistry.register(componentType);
185
- }
186
- }
187
- /**
188
- * 添加组件
189
- * @param entityId 实体ID
190
- * @param component 组件实例
191
- */
192
- addComponent(entityId, component) {
193
- // 检查实体是否已有此组件
194
- if (this.entityToIndex.has(entityId)) {
195
- throw new Error(`Entity ${entityId} already has component ${this.componentType.name}`);
196
- }
197
- let index;
198
- if (this.freeIndices.length > 0) {
199
- // 重用空闲索引
200
- index = this.freeIndices.pop();
201
- this.components[index] = component;
202
- this.indexToEntity[index] = entityId;
203
- }
204
- else {
205
- // 添加到末尾
206
- index = this.components.length;
207
- this.components.push(component);
208
- this.indexToEntity.push(entityId);
209
- }
210
- this.entityToIndex.set(entityId, index);
211
- this._size++;
212
- }
213
- /**
214
- * 获取组件
215
- * @param entityId 实体ID
216
- * @returns 组件实例或null
217
- */
218
- getComponent(entityId) {
219
- const index = this.entityToIndex.get(entityId);
220
- return index !== undefined ? this.components[index] : null;
221
- }
222
- /**
223
- * 检查实体是否有此组件
224
- * @param entityId 实体ID
225
- * @returns 是否有组件
226
- */
227
- hasComponent(entityId) {
228
- return this.entityToIndex.has(entityId);
229
- }
230
- /**
231
- * 移除组件
232
- * @param entityId 实体ID
233
- * @returns 被移除的组件或null
234
- */
235
- removeComponent(entityId) {
236
- const index = this.entityToIndex.get(entityId);
237
- if (index === undefined) {
238
- return null;
239
- }
240
- const component = this.components[index];
241
- this.entityToIndex.delete(entityId);
242
- this.components[index] = null;
243
- this.freeIndices.push(index);
244
- this._size--;
245
- return component;
246
- }
247
- /**
248
- * 高效遍历所有组件
249
- * @param callback 回调函数
250
- */
251
- forEach(callback) {
252
- for (let i = 0; i < this.components.length; i++) {
253
- const component = this.components[i];
254
- if (component) {
255
- callback(component, this.indexToEntity[i], i);
256
- }
257
- }
258
- }
259
- /**
260
- * 获取所有组件(密集数组)
261
- * @returns 组件数组
262
- */
263
- getDenseArray() {
264
- const components = [];
265
- const entityIds = [];
266
- for (let i = 0; i < this.components.length; i++) {
267
- const component = this.components[i];
268
- if (component) {
269
- components.push(component);
270
- entityIds.push(this.indexToEntity[i]);
271
- }
272
- }
273
- return { components, entityIds };
274
- }
275
- /**
276
- * 清空所有组件
277
- */
278
- clear() {
279
- this.components.length = 0;
280
- this.entityToIndex.clear();
281
- this.indexToEntity.length = 0;
282
- this.freeIndices.length = 0;
283
- this._size = 0;
284
- }
285
- /**
286
- * 获取组件数量
287
- */
288
- get size() {
289
- return this._size;
290
- }
291
- /**
292
- * 获取组件类型
293
- */
294
- get type() {
295
- return this.componentType;
296
- }
297
- /**
298
- * 压缩存储(移除空洞)
299
- */
300
- compact() {
301
- if (this.freeIndices.length === 0) {
302
- return; // 没有空洞,无需压缩
303
- }
304
- const newComponents = [];
305
- const newIndexToEntity = [];
306
- const newEntityToIndex = new Map();
307
- let newIndex = 0;
308
- for (let i = 0; i < this.components.length; i++) {
309
- const component = this.components[i];
310
- if (component) {
311
- newComponents[newIndex] = component;
312
- newIndexToEntity[newIndex] = this.indexToEntity[i];
313
- newEntityToIndex.set(this.indexToEntity[i], newIndex);
314
- newIndex++;
315
- }
316
- }
317
- this.components = newComponents;
318
- this.indexToEntity = newIndexToEntity;
319
- this.entityToIndex = newEntityToIndex;
320
- this.freeIndices.length = 0;
321
- }
322
- /**
323
- * 获取存储统计信息
324
- */
325
- getStats() {
326
- const totalSlots = this.components.length;
327
- const usedSlots = this._size;
328
- const freeSlots = this.freeIndices.length;
329
- const fragmentation = totalSlots > 0 ? freeSlots / totalSlots : 0;
330
- return {
331
- totalSlots,
332
- usedSlots,
333
- freeSlots,
334
- fragmentation
335
- };
336
- }
337
- }
338
- /**
339
- * 组件存储管理器
340
- * 管理所有组件类型的存储器
341
- */
342
- export class ComponentStorageManager {
343
- constructor() {
344
- this.storages = new Map();
345
- }
346
- /**
347
- * 获取或创建组件存储器(默认原始存储)
348
- * @param componentType 组件类型
349
- * @returns 组件存储器
350
- */
351
- getStorage(componentType) {
352
- let storage = this.storages.get(componentType);
353
- if (!storage) {
354
- // 检查是否启用SoA优化
355
- const enableSoA = componentType.__enableSoA;
356
- if (enableSoA) {
357
- // 使用SoA优化存储
358
- storage = new SoAStorage(componentType);
359
- ComponentStorageManager._logger.info(`为 ${componentType.name} 启用SoA优化(适用于大规模批量操作)`);
360
- }
361
- else {
362
- // 默认使用原始存储
363
- storage = new ComponentStorage(componentType);
364
- }
365
- this.storages.set(componentType, storage);
366
- }
367
- return storage;
368
- }
369
- /**
370
- * 添加组件
371
- * @param entityId 实体ID
372
- * @param component 组件实例
373
- */
374
- addComponent(entityId, component) {
375
- const componentType = component.constructor;
376
- const storage = this.getStorage(componentType);
377
- storage.addComponent(entityId, component);
378
- }
379
- /**
380
- * 获取组件
381
- * @param entityId 实体ID
382
- * @param componentType 组件类型
383
- * @returns 组件实例或null
384
- */
385
- getComponent(entityId, componentType) {
386
- const storage = this.storages.get(componentType);
387
- return storage ? storage.getComponent(entityId) : null;
388
- }
389
- /**
390
- * 检查实体是否有组件
391
- * @param entityId 实体ID
392
- * @param componentType 组件类型
393
- * @returns 是否有组件
394
- */
395
- hasComponent(entityId, componentType) {
396
- const storage = this.storages.get(componentType);
397
- return storage ? storage.hasComponent(entityId) : false;
398
- }
399
- /**
400
- * 移除组件
401
- * @param entityId 实体ID
402
- * @param componentType 组件类型
403
- * @returns 被移除的组件或null
404
- */
405
- removeComponent(entityId, componentType) {
406
- const storage = this.storages.get(componentType);
407
- return storage ? storage.removeComponent(entityId) : null;
408
- }
409
- /**
410
- * 移除实体的所有组件
411
- * @param entityId 实体ID
412
- */
413
- removeAllComponents(entityId) {
414
- for (const storage of this.storages.values()) {
415
- storage.removeComponent(entityId);
416
- }
417
- }
418
- /**
419
- * 获取实体的组件位掩码
420
- * @param entityId 实体ID
421
- * @returns 组件位掩码
422
- */
423
- getComponentMask(entityId) {
424
- let mask = BigIntFactory.zero();
425
- for (const [componentType, storage] of this.storages.entries()) {
426
- if (storage.hasComponent(entityId)) {
427
- const componentMask = ComponentRegistry.getBitMask(componentType);
428
- mask = mask.or(componentMask);
429
- }
430
- }
431
- return mask;
432
- }
433
- /**
434
- * 压缩所有存储器
435
- */
436
- compactAll() {
437
- for (const storage of this.storages.values()) {
438
- storage.compact();
439
- }
440
- }
441
- /**
442
- * 获取所有存储器的统计信息
443
- */
444
- getAllStats() {
445
- const stats = new Map();
446
- for (const [componentType, storage] of this.storages.entries()) {
447
- const typeName = componentType.name || 'Unknown';
448
- stats.set(typeName, storage.getStats());
449
- }
450
- return stats;
451
- }
452
- /**
453
- * 清空所有存储器
454
- */
455
- clear() {
456
- for (const storage of this.storages.values()) {
457
- storage.clear();
458
- }
459
- this.storages.clear();
460
- }
461
- }
462
- ComponentStorageManager._logger = createLogger('ComponentStorage');
463
- //# sourceMappingURL=ComponentStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ComponentStorage.js","sourceRoot":"","sources":["../../../src/ECS/Core/ComponentStorage.ts"],"names":[],"mappings":"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"}
@@ -1,197 +0,0 @@
1
- import { Entity } from '../Entity';
2
- import { ComponentType } from './ComponentStorage';
3
- /**
4
- * 脏标记类型
5
- */
6
- export declare enum DirtyFlag {
7
- /** 组件数据已修改 */
8
- COMPONENT_MODIFIED = 1,
9
- /** 组件已添加 */
10
- COMPONENT_ADDED = 2,
11
- /** 组件已移除 */
12
- COMPONENT_REMOVED = 4,
13
- /** 实体位置已改变 */
14
- TRANSFORM_CHANGED = 8,
15
- /** 实体状态已改变 */
16
- STATE_CHANGED = 16,
17
- /** 自定义标记1 */
18
- CUSTOM_1 = 256,
19
- /** 自定义标记2 */
20
- CUSTOM_2 = 512,
21
- /** 自定义标记3 */
22
- CUSTOM_3 = 1024,
23
- /** 所有标记 */
24
- ALL = 4294967295
25
- }
26
- /**
27
- * 脏标记数据
28
- */
29
- export interface DirtyData {
30
- /** 实体引用 */
31
- entity: Entity;
32
- /** 脏标记位 */
33
- flags: number;
34
- /** 修改的组件类型列表 */
35
- modifiedComponents: Set<ComponentType>;
36
- /** 标记时间戳 */
37
- timestamp: number;
38
- /** 帧编号 */
39
- frameNumber: number;
40
- }
41
- /**
42
- * 脏标记监听器
43
- */
44
- export interface DirtyListener {
45
- /** 感兴趣的标记类型 */
46
- flags: number;
47
- /** 回调函数 */
48
- callback: (dirtyData: DirtyData) => void;
49
- /** 监听器优先级(数字越小优先级越高) */
50
- priority?: number;
51
- }
52
- /**
53
- * 脏标记统计信息
54
- */
55
- export interface DirtyStats {
56
- /** 当前脏实体数量 */
57
- dirtyEntityCount: number;
58
- /** 总标记次数 */
59
- totalMarkings: number;
60
- /** 总清理次数 */
61
- totalCleanups: number;
62
- /** 监听器数量 */
63
- listenerCount: number;
64
- /** 平均每帧脏实体数量 */
65
- avgDirtyPerFrame: number;
66
- /** 内存使用量估算 */
67
- estimatedMemoryUsage: number;
68
- }
69
- /**
70
- * 脏标记追踪系统
71
- *
72
- * 提供高效的组件和实体变更追踪,避免不必要的计算和更新。
73
- * 支持细粒度的脏标记和批量处理机制。
74
- *
75
- * @example
76
- * ```typescript
77
- * const dirtySystem = new DirtyTrackingSystem();
78
- *
79
- * // 标记实体的位置组件已修改
80
- * dirtySystem.markDirty(entity, DirtyFlag.TRANSFORM_CHANGED, [PositionComponent]);
81
- *
82
- * // 监听位置变化
83
- * dirtySystem.addListener({
84
- * flags: DirtyFlag.TRANSFORM_CHANGED,
85
- * callback: (data) => {
86
- * logger.debug('Entity position changed:', data.entity.name);
87
- * }
88
- * });
89
- *
90
- * // 处理所有脏标记
91
- * dirtySystem.processDirtyEntities();
92
- * ```
93
- */
94
- export declare class DirtyTrackingSystem {
95
- private static readonly _logger;
96
- /** 脏实体映射表 */
97
- private _dirtyEntities;
98
- /** 脏标记监听器 */
99
- private _listeners;
100
- /** 性能统计 */
101
- private _stats;
102
- /** 当前帧编号 */
103
- private _currentFrame;
104
- private _batchSize;
105
- private _maxProcessingTime;
106
- /** 延迟处理队列 */
107
- private _processingQueue;
108
- private _isProcessing;
109
- /**
110
- * 标记实体为脏状态
111
- *
112
- * @param entity 要标记的实体
113
- * @param flags 脏标记位
114
- * @param modifiedComponents 修改的组件类型列表
115
- */
116
- markDirty(entity: Entity, flags: DirtyFlag, modifiedComponents?: ComponentType[]): void;
117
- /**
118
- * 检查实体是否有指定的脏标记
119
- *
120
- * @param entity 要检查的实体
121
- * @param flags 要检查的标记位
122
- * @returns 是否有指定的脏标记
123
- */
124
- isDirty(entity: Entity, flags?: DirtyFlag): boolean;
125
- /**
126
- * 清除实体的脏标记
127
- *
128
- * @param entity 要清除的实体
129
- * @param flags 要清除的标记位,默认清除所有
130
- */
131
- clearDirty(entity: Entity, flags?: DirtyFlag): void;
132
- /**
133
- * 获取所有脏实体
134
- *
135
- * @param flags 过滤标记位,只返回包含指定标记的实体
136
- * @returns 脏实体数据数组
137
- */
138
- getDirtyEntities(flags?: DirtyFlag): DirtyData[];
139
- /**
140
- * 批量处理脏实体
141
- *
142
- * 使用时间分片的方式处理脏实体,避免单帧卡顿
143
- */
144
- processDirtyEntities(): void;
145
- /**
146
- * 添加脏标记监听器
147
- *
148
- * @param listener 监听器配置
149
- */
150
- addListener(listener: DirtyListener): void;
151
- /**
152
- * 移除脏标记监听器
153
- *
154
- * @param callback 要移除的回调函数
155
- */
156
- removeListener(callback: (dirtyData: DirtyData) => void): void;
157
- /**
158
- * 开始新的帧
159
- */
160
- beginFrame(): void;
161
- /**
162
- * 结束当前帧
163
- */
164
- endFrame(): void;
165
- /**
166
- * 获取统计信息
167
- */
168
- getStats(): DirtyStats;
169
- /**
170
- * 清空所有脏标记和统计信息
171
- */
172
- clear(): void;
173
- /**
174
- * 配置批量处理参数
175
- *
176
- * @param batchSize 每次处理的最大实体数量
177
- * @param maxProcessingTime 每帧最大处理时间(毫秒)
178
- */
179
- configureBatchProcessing(batchSize: number, maxProcessingTime: number): void;
180
- /**
181
- * 处理单个脏实体
182
- */
183
- private processEntity;
184
- /**
185
- * 通知监听器
186
- */
187
- private notifyListeners;
188
- /**
189
- * 帧结束时的统计更新
190
- */
191
- private onFrameEnd;
192
- /**
193
- * 估算内存使用量
194
- */
195
- private estimateMemoryUsage;
196
- }
197
- //# sourceMappingURL=DirtyTrackingSystem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DirtyTrackingSystem.d.ts","sourceRoot":"","sources":["../../../src/ECS/Core/DirtyTrackingSystem.ts"],"names":[],"mappings":"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"}