murow 0.0.60 → 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 (425) 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/loop → types/core/driver}/drivers/immediate.d.ts +1 -1
  156. package/dist/{core/loop → types/core/driver}/drivers/raf.d.ts +1 -1
  157. package/dist/{core/loop → types/core/driver}/drivers/timeout.d.ts +1 -1
  158. package/dist/{core/loop → types/core/driver}/index.d.ts +1 -1
  159. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  160. package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +1 -1
  161. package/dist/types/core/free-list/free-list.d.ts +31 -0
  162. package/dist/types/core/free-list/index.d.ts +1 -0
  163. package/dist/{core → types/core}/index.d.ts +7 -1
  164. package/dist/types/core/input/index.d.ts +3 -0
  165. package/dist/types/core/input/manager.d.ts +56 -0
  166. package/dist/types/core/input/sources/browser.d.ts +9 -0
  167. package/dist/types/core/input/sources/index.d.ts +1 -0
  168. package/dist/types/core/input/types.d.ts +36 -0
  169. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  170. package/dist/types/core/ray/index.d.ts +2 -0
  171. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  172. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  173. package/dist/types/core/simple-rng/index.d.ts +1 -0
  174. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  175. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  176. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  177. package/dist/{ecs → types/ecs}/system-builder.d.ts +20 -9
  178. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  179. package/dist/types/game/index.d.ts +1 -0
  180. package/dist/types/game/loop/index.d.ts +1 -0
  181. package/dist/types/game/loop/loop.d.ts +175 -0
  182. package/dist/{index.d.ts → types/index.d.ts} +2 -0
  183. package/dist/{net → types/net}/index.d.ts +2 -2
  184. package/dist/{net → types/net}/server.d.ts +39 -19
  185. package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +15 -0
  186. package/dist/{protocol → types/protocol}/intent/index.d.ts +1 -1
  187. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  188. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  189. package/dist/types/renderer/base-renderer.d.ts +21 -0
  190. package/dist/types/renderer/index.d.ts +4 -0
  191. package/dist/types/renderer/types.d.ts +79 -0
  192. package/dist/webgpu/cjs/index.js +6004 -0
  193. package/dist/webgpu/esm/index.js +5972 -0
  194. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  195. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  196. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  197. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  198. package/dist/webgpu/types/2d/sprite-accessor.test.d.ts +1 -0
  199. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  200. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  201. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  202. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  203. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  204. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  205. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  206. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  207. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  208. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  209. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  210. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  211. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  212. package/dist/webgpu/types/camera/index.d.ts +2 -0
  213. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  214. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  215. package/dist/webgpu/types/core/constants.d.ts +59 -0
  216. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  217. package/dist/webgpu/types/core/index.d.ts +2 -0
  218. package/dist/webgpu/types/core/math.d.ts +37 -0
  219. package/dist/webgpu/types/core/types.d.ts +125 -0
  220. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  221. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  222. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  223. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  224. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  225. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  226. package/dist/webgpu/types/index.d.ts +32 -0
  227. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  228. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  229. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  230. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  231. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  232. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  233. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  234. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  235. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  236. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  237. package/package.json +96 -26
  238. package/dist/core/binary-codec/binary-codec.js +0 -354
  239. package/dist/core/binary-codec/index.js +0 -1
  240. package/dist/core/events/event-system.js +0 -88
  241. package/dist/core/events/index.js +0 -1
  242. package/dist/core/fixed-ticker/fixed-ticker.js +0 -101
  243. package/dist/core/fixed-ticker/index.js +0 -1
  244. package/dist/core/generate-id/generate-id.js +0 -25
  245. package/dist/core/generate-id/index.js +0 -1
  246. package/dist/core/index.js +0 -9
  247. package/dist/core/lerp/index.js +0 -1
  248. package/dist/core/lerp/lerp.js +0 -42
  249. package/dist/core/loop/drivers/immediate.js +0 -61
  250. package/dist/core/loop/drivers/index.js +0 -3
  251. package/dist/core/loop/drivers/raf.js +0 -62
  252. package/dist/core/loop/drivers/timeout.js +0 -71
  253. package/dist/core/loop/index.js +0 -2
  254. package/dist/core/loop/loop.js +0 -47
  255. package/dist/core/navmesh/index.js +0 -1
  256. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  257. package/dist/core/navmesh/navmesh.js +0 -799
  258. package/dist/core/navmesh/navmesh.worker.js +0 -79
  259. package/dist/core/pooled-codec/index.js +0 -1
  260. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  261. package/dist/core/prediction/index.js +0 -1
  262. package/dist/core/prediction/prediction.js +0 -99
  263. package/dist/core.esm.js +0 -1
  264. package/dist/core.js +0 -1
  265. package/dist/ecs/component-store.js +0 -175
  266. package/dist/ecs/component.js +0 -43
  267. package/dist/ecs/entity-handle.js +0 -515
  268. package/dist/ecs/example.js +0 -125
  269. package/dist/ecs/index.js +0 -4
  270. package/dist/ecs/system-builder.js +0 -180
  271. package/dist/ecs/system.d.ts +0 -63
  272. package/dist/ecs/system.js +0 -92
  273. package/dist/ecs/world-systems.js +0 -79
  274. package/dist/ecs/world.js +0 -684
  275. package/dist/index.js +0 -24
  276. package/dist/net/adapters/browser-websocket.js +0 -74
  277. package/dist/net/adapters/bun-websocket.js +0 -245
  278. package/dist/net/buffer-pool.js +0 -89
  279. package/dist/net/client.js +0 -586
  280. package/dist/net/index.js +0 -58
  281. package/dist/net/server.js +0 -938
  282. package/dist/net/types.js +0 -31
  283. package/dist/net/validators.js +0 -88
  284. package/dist/protocol/index.js +0 -92
  285. package/dist/protocol/intent/define-intent.js +0 -125
  286. package/dist/protocol/intent/index.js +0 -91
  287. package/dist/protocol/intent/intent-registry.js +0 -91
  288. package/dist/protocol/rpc/define-rpc.js +0 -84
  289. package/dist/protocol/rpc/index.js +0 -3
  290. package/dist/protocol/rpc/rpc-registry.js +0 -159
  291. package/dist/protocol/rpc/rpc.js +0 -12
  292. package/dist/protocol/snapshot/index.js +0 -43
  293. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  294. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  295. package/dist/protocol/snapshot/snapshot.js +0 -30
  296. package/src/core/binary-codec/README.md +0 -60
  297. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  298. package/src/core/binary-codec/binary-codec.ts +0 -448
  299. package/src/core/binary-codec/index.ts +0 -1
  300. package/src/core/events/README.md +0 -47
  301. package/src/core/events/event-system.test.ts +0 -243
  302. package/src/core/events/event-system.ts +0 -140
  303. package/src/core/events/index.ts +0 -1
  304. package/src/core/fixed-ticker/README.md +0 -77
  305. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  306. package/src/core/fixed-ticker/fixed-ticker.ts +0 -169
  307. package/src/core/fixed-ticker/index.ts +0 -1
  308. package/src/core/generate-id/README.md +0 -18
  309. package/src/core/generate-id/generate-id.test.ts +0 -79
  310. package/src/core/generate-id/generate-id.ts +0 -37
  311. package/src/core/generate-id/index.ts +0 -1
  312. package/src/core/index.ts +0 -9
  313. package/src/core/lerp/README.md +0 -79
  314. package/src/core/lerp/index.ts +0 -1
  315. package/src/core/lerp/lerp.test.ts +0 -90
  316. package/src/core/lerp/lerp.ts +0 -42
  317. package/src/core/loop/README.md +0 -97
  318. package/src/core/loop/drivers/immediate.ts +0 -66
  319. package/src/core/loop/drivers/index.ts +0 -3
  320. package/src/core/loop/drivers/raf.ts +0 -67
  321. package/src/core/loop/drivers/timeout.ts +0 -77
  322. package/src/core/loop/index.ts +0 -2
  323. package/src/core/loop/loop.test.ts +0 -414
  324. package/src/core/loop/loop.ts +0 -71
  325. package/src/core/navmesh/README.md +0 -164
  326. package/src/core/navmesh/index.ts +0 -1
  327. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  328. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  329. package/src/core/navmesh/navmesh.test.ts +0 -344
  330. package/src/core/navmesh/navmesh.ts +0 -1047
  331. package/src/core/navmesh/navmesh.worker.ts +0 -147
  332. package/src/core/pooled-codec/README.md +0 -70
  333. package/src/core/pooled-codec/index.ts +0 -1
  334. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  335. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  336. package/src/core/prediction/README.md +0 -64
  337. package/src/core/prediction/index.ts +0 -1
  338. package/src/core/prediction/prediction.test.ts +0 -423
  339. package/src/core/prediction/prediction.ts +0 -112
  340. package/src/ecs/README.md +0 -427
  341. package/src/ecs/benchmark.test.ts +0 -1645
  342. package/src/ecs/component-store.ts +0 -198
  343. package/src/ecs/component.ts +0 -90
  344. package/src/ecs/entity-handle.test.ts +0 -393
  345. package/src/ecs/entity-handle.ts +0 -563
  346. package/src/ecs/example.ts +0 -152
  347. package/src/ecs/index.ts +0 -4
  348. package/src/ecs/system-builder.ts +0 -309
  349. package/src/ecs/system.ts +0 -111
  350. package/src/ecs/world-systems.ts +0 -83
  351. package/src/ecs/world.test.ts +0 -310
  352. package/src/ecs/world.ts +0 -828
  353. package/src/index.ts +0 -28
  354. package/src/net/README.md +0 -474
  355. package/src/net/adapters/browser-websocket.ts +0 -86
  356. package/src/net/adapters/bun-websocket.ts +0 -292
  357. package/src/net/buffer-pool.ts +0 -106
  358. package/src/net/client.test.ts +0 -807
  359. package/src/net/client.ts +0 -695
  360. package/src/net/index.ts +0 -60
  361. package/src/net/server.test.ts +0 -799
  362. package/src/net/server.ts +0 -1116
  363. package/src/net/types.ts +0 -228
  364. package/src/net/validators.ts +0 -104
  365. package/src/protocol/README.md +0 -469
  366. package/src/protocol/index.ts +0 -93
  367. package/src/protocol/intent/define-intent.test.ts +0 -397
  368. package/src/protocol/intent/define-intent.ts +0 -182
  369. package/src/protocol/intent/index.ts +0 -94
  370. package/src/protocol/intent/intent-registry.test.ts +0 -198
  371. package/src/protocol/intent/intent-registry.ts +0 -112
  372. package/src/protocol/intent/intent.ts +0 -12
  373. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  374. package/src/protocol/rpc/define-rpc.ts +0 -113
  375. package/src/protocol/rpc/index.ts +0 -3
  376. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  377. package/src/protocol/rpc/rpc-registry.ts +0 -176
  378. package/src/protocol/rpc/rpc.ts +0 -37
  379. package/src/protocol/snapshot/index.ts +0 -45
  380. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  381. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  382. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  383. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  384. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  385. package/src/protocol/snapshot/snapshot.ts +0 -41
  386. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  387. /package/dist/{core/loop/loop.d.ts → types/core/driver/driver.d.ts} +0 -0
  388. /package/dist/{core/loop → types/core/driver}/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  390. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  391. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  392. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  394. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  395. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  396. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  397. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  398. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  400. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  402. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  403. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  404. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  405. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  406. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  407. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  408. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  409. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  410. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  411. /package/dist/{net → types/net}/client.d.ts +0 -0
  412. /package/dist/{net → types/net}/types.d.ts +0 -0
  413. /package/dist/{net → types/net}/validators.d.ts +0 -0
  414. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  415. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  416. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  417. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  418. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  419. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  420. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  421. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  422. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  423. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  424. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  425. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/animation.test.d.ts} +0 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * TypeGPU struct definitions for the 2D and 3D renderers.
3
+ * These define the GPU-side data layout — used by shaders and bind group layouts.
4
+ *
5
+ * All fields are f32 to guarantee contiguous layout matching our flat Float32Arrays.
6
+ * No vec2f/vec4f here — that would introduce alignment padding.
7
+ */
8
+ import * as d from 'typegpu/data';
9
+ export declare const DynamicSprite: d.WgslStruct<{
10
+ prevX: d.F32;
11
+ prevY: d.F32;
12
+ currX: d.F32;
13
+ currY: d.F32;
14
+ prevRotation: d.F32;
15
+ currRotation: d.F32;
16
+ }>;
17
+ export declare const StaticSprite: d.WgslStruct<{
18
+ scaleX: d.F32;
19
+ scaleY: d.F32;
20
+ uvMinX: d.F32;
21
+ uvMinY: d.F32;
22
+ uvMaxX: d.F32;
23
+ uvMaxY: d.F32;
24
+ layer: d.F32;
25
+ flipX: d.F32;
26
+ flipY: d.F32;
27
+ opacity: d.F32;
28
+ tintR: d.F32;
29
+ tintG: d.F32;
30
+ tintB: d.F32;
31
+ tintA: d.F32;
32
+ }>;
33
+ export declare const SpriteUniforms: d.WgslStruct<{
34
+ viewProjection: d.Mat3x3f;
35
+ alpha: d.F32;
36
+ resolution: d.Vec2f;
37
+ }>;
38
+ export declare const DynamicInstance3D: d.WgslStruct<{
39
+ prevPosX: d.F32;
40
+ prevPosY: d.F32;
41
+ prevPosZ: d.F32;
42
+ currPosX: d.F32;
43
+ currPosY: d.F32;
44
+ currPosZ: d.F32;
45
+ prevRotX: d.F32;
46
+ prevRotY: d.F32;
47
+ prevRotZ: d.F32;
48
+ prevRotW: d.F32;
49
+ currRotX: d.F32;
50
+ currRotY: d.F32;
51
+ currRotZ: d.F32;
52
+ currRotW: d.F32;
53
+ }>;
54
+ export declare const StaticInstance3D: d.WgslStruct<{
55
+ scaleX: d.F32;
56
+ scaleY: d.F32;
57
+ scaleZ: d.F32;
58
+ materialId: d.F32;
59
+ opacity: d.F32;
60
+ tintR: d.F32;
61
+ tintG: d.F32;
62
+ tintB: d.F32;
63
+ tintA: d.F32;
64
+ custom0: d.F32;
65
+ custom1: d.F32;
66
+ }>;
67
+ export declare const DynamicMesh: d.WgslStruct<{
68
+ prevPosX: d.F32;
69
+ prevPosY: d.F32;
70
+ prevPosZ: d.F32;
71
+ currPosX: d.F32;
72
+ currPosY: d.F32;
73
+ currPosZ: d.F32;
74
+ prevRotX: d.F32;
75
+ prevRotY: d.F32;
76
+ prevRotZ: d.F32;
77
+ currRotX: d.F32;
78
+ currRotY: d.F32;
79
+ currRotZ: d.F32;
80
+ }>;
81
+ export declare const DYNAMIC_MESH_FLOATS = 12;
82
+ export declare const StaticMesh: d.WgslStruct<{
83
+ scaleX: d.F32;
84
+ scaleY: d.F32;
85
+ scaleZ: d.F32;
86
+ colorR: d.F32;
87
+ colorG: d.F32;
88
+ colorB: d.F32;
89
+ }>;
90
+ export declare const STATIC_MESH_FLOATS = 6;
91
+ export declare const SkinnedStaticMesh: d.WgslStruct<{
92
+ scaleX: d.F32;
93
+ scaleY: d.F32;
94
+ scaleZ: d.F32;
95
+ colorR: d.F32;
96
+ colorG: d.F32;
97
+ colorB: d.F32;
98
+ boneOffset: d.U32;
99
+ }>;
100
+ export declare const SKINNED_STATIC_MESH_FLOATS = 7;
101
+ export declare const MeshUniforms: d.WgslStruct<{
102
+ viewProjection: d.Mat4x4f;
103
+ alpha: d.F32;
104
+ lightDirX: d.F32;
105
+ lightDirY: d.F32;
106
+ lightDirZ: d.F32;
107
+ }>;
108
+ /** Per-instance animation state, uploaded from CPU each frame. */
109
+ export declare const InstanceAnimStateGPU: d.WgslStruct<{
110
+ clipId: d.I32;
111
+ time: d.F32;
112
+ skinIndex: d.U32;
113
+ boneOffset: d.U32;
114
+ prevClipId: d.I32;
115
+ prevTime: d.F32;
116
+ blendWeight: d.F32;
117
+ _pad: d.F32;
118
+ }>;
119
+ /** Uniforms for the animation compute shader. */
120
+ export declare const AnimComputeUniforms: d.WgslStruct<{
121
+ instanceCount: d.U32;
122
+ clipTableOffset: d.U32;
123
+ channelTableOffset: d.U32;
124
+ jointLookupOffset: d.U32;
125
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Built-in geometry primitives.
3
+ * Each returns a typed array of vertex data and optional indices.
4
+ */
5
+ export type BuiltInGeometry = 'quad' | 'triangle' | 'line' | 'point' | 'circle' | 'cube' | 'sphere' | 'cylinder' | 'cone';
6
+ export interface GeometryData {
7
+ /** Interleaved vertex data: [posX, posY, (posZ,) u, v, ...] */
8
+ vertices: Float32Array;
9
+ /** Optional index buffer */
10
+ indices?: Uint16Array | Uint32Array;
11
+ /** Number of vertices */
12
+ vertexCount: number;
13
+ /** Floats per vertex (stride) */
14
+ floatsPerVertex: number;
15
+ /** Whether this is a 3D geometry */
16
+ is3D: boolean;
17
+ }
18
+ /**
19
+ * 2D quad: 6 vertices (two triangles), each with position (x,y) + uv (u,v).
20
+ * Position range: [-1, 1], UV range: [0, 1].
21
+ */
22
+ export declare function createQuad(): GeometryData;
23
+ /**
24
+ * 2D triangle: 3 vertices, each with position (x,y) + uv (u,v).
25
+ */
26
+ export declare function createTriangle(): GeometryData;
27
+ /**
28
+ * 2D line: 2 vertices, position only.
29
+ */
30
+ export declare function createLine(): GeometryData;
31
+ /**
32
+ * 2D point: single vertex at origin.
33
+ */
34
+ export declare function createPoint(): GeometryData;
35
+ /**
36
+ * 2D circle: tessellated triangle fan, configurable segments.
37
+ */
38
+ export declare function createCircle(segments?: number): GeometryData;
39
+ /**
40
+ * 3D cube: 36 vertices with position (x,y,z) + normal (nx,ny,nz) + uv (u,v).
41
+ */
42
+ export declare function createCube(): GeometryData;
43
+ /**
44
+ * 3D sphere: tessellated with position + normal + uv.
45
+ */
46
+ export declare function createSphere(latSegments?: number, lonSegments?: number): GeometryData;
47
+ /**
48
+ * 3D cylinder: tessellated with position + normal + uv.
49
+ */
50
+ export declare function createCylinder(segments?: number): GeometryData;
51
+ /**
52
+ * 3D cone: tessellated with position + normal + uv.
53
+ */
54
+ export declare function createCone(segments?: number): GeometryData;
55
+ /**
56
+ * Resolve a built-in geometry name to actual data.
57
+ */
58
+ export declare function resolveBuiltInGeometry(name: BuiltInGeometry): GeometryData;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,281 @@
1
+ import type { TgpuRoot, TgpuBuffer, TgpuRenderPipeline, TgpuBindGroup, TgpuBindGroupLayout, TgpuVertexFn, TgpuFragmentFn } from 'typegpu';
2
+ import type { AnyWgslData } from 'typegpu/data';
3
+ import { d } from '../shaders/typegpu';
4
+ import type { BuiltInGeometry, GeometryData } from './built-in';
5
+ import type { ComputeKernel } from '../compute/compute-builder';
6
+ /** Map a TypeGPU data type to its JS value representation. */
7
+ type DataToValue<T> = T extends typeof d.f32 ? number : T extends typeof d.vec2f ? [number, number] | number[] : T extends typeof d.vec3f ? [number, number, number] | number[] : T extends typeof d.vec4f ? [number, number, number, number] | number[] : number | number[];
8
+ /** Partial record mapping field names to their JS values. */
9
+ type FieldValues<T extends Record<string, AnyWgslData>> = {
10
+ [K in keyof T]?: DataToValue<T[K]>;
11
+ };
12
+ /** All instance field names (dynamic + static). */
13
+ type AllFields<D extends Record<string, AnyWgslData>, S extends Record<string, AnyWgslData>> = keyof D | keyof S;
14
+ export interface CustomGeometryLayout {
15
+ layout?: Record<string, {
16
+ type: string;
17
+ size: number;
18
+ }>;
19
+ vertices?: Array<Record<string, number | number[]>>;
20
+ indices?: number[];
21
+ }
22
+ export interface GeometryOptions {
23
+ maxInstances: number;
24
+ geometry: BuiltInGeometry | CustomGeometryLayout;
25
+ }
26
+ /** Typed instance layout config with inferred field types. */
27
+ export interface InstanceLayoutConfig<D extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, S extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
28
+ dynamic: D;
29
+ static: S;
30
+ }
31
+ export interface GeometryDataLayout<D extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, S extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, U extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
32
+ dataLayout: TgpuBindGroupLayout;
33
+ instanceLayout: InstanceLayoutConfig<D, S>;
34
+ uniformDefs: U;
35
+ }
36
+ export declare function getFieldFloats(desc: AnyWgslData): number;
37
+ export declare function createGeometryDataLayout<D extends Record<string, AnyWgslData>, S extends Record<string, AnyWgslData>, U extends Record<string, AnyWgslData>>(instanceLayout: InstanceLayoutConfig<D, S>, uniformDefs: U, maxInstances: number): GeometryDataLayout<D, S, U>;
38
+ export declare class CustomGeometry<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
39
+ readonly name: string;
40
+ readonly maxInstances: number;
41
+ readonly geometryData: GeometryData;
42
+ private root;
43
+ private freeList;
44
+ private layoutConfig;
45
+ private dynamicFieldNames;
46
+ private staticFieldNames;
47
+ private dynamicFloatsPerInstance;
48
+ private staticFloatsPerInstance;
49
+ private dynamicData;
50
+ private staticData;
51
+ private uniformValues;
52
+ private _dynamicDirty;
53
+ private _staticDirty;
54
+ private _uniformDirty;
55
+ private _isComputeSourced;
56
+ private _drawCount;
57
+ private activeSlots;
58
+ private activeCount;
59
+ private slotToActive;
60
+ private _ctx;
61
+ private dynamicBuffer;
62
+ private staticBuffer;
63
+ private uniformBuffer;
64
+ private pipeline;
65
+ private dataBindGroup;
66
+ private canvas;
67
+ private clearColor;
68
+ /** @internal — use GeometryBuilder to create instances. */
69
+ constructor(name: string, root: TgpuRoot, maxInstances: number, geometryData: GeometryData, layoutConfig: InstanceLayoutConfig<TDynamic, TStatic>, uniformValues: Record<string, unknown>, dynamicBuffer: TgpuBuffer<AnyWgslData>, staticBuffer: TgpuBuffer<AnyWgslData>, uniformBuffer: TgpuBuffer<AnyWgslData>, pipeline: TgpuRenderPipeline, dataBindGroup: TgpuBindGroup, canvas: HTMLCanvasElement, clearColor: [number, number, number, number], isComputeSourced?: boolean);
70
+ /**
71
+ * Set the number of instances to draw. Only needed for compute-sourced geometries
72
+ * where the instance count may change dynamically.
73
+ */
74
+ setDrawCount(count: number): void;
75
+ addInstance(data: FieldValues<TDynamic> & FieldValues<TStatic>): number;
76
+ removeInstance(slot: number): void;
77
+ setInstanceData(slot: number, data: FieldValues<TDynamic> & FieldValues<TStatic>): void;
78
+ getInstance(slot: number): InstanceAccessor<TDynamic, TStatic>;
79
+ updateUniforms(values: Partial<FieldValues<TUniforms>>): void;
80
+ getActiveCount(): number;
81
+ updateAll(callback: (ctx: InstanceContext<TDynamic, TStatic>, slot: number) => void): void;
82
+ render(): void;
83
+ destroy(): void;
84
+ }
85
+ export declare class InstanceContext<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
86
+ private dynamicData;
87
+ private staticData;
88
+ private dynamicStride;
89
+ private staticStride;
90
+ private dynamicFieldNames;
91
+ private staticFieldNames;
92
+ private layout;
93
+ private dynBase;
94
+ private statBase;
95
+ /** @internal */
96
+ _bind(dynamicData: Float32Array, staticData: Float32Array, dynamicStride: number, staticStride: number, dynamicFieldNames: string[], staticFieldNames: string[], layout: InstanceLayoutConfig<TDynamic, TStatic>): void;
97
+ /** @internal */
98
+ _setSlot(slot: number): void;
99
+ get(field: AllFields<TDynamic, TStatic> & string): number | number[];
100
+ set(field: AllFields<TDynamic, TStatic> & string, value: number | number[]): void;
101
+ private fieldOffset;
102
+ }
103
+ export declare class InstanceAccessor<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
104
+ private dynamicData;
105
+ private staticData;
106
+ private dynBase;
107
+ private statBase;
108
+ private dynamicFieldNames;
109
+ private staticFieldNames;
110
+ private layout;
111
+ private _onDynDirty;
112
+ private _onStatDirty;
113
+ constructor(dynamicData: Float32Array, staticData: Float32Array, slot: number, dynamicStride: number, staticStride: number, dynamicFieldNames: string[], staticFieldNames: string[], layout: InstanceLayoutConfig<TDynamic, TStatic>, onDynDirty: () => void, onStatDirty: () => void);
114
+ get(field: AllFields<TDynamic, TStatic> & string): number | number[];
115
+ set(field: AllFields<TDynamic, TStatic> & string, value: number | number[]): void;
116
+ private fieldOffset;
117
+ }
118
+ type ShaderResult = {
119
+ vertex: TgpuVertexFn<Record<string, AnyWgslData>, Record<string, AnyWgslData>>;
120
+ fragment: TgpuFragmentFn<Record<string, AnyWgslData>, AnyWgslData>;
121
+ };
122
+ /** Vertex input builtins available in shader functions. */
123
+ export interface VertexInput {
124
+ /** The vertex index within the current draw call (0-5 for a quad). */
125
+ vertexIndex: number;
126
+ /** The instance index within the current draw call. */
127
+ instanceIndex: number;
128
+ }
129
+ /**
130
+ * Declarative shader config — no `tgpu.vertexFn`, no `'use gpu'`.
131
+ * The builder handles all TypeGPU wiring internally.
132
+ */
133
+ export interface DeclarativeShaders<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
134
+ vertex: {
135
+ /** Varyings output from vertex to fragment (position is always included). */
136
+ out: Record<string, AnyWgslData>;
137
+ /** Vertex shader body. Receives typed context and vertex input. */
138
+ fn: (ctx: ShaderContext<TDynamic, TStatic, TUniforms>, input: VertexInput) => Record<string, unknown>;
139
+ };
140
+ fragment: {
141
+ /** Fragment shader body. Receives varyings from vertex shader. */
142
+ fn: (input: Record<string, unknown>) => unknown;
143
+ };
144
+ }
145
+ type ResolveWgsl<T> = T extends (...args: any) => infer R ? R : T;
146
+ type ResolveRecord<T extends Record<string, AnyWgslData>> = {
147
+ readonly [K in keyof T]: ResolveWgsl<T[K]>;
148
+ };
149
+ /**
150
+ * Context passed to the shader factory callback.
151
+ * Provides `dynamic`, `statics`, and `uniforms` accessors with typed field names.
152
+ *
153
+ * **These accessors are lazy** — they only resolve when accessed inside a `'use gpu'` body.
154
+ * Capture them in the closure and use inside shader functions:
155
+ *
156
+ * ```ts
157
+ * .shaders(({ dynamic, statics, uniforms }) => ({
158
+ * vertex: tgpu.vertexFn({...})(function(input) {
159
+ * 'use gpu';
160
+ * const pos = dynamic[input.instanceIndex].position;
161
+ * const time = uniforms.time;
162
+ * }),
163
+ * }))
164
+ * ```
165
+ */
166
+ export interface ShaderContext<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> {
167
+ /** Per-instance dynamic data (updated every frame). Access: `dynamic[instanceIndex].fieldName` */
168
+ readonly dynamic: Readonly<Record<number, Readonly<ResolveRecord<TDynamic>>>>;
169
+ /** Per-instance static data (set once). Access: `statics[instanceIndex].fieldName` */
170
+ readonly statics: Readonly<Record<number, Readonly<ResolveRecord<TStatic>>>>;
171
+ /** Shared uniforms. Access: `uniforms.fieldName` */
172
+ readonly uniforms: Readonly<ResolveRecord<TUniforms>>;
173
+ /** Raw TypeGPU bind group layout — escape hatch for advanced usage. */
174
+ readonly layout: TgpuBindGroupLayout;
175
+ }
176
+ type ShaderFactory<TDynamic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TStatic extends Record<string, AnyWgslData> = Record<string, AnyWgslData>, TUniforms extends Record<string, AnyWgslData> = Record<string, AnyWgslData>> = (ctx: ShaderContext<TDynamic, TStatic, TUniforms>) => ShaderResult;
177
+ export declare class GeometryBuilder<TDynamic extends Record<string, AnyWgslData> = Record<string, never>, TStatic extends Record<string, AnyWgslData> = Record<string, never>, TUniforms extends Record<string, AnyWgslData> = Record<string, never>> {
178
+ private _name;
179
+ private _options;
180
+ private _root;
181
+ private _format;
182
+ private _layoutConfig;
183
+ private _uniformDefs;
184
+ private _vertexFn;
185
+ private _fragmentFn;
186
+ private _shaderFactory;
187
+ private _vertexVaryings;
188
+ private _vertexFactory;
189
+ private _fragmentFactory;
190
+ private _declarativeShaders;
191
+ private _computeSource;
192
+ private _dataLayout;
193
+ private _canvas;
194
+ private _clearColor;
195
+ constructor(name: string, options: GeometryOptions, root: TgpuRoot, format: GPUTextureFormat, canvas: HTMLCanvasElement, clearColor: [number, number, number, number]);
196
+ instanceLayout<D extends Record<string, AnyWgslData>, S extends Record<string, AnyWgslData>>(layout: InstanceLayoutConfig<D, S> | GeometryDataLayout<D, S, TUniforms>): GeometryBuilder<D, S, TUniforms>;
197
+ uniforms<U extends Record<string, AnyWgslData>>(defs: U): GeometryBuilder<TDynamic, TStatic, U>;
198
+ /**
199
+ * Bind a compute kernel's buffer as this geometry's dynamic instance data.
200
+ * Zero-copy: the render shader reads directly from the compute buffer.
201
+ *
202
+ * ```ts
203
+ * const compute = renderer.createCompute('physics', { workgroupSize: 256 })
204
+ * .buffers({ particles: { storage: d.arrayOf(ParticleStruct, MAX), readwrite: true } })
205
+ * .shader(...)
206
+ * .build();
207
+ *
208
+ * const render = renderer.createGeometry('vis', { maxInstances: MAX, geometry: 'quad' })
209
+ * .fromCompute(compute, 'particles')
210
+ * .uniforms({ resolution: d.vec2f })
211
+ * .shaders({ ... })
212
+ * .build();
213
+ * ```
214
+ */
215
+ fromCompute(kernel: ComputeKernel<Record<string, unknown>>, bufferName: string): this;
216
+ /**
217
+ * Provide shaders as a callback that receives the bind group layout.
218
+ *
219
+ * ```ts
220
+ * .shaders((layout) => ({
221
+ * vertex: tgpu.vertexFn({...})(function(input) {
222
+ * const pos = layout.$.dynamicInstances[input.instanceIndex].position;
223
+ * }),
224
+ * fragment: tgpu.fragmentFn({...})(function(input) { ... }),
225
+ * }))
226
+ * ```
227
+ *
228
+ * Or provide pre-built shaders directly:
229
+ * ```ts
230
+ * .shaders(vertexFn, fragmentFn)
231
+ * ```
232
+ */
233
+ /**
234
+ * Provide shaders via a factory callback that receives a typed context.
235
+ *
236
+ * ```ts
237
+ * .shaders(({ dynamic, statics, uniforms }) => ({
238
+ * vertex: tgpu.vertexFn({...})(function(input) { ... }),
239
+ * fragment: tgpu.fragmentFn({...})(function(input) { ... }),
240
+ * }))
241
+ * ```
242
+ *
243
+ * Or provide pre-built shaders directly:
244
+ * ```ts
245
+ * .shaders(vertexFn, fragmentFn)
246
+ * ```
247
+ */
248
+ shaders(vertexOrFactoryOrConfig: TgpuVertexFn<Record<string, AnyWgslData>, Record<string, AnyWgslData>> | ShaderFactory<TDynamic, TStatic, TUniforms> | DeclarativeShaders<TDynamic, TStatic, TUniforms>, fragment?: TgpuFragmentFn<Record<string, AnyWgslData>, AnyWgslData>): this;
249
+ /**
250
+ * Set the vertex shader with typed context.
251
+ * The builder handles `tgpu.vertexFn` wrapping and builtin inputs.
252
+ *
253
+ * ```ts
254
+ * .vertex(
255
+ * { brightness: d.f32, localUV: d.vec2f }, // varyings
256
+ * (ctx) => function(input) {
257
+ * 'use gpu';
258
+ * const pos = ctx.dynamic[input.instanceIndex].position;
259
+ * return { pos: d.vec4f(...), brightness, localUV };
260
+ * }
261
+ * )
262
+ * ```
263
+ */
264
+ vertexShader<V extends Record<string, AnyWgslData>>(varyings: V, factory: (ctx: ShaderContext<TDynamic, TStatic, TUniforms>) => (input: {
265
+ vertexIndex: number;
266
+ instanceIndex: number;
267
+ }) => Record<string, AnyWgslData>): this;
268
+ /**
269
+ * Set the fragment shader.
270
+ *
271
+ * ```ts
272
+ * .fragmentShader(function(input) {
273
+ * 'use gpu';
274
+ * return d.vec4f(1, 1, 1, 1);
275
+ * })
276
+ * ```
277
+ */
278
+ fragmentShader(fn: (input: Record<string, unknown>) => unknown): this;
279
+ build(): CustomGeometry<TDynamic, TStatic, TUniforms>;
280
+ }
281
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from "./built-in";
2
+ export * from "./geometry-builder";
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @murow/webgpu — WebGPU rendering backend for murow.
3
+ *
4
+ * Re-exports TypeGPU's data module as `d` for user-facing shader authoring.
5
+ */
6
+ export { d, std } from './shaders/typegpu';
7
+ export { WebGPU2DRenderer } from './2d/renderer';
8
+ export { SpriteAccessor } from './2d/sprite-accessor';
9
+ export { WebGPU3DRenderer } from './3d/renderer';
10
+ export type { ModelData, ModelHandle, GltfModel, InstanceHandle, MeshInstanceHandle, MeshInstanceOptions } from './3d/renderer';
11
+ export { MorphAnimation } from './3d/morph-animation';
12
+ export type { MorphClip, MorphState, MorphClipConfig } from './3d/morph-animation';
13
+ export { SkeletalAnimation } from './3d/skeletal-animation';
14
+ export type { SkeletalClip, SkeletalAnimState, PlayOptions } from './3d/skeletal-animation';
15
+ export type { SkinData, AnimationClipData, AnimationChannel } from './3d/gltf-skin-parser';
16
+ export { Camera2D } from './camera/camera-2d';
17
+ export { Camera3D } from './camera/camera-3d';
18
+ export { GeometryBuilder, CustomGeometry, InstanceAccessor, InstanceContext, getFieldFloats, createGeometryDataLayout } from './geometry/geometry-builder';
19
+ export type { GeometryOptions, InstanceLayoutConfig, CustomGeometryLayout, GeometryDataLayout, ShaderContext } from './geometry/geometry-builder';
20
+ export { resolveBuiltInGeometry } from './geometry/built-in';
21
+ export type { BuiltInGeometry, GeometryData } from './geometry/built-in';
22
+ export { Spritesheet, computeGridUVs, computeTexturePackerUVs, loadImage, createTextureFromBitmap } from './spritesheet/spritesheet';
23
+ export type { SpritesheetConfig, TexturePackerData } from './spritesheet/spritesheet';
24
+ export { ParticleEmitter } from './particle/emitter';
25
+ export type { ParticleEmitterConfig, Range } from './particle/emitter';
26
+ export { AnimationController } from './2d/animation';
27
+ export type { AnimationClip, AnimationState, AnimationClipConfig } from './2d/animation';
28
+ export { ComputeBuilder, ComputeKernel } from './compute/compute-builder';
29
+ export type { ComputeOptions, ComputeBufferDef, ComputeInput } from './compute/compute-builder';
30
+ export { rotate2d, worldToClip2d, worldToClip3d, remap, scaleRotate2d, inverseLerp } from './shaders/utils';
31
+ export * from './core/constants';
32
+ export { DynamicSprite, StaticSprite, SpriteUniforms, DynamicInstance3D, StaticInstance3D, DynamicMesh, StaticMesh, SkinnedStaticMesh, MeshUniforms } from './core/types';
@@ -0,0 +1,36 @@
1
+ import type { SpritesheetHandle } from 'murow/renderer/types';
2
+ import type { WebGPU2DRenderer } from '../2d/renderer';
3
+ export interface Range {
4
+ min: number;
5
+ max: number;
6
+ }
7
+ export interface ParticleEmitterConfig {
8
+ max: number;
9
+ lifetime: Range;
10
+ speed: Range;
11
+ size: Range;
12
+ gravity?: [number, number];
13
+ color: [number, number, number, number];
14
+ direction: Range;
15
+ fadeOut?: boolean;
16
+ sheet?: SpritesheetHandle;
17
+ sprite?: number;
18
+ seed?: number;
19
+ }
20
+ export declare class ParticleEmitter {
21
+ private renderer;
22
+ private config;
23
+ private sprites;
24
+ private lifetimes;
25
+ private maxLifetimes;
26
+ private velocitiesX;
27
+ private velocitiesY;
28
+ private activeCount;
29
+ private head;
30
+ private rng;
31
+ constructor(renderer: WebGPU2DRenderer, config: ParticleEmitterConfig);
32
+ emit(x: number, y: number, count?: number): void;
33
+ update(deltaTime: number): void;
34
+ getActiveCount(): number;
35
+ clear(): void;
36
+ }
@@ -0,0 +1,2 @@
1
+ export * from "../2d/shader";
2
+ export { rotate2d, worldToClip2d, worldToClip3d, remap, scaleRotate2d, inverseLerp } from './utils';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Attach TypeGPU shader metadata to a function at runtime.
3
+ *
4
+ * @param fn The shader function
5
+ * @param getExternals Lazy function returning external variable bindings.
6
+ * Called during pipeline resolution. The returned record
7
+ * is augmented with auto-detected namespace aliases (see
8
+ * `namespaceAliases`) so bundler-renamed identifiers
9
+ * (e.g. `d10` instead of `d`) still resolve.
10
+ * @param stripFirstParam If true, removes the first parameter (ctx) and treats
11
+ * its destructured names as externals instead
12
+ * @param namespaceAliases Map of canonical namespace name → namespace object.
13
+ * When a bundler renames `d` to `d10`, we detect it by
14
+ * matching the member-access pattern in the function
15
+ * source against the members of each candidate namespace,
16
+ * and alias the renamed name to the right object.
17
+ */
18
+ export declare function attachShaderMetadata(fn: Function, getExternals: () => Record<string, unknown>, stripFirstParam?: boolean, namespaceAliases?: Record<string, object>): void;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Default 2D sprite shader — WGSL source as a template string.
3
+ *
4
+ * Supports:
5
+ * - Instanced rendering (one draw call per spritesheet batch)
6
+ * - GPU-side interpolation between previous and current frame
7
+ * - Per-sprite: position, rotation, scale, UV, tint, opacity, flip
8
+ * - Camera transform via uniform matrix
9
+ */
10
+ export declare const SPRITE_2D_WGSL = "\n// --- Uniforms ---\nstruct Uniforms {\n viewProjection: mat3x3<f32>,\n alpha: f32,\n resolution: vec2<f32>,\n}\n\n@group(0) @binding(0) var<uniform> uniforms: Uniforms;\n\n// --- Instance data (storage buffers) ---\nstruct DynamicInstance {\n prevX: f32,\n prevY: f32,\n currX: f32,\n currY: f32,\n prevRotation: f32,\n currRotation: f32,\n}\n\nstruct StaticInstance {\n scaleX: f32,\n scaleY: f32,\n uvMinX: f32,\n uvMinY: f32,\n uvMaxX: f32,\n uvMaxY: f32,\n layer: f32,\n flipX: f32,\n flipY: f32,\n opacity: f32,\n tintR: f32,\n tintG: f32,\n tintB: f32,\n tintA: f32,\n}\n\n@group(0) @binding(1) var<storage, read> dynamicInstances: array<DynamicInstance>;\n@group(0) @binding(2) var<storage, read> staticInstances: array<StaticInstance>;\n\n// --- Texture ---\n@group(1) @binding(0) var spriteTex: texture_2d<f32>;\n@group(1) @binding(1) var spriteSampler: sampler;\n\n// --- Vertex output ---\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv: vec2<f32>,\n @location(1) tint: vec4<f32>,\n @location(2) opacity: f32,\n}\n\n@vertex\nfn vs_main(\n @builtin(vertex_index) vertexIndex: u32,\n @builtin(instance_index) instanceIndex: u32,\n) -> VertexOutput {\n let dyn = dynamicInstances[instanceIndex];\n let stat = staticInstances[instanceIndex];\n\n // Interpolate position\n let alpha = uniforms.alpha;\n let x = mix(dyn.prevX, dyn.currX, alpha);\n let y = mix(dyn.prevY, dyn.currY, alpha);\n\n // Interpolate rotation\n let rotation = mix(dyn.prevRotation, dyn.currRotation, alpha);\n\n // Quad vertices: 6 verts for 2 triangles\n let isRight = f32((vertexIndex & 1u) ^ ((vertexIndex >> 1u) & 1u));\n let isTop = f32((vertexIndex + 1u) / 3u);\n // Adjust for second triangle\n let localX = select(-0.5, 0.5, isRight > 0.0) * stat.scaleX;\n let localY = select(-0.5, 0.5, isTop > 0.0) * stat.scaleY;\n\n // Apply flip\n let fx = select(1.0, -1.0, stat.flipX > 0.0);\n let fy = select(1.0, -1.0, stat.flipY > 0.0);\n let flippedX = localX * fx;\n let flippedY = localY * fy;\n\n // Rotate\n let cosR = cos(rotation);\n let sinR = sin(rotation);\n let rotX = flippedX * cosR - flippedY * sinR;\n let rotY = flippedX * sinR + flippedY * cosR;\n\n // World position\n let worldPos = vec3<f32>(x + rotX, y + rotY, 1.0);\n\n // Apply camera view-projection\n let clipPos = uniforms.viewProjection * worldPos;\n\n // UV mapping\n let u = mix(stat.uvMinX, stat.uvMaxX, isRight);\n let v = mix(stat.uvMinY, stat.uvMaxY, 1.0 - isTop);\n\n var out: VertexOutput;\n out.position = vec4<f32>(clipPos.xy, 0.0, 1.0);\n out.uv = vec2<f32>(u, v);\n out.tint = vec4<f32>(stat.tintR, stat.tintG, stat.tintB, stat.tintA);\n out.opacity = stat.opacity;\n return out;\n}\n\n@fragment\nfn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {\n let texColor = textureSample(spriteTex, spriteSampler, in.uv);\n let tinted = texColor * in.tint;\n return vec4<f32>(tinted.rgb, tinted.a * in.opacity);\n}\n";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Bundler-safe wrappers around TypeGPU's `data` and `std` namespace exports.
3
+ */
4
+ import * as _d from 'typegpu/data';
5
+ import * as _std from 'typegpu/std';
6
+ export declare const d: typeof _d;
7
+ export declare const std: typeof _std;
8
+ export type d = typeof _d;
9
+ export type std = typeof _std;
@@ -0,0 +1,28 @@
1
+ import * as d from 'typegpu/data';
2
+ /**
3
+ * Rotate a 2D point around the origin by `angle` radians.
4
+ */
5
+ export declare const rotate2d: import("typegpu").TgpuFn<(point: d.Vec2f, angle: d.F32) => d.Vec2f>;
6
+ /**
7
+ * Transform a 2D world position to clip space using a 3x3 camera matrix
8
+ * (stored as mat3x3f). Returns vec4f for vertex output.
9
+ */
10
+ export declare const worldToClip2d: import("typegpu").TgpuFn<(worldPos: d.Vec2f, cameraMatrix: d.Mat3x3f) => d.Vec4f>;
11
+ /**
12
+ * Transform a 3D world position to clip space using a 4x4 view-projection matrix.
13
+ */
14
+ export declare const worldToClip3d: import("typegpu").TgpuFn<(worldPos: d.Vec3f, vpMatrix: d.Mat4x4f) => d.Vec4f>;
15
+ /**
16
+ * Remap a value from one range to another.
17
+ * `remap(0.5, 0, 1, 10, 20)` returns `15`.
18
+ */
19
+ export declare const remap: import("typegpu").TgpuFn<(value: d.F32, inMin: d.F32, inMax: d.F32, outMin: d.F32, outMax: d.F32) => d.F32>;
20
+ /**
21
+ * Compute a 2D scale+rotation matrix from scale and angle.
22
+ * Useful for sprite transforms in the vertex shader.
23
+ */
24
+ export declare const scaleRotate2d: import("typegpu").TgpuFn<(scale: d.Vec2f, angle: d.F32) => d.Mat2x2f>;
25
+ /**
26
+ * Inverse lerp — given a value in [min, max], returns its t in [0, 1].
27
+ */
28
+ export declare const inverseLerp: import("typegpu").TgpuFn<(min: d.F32, max: d.F32, value: d.F32) => d.F32>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./spritesheet";