murow 0.0.70 → 0.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +54 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base/renderer-2d.js +1 -0
  74. package/dist/cjs/renderer/base/renderer-3d.js +1 -0
  75. package/dist/cjs/renderer/base/renderer.js +1 -0
  76. package/dist/cjs/renderer/gltf/helpers.js +1 -0
  77. package/dist/cjs/renderer/gltf/parser.js +1 -0
  78. package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
  79. package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
  80. package/dist/cjs/renderer/index.js +1 -0
  81. package/dist/cjs/renderer/math.js +1 -0
  82. package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
  83. package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
  84. package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
  85. package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
  86. package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
  87. package/dist/cjs/renderer/spritesheet/parser.js +1 -0
  88. package/dist/cjs/renderer/types.js +1 -0
  89. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  90. package/dist/esm/core/binary-codec/index.js +1 -0
  91. package/dist/esm/core/driver/driver.js +1 -0
  92. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  93. package/dist/esm/core/driver/drivers/index.js +1 -0
  94. package/dist/esm/core/driver/drivers/raf.js +1 -0
  95. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  96. package/dist/esm/core/driver/index.js +1 -0
  97. package/dist/esm/core/events/event-system.js +1 -0
  98. package/dist/esm/core/events/index.js +1 -0
  99. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  100. package/dist/esm/core/fixed-ticker/index.js +1 -0
  101. package/dist/esm/core/free-list/free-list.js +1 -0
  102. package/dist/esm/core/free-list/index.js +1 -0
  103. package/dist/esm/core/generate-id/generate-id.js +1 -0
  104. package/dist/esm/core/generate-id/index.js +1 -0
  105. package/dist/esm/core/index.js +1 -0
  106. package/dist/esm/core/input/index.js +1 -0
  107. package/dist/esm/core/input/manager.js +1 -0
  108. package/dist/esm/core/input/sources/browser.js +1 -0
  109. package/dist/esm/core/input/sources/index.js +1 -0
  110. package/dist/esm/core/input/types.js +0 -0
  111. package/dist/esm/core/lerp/index.js +1 -0
  112. package/dist/esm/core/lerp/lerp.js +1 -0
  113. package/dist/esm/core/navmesh/index.js +1 -0
  114. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  115. package/dist/esm/core/navmesh/navmesh.js +1 -0
  116. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  117. package/dist/esm/core/pooled-codec/index.js +1 -0
  118. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  119. package/dist/esm/core/prediction/index.js +1 -0
  120. package/dist/esm/core/prediction/prediction.js +1 -0
  121. package/dist/esm/core/ray/index.js +1 -0
  122. package/dist/esm/core/ray/ray-2d.js +1 -0
  123. package/dist/esm/core/ray/ray-3d.js +1 -0
  124. package/dist/esm/core/simple-rng/index.js +1 -0
  125. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  126. package/dist/esm/core/sparse-batcher/index.js +1 -0
  127. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  128. package/dist/esm/ecs/component-store.js +1 -0
  129. package/dist/esm/ecs/component.js +1 -0
  130. package/dist/esm/ecs/entity-handle.js +1 -0
  131. package/dist/esm/ecs/index.js +1 -0
  132. package/dist/esm/ecs/system-builder.js +1 -0
  133. package/dist/esm/ecs/world-systems.js +1 -0
  134. package/dist/esm/ecs/world.js +1 -0
  135. package/dist/esm/game/index.js +1 -0
  136. package/dist/esm/game/loop/index.js +1 -0
  137. package/dist/esm/game/loop/loop.js +1 -0
  138. package/dist/esm/index.js +1 -0
  139. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  140. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  141. package/dist/esm/net/buffer-pool.js +1 -0
  142. package/dist/esm/net/client.js +1 -0
  143. package/dist/esm/net/index.js +1 -0
  144. package/dist/esm/net/server.js +1 -0
  145. package/dist/esm/net/types.js +1 -0
  146. package/dist/esm/net/validators.js +1 -0
  147. package/dist/esm/protocol/index.js +1 -0
  148. package/dist/esm/protocol/intent/define-intent.js +1 -0
  149. package/dist/esm/protocol/intent/index.js +1 -0
  150. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  151. package/dist/esm/protocol/intent/intent.js +0 -0
  152. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  153. package/dist/esm/protocol/rpc/index.js +1 -0
  154. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  155. package/dist/esm/protocol/rpc/rpc.js +0 -0
  156. package/dist/esm/protocol/snapshot/index.js +1 -0
  157. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  158. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  159. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  160. package/dist/esm/renderer/base/renderer-2d.js +1 -0
  161. package/dist/esm/renderer/base/renderer-3d.js +1 -0
  162. package/dist/esm/renderer/base/renderer.js +1 -0
  163. package/dist/esm/renderer/gltf/helpers.js +1 -0
  164. package/dist/esm/renderer/gltf/parser.js +1 -0
  165. package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
  166. package/dist/esm/renderer/gltf/skin-parser.js +1 -0
  167. package/dist/esm/renderer/index.js +1 -0
  168. package/dist/esm/renderer/math.js +1 -0
  169. package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
  170. package/dist/esm/renderer/prefab-bucket/index.js +1 -0
  171. package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
  172. package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
  173. package/dist/esm/renderer/spritesheet/helpers.js +1 -0
  174. package/dist/esm/renderer/spritesheet/parser.js +1 -0
  175. package/dist/esm/renderer/types.js +0 -0
  176. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  177. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  178. package/dist/types/core/free-list/free-list.d.ts +31 -0
  179. package/dist/types/core/free-list/index.d.ts +1 -0
  180. package/dist/{core → types/core}/index.d.ts +5 -0
  181. package/dist/{core → types/core}/input/index.d.ts +1 -0
  182. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  183. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  184. package/dist/types/core/ray/index.d.ts +2 -0
  185. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  186. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  187. package/dist/types/core/simple-rng/index.d.ts +1 -0
  188. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  189. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  190. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  191. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  192. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  193. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  194. package/dist/{net → types/net}/index.d.ts +2 -2
  195. package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
  196. package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
  197. package/dist/types/renderer/base/renderer.d.ts +21 -0
  198. package/dist/types/renderer/gltf/helpers.d.ts +43 -0
  199. package/dist/types/renderer/gltf/parser.d.ts +49 -0
  200. package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
  201. package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
  202. package/dist/types/renderer/index.d.ts +15 -0
  203. package/dist/types/renderer/math.d.ts +37 -0
  204. package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
  205. package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
  206. package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
  207. package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
  208. package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
  209. package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
  210. package/dist/types/renderer/types.d.ts +89 -0
  211. package/dist/webgpu/cjs/index.js +5401 -0
  212. package/dist/webgpu/esm/index.js +5378 -0
  213. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  214. package/dist/webgpu/types/2d/renderer.d.ts +86 -0
  215. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  216. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  217. package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
  218. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  219. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  220. package/dist/webgpu/types/3d/renderer.d.ts +266 -0
  221. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  222. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  223. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
  224. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  225. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  226. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  227. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  228. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  229. package/dist/webgpu/types/camera/index.d.ts +2 -0
  230. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  231. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  232. package/dist/webgpu/types/core/constants.d.ts +59 -0
  233. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  234. package/dist/webgpu/types/core/index.d.ts +2 -0
  235. package/dist/webgpu/types/core/types.d.ts +125 -0
  236. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  237. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  238. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  239. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  240. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  241. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  242. package/dist/webgpu/types/index.d.ts +35 -0
  243. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  244. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  245. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  246. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  247. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  248. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  249. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  250. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  251. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
  252. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  253. package/package.json +96 -26
  254. package/dist/core/binary-codec/binary-codec.js +0 -354
  255. package/dist/core/binary-codec/index.js +0 -1
  256. package/dist/core/driver/driver.js +0 -47
  257. package/dist/core/driver/drivers/immediate.js +0 -61
  258. package/dist/core/driver/drivers/index.js +0 -3
  259. package/dist/core/driver/drivers/raf.js +0 -62
  260. package/dist/core/driver/drivers/timeout.js +0 -71
  261. package/dist/core/driver/index.js +0 -2
  262. package/dist/core/events/event-system.js +0 -88
  263. package/dist/core/events/index.js +0 -1
  264. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  265. package/dist/core/fixed-ticker/index.js +0 -1
  266. package/dist/core/generate-id/generate-id.js +0 -25
  267. package/dist/core/generate-id/index.js +0 -1
  268. package/dist/core/index.js +0 -10
  269. package/dist/core/input/index.js +0 -2
  270. package/dist/core/input/manager.js +0 -211
  271. package/dist/core/input/sources/browser.js +0 -29
  272. package/dist/core/input/sources/index.js +0 -1
  273. package/dist/core/lerp/index.js +0 -1
  274. package/dist/core/lerp/lerp.js +0 -42
  275. package/dist/core/navmesh/index.js +0 -1
  276. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  277. package/dist/core/navmesh/navmesh.js +0 -799
  278. package/dist/core/navmesh/navmesh.worker.js +0 -79
  279. package/dist/core/pooled-codec/index.js +0 -1
  280. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  281. package/dist/core/prediction/index.js +0 -1
  282. package/dist/core/prediction/prediction.js +0 -99
  283. package/dist/core.esm.js +0 -1
  284. package/dist/core.js +0 -1
  285. package/dist/ecs/component-store.js +0 -175
  286. package/dist/ecs/component.js +0 -43
  287. package/dist/ecs/entity-handle.js +0 -515
  288. package/dist/ecs/example.js +0 -125
  289. package/dist/ecs/index.js +0 -4
  290. package/dist/ecs/system-builder.js +0 -249
  291. package/dist/ecs/world-systems.js +0 -79
  292. package/dist/ecs/world.js +0 -767
  293. package/dist/game/index.js +0 -1
  294. package/dist/game/loop/index.js +0 -1
  295. package/dist/game/loop/loop.js +0 -108
  296. package/dist/index.js +0 -26
  297. package/dist/net/adapters/browser-websocket.js +0 -74
  298. package/dist/net/adapters/bun-websocket.js +0 -245
  299. package/dist/net/buffer-pool.js +0 -89
  300. package/dist/net/client.js +0 -586
  301. package/dist/net/index.js +0 -58
  302. package/dist/net/server.js +0 -974
  303. package/dist/net/types.js +0 -31
  304. package/dist/net/validators.js +0 -88
  305. package/dist/protocol/index.js +0 -92
  306. package/dist/protocol/intent/define-intent.js +0 -125
  307. package/dist/protocol/intent/index.js +0 -91
  308. package/dist/protocol/intent/intent-registry.js +0 -91
  309. package/dist/protocol/rpc/define-rpc.js +0 -84
  310. package/dist/protocol/rpc/index.js +0 -3
  311. package/dist/protocol/rpc/rpc-registry.js +0 -159
  312. package/dist/protocol/rpc/rpc.js +0 -12
  313. package/dist/protocol/snapshot/index.js +0 -43
  314. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  315. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  316. package/dist/protocol/snapshot/snapshot.js +0 -30
  317. package/src/core/binary-codec/README.md +0 -60
  318. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  319. package/src/core/binary-codec/binary-codec.ts +0 -448
  320. package/src/core/binary-codec/index.ts +0 -1
  321. package/src/core/driver/README.md +0 -97
  322. package/src/core/driver/driver.test.ts +0 -414
  323. package/src/core/driver/driver.ts +0 -71
  324. package/src/core/driver/drivers/immediate.ts +0 -66
  325. package/src/core/driver/drivers/index.ts +0 -3
  326. package/src/core/driver/drivers/raf.ts +0 -67
  327. package/src/core/driver/drivers/timeout.ts +0 -77
  328. package/src/core/driver/index.ts +0 -2
  329. package/src/core/events/README.md +0 -47
  330. package/src/core/events/event-system.test.ts +0 -243
  331. package/src/core/events/event-system.ts +0 -140
  332. package/src/core/events/index.ts +0 -1
  333. package/src/core/fixed-ticker/README.md +0 -77
  334. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  335. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  336. package/src/core/fixed-ticker/index.ts +0 -1
  337. package/src/core/generate-id/README.md +0 -18
  338. package/src/core/generate-id/generate-id.test.ts +0 -79
  339. package/src/core/generate-id/generate-id.ts +0 -37
  340. package/src/core/generate-id/index.ts +0 -1
  341. package/src/core/index.ts +0 -10
  342. package/src/core/input/README.md +0 -24
  343. package/src/core/input/index.ts +0 -2
  344. package/src/core/input/manager.ts +0 -259
  345. package/src/core/input/sources/browser.ts +0 -39
  346. package/src/core/input/sources/index.ts +0 -1
  347. package/src/core/input/types.ts +0 -40
  348. package/src/core/lerp/README.md +0 -79
  349. package/src/core/lerp/index.ts +0 -1
  350. package/src/core/lerp/lerp.test.ts +0 -90
  351. package/src/core/lerp/lerp.ts +0 -42
  352. package/src/core/navmesh/README.md +0 -164
  353. package/src/core/navmesh/index.ts +0 -1
  354. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  355. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  356. package/src/core/navmesh/navmesh.test.ts +0 -344
  357. package/src/core/navmesh/navmesh.ts +0 -1047
  358. package/src/core/navmesh/navmesh.worker.ts +0 -147
  359. package/src/core/pooled-codec/README.md +0 -70
  360. package/src/core/pooled-codec/index.ts +0 -1
  361. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  362. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  363. package/src/core/prediction/README.md +0 -64
  364. package/src/core/prediction/index.ts +0 -1
  365. package/src/core/prediction/prediction.test.ts +0 -423
  366. package/src/core/prediction/prediction.ts +0 -112
  367. package/src/ecs/README.md +0 -427
  368. package/src/ecs/benchmark.test.ts +0 -1645
  369. package/src/ecs/component-store.ts +0 -198
  370. package/src/ecs/component.ts +0 -90
  371. package/src/ecs/entity-handle.test.ts +0 -393
  372. package/src/ecs/entity-handle.ts +0 -563
  373. package/src/ecs/example.ts +0 -152
  374. package/src/ecs/index.ts +0 -4
  375. package/src/ecs/system-builder.ts +0 -404
  376. package/src/ecs/world-systems.ts +0 -83
  377. package/src/ecs/world.test.ts +0 -310
  378. package/src/ecs/world.ts +0 -904
  379. package/src/game/index.ts +0 -1
  380. package/src/game/loop/README.md +0 -32
  381. package/src/game/loop/index.ts +0 -1
  382. package/src/game/loop/loop.ts +0 -236
  383. package/src/index.ts +0 -32
  384. package/src/net/README.md +0 -474
  385. package/src/net/adapters/browser-websocket.ts +0 -86
  386. package/src/net/adapters/bun-websocket.ts +0 -292
  387. package/src/net/buffer-pool.ts +0 -106
  388. package/src/net/client.test.ts +0 -807
  389. package/src/net/client.ts +0 -695
  390. package/src/net/index.ts +0 -60
  391. package/src/net/server.test.ts +0 -799
  392. package/src/net/server.ts +0 -1152
  393. package/src/net/types.ts +0 -228
  394. package/src/net/validators.ts +0 -104
  395. package/src/protocol/README.md +0 -469
  396. package/src/protocol/index.ts +0 -93
  397. package/src/protocol/intent/define-intent.test.ts +0 -397
  398. package/src/protocol/intent/define-intent.ts +0 -201
  399. package/src/protocol/intent/index.ts +0 -94
  400. package/src/protocol/intent/intent-registry.test.ts +0 -198
  401. package/src/protocol/intent/intent-registry.ts +0 -112
  402. package/src/protocol/intent/intent.ts +0 -12
  403. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  404. package/src/protocol/rpc/define-rpc.ts +0 -113
  405. package/src/protocol/rpc/index.ts +0 -3
  406. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  407. package/src/protocol/rpc/rpc-registry.ts +0 -176
  408. package/src/protocol/rpc/rpc.ts +0 -37
  409. package/src/protocol/snapshot/index.ts +0 -45
  410. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  411. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  412. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  413. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  414. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  415. package/src/protocol/snapshot/snapshot.ts +0 -41
  416. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  417. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  418. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  419. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  420. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  421. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  422. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  423. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  424. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  425. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  426. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  427. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  428. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  429. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  430. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  431. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  432. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  433. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  434. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  435. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  436. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  437. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  438. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  439. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  440. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  441. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  442. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  443. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  444. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  445. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  446. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  447. /package/dist/{game → types/game}/index.d.ts +0 -0
  448. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  449. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  450. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  451. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  452. /package/dist/{net → types/net}/client.d.ts +0 -0
  453. /package/dist/{net → types/net}/server.d.ts +0 -0
  454. /package/dist/{net → types/net}/types.d.ts +0 -0
  455. /package/dist/{net → types/net}/validators.d.ts +0 -0
  456. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  457. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  458. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  459. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  460. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  461. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  462. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  463. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  464. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  465. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  466. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  467. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  468. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  469. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  470. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,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`)