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,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';