murow 0.0.70 → 0.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +54 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base/renderer-2d.js +1 -0
  74. package/dist/cjs/renderer/base/renderer-3d.js +1 -0
  75. package/dist/cjs/renderer/base/renderer.js +1 -0
  76. package/dist/cjs/renderer/gltf/helpers.js +1 -0
  77. package/dist/cjs/renderer/gltf/parser.js +1 -0
  78. package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
  79. package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
  80. package/dist/cjs/renderer/index.js +1 -0
  81. package/dist/cjs/renderer/math.js +1 -0
  82. package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
  83. package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
  84. package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
  85. package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
  86. package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
  87. package/dist/cjs/renderer/spritesheet/parser.js +1 -0
  88. package/dist/cjs/renderer/types.js +1 -0
  89. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  90. package/dist/esm/core/binary-codec/index.js +1 -0
  91. package/dist/esm/core/driver/driver.js +1 -0
  92. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  93. package/dist/esm/core/driver/drivers/index.js +1 -0
  94. package/dist/esm/core/driver/drivers/raf.js +1 -0
  95. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  96. package/dist/esm/core/driver/index.js +1 -0
  97. package/dist/esm/core/events/event-system.js +1 -0
  98. package/dist/esm/core/events/index.js +1 -0
  99. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  100. package/dist/esm/core/fixed-ticker/index.js +1 -0
  101. package/dist/esm/core/free-list/free-list.js +1 -0
  102. package/dist/esm/core/free-list/index.js +1 -0
  103. package/dist/esm/core/generate-id/generate-id.js +1 -0
  104. package/dist/esm/core/generate-id/index.js +1 -0
  105. package/dist/esm/core/index.js +1 -0
  106. package/dist/esm/core/input/index.js +1 -0
  107. package/dist/esm/core/input/manager.js +1 -0
  108. package/dist/esm/core/input/sources/browser.js +1 -0
  109. package/dist/esm/core/input/sources/index.js +1 -0
  110. package/dist/esm/core/input/types.js +0 -0
  111. package/dist/esm/core/lerp/index.js +1 -0
  112. package/dist/esm/core/lerp/lerp.js +1 -0
  113. package/dist/esm/core/navmesh/index.js +1 -0
  114. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  115. package/dist/esm/core/navmesh/navmesh.js +1 -0
  116. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  117. package/dist/esm/core/pooled-codec/index.js +1 -0
  118. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  119. package/dist/esm/core/prediction/index.js +1 -0
  120. package/dist/esm/core/prediction/prediction.js +1 -0
  121. package/dist/esm/core/ray/index.js +1 -0
  122. package/dist/esm/core/ray/ray-2d.js +1 -0
  123. package/dist/esm/core/ray/ray-3d.js +1 -0
  124. package/dist/esm/core/simple-rng/index.js +1 -0
  125. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  126. package/dist/esm/core/sparse-batcher/index.js +1 -0
  127. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  128. package/dist/esm/ecs/component-store.js +1 -0
  129. package/dist/esm/ecs/component.js +1 -0
  130. package/dist/esm/ecs/entity-handle.js +1 -0
  131. package/dist/esm/ecs/index.js +1 -0
  132. package/dist/esm/ecs/system-builder.js +1 -0
  133. package/dist/esm/ecs/world-systems.js +1 -0
  134. package/dist/esm/ecs/world.js +1 -0
  135. package/dist/esm/game/index.js +1 -0
  136. package/dist/esm/game/loop/index.js +1 -0
  137. package/dist/esm/game/loop/loop.js +1 -0
  138. package/dist/esm/index.js +1 -0
  139. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  140. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  141. package/dist/esm/net/buffer-pool.js +1 -0
  142. package/dist/esm/net/client.js +1 -0
  143. package/dist/esm/net/index.js +1 -0
  144. package/dist/esm/net/server.js +1 -0
  145. package/dist/esm/net/types.js +1 -0
  146. package/dist/esm/net/validators.js +1 -0
  147. package/dist/esm/protocol/index.js +1 -0
  148. package/dist/esm/protocol/intent/define-intent.js +1 -0
  149. package/dist/esm/protocol/intent/index.js +1 -0
  150. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  151. package/dist/esm/protocol/intent/intent.js +0 -0
  152. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  153. package/dist/esm/protocol/rpc/index.js +1 -0
  154. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  155. package/dist/esm/protocol/rpc/rpc.js +0 -0
  156. package/dist/esm/protocol/snapshot/index.js +1 -0
  157. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  158. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  159. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  160. package/dist/esm/renderer/base/renderer-2d.js +1 -0
  161. package/dist/esm/renderer/base/renderer-3d.js +1 -0
  162. package/dist/esm/renderer/base/renderer.js +1 -0
  163. package/dist/esm/renderer/gltf/helpers.js +1 -0
  164. package/dist/esm/renderer/gltf/parser.js +1 -0
  165. package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
  166. package/dist/esm/renderer/gltf/skin-parser.js +1 -0
  167. package/dist/esm/renderer/index.js +1 -0
  168. package/dist/esm/renderer/math.js +1 -0
  169. package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
  170. package/dist/esm/renderer/prefab-bucket/index.js +1 -0
  171. package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
  172. package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
  173. package/dist/esm/renderer/spritesheet/helpers.js +1 -0
  174. package/dist/esm/renderer/spritesheet/parser.js +1 -0
  175. package/dist/esm/renderer/types.js +0 -0
  176. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  177. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  178. package/dist/types/core/free-list/free-list.d.ts +31 -0
  179. package/dist/types/core/free-list/index.d.ts +1 -0
  180. package/dist/{core → types/core}/index.d.ts +5 -0
  181. package/dist/{core → types/core}/input/index.d.ts +1 -0
  182. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  183. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  184. package/dist/types/core/ray/index.d.ts +2 -0
  185. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  186. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  187. package/dist/types/core/simple-rng/index.d.ts +1 -0
  188. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  189. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  190. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  191. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  192. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  193. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  194. package/dist/{net → types/net}/index.d.ts +2 -2
  195. package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
  196. package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
  197. package/dist/types/renderer/base/renderer.d.ts +21 -0
  198. package/dist/types/renderer/gltf/helpers.d.ts +43 -0
  199. package/dist/types/renderer/gltf/parser.d.ts +49 -0
  200. package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
  201. package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
  202. package/dist/types/renderer/index.d.ts +15 -0
  203. package/dist/types/renderer/math.d.ts +37 -0
  204. package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
  205. package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
  206. package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
  207. package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
  208. package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
  209. package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
  210. package/dist/types/renderer/types.d.ts +89 -0
  211. package/dist/webgpu/cjs/index.js +5401 -0
  212. package/dist/webgpu/esm/index.js +5378 -0
  213. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  214. package/dist/webgpu/types/2d/renderer.d.ts +86 -0
  215. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  216. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  217. package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
  218. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  219. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  220. package/dist/webgpu/types/3d/renderer.d.ts +266 -0
  221. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  222. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  223. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
  224. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  225. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  226. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  227. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  228. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  229. package/dist/webgpu/types/camera/index.d.ts +2 -0
  230. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  231. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  232. package/dist/webgpu/types/core/constants.d.ts +59 -0
  233. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  234. package/dist/webgpu/types/core/index.d.ts +2 -0
  235. package/dist/webgpu/types/core/types.d.ts +125 -0
  236. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  237. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  238. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  239. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  240. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  241. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  242. package/dist/webgpu/types/index.d.ts +35 -0
  243. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  244. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  245. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  246. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  247. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  248. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  249. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  250. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  251. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
  252. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  253. package/package.json +96 -26
  254. package/dist/core/binary-codec/binary-codec.js +0 -354
  255. package/dist/core/binary-codec/index.js +0 -1
  256. package/dist/core/driver/driver.js +0 -47
  257. package/dist/core/driver/drivers/immediate.js +0 -61
  258. package/dist/core/driver/drivers/index.js +0 -3
  259. package/dist/core/driver/drivers/raf.js +0 -62
  260. package/dist/core/driver/drivers/timeout.js +0 -71
  261. package/dist/core/driver/index.js +0 -2
  262. package/dist/core/events/event-system.js +0 -88
  263. package/dist/core/events/index.js +0 -1
  264. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  265. package/dist/core/fixed-ticker/index.js +0 -1
  266. package/dist/core/generate-id/generate-id.js +0 -25
  267. package/dist/core/generate-id/index.js +0 -1
  268. package/dist/core/index.js +0 -10
  269. package/dist/core/input/index.js +0 -2
  270. package/dist/core/input/manager.js +0 -211
  271. package/dist/core/input/sources/browser.js +0 -29
  272. package/dist/core/input/sources/index.js +0 -1
  273. package/dist/core/lerp/index.js +0 -1
  274. package/dist/core/lerp/lerp.js +0 -42
  275. package/dist/core/navmesh/index.js +0 -1
  276. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  277. package/dist/core/navmesh/navmesh.js +0 -799
  278. package/dist/core/navmesh/navmesh.worker.js +0 -79
  279. package/dist/core/pooled-codec/index.js +0 -1
  280. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  281. package/dist/core/prediction/index.js +0 -1
  282. package/dist/core/prediction/prediction.js +0 -99
  283. package/dist/core.esm.js +0 -1
  284. package/dist/core.js +0 -1
  285. package/dist/ecs/component-store.js +0 -175
  286. package/dist/ecs/component.js +0 -43
  287. package/dist/ecs/entity-handle.js +0 -515
  288. package/dist/ecs/example.js +0 -125
  289. package/dist/ecs/index.js +0 -4
  290. package/dist/ecs/system-builder.js +0 -249
  291. package/dist/ecs/world-systems.js +0 -79
  292. package/dist/ecs/world.js +0 -767
  293. package/dist/game/index.js +0 -1
  294. package/dist/game/loop/index.js +0 -1
  295. package/dist/game/loop/loop.js +0 -108
  296. package/dist/index.js +0 -26
  297. package/dist/net/adapters/browser-websocket.js +0 -74
  298. package/dist/net/adapters/bun-websocket.js +0 -245
  299. package/dist/net/buffer-pool.js +0 -89
  300. package/dist/net/client.js +0 -586
  301. package/dist/net/index.js +0 -58
  302. package/dist/net/server.js +0 -974
  303. package/dist/net/types.js +0 -31
  304. package/dist/net/validators.js +0 -88
  305. package/dist/protocol/index.js +0 -92
  306. package/dist/protocol/intent/define-intent.js +0 -125
  307. package/dist/protocol/intent/index.js +0 -91
  308. package/dist/protocol/intent/intent-registry.js +0 -91
  309. package/dist/protocol/rpc/define-rpc.js +0 -84
  310. package/dist/protocol/rpc/index.js +0 -3
  311. package/dist/protocol/rpc/rpc-registry.js +0 -159
  312. package/dist/protocol/rpc/rpc.js +0 -12
  313. package/dist/protocol/snapshot/index.js +0 -43
  314. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  315. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  316. package/dist/protocol/snapshot/snapshot.js +0 -30
  317. package/src/core/binary-codec/README.md +0 -60
  318. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  319. package/src/core/binary-codec/binary-codec.ts +0 -448
  320. package/src/core/binary-codec/index.ts +0 -1
  321. package/src/core/driver/README.md +0 -97
  322. package/src/core/driver/driver.test.ts +0 -414
  323. package/src/core/driver/driver.ts +0 -71
  324. package/src/core/driver/drivers/immediate.ts +0 -66
  325. package/src/core/driver/drivers/index.ts +0 -3
  326. package/src/core/driver/drivers/raf.ts +0 -67
  327. package/src/core/driver/drivers/timeout.ts +0 -77
  328. package/src/core/driver/index.ts +0 -2
  329. package/src/core/events/README.md +0 -47
  330. package/src/core/events/event-system.test.ts +0 -243
  331. package/src/core/events/event-system.ts +0 -140
  332. package/src/core/events/index.ts +0 -1
  333. package/src/core/fixed-ticker/README.md +0 -77
  334. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  335. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  336. package/src/core/fixed-ticker/index.ts +0 -1
  337. package/src/core/generate-id/README.md +0 -18
  338. package/src/core/generate-id/generate-id.test.ts +0 -79
  339. package/src/core/generate-id/generate-id.ts +0 -37
  340. package/src/core/generate-id/index.ts +0 -1
  341. package/src/core/index.ts +0 -10
  342. package/src/core/input/README.md +0 -24
  343. package/src/core/input/index.ts +0 -2
  344. package/src/core/input/manager.ts +0 -259
  345. package/src/core/input/sources/browser.ts +0 -39
  346. package/src/core/input/sources/index.ts +0 -1
  347. package/src/core/input/types.ts +0 -40
  348. package/src/core/lerp/README.md +0 -79
  349. package/src/core/lerp/index.ts +0 -1
  350. package/src/core/lerp/lerp.test.ts +0 -90
  351. package/src/core/lerp/lerp.ts +0 -42
  352. package/src/core/navmesh/README.md +0 -164
  353. package/src/core/navmesh/index.ts +0 -1
  354. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  355. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  356. package/src/core/navmesh/navmesh.test.ts +0 -344
  357. package/src/core/navmesh/navmesh.ts +0 -1047
  358. package/src/core/navmesh/navmesh.worker.ts +0 -147
  359. package/src/core/pooled-codec/README.md +0 -70
  360. package/src/core/pooled-codec/index.ts +0 -1
  361. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  362. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  363. package/src/core/prediction/README.md +0 -64
  364. package/src/core/prediction/index.ts +0 -1
  365. package/src/core/prediction/prediction.test.ts +0 -423
  366. package/src/core/prediction/prediction.ts +0 -112
  367. package/src/ecs/README.md +0 -427
  368. package/src/ecs/benchmark.test.ts +0 -1645
  369. package/src/ecs/component-store.ts +0 -198
  370. package/src/ecs/component.ts +0 -90
  371. package/src/ecs/entity-handle.test.ts +0 -393
  372. package/src/ecs/entity-handle.ts +0 -563
  373. package/src/ecs/example.ts +0 -152
  374. package/src/ecs/index.ts +0 -4
  375. package/src/ecs/system-builder.ts +0 -404
  376. package/src/ecs/world-systems.ts +0 -83
  377. package/src/ecs/world.test.ts +0 -310
  378. package/src/ecs/world.ts +0 -904
  379. package/src/game/index.ts +0 -1
  380. package/src/game/loop/README.md +0 -32
  381. package/src/game/loop/index.ts +0 -1
  382. package/src/game/loop/loop.ts +0 -236
  383. package/src/index.ts +0 -32
  384. package/src/net/README.md +0 -474
  385. package/src/net/adapters/browser-websocket.ts +0 -86
  386. package/src/net/adapters/bun-websocket.ts +0 -292
  387. package/src/net/buffer-pool.ts +0 -106
  388. package/src/net/client.test.ts +0 -807
  389. package/src/net/client.ts +0 -695
  390. package/src/net/index.ts +0 -60
  391. package/src/net/server.test.ts +0 -799
  392. package/src/net/server.ts +0 -1152
  393. package/src/net/types.ts +0 -228
  394. package/src/net/validators.ts +0 -104
  395. package/src/protocol/README.md +0 -469
  396. package/src/protocol/index.ts +0 -93
  397. package/src/protocol/intent/define-intent.test.ts +0 -397
  398. package/src/protocol/intent/define-intent.ts +0 -201
  399. package/src/protocol/intent/index.ts +0 -94
  400. package/src/protocol/intent/intent-registry.test.ts +0 -198
  401. package/src/protocol/intent/intent-registry.ts +0 -112
  402. package/src/protocol/intent/intent.ts +0 -12
  403. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  404. package/src/protocol/rpc/define-rpc.ts +0 -113
  405. package/src/protocol/rpc/index.ts +0 -3
  406. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  407. package/src/protocol/rpc/rpc-registry.ts +0 -176
  408. package/src/protocol/rpc/rpc.ts +0 -37
  409. package/src/protocol/snapshot/index.ts +0 -45
  410. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  411. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  412. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  413. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  414. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  415. package/src/protocol/snapshot/snapshot.ts +0 -41
  416. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  417. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  418. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  419. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  420. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  421. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  422. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  423. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  424. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  425. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  426. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  427. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  428. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  429. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  430. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  431. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  432. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  433. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  434. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  435. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  436. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  437. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  438. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  439. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  440. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  441. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  442. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  443. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  444. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  445. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  446. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  447. /package/dist/{game → types/game}/index.d.ts +0 -0
  448. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  449. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  450. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  451. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  452. /package/dist/{net → types/net}/client.d.ts +0 -0
  453. /package/dist/{net → types/net}/server.d.ts +0 -0
  454. /package/dist/{net → types/net}/types.d.ts +0 -0
  455. /package/dist/{net → types/net}/validators.d.ts +0 -0
  456. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  457. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  458. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  459. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  460. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  461. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  462. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  463. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  464. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  465. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  466. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  467. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  468. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  469. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  470. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,504 +0,0 @@
1
- import { BinaryCodec, Schema, Field } from "../binary-codec";
2
-
3
- /**
4
- * Type marker for array fields in schemas.
5
- *
6
- * ArrayField now implements both the Field interface (for use in schemas)
7
- * and the Codec interface (for standalone use), making it versatile enough
8
- * to be used directly with SnapshotRegistry or as a field in PooledCodec schemas.
9
- */
10
- export type ArrayField<T> = {
11
- __arrayType?: T[];
12
- encode(items: T[]): Uint8Array;
13
- decode(buf: Uint8Array): T[];
14
- decodeField(buf: Uint8Array): { value: T[]; bytesRead: number };
15
- toNil(): T[];
16
- calculateSize(items: T[]): number;
17
- encodeInto(items: T[], buffer: Uint8Array, offset: number): number;
18
- };
19
-
20
- /**
21
- * Extended schema type that supports both regular fields and array fields
22
- */
23
- export type ExtendedSchema<T> = {
24
- [K in keyof T]: T[K] extends any[]
25
- ? ArrayField<T[K][number]>
26
- : Field<T[K]>;
27
- };
28
-
29
- /**
30
- * Infer the type from a schema definition
31
- */
32
- type InferSchemaType<S> = {
33
- [K in keyof S]: S[K] extends ArrayField<infer U>
34
- ? U[]
35
- : S[K] extends Field<infer V>
36
- ? V
37
- : unknown;
38
- };
39
-
40
- /**
41
- * Generic object pool for reusing objects and minimizing allocations.
42
- * @template T Type of objects stored in the pool.
43
- */
44
- export class ObjectPool<T> {
45
- private pool: T[] = [];
46
-
47
- /**
48
- * @param factory Function to create a new instance when the pool is empty.
49
- */
50
- constructor(private factory: () => T) { }
51
-
52
- /**
53
- * Acquire an object from the pool, or create a new one if empty.
54
- * @returns {T} The acquired object.
55
- */
56
- acquire(): T {
57
- return this.pool.pop() ?? this.factory();
58
- }
59
-
60
- /**
61
- * Return an object to the pool for reuse.
62
- * @param {T} obj Object to release.
63
- */
64
- release(obj: T) {
65
- this.pool.push(obj);
66
- }
67
-
68
- /**
69
- * Return multiple objects to the pool at once.
70
- * @param {T[]} objs Array of objects to release.
71
- */
72
- releaseAll(objs: T[]) {
73
- this.pool.push(...objs);
74
- }
75
- }
76
-
77
- /**
78
- * Pooled decoder for single objects or nested schemas.
79
- * @template T Type of object to decode.
80
- */
81
- export class PooledDecoder<T extends object> {
82
- private pool: ObjectPool<T>;
83
-
84
- /**
85
- * @param schema Schema or record describing the object structure.
86
- * @param initial Initial object used as template for pooling.
87
- */
88
- constructor(private schema: Schema<T> | Record<string, any>) {
89
- this.pool = new ObjectPool(() => this.createNil());
90
- }
91
-
92
- private createNil(): T {
93
- const obj = {} as T;
94
- for (const key of Object.keys(this.schema) as (keyof T)[]) {
95
- const field = (this.schema as any)[key];
96
- obj[key] = "toNil" in field ? field.toNil() : undefined;
97
- }
98
- return obj;
99
- }
100
-
101
- /**
102
- * Decode a buffer into a pooled object.
103
- * @param {Uint8Array} buf Buffer to decode.
104
- * @returns {T} Decoded object.
105
- */
106
- decode(buf: Uint8Array): T {
107
- const obj = this.pool.acquire();
108
- this.decodeInto(buf, obj);
109
- return obj;
110
- }
111
-
112
- /**
113
- * Decode a buffer into a provided target object.
114
- * @param {Uint8Array} buf Buffer to decode.
115
- * @param {T} target Object to write decoded data into.
116
- */
117
- decodeInto(buf: Uint8Array, target: T) {
118
- let offset = 0;
119
- for (const key of Object.keys(this.schema) as (keyof T)[]) {
120
- const field = (this.schema as any)[key];
121
- if ("decodeAll" in field) {
122
- const result = field.decodeAll(buf.subarray(offset));
123
- target[key] = result.value;
124
- offset += result.bytesRead;
125
- } else if ("decodeField" in field) {
126
- // Use decodeField for ArrayField (returns { value, bytesRead })
127
- const result = field.decodeField(buf.subarray(offset));
128
- target[key] = result.value;
129
- offset += result.bytesRead;
130
- } else if ("decode" in field) {
131
- const result = field.decode(buf.subarray(offset));
132
- target[key] = result.value;
133
- offset += result.bytesRead;
134
- } else {
135
- // For primitive fields, calculate size and decode
136
- const fieldSize = field.size || 0;
137
- const fieldBuf = buf.subarray(offset, offset + fieldSize);
138
- BinaryCodec.decodeInto({ [key]: field } as Schema<T>, fieldBuf, target);
139
- offset += fieldSize;
140
- }
141
- }
142
- }
143
-
144
- /**
145
- * Release a decoded object back to the pool.
146
- * @param {T} obj Object to release.
147
- */
148
- release(obj: T) {
149
- this.pool.release(obj);
150
- }
151
- }
152
-
153
- /**
154
- * Pooled decoder for arrays of objects.
155
- * @template T Type of object to decode.
156
- */
157
- export class PooledArrayDecoder<T extends object> {
158
- private pooledDecoder: PooledDecoder<T>;
159
-
160
- /**
161
- * @param schema Schema or record describing object structure.
162
- * @param initial Initial object used as template for pooling.
163
- */
164
- constructor(schema: Schema<T> | Record<string, any>) {
165
- this.pooledDecoder = new PooledDecoder(schema);
166
- }
167
-
168
- /**
169
- * Decode multiple buffers into pooled objects.
170
- * @param {Uint8Array[]} buffers Array of buffers to decode.
171
- * @returns {T[]} Array of decoded objects.
172
- */
173
- decodeAll(buffers: Uint8Array[]): T[] {
174
- return buffers.map((b) => this.pooledDecoder.decode(b));
175
- }
176
-
177
- /**
178
- * Release multiple decoded objects back to the pool.
179
- * @param {T[]} objs Array of objects to release.
180
- */
181
- releaseAll(objs: T[]) {
182
- objs.forEach((o) => this.pooledDecoder.release(o));
183
- }
184
- }
185
-
186
- /**
187
- * Pooled encoder for single objects or nested schemas.
188
- * @template T Type of object to encode.
189
- */
190
- export class PooledEncoder<T extends object> {
191
- private pool: ObjectPool<Uint8Array>;
192
-
193
- /**
194
- * @param schema Schema or record describing object structure.
195
- * @param bufferSize Size of buffer to allocate per encoding (default: 1024).
196
- */
197
- constructor(private schema: Schema<T> | Record<string, any>, private bufferSize = 1024) {
198
- this.pool = new ObjectPool(() => new Uint8Array(bufferSize));
199
- }
200
-
201
- /**
202
- * Encode an object into a pooled buffer.
203
- * @param {T} obj Object to encode.
204
- * @returns {Uint8Array} Encoded buffer.
205
- */
206
- encode(obj: T): Uint8Array {
207
- const buf = this.pool.acquire();
208
- let offset = 0;
209
-
210
- for (const key of Object.keys(this.schema) as (keyof T)[]) {
211
- const field = (this.schema as any)[key];
212
-
213
- if ("encode" in field) {
214
- const nested = field.encode(obj[key]);
215
- buf.set(nested, offset);
216
- offset += nested.length;
217
- } else if ("encodeAll" in field) {
218
- const nestedArr = field.encodeAll(obj[key]);
219
- let arrOffset = 0;
220
- for (const item of nestedArr) {
221
- buf.set(item, offset + arrOffset);
222
- arrOffset += item.length;
223
- }
224
- offset += arrOffset;
225
- } else {
226
- const tmp = BinaryCodec.encode({ [key]: field }, { [key]: obj[key] });
227
- buf.set(tmp, offset);
228
- offset += tmp.length;
229
- }
230
- }
231
-
232
- return buf.subarray(0, offset);
233
- }
234
-
235
- /**
236
- * Release a buffer back to the pool.
237
- * @param {Uint8Array} buf Buffer to release.
238
- */
239
- release(buf: Uint8Array) {
240
- this.pool.release(buf);
241
- }
242
- }
243
-
244
-
245
- /**
246
- * Combined pooled encoder and decoder for a single schema.
247
- * Provides a convenient wrapper around PooledEncoder and PooledDecoder.
248
- * @template S Schema type
249
- */
250
- export class PooledCodec<S extends Record<string, any>> {
251
- /** Pooled encoder for the schema */
252
- encoder: PooledEncoder<any>;
253
-
254
- /** Pooled decoder for the schema */
255
- decoder: PooledDecoder<any>;
256
-
257
- /**
258
- * @param schema Schema describing the object structure.
259
- */
260
- constructor(public schema: S) {
261
- this.encoder = new PooledEncoder(schema);
262
- this.decoder = new PooledDecoder(schema);
263
- }
264
-
265
- /**
266
- * Calculate the size in bytes needed to encode the data.
267
- * @param data Object to calculate size for.
268
- * @returns Size in bytes.
269
- */
270
- calculateSize(data: InferSchemaType<S>): number {
271
- let size = 0;
272
- for (const key of Object.keys(this.schema) as (keyof S)[]) {
273
- const field = (this.schema as any)[key];
274
-
275
- if ("size" in field) {
276
- // Fixed-size primitive field
277
- size += field.size;
278
- } else if ("calculateSize" in field) {
279
- // Variable-size field (like arrays)
280
- size += field.calculateSize((data as any)[key]);
281
- }
282
- }
283
- return size;
284
- }
285
-
286
- /**
287
- * Encode an object directly into a target buffer at the given offset.
288
- * This is a zero-copy operation - no intermediate buffers are allocated.
289
- * @param data Object to encode.
290
- * @param buffer Target buffer to write into.
291
- * @param offset Byte offset in the buffer to start writing.
292
- * @returns Number of bytes written.
293
- */
294
- encodeInto(data: InferSchemaType<S>, buffer: Uint8Array, offset: number): number {
295
- const view = new DataView(buffer.buffer, buffer.byteOffset);
296
- let currentOffset = offset;
297
-
298
- for (const key of Object.keys(this.schema) as (keyof S)[]) {
299
- const field = (this.schema as any)[key];
300
-
301
- if ("write" in field) {
302
- // Primitive field - direct write
303
- field.write(view, currentOffset, (data as any)[key]);
304
- currentOffset += field.size;
305
- } else if ("encodeInto" in field) {
306
- // Array or nested field - delegate to its encodeInto
307
- const bytesWritten = field.encodeInto((data as any)[key], buffer, currentOffset);
308
- currentOffset += bytesWritten;
309
- } else if ("encode" in field) {
310
- // Fallback for fields that only have encode()
311
- const nested = field.encode((data as any)[key]);
312
- buffer.set(nested, currentOffset);
313
- currentOffset += nested.length;
314
- }
315
- }
316
-
317
- return currentOffset - offset; // bytes written
318
- }
319
-
320
- /**
321
- * Encode an object into a pooled buffer.
322
- * @param data Object to encode.
323
- * @returns Encoded buffer.
324
- */
325
- encode(data: InferSchemaType<S>): Uint8Array {
326
- return this.encoder.encode(data as any);
327
- }
328
-
329
- /**
330
- * Decode a buffer into a pooled object.
331
- * @param buf Buffer to decode.
332
- * @returns Decoded object.
333
- */
334
- decode(buf: Uint8Array): InferSchemaType<S> {
335
- return this.decoder.decode(buf) as InferSchemaType<S>;
336
- }
337
-
338
- /**
339
- * Release a decoded object back to the pool.
340
- * @param obj Object to release.
341
- */
342
- release(obj: InferSchemaType<S>) {
343
- this.decoder.release(obj as any);
344
- }
345
-
346
- /**
347
- * Creates an array field descriptor for use in schemas.
348
- * Encodes array length as u16 followed by each item.
349
- *
350
- * @template U Type of items in the array
351
- * @param itemSchema Schema for individual array items
352
- * @returns An array field descriptor that can be used in PooledCodec schemas
353
- *
354
- * @example
355
- * ```ts
356
- * const PlayerSchema = {
357
- * entityId: BinaryPrimitives.u32,
358
- * x: BinaryPrimitives.f32,
359
- * y: BinaryPrimitives.f32,
360
- * };
361
- *
362
- * const UpdateSchema = {
363
- * tick: BinaryPrimitives.u32,
364
- * players: PooledCodec.array(PlayerSchema),
365
- * };
366
- *
367
- * const codec = new PooledCodec(UpdateSchema);
368
- * ```
369
- */
370
- static array<U extends object>(itemSchema: Schema<U> | Record<string, any>): ArrayField<U> {
371
- // Calculate item size once
372
- let itemSize = 0;
373
- for (const key of Object.keys(itemSchema)) {
374
- const field = (itemSchema as any)[key];
375
- itemSize += field.size || 0;
376
- }
377
-
378
- // Pool for encoding buffers (larger initial size to avoid allocations)
379
- const bufferPool = new ObjectPool(() => new Uint8Array(16384));
380
-
381
- // Pool for decoded objects to avoid allocations
382
- const objectPool = new ObjectPool<U>(() => {
383
- const obj = {} as U;
384
- for (const key of Object.keys(itemSchema)) {
385
- const field = (itemSchema as any)[key];
386
- obj[key as keyof U] = ("toNil" in field ? field.toNil() : undefined) as any;
387
- }
388
- return obj;
389
- });
390
-
391
- // Pool for result arrays to avoid allocations
392
- const arrayPool = new ObjectPool<U[]>(() => []);
393
-
394
- // Reusable DataView for encoding
395
- let encodeView: DataView | null = null;
396
-
397
- // Reusable DataView for decoding
398
- let decodeView: DataView | null = null;
399
-
400
- return {
401
- __arrayType: undefined as any,
402
-
403
- calculateSize(items: U[]): number {
404
- return 2 + (items.length * itemSize);
405
- },
406
-
407
- encodeInto(items: U[], buffer: Uint8Array, offset: number): number {
408
- const view = new DataView(buffer.buffer, buffer.byteOffset);
409
-
410
- // Write array length
411
- view.setUint16(offset, items.length, false);
412
- let currentOffset = offset + 2;
413
-
414
- // Write each item directly into buffer
415
- for (const item of items) {
416
- for (const key of Object.keys(itemSchema)) {
417
- const field = (itemSchema as any)[key];
418
- field.write(view, currentOffset, item[key as keyof U]);
419
- currentOffset += field.size;
420
- }
421
- }
422
-
423
- return currentOffset - offset; // bytes written
424
- },
425
-
426
- encode(items: U[]): Uint8Array {
427
- const totalSize = 2 + (items.length * itemSize);
428
- let buffer = bufferPool.acquire();
429
-
430
- // Grow buffer pool if needed (but keep the undersized buffer for next time)
431
- if (buffer.length < totalSize) {
432
- bufferPool.release(buffer);
433
- buffer = new Uint8Array(Math.max(totalSize, buffer.length * 2));
434
- }
435
-
436
- // Create or reuse DataView for this buffer
437
- if (!encodeView || encodeView.buffer !== buffer.buffer) {
438
- encodeView = new DataView(buffer.buffer, buffer.byteOffset);
439
- }
440
-
441
- // Write array length
442
- encodeView.setUint16(0, items.length, false);
443
-
444
- // Write each item directly into buffer (zero intermediate allocations)
445
- let offset = 2;
446
- for (const item of items) {
447
- for (const key of Object.keys(itemSchema)) {
448
- const field = (itemSchema as any)[key];
449
- field.write(encodeView, offset, item[key as keyof U]);
450
- offset += field.size;
451
- }
452
- }
453
-
454
- // Create a copy to return (caller owns this memory)
455
- const result = new Uint8Array(offset);
456
- result.set(buffer.subarray(0, offset));
457
-
458
- // Return buffer to pool
459
- bufferPool.release(buffer);
460
-
461
- return result;
462
- },
463
-
464
- decodeField(buf: Uint8Array): { value: U[]; bytesRead: number } {
465
- // Read array length directly from buffer
466
- const length = (buf[0] << 8) | buf[1];
467
-
468
- // Acquire pooled array and resize if needed
469
- const items = arrayPool.acquire();
470
- items.length = length;
471
-
472
- // Create or reuse DataView for reading
473
- if (!decodeView || decodeView.buffer !== buf.buffer || decodeView.byteOffset !== buf.byteOffset) {
474
- decodeView = new DataView(buf.buffer, buf.byteOffset);
475
- }
476
-
477
- // Read each item using pooled objects
478
- let offset = 2;
479
- for (let i = 0; i < length; i++) {
480
- const item = objectPool.acquire();
481
-
482
- // Decode directly into pooled object
483
- for (const key of Object.keys(itemSchema)) {
484
- const field = (itemSchema as any)[key];
485
- item[key as keyof U] = field.read(decodeView, offset);
486
- offset += field.size;
487
- }
488
-
489
- items[i] = item;
490
- }
491
-
492
- return { value: items, bytesRead: offset };
493
- },
494
-
495
- decode(buf: Uint8Array): U[] {
496
- return this.decodeField(buf).value;
497
- },
498
-
499
- toNil(): U[] {
500
- return [];
501
- }
502
- };
503
- }
504
- }
@@ -1,64 +0,0 @@
1
- # Prediction & Reconciliation (IntentTracker + Reconciliator)
2
-
3
- Client-side utility for **server-authoritative multiplayer games**.
4
- Tracks unconfirmed player intents and reconciles them with authoritative snapshots from the server.
5
-
6
- ---
7
-
8
- ## Installation
9
-
10
- ```ts
11
- import { IntentTracker, Reconciliator } from './prediction';
12
- ````
13
-
14
- ---
15
-
16
- ## Usage Example
17
-
18
- ```ts
19
- const positionRecon = new Reconciliator<MoveIntent, PositionSnapshot>({
20
- onLoadState: (state) => gameClient.setPositions(state), // rewind to server-authoritative state
21
- onReplay: (remainingIntents) => remainingIntents.forEach((i) => gameClient.applyMove(i)), // replay remaining unconfirmed intents
22
- });
23
-
24
- const ticker = new FixedTicker({
25
- rate: 12, // ticks per second
26
- onTick: (deltaTime, tick) => {
27
- // Track input
28
- if (inputs.has('position')) {
29
- const intent = inputs.getAndRemove('position');
30
- positionRecon.trackIntent(tick, intent);
31
- }
32
-
33
- // Update game client simulation
34
- gameClient.update(deltaTime);
35
- }
36
- });
37
-
38
- function onServerSnapshot(snapshot: { tick: number; state: PositionSnapshot }) {
39
- positionRecon.onSnapshot(snapshot);
40
- }
41
-
42
- let lastTime = 0;
43
- function rafStep(now: number) {
44
- const delta = (now - lastTime) / 1000; // seconds
45
- lastTime = now;
46
-
47
- ticker.update(delta); // manually drive the ticker
48
-
49
- requestAnimationFrame(rafStep);
50
- }
51
-
52
- function start() {
53
- lastTime = performance.now();
54
- requestAnimationFrame(rafStep);
55
- }
56
- ```
57
-
58
- ---
59
-
60
- ### Key Concepts
61
-
62
- * **IntentTracker**: Tracks client-side intents that are sent but not yet confirmed by the server.
63
- * **Reconciliator**: Resets client state to authoritative snapshots and replays unconfirmed intents to maintain smooth prediction.
64
- * Works for **any type of server-authoritative game**, not just movement.
@@ -1 +0,0 @@
1
- export * from './prediction';