murow 0.0.70 → 0.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/README.md +52 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  156. package/dist/types/core/free-list/free-list.d.ts +31 -0
  157. package/dist/types/core/free-list/index.d.ts +1 -0
  158. package/dist/{core → types/core}/index.d.ts +5 -0
  159. package/dist/{core → types/core}/input/index.d.ts +1 -0
  160. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  161. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  162. package/dist/types/core/ray/index.d.ts +2 -0
  163. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  164. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  165. package/dist/types/core/simple-rng/index.d.ts +1 -0
  166. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  167. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  168. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  169. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  170. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  171. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  172. package/dist/{net → types/net}/index.d.ts +2 -2
  173. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  174. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  175. package/dist/types/renderer/base-renderer.d.ts +21 -0
  176. package/dist/types/renderer/index.d.ts +4 -0
  177. package/dist/types/renderer/types.d.ts +79 -0
  178. package/dist/webgpu/cjs/index.js +6004 -0
  179. package/dist/webgpu/esm/index.js +5972 -0
  180. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  181. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  182. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  183. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  184. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  185. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  186. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  187. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  188. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  189. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  190. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  191. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  192. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  193. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  194. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  195. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  196. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  197. package/dist/webgpu/types/camera/index.d.ts +2 -0
  198. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  199. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  200. package/dist/webgpu/types/core/constants.d.ts +59 -0
  201. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  202. package/dist/webgpu/types/core/index.d.ts +2 -0
  203. package/dist/webgpu/types/core/math.d.ts +37 -0
  204. package/dist/webgpu/types/core/types.d.ts +125 -0
  205. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  206. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  207. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  208. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  209. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  210. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  211. package/dist/webgpu/types/index.d.ts +32 -0
  212. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  213. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  214. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  215. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  216. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  217. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  218. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  219. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  220. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  221. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  222. package/package.json +96 -26
  223. package/dist/core/binary-codec/binary-codec.js +0 -354
  224. package/dist/core/binary-codec/index.js +0 -1
  225. package/dist/core/driver/driver.js +0 -47
  226. package/dist/core/driver/drivers/immediate.js +0 -61
  227. package/dist/core/driver/drivers/index.js +0 -3
  228. package/dist/core/driver/drivers/raf.js +0 -62
  229. package/dist/core/driver/drivers/timeout.js +0 -71
  230. package/dist/core/driver/index.js +0 -2
  231. package/dist/core/events/event-system.js +0 -88
  232. package/dist/core/events/index.js +0 -1
  233. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  234. package/dist/core/fixed-ticker/index.js +0 -1
  235. package/dist/core/generate-id/generate-id.js +0 -25
  236. package/dist/core/generate-id/index.js +0 -1
  237. package/dist/core/index.js +0 -10
  238. package/dist/core/input/index.js +0 -2
  239. package/dist/core/input/manager.js +0 -211
  240. package/dist/core/input/sources/browser.js +0 -29
  241. package/dist/core/input/sources/index.js +0 -1
  242. package/dist/core/lerp/index.js +0 -1
  243. package/dist/core/lerp/lerp.js +0 -42
  244. package/dist/core/navmesh/index.js +0 -1
  245. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  246. package/dist/core/navmesh/navmesh.js +0 -799
  247. package/dist/core/navmesh/navmesh.worker.js +0 -79
  248. package/dist/core/pooled-codec/index.js +0 -1
  249. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  250. package/dist/core/prediction/index.js +0 -1
  251. package/dist/core/prediction/prediction.js +0 -99
  252. package/dist/core.esm.js +0 -1
  253. package/dist/core.js +0 -1
  254. package/dist/ecs/component-store.js +0 -175
  255. package/dist/ecs/component.js +0 -43
  256. package/dist/ecs/entity-handle.js +0 -515
  257. package/dist/ecs/example.js +0 -125
  258. package/dist/ecs/index.js +0 -4
  259. package/dist/ecs/system-builder.js +0 -249
  260. package/dist/ecs/world-systems.js +0 -79
  261. package/dist/ecs/world.js +0 -767
  262. package/dist/game/index.js +0 -1
  263. package/dist/game/loop/index.js +0 -1
  264. package/dist/game/loop/loop.js +0 -108
  265. package/dist/index.js +0 -26
  266. package/dist/net/adapters/browser-websocket.js +0 -74
  267. package/dist/net/adapters/bun-websocket.js +0 -245
  268. package/dist/net/buffer-pool.js +0 -89
  269. package/dist/net/client.js +0 -586
  270. package/dist/net/index.js +0 -58
  271. package/dist/net/server.js +0 -974
  272. package/dist/net/types.js +0 -31
  273. package/dist/net/validators.js +0 -88
  274. package/dist/protocol/index.js +0 -92
  275. package/dist/protocol/intent/define-intent.js +0 -125
  276. package/dist/protocol/intent/index.js +0 -91
  277. package/dist/protocol/intent/intent-registry.js +0 -91
  278. package/dist/protocol/rpc/define-rpc.js +0 -84
  279. package/dist/protocol/rpc/index.js +0 -3
  280. package/dist/protocol/rpc/rpc-registry.js +0 -159
  281. package/dist/protocol/rpc/rpc.js +0 -12
  282. package/dist/protocol/snapshot/index.js +0 -43
  283. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  284. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  285. package/dist/protocol/snapshot/snapshot.js +0 -30
  286. package/src/core/binary-codec/README.md +0 -60
  287. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  288. package/src/core/binary-codec/binary-codec.ts +0 -448
  289. package/src/core/binary-codec/index.ts +0 -1
  290. package/src/core/driver/README.md +0 -97
  291. package/src/core/driver/driver.test.ts +0 -414
  292. package/src/core/driver/driver.ts +0 -71
  293. package/src/core/driver/drivers/immediate.ts +0 -66
  294. package/src/core/driver/drivers/index.ts +0 -3
  295. package/src/core/driver/drivers/raf.ts +0 -67
  296. package/src/core/driver/drivers/timeout.ts +0 -77
  297. package/src/core/driver/index.ts +0 -2
  298. package/src/core/events/README.md +0 -47
  299. package/src/core/events/event-system.test.ts +0 -243
  300. package/src/core/events/event-system.ts +0 -140
  301. package/src/core/events/index.ts +0 -1
  302. package/src/core/fixed-ticker/README.md +0 -77
  303. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  304. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  305. package/src/core/fixed-ticker/index.ts +0 -1
  306. package/src/core/generate-id/README.md +0 -18
  307. package/src/core/generate-id/generate-id.test.ts +0 -79
  308. package/src/core/generate-id/generate-id.ts +0 -37
  309. package/src/core/generate-id/index.ts +0 -1
  310. package/src/core/index.ts +0 -10
  311. package/src/core/input/README.md +0 -24
  312. package/src/core/input/index.ts +0 -2
  313. package/src/core/input/manager.ts +0 -259
  314. package/src/core/input/sources/browser.ts +0 -39
  315. package/src/core/input/sources/index.ts +0 -1
  316. package/src/core/input/types.ts +0 -40
  317. package/src/core/lerp/README.md +0 -79
  318. package/src/core/lerp/index.ts +0 -1
  319. package/src/core/lerp/lerp.test.ts +0 -90
  320. package/src/core/lerp/lerp.ts +0 -42
  321. package/src/core/navmesh/README.md +0 -164
  322. package/src/core/navmesh/index.ts +0 -1
  323. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  324. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  325. package/src/core/navmesh/navmesh.test.ts +0 -344
  326. package/src/core/navmesh/navmesh.ts +0 -1047
  327. package/src/core/navmesh/navmesh.worker.ts +0 -147
  328. package/src/core/pooled-codec/README.md +0 -70
  329. package/src/core/pooled-codec/index.ts +0 -1
  330. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  331. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  332. package/src/core/prediction/README.md +0 -64
  333. package/src/core/prediction/index.ts +0 -1
  334. package/src/core/prediction/prediction.test.ts +0 -423
  335. package/src/core/prediction/prediction.ts +0 -112
  336. package/src/ecs/README.md +0 -427
  337. package/src/ecs/benchmark.test.ts +0 -1645
  338. package/src/ecs/component-store.ts +0 -198
  339. package/src/ecs/component.ts +0 -90
  340. package/src/ecs/entity-handle.test.ts +0 -393
  341. package/src/ecs/entity-handle.ts +0 -563
  342. package/src/ecs/example.ts +0 -152
  343. package/src/ecs/index.ts +0 -4
  344. package/src/ecs/system-builder.ts +0 -404
  345. package/src/ecs/world-systems.ts +0 -83
  346. package/src/ecs/world.test.ts +0 -310
  347. package/src/ecs/world.ts +0 -904
  348. package/src/game/index.ts +0 -1
  349. package/src/game/loop/README.md +0 -32
  350. package/src/game/loop/index.ts +0 -1
  351. package/src/game/loop/loop.ts +0 -236
  352. package/src/index.ts +0 -32
  353. package/src/net/README.md +0 -474
  354. package/src/net/adapters/browser-websocket.ts +0 -86
  355. package/src/net/adapters/bun-websocket.ts +0 -292
  356. package/src/net/buffer-pool.ts +0 -106
  357. package/src/net/client.test.ts +0 -807
  358. package/src/net/client.ts +0 -695
  359. package/src/net/index.ts +0 -60
  360. package/src/net/server.test.ts +0 -799
  361. package/src/net/server.ts +0 -1152
  362. package/src/net/types.ts +0 -228
  363. package/src/net/validators.ts +0 -104
  364. package/src/protocol/README.md +0 -469
  365. package/src/protocol/index.ts +0 -93
  366. package/src/protocol/intent/define-intent.test.ts +0 -397
  367. package/src/protocol/intent/define-intent.ts +0 -201
  368. package/src/protocol/intent/index.ts +0 -94
  369. package/src/protocol/intent/intent-registry.test.ts +0 -198
  370. package/src/protocol/intent/intent-registry.ts +0 -112
  371. package/src/protocol/intent/intent.ts +0 -12
  372. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  373. package/src/protocol/rpc/define-rpc.ts +0 -113
  374. package/src/protocol/rpc/index.ts +0 -3
  375. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  376. package/src/protocol/rpc/rpc-registry.ts +0 -176
  377. package/src/protocol/rpc/rpc.ts +0 -37
  378. package/src/protocol/snapshot/index.ts +0 -45
  379. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  380. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  381. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  382. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  383. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  384. package/src/protocol/snapshot/snapshot.ts +0 -41
  385. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  386. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  387. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  388. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  390. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  391. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  392. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  394. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  395. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  396. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  397. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  398. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  400. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  402. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  403. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  404. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  405. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  406. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  407. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  408. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  409. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  410. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  411. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  412. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  413. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  414. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  415. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  416. /package/dist/{game → types/game}/index.d.ts +0 -0
  417. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  418. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  419. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  420. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  421. /package/dist/{net → types/net}/client.d.ts +0 -0
  422. /package/dist/{net → types/net}/server.d.ts +0 -0
  423. /package/dist/{net → types/net}/types.d.ts +0 -0
  424. /package/dist/{net → types/net}/validators.d.ts +0 -0
  425. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  426. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  427. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  428. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  429. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  430. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  431. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  432. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  433. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  434. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  435. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  436. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  437. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  438. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  439. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -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,55 @@
1
+ import { Base2DRenderer } from 'murow/renderer/base-2d-renderer';
2
+ import type { Renderer2DOptions, SpriteHandle, SpriteOptions, SpritesheetHandle, SpritesheetSource } from 'murow/renderer';
3
+ import { Camera2D } from '../camera/camera-2d';
4
+ import { GeometryBuilder, type GeometryOptions } from '../geometry/geometry-builder';
5
+ import { ComputeBuilder, type ComputeOptions } from '../compute/compute-builder';
6
+ export declare class WebGPU2DRenderer extends Base2DRenderer {
7
+ private root;
8
+ private _device;
9
+ private context;
10
+ private _format;
11
+ get device(): GPUDevice;
12
+ get format(): GPUTextureFormat;
13
+ private spriteLayout;
14
+ private textureLayout;
15
+ private dynamicData;
16
+ private staticData;
17
+ private freeList;
18
+ private batcher;
19
+ private staticDirty;
20
+ private dynamicBuffer;
21
+ private staticBuffer;
22
+ private uniformBuffer;
23
+ private slotIndexBuffer;
24
+ private slotIndexData;
25
+ private rawPipeline;
26
+ private rawSpriteBindGroup;
27
+ private rawTextureLayout;
28
+ private rawDynamicBuffer;
29
+ private rawStaticBuffer;
30
+ private rawUniformBuffer;
31
+ private rawSlotIndexBuffer;
32
+ private sheetBindGroups;
33
+ private sheets;
34
+ private nextSheetId;
35
+ readonly camera: Camera2D;
36
+ private uniformData;
37
+ private resizeObserver;
38
+ private resizeCallbacks;
39
+ constructor(canvas: HTMLCanvasElement, options: Renderer2DOptions);
40
+ init(): Promise<void>;
41
+ private setupResizeObserver;
42
+ /**
43
+ * Register a callback that fires when the canvas resizes.
44
+ * Receives the new width and height in physical pixels.
45
+ */
46
+ onResize(callback: (width: number, height: number) => void): void;
47
+ loadSpritesheet(source: SpritesheetSource): Promise<SpritesheetHandle>;
48
+ addSprite(opts: SpriteOptions): SpriteHandle;
49
+ removeSprite(sprite: SpriteHandle): void;
50
+ storePreviousState(): void;
51
+ createGeometry(name: string, options: GeometryOptions): GeometryBuilder;
52
+ createCompute(name: string, options: ComputeOptions): ComputeBuilder;
53
+ render(alpha: number): void;
54
+ destroy(): void;
55
+ }
@@ -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/types";
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,101 @@
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
+ }
12
+ export interface AnimationChannel {
13
+ /** Index into the skin's joint list (not node index). */
14
+ jointIndex: number;
15
+ path: 'translation' | 'rotation' | 'scale';
16
+ timestamps: Float32Array;
17
+ /** vec3 for translation/scale, vec4 (quaternion xyzw) for rotation. */
18
+ values: Float32Array;
19
+ interpolation: 'LINEAR' | 'STEP';
20
+ }
21
+ export interface AnimationClipData {
22
+ name: string;
23
+ duration: number;
24
+ channels: AnimationChannel[];
25
+ }
26
+ export interface PrimitiveSkinAttributes {
27
+ /** Joint indices — vertexCount * 4. */
28
+ joints: Uint16Array;
29
+ /** Joint weights — vertexCount * 4. */
30
+ weights: Float32Array;
31
+ }
32
+ export type AccessorReader = (accessorIndex: number) => {
33
+ data: Float32Array | Uint16Array | Uint32Array | Uint8Array;
34
+ count: number;
35
+ elementSize: number;
36
+ };
37
+ /**
38
+ * Parse skin data from a glTF skin definition.
39
+ */
40
+ export declare function parseSkin(gltf: any, skinIndex: number, getAccessorData: AccessorReader): SkinData;
41
+ /**
42
+ * Parse animation clips that target joints in a skin.
43
+ */
44
+ export declare function parseAnimations(gltf: any, skinData: SkinData, getAccessorData: AccessorReader): AnimationClipData[];
45
+ /**
46
+ * Extract JOINTS_0 and WEIGHTS_0 from a glTF primitive.
47
+ * Returns null if the primitive has no skinning attributes.
48
+ */
49
+ export declare function parsePrimitiveSkinAttributes(primitive: any, getAccessorData: AccessorReader): PrimitiveSkinAttributes | null;
50
+ /**
51
+ * Get a node's local TRS as [tx, ty, tz, qx, qy, qz, qw, sx, sy, sz].
52
+ */
53
+ export declare function getNodeTRS(node: any): Float32Array;
54
+ /** Packed GPU-ready animation data for all skins/clips loaded so far. */
55
+ export interface PackedAnimationData {
56
+ /** Flat channel descriptors: [jointIndex, pathAndInterp, keyframeCount, dataOffset] per channel */
57
+ channels: {
58
+ jointIndex: number;
59
+ pathAndInterp: number;
60
+ keyframeCount: number;
61
+ dataOffset: number;
62
+ }[];
63
+ /** Flat keyframe data: timestamps then values for each channel */
64
+ keyframeData: number[];
65
+ /** Clip descriptors: [channelStart, channelCount, duration, loop] */
66
+ clips: {
67
+ channelStart: number;
68
+ channelCount: number;
69
+ duration: number;
70
+ looping: number;
71
+ }[];
72
+ /** Per-skin entries */
73
+ skins: {
74
+ jointCount: number;
75
+ parentOffset: number;
76
+ topoOffset: number;
77
+ ibmOffset: number;
78
+ restTRSOffset: number;
79
+ skelRootMatIndex: number;
80
+ clipOffset: number;
81
+ jointLookupStart: number;
82
+ }[];
83
+ /** Flat parent joint indices (i32), all skins concatenated */
84
+ parentIndices: number[];
85
+ /** Flat topological order (u32), all skins concatenated */
86
+ topoOrder: number[];
87
+ /** Flat inverse bind matrices (mat4x4, 16 floats each), all skins concatenated */
88
+ ibmData: number[];
89
+ /** Flat rest pose TRS (10 floats per joint), all skins concatenated */
90
+ restTRS: number[];
91
+ /** Skeleton root matrices (16 floats each), one per skin */
92
+ skelRootMats: number[];
93
+ /** Per-joint channel lookup: [clipIdx * maxJoints * 2 + joint * 2] = (channelStart, channelCount) */
94
+ jointChannelLookup: number[];
95
+ }
96
+ export declare function createPackedAnimationData(): PackedAnimationData;
97
+ /**
98
+ * Pack a skin + its animations into the flat GPU buffers.
99
+ * Returns the skin index within the packed data.
100
+ */
101
+ export declare function packSkinAndAnimations(packed: PackedAnimationData, skinData: SkinData, clips: AnimationClipData[], gltfNodes: any[]): number;
@@ -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,216 @@
1
+ import { Base3DRenderer } from 'murow/renderer/base-3d-renderer';
2
+ import type { Renderer3DOptions } from 'murow/renderer/types';
3
+ import { ComputeBuilder, type ComputeOptions } from '../compute/compute-builder';
4
+ import { Camera3D } from '../camera/camera-3d';
5
+ import { type PlayOptions } from './skeletal-animation';
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
+ model: ModelHandle | GltfModel;
50
+ x?: number;
51
+ y?: number;
52
+ z?: number;
53
+ rotX?: number;
54
+ rotY?: number;
55
+ rotZ?: number;
56
+ scaleX?: number;
57
+ scaleY?: number;
58
+ scaleZ?: number;
59
+ color?: [number, number, number];
60
+ }
61
+ export interface WebGPU3DRendererOptions extends Renderer3DOptions {
62
+ maxSkinnedInstances?: number;
63
+ maxBonesPerSkin?: number;
64
+ }
65
+ export declare class WebGPU3DRenderer extends Base3DRenderer {
66
+ private root;
67
+ private device;
68
+ private context;
69
+ private resizeObserver;
70
+ private resizeCallbacks;
71
+ private format;
72
+ private meshLayout;
73
+ private dynamicData;
74
+ private staticData;
75
+ private slotIndexData;
76
+ private freeList;
77
+ private batcher;
78
+ private staticDirty;
79
+ private instanceModelIds;
80
+ private dynamicBuffer;
81
+ private staticBuffer;
82
+ private uniformBuffer;
83
+ private slotIndexBuffer;
84
+ private rawPipeline;
85
+ private rawBindGroup;
86
+ private rawDynamicBuffer;
87
+ private rawStaticBuffer;
88
+ private rawUniformBuffer;
89
+ private rawSlotIndexBuffer;
90
+ private depthTexture;
91
+ private rawTexturedPipeline;
92
+ private models;
93
+ private nextModelId;
94
+ private skinnedModels;
95
+ private skinnedMeshLayout;
96
+ private rawSkinnedPipeline;
97
+ private rawSkinnedTexturedPipeline;
98
+ private rawSkinnedBindGroup;
99
+ private boneMatrixData;
100
+ private rawBoneMatrixBuffer;
101
+ private boneMatrixDirty;
102
+ private readonly maxTotalBones;
103
+ private packedAnimData;
104
+ private animComputeKernel;
105
+ private animComputeNeedsRebuild;
106
+ private animClipTableOffset;
107
+ private animChannelTableOffset;
108
+ private animJointLookupOffset;
109
+ private gpuAnimInstanceStates;
110
+ private gpuInstData;
111
+ private gpuInstDV;
112
+ private skinnedDynamicData;
113
+ private skinnedStaticData;
114
+ private skinnedSlotIndexData;
115
+ private skinnedFreeList;
116
+ private skinnedBatcher;
117
+ private skinnedStaticDirty;
118
+ private skinnedInstanceModelIds;
119
+ private skinnedInstanceBoneOffsets;
120
+ private skinnedAnimStates;
121
+ private nextBoneOffset;
122
+ private readonly maxSkinnedInstances;
123
+ private readonly maxBonesPerSkin;
124
+ private rawSkinnedDynamicBuffer;
125
+ private rawSkinnedStaticBuffer;
126
+ private rawSkinnedUniformBuffer;
127
+ private rawSkinnedSlotIndexBuffer;
128
+ private frustumPlanes;
129
+ readonly camera: Camera3D;
130
+ private uniformData;
131
+ private lastRenderTime;
132
+ constructor(canvas: HTMLCanvasElement, options: WebGPU3DRendererOptions);
133
+ init(): Promise<void>;
134
+ private setupResizeObserver;
135
+ /**
136
+ * Register a callback that fires when the canvas resizes.
137
+ * Receives the new width and height in physical pixels.
138
+ */
139
+ onResize(callback: (width: number, height: number) => void): void;
140
+ createCompute(name: string, options: ComputeOptions): ComputeBuilder;
141
+ /**
142
+ * Create a flat grid mesh on the XZ plane at Y=0.
143
+ *
144
+ * ```ts
145
+ * const grid = renderer.createGrid({ size: 20, step: 1, lineWidth: 0.005 });
146
+ * renderer.addInstance({ model: grid, color: [0.3, 0.3, 0.3] });
147
+ * ```
148
+ */
149
+ createGrid(opts?: {
150
+ size?: number;
151
+ step?: number;
152
+ lineWidth?: number;
153
+ }): ModelHandle;
154
+ /**
155
+ * Register a model. Returns a handle for addInstance().
156
+ *
157
+ * ```ts
158
+ * const hero = renderer.loadModel({
159
+ * positions: new Float32Array([...]),
160
+ * normals: new Float32Array([...]), // optional — auto-computed from faces
161
+ * uvs: new Float32Array([...]), // optional
162
+ * indices: new Uint16Array([...]), // optional
163
+ * texture: myImageBitmap, // optional
164
+ * });
165
+ * ```
166
+ */
167
+ loadModel(data: ModelData): ModelHandle;
168
+ /**
169
+ * Register a skinned model with joint/weight vertex data.
170
+ * Called internally by loadGltf when a skin is detected.
171
+ */
172
+ private loadSkinnedModel;
173
+ /**
174
+ * Auto-compute flat normals from triangle faces.
175
+ */
176
+ private computeNormals;
177
+ /**
178
+ * Load a glTF/GLB model from a URL. Returns one ModelHandle per primitive.
179
+ * Most models have multiple primitives (body parts, material groups, etc.).
180
+ *
181
+ * ```ts
182
+ * const model = await renderer.loadGltf('assets/hero.glb');
183
+ * const instance = renderer.addInstance({ model, x: 0, y: 0, z: 0 });
184
+ * instance.playAnimation?.('walk');
185
+ * ```
186
+ */
187
+ loadGltf(url: string, opts?: {
188
+ animations?: string[];
189
+ }): Promise<GltfModel>;
190
+ /**
191
+ * Add an instance. For skinned models, pass `linkedTo` to share bone matrices
192
+ * with another instance (e.g., when spawning all parts of a character).
193
+ */
194
+ addInstance(opts: MeshInstanceOptions): InstanceHandle;
195
+ private addGltfInstance;
196
+ private addSkinnedInstance;
197
+ /**
198
+ * Update skeletal animations for all skinned instances. Call once per tick.
199
+ */
200
+ private updatedBoneOffsets;
201
+ private updateAnimations;
202
+ removeInstance(handle: MeshInstanceHandle): void;
203
+ storePreviousState(): void;
204
+ render(alpha: number): void;
205
+ /**
206
+ * Extract 6 frustum planes from a column-major VP matrix.
207
+ * Each plane is [a, b, c, d] where ax + by + cz + d >= 0 means inside.
208
+ */
209
+ private extractFrustumPlanes;
210
+ /**
211
+ * Test if a bounding sphere is inside or intersects the frustum.
212
+ * Returns true if visible (should be drawn).
213
+ */
214
+ private isInFrustum;
215
+ destroy(): void;
216
+ }