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
package/dist/core.js DELETED
@@ -1 +0,0 @@
1
- var F=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var ie=Object.prototype.hasOwnProperty;var ae=(o,e)=>()=>(o&&(e=o(o=0)),e);var K=(o,e)=>{for(var t in e)F(o,t,{get:e[t],enumerable:!0})},le=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ne(e))!ie.call(o,r)&&r!==t&&F(o,r,{get:()=>e[r],enumerable:!(s=oe(e,r))||s.enumerable});return o};var ce=o=>le(F({},"__esModule",{value:!0}),o);var $={};K($,{NavMeshWorkerPool:()=>U});var U,G=ae(()=>{U=class{constructor(e,t,s="grid",r=[]){this.poolSize=e;this.workerPath=t;this.navType=s;this.obstacles=r;this.workers=[];this.nextWorkerIndex=0;this.requestId=0;this.pendingRequests=new Map;this.initialized=!1}async init(){if(this.initialized)return;let e=[];for(let t=0;t<this.poolSize;t++){let s=new Worker(this.workerPath,{type:"module"});s.onmessage=a=>{let n=a.data;if(n.type==="PATH_RESULT"){let i=this.pendingRequests.get(n.id);i&&(i.resolve(n.path),this.pendingRequests.delete(n.id))}else if(n.type==="ERROR")for(let[i,l]of this.pendingRequests.entries())l.reject(new Error(n.error)),this.pendingRequests.delete(i)},s.onerror=a=>{console.error("Worker error:",a);for(let[n,i]of this.pendingRequests.entries())i.reject(new Error("Worker error")),this.pendingRequests.delete(n)},this.workers.push(s);let r=new Promise(a=>{let n=i=>{i.data.type==="READY"&&(s.removeEventListener("message",n),a())};s.addEventListener("message",n)});s.postMessage({type:"INIT",navType:this.navType,obstacles:this.obstacles}),e.push(r)}await Promise.all(e),this.initialized=!0}async findPath(e,t){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let s=this.requestId++,r=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,new Promise((a,n)=>{this.pendingRequests.set(s,{id:s,from:e,to:t,resolve:a,reject:n}),r.postMessage({type:"FIND_PATH",id:s,from:e,to:t})})}async addObstacle(e){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let t=this.workers.map(r=>new Promise(a=>{let n=i=>{i.data.type==="OBSTACLE_ADDED"&&(r.removeEventListener("message",n),a(i.data.obstacleId))};r.addEventListener("message",n),r.postMessage({type:"ADD_OBSTACLE",obstacle:e})}));return(await Promise.all(t))[0]}async removeObstacle(e){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let t=this.workers.map(s=>new Promise(r=>{let a=n=>{n.data.type==="OBSTACLE_REMOVED"&&(s.removeEventListener("message",a),r())};s.addEventListener("message",a),s.postMessage({type:"REMOVE_OBSTACLE",obstacleId:e})}));await Promise.all(t)}async moveObstacle(e,t){if(!this.initialized)throw new Error("Worker pool not initialized. Call init() first.");let s=this.workers.map(r=>new Promise(a=>{let n=i=>{i.data.type==="OBSTACLE_MOVED"&&(r.removeEventListener("message",n),a())};r.addEventListener("message",n),r.postMessage({type:"MOVE_OBSTACLE",obstacleId:e,pos:t})}));await Promise.all(s)}terminate(){for(let e of this.workers)e.terminate();this.workers=[],this.pendingRequests.clear(),this.initialized=!1}get pendingCount(){return this.pendingRequests.size}get size(){return this.workers.length}}});var ve={};K(ve,{BaseBinaryCodec:()=>E,BinaryCodec:()=>v,BinaryPrimitives:()=>m,BrowserInputSource:()=>X,EventSystem:()=>I,FixedTicker:()=>P,ImmediateDriver:()=>x,InputManager:()=>q,IntentTracker:()=>z,NavMesh:()=>L,ObjectPool:()=>g,PooledArrayDecoder:()=>W,PooledCodec:()=>_,PooledDecoder:()=>T,PooledEncoder:()=>O,RafDriver:()=>w,Reconciliator:()=>j,TimeoutDriver:()=>k,createDriver:()=>pe,generateId:()=>ue,lerp:()=>de});module.exports=ce(ve);var B=Symbol("schemaSize");function H(o){let e=o[B];if(e!==void 0)return e;let t=0;for(let s of Object.keys(o))t+=o[s].size;return o[B]=t,t}var E=class{static encodeInto(e,t){let s=H(e),r=new ArrayBuffer(s),a=new DataView(r),n=0;for(let i of Object.keys(e)){let l=e[i];l.write(a,n,t[i]),n+=l.size}return new Uint8Array(r)}static decodeInto(e,t,s){let r=H(e);if(t.byteLength<r)throw new RangeError(`Buffer too small: expected ${r} bytes, got ${t.byteLength}`);let a=new DataView(t.buffer,t.byteOffset,t.byteLength),n=0;for(let i of Object.keys(e)){let l=e[i];s[i]=l.read(a,n),n+=l.size}return s}},m=class{static{this.u8={size:1,write:(e,t,s)=>e.setUint8(t,s),read:(e,t)=>e.getUint8(t),toNil:()=>0}}static{this.u16={size:2,write:(e,t,s)=>e.setUint16(t,s,!1),read:(e,t)=>e.getUint16(t,!1),toNil:()=>0}}static{this.u32={size:4,write:(e,t,s)=>e.setUint32(t,s,!1),read:(e,t)=>e.getUint32(t,!1),toNil:()=>0}}static{this.i8={size:1,write:(e,t,s)=>e.setInt8(t,s),read:(e,t)=>e.getInt8(t),toNil:()=>0}}static{this.i16={size:2,write:(e,t,s)=>e.setInt16(t,s,!1),read:(e,t)=>e.getInt16(t,!1),toNil:()=>0}}static{this.i32={size:4,write:(e,t,s)=>e.setInt32(t,s,!1),read:(e,t)=>e.getInt32(t,!1),toNil:()=>0}}static{this.f32={size:4,write:(e,t,s)=>e.setFloat32(t,s,!1),read:(e,t)=>e.getFloat32(t,!1),toNil:()=>0}}static{this.f64={size:8,write:(e,t,s)=>e.setFloat64(t,s,!1),read:(e,t)=>e.getFloat64(t,!1),toNil:()=>0}}static{this.bool={size:1,write:(e,t,s)=>e.setUint8(t,s?1:0),read:(e,t)=>e.getUint8(t)!==0,toNil:()=>!1}}static string(e){return{size:e+2,write(t,s,r){let n=new TextEncoder().encode(r);if(n.length>e)throw new RangeError(`String too long, max ${e} bytes`);t.setUint16(s,n.length,!1);for(let i=0;i<n.length;i++)t.setUint8(s+2+i,n[i]);for(let i=n.length;i<e;i++)t.setUint8(s+2+i,0)},read(t,s){let r=t.getUint16(s,!1),a=new Uint8Array(r);for(let n=0;n<r;n++)a[n]=t.getUint8(s+2+n);return new TextDecoder().decode(a)},toNil:()=>""}}static{this.vec2={size:8,write(e,t,s){e.setFloat32(t,s.x,!1),e.setFloat32(t+4,s.y,!1)},read(e,t){return{x:e.getFloat32(t,!1),y:e.getFloat32(t+4,!1)}},toNil:()=>({x:0,y:0})}}static{this.vec3={size:12,write(e,t,s){e.setFloat32(t,s.x,!1),e.setFloat32(t+4,s.y,!1),e.setFloat32(t+8,s.z,!1)},read(e,t){return{x:e.getFloat32(t,!1),y:e.getFloat32(t+4,!1),z:e.getFloat32(t+8,!1)}},toNil:()=>({x:0,y:0,z:0})}}static{this.color={size:4,write(e,t,s){e.setUint8(t,s.r),e.setUint8(t+1,s.g),e.setUint8(t+2,s.b),e.setUint8(t+3,s.a)},read(e,t){return{r:e.getUint8(t),g:e.getUint8(t+1),b:e.getUint8(t+2),a:e.getUint8(t+3)}},toNil:()=>({r:0,g:0,b:0,a:0})}}static{this.f32_le={size:4,write:(e,t,s)=>e.setFloat32(t,s,!0),read:(e,t)=>e.getFloat32(t,!0),toNil:()=>0}}static{this.f64_le={size:8,write:(e,t,s)=>e.setFloat64(t,s,!0),read:(e,t)=>e.getFloat64(t,!0),toNil:()=>0}}static{this.u16_le={size:2,write:(e,t,s)=>e.setUint16(t,s,!0),read:(e,t)=>e.getUint16(t,!0),toNil:()=>0}}static{this.u32_le={size:4,write:(e,t,s)=>e.setUint32(t,s,!0),read:(e,t)=>e.getUint32(t,!0),toNil:()=>0}}static{this.i16_le={size:2,write:(e,t,s)=>e.setInt16(t,s,!0),read:(e,t)=>e.getInt16(t,!0),toNil:()=>0}}static{this.i32_le={size:4,write:(e,t,s)=>e.setInt32(t,s,!0),read:(e,t)=>e.getInt32(t,!0),toNil:()=>0}}static{this.vec2_le={size:8,write:(e,t,s)=>{e.setFloat32(t,s[0],!0),e.setFloat32(t+4,s[1],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0)],toNil:()=>[0,0]}}static{this.vec3_le={size:12,write:(e,t,s)=>{e.setFloat32(t,s[0],!0),e.setFloat32(t+4,s[1],!0),e.setFloat32(t+8,s[2],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0),e.getFloat32(t+8,!0)],toNil:()=>[0,0,0]}}static{this.vec4_le={size:16,write:(e,t,s)=>{e.setFloat32(t,s[0],!0),e.setFloat32(t+4,s[1],!0),e.setFloat32(t+8,s[2],!0),e.setFloat32(t+12,s[3],!0)},read:(e,t)=>[e.getFloat32(t,!0),e.getFloat32(t+4,!0),e.getFloat32(t+8,!0),e.getFloat32(t+12,!0)],toNil:()=>[0,0,0,0]}}},v=class extends E{static{this.u8=m.u8}static{this.u16=m.u16}static{this.u32=m.u32}static{this.i8=m.i8}static{this.i16=m.i16}static{this.i32=m.i32}static{this.f32=m.f32}static{this.bool=m.bool}static{this.string=m.string}static{this.vec2=m.vec2}static{this.vec3=m.vec3}static{this.color=m.color}static encode(e,t){return this.encodeInto(e,t)}static decode(e,t,s){return this.decodeInto(e,t,s)}};var I=class{constructor({events:e}){this.callbacks=new Map,this.events=e;for(let t of this.events)this.callbacks.set(t,new Set)}on(e,t){let s=this.callbacks.get(e);if(!s)return console.warn(`Event "${e}" does not exist.`);s.add(t)}once(e,t){let s=r=>{t(r),this.off(e,s)};this.on(e,s)}emit(e,t){let s=this.callbacks.get(e);if(!s)return console.warn(`Event "${e}" does not exist.`);for(let r of s)r(t)}off(e,t){let s=this.callbacks.get(e);if(!s)return console.warn(`Event "${e}" does not exist.`);s.delete(t)}clear(e){if(!e){this.callbacks.clear();for(let s of this.events)this.callbacks.set(s,new Set);return}let t=this.callbacks.get(e);if(!t)return console.warn(`Event "${e}" does not exist.`);t.clear()}};var P=class{constructor({rate:e,onTick:t}){this.accumulator=0;this._tickCount=0;this.rate=e,this.intervalMs=1e3/this.rate,this.onTick=t,this.maxTicksPerFrame=Math.max(1,Math.floor(e/2))}getTicks(e){this.accumulator+=e*1e3;let t=0,s=this.intervalMs*.001;for(;this.accumulator>=this.intervalMs-s&&t<this.maxTicksPerFrame;)this.accumulator-=this.intervalMs,t++;let r=Math.floor(this.accumulator/this.intervalMs);return r>0&&this.onTickSkipped&&this.onTickSkipped(r),t}tick(e){let t=this.getTicks(e);for(let s=0;s<t;s++)this.onTick(1/this.rate,this._tickCount++)}get tickCount(){return this._tickCount}resetTickCount(){this._tickCount=0,this.accumulator=0}get accumulatedTime(){return this.accumulator/1e3}get alpha(){return Math.min(this.accumulatedTime/(1/this.rate),1)}};function ue(o={}){let{prefix:e="",size:t=16}=o,s=Math.max(t-e.length,8),r=Math.ceil(s/8),n=crypto.getRandomValues(new Uint32Array(r)).reduce((i,l)=>i+l.toString(16).padStart(8,"0"),"");return n=n.slice(0,s).padStart(s,"0"),`${e}${n}`}function de(o,e,t){return o+(e-o)*t}var x=class{constructor(e){this.update=e;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;let e=performance.now(),t=(e-this.last)/1e3;this.last=e,this.update(t),setImmediate(this.loop)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}};var w=class{constructor(e){this.update=e;this.last=performance.now();this.running=!1;this.rafId=null;this.loop=()=>{if(!this.running)return;let e=performance.now(),t=(e-this.last)/1e3;this.last=e,this.update(t),requestAnimationFrame(this.loop)}}start(){this.running=!0,this.last=performance.now(),this.rafId=requestAnimationFrame(this.loop)}stop(){this.running=!1,this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}};var he=1,k=class{constructor(e){this.update=e;this.last=performance.now();this.running=!1;this.loop=()=>{if(!this.running)return;let e=performance.now(),t=(e-this.last)/1e3;this.last=e,this.update(t),setTimeout(this.loop,he)}}start(){this.running=!0,this.last=performance.now(),this.loop()}stop(){this.running=!1}};function pe(o,e){return o==="server-immediate"?new x(e):o==="server-timeout"?new k(e):new w(e)}var fe=[{x:1,y:0},{x:-1,y:0},{x:0,y:1},{x:0,y:-1}],M=o=>({x:Math.floor(o.x),y:Math.floor(o.y)}),Z=o=>({x:o.x+.5,y:o.y+.5}),me=(()=>{let o=1;return()=>o++})(),b=(o,e)=>o&65535|(e&65535)<<16,V=o=>({x:o<<16>>16,y:o>>16}),A=class{constructor(e){this.scoreFn=e;this.heap=[]}push(e){this.heap.push(e),this.bubbleUp(this.heap.length-1)}pop(){let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&t!==void 0&&(this.heap[0]=t,this.sinkDown(0)),e}get size(){return this.heap.length}bubbleUp(e){let t=this.heap[e],s=this.scoreFn(t);for(;e>0;){let r=(e+1>>1)-1,a=this.heap[r];if(s>=this.scoreFn(a))break;this.heap[r]=t,this.heap[e]=a,e=r}}sinkDown(e){let t=this.heap.length,s=this.heap[e],r=this.scoreFn(s);for(;;){let a=e+1<<1,n=a-1,i=null,l;if(n<t){let c=this.heap[n];l=this.scoreFn(c),l<r&&(i=n)}if(a<t){let c=this.heap[a];this.scoreFn(c)<(i===null?r:l)&&(i=a)}if(i===null)break;this.heap[e]=this.heap[i],this.heap[i]=s,e=i}}},R=class{constructor(e=1){this.grid=new Map;this.obstacleCells=new Map;this.cellSize=e}hash(e,t){let s=Math.floor(e/this.cellSize),r=Math.floor(t/this.cellSize);return b(s,r)}add(e,t){let s=this.getCellsForObstacle(t);for(let r of s)this.grid.has(r)||this.grid.set(r,new Set),this.grid.get(r).add(e);this.obstacleCells.set(e,s)}remove(e){let t=this.obstacleCells.get(e);if(t){for(let s of t){let r=this.grid.get(s);r&&(r.delete(e),r.size===0&&this.grid.delete(s))}this.obstacleCells.delete(e)}}query(e){let t=this.hash(e.x,e.y);return this.grid.get(t)||new Set}clear(){this.grid.clear(),this.obstacleCells.clear()}getCellsForObstacle(e){let t=new Set;if(e.type==="circle"){let s=e.radius,r=Math.floor((e.pos.x-s)/this.cellSize),a=Math.floor((e.pos.x+s)/this.cellSize),n=Math.floor((e.pos.y-s)/this.cellSize),i=Math.floor((e.pos.y+s)/this.cellSize);for(let l=r;l<=a;l++)for(let c=n;c<=i;c++)t.add(b(l,c))}else if(e.type==="rect"){let s=e.pos.x+e.size.x/2,r=e.pos.y+e.size.y/2,a=e.size.x/2,n=e.size.y/2,i=Math.sqrt(a*a+n*n),l=Math.floor((s-i)/this.cellSize),c=Math.floor((s+i)/this.cellSize),d=Math.floor((r-i)/this.cellSize),u=Math.floor((r+i)/this.cellSize);for(let h=l;h<=c;h++)for(let f=d;f<=u;f++)t.add(b(h,f))}else if(e.type==="polygon"){let s=te(e),r=Math.floor(s.minX/this.cellSize),a=Math.floor(s.maxX/this.cellSize),n=Math.floor(s.minY/this.cellSize),i=Math.floor(s.maxY/this.cellSize);for(let l=r;l<=a;l++)for(let c=n;c<=i;c++)t.add(b(l,c))}return t}};function J(o,e){let t=o.x-e.pos.x,s=o.y-e.pos.y;return t*t+s*s<=e.radius*e.radius}function Q(o,e){let t=e.pos.x+e.size.x/2,s=e.pos.y+e.size.y/2;if(e.rotation){let r=Math.cos(-e.rotation),a=Math.sin(-e.rotation),n=o.x-t,i=o.y-s,l=n*r-i*a,c=n*a+i*r;return Math.abs(l)<=e.size.x/2&&Math.abs(c)<=e.size.y/2}return o.x>=e.pos.x&&o.y>=e.pos.y&&o.x<=e.pos.x+e.size.x&&o.y<=e.pos.y+e.size.y}function ee(o,e){let t=!1,s=e.points,r=e.rotation?Math.cos(e.rotation):1,a=e.rotation?Math.sin(e.rotation):0;for(let n=0,i=s.length-1;n<s.length;i=n++){let l=s[n].x,c=s[n].y,d=s[i].x,u=s[i].y;if(e.rotation){let f=l*r-c*a,y=l*a+c*r,p=d*r-u*a,S=d*a+u*r;l=f,c=y,d=p,u=S}l+=e.pos.x,c+=e.pos.y,d+=e.pos.x,u+=e.pos.y,c>o.y!=u>o.y&&o.x<(d-l)*(o.y-c)/(u-c)+l&&(t=!t)}return t}function te(o){let e=1/0,t=1/0,s=-1/0,r=-1/0,a=o.rotation?Math.cos(o.rotation):1,n=o.rotation?Math.sin(o.rotation):0;for(let i of o.points){let l=i.x,c=i.y;if(o.rotation){let d=l*a-c*n,u=l*n+c*a;l=d,c=u}l+=o.pos.x,c+=o.pos.y,e=Math.min(e,l),t=Math.min(t,c),s=Math.max(s,l),r=Math.max(r,c)}return{minX:e,minY:t,maxX:s,maxY:r}}var N=class{constructor(){this.items=new Map;this.spatial=new R(1);this._cachedItems=[];this.dirty=!0;this.version=0}add(e){let t=me(),s={...e,id:t};return this.items.set(t,s),this.spatial.add(t,s),this.dirty=!0,this.version++,t}move(e,t){let s=this.items.get(e);if(!s)return;this.spatial.remove(e);let r={...s,pos:{...t}};this.items.set(e,r),this.spatial.add(e,r),this.dirty=!0,this.version++}remove(e){this.spatial.remove(e),this.items.delete(e),this.dirty=!0,this.version++}at(e){let t=this.spatial.query(e);for(let s of t){let r=this.items.get(s);if(!(!r||r.solid===!1)&&(r.type==="circle"&&J(e,r)||r.type==="rect"&&Q(e,r)||r.type==="polygon"&&ee(e,r)))return r}}get values(){return this.dirty?(this._cachedItems=[...this.items.values()],this.dirty=!1,this._cachedItems):this._cachedItems}},C=class{constructor(e){this.obstacles=e;this.blocked=new Set}rebuild(){this.blocked.clear();for(let e of this.obstacles.values)if(e.solid!==!1){if(e.type==="circle"){let t=Math.ceil(e.radius),s=Math.floor(e.pos.x),r=Math.floor(e.pos.y);for(let a=-t;a<=t;a++)for(let n=-t;n<=t;n++){let i=s+a,l=r+n,c={x:i+.5,y:l+.5};J(c,e)&&this.blocked.add(b(i,l))}}else if(e.type==="rect"){let t=e.pos.x+e.size.x/2,s=e.pos.y+e.size.y/2,r=e.size.x/2,a=e.size.y/2,n=Math.sqrt(r*r+a*a),i=Math.floor(t-n),l=Math.ceil(t+n),c=Math.floor(s-n),d=Math.ceil(s+n);for(let u=i;u<=l;u++)for(let h=c;h<=d;h++){let f={x:u+.5,y:h+.5};Q(f,e)&&this.blocked.add(b(u,h))}}else if(e.type==="polygon"){let t=te(e),s=Math.floor(t.minX),r=Math.ceil(t.maxX),a=Math.floor(t.minY),n=Math.ceil(t.maxY);for(let i=s;i<=r;i++)for(let l=a;l<=n;l++){let c={x:i+.5,y:l+.5};ee(c,e)&&this.blocked.add(b(i,l))}}}}findPath(e,t){return se(M(e),M(t),(s,r)=>!this.blocked.has(b(s,r))).map(Z)}},D=class{constructor(e){this.obstacles=e}rebuild(){}findPath(e,t){let s=Math.ceil(Math.hypot(t.x-e.x,t.y-e.y)*2),r=!1;for(let n=1;n<=s;n++){let i=n/s,l={x:e.x+(t.x-e.x)*i,y:e.y+(t.y-e.y)*i};if(this.obstacles.at(l)){r=!0;break}}return r?se(M(e),M(t),(n,i)=>{let l={x:n+.5,y:i+.5};return!this.obstacles.at(l)}).map(Z):[e,t]}},L=class{constructor(e,t){this.type=e;this.lastVersion=-1;this.pendingPaths=0;this.AUTO_WORKER_THRESHOLD=20;this.obstacles=new N,this.options={workers:t?.workers??!1,workerPoolSize:t?.workerPoolSize??4,workerPath:t?.workerPath??"./navmesh.worker.js"},e==="grid"&&(this.grid=new C(this.obstacles)),e==="graph"&&(this.graph=new D(this.obstacles)),this.options.workers===!0&&this.initWorkerPool()}async initWorkerPool(){if(!this.workerPool)try{let{NavMeshWorkerPool:e}=await Promise.resolve().then(()=>(G(),$));this.workerPool=new e(this.options.workerPoolSize,this.options.workerPath,this.type,this.obstacles.values),await this.workerPool.init()}catch(e){console.warn("Failed to initialize worker pool, falling back to sync:",e),this.options.workers=!1}}shouldUseWorkers(){return this.options.workers===!1?!1:this.options.workers===!0?!0:this.pendingPaths>=this.AUTO_WORKER_THRESHOLD}addObstacle(e){return this.obstacles.add(e)}moveObstacle(e,t){this.obstacles.move(e,t)}removeObstacle(e){this.obstacles.remove(e)}getObstacles(){return this.obstacles.values}findPath({from:e,to:t}){return this.shouldUseWorkers()&&this.workerPool?(this.pendingPaths++,this.findPathAsync(e,t).finally(()=>{this.pendingPaths--})):(this.rebuild(),this.type==="grid"?this.grid.findPath(e,t):this.graph.findPath(e,t))}async findPathAsync(e,t){return this.options.workers==="auto"&&!this.workerPool&&await this.initWorkerPool(),this.workerPool?this.workerPool.findPath(e,t):(this.rebuild(),this.type==="grid"?this.grid.findPath(e,t):this.graph.findPath(e,t))}rebuild(){this.lastVersion!==this.obstacles.version&&(this.grid?.rebuild(),this.graph?.rebuild(),this.lastVersion=this.obstacles.version)}dispose(){this.workerPool&&(this.workerPool.terminate(),this.workerPool=void 0)}getWorkerStatus(){return{workersEnabled:this.options.workers,workerPoolActive:!!this.workerPool,pendingPaths:this.pendingPaths,usingWorkersNow:this.shouldUseWorkers()}}};function se(o,e,t){let s=new Map,r=new Map,a=new Set,n=new Set,i=u=>b(u.x,u.y),l=(u,h)=>Math.abs(u.x-h.x)+Math.abs(u.y-h.y),c=new A(u=>{let h=V(u);return r.get(u)+l(h,e)}),d=i(o);for(r.set(d,0),c.push(d),n.add(d);c.size>0;){let u=c.pop();n.delete(u);let h=V(u);if(h.x===e.x&&h.y===e.y)return ye(s,h);a.add(u);for(let f of fe){let y={x:h.x+f.x,y:h.y+f.y};if(!t(y.x,y.y))continue;let p=i(y);if(a.has(p))continue;let S=r.get(u)+1;S<(r.get(p)??1/0)&&(r.set(p,S),s.set(p,u),n.has(p)||(c.push(p),n.add(p)))}}return[]}function ye(o,e){let t=[e],s=b(e.x,e.y);for(;o.has(s);)s=o.get(s),t.push(V(s));return t.reverse()}var g=class{constructor(e){this.factory=e;this.pool=[]}acquire(){return this.pool.pop()??this.factory()}release(e){this.pool.push(e)}releaseAll(e){this.pool.push(...e)}},T=class{constructor(e){this.schema=e;this.pool=new g(()=>this.createNil())}createNil(){let e={};for(let t of Object.keys(this.schema)){let s=this.schema[t];e[t]="toNil"in s?s.toNil():void 0}return e}decode(e){let t=this.pool.acquire();return this.decodeInto(e,t),t}decodeInto(e,t){let s=0;for(let r of Object.keys(this.schema)){let a=this.schema[r];if("decodeAll"in a){let n=a.decodeAll(e.subarray(s));t[r]=n.value,s+=n.bytesRead}else if("decodeField"in a){let n=a.decodeField(e.subarray(s));t[r]=n.value,s+=n.bytesRead}else if("decode"in a){let n=a.decode(e.subarray(s));t[r]=n.value,s+=n.bytesRead}else{let n=a.size||0,i=e.subarray(s,s+n);v.decodeInto({[r]:a},i,t),s+=n}}}release(e){this.pool.release(e)}},W=class{constructor(e){this.pooledDecoder=new T(e)}decodeAll(e){return e.map(t=>this.pooledDecoder.decode(t))}releaseAll(e){e.forEach(t=>this.pooledDecoder.release(t))}},O=class{constructor(e,t=1024){this.schema=e;this.bufferSize=t;this.pool=new g(()=>new Uint8Array(t))}encode(e){let t=this.pool.acquire(),s=0;for(let r of Object.keys(this.schema)){let a=this.schema[r];if("encode"in a){let n=a.encode(e[r]);t.set(n,s),s+=n.length}else if("encodeAll"in a){let n=a.encodeAll(e[r]),i=0;for(let l of n)t.set(l,s+i),i+=l.length;s+=i}else{let n=v.encode({[r]:a},{[r]:e[r]});t.set(n,s),s+=n.length}}return t.subarray(0,s)}release(e){this.pool.release(e)}},_=class{constructor(e){this.schema=e;this.encoder=new O(e),this.decoder=new T(e)}calculateSize(e){let t=0;for(let s of Object.keys(this.schema)){let r=this.schema[s];"size"in r?t+=r.size:"calculateSize"in r&&(t+=r.calculateSize(e[s]))}return t}encodeInto(e,t,s){let r=new DataView(t.buffer,t.byteOffset),a=s;for(let n of Object.keys(this.schema)){let i=this.schema[n];if("write"in i)i.write(r,a,e[n]),a+=i.size;else if("encodeInto"in i){let l=i.encodeInto(e[n],t,a);a+=l}else if("encode"in i){let l=i.encode(e[n]);t.set(l,a),a+=l.length}}return a-s}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}release(e){this.decoder.release(e)}static array(e){let t=0;for(let l of Object.keys(e)){let c=e[l];t+=c.size||0}let s=new g(()=>new Uint8Array(16384)),r=new g(()=>{let l={};for(let c of Object.keys(e)){let d=e[c];l[c]="toNil"in d?d.toNil():void 0}return l}),a=new g(()=>[]),n=null,i=null;return{__arrayType:void 0,calculateSize(l){return 2+l.length*t},encodeInto(l,c,d){let u=new DataView(c.buffer,c.byteOffset);u.setUint16(d,l.length,!1);let h=d+2;for(let f of l)for(let y of Object.keys(e)){let p=e[y];p.write(u,h,f[y]),h+=p.size}return h-d},encode(l){let c=2+l.length*t,d=s.acquire();d.length<c&&(s.release(d),d=new Uint8Array(Math.max(c,d.length*2))),(!n||n.buffer!==d.buffer)&&(n=new DataView(d.buffer,d.byteOffset)),n.setUint16(0,l.length,!1);let u=2;for(let f of l)for(let y of Object.keys(e)){let p=e[y];p.write(n,u,f[y]),u+=p.size}let h=new Uint8Array(u);return h.set(d.subarray(0,u)),s.release(d),h},decodeField(l){let c=l[0]<<8|l[1],d=a.acquire();d.length=c,(!i||i.buffer!==l.buffer||i.byteOffset!==l.byteOffset)&&(i=new DataView(l.buffer,l.byteOffset));let u=2;for(let h=0;h<c;h++){let f=r.acquire();for(let y of Object.keys(e)){let p=e[y];f[y]=p.read(i,u),u+=p.size}d[h]=f}return{value:d,bytesRead:u}},decode(l){return this.decodeField(l).value},toNil(){return[]}}}};var z=class{constructor(){this.tracker=new Map}get size(){return this.tracker.size}track(e,t){return this.tracker.has(e)||this.tracker.set(e,[]),this.tracker.get(e).push(t),t}dropUpTo(e){let t=[];for(let[s,r]of this.tracker)s<=e?this.tracker.delete(s):t.push([s,r]);return t.sort(([s],[r])=>s-r),t.map(([s,r])=>r).flat()}values(){return Array.from(this.tracker.entries()).sort(([e],[t])=>e-t).map(([e,t])=>t).flat()}},j=class{constructor(e){this.options=e;this.tracker=new z}trackIntent(e,t){this.tracker.track(e,t)}onSnapshot(e){this.options.onLoadState(e.state);let t=this.tracker.dropUpTo(e.tick);t.length>0&&this.options.onReplay(t)}replay(e){this.options.onReplay(e)}};var q=class{constructor(){this.keys=Object.create(null);this.prevKeys=Object.create(null);this.mouse={x:0,y:0,dx:0,dy:0,left:!1,right:!1,middle:!1,scrollX:0,scrollY:0};this.prevMouse={left:!1,right:!1,middle:!1};this.snapshotFlip=!1;this.handlers={keydown:e=>this.onKeyDown(e),keyup:e=>this.onKeyUp(e),mousemove:e=>this.onMouseMove(e),mousedown:e=>this.onMouseDown(e),mouseup:e=>this.onMouseUp(e),wheel:e=>this.onMouseWheel(e),swipe:e=>this.onSwipe(e),pinch:e=>this.onPinch(e)};this.snapshotA=re(),this.snapshotB=re()}peek(){let e=this.snapshotFlip?this.snapshotA:this.snapshotB;return be(e,this.keys,this.mouse),e}snapshot(){let e=this.snapshotFlip?this.snapshotA:this.snapshotB;return this.snapshotFlip=!this.snapshotFlip,ge(e,this.keys,this.prevKeys,this.mouse,this.prevMouse),this.mouse.dx=0,this.mouse.dy=0,this.mouse.scrollX=0,this.mouse.scrollY=0,this.prevMouse.left=this.mouse.left,this.prevMouse.right=this.mouse.right,this.prevMouse.middle=this.mouse.middle,e}listen(e){this.inputSource&&this.inputSource.detach(),this.inputSource=e,e.attach(this.handlers)}unlisten(){this.inputSource&&this.inputSource.detach()}onKeyDown(e){let t=this.keys[e.code]??={down:!1,hit:!1,released:!1};t.down=!0}onKeyUp(e){let t=this.keys[e.code]??={down:!1,hit:!1,released:!1};t.down=!1}onMouseMove(e){let t=e.target.getBoundingClientRect(),s=e.clientX-t.left,r=e.clientY-t.top;this.mouse.dx+=s-this.mouse.x,this.mouse.dy+=r-this.mouse.y,this.mouse.x=s,this.mouse.y=r}onMouseDown(e){e.button===0&&(this.mouse.left=!0),e.button===1&&(this.mouse.middle=!0),e.button===2&&(this.mouse.right=!0)}onMouseUp(e){e.button===0&&(this.mouse.left=!1),e.button===1&&(this.mouse.middle=!1),e.button===2&&(this.mouse.right=!1)}onMouseWheel(e){this.mouse.scrollX+=e.deltaX,this.mouse.scrollY+=e.deltaY}onSwipe(e){}onPinch(e){}};function re(){return{mouse:{position:{x:0,y:0},delta:{position:{x:0,y:0},scroll:{x:0,y:0}},left:{down:!1,hit:!1,released:!1},right:{down:!1,hit:!1,released:!1},middle:{down:!1,hit:!1,released:!1}},keys:Object.create(null)}}function be(o,e,t){for(let s in e){let r=o.keys[s]??={down:!1,hit:!1,released:!1};r.down=e[s].down,r.hit=!1,r.released=!1}o.mouse.position.x=t.x,o.mouse.position.y=t.y,o.mouse.delta.position.x=t.dx,o.mouse.delta.position.y=t.dy,o.mouse.delta.scroll.x=t.scrollX,o.mouse.delta.scroll.y=t.scrollY,o.mouse.left.down=t.left,o.mouse.right.down=t.right,o.mouse.middle.down=t.middle,o.mouse.left.hit=o.mouse.left.released=!1,o.mouse.right.hit=o.mouse.right.released=!1,o.mouse.middle.hit=o.mouse.middle.released=!1}function ge(o,e,t,s,r){for(let a in e){let n=e[a].down,i=t[a]??!1,l=o.keys[a]??={down:!1,hit:!1,released:!1};l.down=n,l.hit=n&&!i,l.released=!n&&i,t[a]=n}o.mouse.position.x=s.x,o.mouse.position.y=s.y,o.mouse.delta.position.x=s.dx,o.mouse.delta.position.y=s.dy,o.mouse.delta.scroll.x=s.scrollX,o.mouse.delta.scroll.y=s.scrollY,Y(o.mouse.left,s.left,r.left),Y(o.mouse.right,s.right,r.right),Y(o.mouse.middle,s.middle,r.middle)}function Y(o,e,t){o.down=e,o.hit=e&&!t,o.released=!e&&t}var X=class{constructor(e,t){this.keyboardTarget=e;this.mouseTarget=t}attach(e){this.handlers&&this.detach(),this.handlers=e,this.keyboardTarget.addEventListener("keydown",e.keydown),this.keyboardTarget.addEventListener("keyup",e.keyup),this.mouseTarget.addEventListener("mousemove",e.mousemove),this.mouseTarget.addEventListener("mousedown",e.mousedown),this.mouseTarget.addEventListener("mouseup",e.mouseup),this.mouseTarget.addEventListener("wheel",e.wheel)}detach(){let e=this.handlers;e&&(this.keyboardTarget.removeEventListener("keydown",e.keydown),this.keyboardTarget.removeEventListener("keyup",e.keyup),this.mouseTarget.removeEventListener("mousemove",e.mousemove),this.mouseTarget.removeEventListener("mousedown",e.mousedown),this.mouseTarget.removeEventListener("mouseup",e.mouseup),this.mouseTarget.removeEventListener("wheel",e.wheel))}};
@@ -1,175 +0,0 @@
1
- /**
2
- * Stores component data using separate TypedArrays per field (SoA - Structure of Arrays).
3
- * Alternative to DataView-based storage for comparison.
4
- *
5
- * Tradeoffs:
6
- * + Faster individual field access (native typed array operations)
7
- * + Better for column-major access patterns
8
- * + SIMD-friendly (can vectorize single-field operations)
9
- * - Worse cache locality for row-major access (whole component reads)
10
- * - More memory fragmentation (separate arrays)
11
- * - Slightly higher memory overhead (each TypedArray has its own header)
12
- */
13
- export class ComponentStore {
14
- constructor(component, maxEntities) {
15
- this.component = component;
16
- this.maxEntities = maxEntities;
17
- this.stride = component.size;
18
- // Pre-compute field metadata
19
- this.fieldKeys = component.fieldNames;
20
- this.fields = [];
21
- this.fieldIndexMap = {};
22
- this.arrays = [];
23
- // Create separate typed array for each field
24
- for (let i = 0; i < this.fieldKeys.length; i++) {
25
- const key = this.fieldKeys[i];
26
- const field = component.schema[key];
27
- this.fields.push(field);
28
- this.fieldIndexMap[key] = i;
29
- // Allocate appropriate typed array based on field type
30
- switch (field.size) {
31
- case 4:
32
- // Could be f32, i32, or u32 - check field type
33
- if (field.read.toString().includes("getFloat32")) {
34
- this.arrays.push(new Float32Array(maxEntities));
35
- }
36
- else if (field.read.toString().includes("getInt32")) {
37
- this.arrays.push(new Int32Array(maxEntities));
38
- }
39
- else {
40
- this.arrays.push(new Uint32Array(maxEntities));
41
- }
42
- break;
43
- case 2:
44
- this.arrays.push(new Uint16Array(maxEntities));
45
- break;
46
- case 1:
47
- this.arrays.push(new Uint8Array(maxEntities));
48
- break;
49
- default:
50
- // Fallback to Uint8Array with multiple elements
51
- this.arrays.push(new Uint8Array(maxEntities * field.size));
52
- }
53
- }
54
- // Create single reusable object
55
- this.reusableObject = {};
56
- for (let i = 0; i < this.fieldKeys.length; i++) {
57
- this.reusableObject[this.fieldKeys[i]] = this.fields[i].toNil();
58
- }
59
- }
60
- /**
61
- * Get component data for an entity.
62
- *
63
- * ⚠️ IMPORTANT: Returns a REUSED object that is overwritten on the next get() call.
64
- */
65
- get(entityId) {
66
- const length = this.fields.length;
67
- // Unrolled loop for common cases
68
- if (length === 2) {
69
- this.reusableObject[this.fieldKeys[0]] = this.arrays[0][entityId];
70
- this.reusableObject[this.fieldKeys[1]] = this.arrays[1][entityId];
71
- }
72
- else if (length === 3) {
73
- this.reusableObject[this.fieldKeys[0]] = this.arrays[0][entityId];
74
- this.reusableObject[this.fieldKeys[1]] = this.arrays[1][entityId];
75
- this.reusableObject[this.fieldKeys[2]] = this.arrays[2][entityId];
76
- }
77
- else if (length === 4) {
78
- this.reusableObject[this.fieldKeys[0]] = this.arrays[0][entityId];
79
- this.reusableObject[this.fieldKeys[1]] = this.arrays[1][entityId];
80
- this.reusableObject[this.fieldKeys[2]] = this.arrays[2][entityId];
81
- this.reusableObject[this.fieldKeys[3]] = this.arrays[3][entityId];
82
- }
83
- else {
84
- // Generic loop for other sizes
85
- for (let i = 0; i < length; i++) {
86
- this.reusableObject[this.fieldKeys[i]] = this.arrays[i][entityId];
87
- }
88
- }
89
- return this.reusableObject;
90
- }
91
- /**
92
- * Get a mutable copy of component data.
93
- */
94
- getMutable(entityId) {
95
- const copy = {};
96
- this.copyTo(entityId, copy);
97
- return copy;
98
- }
99
- /**
100
- * Copy component data into a provided object.
101
- */
102
- copyTo(entityId, target) {
103
- for (let i = 0; i < this.fields.length; i++) {
104
- target[this.fieldKeys[i]] = this.arrays[i][entityId];
105
- }
106
- }
107
- /**
108
- * Set component data for an entity.
109
- */
110
- set(entityId, data) {
111
- const length = this.fields.length;
112
- // Unrolled loop for common cases
113
- if (length === 2) {
114
- this.arrays[0][entityId] = data[this.fieldKeys[0]];
115
- this.arrays[1][entityId] = data[this.fieldKeys[1]];
116
- }
117
- else if (length === 3) {
118
- this.arrays[0][entityId] = data[this.fieldKeys[0]];
119
- this.arrays[1][entityId] = data[this.fieldKeys[1]];
120
- this.arrays[2][entityId] = data[this.fieldKeys[2]];
121
- }
122
- else if (length === 4) {
123
- this.arrays[0][entityId] = data[this.fieldKeys[0]];
124
- this.arrays[1][entityId] = data[this.fieldKeys[1]];
125
- this.arrays[2][entityId] = data[this.fieldKeys[2]];
126
- this.arrays[3][entityId] = data[this.fieldKeys[3]];
127
- }
128
- else {
129
- // Generic loop for other sizes
130
- for (let i = 0; i < length; i++) {
131
- this.arrays[i][entityId] = data[this.fieldKeys[i]];
132
- }
133
- }
134
- }
135
- /**
136
- * Update specific fields of a component.
137
- * Optimized to avoid Object.keys() allocation in hot path.
138
- */
139
- update(entityId, partial) {
140
- // Direct iteration
141
- for (const key in partial) {
142
- const i = this.fieldIndexMap[key];
143
- this.arrays[i][entityId] = partial[key];
144
- }
145
- }
146
- /**
147
- * Clear component data for an entity (set to default values)
148
- */
149
- clear(entityId) {
150
- for (let i = 0; i < this.fields.length; i++) {
151
- this.arrays[i][entityId] = this.fields[i].toNil();
152
- }
153
- }
154
- /**
155
- * Get direct access to the underlying arrays.
156
- * Advanced use only - for SIMD operations, batch processing, etc.
157
- */
158
- getRawArrays() {
159
- return this.arrays;
160
- }
161
- /**
162
- * Get a specific field's array directly.
163
- * Useful for vectorized operations on a single field across all entities.
164
- */
165
- getFieldArray(fieldName) {
166
- const index = this.fieldIndexMap[fieldName];
167
- return this.arrays[index];
168
- }
169
- /**
170
- * Get the stride in bytes (for compatibility with DataView version).
171
- */
172
- getStride() {
173
- return this.stride;
174
- }
175
- }
@@ -1,43 +0,0 @@
1
- import { PooledCodec } from "../core/pooled-codec";
2
- /**
3
- * Calculate the byte size of a schema
4
- */
5
- function calculateSchemaSize(schema) {
6
- let size = 0;
7
- for (const key of Object.keys(schema)) {
8
- size += schema[key].size;
9
- }
10
- return size;
11
- }
12
- /**
13
- * Define a component type with its binary schema.
14
- *
15
- * @example
16
- * ```typescript
17
- * const Transform = defineComponent('Transform', {
18
- * x: BinaryCodec.f32,
19
- * y: BinaryCodec.f32,
20
- * rotation: BinaryCodec.f32,
21
- * });
22
- *
23
- * const Health = defineComponent('Health', {
24
- * current: BinaryCodec.u16,
25
- * max: BinaryCodec.u16,
26
- * });
27
- * ```
28
- */
29
- export function defineComponent(name, schema) {
30
- const size = calculateSchemaSize(schema);
31
- const fieldNames = Object.keys(schema);
32
- const fieldCount = fieldNames.length;
33
- // Create PooledCodec for array serialization
34
- const arrayCodec = PooledCodec.array(schema);
35
- return {
36
- name,
37
- schema,
38
- size,
39
- fieldCount,
40
- fieldNames,
41
- arrayCodec,
42
- };
43
- }