murow 0.0.60 → 0.0.71

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 (425) hide show
  1. package/README.md +52 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core/loop → types/core/driver}/drivers/immediate.d.ts +1 -1
  156. package/dist/{core/loop → types/core/driver}/drivers/raf.d.ts +1 -1
  157. package/dist/{core/loop → types/core/driver}/drivers/timeout.d.ts +1 -1
  158. package/dist/{core/loop → types/core/driver}/index.d.ts +1 -1
  159. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  160. package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +1 -1
  161. package/dist/types/core/free-list/free-list.d.ts +31 -0
  162. package/dist/types/core/free-list/index.d.ts +1 -0
  163. package/dist/{core → types/core}/index.d.ts +7 -1
  164. package/dist/types/core/input/index.d.ts +3 -0
  165. package/dist/types/core/input/manager.d.ts +56 -0
  166. package/dist/types/core/input/sources/browser.d.ts +9 -0
  167. package/dist/types/core/input/sources/index.d.ts +1 -0
  168. package/dist/types/core/input/types.d.ts +36 -0
  169. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  170. package/dist/types/core/ray/index.d.ts +2 -0
  171. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  172. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  173. package/dist/types/core/simple-rng/index.d.ts +1 -0
  174. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  175. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  176. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  177. package/dist/{ecs → types/ecs}/system-builder.d.ts +20 -9
  178. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  179. package/dist/types/game/index.d.ts +1 -0
  180. package/dist/types/game/loop/index.d.ts +1 -0
  181. package/dist/types/game/loop/loop.d.ts +175 -0
  182. package/dist/{index.d.ts → types/index.d.ts} +2 -0
  183. package/dist/{net → types/net}/index.d.ts +2 -2
  184. package/dist/{net → types/net}/server.d.ts +39 -19
  185. package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +15 -0
  186. package/dist/{protocol → types/protocol}/intent/index.d.ts +1 -1
  187. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  188. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  189. package/dist/types/renderer/base-renderer.d.ts +21 -0
  190. package/dist/types/renderer/index.d.ts +4 -0
  191. package/dist/types/renderer/types.d.ts +79 -0
  192. package/dist/webgpu/cjs/index.js +6004 -0
  193. package/dist/webgpu/esm/index.js +5972 -0
  194. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  195. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  196. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  197. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  198. package/dist/webgpu/types/2d/sprite-accessor.test.d.ts +1 -0
  199. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  200. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  201. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  202. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  203. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  204. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  205. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  206. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  207. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  208. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  209. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  210. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  211. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  212. package/dist/webgpu/types/camera/index.d.ts +2 -0
  213. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  214. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  215. package/dist/webgpu/types/core/constants.d.ts +59 -0
  216. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  217. package/dist/webgpu/types/core/index.d.ts +2 -0
  218. package/dist/webgpu/types/core/math.d.ts +37 -0
  219. package/dist/webgpu/types/core/types.d.ts +125 -0
  220. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  221. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  222. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  223. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  224. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  225. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  226. package/dist/webgpu/types/index.d.ts +32 -0
  227. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  228. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  229. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  230. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  231. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  232. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  233. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  234. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  235. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  236. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  237. package/package.json +96 -26
  238. package/dist/core/binary-codec/binary-codec.js +0 -354
  239. package/dist/core/binary-codec/index.js +0 -1
  240. package/dist/core/events/event-system.js +0 -88
  241. package/dist/core/events/index.js +0 -1
  242. package/dist/core/fixed-ticker/fixed-ticker.js +0 -101
  243. package/dist/core/fixed-ticker/index.js +0 -1
  244. package/dist/core/generate-id/generate-id.js +0 -25
  245. package/dist/core/generate-id/index.js +0 -1
  246. package/dist/core/index.js +0 -9
  247. package/dist/core/lerp/index.js +0 -1
  248. package/dist/core/lerp/lerp.js +0 -42
  249. package/dist/core/loop/drivers/immediate.js +0 -61
  250. package/dist/core/loop/drivers/index.js +0 -3
  251. package/dist/core/loop/drivers/raf.js +0 -62
  252. package/dist/core/loop/drivers/timeout.js +0 -71
  253. package/dist/core/loop/index.js +0 -2
  254. package/dist/core/loop/loop.js +0 -47
  255. package/dist/core/navmesh/index.js +0 -1
  256. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  257. package/dist/core/navmesh/navmesh.js +0 -799
  258. package/dist/core/navmesh/navmesh.worker.js +0 -79
  259. package/dist/core/pooled-codec/index.js +0 -1
  260. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  261. package/dist/core/prediction/index.js +0 -1
  262. package/dist/core/prediction/prediction.js +0 -99
  263. package/dist/core.esm.js +0 -1
  264. package/dist/core.js +0 -1
  265. package/dist/ecs/component-store.js +0 -175
  266. package/dist/ecs/component.js +0 -43
  267. package/dist/ecs/entity-handle.js +0 -515
  268. package/dist/ecs/example.js +0 -125
  269. package/dist/ecs/index.js +0 -4
  270. package/dist/ecs/system-builder.js +0 -180
  271. package/dist/ecs/system.d.ts +0 -63
  272. package/dist/ecs/system.js +0 -92
  273. package/dist/ecs/world-systems.js +0 -79
  274. package/dist/ecs/world.js +0 -684
  275. package/dist/index.js +0 -24
  276. package/dist/net/adapters/browser-websocket.js +0 -74
  277. package/dist/net/adapters/bun-websocket.js +0 -245
  278. package/dist/net/buffer-pool.js +0 -89
  279. package/dist/net/client.js +0 -586
  280. package/dist/net/index.js +0 -58
  281. package/dist/net/server.js +0 -938
  282. package/dist/net/types.js +0 -31
  283. package/dist/net/validators.js +0 -88
  284. package/dist/protocol/index.js +0 -92
  285. package/dist/protocol/intent/define-intent.js +0 -125
  286. package/dist/protocol/intent/index.js +0 -91
  287. package/dist/protocol/intent/intent-registry.js +0 -91
  288. package/dist/protocol/rpc/define-rpc.js +0 -84
  289. package/dist/protocol/rpc/index.js +0 -3
  290. package/dist/protocol/rpc/rpc-registry.js +0 -159
  291. package/dist/protocol/rpc/rpc.js +0 -12
  292. package/dist/protocol/snapshot/index.js +0 -43
  293. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  294. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  295. package/dist/protocol/snapshot/snapshot.js +0 -30
  296. package/src/core/binary-codec/README.md +0 -60
  297. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  298. package/src/core/binary-codec/binary-codec.ts +0 -448
  299. package/src/core/binary-codec/index.ts +0 -1
  300. package/src/core/events/README.md +0 -47
  301. package/src/core/events/event-system.test.ts +0 -243
  302. package/src/core/events/event-system.ts +0 -140
  303. package/src/core/events/index.ts +0 -1
  304. package/src/core/fixed-ticker/README.md +0 -77
  305. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  306. package/src/core/fixed-ticker/fixed-ticker.ts +0 -169
  307. package/src/core/fixed-ticker/index.ts +0 -1
  308. package/src/core/generate-id/README.md +0 -18
  309. package/src/core/generate-id/generate-id.test.ts +0 -79
  310. package/src/core/generate-id/generate-id.ts +0 -37
  311. package/src/core/generate-id/index.ts +0 -1
  312. package/src/core/index.ts +0 -9
  313. package/src/core/lerp/README.md +0 -79
  314. package/src/core/lerp/index.ts +0 -1
  315. package/src/core/lerp/lerp.test.ts +0 -90
  316. package/src/core/lerp/lerp.ts +0 -42
  317. package/src/core/loop/README.md +0 -97
  318. package/src/core/loop/drivers/immediate.ts +0 -66
  319. package/src/core/loop/drivers/index.ts +0 -3
  320. package/src/core/loop/drivers/raf.ts +0 -67
  321. package/src/core/loop/drivers/timeout.ts +0 -77
  322. package/src/core/loop/index.ts +0 -2
  323. package/src/core/loop/loop.test.ts +0 -414
  324. package/src/core/loop/loop.ts +0 -71
  325. package/src/core/navmesh/README.md +0 -164
  326. package/src/core/navmesh/index.ts +0 -1
  327. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  328. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  329. package/src/core/navmesh/navmesh.test.ts +0 -344
  330. package/src/core/navmesh/navmesh.ts +0 -1047
  331. package/src/core/navmesh/navmesh.worker.ts +0 -147
  332. package/src/core/pooled-codec/README.md +0 -70
  333. package/src/core/pooled-codec/index.ts +0 -1
  334. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  335. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  336. package/src/core/prediction/README.md +0 -64
  337. package/src/core/prediction/index.ts +0 -1
  338. package/src/core/prediction/prediction.test.ts +0 -423
  339. package/src/core/prediction/prediction.ts +0 -112
  340. package/src/ecs/README.md +0 -427
  341. package/src/ecs/benchmark.test.ts +0 -1645
  342. package/src/ecs/component-store.ts +0 -198
  343. package/src/ecs/component.ts +0 -90
  344. package/src/ecs/entity-handle.test.ts +0 -393
  345. package/src/ecs/entity-handle.ts +0 -563
  346. package/src/ecs/example.ts +0 -152
  347. package/src/ecs/index.ts +0 -4
  348. package/src/ecs/system-builder.ts +0 -309
  349. package/src/ecs/system.ts +0 -111
  350. package/src/ecs/world-systems.ts +0 -83
  351. package/src/ecs/world.test.ts +0 -310
  352. package/src/ecs/world.ts +0 -828
  353. package/src/index.ts +0 -28
  354. package/src/net/README.md +0 -474
  355. package/src/net/adapters/browser-websocket.ts +0 -86
  356. package/src/net/adapters/bun-websocket.ts +0 -292
  357. package/src/net/buffer-pool.ts +0 -106
  358. package/src/net/client.test.ts +0 -807
  359. package/src/net/client.ts +0 -695
  360. package/src/net/index.ts +0 -60
  361. package/src/net/server.test.ts +0 -799
  362. package/src/net/server.ts +0 -1116
  363. package/src/net/types.ts +0 -228
  364. package/src/net/validators.ts +0 -104
  365. package/src/protocol/README.md +0 -469
  366. package/src/protocol/index.ts +0 -93
  367. package/src/protocol/intent/define-intent.test.ts +0 -397
  368. package/src/protocol/intent/define-intent.ts +0 -182
  369. package/src/protocol/intent/index.ts +0 -94
  370. package/src/protocol/intent/intent-registry.test.ts +0 -198
  371. package/src/protocol/intent/intent-registry.ts +0 -112
  372. package/src/protocol/intent/intent.ts +0 -12
  373. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  374. package/src/protocol/rpc/define-rpc.ts +0 -113
  375. package/src/protocol/rpc/index.ts +0 -3
  376. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  377. package/src/protocol/rpc/rpc-registry.ts +0 -176
  378. package/src/protocol/rpc/rpc.ts +0 -37
  379. package/src/protocol/snapshot/index.ts +0 -45
  380. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  381. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  382. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  383. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  384. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  385. package/src/protocol/snapshot/snapshot.ts +0 -41
  386. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  387. /package/dist/{core/loop/loop.d.ts → types/core/driver/driver.d.ts} +0 -0
  388. /package/dist/{core/loop → types/core/driver}/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  390. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  391. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  392. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  394. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  395. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  396. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  397. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  398. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  400. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  402. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  403. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  404. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  405. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  406. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  407. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  408. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  409. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  410. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  411. /package/dist/{net → types/net}/client.d.ts +0 -0
  412. /package/dist/{net → types/net}/types.d.ts +0 -0
  413. /package/dist/{net → types/net}/validators.d.ts +0 -0
  414. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  415. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  416. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  417. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  418. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  419. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  420. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  421. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  422. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  423. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  424. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  425. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/animation.test.d.ts} +0 -0
@@ -1,101 +0,0 @@
1
- /**
2
- * @description
3
- * A utility class for managing fixed-rate update ticks, useful for deterministic behaviour
4
- * in both client and server.
5
- *
6
- * The `FixedTicker` accumulates elapsed time and determines how many fixed-interval "ticks"
7
- * should be processed based on a specified tick rate. It also limits the maximum number of
8
- * ticks per frame to prevent runaway update loops when frame times are long.
9
- *
10
- *
11
- * @remarks
12
- * - The `tick` method should be called once per frame, passing the elapsed time in seconds.
13
- * - The class ensures that no more than a safe number of ticks are processed per frame.
14
- */
15
- export class FixedTicker {
16
- constructor({ rate, onTick }) {
17
- /**
18
- * @description Accumulator for the time passed since the last tick
19
- */
20
- this.accumulator = 0;
21
- /**
22
- * @description
23
- * Internal counter for the number of ticks processed.
24
- */
25
- this._tickCount = 0;
26
- this.rate = rate;
27
- this.intervalMs = 1000 / this.rate;
28
- this.onTick = onTick;
29
- // Allow up to rate/2 ticks per frame, but at least 1.
30
- // Prevents runaway loops if delta is too large.
31
- this.maxTicksPerFrame = Math.max(1, Math.floor(rate / 2));
32
- }
33
- /**
34
- * @description
35
- * Returns how many ticks to run.
36
- *
37
- * @param deltaTime Delta time in seconds
38
- * @returns {number} Amount of ticks to run
39
- */
40
- getTicks(deltaTime) {
41
- this.accumulator += deltaTime * 1000;
42
- let ticks = 0;
43
- while (this.accumulator >= this.intervalMs &&
44
- ticks < this.maxTicksPerFrame) {
45
- this.accumulator -= this.intervalMs;
46
- ticks++;
47
- }
48
- const skippedTicks = Math.floor(this.accumulator / this.intervalMs);
49
- if (skippedTicks > 0 && this.onTickSkipped) {
50
- this.onTickSkipped(skippedTicks);
51
- }
52
- return ticks;
53
- }
54
- /**
55
- * @description
56
- * Processes the ticks based on the elapsed time.
57
- *
58
- * @param deltaTime Delta time in seconds
59
- */
60
- tick(deltaTime) {
61
- const ticks = this.getTicks(deltaTime);
62
- for (let i = 0; i < ticks; i++) {
63
- this.onTick(1 / this.rate, this._tickCount++);
64
- }
65
- }
66
- /**
67
- * @description
68
- * Returns the number of ticks processed since the last reset.
69
- *
70
- * @returns {number} Number of ticks processed
71
- */
72
- get tickCount() {
73
- return this._tickCount;
74
- }
75
- /**
76
- * @description
77
- * Resets the tick count to zero.
78
- */
79
- resetTickCount() {
80
- this._tickCount = 0;
81
- }
82
- /**
83
- * @description
84
- * Returns the accumulated time in seconds, useful for interpolation.
85
- *
86
- * @returns {number} Accumulated time in seconds
87
- */
88
- get accumulatedTime() {
89
- return this.accumulator / 1000; // Convert to seconds
90
- }
91
- /**
92
- * @description
93
- * Returns the interpolation factor between 0 and 1 for smooth rendering between ticks.
94
- * Clamped to prevent extrapolation when ticks are skipped.
95
- *
96
- * @returns {number} Alpha value between 0 and 1
97
- */
98
- get alpha() {
99
- return Math.min(this.accumulatedTime / (1 / this.rate), 1.0);
100
- }
101
- }
@@ -1 +0,0 @@
1
- export * from './fixed-ticker';
@@ -1,25 +0,0 @@
1
- /**
2
- * @description
3
- * Generates a unique identifier as a hexadecimal string.
4
- * Can include a prefix and a custom total length.
5
- *
6
- * @param options Optional configuration: prefix and total size
7
- * @returns A unique identifier string
8
- *
9
- * @example
10
- * generateId(); // "f3a2b1c4d5e67890"
11
- * generateId({ prefix: 'user_' }); // "user_f3a2b1c4d5e67890"
12
- * generateId({ prefix: 'user_', size: 24 }); // "user_00f3a2b1c4d5e67890"
13
- */
14
- export function generateId(options = {}) {
15
- const { prefix = "", size = 16 } = options;
16
- // compute number of hex characters to generate (subtract prefix length)
17
- const hexLength = Math.max(size - prefix.length, 8); // min 8 hex chars
18
- // number of 32-bit integers needed to cover the hexLength
19
- const numInts = Math.ceil(hexLength / 8);
20
- const arr = crypto.getRandomValues(new Uint32Array(numInts));
21
- let id = arr.reduce((acc, val) => acc + val.toString(16).padStart(8, "0"), "");
22
- // truncate/pad to desired length
23
- id = id.slice(0, hexLength).padStart(hexLength, "0");
24
- return `${prefix}${id}`;
25
- }
@@ -1 +0,0 @@
1
- export * from './generate-id';
@@ -1,9 +0,0 @@
1
- export * from './binary-codec';
2
- export * from './events';
3
- export * from './fixed-ticker';
4
- export * from './generate-id';
5
- export * from './lerp';
6
- export * from './loop';
7
- export * from './navmesh';
8
- export * from './pooled-codec';
9
- export * from './prediction';
@@ -1 +0,0 @@
1
- export * from './lerp';
@@ -1,42 +0,0 @@
1
- /**
2
- * @description
3
- * Performs linear interpolation between two values.
4
- *
5
- * Linear interpolation (lerp) calculates a value between a start and end point
6
- * based on a normalized interpolation factor (t). When t = 0, the result equals
7
- * the start value; when t = 1, the result equals the end value. Values of t
8
- * between 0 and 1 produce intermediate results.
9
- *
10
- * @remarks
11
- * - This function does not clamp the interpolation factor. Values of t outside
12
- * the range [0, 1] will extrapolate beyond the start and end values.
13
- * - For clamped interpolation, combine with a clamp function on the t parameter.
14
- * - Commonly used for smooth animations, camera movements, and value transitions.
15
- *
16
- * @param start - The starting value (when t = 0)
17
- * @param end - The ending value (when t = 1)
18
- * @param t - The interpolation factor, typically in the range [0, 1]
19
- *
20
- * @returns {number} The interpolated value between start and end
21
- *
22
- * @example
23
- * ```typescript
24
- * // Basic interpolation
25
- * lerp(0, 100, 0.5); // Returns 50
26
- * lerp(0, 100, 0); // Returns 0
27
- * lerp(0, 100, 1); // Returns 100
28
- *
29
- * // Animation example
30
- * const startPos = 0;
31
- * const endPos = 100;
32
- * const progress = 0.75;
33
- * const currentPos = lerp(startPos, endPos, progress); // Returns 75
34
- *
35
- * // Extrapolation (t outside [0, 1])
36
- * lerp(0, 100, 1.5); // Returns 150
37
- * lerp(0, 100, -0.5); // Returns -50
38
- * ```
39
- */
40
- export function lerp(start, end, t) {
41
- return start + (end - start) * t;
42
- }
@@ -1,61 +0,0 @@
1
- /**
2
- * Server-side game loop driver using setImmediate.
3
- *
4
- * This driver runs the game loop as fast as possible without blocking the event loop,
5
- * making it suitable for Node.js server environments where high tick rates are desired.
6
- *
7
- * Delta time is automatically calculated between iterations and passed to the update callback in seconds.
8
- *
9
- * **Note:** This driver requires Node.js as it uses `setImmediate` which is not available in browsers.
10
- *
11
- * @example
12
- * ```typescript
13
- * const driver = new ImmediateDriver((dt) => {
14
- * world.tick(dt);
15
- * broadcastState();
16
- * });
17
- * driver.start();
18
- * ```
19
- */
20
- export class ImmediateDriver {
21
- /**
22
- * @param update - Callback invoked each tick with delta time in seconds
23
- */
24
- constructor(update) {
25
- this.update = update;
26
- this.last = performance.now();
27
- this.running = false;
28
- /**
29
- * Internal loop method that calculates delta time and schedules the next iteration.
30
- *
31
- * Delta time is provided in seconds.
32
- */
33
- this.loop = () => {
34
- if (!this.running)
35
- return;
36
- const now = performance.now();
37
- const dt = (now - this.last) / 1000;
38
- this.last = now;
39
- this.update(dt);
40
- setImmediate(this.loop);
41
- };
42
- }
43
- /**
44
- * Starts the game loop using setImmediate.
45
- *
46
- * Resets timing to prevent large initial delta.
47
- */
48
- start() {
49
- this.running = true;
50
- this.last = performance.now();
51
- this.loop();
52
- }
53
- /**
54
- * Stops the game loop.
55
- *
56
- * Note: Does not cancel already queued setImmediate callbacks.
57
- */
58
- stop() {
59
- this.running = false;
60
- }
61
- }
@@ -1,3 +0,0 @@
1
- export * from "./immediate";
2
- export * from "./raf";
3
- export * from "./timeout";
@@ -1,62 +0,0 @@
1
- /**
2
- * Client-side game loop driver using requestAnimationFrame.
3
- *
4
- * This driver synchronizes updates with the browser's display refresh rate (typically 60 FPS),
5
- * providing smooth rendering and automatic throttling when the tab is not visible.
6
- *
7
- * Delta time is automatically calculated between frames and passed to the update callback in seconds.
8
- *
9
- * @example
10
- * ```typescript
11
- * const driver = new RafDriver((dt) => {
12
- * player.update(dt);
13
- * renderer.render();
14
- * });
15
- * driver.start();
16
- * ```
17
- */
18
- export class RafDriver {
19
- /**
20
- * @param update - Callback invoked each frame with delta time in seconds
21
- */
22
- constructor(update) {
23
- this.update = update;
24
- this.last = performance.now();
25
- this.running = false;
26
- this.rafId = null;
27
- /**
28
- * Internal loop method that calculates delta time and schedules the next frame.
29
- *
30
- * Delta time is provided in seconds.
31
- */
32
- this.loop = () => {
33
- if (!this.running)
34
- return;
35
- const now = performance.now();
36
- const dt = (now - this.last) / 1000;
37
- this.last = now;
38
- this.update(dt);
39
- requestAnimationFrame(this.loop);
40
- };
41
- }
42
- /**
43
- * Starts the game loop using requestAnimationFrame.
44
- *
45
- * Resets timing to prevent large initial delta.
46
- */
47
- start() {
48
- this.running = true;
49
- this.last = performance.now();
50
- this.rafId = requestAnimationFrame(this.loop);
51
- }
52
- /**
53
- * Stops the game loop and cancels any pending animation frame.
54
- */
55
- stop() {
56
- this.running = false;
57
- if (this.rafId !== null) {
58
- cancelAnimationFrame(this.rafId);
59
- this.rafId = null;
60
- }
61
- }
62
- }
@@ -1,71 +0,0 @@
1
- /**
2
- * Minimal delay for setTimeout-based loop scheduling.
3
- * Using 1ms allows the event loop to process I/O while still maintaining high tick rates.
4
- */
5
- const TIMEOUT_DELAY = 1;
6
- /**
7
- * Server-side game loop driver using setTimeout.
8
- *
9
- * This driver provides a more controlled alternative to setImmediate, running the game loop
10
- * with a minimal delay (1ms) between iterations. This ensures the event loop can process
11
- * I/O operations while maintaining high tick rates.
12
- *
13
- * Unlike setImmediate which runs as fast as possible, setTimeout provides better I/O responsiveness
14
- * by yielding to the event loop between ticks with a minimal delay.
15
- *
16
- * Delta time is automatically calculated between iterations and passed to the update callback in seconds.
17
- *
18
- * **Note:** This driver is designed for Node.js/Bun server environments. For maximum performance
19
- * without I/O concerns, use ImmediateDriver instead.
20
- *
21
- * @example
22
- * ```typescript
23
- * const driver = new TimeoutDriver((dt) => {
24
- * world.tick(dt);
25
- * broadcastState();
26
- * });
27
- * driver.start();
28
- * ```
29
- */
30
- export class TimeoutDriver {
31
- /**
32
- * @param update - Callback invoked each tick with delta time in seconds
33
- */
34
- constructor(update) {
35
- this.update = update;
36
- this.last = performance.now();
37
- this.running = false;
38
- /**
39
- * Internal loop method that calculates delta time and schedules the next iteration.
40
- *
41
- * Delta time is provided in seconds. Uses 1ms delay to allow I/O processing.
42
- */
43
- this.loop = () => {
44
- if (!this.running)
45
- return;
46
- const now = performance.now();
47
- const dt = (now - this.last) / 1000;
48
- this.last = now;
49
- this.update(dt);
50
- setTimeout(this.loop, TIMEOUT_DELAY);
51
- };
52
- }
53
- /**
54
- * Starts the game loop using setTimeout with minimal delay.
55
- *
56
- * Resets timing to prevent large initial delta.
57
- */
58
- start() {
59
- this.running = true;
60
- this.last = performance.now();
61
- this.loop();
62
- }
63
- /**
64
- * Stops the game loop.
65
- *
66
- * Note: Does not cancel already queued setTimeout callbacks.
67
- */
68
- stop() {
69
- this.running = false;
70
- }
71
- }
@@ -1,2 +0,0 @@
1
- export * from './loop';
2
- export * from './drivers';
@@ -1,47 +0,0 @@
1
- import { ImmediateDriver, RafDriver, TimeoutDriver } from "./drivers";
2
- // Re-export driver classes for testing and direct usage
3
- export { ImmediateDriver, RafDriver, TimeoutDriver };
4
- /**
5
- * Factory function to create a loop driver for the specified environment.
6
- *
7
- * @param type - The environment type
8
- * - `'client'`: Browser RAF driver (60 FPS, syncs with display)
9
- * - `'server'`: Node.js setImmediate driver (maximum performance)
10
- * - `'server-timeout'`: Node.js setTimeout driver (balanced with I/O)
11
- * @param update - Callback function invoked each frame with delta time in seconds
12
- * @returns A configured LoopDriver instance ready to start
13
- *
14
- * @example
15
- * ```typescript
16
- * // Client
17
- * const clientDriver = createDriver('client', (dt) => {
18
- * game.update(dt);
19
- * renderer.render();
20
- * });
21
- * clientDriver.start();
22
- *
23
- * // Server (maximum performance)
24
- * const serverDriver = createDriver('server', (dt) => {
25
- * simulation.tick(dt);
26
- * });
27
- * serverDriver.start();
28
- *
29
- * // Server (balanced with I/O)
30
- * const balancedDriver = createDriver('server-timeout', (dt) => {
31
- * simulation.tick(dt);
32
- * handleNetworkIO();
33
- * });
34
- * balancedDriver.start();
35
- * ```
36
- */
37
- export function createDriver(type, update) {
38
- if (type === 'server-immediate') {
39
- return new ImmediateDriver(update);
40
- }
41
- else if (type === 'server-timeout') {
42
- return new TimeoutDriver(update);
43
- }
44
- else {
45
- return new RafDriver(update);
46
- }
47
- }
@@ -1 +0,0 @@
1
- export * from './navmesh';
@@ -1,180 +0,0 @@
1
- /**
2
- * NavMesh Worker Pool - Manages multiple workers for parallel pathfinding
3
- */
4
- export class NavMeshWorkerPool {
5
- constructor(poolSize, workerPath, navType = 'grid', obstacles = []) {
6
- this.poolSize = poolSize;
7
- this.workerPath = workerPath;
8
- this.navType = navType;
9
- this.obstacles = obstacles;
10
- this.workers = [];
11
- this.nextWorkerIndex = 0;
12
- this.requestId = 0;
13
- this.pendingRequests = new Map();
14
- this.initialized = false;
15
- }
16
- /**
17
- * Initialize all workers in the pool
18
- */
19
- async init() {
20
- if (this.initialized)
21
- return;
22
- const initPromises = [];
23
- for (let i = 0; i < this.poolSize; i++) {
24
- const worker = new Worker(this.workerPath, { type: 'module' });
25
- // Set up message handler
26
- worker.onmessage = (e) => {
27
- const msg = e.data;
28
- if (msg.type === 'PATH_RESULT') {
29
- const request = this.pendingRequests.get(msg.id);
30
- if (request) {
31
- request.resolve(msg.path);
32
- this.pendingRequests.delete(msg.id);
33
- }
34
- }
35
- else if (msg.type === 'ERROR') {
36
- // Reject all pending requests for this worker
37
- for (const [id, request] of this.pendingRequests.entries()) {
38
- request.reject(new Error(msg.error));
39
- this.pendingRequests.delete(id);
40
- }
41
- }
42
- };
43
- worker.onerror = (error) => {
44
- console.error('Worker error:', error);
45
- // Reject all pending requests for this worker
46
- for (const [id, request] of this.pendingRequests.entries()) {
47
- request.reject(new Error('Worker error'));
48
- this.pendingRequests.delete(id);
49
- }
50
- };
51
- this.workers.push(worker);
52
- // Initialize worker
53
- const readyPromise = new Promise((resolve) => {
54
- const onReady = (e) => {
55
- if (e.data.type === 'READY') {
56
- worker.removeEventListener('message', onReady);
57
- resolve();
58
- }
59
- };
60
- worker.addEventListener('message', onReady);
61
- });
62
- worker.postMessage({
63
- type: 'INIT',
64
- navType: this.navType,
65
- obstacles: this.obstacles,
66
- });
67
- initPromises.push(readyPromise);
68
- }
69
- await Promise.all(initPromises);
70
- this.initialized = true;
71
- }
72
- /**
73
- * Find a path using the next available worker (round-robin)
74
- */
75
- async findPath(from, to) {
76
- if (!this.initialized) {
77
- throw new Error('Worker pool not initialized. Call init() first.');
78
- }
79
- const id = this.requestId++;
80
- const worker = this.workers[this.nextWorkerIndex];
81
- this.nextWorkerIndex = (this.nextWorkerIndex + 1) % this.workers.length;
82
- return new Promise((resolve, reject) => {
83
- this.pendingRequests.set(id, { id, from, to, resolve, reject });
84
- worker.postMessage({
85
- type: 'FIND_PATH',
86
- id,
87
- from,
88
- to,
89
- });
90
- });
91
- }
92
- /**
93
- * Add an obstacle to all workers
94
- */
95
- async addObstacle(obstacle) {
96
- if (!this.initialized) {
97
- throw new Error('Worker pool not initialized. Call init() first.');
98
- }
99
- // Add to all workers
100
- const promises = this.workers.map((worker) => {
101
- return new Promise((resolve) => {
102
- const onAdded = (e) => {
103
- if (e.data.type === 'OBSTACLE_ADDED') {
104
- worker.removeEventListener('message', onAdded);
105
- resolve(e.data.obstacleId);
106
- }
107
- };
108
- worker.addEventListener('message', onAdded);
109
- worker.postMessage({ type: 'ADD_OBSTACLE', obstacle });
110
- });
111
- });
112
- const ids = await Promise.all(promises);
113
- return ids[0]; // All workers should return the same ID
114
- }
115
- /**
116
- * Remove an obstacle from all workers
117
- */
118
- async removeObstacle(obstacleId) {
119
- if (!this.initialized) {
120
- throw new Error('Worker pool not initialized. Call init() first.');
121
- }
122
- const promises = this.workers.map((worker) => {
123
- return new Promise((resolve) => {
124
- const onRemoved = (e) => {
125
- if (e.data.type === 'OBSTACLE_REMOVED') {
126
- worker.removeEventListener('message', onRemoved);
127
- resolve();
128
- }
129
- };
130
- worker.addEventListener('message', onRemoved);
131
- worker.postMessage({ type: 'REMOVE_OBSTACLE', obstacleId });
132
- });
133
- });
134
- await Promise.all(promises);
135
- }
136
- /**
137
- * Move an obstacle in all workers
138
- */
139
- async moveObstacle(obstacleId, pos) {
140
- if (!this.initialized) {
141
- throw new Error('Worker pool not initialized. Call init() first.');
142
- }
143
- const promises = this.workers.map((worker) => {
144
- return new Promise((resolve) => {
145
- const onMoved = (e) => {
146
- if (e.data.type === 'OBSTACLE_MOVED') {
147
- worker.removeEventListener('message', onMoved);
148
- resolve();
149
- }
150
- };
151
- worker.addEventListener('message', onMoved);
152
- worker.postMessage({ type: 'MOVE_OBSTACLE', obstacleId, pos });
153
- });
154
- });
155
- await Promise.all(promises);
156
- }
157
- /**
158
- * Terminate all workers
159
- */
160
- terminate() {
161
- for (const worker of this.workers) {
162
- worker.terminate();
163
- }
164
- this.workers = [];
165
- this.pendingRequests.clear();
166
- this.initialized = false;
167
- }
168
- /**
169
- * Get the number of pending requests
170
- */
171
- get pendingCount() {
172
- return this.pendingRequests.size;
173
- }
174
- /**
175
- * Get the pool size
176
- */
177
- get size() {
178
- return this.workers.length;
179
- }
180
- }