murow 0.0.70 → 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 (439) 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 → types/core}/events/event-system.d.ts +14 -33
  156. package/dist/types/core/free-list/free-list.d.ts +31 -0
  157. package/dist/types/core/free-list/index.d.ts +1 -0
  158. package/dist/{core → types/core}/index.d.ts +5 -0
  159. package/dist/{core → types/core}/input/index.d.ts +1 -0
  160. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  161. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  162. package/dist/types/core/ray/index.d.ts +2 -0
  163. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  164. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  165. package/dist/types/core/simple-rng/index.d.ts +1 -0
  166. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  167. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  168. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  169. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  170. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  171. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  172. package/dist/{net → types/net}/index.d.ts +2 -2
  173. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  174. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  175. package/dist/types/renderer/base-renderer.d.ts +21 -0
  176. package/dist/types/renderer/index.d.ts +4 -0
  177. package/dist/types/renderer/types.d.ts +79 -0
  178. package/dist/webgpu/cjs/index.js +6004 -0
  179. package/dist/webgpu/esm/index.js +5972 -0
  180. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  181. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  182. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  183. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  184. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  185. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  186. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  187. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  188. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  189. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  190. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  191. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  192. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  193. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  194. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  195. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  196. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  197. package/dist/webgpu/types/camera/index.d.ts +2 -0
  198. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  199. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  200. package/dist/webgpu/types/core/constants.d.ts +59 -0
  201. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  202. package/dist/webgpu/types/core/index.d.ts +2 -0
  203. package/dist/webgpu/types/core/math.d.ts +37 -0
  204. package/dist/webgpu/types/core/types.d.ts +125 -0
  205. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  206. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  207. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  208. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  209. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  210. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  211. package/dist/webgpu/types/index.d.ts +32 -0
  212. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  213. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  214. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  215. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  216. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  217. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  218. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  219. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  220. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  221. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  222. package/package.json +96 -26
  223. package/dist/core/binary-codec/binary-codec.js +0 -354
  224. package/dist/core/binary-codec/index.js +0 -1
  225. package/dist/core/driver/driver.js +0 -47
  226. package/dist/core/driver/drivers/immediate.js +0 -61
  227. package/dist/core/driver/drivers/index.js +0 -3
  228. package/dist/core/driver/drivers/raf.js +0 -62
  229. package/dist/core/driver/drivers/timeout.js +0 -71
  230. package/dist/core/driver/index.js +0 -2
  231. package/dist/core/events/event-system.js +0 -88
  232. package/dist/core/events/index.js +0 -1
  233. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  234. package/dist/core/fixed-ticker/index.js +0 -1
  235. package/dist/core/generate-id/generate-id.js +0 -25
  236. package/dist/core/generate-id/index.js +0 -1
  237. package/dist/core/index.js +0 -10
  238. package/dist/core/input/index.js +0 -2
  239. package/dist/core/input/manager.js +0 -211
  240. package/dist/core/input/sources/browser.js +0 -29
  241. package/dist/core/input/sources/index.js +0 -1
  242. package/dist/core/lerp/index.js +0 -1
  243. package/dist/core/lerp/lerp.js +0 -42
  244. package/dist/core/navmesh/index.js +0 -1
  245. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  246. package/dist/core/navmesh/navmesh.js +0 -799
  247. package/dist/core/navmesh/navmesh.worker.js +0 -79
  248. package/dist/core/pooled-codec/index.js +0 -1
  249. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  250. package/dist/core/prediction/index.js +0 -1
  251. package/dist/core/prediction/prediction.js +0 -99
  252. package/dist/core.esm.js +0 -1
  253. package/dist/core.js +0 -1
  254. package/dist/ecs/component-store.js +0 -175
  255. package/dist/ecs/component.js +0 -43
  256. package/dist/ecs/entity-handle.js +0 -515
  257. package/dist/ecs/example.js +0 -125
  258. package/dist/ecs/index.js +0 -4
  259. package/dist/ecs/system-builder.js +0 -249
  260. package/dist/ecs/world-systems.js +0 -79
  261. package/dist/ecs/world.js +0 -767
  262. package/dist/game/index.js +0 -1
  263. package/dist/game/loop/index.js +0 -1
  264. package/dist/game/loop/loop.js +0 -108
  265. package/dist/index.js +0 -26
  266. package/dist/net/adapters/browser-websocket.js +0 -74
  267. package/dist/net/adapters/bun-websocket.js +0 -245
  268. package/dist/net/buffer-pool.js +0 -89
  269. package/dist/net/client.js +0 -586
  270. package/dist/net/index.js +0 -58
  271. package/dist/net/server.js +0 -974
  272. package/dist/net/types.js +0 -31
  273. package/dist/net/validators.js +0 -88
  274. package/dist/protocol/index.js +0 -92
  275. package/dist/protocol/intent/define-intent.js +0 -125
  276. package/dist/protocol/intent/index.js +0 -91
  277. package/dist/protocol/intent/intent-registry.js +0 -91
  278. package/dist/protocol/rpc/define-rpc.js +0 -84
  279. package/dist/protocol/rpc/index.js +0 -3
  280. package/dist/protocol/rpc/rpc-registry.js +0 -159
  281. package/dist/protocol/rpc/rpc.js +0 -12
  282. package/dist/protocol/snapshot/index.js +0 -43
  283. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  284. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  285. package/dist/protocol/snapshot/snapshot.js +0 -30
  286. package/src/core/binary-codec/README.md +0 -60
  287. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  288. package/src/core/binary-codec/binary-codec.ts +0 -448
  289. package/src/core/binary-codec/index.ts +0 -1
  290. package/src/core/driver/README.md +0 -97
  291. package/src/core/driver/driver.test.ts +0 -414
  292. package/src/core/driver/driver.ts +0 -71
  293. package/src/core/driver/drivers/immediate.ts +0 -66
  294. package/src/core/driver/drivers/index.ts +0 -3
  295. package/src/core/driver/drivers/raf.ts +0 -67
  296. package/src/core/driver/drivers/timeout.ts +0 -77
  297. package/src/core/driver/index.ts +0 -2
  298. package/src/core/events/README.md +0 -47
  299. package/src/core/events/event-system.test.ts +0 -243
  300. package/src/core/events/event-system.ts +0 -140
  301. package/src/core/events/index.ts +0 -1
  302. package/src/core/fixed-ticker/README.md +0 -77
  303. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  304. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  305. package/src/core/fixed-ticker/index.ts +0 -1
  306. package/src/core/generate-id/README.md +0 -18
  307. package/src/core/generate-id/generate-id.test.ts +0 -79
  308. package/src/core/generate-id/generate-id.ts +0 -37
  309. package/src/core/generate-id/index.ts +0 -1
  310. package/src/core/index.ts +0 -10
  311. package/src/core/input/README.md +0 -24
  312. package/src/core/input/index.ts +0 -2
  313. package/src/core/input/manager.ts +0 -259
  314. package/src/core/input/sources/browser.ts +0 -39
  315. package/src/core/input/sources/index.ts +0 -1
  316. package/src/core/input/types.ts +0 -40
  317. package/src/core/lerp/README.md +0 -79
  318. package/src/core/lerp/index.ts +0 -1
  319. package/src/core/lerp/lerp.test.ts +0 -90
  320. package/src/core/lerp/lerp.ts +0 -42
  321. package/src/core/navmesh/README.md +0 -164
  322. package/src/core/navmesh/index.ts +0 -1
  323. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  324. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  325. package/src/core/navmesh/navmesh.test.ts +0 -344
  326. package/src/core/navmesh/navmesh.ts +0 -1047
  327. package/src/core/navmesh/navmesh.worker.ts +0 -147
  328. package/src/core/pooled-codec/README.md +0 -70
  329. package/src/core/pooled-codec/index.ts +0 -1
  330. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  331. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  332. package/src/core/prediction/README.md +0 -64
  333. package/src/core/prediction/index.ts +0 -1
  334. package/src/core/prediction/prediction.test.ts +0 -423
  335. package/src/core/prediction/prediction.ts +0 -112
  336. package/src/ecs/README.md +0 -427
  337. package/src/ecs/benchmark.test.ts +0 -1645
  338. package/src/ecs/component-store.ts +0 -198
  339. package/src/ecs/component.ts +0 -90
  340. package/src/ecs/entity-handle.test.ts +0 -393
  341. package/src/ecs/entity-handle.ts +0 -563
  342. package/src/ecs/example.ts +0 -152
  343. package/src/ecs/index.ts +0 -4
  344. package/src/ecs/system-builder.ts +0 -404
  345. package/src/ecs/world-systems.ts +0 -83
  346. package/src/ecs/world.test.ts +0 -310
  347. package/src/ecs/world.ts +0 -904
  348. package/src/game/index.ts +0 -1
  349. package/src/game/loop/README.md +0 -32
  350. package/src/game/loop/index.ts +0 -1
  351. package/src/game/loop/loop.ts +0 -236
  352. package/src/index.ts +0 -32
  353. package/src/net/README.md +0 -474
  354. package/src/net/adapters/browser-websocket.ts +0 -86
  355. package/src/net/adapters/bun-websocket.ts +0 -292
  356. package/src/net/buffer-pool.ts +0 -106
  357. package/src/net/client.test.ts +0 -807
  358. package/src/net/client.ts +0 -695
  359. package/src/net/index.ts +0 -60
  360. package/src/net/server.test.ts +0 -799
  361. package/src/net/server.ts +0 -1152
  362. package/src/net/types.ts +0 -228
  363. package/src/net/validators.ts +0 -104
  364. package/src/protocol/README.md +0 -469
  365. package/src/protocol/index.ts +0 -93
  366. package/src/protocol/intent/define-intent.test.ts +0 -397
  367. package/src/protocol/intent/define-intent.ts +0 -201
  368. package/src/protocol/intent/index.ts +0 -94
  369. package/src/protocol/intent/intent-registry.test.ts +0 -198
  370. package/src/protocol/intent/intent-registry.ts +0 -112
  371. package/src/protocol/intent/intent.ts +0 -12
  372. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  373. package/src/protocol/rpc/define-rpc.ts +0 -113
  374. package/src/protocol/rpc/index.ts +0 -3
  375. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  376. package/src/protocol/rpc/rpc-registry.ts +0 -176
  377. package/src/protocol/rpc/rpc.ts +0 -37
  378. package/src/protocol/snapshot/index.ts +0 -45
  379. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  380. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  381. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  382. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  383. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  384. package/src/protocol/snapshot/snapshot.ts +0 -41
  385. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  386. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  387. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  388. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  390. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  391. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  392. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  394. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  395. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  396. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  397. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  398. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  400. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  402. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  403. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  404. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  405. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  406. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  407. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  408. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  409. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  410. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  411. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  412. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  413. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  414. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  415. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  416. /package/dist/{game → types/game}/index.d.ts +0 -0
  417. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  418. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  419. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  420. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  421. /package/dist/{net → types/net}/client.d.ts +0 -0
  422. /package/dist/{net → types/net}/server.d.ts +0 -0
  423. /package/dist/{net → types/net}/types.d.ts +0 -0
  424. /package/dist/{net → types/net}/validators.d.ts +0 -0
  425. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  426. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  427. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  428. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  429. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  430. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  431. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  432. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  433. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  434. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  435. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  436. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  437. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  438. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  439. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,448 +0,0 @@
1
- /**
2
- * A binary field descriptor.
3
- * Defines how a single value is serialized/deserialized
4
- * at a fixed byte size.
5
- */
6
- export type Field<T> = {
7
- /** Size of the field in bytes */
8
- size: number;
9
-
10
- /**
11
- * Writes a value into a DataView at the given offset.
12
- * @param dv DataView to write into
13
- * @param o Byte offset
14
- * @param v Value to write
15
- */
16
- write(dv: DataView, o: number, v: T): void;
17
-
18
- /**
19
- * Reads a value from a DataView at the given offset.
20
- * @param dv DataView to read from
21
- * @param o Byte offset
22
- */
23
- read(dv: DataView, o: number): T;
24
-
25
- /**
26
- * Returns the nil value
27
- */
28
- toNil(): T;
29
- };
30
-
31
- /**
32
- * A schema mapping object keys to binary fields.
33
- * The order of iteration defines the binary layout.
34
- *
35
- * IMPORTANT:
36
- * Property order is respected as insertion order.
37
- * Do not rely on computed or dynamic keys.
38
- */
39
- export type Schema<T> = {
40
- [K in keyof T]: Field<T[K]>;
41
- };
42
-
43
- /**
44
- * Internal symbol used to cache computed schema byte size.
45
- */
46
- const SCHEMA_SIZE = Symbol("schemaSize");
47
-
48
- /**
49
- * Computes and caches the total byte size of a schema.
50
- * @param schema Binary schema definition
51
- */
52
- function getSchemaSize<T extends object>(schema: Schema<T>): number {
53
- const cached = (schema as any)[SCHEMA_SIZE];
54
- if (cached !== undefined) return cached;
55
-
56
- let size = 0;
57
- for (const k of Object.keys(schema) as (keyof T)[]) {
58
- size += schema[k].size;
59
- }
60
-
61
- (schema as any)[SCHEMA_SIZE] = size;
62
- return size;
63
- }
64
-
65
- /**
66
- * Base codec implementation.
67
- * Handles schema-driven encoding/decoding.
68
- */
69
- export class BaseBinaryCodec {
70
- /**
71
- * Encodes an object into a binary buffer using the given schema.
72
- *
73
- * Allocates a right-sized buffer per call.
74
- * Safe for concurrent and re-entrant usage.
75
- *
76
- * @param schema Binary schema definition
77
- * @param data Object to encode
78
- * @returns A Uint8Array containing the encoded bytes
79
- */
80
- protected static encodeInto<T extends object>(
81
- schema: Schema<T>,
82
- data: T
83
- ): Uint8Array {
84
- const size = getSchemaSize(schema);
85
- const buffer = new ArrayBuffer(size);
86
- const view = new DataView(buffer);
87
-
88
- let o = 0;
89
- for (const k of Object.keys(schema) as (keyof T)[]) {
90
- const f = schema[k];
91
- f.write(view, o, data[k]);
92
- o += f.size;
93
- }
94
-
95
- return new Uint8Array(buffer);
96
- }
97
-
98
- /**
99
- * Decodes a binary buffer into a target object using the given schema.
100
- *
101
- * Validates buffer size before reading.
102
- * Does not mutate shared state.
103
- *
104
- * @param schema Binary schema definition
105
- * @param buf Buffer containing encoded data
106
- * @param target Target object to mutate
107
- * @returns The mutated target object
108
- */
109
- static decodeInto<T extends object>(
110
- schema: Schema<T>,
111
- buf: Uint8Array,
112
- target: T
113
- ): T {
114
- const expectedSize = getSchemaSize(schema);
115
-
116
- if (buf.byteLength < expectedSize) {
117
- throw new RangeError(
118
- `Buffer too small: expected ${expectedSize} bytes, got ${buf.byteLength}`
119
- );
120
- }
121
-
122
- const view = new DataView(
123
- buf.buffer,
124
- buf.byteOffset,
125
- buf.byteLength
126
- );
127
-
128
- let o = 0;
129
- for (const k of Object.keys(schema) as (keyof T)[]) {
130
- const f = schema[k];
131
- target[k] = f.read(view, o);
132
- o += f.size;
133
- }
134
-
135
- return target;
136
- }
137
- }
138
-
139
- /**
140
- * Built-in binary primitive field definitions for multiplayer games.
141
- */
142
- export class BinaryPrimitives {
143
- /** Unsigned 8-bit integer */
144
- static readonly u8: Field<number> = {
145
- size: 1,
146
- write: (dv, o, v) => dv.setUint8(o, v),
147
- read: (dv, o) => dv.getUint8(o),
148
- toNil: () => 0,
149
- };
150
-
151
- /** Unsigned 16-bit integer (big-endian) */
152
- static readonly u16: Field<number> = {
153
- size: 2,
154
- write: (dv, o, v) => dv.setUint16(o, v, false),
155
- read: (dv, o) => dv.getUint16(o, false),
156
- toNil: () => 0,
157
- };
158
-
159
- /** Unsigned 32-bit integer (big-endian) */
160
- static readonly u32: Field<number> = {
161
- size: 4,
162
- write: (dv, o, v) => dv.setUint32(o, v, false),
163
- read: (dv, o) => dv.getUint32(o, false),
164
- toNil: () => 0,
165
- };
166
-
167
- /** Signed 8-bit integer */
168
- static readonly i8: Field<number> = {
169
- size: 1,
170
- write: (dv, o, v) => dv.setInt8(o, v),
171
- read: (dv, o) => dv.getInt8(o),
172
- toNil: () => 0,
173
- };
174
-
175
- /** Signed 16-bit integer (big-endian) */
176
- static readonly i16: Field<number> = {
177
- size: 2,
178
- write: (dv, o, v) => dv.setInt16(o, v, false),
179
- read: (dv, o) => dv.getInt16(o, false),
180
- toNil: () => 0,
181
- };
182
-
183
- /** Signed 32-bit integer (big-endian) */
184
- static readonly i32: Field<number> = {
185
- size: 4,
186
- write: (dv, o, v) => dv.setInt32(o, v, false),
187
- read: (dv, o) => dv.getInt32(o, false),
188
- toNil: () => 0,
189
- };
190
-
191
- /** 32-bit floating point number (IEEE 754, big-endian) */
192
- static readonly f32: Field<number> = {
193
- size: 4,
194
- write: (dv, o, v) => dv.setFloat32(o, v, false),
195
- read: (dv, o) => dv.getFloat32(o, false),
196
- toNil: () => 0,
197
- };
198
-
199
- /** 64-bit floating point number (double, big-endian) */
200
- static readonly f64: Field<number> = {
201
- size: 8,
202
- write: (dv, o, v) => dv.setFloat64(o, v, false),
203
- read: (dv, o) => dv.getFloat64(o, false),
204
- toNil: () => 0,
205
- };
206
-
207
- /** Boolean stored as 1 byte (0 = false, 1 = true) */
208
- static readonly bool: Field<boolean> = {
209
- size: 1,
210
- write: (dv, o, v) => dv.setUint8(o, v ? 1 : 0),
211
- read: (dv, o) => dv.getUint8(o) !== 0,
212
- toNil: () => false,
213
- };
214
-
215
- /**
216
- * String field with UTF-8 encoding and 2-byte length prefix.
217
- * @param maxLength Maximum number of bytes allowed
218
- */
219
- static string(maxLength: number): Field<string> {
220
- return {
221
- size: maxLength + 2,
222
- write(dv, o, v) {
223
- const encoder = new TextEncoder();
224
- const bytes = encoder.encode(v);
225
- if (bytes.length > maxLength)
226
- throw new RangeError(`String too long, max ${maxLength} bytes`);
227
- dv.setUint16(o, bytes.length, false);
228
- for (let i = 0; i < bytes.length; i++) dv.setUint8(o + 2 + i, bytes[i]);
229
- for (let i = bytes.length; i < maxLength; i++) dv.setUint8(o + 2 + i, 0);
230
- },
231
- read(dv, o) {
232
- const length = dv.getUint16(o, false);
233
- const bytes = new Uint8Array(length);
234
- for (let i = 0; i < length; i++) bytes[i] = dv.getUint8(o + 2 + i);
235
- return new TextDecoder().decode(bytes);
236
- },
237
- toNil: () => "",
238
- };
239
- }
240
-
241
- /** 2D vector of f32 (x, y) */
242
- static readonly vec2: Field<{ x: number; y: number }> = {
243
- size: 8,
244
- write(dv, o, v) {
245
- dv.setFloat32(o, v.x, false);
246
- dv.setFloat32(o + 4, v.y, false);
247
- },
248
- read(dv, o) {
249
- return { x: dv.getFloat32(o, false), y: dv.getFloat32(o + 4, false) };
250
- },
251
- toNil: () => ({ x: 0, y: 0 }),
252
- };
253
-
254
- /** 3D vector of f32 (x, y, z) */
255
- static readonly vec3: Field<{ x: number; y: number; z: number }> = {
256
- size: 12,
257
- write(dv, o, v) {
258
- dv.setFloat32(o, v.x, false);
259
- dv.setFloat32(o + 4, v.y, false);
260
- dv.setFloat32(o + 8, v.z, false);
261
- },
262
- read(dv, o) {
263
- return {
264
- x: dv.getFloat32(o, false),
265
- y: dv.getFloat32(o + 4, false),
266
- z: dv.getFloat32(o + 8, false),
267
- };
268
- },
269
- toNil: () => ({ x: 0, y: 0, z: 0 }),
270
- };
271
-
272
- /** RGBA color packed as 4 u8 bytes */
273
- static readonly color: Field<{ r: number; g: number; b: number; a: number }> = {
274
- size: 4,
275
- write(dv, o, v) {
276
- dv.setUint8(o, v.r);
277
- dv.setUint8(o + 1, v.g);
278
- dv.setUint8(o + 2, v.b);
279
- dv.setUint8(o + 3, v.a);
280
- },
281
- read(dv, o) {
282
- return {
283
- r: dv.getUint8(o),
284
- g: dv.getUint8(o + 1),
285
- b: dv.getUint8(o + 2),
286
- a: dv.getUint8(o + 3),
287
- };
288
- },
289
- toNil: () => ({ r: 0, g: 0, b: 0, a: 0 }),
290
- };
291
-
292
- /** 32-bit floating point number (IEEE 754, little-endian) */
293
- static readonly f32_le: Field<number> = {
294
- size: 4,
295
- write: (dv, o, v) => dv.setFloat32(o, v, true),
296
- read: (dv, o) => dv.getFloat32(o, true),
297
- toNil: () => 0,
298
- };
299
-
300
- /** 64-bit floating point number (double, little-endian) */
301
- static readonly f64_le: Field<number> = {
302
- size: 8,
303
- write: (dv, o, v) => dv.setFloat64(o, v, true),
304
- read: (dv, o) => dv.getFloat64(o, true),
305
- toNil: () => 0,
306
- };
307
-
308
- /** Unsigned 16-bit integer (little-endian) */
309
- static readonly u16_le: Field<number> = {
310
- size: 2,
311
- write: (dv, o, v) => dv.setUint16(o, v, true),
312
- read: (dv, o) => dv.getUint16(o, true),
313
- toNil: () => 0,
314
- };
315
-
316
- /** Unsigned 32-bit integer (little-endian) */
317
- static readonly u32_le: Field<number> = {
318
- size: 4,
319
- write: (dv, o, v) => dv.setUint32(o, v, true),
320
- read: (dv, o) => dv.getUint32(o, true),
321
- toNil: () => 0,
322
- };
323
-
324
- /** Signed 16-bit integer (little-endian) */
325
- static readonly i16_le: Field<number> = {
326
- size: 2,
327
- write: (dv, o, v) => dv.setInt16(o, v, true),
328
- read: (dv, o) => dv.getInt16(o, true),
329
- toNil: () => 0,
330
- };
331
-
332
- /** Signed 32-bit integer (little-endian) */
333
- static readonly i32_le: Field<number> = {
334
- size: 4,
335
- write: (dv, o, v) => dv.setInt32(o, v, true),
336
- read: (dv, o) => dv.getInt32(o, true),
337
- toNil: () => 0,
338
- };
339
-
340
- /**
341
- * 2D vector of f32 stored as a tuple [x, y] (little-endian).
342
- * Useful for compact math data or shader-friendly layouts.
343
- */
344
- static readonly vec2_le: Field<[number, number]> = {
345
- size: 8,
346
- write: (dv, o, v) => {
347
- dv.setFloat32(o, v[0], true);
348
- dv.setFloat32(o + 4, v[1], true);
349
- },
350
- read: (dv, o) => [
351
- dv.getFloat32(o, true),
352
- dv.getFloat32(o + 4, true),
353
- ],
354
- toNil: () => [0, 0],
355
- };
356
-
357
- /**
358
- * 3D vector of f32 stored as a tuple [x, y, z] (little-endian).
359
- * Commonly used for positions, velocities, or directions.
360
- */
361
- static readonly vec3_le: Field<[number, number, number]> = {
362
- size: 12,
363
- write: (dv, o, v) => {
364
- dv.setFloat32(o, v[0], true);
365
- dv.setFloat32(o + 4, v[1], true);
366
- dv.setFloat32(o + 8, v[2], true);
367
- },
368
- read: (dv, o) => [
369
- dv.getFloat32(o, true),
370
- dv.getFloat32(o + 4, true),
371
- dv.getFloat32(o + 8, true),
372
- ],
373
- toNil: () => [0, 0, 0],
374
- };
375
-
376
- /**
377
- * 4D vector of f32 stored as a tuple [x, y, z, w] (little-endian).
378
- * Useful for quaternions, colors in shaders, or homogeneous coordinates.
379
- */
380
- static readonly vec4_le: Field<[number, number, number, number]> = {
381
- size: 16,
382
- write: (dv, o, v) => {
383
- dv.setFloat32(o, v[0], true);
384
- dv.setFloat32(o + 4, v[1], true);
385
- dv.setFloat32(o + 8, v[2], true);
386
- dv.setFloat32(o + 12, v[3], true);
387
- },
388
- read: (dv, o) => [
389
- dv.getFloat32(o, true),
390
- dv.getFloat32(o + 4, true),
391
- dv.getFloat32(o + 8, true),
392
- dv.getFloat32(o + 12, true),
393
- ],
394
- toNil: () => [0, 0, 0, 0],
395
- };
396
- }
397
-
398
- /**
399
- * Public codec API.
400
- * Re-exports primitives and exposes encode/decode helpers.
401
- */
402
- export class BinaryCodec extends BaseBinaryCodec {
403
- /** Unsigned 8-bit integer field */
404
- static readonly u8 = BinaryPrimitives.u8;
405
- /** Unsigned 16-bit integer field */
406
- static readonly u16 = BinaryPrimitives.u16;
407
- /** Unsigned 32-bit integer field */
408
- static readonly u32 = BinaryPrimitives.u32;
409
- /** Signed 8-bit integer field */
410
- static readonly i8 = BinaryPrimitives.i8;
411
- /** Signed 16-bit integer field */
412
- static readonly i16 = BinaryPrimitives.i16;
413
- /** Signed 32-bit integer field */
414
- static readonly i32 = BinaryPrimitives.i32;
415
- /** 32-bit floating point field */
416
- static readonly f32 = BinaryPrimitives.f32;
417
- /** Boolean field */
418
- static readonly bool = BinaryPrimitives.bool;
419
- /** String field with length prefix */
420
- static string = BinaryPrimitives.string;
421
- /** 2D vector field */
422
- static readonly vec2 = BinaryPrimitives.vec2;
423
- /** 3D vector field */
424
- static readonly vec3 = BinaryPrimitives.vec3;
425
- /** RGBA color field */
426
- static readonly color = BinaryPrimitives.color;
427
-
428
- /**
429
- * Encodes an object into a binary buffer.
430
- */
431
- static encode<T extends object>(
432
- schema: Schema<T>,
433
- data: T
434
- ): Uint8Array {
435
- return this.encodeInto(schema, data);
436
- }
437
-
438
- /**
439
- * Decodes a binary buffer into an existing object.
440
- */
441
- static decode<T extends object>(
442
- schema: Schema<T>,
443
- buf: Uint8Array,
444
- target: T
445
- ): T {
446
- return this.decodeInto(schema, buf, target);
447
- }
448
- }
@@ -1 +0,0 @@
1
- export * from './binary-codec';
@@ -1,97 +0,0 @@
1
- # Driver
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`)