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
@@ -1,397 +0,0 @@
1
- import { describe, it, expect } from "bun:test";
2
- import { defineIntent } from "./define-intent";
3
- import { BinaryCodec } from "../../core/binary-codec";
4
- import { IntentRegistry } from "./intent-registry";
5
-
6
-
7
- describe("defineIntent", () => {
8
- enum Intents {
9
- Move = 1,
10
- Attack,
11
- Chat,
12
- Jump,
13
- Rotate,
14
- }
15
-
16
- describe("type inference", () => {
17
- it("should infer correct type from schema with automatic tick", () => {
18
-
19
- const MoveIntent = defineIntent({
20
- kind: Intents.Move,
21
- schema: {
22
- dx: BinaryCodec.f32,
23
- dy: BinaryCodec.f32,
24
- },
25
- });
26
-
27
- type MoveIntent = typeof MoveIntent.type;
28
-
29
- // Create an instance to verify type inference
30
- const move: MoveIntent = {
31
- kind: Intents.Move,
32
- tick: 100,
33
- dx: 1.5,
34
- dy: -2.0,
35
- };
36
-
37
- expect(move.kind).toBe(Intents.Move);
38
- expect(move.tick).toBe(100);
39
- expect(move.dx).toBe(1.5);
40
- expect(move.dy).toBe(-2.0);
41
- });
42
-
43
- it("should enforce kind literal type", () => {
44
- const AttackIntent = defineIntent({
45
- kind: Intents.Attack,
46
- schema: {
47
- targetId: BinaryCodec.u32,
48
- damage: BinaryCodec.f32,
49
- },
50
- });
51
-
52
- expect(AttackIntent.kind).toBe(Intents.Attack);
53
-
54
- type AttackIntent = typeof AttackIntent.type;
55
- const attack: AttackIntent = {
56
- kind: Intents.Attack, // Must be exactly what Intents.Attack is
57
- tick: 200,
58
- targetId: 999,
59
- damage: 50.5,
60
- };
61
-
62
- expect(attack.kind).toBe(Intents.Attack);
63
- });
64
-
65
- it("should support intents with different field types", () => {
66
- const ChatIntent = defineIntent({
67
- kind: Intents.Chat,
68
- schema: {
69
- playerId: BinaryCodec.u8,
70
- messageLength: BinaryCodec.u16,
71
- },
72
- });
73
-
74
- type ChatIntent = typeof ChatIntent.type;
75
-
76
- const chat: ChatIntent = {
77
- kind: Intents.Chat,
78
- tick: 500,
79
- playerId: 5,
80
- messageLength: 128,
81
- };
82
-
83
- expect(chat.playerId).toBe(5);
84
- expect(chat.messageLength).toBe(128);
85
- });
86
- });
87
-
88
- describe("codec generation", () => {
89
- it("should create a working codec", () => {
90
- const MoveIntent = defineIntent({
91
- kind: Intents.Move,
92
- schema: {
93
- dx: BinaryCodec.f32,
94
- dy: BinaryCodec.f32,
95
- },
96
- });
97
-
98
- type MoveIntent = typeof MoveIntent.type;
99
-
100
- const move: MoveIntent = {
101
- kind: Intents.Move,
102
- tick: 100,
103
- dx: 1.5,
104
- dy: -2.0,
105
- };
106
-
107
- const encoded = MoveIntent.codec.encode(move);
108
- const decoded = MoveIntent.codec.decode(encoded);
109
-
110
- expect(decoded.kind).toBe(move.kind);
111
- expect(decoded.tick).toBe(move.tick);
112
- expect(decoded.dx).toBeCloseTo(move.dx, 5);
113
- expect(decoded.dy).toBeCloseTo(move.dy, 5);
114
- });
115
-
116
- it("should include kind field in encoded data", () => {
117
- const JumpIntent = defineIntent({
118
- kind: Intents.Jump,
119
- schema: {
120
- height: BinaryCodec.f32,
121
- },
122
- });
123
-
124
- type JumpIntent = typeof JumpIntent.type;
125
-
126
- const jump: JumpIntent = {
127
- kind: Intents.Jump,
128
- tick: 50,
129
- height: 10.5,
130
- };
131
-
132
- const encoded = JumpIntent.codec.encode(jump);
133
-
134
- // First byte should be the kind (7)
135
- expect(encoded[0]).toBe(Intents.Jump);
136
- });
137
-
138
- it("should handle multiple round trips", () => {
139
- const RotateIntent = defineIntent({
140
- kind: Intents.Rotate,
141
- schema: {
142
- angle: BinaryCodec.f32,
143
- },
144
- });
145
-
146
- type RotateIntent = typeof RotateIntent.type;
147
-
148
- const original: RotateIntent = {
149
- kind: Intents.Rotate,
150
- tick: 999,
151
- angle: 3.14159,
152
- };
153
-
154
- for (let i = 0; i < 10; i++) {
155
- const encoded = RotateIntent.codec.encode(original);
156
- const decoded = RotateIntent.codec.decode(encoded);
157
-
158
- expect(decoded.kind).toBe(original.kind);
159
- expect(decoded.tick).toBe(original.tick);
160
- expect(decoded.angle).toBeCloseTo(original.angle, 5);
161
- }
162
- });
163
- });
164
-
165
- describe("integration with IntentRegistry", () => {
166
- it("should register and work with IntentRegistry", () => {
167
- const registry = new IntentRegistry();
168
-
169
- const MoveIntent = defineIntent({
170
- kind: 1 as const,
171
- schema: {
172
- dx: BinaryCodec.f32,
173
- dy: BinaryCodec.f32,
174
- },
175
- });
176
-
177
- const AttackIntent = defineIntent({
178
- kind: 2 as const,
179
- schema: {
180
- targetId: BinaryCodec.u32,
181
- },
182
- });
183
-
184
- type MoveIntent = typeof MoveIntent.type;
185
- type AttackIntent = typeof AttackIntent.type;
186
-
187
- // Register using defineIntent objects
188
- registry.register(MoveIntent);
189
- registry.register(AttackIntent);
190
-
191
- const move: MoveIntent = {
192
- kind: MoveIntent.kind,
193
- tick: 100,
194
- dx: 5.0,
195
- dy: -3.0,
196
- };
197
-
198
- const attack: AttackIntent = {
199
- kind: AttackIntent.kind,
200
- tick: 101,
201
- targetId: 42,
202
- };
203
-
204
- // Encode using registry
205
- const moveEncoded = registry.encode(move);
206
- const attackEncoded = registry.encode(attack);
207
-
208
- // Decode using registry
209
- const moveDecoded = registry.decode(moveEncoded);
210
- const attackDecoded = registry.decode(attackEncoded);
211
-
212
- expect(moveDecoded.kind).toBe(1);
213
- expect(moveDecoded.tick).toBe(100);
214
- expect((moveDecoded as any).dx).toBeCloseTo(5.0, 5);
215
- expect((moveDecoded as any).dy).toBeCloseTo(-3.0, 5);
216
-
217
- expect(attackDecoded.kind).toBe(2);
218
- expect(attackDecoded.tick).toBe(101);
219
- expect((attackDecoded as any).targetId).toBe(42);
220
- });
221
-
222
- it("should prevent duplicate registrations", () => {
223
- const registry = new IntentRegistry();
224
-
225
- const Intent1 = defineIntent({
226
- kind: 5 as const,
227
- schema: {},
228
- });
229
-
230
- const Intent2 = defineIntent({
231
- kind: 5 as const, // Same kind
232
- schema: {},
233
- });
234
-
235
- registry.register(Intent1);
236
-
237
- expect(() => {
238
- registry.register(Intent2);
239
- }).toThrow("Intent kind 5 is already registered");
240
- });
241
- });
242
-
243
- describe("complex intents", () => {
244
- it("should handle intents with many fields", () => {
245
- const PlayerStateIntent = defineIntent({
246
- kind: 99 as const,
247
- schema: {
248
- playerId: BinaryCodec.u32,
249
- x: BinaryCodec.f32,
250
- y: BinaryCodec.f32,
251
- z: BinaryCodec.f32,
252
- velocityX: BinaryCodec.f32,
253
- velocityY: BinaryCodec.f32,
254
- velocityZ: BinaryCodec.f32,
255
- health: BinaryCodec.u8,
256
- mana: BinaryCodec.u8,
257
- },
258
- });
259
-
260
- type PlayerStateIntent = typeof PlayerStateIntent.type;
261
-
262
- const state: PlayerStateIntent = {
263
- kind: 99,
264
- tick: 1000,
265
- playerId: 123,
266
- x: 10.5,
267
- y: 20.3,
268
- z: 30.1,
269
- velocityX: 1.0,
270
- velocityY: 0.5,
271
- velocityZ: -0.2,
272
- health: 100,
273
- mana: 50,
274
- };
275
-
276
- const encoded = PlayerStateIntent.codec.encode(state);
277
- const decoded = PlayerStateIntent.codec.decode(encoded);
278
-
279
- expect(decoded.kind).toBe(state.kind);
280
- expect(decoded.tick).toBe(state.tick);
281
- expect(decoded.playerId).toBe(state.playerId);
282
- expect(decoded.x).toBeCloseTo(state.x, 5);
283
- expect(decoded.y).toBeCloseTo(state.y, 5);
284
- expect(decoded.z).toBeCloseTo(state.z, 5);
285
- expect(decoded.velocityX).toBeCloseTo(state.velocityX, 5);
286
- expect(decoded.velocityY).toBeCloseTo(state.velocityY, 5);
287
- expect(decoded.velocityZ).toBeCloseTo(state.velocityZ, 5);
288
- expect(decoded.health).toBe(state.health);
289
- expect(decoded.mana).toBe(state.mana);
290
- });
291
-
292
- it("should handle minimal intents with only tick", () => {
293
- const PingIntent = defineIntent({
294
- kind: 255 as const,
295
- schema: {}, // No additional fields, only kind and tick
296
- });
297
-
298
- type PingIntent = typeof PingIntent.type;
299
-
300
- const ping: PingIntent = {
301
- kind: 255,
302
- tick: 12345,
303
- };
304
-
305
- const encoded = PingIntent.codec.encode(ping);
306
- const decoded = PingIntent.codec.decode(encoded);
307
-
308
- expect(decoded.kind).toBe(255);
309
- expect(decoded.tick).toBe(12345);
310
- });
311
- });
312
-
313
- describe("edge cases", () => {
314
- it("should handle zero values", () => {
315
- const ZeroIntent = defineIntent({
316
- kind: 0 as const,
317
- schema: {
318
- value: BinaryCodec.f32,
319
- },
320
- });
321
-
322
- type ZeroIntent = typeof ZeroIntent.type;
323
-
324
- const zero: ZeroIntent = {
325
- kind: 0,
326
- tick: 0,
327
- value: 0,
328
- };
329
-
330
- const encoded = ZeroIntent.codec.encode(zero);
331
- const decoded = ZeroIntent.codec.decode(encoded);
332
-
333
- expect(decoded.kind).toBe(0);
334
- expect(decoded.tick).toBe(0);
335
- expect(decoded.value).toBe(0);
336
- });
337
-
338
- it("should handle maximum values for numeric types", () => {
339
- const MaxIntent = defineIntent({
340
- kind: 255 as const,
341
- schema: {
342
- maxU8: BinaryCodec.u8,
343
- maxU16: BinaryCodec.u16,
344
- maxU32: BinaryCodec.u32,
345
- },
346
- });
347
-
348
- type MaxIntent = typeof MaxIntent.type;
349
-
350
- const max: MaxIntent = {
351
- kind: 255,
352
- tick: 0xFFFFFFFF,
353
- maxU8: 255,
354
- maxU16: 65535,
355
- maxU32: 0xFFFFFFFF,
356
- };
357
-
358
- const encoded = MaxIntent.codec.encode(max);
359
- const decoded = MaxIntent.codec.decode(encoded);
360
-
361
- expect(decoded.kind).toBe(255);
362
- expect(decoded.tick).toBe(0xFFFFFFFF);
363
- expect(decoded.maxU8).toBe(255);
364
- expect(decoded.maxU16).toBe(65535);
365
- expect(decoded.maxU32).toBe(0xFFFFFFFF);
366
- });
367
-
368
- it("should allow custom tick encoding", () => {
369
- const CustomTickIntent = defineIntent({
370
- kind: 100 as const,
371
- schema: {
372
- tick: BinaryCodec.u16, // Override default u32 with u16
373
- action: BinaryCodec.u8,
374
- },
375
- });
376
-
377
- type CustomTickIntent = typeof CustomTickIntent.type;
378
-
379
- const intent: CustomTickIntent = {
380
- kind: 100,
381
- tick: 5000, // Max u16 is 65535
382
- action: 42,
383
- };
384
-
385
- const encoded = CustomTickIntent.codec.encode(intent);
386
- const decoded = CustomTickIntent.codec.decode(encoded);
387
-
388
- expect(decoded.kind).toBe(100);
389
- expect(decoded.tick).toBe(5000);
390
- expect(decoded.action).toBe(42);
391
-
392
- // Verify the encoded size is smaller (u16 instead of u32 for tick)
393
- // kind (1) + tick (2) + action (1) = 4 bytes
394
- expect(encoded.length).toBe(4);
395
- });
396
- });
397
- });
@@ -1,182 +0,0 @@
1
- import type { Intent } from "./intent";
2
- import type { Schema } from "../../core/binary-codec";
3
- import { BinaryCodec } from "../../core/binary-codec";
4
- import type { Codec } from "./intent-registry";
5
-
6
- /**
7
- * Configuration for defining an intent type.
8
- * @template K The intent kind (numeric literal type)
9
- * @template S The schema type describing the intent's data fields
10
- */
11
- export interface IntentDefinition<K extends number, S extends Record<string, any>> {
12
- /** Numeric identifier for this intent type */
13
- kind: K;
14
- /**
15
- * Schema describing the intent's data fields (excluding kind which is added automatically).
16
- * If 'tick' is not provided, it will default to BinaryCodec.u32.
17
- * You can override the tick encoding by including it in the schema.
18
- */
19
- schema: S;
20
- }
21
-
22
- /**
23
- * Infers the TypeScript type from an intent schema.
24
- * The schema already includes 'kind' (added automatically) and should include 'tick'.
25
- * @template K The intent kind (numeric literal type)
26
- * @template S The schema type (includes tick, but kind is added automatically)
27
- */
28
- export type InferIntentType<K extends number, S extends Record<string, any>> = {
29
- kind: K;
30
- tick: number;
31
- } & {
32
- [P in keyof S]: S[P] extends { read(dv: DataView, o: number): infer R } ? R : never;
33
- };
34
-
35
- /**
36
- * Result of defineIntent - provides both the type and codec.
37
- * @template K The intent kind literal
38
- * @template T The inferred intent type
39
- */
40
- export interface DefinedIntent<K extends number, T extends Intent> {
41
- /** The TypeScript type for this intent (use with `typeof IntentName.type`) */
42
- type: T;
43
- /** The codec instance for encoding/decoding this intent */
44
- codec: Codec<T>;
45
- /** The kind identifier for this intent */
46
- kind: K;
47
- }
48
-
49
- /**
50
- * Simple codec implementation that uses BinaryCodec for encoding/decoding.
51
- * @template T The intent type
52
- */
53
- class IntentCodec<T extends Intent> implements Codec<T> {
54
- constructor(private schema: Schema<T>) {}
55
-
56
- encode(value: T): Uint8Array {
57
- return BinaryCodec.encode(this.schema, value);
58
- }
59
-
60
- decode(buf: Uint8Array): T {
61
- // Create a target object with nil values
62
- const target = {} as T;
63
- for (const key of Object.keys(this.schema) as (keyof T)[]) {
64
- const field = this.schema[key];
65
- target[key] = field.toNil() as T[keyof T];
66
- }
67
- return BinaryCodec.decode(this.schema, buf, target);
68
- }
69
- }
70
-
71
- /**
72
- * Define a type-safe intent with automatic schema generation.
73
- *
74
- * This helper ensures that your intent's TypeScript interface and binary schema
75
- * stay in sync by deriving the type from the schema definition.
76
- *
77
- * The `kind` and `tick` fields are automatically added to the schema:
78
- * - `kind`: u8 codec (always FIRST byte - required for IntentRegistry.decode)
79
- * - `tick`: u32 codec (default, can be overridden by including it in your schema)
80
- *
81
- * IMPORTANT: If you use PooledCodec directly instead of defineIntent(), you MUST
82
- * ensure `kind: BinaryPrimitives.u8` is the FIRST field in your schema, or
83
- * IntentRegistry.decode() will fail.
84
- *
85
- * @template K The intent kind (numeric literal)
86
- * @template S The schema type
87
- * @param definition Intent configuration with kind and schema
88
- * @returns A DefinedIntent object with type, codec, and kind
89
- *
90
- * @example Using enums (recommended for managing multiple intents)
91
- * ```ts
92
- * // Define all your intent kinds in one place
93
- * enum IntentKind {
94
- * Move = 1,
95
- * Attack = 2,
96
- * Jump = 3,
97
- * Chat = 4,
98
- * }
99
- *
100
- * const MoveIntent = defineIntent({
101
- * kind: IntentKind.Move,
102
- * schema: {
103
- * dx: BinaryCodec.f32,
104
- * dy: BinaryCodec.f32,
105
- * }
106
- * });
107
- *
108
- * const AttackIntent = defineIntent({
109
- * kind: IntentKind.Attack,
110
- * schema: {
111
- * targetId: BinaryCodec.u32,
112
- * damage: BinaryCodec.f32,
113
- * }
114
- * });
115
- *
116
- * // Use the inferred types
117
- * type MoveIntent = typeof MoveIntent.type;
118
- * type AttackIntent = typeof AttackIntent.type;
119
- *
120
- * // Register with IntentRegistry
121
- * const registry = new IntentRegistry();
122
- * registry.register(MoveIntent.kind, MoveIntent.codec);
123
- * registry.register(AttackIntent.kind, AttackIntent.codec);
124
- *
125
- * // Create instances - tick is automatically available
126
- * const move: MoveIntent = {
127
- * kind: IntentKind.Move,
128
- * tick: 100,
129
- * dx: 1.5,
130
- * dy: -2.0,
131
- * };
132
- * ```
133
- *
134
- * @example Using literal types (simple cases)
135
- * ```ts
136
- * const MoveIntent = defineIntent({
137
- * kind: 1 as const,
138
- * schema: {
139
- * dx: BinaryCodec.f32,
140
- * dy: BinaryCodec.f32,
141
- * }
142
- * });
143
- *
144
- * type MoveIntent = typeof MoveIntent.type;
145
- * ```
146
- *
147
- * @example Custom tick encoding
148
- * ```ts
149
- * const SmallIntent = defineIntent({
150
- * kind: IntentKind.Small,
151
- * schema: {
152
- * tick: BinaryCodec.u16, // Override default u32 with u16
153
- * action: BinaryCodec.u8,
154
- * }
155
- * });
156
- * ```
157
- */
158
- export function defineIntent<
159
- K extends number,
160
- S extends Record<string, any>
161
- >(
162
- definition: IntentDefinition<K, S>
163
- ): DefinedIntent<K, InferIntentType<K, S>> {
164
- type IntentType = InferIntentType<K, S>;
165
-
166
- // Create the full schema with kind and tick fields
167
- // Add tick with default u32 if not provided by user
168
- const fullSchema = {
169
- kind: BinaryCodec.u8,
170
- tick: BinaryCodec.u32, // Default tick encoding
171
- ...definition.schema, // User can override tick if needed
172
- } as Schema<IntentType>;
173
-
174
- // Create the codec using BinaryCodec directly
175
- const codec = new IntentCodec<IntentType>(fullSchema);
176
-
177
- return {
178
- type: undefined as any as IntentType, // Phantom type for inference
179
- codec,
180
- kind: definition.kind,
181
- };
182
- }
@@ -1,94 +0,0 @@
1
- /**
2
- * Intent system for client-to-server actions.
3
- *
4
- * Intents are player/AI actions that need to be:
5
- * 1. Encoded efficiently (binary)
6
- * 2. Sent over network
7
- * 3. Decoded on the other end
8
- * 4. Processed deterministically
9
- *
10
- * @example Using defineIntent with enums (recommended)
11
- * ```ts
12
- * import { defineIntent, IntentRegistry } from './protocol/intent';
13
- * import { BinaryCodec } from '../core/binary-codec';
14
- *
15
- * // 1. Define all your intent kinds in one place
16
- * enum IntentKind {
17
- * Move = 1,
18
- * Attack = 2,
19
- * Jump = 3,
20
- * }
21
- *
22
- * // 2. Define your intents with automatic type inference
23
- * // kind and tick are added automatically!
24
- * const MoveIntent = defineIntent({
25
- * kind: IntentKind.Move,
26
- * schema: {
27
- * dx: BinaryCodec.f32,
28
- * dy: BinaryCodec.f32,
29
- * }
30
- * });
31
- *
32
- * const AttackIntent = defineIntent({
33
- * kind: IntentKind.Attack,
34
- * schema: {
35
- * targetId: BinaryCodec.u32,
36
- * damage: BinaryCodec.f32,
37
- * }
38
- * });
39
- *
40
- * // 3. Extract the types
41
- * type MoveIntent = typeof MoveIntent.type;
42
- * type AttackIntent = typeof AttackIntent.type;
43
- *
44
- * // 4. Create registry and register
45
- * const registry = new IntentRegistry();
46
- * registry.register(MoveIntent.kind, MoveIntent.codec);
47
- * registry.register(AttackIntent.kind, AttackIntent.codec);
48
- *
49
- * // 5. Create instances with full type safety
50
- * const move: MoveIntent = {
51
- * kind: IntentKind.Move,
52
- * tick: 100, // tick is automatically available
53
- * dx: 1.5,
54
- * dy: -2.0,
55
- * };
56
- *
57
- * // 6. Encode/decode
58
- * const buf = registry.encode(move);
59
- * const decoded = registry.decode(buf);
60
- * ```
61
- *
62
- * @example Manual definition (legacy)
63
- * ```ts
64
- * import { Intent, IntentRegistry } from './protocol/intent';
65
- * import { PooledCodec } from '../core/pooled-codec';
66
- * import { BinaryCodec } from '../core/binary-codec';
67
- *
68
- * // 1. Define your intent type
69
- * interface MoveIntent extends Intent {
70
- * kind: 1;
71
- * tick: number;
72
- * dx: number;
73
- * dy: number;
74
- * }
75
- *
76
- * // 2. Create registry and register once (reuse this instance)
77
- * const registry = new IntentRegistry();
78
- * registry.register(1, new PooledCodec({
79
- * kind: BinaryCodec.u8,
80
- * tick: BinaryCodec.u32,
81
- * dx: BinaryCodec.f32,
82
- * dy: BinaryCodec.f32,
83
- * }));
84
- *
85
- * // 3. Encode/decode
86
- * const buf = registry.encode(intent);
87
- * const decoded = registry.decode(buf);
88
- * ```
89
- */
90
-
91
- export type { Intent } from "./intent";
92
- export { IntentRegistry } from "./intent-registry";
93
- export { defineIntent } from "./define-intent";
94
- export type { DefinedIntent, InferIntentType } from "./define-intent";