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,47 +0,0 @@
1
- # EventSystem
2
-
3
- `EventSystem` is a callback-based event handling system designed to simplify event-driven programming.
4
- It allows you to register, emit, and manage events with flexible callback support, making it easy to build modular and decoupled applications.
5
-
6
- ## Features
7
-
8
- - Register Callbacks: Attach functions to specific events using `on`.
9
- - One-Time Listeners: Use `once` to register callbacks that run only once.
10
- - Emit Events: Trigger events with optional data using `emit`.
11
- - Remove Callbacks: Detach specific callbacks with `off`.
12
- - Clear Events: Remove all callbacks globally or for specific events with `clear`.
13
-
14
- ## Why use this?
15
-
16
- Callbacks are often way faster than events, on both the browser and node, but they are also harder to manage. This system allows you to use callbacks in a more event-like way, and it is TypeScript-friendly, offering strong type safety for event names and payloads when using EventTuple definitions.
17
-
18
- ### Source
19
-
20
- Benchmarks:
21
-
22
- - https://jsbench.me/qmkkfcfpcw/2
23
- - https://hackernoon.com/nodejs-48x-faster-if-you-go-back-to-callbacks
24
-
25
- ## Usage
26
-
27
- ```ts
28
- import { EventSystem } from "...";
29
-
30
- interface FooProps {
31
- foo: string;
32
- }
33
-
34
- interface BarProps {
35
- bar: number;
36
- }
37
-
38
- const events = new EventSystem<[["foo", FooProps], ["bar", BarProps]]>({
39
- events: ["foo", "bar"],
40
- });
41
-
42
- events.on("bar", ({ bar }) => {
43
- console.log("bar event listened", bar);
44
- });
45
-
46
- events.emit("bar", { bar: 42 });
47
- ```
@@ -1,243 +0,0 @@
1
- import { describe, expect, test, spyOn } from "bun:test";
2
- import { EventSystem } from "./event-system";
3
-
4
- type TestEvents = [
5
- ["userJoined", { userId: string; name: string }],
6
- ["userLeft", { userId: string }],
7
- ["messageReceived", { from: string; message: string }],
8
- ["scoreUpdated", { playerId: string; score: number }]
9
- ];
10
-
11
- describe("EventSystem", () => {
12
- test("should initialize with provided events", () => {
13
- const events = new EventSystem<TestEvents>({
14
- events: ["userJoined", "userLeft"],
15
- });
16
- expect(events).toBeDefined();
17
- });
18
-
19
- test("should register and call event callback", () => {
20
- const events = new EventSystem<TestEvents>({
21
- events: ["userJoined"],
22
- });
23
-
24
- let called = false;
25
- events.on("userJoined", (data) => {
26
- called = true;
27
- expect(data.userId).toBe("123");
28
- expect(data.name).toBe("Alice");
29
- });
30
-
31
- events.emit("userJoined", { userId: "123", name: "Alice" });
32
- expect(called).toBe(true);
33
- });
34
-
35
- test("should call multiple callbacks for same event", () => {
36
- const events = new EventSystem<TestEvents>({
37
- events: ["userJoined"],
38
- });
39
-
40
- let count = 0;
41
- events.on("userJoined", () => count++);
42
- events.on("userJoined", () => count++);
43
- events.on("userJoined", () => count++);
44
-
45
- events.emit("userJoined", { userId: "123", name: "Bob" });
46
- expect(count).toBe(3);
47
- });
48
-
49
- test("should handle once() callback that runs only once", () => {
50
- const events = new EventSystem<TestEvents>({
51
- events: ["messageReceived"],
52
- });
53
-
54
- let count = 0;
55
- events.once("messageReceived", () => count++);
56
-
57
- events.emit("messageReceived", { from: "Alice", message: "Hello" });
58
- events.emit("messageReceived", { from: "Bob", message: "Hi" });
59
- events.emit("messageReceived", { from: "Charlie", message: "Hey" });
60
-
61
- expect(count).toBe(1);
62
- });
63
-
64
- test("should remove callback with off()", () => {
65
- const events = new EventSystem<TestEvents>({
66
- events: ["scoreUpdated"],
67
- });
68
-
69
- let count = 0;
70
- const callback = () => count++;
71
-
72
- events.on("scoreUpdated", callback);
73
- events.emit("scoreUpdated", { playerId: "p1", score: 100 });
74
- expect(count).toBe(1);
75
-
76
- events.off("scoreUpdated", callback);
77
- events.emit("scoreUpdated", { playerId: "p1", score: 200 });
78
- expect(count).toBe(1); // Should still be 1
79
- });
80
-
81
- test("should clear specific event callbacks", () => {
82
- const events = new EventSystem<TestEvents>({
83
- events: ["userJoined", "userLeft"],
84
- });
85
-
86
- let joinCount = 0;
87
- let leaveCount = 0;
88
-
89
- events.on("userJoined", () => joinCount++);
90
- events.on("userJoined", () => joinCount++);
91
- events.on("userLeft", () => leaveCount++);
92
-
93
- events.clear("userJoined");
94
-
95
- events.emit("userJoined", { userId: "123", name: "Alice" });
96
- events.emit("userLeft", { userId: "123" });
97
-
98
- expect(joinCount).toBe(0);
99
- expect(leaveCount).toBe(1);
100
- });
101
-
102
- test("should clear all event callbacks", () => {
103
- const events = new EventSystem<TestEvents>({
104
- events: ["userJoined", "userLeft", "messageReceived"],
105
- });
106
-
107
- let count = 0;
108
- events.on("userJoined", () => count++);
109
- events.on("userLeft", () => count++);
110
- events.on("messageReceived", () => count++);
111
-
112
- events.clear();
113
-
114
- events.emit("userJoined", { userId: "123", name: "Alice" });
115
- events.emit("userLeft", { userId: "123" });
116
- events.emit("messageReceived", { from: "Alice", message: "Hi" });
117
-
118
- expect(count).toBe(0);
119
- });
120
-
121
- test("should warn when registering callback for non-existent event", () => {
122
- const events = new EventSystem<TestEvents>({
123
- events: ["userJoined"],
124
- });
125
-
126
- const consoleWarn = spyOn(console, "warn");
127
- // @ts-expect-error Testing invalid event name
128
- events.on("nonExistent", () => {});
129
- expect(consoleWarn).toHaveBeenCalledWith('Event "nonExistent" does not exist.');
130
- consoleWarn.mockRestore();
131
- });
132
-
133
- test("should warn when emitting non-existent event", () => {
134
- const events = new EventSystem<TestEvents>({
135
- events: ["userJoined"],
136
- });
137
-
138
- const consoleWarn = spyOn(console, "warn");
139
- // @ts-expect-error Testing invalid event name
140
- events.emit("nonExistent", {});
141
- expect(consoleWarn).toHaveBeenCalledWith('Event "nonExistent" does not exist.');
142
- consoleWarn.mockRestore();
143
- });
144
-
145
- test("should pass correct data to callbacks", () => {
146
- const events = new EventSystem<TestEvents>({
147
- events: ["scoreUpdated"],
148
- });
149
-
150
- const receivedData: Array<{ playerId: string; score: number }> = [];
151
- events.on("scoreUpdated", (data) => receivedData.push(data));
152
-
153
- events.emit("scoreUpdated", { playerId: "p1", score: 100 });
154
- events.emit("scoreUpdated", { playerId: "p2", score: 200 });
155
-
156
- expect(receivedData).toEqual([
157
- { playerId: "p1", score: 100 },
158
- { playerId: "p2", score: 200 },
159
- ]);
160
- });
161
-
162
- test("should handle callbacks that throw errors", () => {
163
- const events = new EventSystem<TestEvents>({
164
- events: ["userJoined"],
165
- });
166
-
167
- let successCount = 0;
168
- events.on("userJoined", () => {
169
- throw new Error("Callback error");
170
- });
171
- events.on("userJoined", () => successCount++);
172
-
173
- expect(() =>
174
- events.emit("userJoined", { userId: "123", name: "Alice" })
175
- ).toThrow();
176
-
177
- // First callback threw, so second wasn't reached
178
- expect(successCount).toBe(0);
179
- });
180
-
181
- test("should maintain callback order", () => {
182
- const events = new EventSystem<TestEvents>({
183
- events: ["messageReceived"],
184
- });
185
-
186
- const order: number[] = [];
187
- events.on("messageReceived", () => order.push(1));
188
- events.on("messageReceived", () => order.push(2));
189
- events.on("messageReceived", () => order.push(3));
190
-
191
- events.emit("messageReceived", { from: "Test", message: "Hello" });
192
- expect(order).toEqual([1, 2, 3]);
193
- });
194
-
195
- test("should allow same callback to be registered multiple times", () => {
196
- const events = new EventSystem<TestEvents>({
197
- events: ["userJoined"],
198
- });
199
-
200
- let count = 0;
201
- const callback = () => count++;
202
-
203
- events.on("userJoined", callback);
204
- events.on("userJoined", callback);
205
-
206
- events.emit("userJoined", { userId: "123", name: "Alice" });
207
- // Set only stores unique callbacks, so it should be called once
208
- expect(count).toBe(1);
209
- });
210
-
211
- test("should handle rapid event emissions", () => {
212
- const events = new EventSystem<TestEvents>({
213
- events: ["scoreUpdated"],
214
- });
215
-
216
- let count = 0;
217
- events.on("scoreUpdated", () => count++);
218
-
219
- for (let i = 0; i < 1000; i++) {
220
- events.emit("scoreUpdated", { playerId: "p1", score: i });
221
- }
222
-
223
- expect(count).toBe(1000);
224
- });
225
-
226
- test("should handle once() with multiple callbacks", () => {
227
- const events = new EventSystem<TestEvents>({
228
- events: ["userJoined"],
229
- });
230
-
231
- let count1 = 0;
232
- let count2 = 0;
233
-
234
- events.once("userJoined", () => count1++);
235
- events.on("userJoined", () => count2++);
236
-
237
- events.emit("userJoined", { userId: "123", name: "Alice" });
238
- events.emit("userJoined", { userId: "456", name: "Bob" });
239
-
240
- expect(count1).toBe(1);
241
- expect(count2).toBe(2);
242
- });
243
- });
@@ -1,140 +0,0 @@
1
- /* ---------- Types ---------- */
2
- type Callback<Props> = (props: Props) => void;
3
-
4
-
5
- type EventMapFromTuple<T extends [string, unknown][]> = {
6
- [K in T[number]as K[0]]: K[1];
7
- };
8
-
9
- /* ---------- Interfaces ---------- */
10
- interface EventSystemProps<EventNames extends string> {
11
- /**
12
- * @description
13
- * The list of events to ever be registered.
14
- */
15
- events: EventNames[];
16
- }
17
-
18
- /**
19
- * @description
20
- * A callback-based event handling system designed to simplify
21
- * event-driven programming.
22
- */
23
- export class EventSystem<EventTuple extends [string, unknown][]> {
24
- /**
25
- * @private
26
- * @description
27
- * The map of registered events and their callbacks.
28
- */
29
- private callbacks: Map<string, Set<Callback<unknown>>>;
30
-
31
- /**
32
- * @private
33
- * @description
34
- * The list of events that were registered.
35
- */
36
- private events: string[];
37
-
38
- constructor({ events }: EventSystemProps<string>) {
39
- this.callbacks = new Map();
40
- this.events = events;
41
-
42
- for (const name of this.events) {
43
- this.callbacks.set(name, new Set());
44
- }
45
- }
46
-
47
- /**
48
- * @description
49
- * Registers a callback for an event.
50
- *
51
- * @param name Event name
52
- * @param callback Callback to run when the event is emitted
53
- */
54
- on<EventName extends keyof EventMapFromTuple<EventTuple> & string>(
55
- name: EventName,
56
- callback: Callback<EventMapFromTuple<EventTuple>[EventName]>
57
- ): void {
58
- const event = this.callbacks.get(name) as Set<Callback<EventMapFromTuple<EventTuple>[EventName]>> | undefined;
59
- if (!event) return console.warn(`Event "${name}" does not exist.`);
60
-
61
- event.add(callback);
62
- }
63
-
64
- /**
65
- * @description
66
- * Registers a callback for an event that runs only once.
67
- *
68
- * @param name Event name
69
- * @param callback Callback to run when the event is emitted
70
- */
71
- once<EventName extends keyof EventMapFromTuple<EventTuple> & string>(
72
- name: EventName,
73
- callback: Callback<EventMapFromTuple<EventTuple>[EventName]>
74
- ): void {
75
- const wrapper: Callback<EventMapFromTuple<EventTuple>[EventName]> = (props) => {
76
- callback(props);
77
- this.off(name, wrapper);
78
- };
79
-
80
- this.on(name, wrapper);
81
- }
82
-
83
- /**
84
- * @description
85
- * Emits an event, running all registered callbacks.
86
- *
87
- * @param name Event name
88
- * @param data Event data
89
- */
90
- emit<EventName extends keyof EventMapFromTuple<EventTuple> & string>(
91
- name: EventName,
92
- data: EventMapFromTuple<EventTuple>[EventName]
93
- ) {
94
- const event = this.callbacks.get(name);
95
- if (!event) return console.warn(`Event "${name}" does not exist.`);
96
-
97
- for (const callback of event) {
98
- callback(data);
99
- }
100
- }
101
-
102
- /**
103
- * @description
104
- * Removes a callback from an event.
105
- *
106
- * @param name Event name
107
- * @param callback Callback to remove
108
- */
109
- off<EventName extends keyof EventMapFromTuple<EventTuple> & string>(
110
- name: EventName,
111
- callback: Callback<EventMapFromTuple<EventTuple>[EventName]>
112
- ): void {
113
- const event = this.callbacks.get(name) as Set<Callback<EventMapFromTuple<EventTuple>[EventName]>> | undefined;
114
- if (!event) return console.warn(`Event "${name}" does not exist.`);
115
-
116
- event.delete(callback);
117
- }
118
-
119
- /**
120
- * @description
121
- * Removes all callbacks.
122
- *
123
- * @param name Optional event name
124
- */
125
- clear<EventName extends keyof EventMapFromTuple<EventTuple> & string>(name?: EventName): void {
126
- if (!name) {
127
- this.callbacks.clear();
128
- for (const name of this.events) {
129
- this.callbacks.set(name, new Set());
130
- }
131
-
132
- return;
133
- }
134
-
135
- const event = this.callbacks.get(name);
136
- if (!event) return console.warn(`Event "${name}" does not exist.`);
137
-
138
- event.clear();
139
- }
140
- }
@@ -1 +0,0 @@
1
- export * from './event-system';
@@ -1,77 +0,0 @@
1
- # FixedTicker
2
-
3
- `FixedTicker` is a utility class for managing fixed-rate update ticks in JavaScript/TypeScript applications. It is designed for deterministic game loops, working both in the browser (e.g., with Pixi.js) and on Node.js servers.
4
-
5
- This class ensures that updates run at a fixed timestep, which is essential for predictable, lockstep multiplayer simulations.
6
-
7
- ---
8
-
9
- ## Features
10
-
11
- - Fixed-timestep updates with configurable tick rate.
12
- - Accumulates elapsed time and determines how many ticks to process per frame.
13
- - Limits the maximum number of ticks per frame to prevent runaway loops.
14
- - Provides a tick count for deterministic simulation.
15
- - Optional callback for detecting skipped ticks (useful for debugging or network reconciliation).
16
- - Compatible with both client and server environments.
17
-
18
- ## Usage
19
-
20
- ```typescript
21
- import { FixedTicker } from './fixed-ticker';
22
-
23
- const ticker = new FixedTicker({
24
- rate: 30, // ticks per second
25
- onTick: (deltaTime, tick) => {
26
- // Your fixed-step game logic here
27
- // deltaTime = 1 / rate
28
- console.log(`Tick ${tick} - dt: ${deltaTime}`);
29
- },
30
- onTickSkipped: (skipped) => {
31
- console.warn(`Skipped ${skipped} ticks due to high delta time`);
32
- }
33
- });
34
-
35
- // Call once per frame, passing elapsed time in seconds
36
- function gameLoop(deltaTime: number) {
37
- ticker.tick(deltaTime);
38
-
39
- // Optional: interpolate visuals using alpha (0-1)
40
- render(ticker.alpha); // for smooth rendering between ticks
41
- }
42
- ```
43
-
44
- ## Notes
45
-
46
- - This class does not automatically guarantee determinism; your game logic must also be deterministic (e.g., using seeded random numbers and consistent math operations).
47
- - For lockstep multiplayer, always use the tickCount to synchronize inputs and simulation steps.
48
- - Use `ticker.alpha` for smooth client-side rendering between fixed ticks (automatically clamped to prevent extrapolation).
49
-
50
- ## Example: Deterministic Multiplayer Loop
51
-
52
- ```typescript
53
- const ticker = new FixedTicker({
54
- rate: 12, // will fire the onTick callback 12 times per second
55
- onTick: (deltaTime, tick) => {
56
- applyInputsForTick(tick);
57
- updateSimulation(deltaTime);
58
- }
59
- });
60
-
61
- // in browser
62
- function frame(deltaTime: number) {
63
- ticker.tick(deltaTime);
64
- render(interpolate(ticker.alpha));
65
- }
66
-
67
- // in Node.js
68
- setInterval(() => {
69
- const deltaTime = 1 / ticker.rate; // fixed timestep
70
- ticker.tick(deltaTime);
71
- updateSimulation(deltaTime);
72
- }, 1000 / ticker.rate);
73
- ```
74
-
75
- ---
76
-
77
- `FixedTicker` provides a reliable, minimal, and deterministic foundation for game loops and simulations where consistent, fixed-step updates are crucial.
@@ -1,151 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { FixedTicker } from "./fixed-ticker";
3
-
4
- describe("FixedTicker", () => {
5
- test("should initialize with correct rate", () => {
6
- const ticker = new FixedTicker({ rate: 60, onTick: () => { } });
7
- expect(ticker.rate).toBe(60);
8
- });
9
-
10
- test("should call onTick with correct deltaTime", () => {
11
- let calledDelta = 0;
12
- const ticker = new FixedTicker({
13
- rate: 60,
14
- onTick: (dt) => {
15
- calledDelta = dt;
16
- },
17
- });
18
-
19
- ticker.tick(1 / 60);
20
- expect(calledDelta).toBeCloseTo(1 / 60, 5);
21
- });
22
-
23
- test("should accumulate time and execute multiple ticks", () => {
24
- let tickCount = 0;
25
- const ticker = new FixedTicker({
26
- rate: 60,
27
- onTick: () => {
28
- tickCount++;
29
- },
30
- });
31
-
32
- // Simulate 3 frames worth of time (add small epsilon for floating point)
33
- ticker.tick(3.01 / 60);
34
- expect(tickCount).toBe(3);
35
- });
36
-
37
- test("should track tick count correctly", () => {
38
- const ticker = new FixedTicker({
39
- rate: 60,
40
- onTick: () => { },
41
- });
42
-
43
- ticker.tick(5.01 / 60);
44
- expect(ticker.tickCount).toBe(5);
45
- });
46
-
47
- test("should reset tick count", () => {
48
- const ticker = new FixedTicker({
49
- rate: 60,
50
- onTick: () => { },
51
- });
52
-
53
- ticker.tick(3.01 / 60);
54
- expect(ticker.tickCount).toBe(3);
55
-
56
- ticker.resetTickCount();
57
- expect(ticker.tickCount).toBe(0);
58
- });
59
-
60
- test("should pass tick number to onTick callback", () => {
61
- const tickNumbers: number[] = [];
62
- const ticker = new FixedTicker({
63
- rate: 60,
64
- onTick: (_dt, tick) => {
65
- if (tick !== undefined) tickNumbers.push(tick);
66
- },
67
- });
68
-
69
- ticker.tick(3.01 / 60);
70
- expect(tickNumbers).toEqual([0, 1, 2]);
71
- });
72
-
73
- test("should limit ticks per frame to maxTicksPerFrame", () => {
74
- let tickCount = 0;
75
- const ticker = new FixedTicker({
76
- rate: 60,
77
- onTick: () => {
78
- tickCount++;
79
- },
80
- });
81
-
82
- // Simulate a huge delta time (2 seconds)
83
- ticker.tick(2);
84
- // maxTicksPerFrame should be Math.max(1, Math.floor(60 / 2)) = 30
85
- expect(tickCount).toBe(30);
86
- });
87
-
88
- test("should provide accumulated time", () => {
89
- const ticker = new FixedTicker({
90
- rate: 60,
91
- onTick: () => { },
92
- });
93
-
94
- // Give it 1.5 ticks worth of time
95
- ticker.tick(1.5 / 60);
96
- expect(ticker.accumulatedTime).toBeCloseTo(0.5 / 60, 5);
97
- });
98
-
99
- test("should call onTickSkipped when ticks are skipped", () => {
100
- let skippedCount = 0;
101
- const ticker = new FixedTicker({
102
- rate: 60,
103
- onTick: () => { },
104
- });
105
-
106
- // Access the private onTickSkipped through constructor
107
- const tickerWithSkip = new FixedTicker({
108
- rate: 60,
109
- onTick: () => { },
110
- });
111
-
112
- // Monkey patch to add onTickSkipped
113
- (tickerWithSkip as any).onTickSkipped = (count: number) => {
114
- skippedCount = count;
115
- };
116
-
117
- // Simulate huge delta that exceeds maxTicksPerFrame
118
- tickerWithSkip.tick(2);
119
- expect(skippedCount).toBeGreaterThan(0);
120
- });
121
-
122
- test("should handle zero delta time", () => {
123
- let tickCount = 0;
124
- const ticker = new FixedTicker({
125
- rate: 60,
126
- onTick: () => {
127
- tickCount++;
128
- },
129
- });
130
-
131
- ticker.tick(0);
132
- expect(tickCount).toBe(0);
133
- expect(ticker.tickCount).toBe(0);
134
- });
135
-
136
- test("should handle very small delta times", () => {
137
- let tickCount = 0;
138
- const ticker = new FixedTicker({
139
- rate: 60,
140
- onTick: () => {
141
- tickCount++;
142
- },
143
- });
144
-
145
- // Simulate 100 very small frames that add up to slightly more than 1 tick
146
- for (let i = 0; i < 100; i++) {
147
- ticker.tick(1.01 / 60 / 100);
148
- }
149
- expect(tickCount).toBe(1);
150
- });
151
- });