murow 0.0.70 → 0.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +54 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base/renderer-2d.js +1 -0
  74. package/dist/cjs/renderer/base/renderer-3d.js +1 -0
  75. package/dist/cjs/renderer/base/renderer.js +1 -0
  76. package/dist/cjs/renderer/gltf/helpers.js +1 -0
  77. package/dist/cjs/renderer/gltf/parser.js +1 -0
  78. package/dist/cjs/renderer/gltf/skeletal-animation.js +1 -0
  79. package/dist/cjs/renderer/gltf/skin-parser.js +1 -0
  80. package/dist/cjs/renderer/index.js +1 -0
  81. package/dist/cjs/renderer/math.js +1 -0
  82. package/dist/cjs/renderer/prefab-bucket/concrete.js +1 -0
  83. package/dist/cjs/renderer/prefab-bucket/index.js +1 -0
  84. package/dist/cjs/renderer/prefab-bucket/parsers.js +1 -0
  85. package/dist/cjs/renderer/prefab-bucket/specs.js +1 -0
  86. package/dist/cjs/renderer/spritesheet/helpers.js +1 -0
  87. package/dist/cjs/renderer/spritesheet/parser.js +1 -0
  88. package/dist/cjs/renderer/types.js +1 -0
  89. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  90. package/dist/esm/core/binary-codec/index.js +1 -0
  91. package/dist/esm/core/driver/driver.js +1 -0
  92. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  93. package/dist/esm/core/driver/drivers/index.js +1 -0
  94. package/dist/esm/core/driver/drivers/raf.js +1 -0
  95. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  96. package/dist/esm/core/driver/index.js +1 -0
  97. package/dist/esm/core/events/event-system.js +1 -0
  98. package/dist/esm/core/events/index.js +1 -0
  99. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  100. package/dist/esm/core/fixed-ticker/index.js +1 -0
  101. package/dist/esm/core/free-list/free-list.js +1 -0
  102. package/dist/esm/core/free-list/index.js +1 -0
  103. package/dist/esm/core/generate-id/generate-id.js +1 -0
  104. package/dist/esm/core/generate-id/index.js +1 -0
  105. package/dist/esm/core/index.js +1 -0
  106. package/dist/esm/core/input/index.js +1 -0
  107. package/dist/esm/core/input/manager.js +1 -0
  108. package/dist/esm/core/input/sources/browser.js +1 -0
  109. package/dist/esm/core/input/sources/index.js +1 -0
  110. package/dist/esm/core/input/types.js +0 -0
  111. package/dist/esm/core/lerp/index.js +1 -0
  112. package/dist/esm/core/lerp/lerp.js +1 -0
  113. package/dist/esm/core/navmesh/index.js +1 -0
  114. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  115. package/dist/esm/core/navmesh/navmesh.js +1 -0
  116. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  117. package/dist/esm/core/pooled-codec/index.js +1 -0
  118. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  119. package/dist/esm/core/prediction/index.js +1 -0
  120. package/dist/esm/core/prediction/prediction.js +1 -0
  121. package/dist/esm/core/ray/index.js +1 -0
  122. package/dist/esm/core/ray/ray-2d.js +1 -0
  123. package/dist/esm/core/ray/ray-3d.js +1 -0
  124. package/dist/esm/core/simple-rng/index.js +1 -0
  125. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  126. package/dist/esm/core/sparse-batcher/index.js +1 -0
  127. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  128. package/dist/esm/ecs/component-store.js +1 -0
  129. package/dist/esm/ecs/component.js +1 -0
  130. package/dist/esm/ecs/entity-handle.js +1 -0
  131. package/dist/esm/ecs/index.js +1 -0
  132. package/dist/esm/ecs/system-builder.js +1 -0
  133. package/dist/esm/ecs/world-systems.js +1 -0
  134. package/dist/esm/ecs/world.js +1 -0
  135. package/dist/esm/game/index.js +1 -0
  136. package/dist/esm/game/loop/index.js +1 -0
  137. package/dist/esm/game/loop/loop.js +1 -0
  138. package/dist/esm/index.js +1 -0
  139. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  140. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  141. package/dist/esm/net/buffer-pool.js +1 -0
  142. package/dist/esm/net/client.js +1 -0
  143. package/dist/esm/net/index.js +1 -0
  144. package/dist/esm/net/server.js +1 -0
  145. package/dist/esm/net/types.js +1 -0
  146. package/dist/esm/net/validators.js +1 -0
  147. package/dist/esm/protocol/index.js +1 -0
  148. package/dist/esm/protocol/intent/define-intent.js +1 -0
  149. package/dist/esm/protocol/intent/index.js +1 -0
  150. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  151. package/dist/esm/protocol/intent/intent.js +0 -0
  152. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  153. package/dist/esm/protocol/rpc/index.js +1 -0
  154. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  155. package/dist/esm/protocol/rpc/rpc.js +0 -0
  156. package/dist/esm/protocol/snapshot/index.js +1 -0
  157. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  158. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  159. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  160. package/dist/esm/renderer/base/renderer-2d.js +1 -0
  161. package/dist/esm/renderer/base/renderer-3d.js +1 -0
  162. package/dist/esm/renderer/base/renderer.js +1 -0
  163. package/dist/esm/renderer/gltf/helpers.js +1 -0
  164. package/dist/esm/renderer/gltf/parser.js +1 -0
  165. package/dist/esm/renderer/gltf/skeletal-animation.js +1 -0
  166. package/dist/esm/renderer/gltf/skin-parser.js +1 -0
  167. package/dist/esm/renderer/index.js +1 -0
  168. package/dist/esm/renderer/math.js +1 -0
  169. package/dist/esm/renderer/prefab-bucket/concrete.js +1 -0
  170. package/dist/esm/renderer/prefab-bucket/index.js +1 -0
  171. package/dist/esm/renderer/prefab-bucket/parsers.js +1 -0
  172. package/dist/esm/renderer/prefab-bucket/specs.js +0 -0
  173. package/dist/esm/renderer/spritesheet/helpers.js +1 -0
  174. package/dist/esm/renderer/spritesheet/parser.js +1 -0
  175. package/dist/esm/renderer/types.js +0 -0
  176. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  177. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  178. package/dist/types/core/free-list/free-list.d.ts +31 -0
  179. package/dist/types/core/free-list/index.d.ts +1 -0
  180. package/dist/{core → types/core}/index.d.ts +5 -0
  181. package/dist/{core → types/core}/input/index.d.ts +1 -0
  182. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  183. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  184. package/dist/types/core/ray/index.d.ts +2 -0
  185. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  186. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  187. package/dist/types/core/simple-rng/index.d.ts +1 -0
  188. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  189. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  190. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  191. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  192. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  193. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  194. package/dist/{net → types/net}/index.d.ts +2 -2
  195. package/dist/types/renderer/base/renderer-2d.d.ts +13 -0
  196. package/dist/types/renderer/base/renderer-3d.d.ts +10 -0
  197. package/dist/types/renderer/base/renderer.d.ts +21 -0
  198. package/dist/types/renderer/gltf/helpers.d.ts +43 -0
  199. package/dist/types/renderer/gltf/parser.d.ts +49 -0
  200. package/dist/types/renderer/gltf/skeletal-animation.d.ts +96 -0
  201. package/dist/types/renderer/gltf/skin-parser.d.ts +107 -0
  202. package/dist/types/renderer/index.d.ts +15 -0
  203. package/dist/types/renderer/math.d.ts +37 -0
  204. package/dist/types/renderer/prefab-bucket/concrete.d.ts +55 -0
  205. package/dist/types/renderer/prefab-bucket/index.d.ts +113 -0
  206. package/dist/types/renderer/prefab-bucket/parsers.d.ts +8 -0
  207. package/dist/types/renderer/prefab-bucket/specs.d.ts +166 -0
  208. package/dist/types/renderer/spritesheet/helpers.d.ts +38 -0
  209. package/dist/types/renderer/spritesheet/parser.d.ts +21 -0
  210. package/dist/types/renderer/types.d.ts +89 -0
  211. package/dist/webgpu/cjs/index.js +5401 -0
  212. package/dist/webgpu/esm/index.js +5378 -0
  213. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  214. package/dist/webgpu/types/2d/renderer.d.ts +86 -0
  215. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  216. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  217. package/dist/webgpu/types/3d/clip-resync-coordinator.d.ts +20 -0
  218. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  219. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  220. package/dist/webgpu/types/3d/renderer.d.ts +266 -0
  221. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  222. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  223. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +25 -0
  224. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  225. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  226. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  227. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  228. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  229. package/dist/webgpu/types/camera/index.d.ts +2 -0
  230. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  231. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  232. package/dist/webgpu/types/core/constants.d.ts +59 -0
  233. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  234. package/dist/webgpu/types/core/index.d.ts +2 -0
  235. package/dist/webgpu/types/core/types.d.ts +125 -0
  236. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  237. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  238. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  239. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  240. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  241. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  242. package/dist/webgpu/types/index.d.ts +35 -0
  243. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  244. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  245. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  246. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  247. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  248. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  249. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  250. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  251. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +28 -0
  252. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  253. package/package.json +96 -26
  254. package/dist/core/binary-codec/binary-codec.js +0 -354
  255. package/dist/core/binary-codec/index.js +0 -1
  256. package/dist/core/driver/driver.js +0 -47
  257. package/dist/core/driver/drivers/immediate.js +0 -61
  258. package/dist/core/driver/drivers/index.js +0 -3
  259. package/dist/core/driver/drivers/raf.js +0 -62
  260. package/dist/core/driver/drivers/timeout.js +0 -71
  261. package/dist/core/driver/index.js +0 -2
  262. package/dist/core/events/event-system.js +0 -88
  263. package/dist/core/events/index.js +0 -1
  264. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  265. package/dist/core/fixed-ticker/index.js +0 -1
  266. package/dist/core/generate-id/generate-id.js +0 -25
  267. package/dist/core/generate-id/index.js +0 -1
  268. package/dist/core/index.js +0 -10
  269. package/dist/core/input/index.js +0 -2
  270. package/dist/core/input/manager.js +0 -211
  271. package/dist/core/input/sources/browser.js +0 -29
  272. package/dist/core/input/sources/index.js +0 -1
  273. package/dist/core/lerp/index.js +0 -1
  274. package/dist/core/lerp/lerp.js +0 -42
  275. package/dist/core/navmesh/index.js +0 -1
  276. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  277. package/dist/core/navmesh/navmesh.js +0 -799
  278. package/dist/core/navmesh/navmesh.worker.js +0 -79
  279. package/dist/core/pooled-codec/index.js +0 -1
  280. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  281. package/dist/core/prediction/index.js +0 -1
  282. package/dist/core/prediction/prediction.js +0 -99
  283. package/dist/core.esm.js +0 -1
  284. package/dist/core.js +0 -1
  285. package/dist/ecs/component-store.js +0 -175
  286. package/dist/ecs/component.js +0 -43
  287. package/dist/ecs/entity-handle.js +0 -515
  288. package/dist/ecs/example.js +0 -125
  289. package/dist/ecs/index.js +0 -4
  290. package/dist/ecs/system-builder.js +0 -249
  291. package/dist/ecs/world-systems.js +0 -79
  292. package/dist/ecs/world.js +0 -767
  293. package/dist/game/index.js +0 -1
  294. package/dist/game/loop/index.js +0 -1
  295. package/dist/game/loop/loop.js +0 -108
  296. package/dist/index.js +0 -26
  297. package/dist/net/adapters/browser-websocket.js +0 -74
  298. package/dist/net/adapters/bun-websocket.js +0 -245
  299. package/dist/net/buffer-pool.js +0 -89
  300. package/dist/net/client.js +0 -586
  301. package/dist/net/index.js +0 -58
  302. package/dist/net/server.js +0 -974
  303. package/dist/net/types.js +0 -31
  304. package/dist/net/validators.js +0 -88
  305. package/dist/protocol/index.js +0 -92
  306. package/dist/protocol/intent/define-intent.js +0 -125
  307. package/dist/protocol/intent/index.js +0 -91
  308. package/dist/protocol/intent/intent-registry.js +0 -91
  309. package/dist/protocol/rpc/define-rpc.js +0 -84
  310. package/dist/protocol/rpc/index.js +0 -3
  311. package/dist/protocol/rpc/rpc-registry.js +0 -159
  312. package/dist/protocol/rpc/rpc.js +0 -12
  313. package/dist/protocol/snapshot/index.js +0 -43
  314. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  315. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  316. package/dist/protocol/snapshot/snapshot.js +0 -30
  317. package/src/core/binary-codec/README.md +0 -60
  318. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  319. package/src/core/binary-codec/binary-codec.ts +0 -448
  320. package/src/core/binary-codec/index.ts +0 -1
  321. package/src/core/driver/README.md +0 -97
  322. package/src/core/driver/driver.test.ts +0 -414
  323. package/src/core/driver/driver.ts +0 -71
  324. package/src/core/driver/drivers/immediate.ts +0 -66
  325. package/src/core/driver/drivers/index.ts +0 -3
  326. package/src/core/driver/drivers/raf.ts +0 -67
  327. package/src/core/driver/drivers/timeout.ts +0 -77
  328. package/src/core/driver/index.ts +0 -2
  329. package/src/core/events/README.md +0 -47
  330. package/src/core/events/event-system.test.ts +0 -243
  331. package/src/core/events/event-system.ts +0 -140
  332. package/src/core/events/index.ts +0 -1
  333. package/src/core/fixed-ticker/README.md +0 -77
  334. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  335. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  336. package/src/core/fixed-ticker/index.ts +0 -1
  337. package/src/core/generate-id/README.md +0 -18
  338. package/src/core/generate-id/generate-id.test.ts +0 -79
  339. package/src/core/generate-id/generate-id.ts +0 -37
  340. package/src/core/generate-id/index.ts +0 -1
  341. package/src/core/index.ts +0 -10
  342. package/src/core/input/README.md +0 -24
  343. package/src/core/input/index.ts +0 -2
  344. package/src/core/input/manager.ts +0 -259
  345. package/src/core/input/sources/browser.ts +0 -39
  346. package/src/core/input/sources/index.ts +0 -1
  347. package/src/core/input/types.ts +0 -40
  348. package/src/core/lerp/README.md +0 -79
  349. package/src/core/lerp/index.ts +0 -1
  350. package/src/core/lerp/lerp.test.ts +0 -90
  351. package/src/core/lerp/lerp.ts +0 -42
  352. package/src/core/navmesh/README.md +0 -164
  353. package/src/core/navmesh/index.ts +0 -1
  354. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  355. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  356. package/src/core/navmesh/navmesh.test.ts +0 -344
  357. package/src/core/navmesh/navmesh.ts +0 -1047
  358. package/src/core/navmesh/navmesh.worker.ts +0 -147
  359. package/src/core/pooled-codec/README.md +0 -70
  360. package/src/core/pooled-codec/index.ts +0 -1
  361. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  362. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  363. package/src/core/prediction/README.md +0 -64
  364. package/src/core/prediction/index.ts +0 -1
  365. package/src/core/prediction/prediction.test.ts +0 -423
  366. package/src/core/prediction/prediction.ts +0 -112
  367. package/src/ecs/README.md +0 -427
  368. package/src/ecs/benchmark.test.ts +0 -1645
  369. package/src/ecs/component-store.ts +0 -198
  370. package/src/ecs/component.ts +0 -90
  371. package/src/ecs/entity-handle.test.ts +0 -393
  372. package/src/ecs/entity-handle.ts +0 -563
  373. package/src/ecs/example.ts +0 -152
  374. package/src/ecs/index.ts +0 -4
  375. package/src/ecs/system-builder.ts +0 -404
  376. package/src/ecs/world-systems.ts +0 -83
  377. package/src/ecs/world.test.ts +0 -310
  378. package/src/ecs/world.ts +0 -904
  379. package/src/game/index.ts +0 -1
  380. package/src/game/loop/README.md +0 -32
  381. package/src/game/loop/index.ts +0 -1
  382. package/src/game/loop/loop.ts +0 -236
  383. package/src/index.ts +0 -32
  384. package/src/net/README.md +0 -474
  385. package/src/net/adapters/browser-websocket.ts +0 -86
  386. package/src/net/adapters/bun-websocket.ts +0 -292
  387. package/src/net/buffer-pool.ts +0 -106
  388. package/src/net/client.test.ts +0 -807
  389. package/src/net/client.ts +0 -695
  390. package/src/net/index.ts +0 -60
  391. package/src/net/server.test.ts +0 -799
  392. package/src/net/server.ts +0 -1152
  393. package/src/net/types.ts +0 -228
  394. package/src/net/validators.ts +0 -104
  395. package/src/protocol/README.md +0 -469
  396. package/src/protocol/index.ts +0 -93
  397. package/src/protocol/intent/define-intent.test.ts +0 -397
  398. package/src/protocol/intent/define-intent.ts +0 -201
  399. package/src/protocol/intent/index.ts +0 -94
  400. package/src/protocol/intent/intent-registry.test.ts +0 -198
  401. package/src/protocol/intent/intent-registry.ts +0 -112
  402. package/src/protocol/intent/intent.ts +0 -12
  403. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  404. package/src/protocol/rpc/define-rpc.ts +0 -113
  405. package/src/protocol/rpc/index.ts +0 -3
  406. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  407. package/src/protocol/rpc/rpc-registry.ts +0 -176
  408. package/src/protocol/rpc/rpc.ts +0 -37
  409. package/src/protocol/snapshot/index.ts +0 -45
  410. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  411. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  412. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  413. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  414. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  415. package/src/protocol/snapshot/snapshot.ts +0 -41
  416. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  417. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  418. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  419. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  420. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  421. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  422. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  423. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  424. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  425. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  426. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  427. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  428. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  429. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  430. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  431. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  432. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  433. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  434. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  435. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  436. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  437. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  438. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  439. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  440. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  441. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  442. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  443. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  444. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  445. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  446. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  447. /package/dist/{game → types/game}/index.d.ts +0 -0
  448. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  449. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  450. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  451. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  452. /package/dist/{net → types/net}/client.d.ts +0 -0
  453. /package/dist/{net → types/net}/server.d.ts +0 -0
  454. /package/dist/{net → types/net}/types.d.ts +0 -0
  455. /package/dist/{net → types/net}/validators.d.ts +0 -0
  456. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  457. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  458. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  459. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  460. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  461. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  462. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  463. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  464. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  465. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  466. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  467. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  468. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  469. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  470. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * BasePrefabBucket — generic, renderer-agnostic registry of reusable spawn
3
+ * templates. Backends (e.g. `@murow/webgpu`) extend this with specialized
4
+ * spec/prefab unions; most users want the concrete `PrefabBucket` class
5
+ * exported alongside this one (see `./prefab-bucket-concrete.ts`).
6
+ *
7
+ * Lifecycle:
8
+ * 1. `add()` / `addAll()` collect specs (sync, no I/O)
9
+ * 2. `load()` resolves all async work (fetch, parse) in parallel
10
+ * 3. `get()` returns parsed prefabs by id; the bucket is now frozen
11
+ *
12
+ * Typed ids: with `const` generics, `bucket.get('typo')` is a compile-time
13
+ * error once the bucket has been populated. The id-to-spec mapping is
14
+ * threaded through generics so subclasses can narrow `get()`'s return type
15
+ * to the specific prefab variant for that id (not just the union).
16
+ */
17
+ import { EventSystem } from '../../core/events';
18
+ export type PrefabMode = '2d' | '3d';
19
+ /**
20
+ * `T | (string & {})` — accept a literal `T` (for autocomplete) but don't
21
+ * collapse to plain `string`. Lets callers pass any string while still getting
22
+ * suggestions for the known set.
23
+ */
24
+ export type StringOr<T extends string> = T | (string & {});
25
+ export interface PrefabSpecBase {
26
+ readonly type: string;
27
+ readonly id: string;
28
+ /** Optional user-defined sidecar data carried through to the parsed prefab. */
29
+ readonly metadata?: Record<string, unknown>;
30
+ }
31
+ export interface PrefabBase {
32
+ readonly type: string;
33
+ readonly id: string;
34
+ /** User-defined sidecar data passed through from the spec. */
35
+ readonly metadata?: Record<string, unknown>;
36
+ }
37
+ /** `clips-changed` fires when a prefab's animation set is mutated by lazy load/unload. */
38
+ export type PrefabBucketEvents = [
39
+ [
40
+ 'clips-changed',
41
+ {
42
+ prefabId: string;
43
+ added: readonly string[];
44
+ removed: readonly string[];
45
+ }
46
+ ]
47
+ ];
48
+ /** Context passed to each parser at load time, carrying the bucket's shared event channel. */
49
+ export interface PrefabParserContext {
50
+ readonly events: EventSystem<PrefabBucketEvents>;
51
+ }
52
+ /**
53
+ * Pluggable parser registry — keyed by spec `type`. Each entry knows how to turn
54
+ * one variant of spec into its parsed prefab. The bucket itself is mode-agnostic;
55
+ * the webgpu package (or any other backend) registers parsers at construction.
56
+ */
57
+ export type PrefabParser<Spec extends PrefabSpecBase = PrefabSpecBase, Prefab extends PrefabBase = PrefabBase> = (spec: Spec, ctx: PrefabParserContext) => Promise<Prefab> | Prefab;
58
+ export type PrefabParserMap<Spec extends PrefabSpecBase, Prefab extends PrefabBase> = Record<string, PrefabParser<Spec, Prefab>>;
59
+ export declare class BasePrefabBucket<M extends PrefabMode = PrefabMode, Spec extends PrefabSpecBase = PrefabSpecBase, Prefab extends PrefabBase = PrefabBase, Specs extends Record<string, Spec> = {}> {
60
+ readonly mode: M;
61
+ /** Shared notification channel — see `PrefabBucketEvents`. */
62
+ readonly events: EventSystem<PrefabBucketEvents>;
63
+ private parsers;
64
+ private pending;
65
+ private pendingIds;
66
+ private prefabs;
67
+ constructor(mode: M, parsers?: PrefabParserMap<Spec, Prefab>);
68
+ /** Add a single spec. Throws if id is a duplicate or if the bucket is already loaded. */
69
+ add<const S extends Spec>(spec: S): BasePrefabBucket<M, Spec, Prefab, Specs & {
70
+ [K in S['id']]: S;
71
+ }>;
72
+ /**
73
+ * Add multiple specs. Validates the whole batch (ids unique, not loaded) before
74
+ * committing, so the bucket never lands in a half-applied state.
75
+ */
76
+ addAll<const Ss extends readonly Spec[]>(specs: Ss): BasePrefabBucket<M, Spec, Prefab, Specs & {
77
+ [K in Ss[number]['id']]: Extract<Ss[number], {
78
+ id: K;
79
+ }>;
80
+ }>;
81
+ /** Load all pending specs in parallel. Idempotent if already loaded. */
82
+ load(): Promise<void>;
83
+ /**
84
+ * Returns the parsed prefab by id. The default return type is the prefab
85
+ * union; subclasses may pass a second generic `R` to narrow the return
86
+ * type per-id (e.g. mapping `Specs[K]` to its concrete prefab variant).
87
+ *
88
+ * Accepts any string at runtime but offers autocomplete for the known ids.
89
+ */
90
+ get<K extends keyof Specs & string, R extends Prefab = Prefab>(id: StringOr<K>): R;
91
+ /** True once `load()` has resolved. */
92
+ get loaded(): boolean;
93
+ /** Number of prefabs in the bucket (pending if not loaded, parsed if loaded). */
94
+ get size(): number;
95
+ /** All parsed prefabs. Throws if not loaded yet. Order is registration order. */
96
+ entries(): Prefab[];
97
+ /**
98
+ * Return all parsed prefabs whose `type` matches the given discriminator.
99
+ * The default return type is the prefab union narrowed structurally;
100
+ * subclasses may pass a second generic `R` to narrow further per-type.
101
+ *
102
+ * Accepts any string at runtime; offers autocomplete for the known types.
103
+ */
104
+ getAllByType<T extends Prefab['type'] & string, R extends Prefab = Extract<Prefab, {
105
+ type: T;
106
+ }>>(type: StringOr<T>): R[];
107
+ /**
108
+ * Drop every runtime-loaded clip across all prefabs, restoring each to
109
+ * its parse-time animation set. Called by the renderer on destroy so
110
+ * a kept-alive bucket doesn't carry runtime state into the next session.
111
+ */
112
+ resetAnimations(): void;
113
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Spec parsers — pure functions that turn a prefab spec into its parsed prefab.
3
+ * Used by createPrefabBucket; not part of the public surface.
4
+ */
5
+ import type { PrefabParserMap } from './index';
6
+ import type { Prefab2D, Prefab2DSpec, Prefab3D, Prefab3DSpec } from './specs';
7
+ export declare const parsers3d: PrefabParserMap<Prefab3DSpec, Prefab3D>;
8
+ export declare const parsers2d: PrefabParserMap<Prefab2DSpec, Prefab2D>;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Prefab spec / prefab type unions.
3
+ *
4
+ * Specs describe what to load (URLs, sizes, options). Prefabs are the
5
+ * parsed CPU-side result — the renderer reads these at init() to size
6
+ * GPU buffers and uploads them; user code retrieves them by id and
7
+ * passes them to `addInstance` / `addSprite`.
8
+ *
9
+ * These types are renderer-agnostic. The actual GPU upload lives in
10
+ * specific backends (e.g. `@murow/webgpu`).
11
+ */
12
+ import type { ParsedGltf } from '../gltf/parser';
13
+ import type { ParsedSpritesheet } from '../spritesheet/parser';
14
+ /**
15
+ * Extracts the spec's `metadata` literal type for the parsed prefab.
16
+ * Missing metadata defaults to `{}` at parse time, so the parsed prefab's
17
+ * `metadata` field is always present — no `?.` needed.
18
+ *
19
+ * - Required field → exact literal type (e.g. `{ scale: 0.5 }`)
20
+ * - Optional field → `NonNullable<M>` (you know the field is there at runtime,
21
+ * but its shape isn't pinned because the spec didn't pin it)
22
+ * - Absent → `Record<string, unknown>` (default open shape)
23
+ */
24
+ type MetadataOf<S> = S extends {
25
+ readonly metadata: infer M;
26
+ } ? M : S extends {
27
+ readonly metadata?: infer M;
28
+ } ? NonNullable<M> : Record<string, unknown>;
29
+ export interface GltfSpec {
30
+ readonly type: 'gltf';
31
+ /** Unique identifier for the prefab. */
32
+ readonly id: string;
33
+ /** URL to the .gltf or .glb file. */
34
+ readonly src: string;
35
+ /** Optional whitelist of animation clip names to keep. Defaults to all. Filter them here and get type-safety and more performance. */
36
+ readonly animations?: readonly string[];
37
+ /**
38
+ * Release the source glTF JSON + accessor reader after parse. Saves
39
+ * memory but removes `loadAnimations` / `unloadAnimations` at runtime
40
+ * and the type level.
41
+ */
42
+ readonly freezeAnimations?: boolean;
43
+ /** Optional user-defined sidecar data (scale, speed, gameplay hints, etc). */
44
+ readonly metadata?: Record<string, unknown>;
45
+ }
46
+ export interface GridSpec {
47
+ readonly type: 'grid';
48
+ /** Unique identifier for the prefab. */
49
+ readonly id: string;
50
+ readonly size: number;
51
+ readonly step: number;
52
+ readonly lineWidth: number;
53
+ /** Optional user-defined sidecar data (scale, speed, gameplay hints, etc). */
54
+ readonly metadata?: Record<string, unknown>;
55
+ }
56
+ export type Prefab3DSpec = GltfSpec | GridSpec;
57
+ /**
58
+ * Map a spec's `animations` tuple to a record-keyed-by-name. Used to type
59
+ * `GltfPrefab.animations` so `prefab.animations.Run` is a string literal
60
+ * (and `prefab.animations.Typo` is a compile-time error).
61
+ */
62
+ export type AnimationsRecord<A extends readonly string[]> = {
63
+ readonly [K in A[number]]: K;
64
+ };
65
+ /** Animation fields for a spec with a non-empty literal `animations` tuple. */
66
+ type NarrowAnimations<S extends GltfSpec> = {
67
+ readonly animations: AnimationsRecord<Extract<S['animations'], readonly string[]>>;
68
+ readonly animationList: Extract<S['animations'], readonly string[]>;
69
+ };
70
+ /** Animation fields for a spec where `animations` was declared optional (default). */
71
+ type WideAnimations = {
72
+ readonly animations?: Record<string, string>;
73
+ readonly animationList?: readonly string[];
74
+ };
75
+ /** Lazy clip-management methods. Present when the spec didn't set `freezeAnimations: true`. */
76
+ export type UnfrozenAnimationMethods = {
77
+ /** Decode and pack clips by name. Already-loaded names are no-ops; unknown names throw. */
78
+ loadAnimations(names: readonly string[]): Promise<void>;
79
+ /** Drop clips from the packed buffer. No-op for clips that aren't loaded. */
80
+ unloadAnimations(names: readonly string[]): void;
81
+ /** Restore the prefab to its spec-declared (parse-time) animation set. */
82
+ resetAnimations(): void;
83
+ };
84
+ /** Optional-method version of `UnfrozenAnimationMethods`, used on the wide-union `GltfPrefab<GltfSpec>`. */
85
+ type OptionalAnimationMethods = {
86
+ loadAnimations?: UnfrozenAnimationMethods['loadAnimations'];
87
+ unloadAnimations?: UnfrozenAnimationMethods['unloadAnimations'];
88
+ resetAnimations?: UnfrozenAnimationMethods['resetAnimations'];
89
+ };
90
+ /** Common (non-conditional) fields of every parsed glTF prefab. */
91
+ type GltfPrefabBase<S extends GltfSpec> = {
92
+ readonly type: 'gltf';
93
+ readonly id: S['id'];
94
+ readonly parsed: ParsedGltf;
95
+ readonly skinnedPartCount: number;
96
+ readonly jointCount: number;
97
+ /** Total vertices across all primitives. */
98
+ readonly totalVertexCount: number;
99
+ /** Passed through from the spec. */
100
+ readonly metadata: MetadataOf<S>;
101
+ };
102
+ /**
103
+ * Animation record/list fields, narrowed by what the spec declared:
104
+ * - literal `animations` tuple → narrow record + tuple
105
+ * - `animations?` (declared optional) → wide record + array
106
+ * - field absent → no animation fields
107
+ */
108
+ type GltfPrefabAnimationFields<S extends GltfSpec> = S extends {
109
+ animations: readonly [string, ...string[]];
110
+ } ? NarrowAnimations<S> : S extends {
111
+ animations?: readonly string[] | undefined;
112
+ } ? WideAnimations : {};
113
+ /** Pull out the `freezeAnimations` literal: `true`/`false` if pinned, `boolean` if wide, `never` if absent. */
114
+ type FreezeFlagOf<S> = S extends {
115
+ freezeAnimations?: infer F;
116
+ } ? F : never;
117
+ /**
118
+ * Lazy-method narrowing:
119
+ * - wide spec (`freezeAnimations?: boolean`) → optional methods, so the
120
+ * union `Prefab3D` doesn't re-add them to a narrowed-frozen variant
121
+ * - literal `true` → no methods
122
+ * - literal `false` or absent → required methods
123
+ */
124
+ type GltfPrefabLazyMethods<S extends GltfSpec> = boolean extends FreezeFlagOf<S> ? OptionalAnimationMethods : S extends {
125
+ freezeAnimations: true;
126
+ } ? {} : UnfrozenAnimationMethods;
127
+ /** Parsed glTF prefab, with `id`, `metadata`, `animations`, and `freezeAnimations` narrowed by the spec literal. */
128
+ export type GltfPrefab<S extends GltfSpec = GltfSpec> = GltfPrefabBase<S> & GltfPrefabAnimationFields<S> & GltfPrefabLazyMethods<S>;
129
+ export interface GridPrefab<S extends GridSpec = GridSpec> {
130
+ readonly type: 'grid';
131
+ readonly id: S['id'];
132
+ readonly size: number;
133
+ readonly step: number;
134
+ readonly lineWidth: number;
135
+ readonly metadata: MetadataOf<S>;
136
+ }
137
+ export type Prefab3D = GltfPrefab | GridPrefab;
138
+ export interface SpritesheetSpec {
139
+ readonly type: 'spritesheet';
140
+ readonly id: string;
141
+ /** URL to the image. */
142
+ readonly src: string;
143
+ readonly frameWidth?: number;
144
+ readonly frameHeight?: number;
145
+ /** URL to a texture-packer JSON file. Mutually exclusive with frameWidth/frameHeight. */
146
+ readonly data?: string;
147
+ readonly metadata?: Record<string, unknown>;
148
+ }
149
+ export type Prefab2DSpec = SpritesheetSpec;
150
+ export interface SpritesheetPrefab<S extends SpritesheetSpec = SpritesheetSpec> {
151
+ readonly type: 'spritesheet';
152
+ readonly id: S['id'];
153
+ readonly parsed: ParsedSpritesheet;
154
+ readonly frameCount: number;
155
+ readonly width: number;
156
+ readonly height: number;
157
+ readonly metadata: MetadataOf<S>;
158
+ }
159
+ export type Prefab2D = SpritesheetPrefab;
160
+ /**
161
+ * Maps a spec variant to its concrete parsed prefab variant. Used by the
162
+ * bucket's `get()` so `bucket.get('minion')` returns `GltfPrefab` directly,
163
+ * not the discriminated union.
164
+ */
165
+ export type PrefabFor<S> = S extends GltfSpec ? GltfPrefab<S> : S extends GridSpec ? GridPrefab<S> : S extends SpritesheetSpec ? SpritesheetPrefab<S> : never;
166
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Pure spritesheet helpers — UV math and image loading.
3
+ *
4
+ * Renderer-agnostic. The actual GPU-bound `Spritesheet` class (with `GPUTexture` /
5
+ * `GPUSampler`) lives in the webgpu package.
6
+ */
7
+ import type { SpriteUV } from '../types';
8
+ export interface GridSpritesheetConfig {
9
+ image: string;
10
+ frameWidth: number;
11
+ frameHeight: number;
12
+ }
13
+ export interface TexturePackerFrame {
14
+ frame: {
15
+ x: number;
16
+ y: number;
17
+ w: number;
18
+ h: number;
19
+ };
20
+ }
21
+ export interface TexturePackerData {
22
+ frames: Record<string, TexturePackerFrame>;
23
+ meta: {
24
+ size: {
25
+ w: number;
26
+ h: number;
27
+ };
28
+ };
29
+ }
30
+ export interface SpritesheetConfig {
31
+ image: string;
32
+ frameWidth?: number;
33
+ frameHeight?: number;
34
+ data?: string;
35
+ }
36
+ export declare function computeGridUVs(imageWidth: number, imageHeight: number, frameWidth: number, frameHeight: number): SpriteUV[];
37
+ export declare function computeTexturePackerUVs(data: TexturePackerData): SpriteUV[];
38
+ export declare function loadImage(url: string): Promise<ImageBitmap>;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Spritesheet parser — fetches an image (and optionally a texture-packer JSON)
3
+ * and returns CPU-side data ready for GPU upload. Pure: no device, no GPU buffers.
4
+ *
5
+ * The renderer's `loadSpritesheet` is a thin wrapper that calls this then uploads.
6
+ * Splitting parse from upload lets callers fetch all spritesheets in parallel
7
+ * (via `Promise.all`) before a renderer exists.
8
+ */
9
+ import type { SpriteUV, SpritesheetSource } from '../types';
10
+ /** CPU-side result of parsing a spritesheet source. */
11
+ export interface ParsedSpritesheet {
12
+ bitmap: ImageBitmap;
13
+ uvs: SpriteUV[];
14
+ width: number;
15
+ height: number;
16
+ }
17
+ /**
18
+ * Parse a spritesheet source: fetch the image, decode it, and resolve UVs.
19
+ * Does no GPU work. Safe to call in parallel; safe to call before a renderer exists.
20
+ */
21
+ export declare function parseSpritesheet(source: SpritesheetSource): Promise<ParsedSpritesheet>;
@@ -0,0 +1,89 @@
1
+ import type { Ray3D } from '../core/ray/ray-3d';
2
+ export type ClearColor = [r: number, g: number, b: number, a: number];
3
+ export interface RendererOptions {
4
+ clearColor?: ClearColor;
5
+ /** Automatically resize the canvas and reconfigure the GPU context on window resize. */
6
+ autoResize?: boolean;
7
+ }
8
+ export interface Renderer2DOptions extends RendererOptions {
9
+ /**
10
+ * Sprite instance budget. Optional when a prefab bucket is provided —
11
+ * the renderer will derive a sensible default from `maxInstances`.
12
+ */
13
+ maxSprites?: number;
14
+ }
15
+ export interface Renderer3DOptions extends RendererOptions {
16
+ /**
17
+ * Non-skinned instance budget. Optional when a prefab bucket is provided —
18
+ * the renderer will derive a sensible default from the bucket.
19
+ */
20
+ maxModels?: number;
21
+ enableLighting?: boolean;
22
+ }
23
+ export interface Camera2DState {
24
+ x: number;
25
+ y: number;
26
+ zoom: number;
27
+ rotation: number;
28
+ setPosition(x: number, y: number): void;
29
+ move(x: number, y: number): void;
30
+ screenToWorld(screenX: number, screenY: number): [number, number];
31
+ }
32
+ export interface Camera3DState {
33
+ position: [x: number, y: number, z: number];
34
+ target: [x: number, y: number, z: number];
35
+ up: [x: number, y: number, z: number];
36
+ fov: number;
37
+ near: number;
38
+ far: number;
39
+ aspect: number;
40
+ movement: 'local' | 'grounded' | 'global';
41
+ setPosition(x: number, y: number, z: number): void;
42
+ move(right: number, up: number, forward: number): void;
43
+ screenToRay(screenX: number, screenY: number): Ray3D;
44
+ }
45
+ export interface SpritesheetSource {
46
+ image: string;
47
+ frameWidth?: number;
48
+ frameHeight?: number;
49
+ data?: string;
50
+ }
51
+ export interface SpriteOptions {
52
+ sheet: SpritesheetHandle;
53
+ /** Frame index into the spritesheet. Defaults to 0. */
54
+ sprite?: number;
55
+ /** World position. Defaults to `[0, 0]`. */
56
+ position?: readonly [x: number, y: number];
57
+ layer?: number;
58
+ /** Per-axis scale. Pass a single number to scale uniformly. Defaults to `[1, 1]`. */
59
+ scale?: number | readonly [x: number, y: number];
60
+ /** Rotation in radians. Defaults to 0. */
61
+ rotation?: number;
62
+ opacity?: number;
63
+ flipX?: boolean;
64
+ flipY?: boolean;
65
+ tint?: readonly [r: number, g: number, b: number, a: number];
66
+ }
67
+ export interface SpritesheetHandle {
68
+ readonly id: number;
69
+ readonly frameCount: number;
70
+ getUV(spriteIndex: number): SpriteUV;
71
+ }
72
+ export interface SpriteUV {
73
+ minX: number;
74
+ minY: number;
75
+ maxX: number;
76
+ maxY: number;
77
+ }
78
+ export interface SpriteHandle {
79
+ readonly slot: number;
80
+ x: number;
81
+ y: number;
82
+ rotation: number;
83
+ scaleX: number;
84
+ scaleY: number;
85
+ opacity: number;
86
+ layer: number;
87
+ flipX: boolean;
88
+ flipY: boolean;
89
+ }