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
@@ -4,12 +4,12 @@ import { InputManager } from "../../core/input";
4
4
  * GameLoop class that manages the main game loop with tick events and optional rendering.
5
5
  * It supports both client and server types, emitting appropriate events for both.
6
6
  */
7
- export declare class GameLoop<T extends DriverType = DriverType> {
8
- options: GameLoopOptions & {
9
- type: T;
10
- };
11
- private _driver;
7
+ export declare class GameLoop<T extends GameLoopType = DriverType> {
8
+ options: GameLoopOptions<T>;
9
+ private _driver?;
12
10
  private _input;
11
+ private readonly _isClient;
12
+ private readonly _isManual;
13
13
  /**
14
14
  * FixedTicker instance that handles tick timing and updates.
15
15
  */
@@ -17,7 +17,7 @@ export declare class GameLoop<T extends DriverType = DriverType> {
17
17
  /**
18
18
  * Event emitter system for the game loop, emitting various lifecycle events.
19
19
  */
20
- events: Events;
20
+ events: EventSystem<BaseEvents> & T extends ClientLike ? EventSystem<ClientEvents> : EventSystem<ServerEvents>;
21
21
  /**
22
22
  * Current frames per second (FPS) measurement.
23
23
  */
@@ -25,10 +25,12 @@ export declare class GameLoop<T extends DriverType = DriverType> {
25
25
  /**
26
26
  * Current status of the game loop: 'running', 'paused', or 'stopped'.
27
27
  */
28
- status: 'running' | 'paused' | 'stopped';
29
- constructor(options: GameLoopOptions & {
30
- type: T;
31
- });
28
+ status: "running" | "paused" | "stopped";
29
+ private _tickData;
30
+ private _skipData;
31
+ private _renderData;
32
+ constructor(options: GameLoopOptions<T>);
33
+ step(deltaTime: number): void;
32
34
  /**
33
35
  * Pauses the game ticker and emits a 'toggle-pause' event.
34
36
  */
@@ -46,15 +48,15 @@ export declare class GameLoop<T extends DriverType = DriverType> {
46
48
  */
47
49
  stop(): void;
48
50
  }
49
- interface GameLoopOptions {
51
+ interface GameLoopOptions<T extends GameLoopType> {
50
52
  tickRate: number;
51
- type: DriverType;
52
- onTick?: (dt: number, tick: number, input: ReturnType<InputManager['snapshot']>) => void;
53
- onRender?: (dt: number, alpha: number, input: ReturnType<InputManager['snapshot']>) => void;
53
+ type: T;
54
+ onTick?: (dt: number, tick: number, input: ReturnType<InputManager["snapshot"]>) => void;
55
+ onRender?: (dt: number, alpha: number, input: ReturnType<InputManager["peek"]>) => void;
54
56
  }
55
57
  type BaseEvents = [
56
58
  [
57
- 'start',
59
+ "start",
58
60
  {
59
61
  /**
60
62
  * Timestamp when the loop was started.
@@ -63,7 +65,7 @@ type BaseEvents = [
63
65
  }
64
66
  ],
65
67
  [
66
- 'pre-tick',
68
+ "pre-tick",
67
69
  {
68
70
  /**
69
71
  * Current tick number.
@@ -78,11 +80,11 @@ type BaseEvents = [
78
80
  *
79
81
  * **Only available in client loops.**
80
82
  */
81
- input: ReturnType<InputManager['snapshot']>;
83
+ input: ReturnType<InputManager["snapshot"]>;
82
84
  }
83
85
  ],
84
86
  [
85
- 'tick',
87
+ "tick",
86
88
  {
87
89
  /**
88
90
  * Current tick number.
@@ -97,15 +99,15 @@ type BaseEvents = [
97
99
  *
98
100
  * **Only available in client loops.**
99
101
  */
100
- input: ReturnType<InputManager['snapshot']>;
102
+ input: ReturnType<InputManager["snapshot"]>;
101
103
  }
102
104
  ],
103
105
  [
104
- 'post-tick',
106
+ "post-tick",
105
107
  {
106
108
  /**
107
- * Current tick number.
108
- */
109
+ * Current tick number.
110
+ */
109
111
  tick: number;
110
112
  /**
111
113
  * Delta time since the last tick.
@@ -116,11 +118,11 @@ type BaseEvents = [
116
118
  *
117
119
  * **Only available in client loops.**
118
120
  */
119
- input: ReturnType<InputManager['snapshot']>;
121
+ input: ReturnType<InputManager["snapshot"]>;
120
122
  }
121
123
  ],
122
124
  [
123
- 'skip',
125
+ "skip",
124
126
  {
125
127
  /**
126
128
  * Number of ticks that were skipped.
@@ -129,7 +131,7 @@ type BaseEvents = [
129
131
  }
130
132
  ],
131
133
  [
132
- 'stop',
134
+ "stop",
133
135
  {
134
136
  /**
135
137
  * Timestamp when the loop was stopped.
@@ -138,7 +140,7 @@ type BaseEvents = [
138
140
  }
139
141
  ],
140
142
  [
141
- 'toggle-pause',
143
+ "toggle-pause",
142
144
  {
143
145
  /**
144
146
  * Current paused state of the loop.
@@ -158,14 +160,16 @@ type BaseEvents = [
158
160
  type ClientEvents = [
159
161
  ...BaseEvents,
160
162
  [
161
- 'render',
163
+ "render",
162
164
  {
163
165
  deltaTime: number;
164
166
  alpha: number;
165
- input: ReturnType<InputManager['snapshot']>;
167
+ input: ReturnType<InputManager["peek"]>;
166
168
  }
167
169
  ]
168
170
  ];
169
171
  type ServerEvents = BaseEvents;
170
- type Events = EventSystem<ClientEvents | ServerEvents>;
172
+ type Manual = "manual-client" | "manual-server";
173
+ type ClientLike = "client" | "manual-client";
174
+ export type GameLoopType = DriverType | Manual;
171
175
  export {};
@@ -19,3 +19,4 @@ export * from "./protocol";
19
19
  export * from "./net";
20
20
  export * from "./ecs";
21
21
  export * from "./game";
22
+ export * from "./renderer";
@@ -14,8 +14,8 @@
14
14
  *
15
15
  * @example
16
16
  * ```typescript
17
- * import { ServerNetwork, ClientNetwork } from '@mococa/net';
18
- * import { BunWebSocketServerTransport } from '@mococa/net/transports/bun-websocket';
17
+ * import { ServerNetwork, ClientNetwork } from 'murow/net';
18
+ * import { BunWebSocketServerTransport } from 'murow/net/transports/bun-websocket';
19
19
  * import { IntentRegistry, SnapshotRegistry } from '@mococa/protocol';
20
20
  *
21
21
  * // Server setup
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Abstract base for 2D renderers. Defines the sprite-based rendering API.
3
+ */
4
+ import { BaseRenderer } from "./renderer";
5
+ import type { Camera2DState, Renderer2DOptions, SpriteHandle, SpriteOptions, SpritesheetHandle, SpritesheetSource } from "../types";
6
+ export declare abstract class Base2DRenderer extends BaseRenderer<Renderer2DOptions> {
7
+ readonly maxSprites: number;
8
+ abstract readonly camera: Camera2DState;
9
+ constructor(canvas: HTMLCanvasElement, options: Renderer2DOptions);
10
+ abstract loadSpritesheet(source: SpritesheetSource): Promise<SpritesheetHandle>;
11
+ abstract addSprite(options: SpriteOptions): SpriteHandle;
12
+ abstract removeSprite(sprite: SpriteHandle): void;
13
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Abstract base for 3D renderers. Defines the model/instance-based rendering API.
3
+ */
4
+ import { BaseRenderer } from "./renderer";
5
+ import type { Camera3DState, Renderer3DOptions } from "../types";
6
+ export declare abstract class Base3DRenderer extends BaseRenderer<Renderer3DOptions> {
7
+ readonly maxModels: number;
8
+ abstract readonly camera: Camera3DState;
9
+ constructor(canvas: HTMLCanvasElement, options: Renderer3DOptions);
10
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Abstract base for all renderers. Provides lifecycle and canvas management.
3
+ */
4
+ import type { ClearColor, RendererOptions } from "../types";
5
+ export declare abstract class BaseRenderer<TOptions extends RendererOptions = RendererOptions> {
6
+ readonly canvas: HTMLCanvasElement;
7
+ protected readonly options: TOptions;
8
+ protected _clearColor: ClearColor;
9
+ protected _width: number;
10
+ protected _height: number;
11
+ protected _initialized: boolean;
12
+ constructor(canvas: HTMLCanvasElement, options: TOptions);
13
+ get clearColor(): ClearColor;
14
+ set clearColor(value: ClearColor);
15
+ get width(): number;
16
+ get height(): number;
17
+ get initialized(): boolean;
18
+ abstract init(): Promise<void>;
19
+ abstract render(alpha: number): void;
20
+ abstract destroy(): void;
21
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Pure glTF parsing helpers — container decoding, primitive extraction, and
3
+ * transform baking. No fetch, no GPU, no closure state.
4
+ */
5
+ import type { SkinData, AccessorReader } from './skin-parser';
6
+ /**
7
+ * Decode a fetched glTF payload — either a JSON .gltf or a binary .glb container —
8
+ * into the parsed JSON object and (for .glb) the embedded binary chunk.
9
+ */
10
+ export declare function decodeGltfContainer(arrayBuffer: ArrayBuffer, url: string): {
11
+ gltf: any;
12
+ glbBinaryChunk: ArrayBuffer | null;
13
+ };
14
+ /**
15
+ * Validate that every skin referenced by a mesh node is equivalent to the
16
+ * canonical skin (same joint nodes in any order, same IBMs) and build a joint
17
+ * remap from each non-canonical skin's index space into canonical's.
18
+ *
19
+ * Throws if any skin is structurally incompatible — truly independent skeletons
20
+ * in one file are not supported yet.
21
+ */
22
+ export declare function validateAndBuildSkinRemaps(gltf: any, canonicalSkinIndex: number, skinData: SkinData, skinJointRemaps: Map<number, Uint16Array>, getAccessorData: AccessorReader): void;
23
+ /** Remap a primitive's joint indices into canonical joint space, if needed. */
24
+ export declare function remapSkinAttributes(attrs: {
25
+ joints: Uint16Array;
26
+ weights: Float32Array;
27
+ }, meshSkinIndex: number | undefined, canonicalSkinIndex: number | undefined, skinJointRemaps: Map<number, Uint16Array>): {
28
+ joints: Uint16Array;
29
+ weights: Float32Array;
30
+ };
31
+ /** Extract per-primitive vertex attributes (positions, normals, UVs, indices) from glTF accessors. */
32
+ export declare function extractPrimitiveAttributes(primitive: any, getAccessorData: AccessorReader): {
33
+ positions: Float32Array;
34
+ normals: Float32Array | undefined;
35
+ uvs: Float32Array | undefined;
36
+ indices: Uint16Array | Uint32Array | undefined;
37
+ };
38
+ /**
39
+ * Bake a column-major mat4 into positions (in place) and re-orient + renormalize
40
+ * normals. Used to fold a non-skinned mesh node's transform into its vertices
41
+ * so the renderer doesn't need to know about per-mesh node transforms.
42
+ */
43
+ export declare function bakeTransformIntoVertices(positions: Float32Array, normals: Float32Array | undefined, mm: Float32Array): void;
@@ -0,0 +1,49 @@
1
+ import { type SkinData, type AnimationClipData, type PrimitiveSkinAttributes } from './skin-parser';
2
+ /** Per-primitive CPU data ready for upload. */
3
+ export interface ParsedGltfPrimitive {
4
+ positions: Float32Array;
5
+ normals?: Float32Array;
6
+ uvs?: Float32Array;
7
+ indices?: Uint16Array | Uint32Array;
8
+ texture?: ImageBitmap;
9
+ /** Present iff the primitive belongs to a skinned mesh. */
10
+ skinAttrs?: PrimitiveSkinAttributes;
11
+ /** True iff this primitive should be loaded as a skinned model. */
12
+ skinned: boolean;
13
+ }
14
+ /**
15
+ * Retained parser state for decoding more clips after the initial `parseGltf`.
16
+ * Null when the spec opted out via `freezeAnimations: true`.
17
+ */
18
+ export interface ParsedGltfSource {
19
+ readonly availableAnimations: readonly string[];
20
+ /** Returns null if the clip has no channels targeting joints in this skin. Throws on unknown name. */
21
+ decodeAnimation(name: string): AnimationClipData | null;
22
+ }
23
+ /** Skin + filtered animation clips. Mutated by lazy `loadAnimations` / `unloadAnimations`. */
24
+ export interface ParsedGltfSkin {
25
+ data: SkinData;
26
+ animClips: AnimationClipData[];
27
+ }
28
+ /** CPU-side result of parsing a glTF / glb URL. */
29
+ export interface ParsedGltf {
30
+ /** Source URL the model was loaded from. */
31
+ src: string;
32
+ /** One entry per primitive that should become a model part. */
33
+ primitives: ParsedGltfPrimitive[];
34
+ /** Skin + filtered animation clips, or null if the model has no skin. */
35
+ skin: ParsedGltfSkin | null;
36
+ /** Retained parser state for lazy clip decoding. Null when the spec passed `freezeAnimations: true`. */
37
+ source: ParsedGltfSource | null;
38
+ }
39
+ export interface ParseGltfOptions {
40
+ /** Whitelist of clip names to keep. */
41
+ animations?: string[];
42
+ /** Release the source JSON + accessor reader after parse. Disables lazy load. */
43
+ freezeAnimations?: boolean;
44
+ }
45
+ /**
46
+ * Parse a glTF / .glb file from a URL into CPU-side data.
47
+ * Does no GPU work. Safe to call in parallel; safe to call before a renderer exists.
48
+ */
49
+ export declare function parseGltf(url: string, opts?: ParseGltfOptions): Promise<ParsedGltf>;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * SkeletalAnimation — CPU-side bone matrix evaluation for skinned meshes.
3
+ *
4
+ * Evaluates animation clips by sampling keyframes, computing joint local transforms,
5
+ * walking the hierarchy, and writing final bone matrices into a pre-allocated buffer.
6
+ * Zero per-frame allocations.
7
+ *
8
+ * Usage:
9
+ * ```ts
10
+ * const anim = new SkeletalAnimation(skinData, clips);
11
+ * const state = anim.createState('walk');
12
+ *
13
+ * // Each tick:
14
+ * anim.update(state, deltaTime, outputMatrices);
15
+ *
16
+ * // outputMatrices is a Float32Array view into the bone matrix buffer
17
+ * ```
18
+ */
19
+ import type { SkinData, AnimationClipData, AnimationChannel } from './skin-parser';
20
+ export interface SkeletalClip {
21
+ readonly id: number;
22
+ readonly name: string;
23
+ readonly duration: number;
24
+ readonly channels: AnimationChannel[];
25
+ readonly loop: boolean;
26
+ }
27
+ export interface PlayOptions {
28
+ speed?: number;
29
+ /** Crossfade duration in seconds. 0 = instant switch (default). */
30
+ crossfade?: number;
31
+ /** Whether the animation should loop. Default: true. */
32
+ loop?: boolean;
33
+ /** Called when the animation clip ends (reaches duration). Fires each loop for looping clips. */
34
+ onEnd?: () => void;
35
+ }
36
+ export interface SkeletalAnimState {
37
+ clipId: number;
38
+ time: number;
39
+ speed: number;
40
+ playing: boolean;
41
+ loop: boolean;
42
+ prevClipId: number;
43
+ prevTime: number;
44
+ prevSpeed: number;
45
+ blendWeight: number;
46
+ blendDuration: number;
47
+ onEnd: () => void;
48
+ }
49
+ export declare class SkeletalAnimation {
50
+ private clips;
51
+ private clipsByName;
52
+ readonly skinData: SkinData;
53
+ private readonly localMatrices;
54
+ private readonly worldMatrices;
55
+ private readonly blendScratch;
56
+ private readonly originalRestPoseTRS;
57
+ private readonly currentTRS;
58
+ private readonly topoOrder;
59
+ private readonly skelRootMat;
60
+ constructor(skinData: SkinData, clips: AnimationClipData[]);
61
+ loadClip(clip: AnimationClipData, loop?: boolean): number;
62
+ /**
63
+ * Replace the clip list wholesale. Returns an old-id → new-id remap so
64
+ * callers can fix in-flight `SkeletalAnimState.clipId` / `prevClipId`
65
+ * references. Removed clips map to -1.
66
+ */
67
+ replaceClips(clips: AnimationClipData[], loop?: boolean): Int32Array;
68
+ getClipId(name: string): number;
69
+ getClipNames(): string[];
70
+ getClip(id: number): SkeletalClip | null;
71
+ get clipCount(): number;
72
+ createState(clipIdOrName: number | string, speed?: number, playing?: boolean): SkeletalAnimState;
73
+ play(state: SkeletalAnimState, clipIdOrName: number | string, opts?: PlayOptions): void;
74
+ stop(state: SkeletalAnimState): void;
75
+ resume(state: SkeletalAnimState): void;
76
+ /**
77
+ * Advance time and compute bone matrices.
78
+ * Writes jointCount mat4s into `output` starting at float index `outputOffset`.
79
+ * Handles crossfade blending automatically.
80
+ */
81
+ update(state: SkeletalAnimState, deltaTime: number, output: Float32Array, outputOffset?: number): void;
82
+ /** Advance clip time with looping/clamping. */
83
+ private advanceTime;
84
+ /** Evaluate a clip at a specific time and write bone matrices. */
85
+ private evaluateClip;
86
+ /**
87
+ * Compute bone matrices for the rest/bind pose (no animation).
88
+ */
89
+ computeRestPose(output: Float32Array, outputOffset?: number): void;
90
+ /** Sample an animation channel at time t. Returns 3 or 4 floats. */
91
+ private sampleChannel;
92
+ private readonly _scratchVec3;
93
+ private readonly _scratchQuat;
94
+ /** Normalized lerp for quaternions (nlerp). */
95
+ private nlerpQuat;
96
+ }
@@ -0,0 +1,107 @@
1
+ export interface SkinData {
2
+ jointCount: number;
3
+ /** Node indices for each joint (into the glTF node array). */
4
+ jointNodeIndices: Uint16Array;
5
+ /** Inverse bind matrices — jointCount * 16 floats (column-major mat4). */
6
+ inverseBindMatrices: Float32Array;
7
+ /** Parent joint index for each joint (-1 for roots). Index into *this* joint list, not the node array. */
8
+ parentJointIndices: Int16Array;
9
+ /** World matrix of the skeleton root (non-joint ancestors of root joints). Column-major mat4, 16 floats. Null if identity. */
10
+ skeletonRootMatrix: Float32Array | null;
11
+ /** Rest-pose TRS for each joint, packed as [tx, ty, tz, qx, qy, qz, qw, sx, sy, sz]. jointCount * 10 floats. */
12
+ restPoseTRS: Float32Array;
13
+ }
14
+ export interface AnimationChannel {
15
+ /** Index into the skin's joint list (not node index). */
16
+ jointIndex: number;
17
+ path: 'translation' | 'rotation' | 'scale';
18
+ timestamps: Float32Array;
19
+ /** vec3 for translation/scale, vec4 (quaternion xyzw) for rotation. */
20
+ values: Float32Array;
21
+ interpolation: 'LINEAR' | 'STEP';
22
+ }
23
+ export interface AnimationClipData {
24
+ name: string;
25
+ duration: number;
26
+ channels: AnimationChannel[];
27
+ }
28
+ export interface PrimitiveSkinAttributes {
29
+ /** Joint indices — vertexCount * 4. */
30
+ joints: Uint16Array;
31
+ /** Joint weights — vertexCount * 4. */
32
+ weights: Float32Array;
33
+ }
34
+ export type AccessorReader = (accessorIndex: number) => {
35
+ data: Float32Array | Uint16Array | Uint32Array | Uint8Array;
36
+ count: number;
37
+ elementSize: number;
38
+ };
39
+ /**
40
+ * Parse skin data from a glTF skin definition.
41
+ */
42
+ export declare function parseSkin(gltf: any, skinIndex: number, getAccessorData: AccessorReader): SkinData;
43
+ /**
44
+ * Decode one glTF animation entry into an `AnimationClipData`.
45
+ * Returns null if no channels target joints in this skin, or all channels use
46
+ * an unsupported interpolation mode.
47
+ */
48
+ export declare function decodeAnimationClip(anim: any, nameFallback: string, nodeToJoint: ReadonlyMap<number, number>, getAccessorData: AccessorReader): AnimationClipData | null;
49
+ /** Node→joint index map for a parsed skin. Build once and reuse when decoding clips lazily. */
50
+ export declare function buildNodeToJointMap(skinData: SkinData): Map<number, number>;
51
+ /**
52
+ * Parse animation clips that target joints in a skin.
53
+ */
54
+ export declare function parseAnimations(gltf: any, skinData: SkinData, getAccessorData: AccessorReader): AnimationClipData[];
55
+ export declare function parsePrimitiveSkinAttributes(primitive: any, getAccessorData: AccessorReader): PrimitiveSkinAttributes | null;
56
+ /**
57
+ * Get a node's local TRS as [tx, ty, tz, qx, qy, qz, qw, sx, sy, sz].
58
+ */
59
+ export declare function getNodeTRS(node: any): Float32Array;
60
+ /** Packed GPU-ready animation data for all skins/clips loaded so far. */
61
+ export interface PackedAnimationData {
62
+ /** Flat channel descriptors: [jointIndex, pathAndInterp, keyframeCount, dataOffset] per channel */
63
+ channels: {
64
+ jointIndex: number;
65
+ pathAndInterp: number;
66
+ keyframeCount: number;
67
+ dataOffset: number;
68
+ }[];
69
+ /** Flat keyframe data: timestamps then values for each channel */
70
+ keyframeData: number[];
71
+ /** Clip descriptors: [channelStart, channelCount, duration, loop] */
72
+ clips: {
73
+ channelStart: number;
74
+ channelCount: number;
75
+ duration: number;
76
+ looping: number;
77
+ }[];
78
+ /** Per-skin entries */
79
+ skins: {
80
+ jointCount: number;
81
+ parentOffset: number;
82
+ topoOffset: number;
83
+ ibmOffset: number;
84
+ restTRSOffset: number;
85
+ skelRootMatIndex: number;
86
+ clipOffset: number;
87
+ jointLookupStart: number;
88
+ }[];
89
+ /** Flat parent joint indices (i32), all skins concatenated */
90
+ parentIndices: number[];
91
+ /** Flat topological order (u32), all skins concatenated */
92
+ topoOrder: number[];
93
+ /** Flat inverse bind matrices (mat4x4, 16 floats each), all skins concatenated */
94
+ ibmData: number[];
95
+ /** Flat rest pose TRS (10 floats per joint), all skins concatenated */
96
+ restTRS: number[];
97
+ /** Skeleton root matrices (16 floats each), one per skin */
98
+ skelRootMats: number[];
99
+ /** Per-joint channel lookup: [clipIdx * maxJoints * 2 + joint * 2] = (channelStart, channelCount) */
100
+ jointChannelLookup: number[];
101
+ }
102
+ export declare function createPackedAnimationData(): PackedAnimationData;
103
+ /**
104
+ * Pack a skin + its animations into the flat GPU buffers.
105
+ * Returns the skin index within the packed data.
106
+ */
107
+ export declare function packSkinAndAnimations(packed: PackedAnimationData, skinData: SkinData, clips: AnimationClipData[]): number;
@@ -0,0 +1,15 @@
1
+ export * from "./types";
2
+ export * from "./base/renderer";
3
+ export * from "./base/renderer-2d";
4
+ export * from "./base/renderer-3d";
5
+ export * from "./math";
6
+ export * from "./gltf/skin-parser";
7
+ export * from "./gltf/parser";
8
+ export { SkeletalAnimation } from "./gltf/skeletal-animation";
9
+ export type { SkeletalClip, SkeletalAnimState, PlayOptions } from "./gltf/skeletal-animation";
10
+ export * from "./spritesheet/helpers";
11
+ export * from "./spritesheet/parser";
12
+ export * from "./prefab-bucket";
13
+ export * from "./prefab-bucket/specs";
14
+ export { PrefabBucket } from "./prefab-bucket/concrete";
15
+ export type { PrefabBucket2D, PrefabBucket3D } from "./prefab-bucket/concrete";
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared 3D math utilities for the WebGPU renderer.
3
+ * All functions operate on Float32Arrays with explicit offsets — zero allocations in hot paths.
4
+ */
5
+ /**
6
+ * Write a 4x4 identity matrix into `dst` at `offset`.
7
+ */
8
+ export declare function mat4Identity(dst: Float32Array, offset: number): void;
9
+ /**
10
+ * Create a new 4x4 identity matrix.
11
+ */
12
+ export declare function mat4IdentityNew(): Float32Array;
13
+ /**
14
+ * Write a column-major 4x4 matrix from TRS (translation, quaternion rotation, scale)
15
+ * into `dst` at `offset`.
16
+ */
17
+ export declare function trsToMat4(tx: number, ty: number, tz: number, qx: number, qy: number, qz: number, qw: number, sx: number, sy: number, sz: number, dst: Float32Array, offset: number): void;
18
+ /**
19
+ * Build a column-major 4x4 matrix from a glTF node's TRS or matrix property.
20
+ * Allocates and returns a new Float32Array(16).
21
+ */
22
+ export declare function nodeToMat4(node: {
23
+ translation?: number[];
24
+ rotation?: number[];
25
+ scale?: number[];
26
+ matrix?: number[];
27
+ }): Float32Array;
28
+ /**
29
+ * 4x4 matrix multiply: dst[dO..+16] = a[aO..+16] * b[bO..+16]. Column-major.
30
+ * Safe when a, b, dst overlap (uses internal temp buffer).
31
+ */
32
+ export declare function mat4Mul(a: Float32Array, aO: number, b: Float32Array, bO: number, dst: Float32Array, dO: number): void;
33
+ /**
34
+ * 4x4 matrix multiply that allocates and returns a new Float32Array(16).
35
+ * Use for load-time operations, not per-frame hot paths.
36
+ */
37
+ export declare function mat4MulNew(a: Float32Array, b: Float32Array): Float32Array;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * PrefabBucket — typed registry of reusable spawn templates.
3
+ *
4
+ * Pass `'2d'` or `'3d'` to the constructor to pick the spec/prefab universe.
5
+ * Parsers are wired implicitly; user code only sees `add`, `addAll`, `load`, `get`.
6
+ *
7
+ * ```ts
8
+ * const bucket = new PrefabBucket('3d')
9
+ * .add({ type: 'gltf', id: 'minion', url: '/minion.glb' })
10
+ * .add({ type: 'grid', id: 'floor', size: 20, step: 0.33, lineWidth: 0.001 });
11
+ *
12
+ * await bucket.load();
13
+ *
14
+ * bucket.get('minion'); // typed as GltfPrefab — `.animations`, `.jointCount`, …
15
+ * bucket.get('floor'); // typed as GridPrefab — `.size`, `.step`, `.lineWidth`
16
+ * bucket.get('typo'); // ❌ TS error: '"typo"' not in '"minion" | "floor"'
17
+ * ```
18
+ */
19
+ import { BasePrefabBucket, type StringOr } from './index';
20
+ import type { Prefab2D, Prefab2DSpec, Prefab3D, Prefab3DSpec, PrefabFor } from './specs';
21
+ type SpecForMode<M> = M extends '3d' ? Prefab3DSpec : Prefab2DSpec;
22
+ type PrefabUnionForMode<M> = M extends '3d' ? Prefab3D : Prefab2D;
23
+ /**
24
+ * Registry of prefab specs and their parsed variants. The bucket tracks the mapping of
25
+ * spec `id` strings to their parsed prefab types, so `get` narrows to the correct
26
+ * prefab type based on the provided id. The bucket is mutable; call `add`/`addAll`
27
+ * to register new specs and their prefab types. Call `load` to parse all registered
28
+ * specs and populate the bucket's internal prefab registry.
29
+ */
30
+ export declare class PrefabBucket<M extends '2d' | '3d' = '3d', Specs extends Record<string, SpecForMode<M>> = {}> extends BasePrefabBucket<M, SpecForMode<M>, PrefabUnionForMode<M>, Specs> {
31
+ constructor(mode: M);
32
+ /**
33
+ * Add a spec. Chains return the subclass type so the bucket variable's
34
+ * static type accumulates id→spec mappings, enabling `get` to narrow.
35
+ */
36
+ add<const S extends SpecForMode<M>>(spec: S): PrefabBucket<M, Specs & {
37
+ [K in S['id']]: S;
38
+ }>;
39
+ addAll<const Ss extends readonly SpecForMode<M>[]>(specs: Ss): PrefabBucket<M, Specs & {
40
+ [K in Ss[number]['id']]: Extract<Ss[number], {
41
+ id: K;
42
+ }>;
43
+ }>;
44
+ /**
45
+ * Return the parsed prefab variant for this id. Narrow type — `get('minion')`
46
+ * returns `GltfPrefab` (with `.animations`, `.jointCount`), not the union.
47
+ *
48
+ * Accepts any string at runtime but autocompletes known ids.
49
+ */
50
+ get<K extends keyof Specs & string, R = PrefabFor<Specs[K]>>(id: StringOr<K>): R;
51
+ }
52
+ /** Convenience aliases for explicit mode typing (e.g. function params). */
53
+ export type PrefabBucket2D<Specs extends Record<string, Prefab2DSpec> = {}> = PrefabBucket<'2d', Specs>;
54
+ export type PrefabBucket3D<Specs extends Record<string, Prefab3DSpec> = {}> = PrefabBucket<'3d', Specs>;
55
+ export type { GltfPrefab, GltfSpec, GridPrefab, GridSpec, Prefab2D, Prefab2DSpec, Prefab3D, Prefab3DSpec, PrefabFor, SpritesheetPrefab, SpritesheetSpec, } from './specs';