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
@@ -0,0 +1,97 @@
1
+ /**
2
+ * AnimationController — frame-by-frame spritesheet animation.
3
+ *
4
+ * Manages animation clips (sequences of sprite frames with per-frame durations)
5
+ * and updates sprite handles to show the current frame. Zero allocations in the
6
+ * update loop — all clip data is pre-allocated typed arrays.
7
+ *
8
+ * ECS-independent: works with any system that can call update() per entity.
9
+ *
10
+ * Usage:
11
+ * ```ts
12
+ * const anim = new AnimationController();
13
+ *
14
+ * const runClip = anim.loadClip({
15
+ * name: 'run',
16
+ * frames: [0, 1, 2, 3],
17
+ * durations: [100, 100, 100, 100],
18
+ * loop: true,
19
+ * });
20
+ *
21
+ * const state = anim.createState(runClip);
22
+ * // Each tick:
23
+ * anim.update(state, deltaTime, spriteHandle);
24
+ * ```
25
+ */
26
+ export interface AnimationClip {
27
+ readonly id: number;
28
+ readonly name: string;
29
+ readonly frames: Uint16Array;
30
+ readonly durations: Float32Array;
31
+ readonly frameCount: number;
32
+ readonly totalDuration: number;
33
+ readonly loop: boolean;
34
+ }
35
+ export interface AnimationState {
36
+ clipId: number;
37
+ frame: number;
38
+ time: number;
39
+ speed: number;
40
+ playing: boolean;
41
+ }
42
+ export interface AnimationClipConfig {
43
+ name: string;
44
+ frames: number[];
45
+ durations: number[];
46
+ loop: boolean;
47
+ }
48
+ /**
49
+ * Minimal interface for what update() needs to set on a sprite.
50
+ * Matches SpriteAccessor but doesn't import it — stays decoupled.
51
+ */
52
+ export interface Animatable {
53
+ setSpriteId?(id: number): void;
54
+ }
55
+ export declare class AnimationController {
56
+ private clips;
57
+ private clipsByName;
58
+ /**
59
+ * Register an animation clip. Returns the clip ID.
60
+ */
61
+ loadClip(config: AnimationClipConfig): number;
62
+ /**
63
+ * Get a clip by name.
64
+ */
65
+ getClipId(name: string): number;
66
+ /**
67
+ * Get a clip by ID.
68
+ */
69
+ getClip(id: number): AnimationClip;
70
+ /**
71
+ * Create a new animation state for an entity. This is the per-entity data
72
+ * that tracks playback progress. Store it however you like (flat array, component, etc).
73
+ */
74
+ createState(clipId: number, speed?: number, playing?: boolean): AnimationState;
75
+ /**
76
+ * Advance an animation state by deltaTime (in seconds).
77
+ * Returns the current sprite frame ID, or -1 if not playing.
78
+ * Zero allocations.
79
+ */
80
+ update(state: AnimationState, deltaTime: number): number;
81
+ /**
82
+ * Play a different clip on an existing state. Resets frame and time.
83
+ */
84
+ play(state: AnimationState, clipId: number, speed?: number): void;
85
+ /**
86
+ * Stop playback.
87
+ */
88
+ stop(state: AnimationState): void;
89
+ /**
90
+ * Resume playback.
91
+ */
92
+ resume(state: AnimationState): void;
93
+ /**
94
+ * Number of loaded clips.
95
+ */
96
+ get clipCount(): number;
97
+ }
@@ -0,0 +1,86 @@
1
+ import { Base2DRenderer } from 'murow/renderer';
2
+ import type { Renderer2DOptions, SpriteHandle, SpriteOptions, SpritesheetHandle, SpritesheetSource } from 'murow/renderer';
3
+ import { Camera2D } from '../camera/camera-2d';
4
+ import { type ParsedSpritesheet } from 'murow/renderer';
5
+ import { GeometryBuilder, type GeometryOptions } from '../geometry/geometry-builder';
6
+ import { ComputeBuilder, type ComputeOptions } from '../compute/compute-builder';
7
+ import type { PrefabBucket2D, Prefab2D } from 'murow/renderer';
8
+ export interface WebGPU2DRendererOptions extends Renderer2DOptions {
9
+ /**
10
+ * Pre-loaded prefab bucket. When provided, the renderer uploads each prefab
11
+ * to the GPU during `init()`, and `addSprite({ prefab: bucket.get('id') })`
12
+ * resolves to the right spritesheet handle. The bucket must have `load()`
13
+ * resolved before being passed in.
14
+ */
15
+ prefabs?: PrefabBucket2D;
16
+ /**
17
+ * How many sprite instances you intend to spawn. Used to size buffers when
18
+ * `maxSprites` is not given explicitly. Defaults to 1024.
19
+ */
20
+ maxInstances?: number;
21
+ }
22
+ export declare class WebGPU2DRenderer extends Base2DRenderer {
23
+ private root;
24
+ private _device;
25
+ private context;
26
+ private _format;
27
+ get device(): GPUDevice;
28
+ get format(): GPUTextureFormat;
29
+ private spriteLayout;
30
+ private textureLayout;
31
+ private dynamicData;
32
+ private staticData;
33
+ private freeList;
34
+ private batcher;
35
+ private staticDirty;
36
+ private dynamicBuffer;
37
+ private staticBuffer;
38
+ private uniformBuffer;
39
+ private slotIndexBuffer;
40
+ private slotIndexData;
41
+ private rawPipeline;
42
+ private rawSpriteBindGroup;
43
+ private rawTextureLayout;
44
+ private rawDynamicBuffer;
45
+ private rawStaticBuffer;
46
+ private rawUniformBuffer;
47
+ private rawSlotIndexBuffer;
48
+ private sheetBindGroups;
49
+ private sheets;
50
+ private nextSheetId;
51
+ readonly camera: Camera2D;
52
+ private uniformData;
53
+ private resizeObserver;
54
+ private resizeCallbacks;
55
+ private readonly _prefabs;
56
+ constructor(canvas: HTMLCanvasElement, options: WebGPU2DRendererOptions);
57
+ init(): Promise<void>;
58
+ /**
59
+ * Upload every prefab in the bucket to the GPU and stash the resulting
60
+ * SpritesheetHandle on each prefab so `bucket.get(id)` returns something
61
+ * usable as a sprite source.
62
+ */
63
+ private uploadPrefabBucket;
64
+ private setupResizeObserver;
65
+ /**
66
+ * Register a callback that fires when the canvas resizes.
67
+ * Receives the new width and height in physical pixels.
68
+ */
69
+ onResize(callback: (width: number, height: number) => void): void;
70
+ loadSpritesheet(source: SpritesheetSource): Promise<SpritesheetHandle>;
71
+ /**
72
+ * Upload a previously-parsed spritesheet to the GPU. Returns a SpritesheetHandle.
73
+ * Splitting parse (CPU) from upload (GPU) lets callers parse spritesheets in parallel
74
+ * before a renderer exists.
75
+ */
76
+ uploadParsedSpritesheet(parsed: ParsedSpritesheet): SpritesheetHandle;
77
+ addSprite(opts: Omit<SpriteOptions, 'sheet'> & {
78
+ sheet: SpritesheetHandle | Prefab2D;
79
+ }): SpriteHandle;
80
+ removeSprite(sprite: SpriteHandle): void;
81
+ storePreviousState(): void;
82
+ createGeometry(name: string, options: GeometryOptions): GeometryBuilder;
83
+ createCompute(name: string, options: ComputeOptions): ComputeBuilder;
84
+ render(alpha: number): void;
85
+ destroy(): void;
86
+ }
@@ -0,0 +1,61 @@
1
+ import * as d from 'typegpu/data';
2
+ export declare function createSpriteLayout(maxSprites: number): import("typegpu").TgpuBindGroupLayout<{
3
+ uniforms: {
4
+ uniform: d.WgslStruct<{
5
+ viewProjection: d.Mat3x3f;
6
+ alpha: d.F32;
7
+ resolution: d.Vec2f;
8
+ }>;
9
+ };
10
+ dynamicInstances: {
11
+ storage: d.WgslArray<d.WgslStruct<{
12
+ prevX: d.F32;
13
+ prevY: d.F32;
14
+ currX: d.F32;
15
+ currY: d.F32;
16
+ prevRotation: d.F32;
17
+ currRotation: d.F32;
18
+ }>>;
19
+ };
20
+ staticInstances: {
21
+ storage: d.WgslArray<d.WgslStruct<{
22
+ scaleX: d.F32;
23
+ scaleY: d.F32;
24
+ uvMinX: d.F32;
25
+ uvMinY: d.F32;
26
+ uvMaxX: d.F32;
27
+ uvMaxY: d.F32;
28
+ layer: d.F32;
29
+ flipX: d.F32;
30
+ flipY: d.F32;
31
+ opacity: d.F32;
32
+ tintR: d.F32;
33
+ tintG: d.F32;
34
+ tintB: d.F32;
35
+ tintA: d.F32;
36
+ }>>;
37
+ };
38
+ slotIndices: {
39
+ storage: d.WgslArray<d.U32>;
40
+ };
41
+ }>;
42
+ export declare function createTextureLayout(): import("typegpu").TgpuBindGroupLayout<{
43
+ spriteTex: {
44
+ texture: d.WgslTexture2d<d.F32>;
45
+ };
46
+ spriteSampler: {
47
+ sampler: "filtering";
48
+ };
49
+ }>;
50
+ export type SpriteDataLayout = ReturnType<typeof createSpriteLayout>;
51
+ export type SpriteTextureLayout = ReturnType<typeof createTextureLayout>;
52
+ export declare function createSpriteVertex(spriteLayout: SpriteDataLayout, _textureLayout: SpriteTextureLayout): import("typegpu").TgpuVertexFn<{}, {
53
+ vUv: d.Vec2f;
54
+ vTint: d.Vec4f;
55
+ vOpacity: d.F32;
56
+ }>;
57
+ export declare function createSpriteFragment(_spriteLayout: SpriteDataLayout, textureLayout: SpriteTextureLayout): import("typegpu").TgpuFragmentFn<{
58
+ vUv: d.Vec2f;
59
+ vTint: d.Vec4f;
60
+ vOpacity: d.F32;
61
+ }, d.Vec4f>;
@@ -0,0 +1,47 @@
1
+ import type { SpriteHandle } from "murow/renderer";
2
+ export declare class SpriteAccessor implements SpriteHandle {
3
+ private dynamicData;
4
+ private staticData;
5
+ private dynamicBase;
6
+ private staticBase;
7
+ private _slot;
8
+ private _sheetId;
9
+ private _onStaticDirty;
10
+ constructor(dynamicData: Float32Array, staticData: Float32Array, slot: number, sheetId: number, onStaticDirty: () => void);
11
+ get slot(): number;
12
+ get sheetId(): number;
13
+ get x(): number;
14
+ set x(v: number);
15
+ get y(): number;
16
+ set y(v: number);
17
+ get prevX(): number;
18
+ get prevY(): number;
19
+ get rotation(): number;
20
+ set rotation(v: number);
21
+ get prevRotation(): number;
22
+ /**
23
+ * Store current position/rotation as previous (called before tick).
24
+ */
25
+ storePrevious(): void;
26
+ get scaleX(): number;
27
+ set scaleX(v: number);
28
+ get scaleY(): number;
29
+ set scaleY(v: number);
30
+ get layer(): number;
31
+ set layer(v: number);
32
+ get flipX(): boolean;
33
+ set flipX(v: boolean);
34
+ get flipY(): boolean;
35
+ set flipY(v: boolean);
36
+ get opacity(): number;
37
+ set opacity(v: number);
38
+ get tintR(): number;
39
+ get tintG(): number;
40
+ get tintB(): number;
41
+ get tintA(): number;
42
+ setTint(r: number, g: number, b: number, a?: number): void;
43
+ get uvMinX(): number;
44
+ get uvMinY(): number;
45
+ get uvMaxX(): number;
46
+ get uvMaxY(): number;
47
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Bridges the bucket's `clips-changed` events to per-skin resync work in the
3
+ * renderer. The renderer registers `prefabId → skinIndex` at upload time;
4
+ * subsequent events flag affected skins in a pending set the renderer drains
5
+ * each frame.
6
+ */
7
+ import type { PrefabBucket } from 'murow';
8
+ export declare class GltfClipResyncCoordinator {
9
+ private bucket;
10
+ private readonly skinIndexByPrefabId;
11
+ private readonly _pending;
12
+ constructor(bucket: PrefabBucket);
13
+ /** Map a prefab id to its index in the renderer's `skinnedModels` list. */
14
+ registerSkin(prefabId: string, skinIndex: number): void;
15
+ /** Skin indices whose clip set has changed since the last `clear()`. */
16
+ get pending(): ReadonlySet<number>;
17
+ clear(): void;
18
+ /** Unsubscribe from the bucket and reset its animation clip sets. */
19
+ dispose(): void;
20
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * MorphAnimation — keyframe-based vertex animation for 3D meshes.
3
+ *
4
+ * Stores multiple vertex position snapshots (morph targets) per model.
5
+ * Each instance has a float `morphTime` that determines which two keyframes
6
+ * to blend and by how much. The blending happens CPU-side by writing
7
+ * interpolated positions into the model's vertex buffer.
8
+ *
9
+ * This is simpler than GPU-side blending (no shader changes needed) and
10
+ * works well for small-to-medium meshes with few keyframes.
11
+ *
12
+ * Usage:
13
+ * ```ts
14
+ * const morph = new MorphAnimation();
15
+ *
16
+ * // Load keyframes (each is a flat Float32Array of positions)
17
+ * const clipId = morph.loadClip({
18
+ * name: 'walk',
19
+ * keyframes: [frame0Positions, frame1Positions, frame2Positions],
20
+ * durations: [100, 100, 100],
21
+ * loop: true,
22
+ * });
23
+ *
24
+ * const state = morph.createState(clipId);
25
+ *
26
+ * // Each tick: advance time, get interpolated positions
27
+ * morph.update(state, deltaTime, outputPositions);
28
+ * ```
29
+ */
30
+ export interface MorphClip {
31
+ readonly id: number;
32
+ readonly name: string;
33
+ readonly keyframes: Float32Array[];
34
+ readonly durations: Float32Array;
35
+ readonly frameCount: number;
36
+ readonly totalDuration: number;
37
+ readonly loop: boolean;
38
+ readonly vertexCount: number;
39
+ }
40
+ export interface MorphState {
41
+ clipId: number;
42
+ time: number;
43
+ speed: number;
44
+ playing: boolean;
45
+ }
46
+ export interface MorphClipConfig {
47
+ name: string;
48
+ keyframes: Float32Array[];
49
+ durations: number[];
50
+ loop: boolean;
51
+ }
52
+ export declare class MorphAnimation {
53
+ private clips;
54
+ private clipsByName;
55
+ loadClip(config: MorphClipConfig): number;
56
+ getClipId(name: string): number;
57
+ getClip(id: number): MorphClip;
58
+ createState(clipId: number, speed?: number, playing?: boolean): MorphState;
59
+ /**
60
+ * Advance time and write interpolated vertex positions into `output`.
61
+ * Output must be a Float32Array of vertexCount * 3 floats.
62
+ * Zero allocations.
63
+ */
64
+ update(state: MorphState, deltaTime: number, output: Float32Array): void;
65
+ play(state: MorphState, clipId: number, speed?: number): void;
66
+ stop(state: MorphState): void;
67
+ resume(state: MorphState): void;
68
+ get clipCount(): number;
69
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,266 @@
1
+ import { Base3DRenderer } from 'murow/renderer';
2
+ import type { Renderer3DOptions } from 'murow/renderer';
3
+ import { ComputeBuilder, type ComputeOptions } from '../compute/compute-builder';
4
+ import { Camera3D } from '../camera/camera-3d';
5
+ import { type ParsedGltf, type PrefabBucket3D, type Prefab3D, type PlayOptions } from 'murow/renderer';
6
+ export interface ModelData {
7
+ positions: Float32Array;
8
+ normals?: Float32Array;
9
+ uvs?: Float32Array;
10
+ indices?: Uint16Array | Uint32Array;
11
+ texture?: ImageBitmap;
12
+ }
13
+ export interface ModelHandle {
14
+ readonly id: number;
15
+ readonly vertexCount: number;
16
+ readonly indexCount: number;
17
+ readonly skinned: boolean;
18
+ }
19
+ export interface MeshInstanceHandle {
20
+ readonly slot: number;
21
+ readonly modelId: number;
22
+ readonly skinned: boolean;
23
+ setPosition(x: number, y: number, z: number): void;
24
+ setRotation(x: number, y: number, z: number): void;
25
+ setScale(x: number, y: number, z: number): void;
26
+ play?(name: string, opts?: PlayOptions): void;
27
+ stop?(): void;
28
+ }
29
+ /** A loaded glTF model — may contain multiple mesh parts that share a skeleton. */
30
+ export interface GltfModel {
31
+ readonly parts: ModelHandle[];
32
+ readonly totalVertexCount: number;
33
+ readonly skinned: boolean;
34
+ /** Animation clip names available on this model (empty if not skinned). */
35
+ readonly animations: string[];
36
+ /** Source URL this model was loaded from. */
37
+ readonly src: string;
38
+ }
39
+ /** Handle to a spawned instance (single primitive or multi-part glTF). */
40
+ export interface InstanceHandle {
41
+ setPosition(x: number, y: number, z: number): void;
42
+ setRotation(x: number, y: number, z: number): void;
43
+ setScale(x: number, y: number, z: number): void;
44
+ play?(name: string, opts?: PlayOptions): void;
45
+ stop?(): void;
46
+ readonly skinned: boolean;
47
+ }
48
+ export interface MeshInstanceOptions {
49
+ /**
50
+ * The model to instance. Either a renderer-internal handle (from `loadGltf`,
51
+ * `loadModel`, `createGrid`) or a prefab fetched from a `PrefabBucket3D` —
52
+ * `bucket.get('my-id')`.
53
+ */
54
+ model: ModelHandle | GltfModel | Prefab3D;
55
+ /** World position. Defaults to `[0, 0, 0]`. */
56
+ position?: readonly [x: number, y: number, z: number];
57
+ /** Euler rotation in radians. Defaults to `[0, 0, 0]`. */
58
+ rotation?: readonly [x: number, y: number, z: number];
59
+ /** Per-axis scale. Pass a single number to scale uniformly. Defaults to `[1, 1, 1]`. */
60
+ scale?: number | readonly [x: number, y: number, z: number];
61
+ /** Tint color RGB. Defaults to `[1, 1, 1]`. */
62
+ color?: readonly [r: number, g: number, b: number];
63
+ }
64
+ export interface WebGPU3DRendererOptions extends Renderer3DOptions {
65
+ maxSkinnedInstances?: number;
66
+ maxBonesPerSkin?: number;
67
+ /**
68
+ * Pre-loaded prefab bucket. When provided, the renderer self-sizes its
69
+ * skinned-instance + bone buffers from the bucket's prefab stats, and
70
+ * uploads each prefab to the GPU during `init()`. The bucket must have
71
+ * `load()` resolved before being passed in.
72
+ *
73
+ * `maxSkinnedInstances` defaults to `maxInstances * maxSkinnedPartsPerPrefab`.
74
+ * `maxBonesPerSkin` defaults to the maximum joint count across all prefabs.
75
+ */
76
+ prefabs?: PrefabBucket3D;
77
+ /**
78
+ * How many instances you intend to spawn. Used together with `prefabs` to
79
+ * size the skinned-instance budget. Ignored if `maxSkinnedInstances` is set
80
+ * explicitly. Defaults to `maxModels` when only `prefabs` is provided.
81
+ */
82
+ maxInstances?: number;
83
+ }
84
+ export declare class WebGPU3DRenderer extends Base3DRenderer {
85
+ private root;
86
+ private device;
87
+ private context;
88
+ private resizeObserver;
89
+ private resizeCallbacks;
90
+ private format;
91
+ private meshLayout;
92
+ private dynamicData;
93
+ private staticData;
94
+ private slotIndexData;
95
+ private freeList;
96
+ private batcher;
97
+ private staticDirty;
98
+ private instanceModelIds;
99
+ private dynamicBuffer;
100
+ private staticBuffer;
101
+ private uniformBuffer;
102
+ private slotIndexBuffer;
103
+ private rawPipeline;
104
+ private rawBindGroup;
105
+ private rawDynamicBuffer;
106
+ private rawStaticBuffer;
107
+ private rawUniformBuffer;
108
+ private rawSlotIndexBuffer;
109
+ private depthTexture;
110
+ private rawTexturedPipeline;
111
+ private models;
112
+ private nextModelId;
113
+ private skinnedModels;
114
+ private clipResync;
115
+ private skinnedMeshLayout;
116
+ private rawSkinnedPipeline;
117
+ private rawSkinnedTexturedPipeline;
118
+ private rawSkinnedBindGroup;
119
+ private boneMatrixData;
120
+ private rawBoneMatrixBuffer;
121
+ private boneMatrixDirty;
122
+ private readonly maxTotalBones;
123
+ private packedAnimData;
124
+ private animComputeKernel;
125
+ private animComputeNeedsRebuild;
126
+ private animKernelBudgets;
127
+ private animClipTableOffset;
128
+ private animChannelTableOffset;
129
+ private animJointLookupOffset;
130
+ private gpuAnimInstanceStates;
131
+ private gpuInstData;
132
+ private gpuInstDV;
133
+ private skinnedDynamicData;
134
+ private skinnedStaticData;
135
+ private skinnedSlotIndexData;
136
+ private skinnedFreeList;
137
+ private skinnedBatcher;
138
+ private skinnedStaticDirty;
139
+ private skinnedInstanceModelIds;
140
+ private skinnedInstanceBoneOffsets;
141
+ private skinnedAnimStates;
142
+ private nextBoneOffset;
143
+ private readonly maxSkinnedInstances;
144
+ private readonly maxBonesPerSkin;
145
+ private rawSkinnedDynamicBuffer;
146
+ private rawSkinnedStaticBuffer;
147
+ private rawSkinnedUniformBuffer;
148
+ private rawSkinnedSlotIndexBuffer;
149
+ private frustumPlanes;
150
+ readonly camera: Camera3D;
151
+ private uniformData;
152
+ private lastRenderTime;
153
+ private readonly _prefabs;
154
+ constructor(canvas: HTMLCanvasElement, options: WebGPU3DRendererOptions);
155
+ init(): Promise<void>;
156
+ /**
157
+ * Upload every prefab in the bucket to the GPU and stash the handle on
158
+ * each prefab so `bucket.get(id)` resolves to a usable model. Also
159
+ * subscribes the resync coordinator to the bucket's `clips-changed`
160
+ * channel for lazy load/unload.
161
+ */
162
+ private uploadPrefabBucket;
163
+ private setupResizeObserver;
164
+ /**
165
+ * Register a callback that fires when the canvas resizes.
166
+ * Receives the new width and height in physical pixels.
167
+ */
168
+ onResize(callback: (width: number, height: number) => void): void;
169
+ createCompute(name: string, options: ComputeOptions): ComputeBuilder;
170
+ /**
171
+ * Create a flat grid mesh on the XZ plane at Y=0.
172
+ *
173
+ * ```ts
174
+ * const grid = renderer.createGrid({ size: 20, step: 1, lineWidth: 0.005 });
175
+ * renderer.addInstance({ model: grid, color: [0.3, 0.3, 0.3] });
176
+ * ```
177
+ */
178
+ createGrid(opts?: {
179
+ size?: number;
180
+ step?: number;
181
+ lineWidth?: number;
182
+ }): ModelHandle;
183
+ /**
184
+ * Register a model. Returns a handle for addInstance().
185
+ *
186
+ * ```ts
187
+ * const hero = renderer.loadModel({
188
+ * positions: new Float32Array([...]),
189
+ * normals: new Float32Array([...]), // optional — auto-computed from faces
190
+ * uvs: new Float32Array([...]), // optional
191
+ * indices: new Uint16Array([...]), // optional
192
+ * texture: myImageBitmap, // optional
193
+ * });
194
+ * ```
195
+ */
196
+ loadModel(data: ModelData): ModelHandle;
197
+ /**
198
+ * Register a skinned model with joint/weight vertex data.
199
+ * Called internally by loadGltf when a skin is detected.
200
+ */
201
+ private loadSkinnedModel;
202
+ /**
203
+ * Auto-compute flat normals from triangle faces.
204
+ */
205
+ private computeNormals;
206
+ /**
207
+ * Load a glTF/GLB model from a URL. Returns one ModelHandle per primitive.
208
+ * Most models have multiple primitives (body parts, material groups, etc.).
209
+ *
210
+ * ```ts
211
+ * const model = await renderer.loadGltf('assets/hero.glb');
212
+ * const instance = renderer.addInstance({ model, x: 0, y: 0, z: 0 });
213
+ * instance.playAnimation?.('walk');
214
+ * ```
215
+ */
216
+ loadGltf(url: string, opts?: {
217
+ animations?: string[];
218
+ }): Promise<GltfModel>;
219
+ /**
220
+ * Upload a previously-parsed glTF to the GPU. Returns a GltfModel handle.
221
+ * Splitting parse (CPU) from upload (GPU) lets callers parse models in parallel
222
+ * before a renderer exists and inspect joint counts / vertex totals to size the
223
+ * renderer appropriately.
224
+ */
225
+ uploadParsedGltf(parsed: ParsedGltf): GltfModel;
226
+ /**
227
+ * Add an instance. For skinned models, pass `linkedTo` to share bone matrices
228
+ * with another instance (e.g., when spawning all parts of a character).
229
+ */
230
+ addInstance(opts: MeshInstanceOptions): InstanceHandle;
231
+ private addGltfInstance;
232
+ private addSkinnedInstance;
233
+ /**
234
+ * Drain pending resyncs from the coordinator. Per affected skin: rebuild
235
+ * its `SkeletalAnimation` clip list densely, remap in-flight animStates,
236
+ * then full-repack `packedAnimData`. Falls back to a kernel rebuild only
237
+ * when the new data exceeds the kernel's allocated budgets.
238
+ *
239
+ * The dense renumbering is load-bearing: the kernel reads each clip by
240
+ * its per-skin index, which must equal `SkeletalAnimation`'s clip id.
241
+ */
242
+ private syncLazyAnimationChanges;
243
+ /** Doubling-growth budgets for kernel storage buffers, with sensible floors. */
244
+ private growBudgetsForPacked;
245
+ /** Upload `packedAnimData` to the existing kernel iff it fits the current budgets. Returns false to force a rebuild. */
246
+ private tryUploadInPlace;
247
+ /**
248
+ * Update skeletal animations for all skinned instances. Call once per tick.
249
+ */
250
+ private updatedBoneOffsets;
251
+ private updateAnimations;
252
+ removeInstance(handle: MeshInstanceHandle): void;
253
+ storePreviousState(): void;
254
+ render(alpha: number): void;
255
+ /**
256
+ * Extract 6 frustum planes from a column-major VP matrix.
257
+ * Each plane is [a, b, c, d] where ax + by + cz + d >= 0 means inside.
258
+ */
259
+ private extractFrustumPlanes;
260
+ /**
261
+ * Test if a bounding sphere is inside or intersects the frustum.
262
+ * Returns true if visible (should be drawn).
263
+ */
264
+ private isInFrustum;
265
+ destroy(): void;
266
+ }