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
@@ -0,0 +1,175 @@
1
+ import { DriverType, EventSystem, FixedTicker } from "../../core";
2
+ import { InputManager } from "../../core/input";
3
+ /**
4
+ * GameLoop class that manages the main game loop with tick events and optional rendering.
5
+ * It supports both client and server types, emitting appropriate events for both.
6
+ */
7
+ export declare class GameLoop<T extends GameLoopType = DriverType> {
8
+ options: GameLoopOptions<T>;
9
+ private _driver?;
10
+ private _input;
11
+ private readonly _isClient;
12
+ private readonly _isManual;
13
+ /**
14
+ * FixedTicker instance that handles tick timing and updates.
15
+ */
16
+ ticker: FixedTicker;
17
+ /**
18
+ * Event emitter system for the game loop, emitting various lifecycle events.
19
+ */
20
+ events: EventSystem<BaseEvents> & T extends ClientLike ? EventSystem<ClientEvents> : EventSystem<ServerEvents>;
21
+ /**
22
+ * Current frames per second (FPS) measurement.
23
+ */
24
+ fps: number;
25
+ /**
26
+ * Current status of the game loop: 'running', 'paused', or 'stopped'.
27
+ */
28
+ status: "running" | "paused" | "stopped";
29
+ private _tickData;
30
+ private _skipData;
31
+ private _renderData;
32
+ constructor(options: GameLoopOptions<T>);
33
+ step(deltaTime: number): void;
34
+ /**
35
+ * Pauses the game ticker and emits a 'toggle-pause' event.
36
+ */
37
+ pause(): void;
38
+ /**
39
+ * Resumes the game ticker and emits a 'toggle-pause' event.
40
+ */
41
+ resume(): void;
42
+ /**
43
+ * Starts the game ticker and emits a 'start' event.
44
+ */
45
+ start(): void;
46
+ /**
47
+ * Stops the game ticker and emits a 'stop' event.
48
+ */
49
+ stop(): void;
50
+ }
51
+ interface GameLoopOptions<T extends GameLoopType> {
52
+ tickRate: number;
53
+ type: T;
54
+ onTick?: (dt: number, tick: number, input: ReturnType<InputManager["snapshot"]>) => void;
55
+ onRender?: (dt: number, alpha: number, input: ReturnType<InputManager["peek"]>) => void;
56
+ }
57
+ type BaseEvents = [
58
+ [
59
+ "start",
60
+ {
61
+ /**
62
+ * Timestamp when the loop was started.
63
+ */
64
+ startedAt: number;
65
+ }
66
+ ],
67
+ [
68
+ "pre-tick",
69
+ {
70
+ /**
71
+ * Current tick number.
72
+ */
73
+ tick: number;
74
+ /**
75
+ * Delta time since the last tick.
76
+ */
77
+ deltaTime: number;
78
+ /**
79
+ * Input snapshot at the start of the tick.
80
+ *
81
+ * **Only available in client loops.**
82
+ */
83
+ input: ReturnType<InputManager["snapshot"]>;
84
+ }
85
+ ],
86
+ [
87
+ "tick",
88
+ {
89
+ /**
90
+ * Current tick number.
91
+ */
92
+ tick: number;
93
+ /**
94
+ * Delta time since the last tick.
95
+ */
96
+ deltaTime: number;
97
+ /**
98
+ * Input snapshot at the start of the tick.
99
+ *
100
+ * **Only available in client loops.**
101
+ */
102
+ input: ReturnType<InputManager["snapshot"]>;
103
+ }
104
+ ],
105
+ [
106
+ "post-tick",
107
+ {
108
+ /**
109
+ * Current tick number.
110
+ */
111
+ tick: number;
112
+ /**
113
+ * Delta time since the last tick.
114
+ */
115
+ deltaTime: number;
116
+ /**
117
+ * Input snapshot at the start of the tick.
118
+ *
119
+ * **Only available in client loops.**
120
+ */
121
+ input: ReturnType<InputManager["snapshot"]>;
122
+ }
123
+ ],
124
+ [
125
+ "skip",
126
+ {
127
+ /**
128
+ * Number of ticks that were skipped.
129
+ */
130
+ ticks: number;
131
+ }
132
+ ],
133
+ [
134
+ "stop",
135
+ {
136
+ /**
137
+ * Timestamp when the loop was stopped.
138
+ */
139
+ stoppedAt: number;
140
+ }
141
+ ],
142
+ [
143
+ "toggle-pause",
144
+ {
145
+ /**
146
+ * Current paused state of the loop.
147
+ */
148
+ paused: boolean;
149
+ /**
150
+ * Timestamp when the pause state was last toggled.
151
+ */
152
+ lastToggledAt: number;
153
+ /**
154
+ * Tick number when the pause state was last toggled.
155
+ */
156
+ lastToggleTick: number;
157
+ }
158
+ ]
159
+ ];
160
+ type ClientEvents = [
161
+ ...BaseEvents,
162
+ [
163
+ "render",
164
+ {
165
+ deltaTime: number;
166
+ alpha: number;
167
+ input: ReturnType<InputManager["peek"]>;
168
+ }
169
+ ]
170
+ ];
171
+ type ServerEvents = BaseEvents;
172
+ type Manual = "manual-client" | "manual-server";
173
+ type ClientLike = "client" | "manual-client";
174
+ export type GameLoopType = DriverType | Manual;
175
+ export {};
@@ -18,3 +18,5 @@ export * from "./core";
18
18
  export * from "./protocol";
19
19
  export * from "./net";
20
20
  export * from "./ecs";
21
+ export * from "./game";
22
+ export * from "./renderer";
@@ -14,8 +14,8 @@
14
14
  *
15
15
  * @example
16
16
  * ```typescript
17
- * import { ServerNetwork, ClientNetwork } from '@mococa/net';
18
- * import { BunWebSocketServerTransport } from '@mococa/net/transports/bun-websocket';
17
+ * import { ServerNetwork, ClientNetwork } from 'murow/net';
18
+ * import { BunWebSocketServerTransport } from 'murow/net/transports/bun-websocket';
19
19
  * import { IntentRegistry, SnapshotRegistry } from '@mococa/protocol';
20
20
  *
21
21
  * // Server setup
@@ -30,8 +30,9 @@ export interface ServerNetworkConfig<TPeer extends TransportAdapter, TSnapshots>
30
30
  *
31
31
  * @remarks
32
32
  * **Client-Side Prediction Support:**
33
- * - Automatically tracks the last processed client tick for each peer
33
+ * - Tracks the last VALIDATED client tick for each peer (only intents passing validation update this)
34
34
  * - All intents include a 'tick' field (added by defineIntent())
35
+ * - Use validators in `onIntent()` to reject stale/invalid intents - rejected intents don't update the confirmed tick
35
36
  * - Use `getConfirmedClientTick(peerId)` to get the confirmed tick for snapshots
36
37
  * - Use `onAnyIntent()` to track which peers need snapshot responses
37
38
  *
@@ -56,14 +57,20 @@ export interface ServerNetworkConfig<TPeer extends TransportAdapter, TSnapshots>
56
57
  * pendingResponses.add(peerId);
57
58
  * });
58
59
  *
59
- * // Type-safe intent handlers
60
- * server.onIntent<MoveIntent>(IntentKind.Move, (peerId, intent) => {
61
- * intent.tick // Automatically included in all intents
62
- * intent.dx // Correctly typed
60
+ * // Type-safe intent handlers with validation (prevents stale intents from updating confirmed tick)
61
+ * // The validator can use getConfirmedClientTick to reject out-of-order intents
62
+ * server.onIntent(Intents.Move, (peerId, intent) => {
63
+ * // Process the intent
64
+ * applyMovement(peerId, intent);
65
+ * }, (peerId, intent) => {
66
+ * // Validator: reject out-of-order intents using the network layer's tracking
67
+ * const lastTick = server.getConfirmedClientTick(peerId, intent.kind);
68
+ * if (intent.tick <= lastTick) return false; // Rejected - confirmed tick NOT updated
69
+ * return true; // Accepted - confirmed tick WILL be updated
63
70
  * });
64
71
  *
65
- * // Send snapshot with confirmed client tick (for client-side prediction)
66
- * const confirmedTick = server.getConfirmedClientTick(peerId);
72
+ * // Send snapshot with confirmed client tick for the relevant intent type (for client-side prediction)
73
+ * const confirmedTick = server.getConfirmedClientTick(peerId, Intents.Move.kind);
67
74
  * server.sendSnapshotToPeer(peerId, 'players', {
68
75
  * tick: confirmedTick, // Client can reconcile based on this
69
76
  * updates: { players: [...] }
@@ -80,7 +87,7 @@ export declare class ServerNetwork<TPeer extends TransportAdapter = TransportAda
80
87
  private peers;
81
88
  /** Per-peer snapshot registries - this is the key feature! */
82
89
  private peerSnapshotRegistries;
83
- /** Track last processed client tick per peer (for client-side prediction) */
90
+ /** Track last processed client tick per peer per intent kind (for client-side prediction) */
84
91
  private lastProcessedClientTick;
85
92
  /** Track last sent snapshot hashes per peer per type (for delta detection) */
86
93
  private lastSnapshotHashes;
@@ -106,8 +113,17 @@ export declare class ServerNetwork<TPeer extends TransportAdapter = TransportAda
106
113
  * Register a handler for a specific intent kind (type-safe)
107
114
  * Supports multiple handlers per intent type
108
115
  * @template T The intent type for this handler
109
- * @param validator Optional validation function - if it returns false, intent is rejected
116
+ * @param intent The intent definition
117
+ * @param handler Callback invoked for valid intents
118
+ * @param validator Optional validation function - if it returns false, intent is rejected and lastProcessedClientTick is NOT updated
110
119
  * @returns Unsubscribe function to remove this handler
120
+ *
121
+ * @remarks
122
+ * **Important:** The validator controls tick confirmation for client-side prediction.
123
+ * - If validator returns `true`: intent is processed AND lastProcessedClientTick is updated
124
+ * - If validator returns `false`: intent is rejected AND lastProcessedClientTick is NOT updated
125
+ *
126
+ * This ensures only valid, non-stale intents update the confirmed client tick used for reconciliation.
111
127
  */
112
128
  onIntent<T extends Intent>(intent: DefinedIntent<T['kind'], T>, handler: (peerId: string, intent: T) => void, validator?: (peerId: string, intent: T) => boolean): () => void;
113
129
  /**
@@ -305,29 +321,33 @@ export declare class ServerNetwork<TPeer extends TransportAdapter = TransportAda
305
321
  */
306
322
  isPeerBackpressured(peerId: string): boolean;
307
323
  /**
308
- * Get the last confirmed client tick for a peer.
324
+ * Get the last confirmed (validated) client tick for a peer and intent kind.
309
325
  * Used for client-side prediction reconciliation.
310
326
  *
311
327
  * @param peerId The peer ID to query
312
- * @returns The last processed client tick number, or 0 if peer not found
328
+ * @param intentKind The intent kind to query (different intent types have independent tick sequences)
329
+ * @returns The last validated client tick number for this intent kind, or 0 if not found
313
330
  *
314
331
  * @remarks
315
- * This is automatically tracked when intents arrive, as all intents
316
- * include a 'tick' field (added by defineIntent).
332
+ * This is automatically tracked when intents pass validation.
333
+ * Only intents that pass the validator (if provided to onIntent) will update this value.
334
+ * Each intent kind has its own tick sequence, allowing different types of intents
335
+ * (e.g., Move, Shoot, Chat) to have independent tick tracking.
317
336
  */
318
- getConfirmedClientTick(peerId: string): number;
337
+ getConfirmedClientTick(peerId: string, intentKind: number): number;
319
338
  /**
320
- * Set the confirmed client tick for a peer.
321
- * Rarely needed as this is automatically tracked by handleIntent.
339
+ * Set the confirmed client tick for a peer and intent kind.
340
+ * Rarely needed as this is automatically tracked when intents pass validation.
322
341
  *
323
342
  * @param peerId The peer ID
343
+ * @param intentKind The intent kind
324
344
  * @param tick The client tick number to set
325
345
  *
326
346
  * @remarks
327
- * All intents automatically include a 'tick' field via defineIntent(),
328
- * so this is tracked automatically when intents are received.
347
+ * This is automatically updated when intents pass validation in onIntent handlers.
348
+ * Manual use of this method is rarely needed.
329
349
  */
330
- setConfirmedClientTick(peerId: string, tick: number): void;
350
+ setConfirmedClientTick(peerId: string, intentKind: number, tick: number): void;
331
351
  /**
332
352
  * Close the server and all connections
333
353
  */
@@ -29,6 +29,21 @@ export type InferIntentType<K extends number, S extends Record<string, any>> = {
29
29
  read(dv: DataView, o: number): infer R;
30
30
  } ? R : never;
31
31
  };
32
+ /**
33
+ * Helper type to extract just the data fields from a DefinedIntent (excluding kind and tick).
34
+ * This is useful for APIs that work with intent data without the metadata fields.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * const MoveIntent = defineIntent({
39
+ * kind: 1,
40
+ * schema: { vx: BinaryCodec.f32, vy: BinaryCodec.f32 }
41
+ * });
42
+ *
43
+ * type MoveData = IntentDataOnly<typeof MoveIntent>; // { vx: number, vy: number }
44
+ * ```
45
+ */
46
+ export type IntentDataOnly<T> = T extends DefinedIntent<infer _K, infer U extends Intent> ? Omit<U, 'kind' | 'tick'> : never;
32
47
  /**
33
48
  * Result of defineIntent - provides both the type and codec.
34
49
  * @template K The intent kind literal
@@ -90,4 +90,4 @@
90
90
  export type { Intent } from "./intent";
91
91
  export { IntentRegistry } from "./intent-registry";
92
92
  export { defineIntent } from "./define-intent";
93
- export type { DefinedIntent, InferIntentType } from "./define-intent";
93
+ export type { DefinedIntent, InferIntentType, IntentDataOnly } from "./define-intent";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Abstract base for 2D renderers. Defines the sprite-based rendering API.
3
+ */
4
+ import { BaseRenderer } from "./base-renderer";
5
+ import type { Camera2DState, Renderer2DOptions, SpriteHandle, SpriteOptions, SpritesheetHandle, SpritesheetSource } from "./types";
6
+ export declare abstract class Base2DRenderer extends BaseRenderer<Renderer2DOptions> {
7
+ readonly maxSprites: number;
8
+ abstract readonly camera: Camera2DState;
9
+ constructor(canvas: HTMLCanvasElement, options: Renderer2DOptions);
10
+ abstract loadSpritesheet(source: SpritesheetSource): Promise<SpritesheetHandle>;
11
+ abstract addSprite(options: SpriteOptions): SpriteHandle;
12
+ abstract removeSprite(sprite: SpriteHandle): void;
13
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Abstract base for 3D renderers. Defines the model/instance-based rendering API.
3
+ */
4
+ import { BaseRenderer } from "./base-renderer";
5
+ import type { Camera3DState, Renderer3DOptions } from "./types";
6
+ export declare abstract class Base3DRenderer extends BaseRenderer<Renderer3DOptions> {
7
+ readonly maxModels: number;
8
+ abstract readonly camera: Camera3DState;
9
+ constructor(canvas: HTMLCanvasElement, options: Renderer3DOptions);
10
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Abstract base for all renderers. Provides lifecycle and canvas management.
3
+ */
4
+ import type { ClearColor, RendererOptions } from "./types";
5
+ export declare abstract class BaseRenderer<TOptions extends RendererOptions = RendererOptions> {
6
+ readonly canvas: HTMLCanvasElement;
7
+ protected readonly options: TOptions;
8
+ protected _clearColor: ClearColor;
9
+ protected _width: number;
10
+ protected _height: number;
11
+ protected _initialized: boolean;
12
+ constructor(canvas: HTMLCanvasElement, options: TOptions);
13
+ get clearColor(): ClearColor;
14
+ set clearColor(value: ClearColor);
15
+ get width(): number;
16
+ get height(): number;
17
+ get initialized(): boolean;
18
+ abstract init(): Promise<void>;
19
+ abstract render(alpha: number): void;
20
+ abstract destroy(): void;
21
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./types";
2
+ export * from "./base-renderer";
3
+ export * from "./base-2d-renderer";
4
+ export * from "./base-3d-renderer";
@@ -0,0 +1,79 @@
1
+ import type { Ray3D } from '../core/ray/ray-3d';
2
+ export type ClearColor = [r: number, g: number, b: number, a: number];
3
+ export interface RendererOptions {
4
+ clearColor?: ClearColor;
5
+ /** Automatically resize the canvas and reconfigure the GPU context on window resize. */
6
+ autoResize?: boolean;
7
+ }
8
+ export interface Renderer2DOptions extends RendererOptions {
9
+ maxSprites: number;
10
+ }
11
+ export interface Renderer3DOptions extends RendererOptions {
12
+ maxModels: number;
13
+ enableLighting?: boolean;
14
+ }
15
+ export interface Camera2DState {
16
+ x: number;
17
+ y: number;
18
+ zoom: number;
19
+ rotation: number;
20
+ setPosition(x: number, y: number): void;
21
+ move(x: number, y: number): void;
22
+ screenToWorld(screenX: number, screenY: number): [number, number];
23
+ }
24
+ export interface Camera3DState {
25
+ position: [x: number, y: number, z: number];
26
+ target: [x: number, y: number, z: number];
27
+ up: [x: number, y: number, z: number];
28
+ fov: number;
29
+ near: number;
30
+ far: number;
31
+ aspect: number;
32
+ movement: 'local' | 'grounded' | 'global';
33
+ setPosition(x: number, y: number, z: number): void;
34
+ move(right: number, up: number, forward: number): void;
35
+ screenToRay(screenX: number, screenY: number): Ray3D;
36
+ }
37
+ export interface SpritesheetSource {
38
+ image: string;
39
+ frameWidth?: number;
40
+ frameHeight?: number;
41
+ data?: string;
42
+ }
43
+ export interface SpriteOptions {
44
+ sheet: SpritesheetHandle;
45
+ sprite?: number;
46
+ x?: number;
47
+ y?: number;
48
+ layer?: number;
49
+ scaleX?: number;
50
+ scaleY?: number;
51
+ rotation?: number;
52
+ opacity?: number;
53
+ flipX?: boolean;
54
+ flipY?: boolean;
55
+ tint?: [r: number, g: number, b: number, a: number];
56
+ }
57
+ export interface SpritesheetHandle {
58
+ readonly id: number;
59
+ readonly frameCount: number;
60
+ getUV(spriteIndex: number): SpriteUV;
61
+ }
62
+ export interface SpriteUV {
63
+ minX: number;
64
+ minY: number;
65
+ maxX: number;
66
+ maxY: number;
67
+ }
68
+ export interface SpriteHandle {
69
+ readonly slot: number;
70
+ x: number;
71
+ y: number;
72
+ rotation: number;
73
+ scaleX: number;
74
+ scaleY: number;
75
+ opacity: number;
76
+ layer: number;
77
+ flipX: boolean;
78
+ flipY: boolean;
79
+ }