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,169 +0,0 @@
1
- /**
2
- * @description
3
- * A utility class for managing fixed-rate update ticks, useful for deterministic behaviour
4
- * in both client and server.
5
- *
6
- * The `FixedTicker` accumulates elapsed time and determines how many fixed-interval "ticks"
7
- * should be processed based on a specified tick rate. It also limits the maximum number of
8
- * ticks per frame to prevent runaway update loops when frame times are long.
9
- *
10
- *
11
- * @remarks
12
- * - The `tick` method should be called once per frame, passing the elapsed time in seconds.
13
- * - The class ensures that no more than a safe number of ticks are processed per frame.
14
- */
15
- export class FixedTicker {
16
- /**
17
- * @description Accumulator for the time passed since the last tick
18
- */
19
- private accumulator = 0;
20
-
21
- /**
22
- * @description Rate of ticks per second
23
- */
24
- rate: number;
25
-
26
- /**
27
- * @description
28
- * Interval in milliseconds per tick
29
- */
30
- intervalMs: number;
31
-
32
- /**
33
- * @description
34
- * Maximum amount of ticks to run per frame, to avoid
35
- * running too many ticks in a single frame.
36
- */
37
- private maxTicksPerFrame: number;
38
-
39
- /**
40
- * @description
41
- * Callback to execute on each tick
42
- */
43
- private onTick: (deltaTime: number, tick?: number) => void;
44
-
45
- /**
46
- * @description
47
- * Optional callback to execute when ticks are skipped due to high delta time.
48
- * This can be useful for debugging or logging purposes.
49
- */
50
- private onTickSkipped?: (skippedTicks: number) => void;
51
-
52
- /**
53
- * @description
54
- * Internal counter for the number of ticks processed.
55
- */
56
- private _tickCount = 0;
57
-
58
- constructor({ rate, onTick }: FixedTickerProps) {
59
- this.rate = rate;
60
- this.intervalMs = 1000 / this.rate;
61
- this.onTick = onTick;
62
-
63
- // Allow up to rate/2 ticks per frame, but at least 1.
64
- // Prevents runaway loops if delta is too large.
65
- this.maxTicksPerFrame = Math.max(1, Math.floor(rate / 2));
66
- }
67
-
68
- /**
69
- * @description
70
- * Returns how many ticks to run.
71
- *
72
- * @param deltaTime Delta time in seconds
73
- * @returns {number} Amount of ticks to run
74
- */
75
- private getTicks(deltaTime: number): number {
76
- this.accumulator += deltaTime * 1000;
77
-
78
- let ticks = 0;
79
-
80
- while (
81
- this.accumulator >= this.intervalMs &&
82
- ticks < this.maxTicksPerFrame
83
- ) {
84
- this.accumulator -= this.intervalMs;
85
- ticks++;
86
- }
87
-
88
- const skippedTicks = Math.floor(this.accumulator / this.intervalMs);
89
- if (skippedTicks > 0 && this.onTickSkipped) {
90
- this.onTickSkipped(skippedTicks);
91
- }
92
-
93
- return ticks;
94
- }
95
-
96
- /**
97
- * @description
98
- * Processes the ticks based on the elapsed time.
99
- *
100
- * @param deltaTime Delta time in seconds
101
- */
102
- tick(deltaTime: number): void {
103
- const ticks = this.getTicks(deltaTime);
104
-
105
- for (let i = 0; i < ticks; i++) {
106
- this.onTick(1 / this.rate, this._tickCount++);
107
- }
108
- }
109
-
110
- /**
111
- * @description
112
- * Returns the number of ticks processed since the last reset.
113
- *
114
- * @returns {number} Number of ticks processed
115
- */
116
- get tickCount(): number {
117
- return this._tickCount;
118
- }
119
-
120
- /**
121
- * @description
122
- * Resets the tick count to zero.
123
- */
124
- resetTickCount(): void {
125
- this._tickCount = 0;
126
- }
127
-
128
- /**
129
- * @description
130
- * Returns the accumulated time in seconds, useful for interpolation.
131
- *
132
- * @returns {number} Accumulated time in seconds
133
- */
134
- get accumulatedTime(): number {
135
- return this.accumulator / 1000; // Convert to seconds
136
- }
137
-
138
- /**
139
- * @description
140
- * Returns the interpolation factor between 0 and 1 for smooth rendering between ticks.
141
- * Clamped to prevent extrapolation when ticks are skipped.
142
- *
143
- * @returns {number} Alpha value between 0 and 1
144
- */
145
- get alpha(): number {
146
- return Math.min(this.accumulatedTime / (1 / this.rate), 1.0);
147
- }
148
- }
149
-
150
- interface FixedTickerProps {
151
- /**
152
- * @description
153
- * Rate of ticks per second
154
- */
155
- rate: number;
156
-
157
- /**
158
- * @description
159
- * Callback to execute on each tick
160
- */
161
- onTick: (deltaTime: number, tick?: number) => void;
162
-
163
- /**
164
- * @description
165
- * Optional callback to execute when ticks are skipped due to high delta time.
166
- * This can be useful for debugging or logging purposes.
167
- */
168
- onTickSkipped?: (skippedTicks: number) => void
169
- }
@@ -1 +0,0 @@
1
- export * from './fixed-ticker';
@@ -1,18 +0,0 @@
1
- # generateId
2
-
3
- A simple utility function to generate unique 64-bit identifiers using the Web Crypto API.
4
- The IDs are returned as hexadecimal strings and work in both modern browsers and Node.js (v15+).
5
-
6
- ## Features
7
-
8
- - Generates cryptographically strong 64-bit IDs.
9
- - Returns hexadecimal strings (always padded to 16 characters).
10
- - Works in browsers and Node ≥15 without any imports.
11
- - Fast and clean using BigInt arithmetic.
12
-
13
- ## Usage
14
-
15
- ```typescript
16
- import { generateId } from './generate-id';
17
- const id = generateId(); // akwats 16-character hex string
18
- ```
@@ -1,79 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { generateId } from "./generate-id";
3
-
4
- describe("generateId", () => {
5
- test("should generate an ID with default length of 16", () => {
6
- const id = generateId();
7
- expect(id.length).toBe(16);
8
- });
9
-
10
- test("should generate a hexadecimal string", () => {
11
- const id = generateId();
12
- expect(id).toMatch(/^[0-9a-f]+$/);
13
- });
14
-
15
- test("should generate unique IDs", () => {
16
- const ids = new Set();
17
- for (let i = 0; i < 1000; i++) {
18
- ids.add(generateId());
19
- }
20
- expect(ids.size).toBe(1000);
21
- });
22
-
23
- test("should include prefix when provided", () => {
24
- const prefix = "user_";
25
- const id = generateId({ prefix });
26
- expect(id.startsWith(prefix)).toBe(true);
27
- });
28
-
29
- test("should maintain total size including prefix", () => {
30
- const prefix = "user_";
31
- const size = 20;
32
- const id = generateId({ prefix, size });
33
- expect(id.length).toBe(size);
34
- expect(id.startsWith(prefix)).toBe(true);
35
- });
36
-
37
- test("should generate custom size without prefix", () => {
38
- const size = 32;
39
- const id = generateId({ size });
40
- expect(id.length).toBe(size);
41
- });
42
-
43
- test("should enforce minimum of 8 hex characters", () => {
44
- const prefix = "verylongprefix_";
45
- const size = 10; // shorter than prefix + 8
46
- const id = generateId({ prefix, size });
47
- // Should be prefix + at least 8 hex chars
48
- expect(id.length).toBeGreaterThanOrEqual(prefix.length + 8);
49
- });
50
-
51
- test("should pad ID to desired length", () => {
52
- const size = 24;
53
- const id = generateId({ size });
54
- expect(id.length).toBe(size);
55
- });
56
-
57
- test("should generate different IDs on consecutive calls", () => {
58
- const id1 = generateId();
59
- const id2 = generateId();
60
- expect(id1).not.toBe(id2);
61
- });
62
-
63
- test("should work with various prefix lengths", () => {
64
- const prefixes = ["a", "ab", "abc", "player_", "super_long_prefix_"];
65
- prefixes.forEach((prefix) => {
66
- const id = generateId({ prefix });
67
- expect(id.startsWith(prefix)).toBe(true);
68
- });
69
- });
70
-
71
- test("should generate valid hex with leading zeros preserved", () => {
72
- // Generate many IDs to ensure padding works correctly
73
- for (let i = 0; i < 100; i++) {
74
- const id = generateId({ size: 16 });
75
- expect(id.length).toBe(16);
76
- expect(id).toMatch(/^[0-9a-f]{16}$/);
77
- }
78
- });
79
- });
@@ -1,37 +0,0 @@
1
- interface GenerateIdOptions {
2
- /** Optional prefix to prepend to the ID */
3
- prefix?: string;
4
- /** Total length of the returned ID including prefix (default 16) */
5
- size?: number;
6
- }
7
-
8
- /**
9
- * @description
10
- * Generates a unique identifier as a hexadecimal string.
11
- * Can include a prefix and a custom total length.
12
- *
13
- * @param options Optional configuration: prefix and total size
14
- * @returns A unique identifier string
15
- *
16
- * @example
17
- * generateId(); // "f3a2b1c4d5e67890"
18
- * generateId({ prefix: 'user_' }); // "user_f3a2b1c4d5e67890"
19
- * generateId({ prefix: 'user_', size: 24 }); // "user_00f3a2b1c4d5e67890"
20
- */
21
- export function generateId(options: GenerateIdOptions = {}): string {
22
- const { prefix = "", size = 16 } = options;
23
-
24
- // compute number of hex characters to generate (subtract prefix length)
25
- const hexLength = Math.max(size - prefix.length, 8); // min 8 hex chars
26
-
27
- // number of 32-bit integers needed to cover the hexLength
28
- const numInts = Math.ceil(hexLength / 8);
29
-
30
- const arr = crypto.getRandomValues(new Uint32Array(numInts));
31
- let id = arr.reduce((acc, val) => acc + val.toString(16).padStart(8, "0"), "");
32
-
33
- // truncate/pad to desired length
34
- id = id.slice(0, hexLength).padStart(hexLength, "0");
35
-
36
- return `${prefix}${id}`;
37
- }
@@ -1 +0,0 @@
1
- export * from './generate-id';
package/src/core/index.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from './binary-codec';
2
- export * from './events';
3
- export * from './fixed-ticker';
4
- export * from './generate-id';
5
- export * from './lerp';
6
- export * from './loop';
7
- export * from './navmesh';
8
- export * from './pooled-codec';
9
- export * from './prediction';
@@ -1,79 +0,0 @@
1
- # lerp
2
-
3
- A simple utility function for linear interpolation between two numeric values. Perfect for smooth animations, transitions, and value easing in game development.
4
-
5
- ## Features
6
-
7
- - Clean linear interpolation implementation.
8
- - Unclamped by design - allows extrapolation when t is outside [0, 1].
9
- - Zero dependencies.
10
- - Works in browsers and Node.js.
11
- - TypeScript support with proper type definitions.
12
-
13
- ## Usage
14
-
15
- ```typescript
16
- import { lerp } from './lerp';
17
-
18
- // Basic interpolation
19
- const value = lerp(0, 100, 0.5); // Returns 50
20
-
21
- // Animation example
22
- const startPos = 0;
23
- const endPos = 100;
24
- const progress = 0.75;
25
- const currentPos = lerp(startPos, endPos, progress); // Returns 75
26
-
27
- // Smooth camera movement
28
- function updateCamera(deltaTime: number) {
29
- const t = deltaTime * smoothingFactor;
30
- camera.x = lerp(camera.x, target.x, t);
31
- camera.y = lerp(camera.y, target.y, t);
32
- }
33
-
34
- // Color transitions
35
- const r = lerp(startColor.r, endColor.r, progress);
36
- const g = lerp(startColor.g, endColor.g, progress);
37
- const b = lerp(startColor.b, endColor.b, progress);
38
- ```
39
-
40
- ## Parameters
41
-
42
- - `start` (number): The starting value (returned when t = 0)
43
- - `end` (number): The ending value (returned when t = 1)
44
- - `t` (number): The interpolation factor, typically in range [0, 1]
45
-
46
- ## Returns
47
-
48
- `number` - The interpolated value between start and end.
49
-
50
- ## Extrapolation
51
-
52
- The function does not clamp the `t` parameter, allowing extrapolation:
53
-
54
- ```typescript
55
- lerp(0, 100, 1.5); // Returns 150 (extrapolated beyond end)
56
- lerp(0, 100, -0.5); // Returns -50 (extrapolated before start)
57
- ```
58
-
59
- If you need clamped interpolation, combine with a clamp function:
60
-
61
- ```typescript
62
- function clampedLerp(start: number, end: number, t: number): number {
63
- const clampedT = Math.max(0, Math.min(1, t));
64
- return lerp(start, end, clampedT);
65
- }
66
- ```
67
-
68
- ## Common Use Cases
69
-
70
- - **Smooth animations**: Interpolate position, rotation, scale over time
71
- - **Camera movement**: Create smooth camera following behavior
72
- - **UI transitions**: Fade effects, sliding panels, progress bars
73
- - **Color blending**: Transition between colors smoothly
74
- - **Value easing**: Gradually approach target values
75
- - **Physics simulations**: Interpolate between physics states for rendering
76
-
77
- ---
78
-
79
- `lerp` provides a foundational building block for smooth, continuous value transitions in game development and interactive applications.
@@ -1 +0,0 @@
1
- export * from './lerp';
@@ -1,90 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { lerp } from "./lerp";
3
-
4
- describe("lerp", () => {
5
- test("should return start value when t is 0", () => {
6
- expect(lerp(0, 100, 0)).toBe(0);
7
- expect(lerp(50, 200, 0)).toBe(50);
8
- expect(lerp(-10, 10, 0)).toBe(-10);
9
- });
10
-
11
- test("should return end value when t is 1", () => {
12
- expect(lerp(0, 100, 1)).toBe(100);
13
- expect(lerp(50, 200, 1)).toBe(200);
14
- expect(lerp(-10, 10, 1)).toBe(10);
15
- });
16
-
17
- test("should return midpoint when t is 0.5", () => {
18
- expect(lerp(0, 100, 0.5)).toBe(50);
19
- expect(lerp(50, 150, 0.5)).toBe(100);
20
- expect(lerp(-10, 10, 0.5)).toBe(0);
21
- });
22
-
23
- test("should interpolate between positive values", () => {
24
- expect(lerp(0, 100, 0.25)).toBe(25);
25
- expect(lerp(0, 100, 0.75)).toBe(75);
26
- expect(lerp(10, 20, 0.3)).toBeCloseTo(13, 5);
27
- });
28
-
29
- test("should interpolate between negative values", () => {
30
- expect(lerp(-100, -50, 0.5)).toBe(-75);
31
- expect(lerp(-10, -5, 0.2)).toBe(-9);
32
- });
33
-
34
- test("should interpolate from negative to positive", () => {
35
- expect(lerp(-50, 50, 0.5)).toBe(0);
36
- expect(lerp(-10, 10, 0.25)).toBe(-5);
37
- expect(lerp(-10, 10, 0.75)).toBe(5);
38
- });
39
-
40
- test("should handle extrapolation when t > 1", () => {
41
- expect(lerp(0, 100, 1.5)).toBe(150);
42
- expect(lerp(0, 100, 2)).toBe(200);
43
- expect(lerp(10, 20, 1.1)).toBeCloseTo(21, 5);
44
- });
45
-
46
- test("should handle extrapolation when t < 0", () => {
47
- expect(lerp(0, 100, -0.5)).toBe(-50);
48
- expect(lerp(0, 100, -1)).toBe(-100);
49
- expect(lerp(10, 20, -0.1)).toBeCloseTo(9, 5);
50
- });
51
-
52
- test("should handle same start and end values", () => {
53
- expect(lerp(50, 50, 0)).toBe(50);
54
- expect(lerp(50, 50, 0.5)).toBe(50);
55
- expect(lerp(50, 50, 1)).toBe(50);
56
- expect(lerp(50, 50, 2)).toBe(50);
57
- });
58
-
59
- test("should handle floating point values", () => {
60
- expect(lerp(0.1, 0.9, 0.5)).toBeCloseTo(0.5, 10);
61
- expect(lerp(1.5, 2.5, 0.3)).toBeCloseTo(1.8, 10);
62
- });
63
-
64
- test("should be commutative with inverted t", () => {
65
- const start = 10;
66
- const end = 20;
67
- expect(lerp(start, end, 0.3)).toBeCloseTo(lerp(end, start, 0.7), 10);
68
- });
69
-
70
- test("should handle very small differences", () => {
71
- expect(lerp(1.0, 1.0001, 0.5)).toBeCloseTo(1.00005, 10);
72
- });
73
-
74
- test("should handle very large values", () => {
75
- expect(lerp(1e10, 2e10, 0.5)).toBe(1.5e10);
76
- });
77
-
78
- test("should be linear (no easing)", () => {
79
- const start = 0;
80
- const end = 100;
81
- const step = 0.1;
82
- const expectedDiff = 10;
83
-
84
- for (let t = 0; t < 1; t += step) {
85
- const val1 = lerp(start, end, t);
86
- const val2 = lerp(start, end, t + step);
87
- expect(val2 - val1).toBeCloseTo(expectedDiff, 5);
88
- }
89
- });
90
- });
@@ -1,42 +0,0 @@
1
- /**
2
- * @description
3
- * Performs linear interpolation between two values.
4
- *
5
- * Linear interpolation (lerp) calculates a value between a start and end point
6
- * based on a normalized interpolation factor (t). When t = 0, the result equals
7
- * the start value; when t = 1, the result equals the end value. Values of t
8
- * between 0 and 1 produce intermediate results.
9
- *
10
- * @remarks
11
- * - This function does not clamp the interpolation factor. Values of t outside
12
- * the range [0, 1] will extrapolate beyond the start and end values.
13
- * - For clamped interpolation, combine with a clamp function on the t parameter.
14
- * - Commonly used for smooth animations, camera movements, and value transitions.
15
- *
16
- * @param start - The starting value (when t = 0)
17
- * @param end - The ending value (when t = 1)
18
- * @param t - The interpolation factor, typically in the range [0, 1]
19
- *
20
- * @returns {number} The interpolated value between start and end
21
- *
22
- * @example
23
- * ```typescript
24
- * // Basic interpolation
25
- * lerp(0, 100, 0.5); // Returns 50
26
- * lerp(0, 100, 0); // Returns 0
27
- * lerp(0, 100, 1); // Returns 100
28
- *
29
- * // Animation example
30
- * const startPos = 0;
31
- * const endPos = 100;
32
- * const progress = 0.75;
33
- * const currentPos = lerp(startPos, endPos, progress); // Returns 75
34
- *
35
- * // Extrapolation (t outside [0, 1])
36
- * lerp(0, 100, 1.5); // Returns 150
37
- * lerp(0, 100, -0.5); // Returns -50
38
- * ```
39
- */
40
- export function lerp(start: number, end: number, t: number): number {
41
- return start + (end - start) * t;
42
- }
@@ -1,97 +0,0 @@
1
- # Loop
2
-
3
- Environment-aware game loop drivers for client (browser) and server (Node.js).
4
- Provides variable delta time that should be consumed by `FixedTicker` for deterministic game logic.
5
-
6
- ---
7
-
8
- ## Features
9
-
10
- - **Environment-Specific**: Uses `requestAnimationFrame` (client) or `setImmediate` (server)
11
- - **Automatic Delta Time**: Calculates delta in seconds between frames
12
- - **Simple API**: Start and stop with a single method call
13
- - **Designed for FixedTicker**: Provides variable dt that FixedTicker converts to fixed timesteps
14
-
15
- ---
16
-
17
- ## Usage
18
-
19
- ### Recommended: With FixedTicker
20
-
21
- ```typescript
22
- import { createDriver } from '@/core/loop';
23
- import { FixedTicker } from '@/core/fixed-ticker';
24
-
25
- const ticker = new FixedTicker({
26
- rate: 30,
27
- onTick: (fixedDt, tick) => {
28
- world.update(fixedDt);
29
- applyInputs(tick);
30
- }
31
- });
32
-
33
- // Client: RAF driver with interpolation
34
- const clientDriver = createDriver('client', (dt) => {
35
- ticker.tick(dt);
36
- render(ticker.alpha); // Smooth 60 FPS rendering of 30 TPS simulation
37
- });
38
- clientDriver.start();
39
-
40
- // Server: Immediate driver for high-frequency updates
41
- const serverDriver = createDriver('server', (dt) => {
42
- ticker.tick(dt);
43
- broadcastState();
44
- });
45
- serverDriver.start();
46
- ```
47
-
48
- ### Direct Usage (Single-player only)
49
-
50
- ```typescript
51
- import { createDriver } from '@/core/loop';
52
-
53
- // ⚠️ Variable delta time - not suitable for multiplayer
54
- const driver = createDriver('client', (dt) => {
55
- player.update(dt);
56
- renderer.render();
57
- });
58
- driver.start();
59
- ```
60
-
61
- ---
62
-
63
- ## Drivers
64
-
65
- ### `RafDriver` (Client)
66
- - Uses `requestAnimationFrame`
67
- - Syncs with display refresh rate (~60 FPS)
68
- - Automatic throttling when tab not visible
69
-
70
- ### `ImmediateDriver` (Server)
71
- - Uses `setImmediate` (Node.js only)
72
- - Runs as fast as possible without blocking event loop
73
- - Suitable for server simulations
74
-
75
- ---
76
-
77
- ## API
78
-
79
- ```typescript
80
- createDriver(type: 'client' | 'server', update: (dt: number) => void): LoopDriver
81
- ```
82
-
83
- ```typescript
84
- interface LoopDriver {
85
- start(): void; // Start the loop
86
- stop(): void; // Stop the loop
87
- }
88
- ```
89
-
90
- ---
91
-
92
- ## Notes
93
-
94
- - Delta time (`dt`) is always in **seconds**, not milliseconds
95
- - **Always use with FixedTicker** for multiplayer/deterministic games
96
- - Direct usage without FixedTicker only suitable for single-player scenarios
97
- - `ImmediateDriver` requires Node.js (uses `setImmediate`)
@@ -1,66 +0,0 @@
1
- import { LoopDriver } from "../loop";
2
-
3
- /**
4
- * Server-side game loop driver using setImmediate.
5
- *
6
- * This driver runs the game loop as fast as possible without blocking the event loop,
7
- * making it suitable for Node.js server environments where high tick rates are desired.
8
- *
9
- * Delta time is automatically calculated between iterations and passed to the update callback in seconds.
10
- *
11
- * **Note:** This driver requires Node.js as it uses `setImmediate` which is not available in browsers.
12
- *
13
- * @example
14
- * ```typescript
15
- * const driver = new ImmediateDriver((dt) => {
16
- * world.tick(dt);
17
- * broadcastState();
18
- * });
19
- * driver.start();
20
- * ```
21
- */
22
- export class ImmediateDriver implements LoopDriver {
23
- /**
24
- * @param update - Callback invoked each tick with delta time in seconds
25
- */
26
- constructor(public update: (dt: number) => void) { }
27
-
28
- private last = performance.now();
29
- private running = false;
30
-
31
- /**
32
- * Starts the game loop using setImmediate.
33
- *
34
- * Resets timing to prevent large initial delta.
35
- */
36
- start() {
37
- this.running = true;
38
- this.last = performance.now();
39
- this.loop();
40
- }
41
-
42
- /**
43
- * Stops the game loop.
44
- *
45
- * Note: Does not cancel already queued setImmediate callbacks.
46
- */
47
- stop() {
48
- this.running = false;
49
- }
50
-
51
- /**
52
- * Internal loop method that calculates delta time and schedules the next iteration.
53
- *
54
- * Delta time is provided in seconds.
55
- */
56
- loop = () => {
57
- if (!this.running) return;
58
-
59
- const now = performance.now();
60
- const dt = (now - this.last) / 1000;
61
- this.last = now;
62
-
63
- this.update(dt);
64
- setImmediate(this.loop);
65
- };
66
- }