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,469 +0,0 @@
1
- # Protocol Layer
2
-
3
- Minimalist primitives for networked multiplayer games. Intents, snapshots, and RPCs - you handle the rest.
4
-
5
- ## What You Get
6
-
7
- 1. **IntentRegistry** - Register, encode, decode intents with zero allocations (Client → Server inputs)
8
- 2. **Snapshot<T>** - Type-safe delta updates (Server → Client state sync)
9
- 3. **RpcRegistry** - Remote procedure calls for one-off events (Bidirectional)
10
- 4. **applySnapshot()** - Deep merge snapshot updates into state
11
-
12
- That's it. No loops, no queues, no storage - just the codec layer.
13
-
14
- ## Quick Start
15
-
16
- ### 1. Define Your Intent Kinds
17
-
18
- ```ts
19
- // Define all your intent kinds in one place
20
- enum IntentKind {
21
- Move = 1,
22
- Shoot = 2,
23
- Jump = 3,
24
- }
25
- ```
26
-
27
- ### 2. Define Intents with Type-Safe Schemas
28
-
29
- ```ts
30
- import { defineIntent } from "./protocol/intent";
31
- import { BinaryCodec } from "./core/binary-codec";
32
-
33
- // kind and tick are added automatically!
34
- const MoveIntent = defineIntent({
35
- kind: IntentKind.Move,
36
- schema: {
37
- dx: BinaryCodec.f32,
38
- dy: BinaryCodec.f32,
39
- }
40
- });
41
-
42
- const ShootIntent = defineIntent({
43
- kind: IntentKind.Shoot,
44
- schema: {
45
- targetId: BinaryCodec.u32,
46
- }
47
- });
48
-
49
- // Extract the types
50
- type MoveIntent = typeof MoveIntent.type;
51
- type ShootIntent = typeof ShootIntent.type;
52
- ```
53
-
54
- ### 3. Register Intent Codecs
55
-
56
- ```ts
57
- import { IntentRegistry } from "./protocol/intent";
58
-
59
- const registry = new IntentRegistry();
60
-
61
- // Register using auto-generated codecs
62
- registry.register(MoveIntent.kind, MoveIntent.codec);
63
- registry.register(ShootIntent.kind, ShootIntent.codec);
64
- ```
65
-
66
- ### 4. Define Your Game State
67
-
68
- ```ts
69
- interface GameState {
70
- players: Record<number, { x: number; y: number; health: number }>;
71
- }
72
- ```
73
-
74
- ### 5. Client: Encode & Send Intents
75
-
76
- ```ts
77
- // Generate intent from input
78
- const intent: MoveIntent = {
79
- kind: IntentKind.Move,
80
- tick: currentTick,
81
- dx: input.x,
82
- dy: input.y,
83
- };
84
-
85
- // Encode using auto-generated codec
86
- const buf = registry.encode(intent);
87
-
88
- // Send to server
89
- socket.send(buf);
90
- ```
91
-
92
- ### 6. Server: Receive & Decode Intents
93
-
94
- ```ts
95
- socket.on("data", (buf: Uint8Array) => {
96
- // First byte is always the intent kind
97
- const kind = buf[0];
98
-
99
- // Decode using registered codec
100
- const intent = registry.decode(kind, buf);
101
-
102
- // Process intent in your game logic
103
- processIntent(intent);
104
- });
105
- ```
106
-
107
- ### 7. Server: Create & Send Snapshots
108
-
109
- ```ts
110
- import { SnapshotCodec } from "./protocol/snapshot";
111
- import { PooledCodec } from "./core/pooled-codec";
112
-
113
- // Create codec for state updates (same schema as your state)
114
- const stateCodec = new PooledCodec({
115
- players: // your state schema here
116
- });
117
-
118
- const snapshotCodec = new SnapshotCodec(stateCodec);
119
-
120
- // After processing intents, create a snapshot
121
- const snapshot: Snapshot<GameState> = {
122
- tick: serverTick,
123
- updates: {
124
- // Only include what changed
125
- players: {
126
- 1: { x: 10, y: 20, health: 90 },
127
- 2: { x: 15, y: 25 }, // health unchanged
128
- },
129
- },
130
- };
131
-
132
- // Encode and send (zero allocation)
133
- const buf = snapshotCodec.encode(snapshot);
134
- socket.send(buf);
135
- ```
136
-
137
- ### 8. Client: Decode & Apply Snapshots
138
-
139
- ```ts
140
- import { applySnapshot } from "./protocol/snapshot";
141
-
142
- socket.on("snapshot", (buf: Uint8Array) => {
143
- // Decode snapshot
144
- const snapshot = snapshotCodec.decode(buf);
145
-
146
- // Deep merge updates into client state
147
- applySnapshot(clientState, snapshot);
148
-
149
- // Render updated state
150
- render(clientState);
151
- });
152
- ```
153
-
154
- ## Type Safety Benefits
155
-
156
- Using `defineIntent` with enums gives you:
157
-
158
- ✅ **Single Source of Truth** - Type and schema defined together
159
- ✅ **Zero Drift** - TypeScript type automatically matches binary schema
160
- ✅ **Automatic Fields** - `kind` and `tick` added automatically
161
- ✅ **Named Constants** - `IntentKind.Move` instead of magic numbers
162
- ✅ **IDE Support** - Full autocomplete and refactoring
163
- ✅ **Compile-time Safety** - Catch errors before runtime
164
-
165
- ### Before (Manual)
166
- ```ts
167
- // Define interface
168
- interface MoveIntent extends Intent {
169
- kind: 1; // Can drift from registration
170
- tick: number;
171
- dx: number;
172
- dy: number;
173
- }
174
-
175
- // Define schema separately (can drift from interface!)
176
- registry.register(1, new PooledCodec({
177
- kind: BinaryCodec.u8,
178
- tick: BinaryCodec.u32,
179
- dx: BinaryCodec.f32,
180
- dy: BinaryCodec.f32, // Wait, should this be f64?
181
- }));
182
- ```
183
-
184
- ### After (defineIntent)
185
- ```ts
186
- // Everything in one place - impossible to drift!
187
- const MoveIntent = defineIntent({
188
- kind: IntentKind.Move,
189
- schema: {
190
- dx: BinaryCodec.f32,
191
- dy: BinaryCodec.f32,
192
- }
193
- });
194
-
195
- type MoveIntent = typeof MoveIntent.type;
196
- registry.register(MoveIntent.kind, MoveIntent.codec);
197
- ```
198
-
199
- ## Memory Efficiency
200
-
201
- The codecs are optimized for zero allocations:
202
-
203
- ```ts
204
- // Encoding
205
- const buf = registry.encode(intent);
206
- socket.send(buf);
207
-
208
- // Decoding
209
- const decoded = registry.decode(kind, buf);
210
- processIntent(decoded);
211
- ```
212
-
213
- **Efficient binary encoding** with minimal allocations.
214
-
215
- ## Snapshot Deep Merging
216
-
217
- `applySnapshot` intelligently merges nested updates:
218
-
219
- ```ts
220
- const state: GameState = {
221
- players: {
222
- 1: { x: 0, y: 0, health: 100 },
223
- 2: { x: 10, y: 10, health: 100 },
224
- },
225
- };
226
-
227
- const snapshot: Snapshot<GameState> = {
228
- tick: 100,
229
- updates: {
230
- players: {
231
- 1: { x: 5 }, // Only update x, keep y and health
232
- },
233
- },
234
- };
235
-
236
- applySnapshot(state, snapshot);
237
-
238
- // Result:
239
- // state.players[1] = { x: 5, y: 0, health: 100 }
240
- // state.players[2] unchanged
241
- ```
242
-
243
- - **Objects**: Deep merged
244
- - **Arrays**: Replaced entirely
245
- - **Primitives**: Overwritten
246
-
247
- ## Efficient Partial Updates with SnapshotRegistry
248
-
249
- For games with many state fields, use `SnapshotRegistry` to send only specific update types.
250
-
251
- **Note:** Unlike intents (which use `defineIntent`), snapshots currently use manual codec definition with `PooledCodec`. A `defineSnapshot` helper may be added in the future for consistency.
252
-
253
- ```ts
254
- import { SnapshotRegistry } from "./protocol/snapshot";
255
- import { PooledCodec } from "./core/pooled-codec";
256
- import { BinaryCodec } from "./core/binary-codec";
257
-
258
- // Define separate snapshot update types
259
- interface PlayerUpdate {
260
- players: Array<{ entityId: number; x: number; y: number }>;
261
- }
262
-
263
- interface ScoreUpdate {
264
- score: number;
265
- }
266
-
267
- interface ProjectileUpdate {
268
- projectiles: Array<{ id: number; x: number; y: number }>;
269
- }
270
-
271
- type GameUpdate = PlayerUpdate | ScoreUpdate | ProjectileUpdate;
272
-
273
- // Create registry for different snapshot types
274
- const snapshotRegistry = new SnapshotRegistry<GameUpdate>();
275
-
276
- // Register codecs for each snapshot type
277
- // (Manual definition - no defineSnapshot helper yet)
278
- snapshotRegistry.register("players", new PooledCodec({
279
- players: {
280
- // Define your array schema here
281
- // See PooledCodec documentation for array schemas
282
- }
283
- }));
284
-
285
- snapshotRegistry.register("score", new PooledCodec({
286
- score: BinaryCodec.u32
287
- }));
288
-
289
- snapshotRegistry.register("projectiles", new PooledCodec({
290
- projectiles: {
291
- // Define your array schema here
292
- }
293
- }));
294
-
295
- // Server: Send only what changed (efficient!)
296
- if (playersChanged) {
297
- const buf = snapshotRegistry.encode("players", {
298
- tick: 100,
299
- updates: { players: [{ entityId: 1, x: 5, y: 10 }] }
300
- });
301
- socket.send(buf);
302
- }
303
-
304
- if (scoreChanged) {
305
- const buf = snapshotRegistry.encode("score", {
306
- tick: 100,
307
- updates: { score: 50 }
308
- });
309
- socket.send(buf);
310
- }
311
-
312
- // Client: Decode and apply
313
- socket.on("snapshot", (buf: Uint8Array) => {
314
- const { type, snapshot } = snapshotRegistry.decode(buf);
315
- applySnapshot(clientState, snapshot);
316
- });
317
- ```
318
-
319
- **Benefits:**
320
- - ✅ Only encode fields that changed (true partial updates)
321
- - ✅ No bandwidth wasted on nil/empty values
322
- - ✅ Type ID embedded in message (1 byte overhead)
323
- - ✅ Works with arrays, Records, primitives
324
-
325
- ## Multiple Intents
326
-
327
- You can have as many intent types as needed:
328
-
329
- ```ts
330
- // Define all your intent kinds in one enum
331
- enum IntentKind {
332
- Move = 1,
333
- Shoot = 2,
334
- Jump = 3,
335
- UseItem = 4,
336
- Chat = 5,
337
- }
338
-
339
- // Define each intent with its schema
340
- const MoveIntent = defineIntent({
341
- kind: IntentKind.Move,
342
- schema: { dx: BinaryCodec.f32, dy: BinaryCodec.f32 }
343
- });
344
-
345
- const ShootIntent = defineIntent({
346
- kind: IntentKind.Shoot,
347
- schema: { targetId: BinaryCodec.u32 }
348
- });
349
-
350
- const JumpIntent = defineIntent({
351
- kind: IntentKind.Jump,
352
- schema: { height: BinaryCodec.f32 }
353
- });
354
-
355
- // Register all at once
356
- registry.register(MoveIntent.kind, MoveIntent.codec);
357
- registry.register(ShootIntent.kind, ShootIntent.codec);
358
- registry.register(JumpIntent.kind, JumpIntent.codec);
359
- ```
360
-
361
- ## RPCs (Remote Procedure Calls)
362
-
363
- For one-off events that don't fit intents (inputs) or snapshots (state sync), use RPCs.
364
-
365
- ### When to Use RPCs
366
-
367
- **✅ Use RPCs for:**
368
- - Meta-game events (achievements, notifications)
369
- - Match lifecycle (countdown, match end, pause)
370
- - Chat messages (transient communication)
371
- - UI feedback (purchase confirmations, errors)
372
- - System announcements
373
-
374
- **❌ Don't use RPCs for:**
375
- - Game state (use **Snapshots** instead)
376
- - Player inputs (use **Intents** instead)
377
- - Anything that needs persistence or late joiners need to know
378
-
379
- ### Define RPCs
380
-
381
- ```ts
382
- import { defineRPC, RpcRegistry } from "./protocol/rpc";
383
- import { BinaryCodec } from "./core/binary-codec";
384
-
385
- // Server → Client RPC
386
- const MatchCountdown = defineRPC({
387
- method: 'matchCountdown',
388
- schema: {
389
- secondsRemaining: BinaryCodec.u8,
390
- }
391
- });
392
-
393
- // Client → Server RPC
394
- const BuyItem = defineRPC({
395
- method: 'buyItem',
396
- schema: {
397
- itemId: BinaryCodec.string(32),
398
- }
399
- });
400
-
401
- type MatchCountdown = typeof MatchCountdown.type;
402
- type BuyItem = typeof BuyItem.type;
403
- ```
404
-
405
- ### Register RPCs
406
-
407
- ```ts
408
- const rpcRegistry = new RpcRegistry();
409
- rpcRegistry.register(MatchCountdown);
410
- rpcRegistry.register(BuyItem);
411
- ```
412
-
413
- ### Client: Send & Receive RPCs
414
-
415
- ```ts
416
- // Send RPC to server
417
- client.sendRpc(BuyItem, { itemId: 'long_sword' });
418
-
419
- // Receive RPC from server
420
- client.onRpc(MatchCountdown, (rpc) => {
421
- console.log(`Match starting in ${rpc.secondsRemaining}s`);
422
- showCountdownUI(rpc.secondsRemaining);
423
- });
424
- ```
425
-
426
- ### Server: Send & Receive RPCs
427
-
428
- ```ts
429
- // Receive RPC from client
430
- server.onRpc(BuyItem, (peerId, rpc) => {
431
- const player = getPlayer(peerId);
432
- if (player.gold >= getItemCost(rpc.itemId)) {
433
- player.items.push(rpc.itemId);
434
- player.gold -= getItemCost(rpc.itemId);
435
- }
436
- });
437
-
438
- // Send RPC to specific client
439
- server.sendRpc(peerId, MatchCountdown, { secondsRemaining: 10 });
440
-
441
- // Broadcast RPC to all clients
442
- server.sendRpcBroadcast(MatchCountdown, { secondsRemaining: 3 });
443
- ```
444
-
445
- **Note:** RPCs use `MessageType.CUSTOM (0xff)` and are fully integrated with rate limiting, backpressure handling, and buffer pooling.
446
-
447
- ## What You Build Yourself
448
-
449
- This layer intentionally **does not** provide:
450
-
451
- - ❌ Game loops (use `FixedTicker` from core)
452
- - ❌ Intent queuing/buffering (application-specific)
453
- - ❌ Snapshot storage/history (application-specific)
454
- - ❌ Network transport (WebSocket, WebRTC, etc.)
455
- - ❌ Prediction/rollback (use `IntentTracker` and `Reconciliator` from core)
456
- - ❌ Interpolation (application-specific)
457
- - ❌ Lag compensation (application-specific)
458
-
459
- The protocol layer gives you type-safe codecs. Core utilities like `FixedTicker`, `IntentTracker`, and `Reconciliator` are available separately.
460
-
461
- ## Testing
462
-
463
- ```bash
464
- npm test -- intent-registry
465
- ```
466
-
467
- ## License
468
-
469
- MIT
@@ -1,93 +0,0 @@
1
- /**
2
- * Protocol Layer - Type-safe networking primitives
3
- *
4
- * This layer enforces:
5
- * - Type-safe intent definitions (use defineIntent helper)
6
- * - Type-safe snapshot definitions (Snapshot<YourState>)
7
- * - Memory-efficient encoding (use BinaryCodec from core)
8
- *
9
- * You provide:
10
- * - Your intent types (via defineIntent)
11
- * - Your state types
12
- * - Your schemas (for binary encoding)
13
- *
14
- * @example Using defineIntent with enums (recommended)
15
- * ```ts
16
- * import { defineIntent, IntentRegistry } from './protocol';
17
- * import { BinaryCodec } from './core/binary-codec';
18
- *
19
- * // Define all your intent kinds in one place
20
- * enum IntentKind {
21
- * Move = 1,
22
- * Attack = 2,
23
- * Jump = 3,
24
- * }
25
- *
26
- * // Define intents with automatic type inference
27
- * // kind and tick are added automatically!
28
- * const MoveIntent = defineIntent({
29
- * kind: IntentKind.Move,
30
- * schema: {
31
- * dx: BinaryCodec.f32,
32
- * dy: BinaryCodec.f32,
33
- * }
34
- * });
35
- *
36
- * const AttackIntent = defineIntent({
37
- * kind: IntentKind.Attack,
38
- * schema: {
39
- * targetId: BinaryCodec.u32,
40
- * damage: BinaryCodec.f32,
41
- * }
42
- * });
43
- *
44
- * type MoveIntent = typeof MoveIntent.type;
45
- * type AttackIntent = typeof AttackIntent.type;
46
- *
47
- * // Register and use
48
- * const intentRegistry = new IntentRegistry();
49
- * intentRegistry.register(MoveIntent.kind, MoveIntent.codec);
50
- * intentRegistry.register(AttackIntent.kind, AttackIntent.codec);
51
- *
52
- * const move: MoveIntent = {
53
- * kind: IntentKind.Move,
54
- * tick: 100, // tick is automatically available
55
- * dx: 1.5,
56
- * dy: -2.0,
57
- * };
58
- *
59
- * const buf = intentRegistry.encode(move);
60
- * const decoded = intentRegistry.decode(IntentKind.Move, buf);
61
- * ```
62
- *
63
- * @example Manual definition (legacy)
64
- * ```ts
65
- * // Define your types
66
- * interface MoveIntent extends Intent {
67
- * kind: 1;
68
- * tick: number;
69
- * dx: number;
70
- * dy: number;
71
- * }
72
- *
73
- * interface GameState {
74
- * players: Record<number, { x: number; y: number }>;
75
- * }
76
- *
77
- * // Create codecs once (reuse these!)
78
- * const intentRegistry = new IntentRegistry();
79
- * intentRegistry.register(1, new PooledCodec(moveSchema));
80
- *
81
- * const snapshotCodec = new SnapshotCodec<GameState>(
82
- * new PooledCodec(stateSchema)
83
- * );
84
- *
85
- * // Use them
86
- * const buf = intentRegistry.encode(intent);
87
- * const snapshot = snapshotCodec.decode(buf);
88
- * ```
89
- */
90
-
91
- export * from "./intent";
92
- export * from "./snapshot";
93
- export * from "./rpc";