murow 0.0.60 → 0.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/README.md +52 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core/loop → types/core/driver}/drivers/immediate.d.ts +1 -1
  156. package/dist/{core/loop → types/core/driver}/drivers/raf.d.ts +1 -1
  157. package/dist/{core/loop → types/core/driver}/drivers/timeout.d.ts +1 -1
  158. package/dist/{core/loop → types/core/driver}/index.d.ts +1 -1
  159. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  160. package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +1 -1
  161. package/dist/types/core/free-list/free-list.d.ts +31 -0
  162. package/dist/types/core/free-list/index.d.ts +1 -0
  163. package/dist/{core → types/core}/index.d.ts +7 -1
  164. package/dist/types/core/input/index.d.ts +3 -0
  165. package/dist/types/core/input/manager.d.ts +56 -0
  166. package/dist/types/core/input/sources/browser.d.ts +9 -0
  167. package/dist/types/core/input/sources/index.d.ts +1 -0
  168. package/dist/types/core/input/types.d.ts +36 -0
  169. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  170. package/dist/types/core/ray/index.d.ts +2 -0
  171. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  172. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  173. package/dist/types/core/simple-rng/index.d.ts +1 -0
  174. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  175. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  176. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  177. package/dist/{ecs → types/ecs}/system-builder.d.ts +20 -9
  178. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  179. package/dist/types/game/index.d.ts +1 -0
  180. package/dist/types/game/loop/index.d.ts +1 -0
  181. package/dist/types/game/loop/loop.d.ts +175 -0
  182. package/dist/{index.d.ts → types/index.d.ts} +2 -0
  183. package/dist/{net → types/net}/index.d.ts +2 -2
  184. package/dist/{net → types/net}/server.d.ts +39 -19
  185. package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +15 -0
  186. package/dist/{protocol → types/protocol}/intent/index.d.ts +1 -1
  187. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  188. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  189. package/dist/types/renderer/base-renderer.d.ts +21 -0
  190. package/dist/types/renderer/index.d.ts +4 -0
  191. package/dist/types/renderer/types.d.ts +79 -0
  192. package/dist/webgpu/cjs/index.js +6004 -0
  193. package/dist/webgpu/esm/index.js +5972 -0
  194. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  195. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  196. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  197. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  198. package/dist/webgpu/types/2d/sprite-accessor.test.d.ts +1 -0
  199. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  200. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  201. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  202. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  203. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  204. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  205. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  206. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  207. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  208. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  209. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  210. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  211. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  212. package/dist/webgpu/types/camera/index.d.ts +2 -0
  213. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  214. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  215. package/dist/webgpu/types/core/constants.d.ts +59 -0
  216. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  217. package/dist/webgpu/types/core/index.d.ts +2 -0
  218. package/dist/webgpu/types/core/math.d.ts +37 -0
  219. package/dist/webgpu/types/core/types.d.ts +125 -0
  220. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  221. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  222. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  223. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  224. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  225. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  226. package/dist/webgpu/types/index.d.ts +32 -0
  227. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  228. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  229. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  230. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  231. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  232. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  233. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  234. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  235. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  236. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  237. package/package.json +96 -26
  238. package/dist/core/binary-codec/binary-codec.js +0 -354
  239. package/dist/core/binary-codec/index.js +0 -1
  240. package/dist/core/events/event-system.js +0 -88
  241. package/dist/core/events/index.js +0 -1
  242. package/dist/core/fixed-ticker/fixed-ticker.js +0 -101
  243. package/dist/core/fixed-ticker/index.js +0 -1
  244. package/dist/core/generate-id/generate-id.js +0 -25
  245. package/dist/core/generate-id/index.js +0 -1
  246. package/dist/core/index.js +0 -9
  247. package/dist/core/lerp/index.js +0 -1
  248. package/dist/core/lerp/lerp.js +0 -42
  249. package/dist/core/loop/drivers/immediate.js +0 -61
  250. package/dist/core/loop/drivers/index.js +0 -3
  251. package/dist/core/loop/drivers/raf.js +0 -62
  252. package/dist/core/loop/drivers/timeout.js +0 -71
  253. package/dist/core/loop/index.js +0 -2
  254. package/dist/core/loop/loop.js +0 -47
  255. package/dist/core/navmesh/index.js +0 -1
  256. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  257. package/dist/core/navmesh/navmesh.js +0 -799
  258. package/dist/core/navmesh/navmesh.worker.js +0 -79
  259. package/dist/core/pooled-codec/index.js +0 -1
  260. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  261. package/dist/core/prediction/index.js +0 -1
  262. package/dist/core/prediction/prediction.js +0 -99
  263. package/dist/core.esm.js +0 -1
  264. package/dist/core.js +0 -1
  265. package/dist/ecs/component-store.js +0 -175
  266. package/dist/ecs/component.js +0 -43
  267. package/dist/ecs/entity-handle.js +0 -515
  268. package/dist/ecs/example.js +0 -125
  269. package/dist/ecs/index.js +0 -4
  270. package/dist/ecs/system-builder.js +0 -180
  271. package/dist/ecs/system.d.ts +0 -63
  272. package/dist/ecs/system.js +0 -92
  273. package/dist/ecs/world-systems.js +0 -79
  274. package/dist/ecs/world.js +0 -684
  275. package/dist/index.js +0 -24
  276. package/dist/net/adapters/browser-websocket.js +0 -74
  277. package/dist/net/adapters/bun-websocket.js +0 -245
  278. package/dist/net/buffer-pool.js +0 -89
  279. package/dist/net/client.js +0 -586
  280. package/dist/net/index.js +0 -58
  281. package/dist/net/server.js +0 -938
  282. package/dist/net/types.js +0 -31
  283. package/dist/net/validators.js +0 -88
  284. package/dist/protocol/index.js +0 -92
  285. package/dist/protocol/intent/define-intent.js +0 -125
  286. package/dist/protocol/intent/index.js +0 -91
  287. package/dist/protocol/intent/intent-registry.js +0 -91
  288. package/dist/protocol/rpc/define-rpc.js +0 -84
  289. package/dist/protocol/rpc/index.js +0 -3
  290. package/dist/protocol/rpc/rpc-registry.js +0 -159
  291. package/dist/protocol/rpc/rpc.js +0 -12
  292. package/dist/protocol/snapshot/index.js +0 -43
  293. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  294. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  295. package/dist/protocol/snapshot/snapshot.js +0 -30
  296. package/src/core/binary-codec/README.md +0 -60
  297. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  298. package/src/core/binary-codec/binary-codec.ts +0 -448
  299. package/src/core/binary-codec/index.ts +0 -1
  300. package/src/core/events/README.md +0 -47
  301. package/src/core/events/event-system.test.ts +0 -243
  302. package/src/core/events/event-system.ts +0 -140
  303. package/src/core/events/index.ts +0 -1
  304. package/src/core/fixed-ticker/README.md +0 -77
  305. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  306. package/src/core/fixed-ticker/fixed-ticker.ts +0 -169
  307. package/src/core/fixed-ticker/index.ts +0 -1
  308. package/src/core/generate-id/README.md +0 -18
  309. package/src/core/generate-id/generate-id.test.ts +0 -79
  310. package/src/core/generate-id/generate-id.ts +0 -37
  311. package/src/core/generate-id/index.ts +0 -1
  312. package/src/core/index.ts +0 -9
  313. package/src/core/lerp/README.md +0 -79
  314. package/src/core/lerp/index.ts +0 -1
  315. package/src/core/lerp/lerp.test.ts +0 -90
  316. package/src/core/lerp/lerp.ts +0 -42
  317. package/src/core/loop/README.md +0 -97
  318. package/src/core/loop/drivers/immediate.ts +0 -66
  319. package/src/core/loop/drivers/index.ts +0 -3
  320. package/src/core/loop/drivers/raf.ts +0 -67
  321. package/src/core/loop/drivers/timeout.ts +0 -77
  322. package/src/core/loop/index.ts +0 -2
  323. package/src/core/loop/loop.test.ts +0 -414
  324. package/src/core/loop/loop.ts +0 -71
  325. package/src/core/navmesh/README.md +0 -164
  326. package/src/core/navmesh/index.ts +0 -1
  327. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  328. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  329. package/src/core/navmesh/navmesh.test.ts +0 -344
  330. package/src/core/navmesh/navmesh.ts +0 -1047
  331. package/src/core/navmesh/navmesh.worker.ts +0 -147
  332. package/src/core/pooled-codec/README.md +0 -70
  333. package/src/core/pooled-codec/index.ts +0 -1
  334. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  335. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  336. package/src/core/prediction/README.md +0 -64
  337. package/src/core/prediction/index.ts +0 -1
  338. package/src/core/prediction/prediction.test.ts +0 -423
  339. package/src/core/prediction/prediction.ts +0 -112
  340. package/src/ecs/README.md +0 -427
  341. package/src/ecs/benchmark.test.ts +0 -1645
  342. package/src/ecs/component-store.ts +0 -198
  343. package/src/ecs/component.ts +0 -90
  344. package/src/ecs/entity-handle.test.ts +0 -393
  345. package/src/ecs/entity-handle.ts +0 -563
  346. package/src/ecs/example.ts +0 -152
  347. package/src/ecs/index.ts +0 -4
  348. package/src/ecs/system-builder.ts +0 -309
  349. package/src/ecs/system.ts +0 -111
  350. package/src/ecs/world-systems.ts +0 -83
  351. package/src/ecs/world.test.ts +0 -310
  352. package/src/ecs/world.ts +0 -828
  353. package/src/index.ts +0 -28
  354. package/src/net/README.md +0 -474
  355. package/src/net/adapters/browser-websocket.ts +0 -86
  356. package/src/net/adapters/bun-websocket.ts +0 -292
  357. package/src/net/buffer-pool.ts +0 -106
  358. package/src/net/client.test.ts +0 -807
  359. package/src/net/client.ts +0 -695
  360. package/src/net/index.ts +0 -60
  361. package/src/net/server.test.ts +0 -799
  362. package/src/net/server.ts +0 -1116
  363. package/src/net/types.ts +0 -228
  364. package/src/net/validators.ts +0 -104
  365. package/src/protocol/README.md +0 -469
  366. package/src/protocol/index.ts +0 -93
  367. package/src/protocol/intent/define-intent.test.ts +0 -397
  368. package/src/protocol/intent/define-intent.ts +0 -182
  369. package/src/protocol/intent/index.ts +0 -94
  370. package/src/protocol/intent/intent-registry.test.ts +0 -198
  371. package/src/protocol/intent/intent-registry.ts +0 -112
  372. package/src/protocol/intent/intent.ts +0 -12
  373. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  374. package/src/protocol/rpc/define-rpc.ts +0 -113
  375. package/src/protocol/rpc/index.ts +0 -3
  376. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  377. package/src/protocol/rpc/rpc-registry.ts +0 -176
  378. package/src/protocol/rpc/rpc.ts +0 -37
  379. package/src/protocol/snapshot/index.ts +0 -45
  380. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  381. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  382. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  383. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  384. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  385. package/src/protocol/snapshot/snapshot.ts +0 -41
  386. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  387. /package/dist/{core/loop/loop.d.ts → types/core/driver/driver.d.ts} +0 -0
  388. /package/dist/{core/loop → types/core/driver}/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  390. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  391. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  392. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  394. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  395. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  396. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  397. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  398. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  400. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  402. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  403. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  404. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  405. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  406. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  407. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  408. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  409. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  410. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  411. /package/dist/{net → types/net}/client.d.ts +0 -0
  412. /package/dist/{net → types/net}/types.d.ts +0 -0
  413. /package/dist/{net → types/net}/validators.d.ts +0 -0
  414. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  415. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  416. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  417. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  418. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  419. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  420. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  421. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  422. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  423. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  424. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  425. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/animation.test.d.ts} +0 -0
@@ -10,62 +10,43 @@ interface EventSystemProps<EventNames extends string> {
10
10
  events: EventNames[];
11
11
  }
12
12
  /**
13
- * @description
14
- * A callback-based event handling system designed to simplify
15
- * event-driven programming.
13
+ * Zero-allocation event system. Uses flat arrays instead of Map/Set
14
+ * to avoid iterator allocations on every emit().
16
15
  */
17
16
  export declare class EventSystem<EventTuple extends [string, unknown][]> {
18
- /**
19
- * @private
20
- * @description
21
- * The map of registered events and their callbacks.
22
- */
23
- private callbacks;
24
- /**
25
- * @private
26
- * @description
27
- * The list of events that were registered.
28
- */
17
+ private eventIndex;
18
+ private callbackArrays;
19
+ private callbackCounts;
29
20
  private events;
21
+ private emitting;
30
22
  constructor({ events }: EventSystemProps<string>);
31
23
  /**
32
- * @description
33
24
  * Registers a callback for an event.
34
- *
35
- * @param name Event name
36
- * @param callback Callback to run when the event is emitted
37
25
  */
38
26
  on<EventName extends keyof EventMapFromTuple<EventTuple> & string>(name: EventName, callback: Callback<EventMapFromTuple<EventTuple>[EventName]>): void;
39
27
  /**
40
- * @description
41
28
  * Registers a callback for an event that runs only once.
42
- *
43
- * @param name Event name
44
- * @param callback Callback to run when the event is emitted
45
29
  */
46
30
  once<EventName extends keyof EventMapFromTuple<EventTuple> & string>(name: EventName, callback: Callback<EventMapFromTuple<EventTuple>[EventName]>): void;
47
31
  /**
48
- * @description
49
32
  * Emits an event, running all registered callbacks.
50
- *
51
- * @param name Event name
52
- * @param data Event data
33
+ * Zero allocations — iterates a flat array with an index loop.
34
+ * Safe to call off() during emit (nulled slots are skipped).
53
35
  */
54
36
  emit<EventName extends keyof EventMapFromTuple<EventTuple> & string>(name: EventName, data: EventMapFromTuple<EventTuple>[EventName]): void;
55
37
  /**
56
- * @description
57
38
  * Removes a callback from an event.
58
- *
59
- * @param name Event name
60
- * @param callback Callback to remove
39
+ * During emit: nulls the slot (compacted after emit finishes).
40
+ * Outside emit: swap-and-pop for O(1).
61
41
  */
62
42
  off<EventName extends keyof EventMapFromTuple<EventTuple> & string>(name: EventName, callback: Callback<EventMapFromTuple<EventTuple>[EventName]>): void;
63
43
  /**
64
- * @description
65
44
  * Removes all callbacks.
66
- *
67
- * @param name Optional event name
68
45
  */
69
46
  clear<EventName extends keyof EventMapFromTuple<EventTuple> & string>(name?: EventName): void;
47
+ /**
48
+ * Remove null gaps left by off() during emit.
49
+ */
50
+ private compact;
70
51
  }
71
52
  export {};
@@ -14,7 +14,7 @@
14
14
  */
15
15
  export declare class FixedTicker {
16
16
  /**
17
- * @description Accumulator for the time passed since the last tick
17
+ * @description Accumulator for the time passed since the last tick (in milliseconds)
18
18
  */
19
19
  private accumulator;
20
20
  /**
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Free list allocator. Zero-GC, O(1) alloc/free.
3
+ */
4
+ export declare class FreeList {
5
+ private freeList;
6
+ private freeCount;
7
+ private capacity;
8
+ constructor(capacity: number);
9
+ /**
10
+ * Allocate an index from the pool.
11
+ * @returns Available index, or -1 if exhausted
12
+ */
13
+ allocate(): number;
14
+ /**
15
+ * Return an index to the pool for reuse.
16
+ * @param index Index to free
17
+ */
18
+ free(index: number): void;
19
+ /**
20
+ * Check if an index can be allocated.
21
+ */
22
+ hasAvailable(): boolean;
23
+ /**
24
+ * Get number of available slots.
25
+ */
26
+ getAvailableCount(): number;
27
+ /**
28
+ * Get number of allocated slots.
29
+ */
30
+ getAllocatedCount(): number;
31
+ }
@@ -0,0 +1 @@
1
+ export * from "./free-list";
@@ -3,7 +3,13 @@ export * from './events';
3
3
  export * from './fixed-ticker';
4
4
  export * from './generate-id';
5
5
  export * from './lerp';
6
- export * from './loop';
6
+ export * from './driver';
7
7
  export * from './navmesh';
8
8
  export * from './pooled-codec';
9
9
  export * from './prediction';
10
+ export * from './input';
11
+ export * from './free-list';
12
+ export * from './sparse-batcher';
13
+ export * from './simple-rng';
14
+ export * from './ray';
15
+ export * from '../renderer';
@@ -0,0 +1,3 @@
1
+ export * from "./manager";
2
+ export * from "./sources";
3
+ export type { InputSnapshot } from "./types";
@@ -0,0 +1,56 @@
1
+ import type { InputEventSource, InputSnapshot } from "./types";
2
+ /**
3
+ * Manages keyboard and mouse input.
4
+ *
5
+ * Design goals:
6
+ * - Zero allocations per frame/tick
7
+ * - Render reads live state (peek)
8
+ * - Simulation reads frozen state (snapshot)
9
+ * - Deterministic hit/release semantics
10
+ */
11
+ export declare class InputManager {
12
+ private keys;
13
+ private prevKeys;
14
+ private mouse;
15
+ private lastClientX;
16
+ private lastClientY;
17
+ private prevMouse;
18
+ private snapshotA;
19
+ private snapshotB;
20
+ private snapshotFlip;
21
+ private inputSource;
22
+ private handlers;
23
+ constructor();
24
+ /**
25
+ * Returns a live, non-allocating view of the current input state.
26
+ *
27
+ * - No hit/release detection
28
+ * - No resets
29
+ * - Safe for render passes
30
+ */
31
+ peek(): Readonly<InputSnapshot>;
32
+ /**
33
+ * Produces a frozen snapshot of the input state.
34
+ *
35
+ * - Computes hit/release
36
+ * - Resets deltas
37
+ * - Safe to store for the duration of the tick
38
+ */
39
+ snapshot(): InputSnapshot;
40
+ /**
41
+ * Starts listening to an input event source
42
+ */
43
+ listen(source: InputEventSource): void;
44
+ /**
45
+ * Stops listening to the current input source.
46
+ */
47
+ unlisten(): void;
48
+ private onKeyDown;
49
+ private onKeyUp;
50
+ private onMouseMove;
51
+ private onMouseDown;
52
+ private onMouseUp;
53
+ private onMouseWheel;
54
+ private onSwipe;
55
+ private onPinch;
56
+ }
@@ -0,0 +1,9 @@
1
+ import { InputHandlers, InputEventSource } from "../types";
2
+ export declare class BrowserInputSource implements InputEventSource {
3
+ private keyboardTarget;
4
+ private mouseTarget;
5
+ private handlers;
6
+ constructor(keyboardTarget: Document | Window, mouseTarget: HTMLElement);
7
+ attach(h: InputHandlers): void;
8
+ detach(): void;
9
+ }
@@ -0,0 +1 @@
1
+ export * from "./browser";
@@ -0,0 +1,36 @@
1
+ export type InputHandlers = {
2
+ keydown: (e: KeyboardEvent) => void;
3
+ keyup: (e: KeyboardEvent) => void;
4
+ mousemove: (e: MouseEvent) => void;
5
+ mousedown: (e: MouseEvent) => void;
6
+ mouseup: (e: MouseEvent) => void;
7
+ wheel: (e: WheelEvent) => void;
8
+ swipe: (direction: 'up' | 'down' | 'left' | 'right') => void;
9
+ pinch: (scale: number) => void;
10
+ };
11
+ export interface InputEventSource {
12
+ attach(handlers: InputHandlers): void;
13
+ detach(): void;
14
+ }
15
+ export type ButtonState = {
16
+ down: boolean;
17
+ hit: boolean;
18
+ released: boolean;
19
+ };
20
+ export type Vector2 = {
21
+ x: number;
22
+ y: number;
23
+ };
24
+ export type InputSnapshot = {
25
+ keys: Record<string, ButtonState>;
26
+ mouse: {
27
+ position: Vector2;
28
+ delta: {
29
+ position: Vector2;
30
+ scroll: Vector2;
31
+ };
32
+ left: ButtonState;
33
+ middle: ButtonState;
34
+ right: ButtonState;
35
+ };
36
+ };
@@ -69,26 +69,6 @@ export interface PolygonObstacle extends BaseObstacle {
69
69
  pos: Vec2;
70
70
  rotation?: number;
71
71
  }
72
- /**
73
- * Manages obstacles with spatial hashing for fast queries.
74
- * Version tracking prevents unnecessary rebuilds.
75
- */
76
- declare class Obstacles {
77
- private items;
78
- private spatial;
79
- private _cachedItems;
80
- dirty: boolean;
81
- version: number;
82
- add(obstacle: ObstacleInput): ObstacleId;
83
- move(id: ObstacleId, pos: Vec2): void;
84
- remove(id: ObstacleId): void;
85
- /**
86
- * Fast spatial query using hash grid.
87
- * O(1) average case instead of O(n) linear scan.
88
- */
89
- at(pos: Vec2): Obstacle | undefined;
90
- get values(): Obstacle[];
91
- }
92
72
  type NavType = 'grid' | 'graph';
93
73
  /**
94
74
  * Navigation mesh with spatial hashing and smart rebuild.
@@ -132,7 +112,7 @@ export declare class NavMesh<TWorkers extends boolean | 'auto' = false> {
132
112
  private grid?;
133
113
  private graph?;
134
114
  private lastVersion;
135
- obstacles: Obstacles;
115
+ private obstacles;
136
116
  private options;
137
117
  private workerPool?;
138
118
  private pendingPaths;
@@ -0,0 +1,2 @@
1
+ export * from './ray-2d';
2
+ export * from './ray-3d';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Ray2D — a 2D ray defined by an origin and a normalized direction.
3
+ * Zero allocations per intersection test.
4
+ *
5
+ * All intersection methods return the parametric distance `t` along the ray
6
+ * to the first hit point, or `null` if there is no intersection.
7
+ * A hit point can be retrieved via `ray.at(t)`.
8
+ */
9
+ export declare class Ray2D {
10
+ origin: [number, number];
11
+ direction: [number, number];
12
+ private _point;
13
+ /**
14
+ * Set origin and direction. Direction is normalized automatically.
15
+ */
16
+ set(ox: number, oy: number, dx: number, dy: number): void;
17
+ /**
18
+ * Returns the point at distance `t` along the ray.
19
+ * Reuses an internal buffer — copy if you need to store the result.
20
+ */
21
+ at(t: number): [number, number];
22
+ /**
23
+ * Intersection with a line segment from (ax, ay) to (bx, by).
24
+ * Returns `t` if the ray hits the segment, `null` otherwise.
25
+ */
26
+ intersectsSegment(ax: number, ay: number, bx: number, by: number): number | null;
27
+ /**
28
+ * Intersection with a circle at (cx, cy) with radius r.
29
+ * Returns `t` at the entry point (or exit if origin is inside), `null` if no hit.
30
+ */
31
+ intersectsCircle(cx: number, cy: number, r: number): number | null;
32
+ /**
33
+ * Intersection with an axis-aligned bounding box.
34
+ * Returns `t` at the entry point, `null` if no hit.
35
+ */
36
+ intersectsAABB(minX: number, minY: number, maxX: number, maxY: number): number | null;
37
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Ray3D — a 3D ray defined by an origin and a normalized direction.
3
+ * Zero allocations per intersection test.
4
+ *
5
+ * All intersection methods return the parametric distance `t` along the ray
6
+ * to the first hit point, or `null` if there is no intersection.
7
+ * A hit point can be retrieved via `ray.at(t)`.
8
+ */
9
+ export declare class Ray3D {
10
+ origin: [number, number, number];
11
+ direction: [number, number, number];
12
+ private _point;
13
+ /**
14
+ * Set origin and direction. Direction is normalized automatically.
15
+ */
16
+ set(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number): void;
17
+ /**
18
+ * Returns the point at distance `t` along the ray.
19
+ * Reuses an internal buffer — copy if you need to store the result.
20
+ */
21
+ at(t: number): [number, number, number];
22
+ /**
23
+ * Intersection with a plane defined by normal (nx, ny, nz) and offset d (n·x = d).
24
+ * Returns `t` at the hit point, `null` if the ray is parallel or hits behind the origin.
25
+ */
26
+ intersectsPlane(nx: number, ny: number, nz: number, d: number): number | null;
27
+ /**
28
+ * Intersection with a sphere at (cx, cy, cz) with radius r.
29
+ * Returns `t` at the entry point (or exit if origin is inside), `null` if no hit.
30
+ */
31
+ intersectsSphere(cx: number, cy: number, cz: number, r: number): number | null;
32
+ /**
33
+ * Intersection with an axis-aligned bounding box.
34
+ * Returns `t` at the entry point, `null` if no hit.
35
+ */
36
+ intersectsAABB(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number): number | null;
37
+ /**
38
+ * Intersection with a triangle using the Möller–Trumbore algorithm.
39
+ * Returns `t` at the hit point, `null` if no hit.
40
+ */
41
+ intersectsTriangle(ax: number, ay: number, az: number, bx: number, by: number, bz: number, cx: number, cy: number, cz: number): number | null;
42
+ }
@@ -0,0 +1 @@
1
+ export * from "./simple-rng";
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SimpleRNG — deterministic, seedable, zero-allocation pseudo-random number generator.
3
+ * Uses a 32-bit LCG (Linear Congruential Generator).
4
+ *
5
+ * Ideal for gameplay logic that must be reproducible (multiplayer, replays),
6
+ * particle systems, procedural generation, and any hot path where
7
+ * Math.random() is too slow or non-deterministic.
8
+ */
9
+ export declare class SimpleRNG {
10
+ private state;
11
+ constructor(seed?: number);
12
+ /**
13
+ * Returns a float in [0, 1).
14
+ */
15
+ rand(): number;
16
+ /**
17
+ * Returns a float in [min, max).
18
+ */
19
+ range(min: number, max: number): number;
20
+ /**
21
+ * Returns an integer in [min, max] (inclusive).
22
+ */
23
+ int(min: number, max: number): number;
24
+ /**
25
+ * Returns true with the given probability (0-1).
26
+ */
27
+ chance(probability: number): boolean;
28
+ /**
29
+ * Pick a random element from an array.
30
+ */
31
+ pick<T>(array: T[]): T;
32
+ /**
33
+ * Reset to a new seed.
34
+ */
35
+ seed(value: number): void;
36
+ }
@@ -0,0 +1 @@
1
+ export * from "./sparse-batcher";
@@ -0,0 +1,55 @@
1
+ /**
2
+ * SparseBatcher — organizes sprite slots into [layer][sheet] buckets for draw calls.
3
+ * Only allocates buckets that are actually used. Most games use <10 buckets total.
4
+ *
5
+ * Memory (10k sprites, 3 layers × 4 sheets = 12 buckets):
6
+ * buckets: 12 × 10,000 × 4 bytes = ~480 KB (lazy, only used buckets)
7
+ * bucketSizes: 16384 × 4 bytes = 64 KB
8
+ * activeBuckets: 16384 × 2 bytes = 32 KB
9
+ * Total: ~576 KB base + buckets as needed
10
+ *
11
+ * MAX_SHEETS = 64 supports up to 64 unique model/spritesheet IDs per layer.
12
+ */
13
+ export declare class SparseBatcher {
14
+ private static readonly MAX_LAYERS;
15
+ private static readonly MAX_SHEETS;
16
+ private static readonly MAX_BUCKETS;
17
+ private readonly BUCKET_INITIAL_SIZE;
18
+ private buckets;
19
+ private bucketSizes;
20
+ private activeBuckets;
21
+ private sortBuffer;
22
+ private activeCount;
23
+ private readonly capacity;
24
+ constructor(capacity: number);
25
+ /**
26
+ * Compute a flat key from layer + sheet.
27
+ */
28
+ private key;
29
+ /**
30
+ * Register a sprite slot into its (layer, sheet) bucket.
31
+ */
32
+ add(layer: number, sheetId: number, slot: number): void;
33
+ /**
34
+ * Remove a sprite slot from its (layer, sheet) bucket.
35
+ * Uses swap-and-pop for O(1) removal within the bucket.
36
+ */
37
+ remove(layer: number, sheetId: number, slot: number): void;
38
+ /**
39
+ * Iterate active buckets in layer order (back-to-front), zero allocations.
40
+ * Callback receives sheetId and a subarray view of instance indices.
41
+ */
42
+ each(cb: (sheetId: number, instances: Uint32Array, count: number) => void): void;
43
+ /**
44
+ * Get the number of active buckets.
45
+ */
46
+ getActiveCount(): number;
47
+ /**
48
+ * Get total sprite count across all buckets.
49
+ */
50
+ getTotalCount(): number;
51
+ /**
52
+ * Clear all buckets.
53
+ */
54
+ clear(): void;
55
+ }
@@ -4,6 +4,13 @@ import { World } from "./world";
4
4
  * Extract component data type from Component<T>
5
5
  */
6
6
  type InferComponentData<C> = C extends Component<infer T> ? T : never;
7
+ /**
8
+ * Field descriptor for specialized proxy creation.
9
+ */
10
+ type FieldDesc = {
11
+ prop: string;
12
+ array: any;
13
+ };
7
14
  /**
8
15
  * Extract the alias (key) and fields from a field mapping object.
9
16
  * { transform2d: ['x', 'y'] } => { alias: 'transform2d', fields: ['x', 'y'] }
@@ -26,6 +33,7 @@ type ExtractFieldMapping<T> = T extends Record<string, readonly any[]> ? {
26
33
  */
27
34
  export type BuildEntityProxy<Components extends readonly Component<any>[], FieldMappings extends readonly any[]> = {
28
35
  eid: number;
36
+ despawn: () => void;
29
37
  } & {
30
38
  -readonly [Index in keyof FieldMappings as Index extends keyof Components ? Components[Index] extends Component<any> ? ExtractFieldMapping<FieldMappings[Index]>["fields"] extends readonly (keyof InferComponentData<Components[Index]>)[] ? ExtractFieldMapping<FieldMappings[Index]>["fields"][number] extends keyof InferComponentData<Components[Index]> ? `${ExtractFieldMapping<FieldMappings[Index]>["alias"] & string}_${ExtractFieldMapping<FieldMappings[Index]>["fields"][number] & string}` : never : never : never : never]: Index extends keyof Components ? Components[Index] extends Component<any> ? ExtractFieldMapping<FieldMappings[Index]>["fields"] extends readonly (keyof InferComponentData<Components[Index]>)[] ? ExtractFieldMapping<FieldMappings[Index]>["fields"][number] extends keyof InferComponentData<Components[Index]> ? InferComponentData<Components[Index]>[ExtractFieldMapping<FieldMappings[Index]>["fields"][number]] : never : never : never : never;
31
39
  } & {
@@ -70,7 +78,8 @@ export declare class SystemBuilder<C extends Component<any>[] = Component<any>[]
70
78
  private components;
71
79
  private fieldMappings?;
72
80
  private userCallback?;
73
- constructor(world: World, components: C, fieldMappings?: FM, userCallback?: (entity: any, deltaTime: number, world: World) => void);
81
+ private conditionPredicate?;
82
+ constructor(world: World, components: C, fieldMappings?: FM, userCallback?: (entity: any, deltaTime: number, world: World) => void, conditionPredicate?: CB extends true ? (entity: BuildEntityProxy<C, FM>) => boolean : undefined);
74
83
  /**
75
84
  * Specify which components this system should query for.
76
85
  */
@@ -81,6 +90,12 @@ export declare class SystemBuilder<C extends Component<any>[] = Component<any>[]
81
90
  fields<const NewFM extends {
82
91
  [K in keyof C]: C[K] extends Component<infer T> ? Record<string, readonly (keyof T)[]> : never;
83
92
  }>(fieldMappings: NewFM): SystemBuilder<C, NewFM, CB>;
93
+ /**
94
+ * Specify a condition to filter entities before running the system callback.
95
+ * @param predicate - Condition to filter entities before running the system callback.
96
+ * @returns A new SystemBuilder instance with the specified condition.
97
+ */
98
+ when(predicate: (entity: BuildEntityProxy<C, FM>) => boolean): SystemBuilder<C, FM, true>;
84
99
  /**
85
100
  * Set the system callback. If components and fields are set, builds the system.
86
101
  */
@@ -100,13 +115,12 @@ export declare class ExecutableSystem {
100
115
  private world;
101
116
  private components;
102
117
  private userCallback;
103
- private fieldArrayCache;
104
- private componentByAlias;
105
- private aliases;
118
+ private fieldDescs;
106
119
  private queryMaskKey;
107
120
  private queryMask;
121
+ private conditionPredicate?;
108
122
  private proxyEntity;
109
- constructor(world: World, components: Component<any>[], userCallback: (entity: any, deltaTime: number, world: World) => void, fieldArrayCache: Record<string, Record<string, any>>, componentByAlias: Record<string, Component<any>>, aliases: string[], queryMaskKey: string, queryMask: number[]);
123
+ constructor(world: World, components: Component<any>[], userCallback: (entity: any, deltaTime: number, world: World) => void, fieldDescs: FieldDesc[], queryMaskKey: string, queryMask: number[], conditionPredicate?: (entity: any) => boolean);
110
124
  /**
111
125
  * Execute the system for all matching entities.
112
126
  *
@@ -116,10 +130,7 @@ export declare class ExecutableSystem {
116
130
  /**
117
131
  * Create proxy entity that exposes arrays directly.
118
132
  *
119
- * Instead of entity.transform_x (getter/setter),
120
- * use entity.transform_x_array[entity.eid] for direct access.
121
- *
122
- * BUT ALSO provide getter/setter for convenience.
133
+ * Each getter closes over a specific TypedArray.
123
134
  */
124
135
  private createProxyEntity;
125
136
  /**
@@ -68,6 +68,8 @@ export declare class World extends WorldSystems {
68
68
  private archetypeVersion;
69
69
  private queryCacheVersions;
70
70
  private queryMaskCache;
71
+ private despawnedBuffer;
72
+ private despawnedCount;
71
73
  private worldId;
72
74
  constructor(config: WorldConfig);
73
75
  /**
@@ -135,6 +137,15 @@ export declare class World extends WorldSystems {
135
137
  * Check if an entity is alive
136
138
  */
137
139
  isAlive(entity: Entity): boolean;
140
+ /**
141
+ * Get entities despawned since the last flushDespawned() call.
142
+ * Returns a subarray view — zero allocations.
143
+ */
144
+ getDespawned(): Uint32Array;
145
+ /**
146
+ * Clear the despawn tracker. Call once per tick after processing despawns.
147
+ */
148
+ flushDespawned(): void;
138
149
  /**
139
150
  * Invalidate all query caches (called on archetype changes).
140
151
  */
@@ -0,0 +1 @@
1
+ export * from "./loop";
@@ -0,0 +1 @@
1
+ export * from "./loop";