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,414 +0,0 @@
1
- import { describe, expect, test, beforeEach, afterEach } from "bun:test";
2
- import { RafDriver, ImmediateDriver, TimeoutDriver } from "./drivers";
3
- import { createDriver } from "./driver";
4
-
5
- // Mock requestAnimationFrame for testing (Node.js doesn't have it)
6
- (() => {
7
- let rafId = 0;
8
- const callbacks = new Map<number, FrameRequestCallback>();
9
- let running = false;
10
- let intervalId: Timer | null = null;
11
-
12
- (globalThis as any).requestAnimationFrame = (callback: FrameRequestCallback): number => {
13
- const id = ++rafId;
14
- callbacks.set(id, callback);
15
-
16
- if (!running) {
17
- running = true;
18
- intervalId = setInterval(() => {
19
- const now = performance.now();
20
- const cbs = Array.from(callbacks.entries());
21
- callbacks.clear();
22
- for (const [_, cb] of cbs) {
23
- cb(now);
24
- }
25
- if (callbacks.size === 0) {
26
- running = false;
27
- if (intervalId) clearInterval(intervalId);
28
- }
29
- }, 16); // ~60fps
30
- }
31
-
32
- return id;
33
- };
34
-
35
- (globalThis as any).cancelAnimationFrame = (id: number): void => {
36
- callbacks.delete(id);
37
- if (callbacks.size === 0) {
38
- running = false;
39
- if (intervalId) clearInterval(intervalId);
40
- }
41
- };
42
- })();
43
-
44
- describe("Driver", () => {
45
- describe("createDriver", () => {
46
- test("should create RafDriver for client type", () => {
47
- const driver = createDriver('client', () => {});
48
- expect(driver).toBeInstanceOf(RafDriver);
49
- });
50
-
51
- test("should create ImmediateDriver for server-immediate type", () => {
52
- const driver = createDriver('server-immediate', () => {});
53
- expect(driver).toBeInstanceOf(ImmediateDriver);
54
- });
55
-
56
- test("should create TimeoutDriver for server-timeout type", () => {
57
- const driver = createDriver('server-timeout', () => {});
58
- expect(driver).toBeInstanceOf(TimeoutDriver);
59
- });
60
-
61
- test("should pass update callback to driver", () => {
62
- let called = false;
63
- const update = () => { called = true; };
64
- const driver = createDriver('server-immediate', update);
65
-
66
- // Access the update function directly
67
- (driver as ImmediateDriver).update(0.016);
68
- expect(called).toBe(true);
69
- });
70
- });
71
-
72
- describe("ImmediateDriver", () => {
73
- let driver: ImmediateDriver;
74
- let updateCalls: number[] = [];
75
-
76
- beforeEach(() => {
77
- updateCalls = [];
78
- driver = new ImmediateDriver((dt) => {
79
- updateCalls.push(dt);
80
- });
81
- });
82
-
83
- afterEach(() => {
84
- driver.stop();
85
- });
86
-
87
- test("should initialize without starting", () => {
88
- expect(updateCalls.length).toBe(0);
89
- });
90
-
91
- test("should call update with delta time", async () => {
92
- driver.start();
93
-
94
- // Wait for a few ticks
95
- await new Promise(resolve => setTimeout(resolve, 50));
96
- driver.stop();
97
-
98
- expect(updateCalls.length).toBeGreaterThan(0);
99
-
100
- // Delta times should be positive and in seconds
101
- for (const dt of updateCalls) {
102
- expect(dt).toBeGreaterThan(0);
103
- expect(dt).toBeLessThan(1); // Should be less than 1 second
104
- }
105
- });
106
-
107
- test("should stop calling update after stop", async () => {
108
- driver.start();
109
- await new Promise(resolve => setTimeout(resolve, 20));
110
- driver.stop();
111
-
112
- const callsAfterStop = updateCalls.length;
113
-
114
- // Wait a bit more
115
- await new Promise(resolve => setTimeout(resolve, 20));
116
-
117
- // Should not have significantly more calls (allow 1-2 in-flight)
118
- expect(updateCalls.length - callsAfterStop).toBeLessThanOrEqual(2);
119
- });
120
-
121
- test("should calculate delta time correctly", async () => {
122
- driver.start();
123
-
124
- await new Promise(resolve => setTimeout(resolve, 50));
125
- driver.stop();
126
-
127
- // Sum of all deltas should approximately equal wall time
128
- const totalTime = updateCalls.reduce((sum, dt) => sum + dt, 0);
129
- expect(totalTime).toBeGreaterThan(0.04); // At least 40ms
130
- expect(totalTime).toBeLessThan(0.1); // Less than 100ms
131
- });
132
-
133
- test("should handle restart", async () => {
134
- driver.start();
135
- await new Promise(resolve => setTimeout(resolve, 20));
136
- driver.stop();
137
-
138
- const firstBatch = updateCalls.length;
139
- updateCalls = [];
140
-
141
- driver.start();
142
- await new Promise(resolve => setTimeout(resolve, 20));
143
- driver.stop();
144
-
145
- expect(updateCalls.length).toBeGreaterThan(0);
146
- });
147
- });
148
-
149
- describe("RafDriver", () => {
150
- let driver: RafDriver;
151
- let updateCalls: number[] = [];
152
-
153
- beforeEach(() => {
154
- updateCalls = [];
155
- driver = new RafDriver((dt) => {
156
- updateCalls.push(dt);
157
- });
158
- });
159
-
160
- afterEach(() => {
161
- driver.stop();
162
- });
163
-
164
- test("should initialize without starting", () => {
165
- expect(updateCalls.length).toBe(0);
166
- });
167
-
168
- test("should call update with delta time", async () => {
169
- driver.start();
170
-
171
- // Wait for a few frames (at 60fps, 100ms = ~6 frames)
172
- await new Promise(resolve => setTimeout(resolve, 100));
173
- driver.stop();
174
-
175
- expect(updateCalls.length).toBeGreaterThan(0);
176
-
177
- // Delta times should be positive and reasonable for 60fps
178
- for (const dt of updateCalls) {
179
- expect(dt).toBeGreaterThan(0);
180
- expect(dt).toBeLessThan(0.1); // Less than 100ms per frame
181
- }
182
- });
183
-
184
- test("should stop calling update after stop", async () => {
185
- driver.start();
186
- await new Promise(resolve => setTimeout(resolve, 50));
187
- driver.stop();
188
-
189
- const callsAfterStop = updateCalls.length;
190
-
191
- // Wait for potential in-flight RAF
192
- await new Promise(resolve => setTimeout(resolve, 50));
193
-
194
- // Should not have any more calls (RAF properly cancelled)
195
- expect(updateCalls.length).toBe(callsAfterStop);
196
- });
197
-
198
- test("should calculate delta time correctly", async () => {
199
- driver.start();
200
-
201
- await new Promise(resolve => setTimeout(resolve, 100));
202
- driver.stop();
203
-
204
- // Sum of all deltas should approximately equal wall time
205
- const totalTime = updateCalls.reduce((sum, dt) => sum + dt, 0);
206
- expect(totalTime).toBeGreaterThan(0.08); // At least 80ms
207
- expect(totalTime).toBeLessThan(0.15); // Less than 150ms
208
- });
209
-
210
- test("should handle restart", async () => {
211
- driver.start();
212
- await new Promise(resolve => setTimeout(resolve, 50));
213
- driver.stop();
214
-
215
- const firstBatch = updateCalls.length;
216
- updateCalls = [];
217
-
218
- driver.start();
219
- await new Promise(resolve => setTimeout(resolve, 50));
220
- driver.stop();
221
-
222
- expect(updateCalls.length).toBeGreaterThan(0);
223
- });
224
-
225
- test("should cancel RAF on stop", async () => {
226
- driver.start();
227
- await new Promise(resolve => setTimeout(resolve, 50));
228
-
229
- // Stop should cancel the RAF
230
- driver.stop();
231
-
232
- // rafId should be cleared
233
- expect((driver as any).rafId).toBe(null);
234
- });
235
- });
236
-
237
- describe("TimeoutDriver", () => {
238
- let driver: TimeoutDriver;
239
- let updateCalls: number[] = [];
240
-
241
- beforeEach(() => {
242
- updateCalls = [];
243
- driver = new TimeoutDriver((dt) => {
244
- updateCalls.push(dt);
245
- });
246
- });
247
-
248
- afterEach(() => {
249
- driver.stop();
250
- });
251
-
252
- test("should initialize without starting", () => {
253
- expect(updateCalls.length).toBe(0);
254
- });
255
-
256
- test("should call update with delta time", async () => {
257
- driver.start();
258
-
259
- // Wait for a few ticks
260
- await new Promise(resolve => setTimeout(resolve, 50));
261
- driver.stop();
262
-
263
- expect(updateCalls.length).toBeGreaterThan(0);
264
-
265
- // Delta times should be positive and in seconds
266
- for (const dt of updateCalls) {
267
- expect(dt).toBeGreaterThan(0);
268
- expect(dt).toBeLessThan(1); // Should be less than 1 second
269
- }
270
- });
271
-
272
- test("should stop calling update after stop", async () => {
273
- driver.start();
274
- await new Promise(resolve => setTimeout(resolve, 20));
275
- driver.stop();
276
-
277
- const callsAfterStop = updateCalls.length;
278
-
279
- // Wait a bit more
280
- await new Promise(resolve => setTimeout(resolve, 20));
281
-
282
- // Should not have significantly more calls (allow 1-2 in-flight)
283
- expect(updateCalls.length - callsAfterStop).toBeLessThanOrEqual(2);
284
- });
285
-
286
- test("should calculate delta time correctly", async () => {
287
- driver.start();
288
-
289
- await new Promise(resolve => setTimeout(resolve, 50));
290
- driver.stop();
291
-
292
- // Sum of all deltas should approximately equal wall time
293
- const totalTime = updateCalls.reduce((sum, dt) => sum + dt, 0);
294
- expect(totalTime).toBeGreaterThan(0.04); // At least 40ms
295
- expect(totalTime).toBeLessThan(0.1); // Less than 100ms
296
- });
297
-
298
- test("should handle restart", async () => {
299
- driver.start();
300
- await new Promise(resolve => setTimeout(resolve, 20));
301
- driver.stop();
302
-
303
- const firstBatch = updateCalls.length;
304
- updateCalls = [];
305
-
306
- driver.start();
307
- await new Promise(resolve => setTimeout(resolve, 20));
308
- driver.stop();
309
-
310
- expect(updateCalls.length).toBeGreaterThan(0);
311
- });
312
-
313
- test("should run slower than ImmediateDriver due to 1ms delay", async () => {
314
- let timeoutTicks = 0;
315
- let immediateTicks = 0;
316
-
317
- const timeoutDriver = new TimeoutDriver(() => { timeoutTicks++; });
318
- const immediateDriver = new ImmediateDriver(() => { immediateTicks++; });
319
-
320
- timeoutDriver.start();
321
- immediateDriver.start();
322
-
323
- await new Promise(resolve => setTimeout(resolve, 100));
324
-
325
- timeoutDriver.stop();
326
- immediateDriver.stop();
327
-
328
- // ImmediateDriver should tick significantly more than TimeoutDriver
329
- expect(immediateTicks).toBeGreaterThan(timeoutTicks);
330
- });
331
- });
332
-
333
- describe("Driver comparison", () => {
334
- test("ImmediateDriver should run faster than RAF", async () => {
335
- let immediateTicks = 0;
336
- let rafTicks = 0;
337
-
338
- const immediateDriver = new ImmediateDriver(() => { immediateTicks++; });
339
- const rafDriver = new RafDriver(() => { rafTicks++; });
340
-
341
- immediateDriver.start();
342
- rafDriver.start();
343
-
344
- await new Promise(resolve => setTimeout(resolve, 100));
345
-
346
- immediateDriver.stop();
347
- rafDriver.stop();
348
-
349
- // setImmediate should tick way more than RAF (~60fps)
350
- expect(immediateTicks).toBeGreaterThan(rafTicks * 2);
351
- });
352
-
353
- test("TimeoutDriver should run faster than RAF but slower than Immediate", async () => {
354
- let timeoutTicks = 0;
355
- let rafTicks = 0;
356
- let immediateTicks = 0;
357
-
358
- const timeoutDriver = new TimeoutDriver(() => { timeoutTicks++; });
359
- const rafDriver = new RafDriver(() => { rafTicks++; });
360
- const immediateDriver = new ImmediateDriver(() => { immediateTicks++; });
361
-
362
- timeoutDriver.start();
363
- rafDriver.start();
364
- immediateDriver.start();
365
-
366
- await new Promise(resolve => setTimeout(resolve, 100));
367
-
368
- timeoutDriver.stop();
369
- rafDriver.stop();
370
- immediateDriver.stop();
371
-
372
- // TimeoutDriver should be between RAF and Immediate
373
- expect(timeoutTicks).toBeGreaterThan(rafTicks);
374
- expect(immediateTicks).toBeGreaterThan(timeoutTicks);
375
- });
376
- });
377
-
378
- describe("Edge cases", () => {
379
- test("should handle multiple stops gracefully", () => {
380
- const driver = new ImmediateDriver(() => {});
381
- driver.start();
382
- driver.stop();
383
- driver.stop(); // Should not throw
384
- driver.stop(); // Should not throw
385
- });
386
-
387
- test("should handle stop before start", () => {
388
- const driver = new RafDriver(() => {});
389
- driver.stop(); // Should not throw
390
- });
391
-
392
- test("should reset timing on restart to prevent large delta", async () => {
393
- let firstDelta = 0;
394
- const driver = new ImmediateDriver((dt) => {
395
- if (firstDelta === 0) firstDelta = dt;
396
- });
397
-
398
- driver.start();
399
- await new Promise(resolve => setTimeout(resolve, 10));
400
- driver.stop();
401
-
402
- // Wait a bit
403
- await new Promise(resolve => setTimeout(resolve, 100));
404
-
405
- firstDelta = 0;
406
- driver.start();
407
- await new Promise(resolve => setTimeout(resolve, 10));
408
- driver.stop();
409
-
410
- // First delta after restart should be small, not 100ms+
411
- expect(firstDelta).toBeLessThan(0.05);
412
- });
413
- });
414
- });
@@ -1,71 +0,0 @@
1
- import { ImmediateDriver, RafDriver, TimeoutDriver } from "./drivers";
2
-
3
- // Re-export driver classes for testing and direct usage
4
- export { ImmediateDriver, RafDriver, TimeoutDriver };
5
-
6
- /**
7
- * Interface for game loop drivers that handle frame updates.
8
- * Drivers are responsible for scheduling and executing the game loop
9
- * at the appropriate rate for their environment (client or server).
10
- */
11
- export interface LoopDriver {
12
- /** Starts the game loop */
13
- start(): void;
14
- /** Stops the game loop */
15
- stop(): void;
16
- /** Internal loop iteration method */
17
- loop(): void;
18
- /** Update callback invoked each frame with delta time in seconds */
19
- update(dt: number): void;
20
- }
21
-
22
- /**
23
- * Type of driver to use for the game loop.
24
- * - `'client'`: Uses requestAnimationFrame for browser environments (syncs with display refresh rate)
25
- * - `'server-immediate'`: Uses setImmediate for Node.js environments (runs as fast as possible, maximum performance)
26
- * - `'server-timeout'`: Uses setTimeout with 1ms delay for Node.js environments (balanced performance with better I/O responsiveness)
27
- */
28
- export type DriverType = 'server-immediate' | 'client' | 'server-timeout';
29
-
30
- /**
31
- * Factory function to create a loop driver for the specified environment.
32
- *
33
- * @param type - The environment type
34
- * - `'client'`: Browser RAF driver (60 FPS, syncs with display)
35
- * - `'server'`: Node.js setImmediate driver (maximum performance)
36
- * - `'server-timeout'`: Node.js setTimeout driver (balanced with I/O)
37
- * @param update - Callback function invoked each frame with delta time in seconds
38
- * @returns A configured LoopDriver instance ready to start
39
- *
40
- * @example
41
- * ```typescript
42
- * // Client
43
- * const clientDriver = createDriver('client', (dt) => {
44
- * game.update(dt);
45
- * renderer.render();
46
- * });
47
- * clientDriver.start();
48
- *
49
- * // Server (maximum performance)
50
- * const serverDriver = createDriver('server', (dt) => {
51
- * simulation.tick(dt);
52
- * });
53
- * serverDriver.start();
54
- *
55
- * // Server (balanced with I/O)
56
- * const balancedDriver = createDriver('server-timeout', (dt) => {
57
- * simulation.tick(dt);
58
- * handleNetworkIO();
59
- * });
60
- * balancedDriver.start();
61
- * ```
62
- */
63
- export function createDriver(type: DriverType, update: (dt: number) => void) {
64
- if (type === 'server-immediate') {
65
- return new ImmediateDriver(update);
66
- } else if (type === 'server-timeout') {
67
- return new TimeoutDriver(update);
68
- } else {
69
- return new RafDriver(update);
70
- }
71
- }
@@ -1,66 +0,0 @@
1
- import { LoopDriver } from "../driver";
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
- }
@@ -1,3 +0,0 @@
1
- export * from "./immediate";
2
- export * from "./raf";
3
- export * from "./timeout";
@@ -1,67 +0,0 @@
1
- import { LoopDriver } from "../driver";
2
-
3
- /**
4
- * Client-side game loop driver using requestAnimationFrame.
5
- *
6
- * This driver synchronizes updates with the browser's display refresh rate (typically 60 FPS),
7
- * providing smooth rendering and automatic throttling when the tab is not visible.
8
- *
9
- * Delta time is automatically calculated between frames and passed to the update callback in seconds.
10
- *
11
- * @example
12
- * ```typescript
13
- * const driver = new RafDriver((dt) => {
14
- * player.update(dt);
15
- * renderer.render();
16
- * });
17
- * driver.start();
18
- * ```
19
- */
20
- export class RafDriver implements LoopDriver {
21
- /**
22
- * @param update - Callback invoked each frame with delta time in seconds
23
- */
24
- constructor(public update: (dt: number) => void) { }
25
-
26
- private last = performance.now();
27
- private running = false;
28
- private rafId: number | null = null;
29
-
30
- /**
31
- * Starts the game loop using requestAnimationFrame.
32
- *
33
- * Resets timing to prevent large initial delta.
34
- */
35
- start() {
36
- this.running = true;
37
- this.last = performance.now();
38
- this.rafId = requestAnimationFrame(this.loop);
39
- }
40
-
41
- /**
42
- * Stops the game loop and cancels any pending animation frame.
43
- */
44
- stop() {
45
- this.running = false;
46
- if (this.rafId !== null) {
47
- cancelAnimationFrame(this.rafId);
48
- this.rafId = null;
49
- }
50
- }
51
-
52
- /**
53
- * Internal loop method that calculates delta time and schedules the next frame.
54
- *
55
- * Delta time is provided in seconds.
56
- */
57
- loop = () => {
58
- if (!this.running) return;
59
-
60
- const now = performance.now();
61
- const dt = (now - this.last) / 1000;
62
- this.last = now;
63
-
64
- this.update(dt);
65
- requestAnimationFrame(this.loop);
66
- };
67
- }
@@ -1,77 +0,0 @@
1
- import { LoopDriver } from "../driver";
2
-
3
- /**
4
- * Minimal delay for setTimeout-based loop scheduling.
5
- * Using 1ms allows the event loop to process I/O while still maintaining high tick rates.
6
- */
7
- const TIMEOUT_DELAY = 1;
8
-
9
- /**
10
- * Server-side game loop driver using setTimeout.
11
- *
12
- * This driver provides a more controlled alternative to setImmediate, running the game loop
13
- * with a minimal delay (1ms) between iterations. This ensures the event loop can process
14
- * I/O operations while maintaining high tick rates.
15
- *
16
- * Unlike setImmediate which runs as fast as possible, setTimeout provides better I/O responsiveness
17
- * by yielding to the event loop between ticks with a minimal delay.
18
- *
19
- * Delta time is automatically calculated between iterations and passed to the update callback in seconds.
20
- *
21
- * **Note:** This driver is designed for Node.js/Bun server environments. For maximum performance
22
- * without I/O concerns, use ImmediateDriver instead.
23
- *
24
- * @example
25
- * ```typescript
26
- * const driver = new TimeoutDriver((dt) => {
27
- * world.tick(dt);
28
- * broadcastState();
29
- * });
30
- * driver.start();
31
- * ```
32
- */
33
- export class TimeoutDriver implements LoopDriver {
34
- /**
35
- * @param update - Callback invoked each tick with delta time in seconds
36
- */
37
- constructor(public update: (dt: number) => void) { }
38
-
39
- private last = performance.now();
40
- private running = false;
41
-
42
- /**
43
- * Starts the game loop using setTimeout with minimal delay.
44
- *
45
- * Resets timing to prevent large initial delta.
46
- */
47
- start() {
48
- this.running = true;
49
- this.last = performance.now();
50
- this.loop();
51
- }
52
-
53
- /**
54
- * Stops the game loop.
55
- *
56
- * Note: Does not cancel already queued setTimeout callbacks.
57
- */
58
- stop() {
59
- this.running = false;
60
- }
61
-
62
- /**
63
- * Internal loop method that calculates delta time and schedules the next iteration.
64
- *
65
- * Delta time is provided in seconds. Uses 1ms delay to allow I/O processing.
66
- */
67
- loop = () => {
68
- if (!this.running) return;
69
-
70
- const now = performance.now();
71
- const dt = (now - this.last) / 1000;
72
- this.last = now;
73
-
74
- this.update(dt);
75
- setTimeout(this.loop, TIMEOUT_DELAY);
76
- };
77
- }
@@ -1,2 +0,0 @@
1
- export * from './driver';
2
- export * from './drivers';