murow 0.0.70 → 0.0.72

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 (470) hide show
  1. package/README.md +54 -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/renderer-2d.js +1 -0
  74. package/dist/cjs/renderer/base/renderer-3d.js +1 -0
  75. package/dist/cjs/renderer/base/renderer.js +1 -0
  76. package/dist/cjs/renderer/gltf/helpers.js +1 -0
  77. package/dist/cjs/renderer/gltf/parser.js +1 -0
  78. package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
  79. package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
  80. package/dist/cjs/renderer/index.js +1 -0
  81. package/dist/cjs/renderer/math.js +1 -0
  82. package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
  83. package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
  84. package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
  85. package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
  86. package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
  87. package/dist/cjs/renderer/spritesheet/parser.js +1 -0
  88. package/dist/cjs/renderer/types.js +1 -0
  89. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  90. package/dist/esm/core/binary-codec/index.js +1 -0
  91. package/dist/esm/core/driver/driver.js +1 -0
  92. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  93. package/dist/esm/core/driver/drivers/index.js +1 -0
  94. package/dist/esm/core/driver/drivers/raf.js +1 -0
  95. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  96. package/dist/esm/core/driver/index.js +1 -0
  97. package/dist/esm/core/events/event-system.js +1 -0
  98. package/dist/esm/core/events/index.js +1 -0
  99. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  100. package/dist/esm/core/fixed-ticker/index.js +1 -0
  101. package/dist/esm/core/free-list/free-list.js +1 -0
  102. package/dist/esm/core/free-list/index.js +1 -0
  103. package/dist/esm/core/generate-id/generate-id.js +1 -0
  104. package/dist/esm/core/generate-id/index.js +1 -0
  105. package/dist/esm/core/index.js +1 -0
  106. package/dist/esm/core/input/index.js +1 -0
  107. package/dist/esm/core/input/manager.js +1 -0
  108. package/dist/esm/core/input/sources/browser.js +1 -0
  109. package/dist/esm/core/input/sources/index.js +1 -0
  110. package/dist/esm/core/input/types.js +0 -0
  111. package/dist/esm/core/lerp/index.js +1 -0
  112. package/dist/esm/core/lerp/lerp.js +1 -0
  113. package/dist/esm/core/navmesh/index.js +1 -0
  114. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  115. package/dist/esm/core/navmesh/navmesh.js +1 -0
  116. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  117. package/dist/esm/core/pooled-codec/index.js +1 -0
  118. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  119. package/dist/esm/core/prediction/index.js +1 -0
  120. package/dist/esm/core/prediction/prediction.js +1 -0
  121. package/dist/esm/core/ray/index.js +1 -0
  122. package/dist/esm/core/ray/ray-2d.js +1 -0
  123. package/dist/esm/core/ray/ray-3d.js +1 -0
  124. package/dist/esm/core/simple-rng/index.js +1 -0
  125. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  126. package/dist/esm/core/sparse-batcher/index.js +1 -0
  127. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  128. package/dist/esm/ecs/component-store.js +1 -0
  129. package/dist/esm/ecs/component.js +1 -0
  130. package/dist/esm/ecs/entity-handle.js +1 -0
  131. package/dist/esm/ecs/index.js +1 -0
  132. package/dist/esm/ecs/system-builder.js +1 -0
  133. package/dist/esm/ecs/world-systems.js +1 -0
  134. package/dist/esm/ecs/world.js +1 -0
  135. package/dist/esm/game/index.js +1 -0
  136. package/dist/esm/game/loop/index.js +1 -0
  137. package/dist/esm/game/loop/loop.js +1 -0
  138. package/dist/esm/index.js +1 -0
  139. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  140. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  141. package/dist/esm/net/buffer-pool.js +1 -0
  142. package/dist/esm/net/client.js +1 -0
  143. package/dist/esm/net/index.js +1 -0
  144. package/dist/esm/net/server.js +1 -0
  145. package/dist/esm/net/types.js +1 -0
  146. package/dist/esm/net/validators.js +1 -0
  147. package/dist/esm/protocol/index.js +1 -0
  148. package/dist/esm/protocol/intent/define-intent.js +1 -0
  149. package/dist/esm/protocol/intent/index.js +1 -0
  150. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  151. package/dist/esm/protocol/intent/intent.js +0 -0
  152. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  153. package/dist/esm/protocol/rpc/index.js +1 -0
  154. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  155. package/dist/esm/protocol/rpc/rpc.js +0 -0
  156. package/dist/esm/protocol/snapshot/index.js +1 -0
  157. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  158. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  159. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  160. package/dist/esm/renderer/base/renderer-2d.js +1 -0
  161. package/dist/esm/renderer/base/renderer-3d.js +1 -0
  162. package/dist/esm/renderer/base/renderer.js +1 -0
  163. package/dist/esm/renderer/gltf/helpers.js +1 -0
  164. package/dist/esm/renderer/gltf/parser.js +1 -0
  165. package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
  166. package/dist/esm/renderer/gltf/skin-parser.js +1 -0
  167. package/dist/esm/renderer/index.js +1 -0
  168. package/dist/esm/renderer/math.js +1 -0
  169. package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
  170. package/dist/esm/renderer/prefab-bucket/index.js +1 -0
  171. package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
  172. package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
  173. package/dist/esm/renderer/spritesheet/helpers.js +1 -0
  174. package/dist/esm/renderer/spritesheet/parser.js +1 -0
  175. package/dist/esm/renderer/types.js +0 -0
  176. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  177. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  178. package/dist/types/core/free-list/free-list.d.ts +31 -0
  179. package/dist/types/core/free-list/index.d.ts +1 -0
  180. package/dist/{core → types/core}/index.d.ts +5 -0
  181. package/dist/{core → types/core}/input/index.d.ts +1 -0
  182. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  183. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  184. package/dist/types/core/ray/index.d.ts +2 -0
  185. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  186. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  187. package/dist/types/core/simple-rng/index.d.ts +1 -0
  188. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  189. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  190. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  191. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  192. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  193. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  194. package/dist/{net → types/net}/index.d.ts +2 -2
  195. package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
  196. package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
  197. package/dist/types/renderer/base/renderer.d.ts +21 -0
  198. package/dist/types/renderer/gltf/helpers.d.ts +43 -0
  199. package/dist/types/renderer/gltf/parser.d.ts +49 -0
  200. package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
  201. package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
  202. package/dist/types/renderer/index.d.ts +15 -0
  203. package/dist/types/renderer/math.d.ts +37 -0
  204. package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
  205. package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
  206. package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
  207. package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
  208. package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
  209. package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
  210. package/dist/types/renderer/types.d.ts +89 -0
  211. package/dist/webgpu/cjs/index.js +5401 -0
  212. package/dist/webgpu/esm/index.js +5378 -0
  213. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  214. package/dist/webgpu/types/2d/renderer.d.ts +86 -0
  215. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  216. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  217. package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
  218. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  219. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  220. package/dist/webgpu/types/3d/renderer.d.ts +266 -0
  221. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  222. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  223. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
  224. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  225. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  226. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  227. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  228. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  229. package/dist/webgpu/types/camera/index.d.ts +2 -0
  230. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  231. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  232. package/dist/webgpu/types/core/constants.d.ts +59 -0
  233. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  234. package/dist/webgpu/types/core/index.d.ts +2 -0
  235. package/dist/webgpu/types/core/types.d.ts +125 -0
  236. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  237. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  238. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  239. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  240. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  241. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  242. package/dist/webgpu/types/index.d.ts +35 -0
  243. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  244. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  245. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  246. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  247. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  248. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  249. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  250. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  251. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
  252. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  253. package/package.json +96 -26
  254. package/dist/core/binary-codec/binary-codec.js +0 -354
  255. package/dist/core/binary-codec/index.js +0 -1
  256. package/dist/core/driver/driver.js +0 -47
  257. package/dist/core/driver/drivers/immediate.js +0 -61
  258. package/dist/core/driver/drivers/index.js +0 -3
  259. package/dist/core/driver/drivers/raf.js +0 -62
  260. package/dist/core/driver/drivers/timeout.js +0 -71
  261. package/dist/core/driver/index.js +0 -2
  262. package/dist/core/events/event-system.js +0 -88
  263. package/dist/core/events/index.js +0 -1
  264. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  265. package/dist/core/fixed-ticker/index.js +0 -1
  266. package/dist/core/generate-id/generate-id.js +0 -25
  267. package/dist/core/generate-id/index.js +0 -1
  268. package/dist/core/index.js +0 -10
  269. package/dist/core/input/index.js +0 -2
  270. package/dist/core/input/manager.js +0 -211
  271. package/dist/core/input/sources/browser.js +0 -29
  272. package/dist/core/input/sources/index.js +0 -1
  273. package/dist/core/lerp/index.js +0 -1
  274. package/dist/core/lerp/lerp.js +0 -42
  275. package/dist/core/navmesh/index.js +0 -1
  276. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  277. package/dist/core/navmesh/navmesh.js +0 -799
  278. package/dist/core/navmesh/navmesh.worker.js +0 -79
  279. package/dist/core/pooled-codec/index.js +0 -1
  280. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  281. package/dist/core/prediction/index.js +0 -1
  282. package/dist/core/prediction/prediction.js +0 -99
  283. package/dist/core.esm.js +0 -1
  284. package/dist/core.js +0 -1
  285. package/dist/ecs/component-store.js +0 -175
  286. package/dist/ecs/component.js +0 -43
  287. package/dist/ecs/entity-handle.js +0 -515
  288. package/dist/ecs/example.js +0 -125
  289. package/dist/ecs/index.js +0 -4
  290. package/dist/ecs/system-builder.js +0 -249
  291. package/dist/ecs/world-systems.js +0 -79
  292. package/dist/ecs/world.js +0 -767
  293. package/dist/game/index.js +0 -1
  294. package/dist/game/loop/index.js +0 -1
  295. package/dist/game/loop/loop.js +0 -108
  296. package/dist/index.js +0 -26
  297. package/dist/net/adapters/browser-websocket.js +0 -74
  298. package/dist/net/adapters/bun-websocket.js +0 -245
  299. package/dist/net/buffer-pool.js +0 -89
  300. package/dist/net/client.js +0 -586
  301. package/dist/net/index.js +0 -58
  302. package/dist/net/server.js +0 -974
  303. package/dist/net/types.js +0 -31
  304. package/dist/net/validators.js +0 -88
  305. package/dist/protocol/index.js +0 -92
  306. package/dist/protocol/intent/define-intent.js +0 -125
  307. package/dist/protocol/intent/index.js +0 -91
  308. package/dist/protocol/intent/intent-registry.js +0 -91
  309. package/dist/protocol/rpc/define-rpc.js +0 -84
  310. package/dist/protocol/rpc/index.js +0 -3
  311. package/dist/protocol/rpc/rpc-registry.js +0 -159
  312. package/dist/protocol/rpc/rpc.js +0 -12
  313. package/dist/protocol/snapshot/index.js +0 -43
  314. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  315. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  316. package/dist/protocol/snapshot/snapshot.js +0 -30
  317. package/src/core/binary-codec/README.md +0 -60
  318. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  319. package/src/core/binary-codec/binary-codec.ts +0 -448
  320. package/src/core/binary-codec/index.ts +0 -1
  321. package/src/core/driver/README.md +0 -97
  322. package/src/core/driver/driver.test.ts +0 -414
  323. package/src/core/driver/driver.ts +0 -71
  324. package/src/core/driver/drivers/immediate.ts +0 -66
  325. package/src/core/driver/drivers/index.ts +0 -3
  326. package/src/core/driver/drivers/raf.ts +0 -67
  327. package/src/core/driver/drivers/timeout.ts +0 -77
  328. package/src/core/driver/index.ts +0 -2
  329. package/src/core/events/README.md +0 -47
  330. package/src/core/events/event-system.test.ts +0 -243
  331. package/src/core/events/event-system.ts +0 -140
  332. package/src/core/events/index.ts +0 -1
  333. package/src/core/fixed-ticker/README.md +0 -77
  334. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  335. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  336. package/src/core/fixed-ticker/index.ts +0 -1
  337. package/src/core/generate-id/README.md +0 -18
  338. package/src/core/generate-id/generate-id.test.ts +0 -79
  339. package/src/core/generate-id/generate-id.ts +0 -37
  340. package/src/core/generate-id/index.ts +0 -1
  341. package/src/core/index.ts +0 -10
  342. package/src/core/input/README.md +0 -24
  343. package/src/core/input/index.ts +0 -2
  344. package/src/core/input/manager.ts +0 -259
  345. package/src/core/input/sources/browser.ts +0 -39
  346. package/src/core/input/sources/index.ts +0 -1
  347. package/src/core/input/types.ts +0 -40
  348. package/src/core/lerp/README.md +0 -79
  349. package/src/core/lerp/index.ts +0 -1
  350. package/src/core/lerp/lerp.test.ts +0 -90
  351. package/src/core/lerp/lerp.ts +0 -42
  352. package/src/core/navmesh/README.md +0 -164
  353. package/src/core/navmesh/index.ts +0 -1
  354. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  355. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  356. package/src/core/navmesh/navmesh.test.ts +0 -344
  357. package/src/core/navmesh/navmesh.ts +0 -1047
  358. package/src/core/navmesh/navmesh.worker.ts +0 -147
  359. package/src/core/pooled-codec/README.md +0 -70
  360. package/src/core/pooled-codec/index.ts +0 -1
  361. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  362. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  363. package/src/core/prediction/README.md +0 -64
  364. package/src/core/prediction/index.ts +0 -1
  365. package/src/core/prediction/prediction.test.ts +0 -423
  366. package/src/core/prediction/prediction.ts +0 -112
  367. package/src/ecs/README.md +0 -427
  368. package/src/ecs/benchmark.test.ts +0 -1645
  369. package/src/ecs/component-store.ts +0 -198
  370. package/src/ecs/component.ts +0 -90
  371. package/src/ecs/entity-handle.test.ts +0 -393
  372. package/src/ecs/entity-handle.ts +0 -563
  373. package/src/ecs/example.ts +0 -152
  374. package/src/ecs/index.ts +0 -4
  375. package/src/ecs/system-builder.ts +0 -404
  376. package/src/ecs/world-systems.ts +0 -83
  377. package/src/ecs/world.test.ts +0 -310
  378. package/src/ecs/world.ts +0 -904
  379. package/src/game/index.ts +0 -1
  380. package/src/game/loop/README.md +0 -32
  381. package/src/game/loop/index.ts +0 -1
  382. package/src/game/loop/loop.ts +0 -236
  383. package/src/index.ts +0 -32
  384. package/src/net/README.md +0 -474
  385. package/src/net/adapters/browser-websocket.ts +0 -86
  386. package/src/net/adapters/bun-websocket.ts +0 -292
  387. package/src/net/buffer-pool.ts +0 -106
  388. package/src/net/client.test.ts +0 -807
  389. package/src/net/client.ts +0 -695
  390. package/src/net/index.ts +0 -60
  391. package/src/net/server.test.ts +0 -799
  392. package/src/net/server.ts +0 -1152
  393. package/src/net/types.ts +0 -228
  394. package/src/net/validators.ts +0 -104
  395. package/src/protocol/README.md +0 -469
  396. package/src/protocol/index.ts +0 -93
  397. package/src/protocol/intent/define-intent.test.ts +0 -397
  398. package/src/protocol/intent/define-intent.ts +0 -201
  399. package/src/protocol/intent/index.ts +0 -94
  400. package/src/protocol/intent/intent-registry.test.ts +0 -198
  401. package/src/protocol/intent/intent-registry.ts +0 -112
  402. package/src/protocol/intent/intent.ts +0 -12
  403. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  404. package/src/protocol/rpc/define-rpc.ts +0 -113
  405. package/src/protocol/rpc/index.ts +0 -3
  406. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  407. package/src/protocol/rpc/rpc-registry.ts +0 -176
  408. package/src/protocol/rpc/rpc.ts +0 -37
  409. package/src/protocol/snapshot/index.ts +0 -45
  410. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  411. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  412. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  413. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  414. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  415. package/src/protocol/snapshot/snapshot.ts +0 -41
  416. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  417. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  418. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  419. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  420. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  421. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  422. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  423. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  424. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  425. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  426. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  427. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  428. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  429. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  430. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  431. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  432. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  433. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  434. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  435. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  436. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  437. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  438. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  439. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  440. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  441. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  442. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  443. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  444. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  445. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  446. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  447. /package/dist/{game → types/game}/index.d.ts +0 -0
  448. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  449. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  450. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  451. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  452. /package/dist/{net → types/net}/client.d.ts +0 -0
  453. /package/dist/{net → types/net}/server.d.ts +0 -0
  454. /package/dist/{net → types/net}/types.d.ts +0 -0
  455. /package/dist/{net → types/net}/validators.d.ts +0 -0
  456. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  457. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  458. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  459. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  460. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  461. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  462. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  463. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  464. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  465. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  466. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  467. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  468. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  469. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  470. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,79 +0,0 @@
1
- # lerp
2
-
3
- A simple utility function for linear interpolation between two numeric values. Perfect for smooth animations, transitions, and value easing in game development.
4
-
5
- ## Features
6
-
7
- - Clean linear interpolation implementation.
8
- - Unclamped by design - allows extrapolation when t is outside [0, 1].
9
- - Zero dependencies.
10
- - Works in browsers and Node.js.
11
- - TypeScript support with proper type definitions.
12
-
13
- ## Usage
14
-
15
- ```typescript
16
- import { lerp } from './lerp';
17
-
18
- // Basic interpolation
19
- const value = lerp(0, 100, 0.5); // Returns 50
20
-
21
- // Animation example
22
- const startPos = 0;
23
- const endPos = 100;
24
- const progress = 0.75;
25
- const currentPos = lerp(startPos, endPos, progress); // Returns 75
26
-
27
- // Smooth camera movement
28
- function updateCamera(deltaTime: number) {
29
- const t = deltaTime * smoothingFactor;
30
- camera.x = lerp(camera.x, target.x, t);
31
- camera.y = lerp(camera.y, target.y, t);
32
- }
33
-
34
- // Color transitions
35
- const r = lerp(startColor.r, endColor.r, progress);
36
- const g = lerp(startColor.g, endColor.g, progress);
37
- const b = lerp(startColor.b, endColor.b, progress);
38
- ```
39
-
40
- ## Parameters
41
-
42
- - `start` (number): The starting value (returned when t = 0)
43
- - `end` (number): The ending value (returned when t = 1)
44
- - `t` (number): The interpolation factor, typically in range [0, 1]
45
-
46
- ## Returns
47
-
48
- `number` - The interpolated value between start and end.
49
-
50
- ## Extrapolation
51
-
52
- The function does not clamp the `t` parameter, allowing extrapolation:
53
-
54
- ```typescript
55
- lerp(0, 100, 1.5); // Returns 150 (extrapolated beyond end)
56
- lerp(0, 100, -0.5); // Returns -50 (extrapolated before start)
57
- ```
58
-
59
- If you need clamped interpolation, combine with a clamp function:
60
-
61
- ```typescript
62
- function clampedLerp(start: number, end: number, t: number): number {
63
- const clampedT = Math.max(0, Math.min(1, t));
64
- return lerp(start, end, clampedT);
65
- }
66
- ```
67
-
68
- ## Common Use Cases
69
-
70
- - **Smooth animations**: Interpolate position, rotation, scale over time
71
- - **Camera movement**: Create smooth camera following behavior
72
- - **UI transitions**: Fade effects, sliding panels, progress bars
73
- - **Color blending**: Transition between colors smoothly
74
- - **Value easing**: Gradually approach target values
75
- - **Physics simulations**: Interpolate between physics states for rendering
76
-
77
- ---
78
-
79
- `lerp` provides a foundational building block for smooth, continuous value transitions in game development and interactive applications.
@@ -1 +0,0 @@
1
- export * from './lerp';
@@ -1,90 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { lerp } from "./lerp";
3
-
4
- describe("lerp", () => {
5
- test("should return start value when t is 0", () => {
6
- expect(lerp(0, 100, 0)).toBe(0);
7
- expect(lerp(50, 200, 0)).toBe(50);
8
- expect(lerp(-10, 10, 0)).toBe(-10);
9
- });
10
-
11
- test("should return end value when t is 1", () => {
12
- expect(lerp(0, 100, 1)).toBe(100);
13
- expect(lerp(50, 200, 1)).toBe(200);
14
- expect(lerp(-10, 10, 1)).toBe(10);
15
- });
16
-
17
- test("should return midpoint when t is 0.5", () => {
18
- expect(lerp(0, 100, 0.5)).toBe(50);
19
- expect(lerp(50, 150, 0.5)).toBe(100);
20
- expect(lerp(-10, 10, 0.5)).toBe(0);
21
- });
22
-
23
- test("should interpolate between positive values", () => {
24
- expect(lerp(0, 100, 0.25)).toBe(25);
25
- expect(lerp(0, 100, 0.75)).toBe(75);
26
- expect(lerp(10, 20, 0.3)).toBeCloseTo(13, 5);
27
- });
28
-
29
- test("should interpolate between negative values", () => {
30
- expect(lerp(-100, -50, 0.5)).toBe(-75);
31
- expect(lerp(-10, -5, 0.2)).toBe(-9);
32
- });
33
-
34
- test("should interpolate from negative to positive", () => {
35
- expect(lerp(-50, 50, 0.5)).toBe(0);
36
- expect(lerp(-10, 10, 0.25)).toBe(-5);
37
- expect(lerp(-10, 10, 0.75)).toBe(5);
38
- });
39
-
40
- test("should handle extrapolation when t > 1", () => {
41
- expect(lerp(0, 100, 1.5)).toBe(150);
42
- expect(lerp(0, 100, 2)).toBe(200);
43
- expect(lerp(10, 20, 1.1)).toBeCloseTo(21, 5);
44
- });
45
-
46
- test("should handle extrapolation when t < 0", () => {
47
- expect(lerp(0, 100, -0.5)).toBe(-50);
48
- expect(lerp(0, 100, -1)).toBe(-100);
49
- expect(lerp(10, 20, -0.1)).toBeCloseTo(9, 5);
50
- });
51
-
52
- test("should handle same start and end values", () => {
53
- expect(lerp(50, 50, 0)).toBe(50);
54
- expect(lerp(50, 50, 0.5)).toBe(50);
55
- expect(lerp(50, 50, 1)).toBe(50);
56
- expect(lerp(50, 50, 2)).toBe(50);
57
- });
58
-
59
- test("should handle floating point values", () => {
60
- expect(lerp(0.1, 0.9, 0.5)).toBeCloseTo(0.5, 10);
61
- expect(lerp(1.5, 2.5, 0.3)).toBeCloseTo(1.8, 10);
62
- });
63
-
64
- test("should be commutative with inverted t", () => {
65
- const start = 10;
66
- const end = 20;
67
- expect(lerp(start, end, 0.3)).toBeCloseTo(lerp(end, start, 0.7), 10);
68
- });
69
-
70
- test("should handle very small differences", () => {
71
- expect(lerp(1.0, 1.0001, 0.5)).toBeCloseTo(1.00005, 10);
72
- });
73
-
74
- test("should handle very large values", () => {
75
- expect(lerp(1e10, 2e10, 0.5)).toBe(1.5e10);
76
- });
77
-
78
- test("should be linear (no easing)", () => {
79
- const start = 0;
80
- const end = 100;
81
- const step = 0.1;
82
- const expectedDiff = 10;
83
-
84
- for (let t = 0; t < 1; t += step) {
85
- const val1 = lerp(start, end, t);
86
- const val2 = lerp(start, end, t + step);
87
- expect(val2 - val1).toBeCloseTo(expectedDiff, 5);
88
- }
89
- });
90
- });
@@ -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: number, end: number, t: number): number {
41
- return start + (end - start) * t;
42
- }
@@ -1,164 +0,0 @@
1
- # NavMesh / Pathfinding Utility
2
-
3
- A lightweight navigation system for grid-based and hybrid games.
4
-
5
- Supports:
6
-
7
- * **Grid A*** pathfinding
8
- * **Line-of-sight graph navigation**
9
- * **Dynamic obstacles**
10
- * **Spatial hashing for fast queries**
11
- * **Circle / Rect / Polygon obstacles**
12
- * **Zero rebuilds unless data changes**
13
-
14
- Designed for **games**, not CAD-grade geometry.
15
-
16
- ---
17
-
18
- ## Features
19
-
20
- * ⚡ **Fast obstacle queries** via spatial hash
21
- * 🧠 **Smart rebuilds** (version-based, no unnecessary work)
22
- * 🧩 **Multiple obstacle types**
23
- * 🧭 **A*** with binary heap
24
- * 🧱 **Grid or graph navigation**
25
- * 🔁 Dynamic obstacle add / move / remove
26
- * 🧪 Deterministic & allocation-safe
27
-
28
- ---
29
-
30
- ## Usage
31
-
32
- ### Create navmesh
33
-
34
- ```ts
35
- const nav = new NavMesh('grid'); // or 'graph'
36
- ```
37
-
38
- ### Add obstacles
39
-
40
- ```ts
41
- nav.addObstacle({
42
- type: 'circle',
43
- pos: { x: 5, y: 5 },
44
- radius: 2
45
- });
46
- ```
47
-
48
- ```ts
49
- nav.addObstacle({
50
- type: 'rect',
51
- pos: { x: 2, y: 3 },
52
- size: { x: 4, y: 2 },
53
- });
54
- ```
55
-
56
- ```ts
57
- nav.addObstacle({
58
- type: 'polygon',
59
- pos: { x: 10, y: 5 },
60
- points: [
61
- { x: 0, y: 0 },
62
- { x: 2, y: 0 },
63
- { x: 1, y: 2 },
64
- ],
65
- });
66
- ```
67
-
68
- ### Move / remove
69
-
70
- ```ts
71
- nav.moveObstacle(id, { x: 8, y: 4 });
72
- nav.removeObstacle(id);
73
- ```
74
-
75
- ### Find path
76
-
77
- ```ts
78
- const path = nav.findPath({
79
- from: { x: 1, y: 1 },
80
- to: { x: 10, y: 8 }
81
- });
82
- ```
83
-
84
- ---
85
-
86
- ## Web Workers (Optional)
87
-
88
- For games with many concurrent pathfinding requests (20+ units), enable workers for parallel processing:
89
-
90
- ### Modes
91
-
92
- ```ts
93
- // Default: synchronous (workers: false)
94
- const nav = new NavMesh('grid'); // Returns Vec2[]
95
- const path = nav.findPath({ from, to });
96
-
97
- // Always use workers (workers: true)
98
- const nav = new NavMesh('grid', { workers: true }); // Returns Promise<Vec2[]>
99
- const path = await nav.findPath({ from, to });
100
-
101
- // Auto mode (workers: 'auto')
102
- const nav = new NavMesh('grid', { workers: 'auto' }); // Returns Vec2[] | Promise<Vec2[]>
103
- const result = nav.findPath({ from, to });
104
- const path = result instanceof Promise ? await result : result;
105
- ```
106
-
107
- ### Performance
108
-
109
- - **Single path**: Sync mode faster (no worker overhead)
110
- - **20+ parallel paths**: Workers ~3x faster
111
- - **30+ unit RTS**: Workers ~4.5x faster (35 FPS → 162 FPS)
112
-
113
- Use workers for RTS/strategy games with many simultaneous pathfinding requests.
114
-
115
- ```ts
116
- // Custom pool size (default: 4)
117
- const nav = new NavMesh('grid', {
118
- workers: true,
119
- workerPoolSize: 8,
120
- workerPath: './custom-worker.js'
121
- });
122
- ```
123
-
124
- ---
125
-
126
- ## Navigation Modes
127
-
128
- ### `grid`
129
-
130
- * A* over grid cells
131
- * Accurate
132
- * Best for RTS / tactics / tile games
133
-
134
- ### `graph`
135
-
136
- * Line-of-sight check
137
- * Falls back to grid if blocked
138
- * Faster for open maps
139
-
140
- ---
141
-
142
- ## Performance
143
-
144
- | Feature | Cost |
145
- | -------------- | --------------------------------- |
146
- | Obstacle query | **O(1)** avg |
147
- | Grid rebuild | O(n × area) |
148
- | Pathfinding | O(bᵈ log n) |
149
- | Memory | Minimal, no allocations per frame |
150
-
151
- Handles:
152
-
153
- * 1k+ obstacles
154
- * 10k+ A* nodes
155
- * Real-time updates
156
-
157
- ---
158
-
159
- ## Notes
160
-
161
- * Polygon points **must be local (0,0-based)**
162
- * Rotation is supported for rects & polygons
163
- * All math is deterministic
164
- * No dependencies
@@ -1 +0,0 @@
1
- export * from './navmesh';
@@ -1,236 +0,0 @@
1
- /**
2
- * NavMesh Worker Pool - Manages multiple workers for parallel pathfinding
3
- */
4
-
5
- import { ObstacleInput } from './navmesh';
6
-
7
- interface Vec2 {
8
- x: number;
9
- y: number;
10
- }
11
-
12
- interface PathRequest {
13
- id: number;
14
- from: Vec2;
15
- to: Vec2;
16
- resolve: (path: Vec2[]) => void;
17
- reject: (error: Error) => void;
18
- }
19
-
20
- interface PathResultMessage {
21
- type: 'PATH_RESULT';
22
- id: number;
23
- path: Vec2[];
24
- duration: number;
25
- }
26
-
27
- interface ErrorMessage {
28
- type: 'ERROR';
29
- error: string;
30
- }
31
-
32
- type WorkerResponse = PathResultMessage | ErrorMessage;
33
-
34
- export class NavMeshWorkerPool {
35
- private workers: Worker[] = [];
36
- private nextWorkerIndex = 0;
37
- private requestId = 0;
38
- private pendingRequests = new Map<number, PathRequest>();
39
- private initialized = false;
40
-
41
- constructor(
42
- private poolSize: number,
43
- private workerPath: string,
44
- private navType: 'grid' | 'graph' = 'grid',
45
- private obstacles: ObstacleInput[] = []
46
- ) {}
47
-
48
- /**
49
- * Initialize all workers in the pool
50
- */
51
- async init(): Promise<void> {
52
- if (this.initialized) return;
53
-
54
- const initPromises: Promise<void>[] = [];
55
-
56
- for (let i = 0; i < this.poolSize; i++) {
57
- const worker = new Worker(this.workerPath, { type: 'module' });
58
-
59
- // Set up message handler
60
- worker.onmessage = (e: MessageEvent<WorkerResponse>) => {
61
- const msg = e.data;
62
-
63
- if (msg.type === 'PATH_RESULT') {
64
- const request = this.pendingRequests.get(msg.id);
65
- if (request) {
66
- request.resolve(msg.path);
67
- this.pendingRequests.delete(msg.id);
68
- }
69
- } else if (msg.type === 'ERROR') {
70
- // Reject all pending requests for this worker
71
- for (const [id, request] of this.pendingRequests.entries()) {
72
- request.reject(new Error(msg.error));
73
- this.pendingRequests.delete(id);
74
- }
75
- }
76
- };
77
-
78
- worker.onerror = (error) => {
79
- console.error('Worker error:', error);
80
- // Reject all pending requests for this worker
81
- for (const [id, request] of this.pendingRequests.entries()) {
82
- request.reject(new Error('Worker error'));
83
- this.pendingRequests.delete(id);
84
- }
85
- };
86
-
87
- this.workers.push(worker);
88
-
89
- // Initialize worker
90
- const readyPromise = new Promise<void>((resolve) => {
91
- const onReady = (e: MessageEvent) => {
92
- if (e.data.type === 'READY') {
93
- worker.removeEventListener('message', onReady);
94
- resolve();
95
- }
96
- };
97
- worker.addEventListener('message', onReady);
98
- });
99
-
100
- worker.postMessage({
101
- type: 'INIT',
102
- navType: this.navType,
103
- obstacles: this.obstacles,
104
- });
105
-
106
- initPromises.push(readyPromise);
107
- }
108
-
109
- await Promise.all(initPromises);
110
- this.initialized = true;
111
- }
112
-
113
- /**
114
- * Find a path using the next available worker (round-robin)
115
- */
116
- async findPath(from: Vec2, to: Vec2): Promise<Vec2[]> {
117
- if (!this.initialized) {
118
- throw new Error('Worker pool not initialized. Call init() first.');
119
- }
120
-
121
- const id = this.requestId++;
122
- const worker = this.workers[this.nextWorkerIndex];
123
- this.nextWorkerIndex = (this.nextWorkerIndex + 1) % this.workers.length;
124
-
125
- return new Promise<Vec2[]>((resolve, reject) => {
126
- this.pendingRequests.set(id, { id, from, to, resolve, reject });
127
-
128
- worker.postMessage({
129
- type: 'FIND_PATH',
130
- id,
131
- from,
132
- to,
133
- });
134
- });
135
- }
136
-
137
- /**
138
- * Add an obstacle to all workers
139
- */
140
- async addObstacle(obstacle: ObstacleInput): Promise<number> {
141
- if (!this.initialized) {
142
- throw new Error('Worker pool not initialized. Call init() first.');
143
- }
144
-
145
- // Add to all workers
146
- const promises = this.workers.map((worker) => {
147
- return new Promise<number>((resolve) => {
148
- const onAdded = (e: MessageEvent) => {
149
- if (e.data.type === 'OBSTACLE_ADDED') {
150
- worker.removeEventListener('message', onAdded);
151
- resolve(e.data.obstacleId);
152
- }
153
- };
154
- worker.addEventListener('message', onAdded);
155
- worker.postMessage({ type: 'ADD_OBSTACLE', obstacle });
156
- });
157
- });
158
-
159
- const ids = await Promise.all(promises);
160
- return ids[0]; // All workers should return the same ID
161
- }
162
-
163
- /**
164
- * Remove an obstacle from all workers
165
- */
166
- async removeObstacle(obstacleId: number): Promise<void> {
167
- if (!this.initialized) {
168
- throw new Error('Worker pool not initialized. Call init() first.');
169
- }
170
-
171
- const promises = this.workers.map((worker) => {
172
- return new Promise<void>((resolve) => {
173
- const onRemoved = (e: MessageEvent) => {
174
- if (e.data.type === 'OBSTACLE_REMOVED') {
175
- worker.removeEventListener('message', onRemoved);
176
- resolve();
177
- }
178
- };
179
- worker.addEventListener('message', onRemoved);
180
- worker.postMessage({ type: 'REMOVE_OBSTACLE', obstacleId });
181
- });
182
- });
183
-
184
- await Promise.all(promises);
185
- }
186
-
187
- /**
188
- * Move an obstacle in all workers
189
- */
190
- async moveObstacle(obstacleId: number, pos: Vec2): Promise<void> {
191
- if (!this.initialized) {
192
- throw new Error('Worker pool not initialized. Call init() first.');
193
- }
194
-
195
- const promises = this.workers.map((worker) => {
196
- return new Promise<void>((resolve) => {
197
- const onMoved = (e: MessageEvent) => {
198
- if (e.data.type === 'OBSTACLE_MOVED') {
199
- worker.removeEventListener('message', onMoved);
200
- resolve();
201
- }
202
- };
203
- worker.addEventListener('message', onMoved);
204
- worker.postMessage({ type: 'MOVE_OBSTACLE', obstacleId, pos });
205
- });
206
- });
207
-
208
- await Promise.all(promises);
209
- }
210
-
211
- /**
212
- * Terminate all workers
213
- */
214
- terminate() {
215
- for (const worker of this.workers) {
216
- worker.terminate();
217
- }
218
- this.workers = [];
219
- this.pendingRequests.clear();
220
- this.initialized = false;
221
- }
222
-
223
- /**
224
- * Get the number of pending requests
225
- */
226
- get pendingCount(): number {
227
- return this.pendingRequests.size;
228
- }
229
-
230
- /**
231
- * Get the pool size
232
- */
233
- get size(): number {
234
- return this.workers.length;
235
- }
236
- }