@thunderclap-engine/engine 0.0.0-stage → 1.1.0

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 (566) hide show
  1. package/CHANGELOG.md +390 -0
  2. package/LICENSE +21 -0
  3. package/README.md +333 -2
  4. package/dist/analytics/analytics.d.ts +80 -0
  5. package/dist/analytics/analytics.js +129 -0
  6. package/dist/analytics/index.d.ts +1 -0
  7. package/dist/analytics/index.js +1 -0
  8. package/dist/anim/aim.d.ts +43 -0
  9. package/dist/anim/aim.js +157 -0
  10. package/dist/anim/clip.d.ts +98 -0
  11. package/dist/anim/clip.js +282 -0
  12. package/dist/anim/compress.d.ts +65 -0
  13. package/dist/anim/compress.js +339 -0
  14. package/dist/anim/foot-ik.d.ts +74 -0
  15. package/dist/anim/foot-ik.js +241 -0
  16. package/dist/anim/graph.d.ts +153 -0
  17. package/dist/anim/graph.js +532 -0
  18. package/dist/anim/ik.d.ts +105 -0
  19. package/dist/anim/ik.js +435 -0
  20. package/dist/anim/index.d.ts +36 -0
  21. package/dist/anim/index.js +21 -0
  22. package/dist/anim/match.d.ts +66 -0
  23. package/dist/anim/match.js +153 -0
  24. package/dist/anim/mixer.d.ts +113 -0
  25. package/dist/anim/mixer.js +314 -0
  26. package/dist/anim/morph.d.ts +41 -0
  27. package/dist/anim/morph.js +94 -0
  28. package/dist/anim/pose.d.ts +74 -0
  29. package/dist/anim/pose.js +254 -0
  30. package/dist/anim/quat.d.ts +44 -0
  31. package/dist/anim/quat.js +187 -0
  32. package/dist/anim/retarget.d.ts +97 -0
  33. package/dist/anim/retarget.js +366 -0
  34. package/dist/anim/root-motion.d.ts +44 -0
  35. package/dist/anim/root-motion.js +224 -0
  36. package/dist/anim/skin-pose.d.ts +39 -0
  37. package/dist/anim/skin-pose.js +53 -0
  38. package/dist/anim/socket.d.ts +47 -0
  39. package/dist/anim/socket.js +84 -0
  40. package/dist/anim/spring-chain.d.ts +73 -0
  41. package/dist/anim/spring-chain.js +294 -0
  42. package/dist/assets/atlas.d.ts +90 -0
  43. package/dist/assets/atlas.js +212 -0
  44. package/dist/assets/baked.d.ts +33 -0
  45. package/dist/assets/baked.js +38 -0
  46. package/dist/assets/bundle.d.ts +88 -0
  47. package/dist/assets/bundle.js +464 -0
  48. package/dist/assets/cache.d.ts +56 -0
  49. package/dist/assets/cache.js +123 -0
  50. package/dist/assets/gltf-load.d.ts +252 -0
  51. package/dist/assets/gltf-load.js +661 -0
  52. package/dist/assets/gltf-skin.d.ts +36 -0
  53. package/dist/assets/gltf-skin.js +109 -0
  54. package/dist/assets/gltf.d.ts +706 -0
  55. package/dist/assets/gltf.js +1376 -0
  56. package/dist/assets/index.d.ts +20 -0
  57. package/dist/assets/index.js +10 -0
  58. package/dist/assets/ktx2.d.ts +71 -0
  59. package/dist/assets/ktx2.js +213 -0
  60. package/dist/assets/manifest.d.ts +79 -0
  61. package/dist/assets/manifest.js +7 -0
  62. package/dist/assets/meshopt.d.ts +23 -0
  63. package/dist/assets/meshopt.js +403 -0
  64. package/dist/audio/audio.d.ts +733 -0
  65. package/dist/audio/audio.js +2013 -0
  66. package/dist/audio/dsp.d.ts +61 -0
  67. package/dist/audio/dsp.js +159 -0
  68. package/dist/audio/duck.d.ts +44 -0
  69. package/dist/audio/duck.js +101 -0
  70. package/dist/audio/envelope.d.ts +53 -0
  71. package/dist/audio/envelope.js +106 -0
  72. package/dist/audio/index.d.ts +13 -0
  73. package/dist/audio/index.js +14 -0
  74. package/dist/audio/music.d.ts +113 -0
  75. package/dist/audio/music.js +548 -0
  76. package/dist/audio/occlusion.d.ts +55 -0
  77. package/dist/audio/occlusion.js +61 -0
  78. package/dist/audio/persist.d.ts +23 -0
  79. package/dist/audio/persist.js +27 -0
  80. package/dist/audio/recipes.d.ts +55 -0
  81. package/dist/audio/recipes.js +227 -0
  82. package/dist/audio/send.d.ts +41 -0
  83. package/dist/audio/send.js +118 -0
  84. package/dist/audio/sprites.d.ts +59 -0
  85. package/dist/audio/sprites.js +43 -0
  86. package/dist/audio/synth.d.ts +103 -0
  87. package/dist/audio/synth.js +197 -0
  88. package/dist/audio/variations.d.ts +25 -0
  89. package/dist/audio/variations.js +55 -0
  90. package/dist/audio/zones.d.ts +100 -0
  91. package/dist/audio/zones.js +167 -0
  92. package/dist/core/detached-surface.d.ts +44 -0
  93. package/dist/core/detached-surface.js +104 -0
  94. package/dist/core/events.d.ts +24 -0
  95. package/dist/core/events.js +43 -0
  96. package/dist/core/game.d.ts +409 -0
  97. package/dist/core/game.js +530 -0
  98. package/dist/core/hash.d.ts +24 -0
  99. package/dist/core/hash.js +49 -0
  100. package/dist/core/index.d.ts +17 -0
  101. package/dist/core/index.js +9 -0
  102. package/dist/core/loop.d.ts +113 -0
  103. package/dist/core/loop.js +185 -0
  104. package/dist/core/math.d.ts +58 -0
  105. package/dist/core/math.js +210 -0
  106. package/dist/core/noise.d.ts +40 -0
  107. package/dist/core/noise.js +247 -0
  108. package/dist/core/pool.d.ts +42 -0
  109. package/dist/core/pool.js +85 -0
  110. package/dist/core/random.d.ts +61 -0
  111. package/dist/core/random.js +199 -0
  112. package/dist/core/scene.d.ts +79 -0
  113. package/dist/core/scene.js +195 -0
  114. package/dist/core/timer.d.ts +66 -0
  115. package/dist/core/timer.js +286 -0
  116. package/dist/fx/billboard-wgsl.d.ts +29 -0
  117. package/dist/fx/billboard-wgsl.js +158 -0
  118. package/dist/fx/billboard.d.ts +249 -0
  119. package/dist/fx/billboard.js +702 -0
  120. package/dist/fx/debug-draw.d.ts +127 -0
  121. package/dist/fx/debug-draw.js +523 -0
  122. package/dist/fx/debug-wgsl.d.ts +7 -0
  123. package/dist/fx/debug-wgsl.js +32 -0
  124. package/dist/fx/decals-wgsl.d.ts +15 -0
  125. package/dist/fx/decals-wgsl.js +173 -0
  126. package/dist/fx/decals.d.ts +216 -0
  127. package/dist/fx/decals.js +607 -0
  128. package/dist/fx/effect.d.ts +129 -0
  129. package/dist/fx/effect.js +349 -0
  130. package/dist/fx/effects/hit-spark.json +48 -0
  131. package/dist/fx/effects/index.d.ts +8 -0
  132. package/dist/fx/effects/index.js +9 -0
  133. package/dist/fx/effects/magic-aura.json +47 -0
  134. package/dist/fx/effects/smoke-puff.json +34 -0
  135. package/dist/fx/emit-surface.d.ts +40 -0
  136. package/dist/fx/emit-surface.js +124 -0
  137. package/dist/fx/flicker.d.ts +30 -0
  138. package/dist/fx/flicker.js +42 -0
  139. package/dist/fx/index.d.ts +31 -0
  140. package/dist/fx/index.js +20 -0
  141. package/dist/fx/particles-wgsl.d.ts +57 -0
  142. package/dist/fx/particles-wgsl.js +828 -0
  143. package/dist/fx/particles.d.ts +566 -0
  144. package/dist/fx/particles.js +1533 -0
  145. package/dist/fx/random.d.ts +15 -0
  146. package/dist/fx/random.js +20 -0
  147. package/dist/fx/sky-wgsl.d.ts +23 -0
  148. package/dist/fx/sky-wgsl.js +127 -0
  149. package/dist/fx/sky.d.ts +96 -0
  150. package/dist/fx/sky.js +175 -0
  151. package/dist/fx/text-atlas.d.ts +143 -0
  152. package/dist/fx/text-atlas.js +327 -0
  153. package/dist/fx/trail-wgsl.d.ts +11 -0
  154. package/dist/fx/trail-wgsl.js +42 -0
  155. package/dist/fx/trail.d.ts +194 -0
  156. package/dist/fx/trail.js +555 -0
  157. package/dist/fx/water-wgsl.d.ts +34 -0
  158. package/dist/fx/water-wgsl.js +197 -0
  159. package/dist/fx/water.d.ts +176 -0
  160. package/dist/fx/water.js +371 -0
  161. package/dist/geom/collide/bvh.d.ts +151 -0
  162. package/dist/geom/collide/bvh.js +493 -0
  163. package/dist/geom/collide/debug.d.ts +14 -0
  164. package/dist/geom/collide/debug.js +74 -0
  165. package/dist/geom/collide/grid.d.ts +26 -0
  166. package/dist/geom/collide/grid.js +91 -0
  167. package/dist/geom/collide/index.d.ts +8 -0
  168. package/dist/geom/collide/index.js +8 -0
  169. package/dist/geom/collide/queries.d.ts +70 -0
  170. package/dist/geom/collide/queries.js +583 -0
  171. package/dist/geom/collide/serialize.d.ts +14 -0
  172. package/dist/geom/collide/serialize.js +145 -0
  173. package/dist/geom/collide/shapes.d.ts +161 -0
  174. package/dist/geom/collide/shapes.js +686 -0
  175. package/dist/geom/collide/slide.d.ts +66 -0
  176. package/dist/geom/collide/slide.js +375 -0
  177. package/dist/geom/collide/tile-slide.d.ts +88 -0
  178. package/dist/geom/collide/tile-slide.js +255 -0
  179. package/dist/geom/geometry.d.ts +95 -0
  180. package/dist/geom/geometry.js +322 -0
  181. package/dist/geom/heightfield.d.ts +72 -0
  182. package/dist/geom/heightfield.js +295 -0
  183. package/dist/geom/hull.d.ts +27 -0
  184. package/dist/geom/hull.js +279 -0
  185. package/dist/geom/index.d.ts +35 -0
  186. package/dist/geom/index.js +23 -0
  187. package/dist/geom/iso.d.ts +74 -0
  188. package/dist/geom/iso.js +89 -0
  189. package/dist/geom/lod.d.ts +29 -0
  190. package/dist/geom/lod.js +27 -0
  191. package/dist/geom/ops.d.ts +47 -0
  192. package/dist/geom/ops.js +285 -0
  193. package/dist/geom/primitives.d.ts +97 -0
  194. package/dist/geom/primitives.js +359 -0
  195. package/dist/geom/shapes.d.ts +43 -0
  196. package/dist/geom/shapes.js +88 -0
  197. package/dist/geom/simplify.d.ts +38 -0
  198. package/dist/geom/simplify.js +519 -0
  199. package/dist/geom/split.d.ts +37 -0
  200. package/dist/geom/split.js +413 -0
  201. package/dist/geom/sweep.d.ts +83 -0
  202. package/dist/geom/sweep.js +534 -0
  203. package/dist/geom/tangents.d.ts +16 -0
  204. package/dist/geom/tangents.js +124 -0
  205. package/dist/geom/triangulate.d.ts +19 -0
  206. package/dist/geom/triangulate.js +147 -0
  207. package/dist/host/default.d.ts +10 -0
  208. package/dist/host/default.js +10 -0
  209. package/dist/host/index.d.ts +4 -0
  210. package/dist/host/index.js +3 -0
  211. package/dist/host/types.d.ts +144 -0
  212. package/dist/host/types.js +1 -0
  213. package/dist/host/web-links.d.ts +38 -0
  214. package/dist/host/web-links.js +110 -0
  215. package/dist/host/web.d.ts +30 -0
  216. package/dist/host/web.js +216 -0
  217. package/dist/host/xr.d.ts +24 -0
  218. package/dist/host/xr.js +59 -0
  219. package/dist/i18n/i18n.d.ts +59 -0
  220. package/dist/i18n/i18n.js +241 -0
  221. package/dist/i18n/index.d.ts +3 -0
  222. package/dist/i18n/index.js +3 -0
  223. package/dist/i18n/message.d.ts +72 -0
  224. package/dist/i18n/message.js +369 -0
  225. package/dist/i18n/negotiate.d.ts +17 -0
  226. package/dist/i18n/negotiate.js +58 -0
  227. package/dist/index.d.ts +7 -0
  228. package/dist/index.js +1 -0
  229. package/dist/input/bindings.d.ts +31 -0
  230. package/dist/input/bindings.js +141 -0
  231. package/dist/input/clock.d.ts +44 -0
  232. package/dist/input/clock.js +49 -0
  233. package/dist/input/follow.d.ts +133 -0
  234. package/dist/input/follow.js +218 -0
  235. package/dist/input/gestures.d.ts +281 -0
  236. package/dist/input/gestures.js +662 -0
  237. package/dist/input/glyphs.d.ts +35 -0
  238. package/dist/input/glyphs.js +216 -0
  239. package/dist/input/gyro.d.ts +85 -0
  240. package/dist/input/gyro.js +140 -0
  241. package/dist/input/index.d.ts +19 -0
  242. package/dist/input/index.js +16 -0
  243. package/dist/input/input.d.ts +543 -0
  244. package/dist/input/input.js +1492 -0
  245. package/dist/input/look.d.ts +327 -0
  246. package/dist/input/look.js +681 -0
  247. package/dist/input/magnify.d.ts +177 -0
  248. package/dist/input/magnify.js +131 -0
  249. package/dist/input/pointer-dispatch.d.ts +138 -0
  250. package/dist/input/pointer-dispatch.js +180 -0
  251. package/dist/input/pointer-router.d.ts +204 -0
  252. package/dist/input/pointer-router.js +533 -0
  253. package/dist/input/pointer-sources.d.ts +164 -0
  254. package/dist/input/pointer-sources.js +306 -0
  255. package/dist/input/rays.d.ts +138 -0
  256. package/dist/input/rays.js +615 -0
  257. package/dist/input/record.d.ts +209 -0
  258. package/dist/input/record.js +601 -0
  259. package/dist/input/touch-zones.d.ts +147 -0
  260. package/dist/input/touch-zones.js +300 -0
  261. package/dist/input/types.d.ts +158 -0
  262. package/dist/input/types.js +1 -0
  263. package/dist/input/xr-source.d.ts +53 -0
  264. package/dist/input/xr-source.js +164 -0
  265. package/dist/nav/astar.d.ts +45 -0
  266. package/dist/nav/astar.js +182 -0
  267. package/dist/nav/corridor.d.ts +40 -0
  268. package/dist/nav/corridor.js +95 -0
  269. package/dist/nav/crowd.d.ts +94 -0
  270. package/dist/nav/crowd.js +624 -0
  271. package/dist/nav/flow.d.ts +61 -0
  272. package/dist/nav/flow.js +193 -0
  273. package/dist/nav/grid.d.ts +108 -0
  274. package/dist/nav/grid.js +210 -0
  275. package/dist/nav/heap.d.ts +22 -0
  276. package/dist/nav/heap.js +92 -0
  277. package/dist/nav/index.d.ts +37 -0
  278. package/dist/nav/index.js +19 -0
  279. package/dist/nav/mesh/areas.d.ts +44 -0
  280. package/dist/nav/mesh/areas.js +98 -0
  281. package/dist/nav/mesh/bake-options.d.ts +33 -0
  282. package/dist/nav/mesh/bake-options.js +76 -0
  283. package/dist/nav/mesh/contour.d.ts +22 -0
  284. package/dist/nav/mesh/contour.js +323 -0
  285. package/dist/nav/mesh/flow3.d.ts +35 -0
  286. package/dist/nav/mesh/flow3.js +229 -0
  287. package/dist/nav/mesh/links.d.ts +38 -0
  288. package/dist/nav/mesh/links.js +72 -0
  289. package/dist/nav/mesh/mesh-path.d.ts +152 -0
  290. package/dist/nav/mesh/mesh-path.js +643 -0
  291. package/dist/nav/mesh/mesh-reach.d.ts +78 -0
  292. package/dist/nav/mesh/mesh-reach.js +450 -0
  293. package/dist/nav/mesh/navmesh.d.ts +117 -0
  294. package/dist/nav/mesh/navmesh.js +647 -0
  295. package/dist/nav/mesh/polymesh.d.ts +24 -0
  296. package/dist/nav/mesh/polymesh.js +384 -0
  297. package/dist/nav/mesh/regions.d.ts +12 -0
  298. package/dist/nav/mesh/regions.js +367 -0
  299. package/dist/nav/mesh/serialize.d.ts +13 -0
  300. package/dist/nav/mesh/serialize.js +197 -0
  301. package/dist/nav/mesh/voxelize.d.ts +111 -0
  302. package/dist/nav/mesh/voxelize.js +552 -0
  303. package/dist/nav/obstacles.d.ts +75 -0
  304. package/dist/nav/obstacles.js +294 -0
  305. package/dist/nav/path.d.ts +59 -0
  306. package/dist/nav/path.js +177 -0
  307. package/dist/nav/query-queue.d.ts +46 -0
  308. package/dist/nav/query-queue.js +308 -0
  309. package/dist/nav/reach.d.ts +53 -0
  310. package/dist/nav/reach.js +148 -0
  311. package/dist/nav/steer.d.ts +36 -0
  312. package/dist/nav/steer.js +78 -0
  313. package/dist/platform/boot.d.ts +28 -0
  314. package/dist/platform/boot.js +43 -0
  315. package/dist/platform/device-mode.d.ts +40 -0
  316. package/dist/platform/device-mode.js +104 -0
  317. package/dist/platform/device.d.ts +31 -0
  318. package/dist/platform/device.js +91 -0
  319. package/dist/platform/environment.d.ts +42 -0
  320. package/dist/platform/environment.js +82 -0
  321. package/dist/platform/gpu.d.ts +40 -0
  322. package/dist/platform/gpu.js +57 -0
  323. package/dist/platform/index.d.ts +18 -0
  324. package/dist/platform/index.js +10 -0
  325. package/dist/platform/letterbox.d.ts +43 -0
  326. package/dist/platform/letterbox.js +57 -0
  327. package/dist/platform/links.d.ts +20 -0
  328. package/dist/platform/links.js +43 -0
  329. package/dist/platform/screens.d.ts +36 -0
  330. package/dist/platform/screens.js +138 -0
  331. package/dist/platform/surface.d.ts +72 -0
  332. package/dist/platform/surface.js +157 -0
  333. package/dist/platform/xr-fake.d.ts +168 -0
  334. package/dist/platform/xr-fake.js +434 -0
  335. package/dist/platform/xr-surface.d.ts +120 -0
  336. package/dist/platform/xr-surface.js +214 -0
  337. package/dist/platform/xr-types.d.ts +262 -0
  338. package/dist/post/ao.d.ts +12 -0
  339. package/dist/post/ao.js +136 -0
  340. package/dist/post/blend.d.ts +27 -0
  341. package/dist/post/blend.js +129 -0
  342. package/dist/post/depth-pass.d.ts +43 -0
  343. package/dist/post/depth-pass.js +118 -0
  344. package/dist/post/dof.d.ts +1 -0
  345. package/dist/post/dof.js +66 -0
  346. package/dist/post/exposure.d.ts +80 -0
  347. package/dist/post/exposure.js +322 -0
  348. package/dist/post/index.d.ts +12 -0
  349. package/dist/post/index.js +11 -0
  350. package/dist/post/lens-dirt.d.ts +13 -0
  351. package/dist/post/lens-dirt.js +91 -0
  352. package/dist/post/lut.d.ts +19 -0
  353. package/dist/post/lut.js +50 -0
  354. package/dist/post/motion-blur.d.ts +9 -0
  355. package/dist/post/motion-blur.js +78 -0
  356. package/dist/post/post-stack.d.ts +302 -0
  357. package/dist/post/post-stack.js +1137 -0
  358. package/dist/post/settings.d.ts +485 -0
  359. package/dist/post/settings.js +416 -0
  360. package/dist/post/shaders.d.ts +25 -0
  361. package/dist/post/shaders.js +410 -0
  362. package/dist/post/ssr.d.ts +16 -0
  363. package/dist/post/ssr.js +155 -0
  364. package/dist/post/taa.d.ts +74 -0
  365. package/dist/post/taa.js +235 -0
  366. package/dist/post/white-balance.d.ts +25 -0
  367. package/dist/post/white-balance.js +98 -0
  368. package/dist/render/bindings.d.ts +98 -0
  369. package/dist/render/bindings.js +281 -0
  370. package/dist/render/blend.d.ts +13 -0
  371. package/dist/render/blend.js +26 -0
  372. package/dist/render/camera-2d.d.ts +72 -0
  373. package/dist/render/camera-2d.js +92 -0
  374. package/dist/render/camera.d.ts +302 -0
  375. package/dist/render/camera.js +671 -0
  376. package/dist/render/color.d.ts +16 -0
  377. package/dist/render/color.js +41 -0
  378. package/dist/render/compressed.d.ts +104 -0
  379. package/dist/render/compressed.js +248 -0
  380. package/dist/render/diagnostics.d.ts +15 -0
  381. package/dist/render/diagnostics.js +43 -0
  382. package/dist/render/dynamic-resolution.d.ts +70 -0
  383. package/dist/render/dynamic-resolution.js +126 -0
  384. package/dist/render/fake-gpu.d.ts +204 -0
  385. package/dist/render/fake-gpu.js +426 -0
  386. package/dist/render/flipbook.d.ts +56 -0
  387. package/dist/render/flipbook.js +87 -0
  388. package/dist/render/frame.d.ts +278 -0
  389. package/dist/render/frame.js +174 -0
  390. package/dist/render/fullscreen.d.ts +54 -0
  391. package/dist/render/fullscreen.js +91 -0
  392. package/dist/render/gpu-timer.d.ts +73 -0
  393. package/dist/render/gpu-timer.js +186 -0
  394. package/dist/render/index.d.ts +53 -0
  395. package/dist/render/index.js +29 -0
  396. package/dist/render/instance-list.d.ts +185 -0
  397. package/dist/render/instance-list.js +547 -0
  398. package/dist/render/lights.d.ts +181 -0
  399. package/dist/render/lights.js +233 -0
  400. package/dist/render/lod.d.ts +54 -0
  401. package/dist/render/lod.js +52 -0
  402. package/dist/render/material.d.ts +165 -0
  403. package/dist/render/material.js +292 -0
  404. package/dist/render/mesh.d.ts +284 -0
  405. package/dist/render/mesh.js +472 -0
  406. package/dist/render/mipmap.d.ts +16 -0
  407. package/dist/render/mipmap.js +121 -0
  408. package/dist/render/parallax.d.ts +50 -0
  409. package/dist/render/parallax.js +47 -0
  410. package/dist/render/pbr-wgsl.d.ts +31 -0
  411. package/dist/render/pbr-wgsl.js +119 -0
  412. package/dist/render/ping-pong.d.ts +42 -0
  413. package/dist/render/ping-pong.js +74 -0
  414. package/dist/render/renderer.d.ts +741 -0
  415. package/dist/render/renderer.js +2486 -0
  416. package/dist/render/scene-pipelines.d.ts +44 -0
  417. package/dist/render/scene-pipelines.js +92 -0
  418. package/dist/render/scene-target.d.ts +170 -0
  419. package/dist/render/scene-target.js +450 -0
  420. package/dist/render/shadow.d.ts +74 -0
  421. package/dist/render/shadow.js +208 -0
  422. package/dist/render/skin.d.ts +112 -0
  423. package/dist/render/skin.js +240 -0
  424. package/dist/render/snapshot.d.ts +36 -0
  425. package/dist/render/snapshot.js +34 -0
  426. package/dist/render/standard.d.ts +162 -0
  427. package/dist/render/standard.js +263 -0
  428. package/dist/render/texture.d.ts +142 -0
  429. package/dist/render/texture.js +228 -0
  430. package/dist/render/tile-layer.d.ts +110 -0
  431. package/dist/render/tile-layer.js +304 -0
  432. package/dist/render/transform.d.ts +115 -0
  433. package/dist/render/transform.js +318 -0
  434. package/dist/render/wgsl.d.ts +131 -0
  435. package/dist/render/wgsl.js +528 -0
  436. package/dist/save/codec.d.ts +49 -0
  437. package/dist/save/codec.js +169 -0
  438. package/dist/save/index.d.ts +8 -0
  439. package/dist/save/index.js +8 -0
  440. package/dist/save/journal.d.ts +24 -0
  441. package/dist/save/journal.js +102 -0
  442. package/dist/save/migrate.d.ts +15 -0
  443. package/dist/save/migrate.js +37 -0
  444. package/dist/save/schema.d.ts +72 -0
  445. package/dist/save/schema.js +154 -0
  446. package/dist/save/settings.d.ts +28 -0
  447. package/dist/save/settings.js +59 -0
  448. package/dist/save/slots.d.ts +56 -0
  449. package/dist/save/slots.js +200 -0
  450. package/dist/save/storage.d.ts +35 -0
  451. package/dist/save/storage.js +62 -0
  452. package/dist/save/store.d.ts +114 -0
  453. package/dist/save/store.js +269 -0
  454. package/dist/testing/fake-host.d.ts +103 -0
  455. package/dist/testing/fake-host.js +163 -0
  456. package/dist/testing/fixed-clock.d.ts +25 -0
  457. package/dist/testing/fixed-clock.js +30 -0
  458. package/dist/testing/index.d.ts +4 -0
  459. package/dist/testing/index.js +5 -0
  460. package/dist/testing/test-game.d.ts +76 -0
  461. package/dist/testing/test-game.js +92 -0
  462. package/dist/tween/ease.d.ts +77 -0
  463. package/dist/tween/ease.js +192 -0
  464. package/dist/tween/index.d.ts +8 -0
  465. package/dist/tween/index.js +7 -0
  466. package/dist/tween/timeline.d.ts +78 -0
  467. package/dist/tween/timeline.js +269 -0
  468. package/dist/tween/tween.d.ts +168 -0
  469. package/dist/tween/tween.js +320 -0
  470. package/dist/ui/anchor.d.ts +206 -0
  471. package/dist/ui/anchor.js +307 -0
  472. package/dist/ui/caption.d.ts +122 -0
  473. package/dist/ui/caption.js +286 -0
  474. package/dist/ui/cursor.d.ts +105 -0
  475. package/dist/ui/cursor.js +261 -0
  476. package/dist/ui/dom.d.ts +30 -0
  477. package/dist/ui/dom.js +92 -0
  478. package/dist/ui/floats.d.ts +86 -0
  479. package/dist/ui/floats.js +260 -0
  480. package/dist/ui/hud.d.ts +198 -0
  481. package/dist/ui/hud.js +431 -0
  482. package/dist/ui/index.d.ts +37 -0
  483. package/dist/ui/index.js +34 -0
  484. package/dist/ui/inventory-card.d.ts +52 -0
  485. package/dist/ui/inventory-card.js +173 -0
  486. package/dist/ui/inventory-context.d.ts +29 -0
  487. package/dist/ui/inventory-context.js +125 -0
  488. package/dist/ui/inventory-drag.d.ts +63 -0
  489. package/dist/ui/inventory-drag.js +394 -0
  490. package/dist/ui/inventory-grid.d.ts +66 -0
  491. package/dist/ui/inventory-grid.js +625 -0
  492. package/dist/ui/inventory-radial.d.ts +39 -0
  493. package/dist/ui/inventory-radial.js +168 -0
  494. package/dist/ui/inventory.d.ts +128 -0
  495. package/dist/ui/inventory.js +154 -0
  496. package/dist/ui/layout.d.ts +356 -0
  497. package/dist/ui/layout.js +856 -0
  498. package/dist/ui/link.d.ts +64 -0
  499. package/dist/ui/link.js +155 -0
  500. package/dist/ui/loading.d.ts +40 -0
  501. package/dist/ui/loading.js +157 -0
  502. package/dist/ui/loupe.d.ts +74 -0
  503. package/dist/ui/loupe.js +164 -0
  504. package/dist/ui/menu-nav.d.ts +33 -0
  505. package/dist/ui/menu-nav.js +28 -0
  506. package/dist/ui/minimap-canvas.d.ts +145 -0
  507. package/dist/ui/minimap-canvas.js +460 -0
  508. package/dist/ui/notify.d.ts +40 -0
  509. package/dist/ui/notify.js +141 -0
  510. package/dist/ui/orb.d.ts +53 -0
  511. package/dist/ui/orb.js +304 -0
  512. package/dist/ui/overlay.d.ts +213 -0
  513. package/dist/ui/overlay.js +394 -0
  514. package/dist/ui/padnav.d.ts +53 -0
  515. package/dist/ui/padnav.js +146 -0
  516. package/dist/ui/perf.d.ts +130 -0
  517. package/dist/ui/perf.js +329 -0
  518. package/dist/ui/rotate-card.d.ts +54 -0
  519. package/dist/ui/rotate-card.js +97 -0
  520. package/dist/ui/stack.d.ts +128 -0
  521. package/dist/ui/stack.js +312 -0
  522. package/dist/ui/styles.d.ts +13 -0
  523. package/dist/ui/styles.js +200 -0
  524. package/dist/ui/text-scale.d.ts +67 -0
  525. package/dist/ui/text-scale.js +102 -0
  526. package/dist/ui/theme.d.ts +70 -0
  527. package/dist/ui/theme.js +98 -0
  528. package/dist/ui/toast.d.ts +23 -0
  529. package/dist/ui/toast.js +46 -0
  530. package/dist/ui/tooltip.d.ts +89 -0
  531. package/dist/ui/tooltip.js +333 -0
  532. package/dist/ui/widgets-2.d.ts +134 -0
  533. package/dist/ui/widgets-2.js +399 -0
  534. package/dist/ui/widgets-3.d.ts +91 -0
  535. package/dist/ui/widgets-3.js +212 -0
  536. package/dist/ui/widgets.d.ts +34 -0
  537. package/dist/ui/widgets.js +50 -0
  538. package/dist/ui/world-panel/index.d.ts +5 -0
  539. package/dist/ui/world-panel/index.js +5 -0
  540. package/dist/ui/world-panel/layout.d.ts +38 -0
  541. package/dist/ui/world-panel/layout.js +68 -0
  542. package/dist/ui/world-panel/paint.d.ts +96 -0
  543. package/dist/ui/world-panel/paint.js +136 -0
  544. package/dist/ui/world-panel/panel.d.ts +235 -0
  545. package/dist/ui/world-panel/panel.js +762 -0
  546. package/dist/ui/world-panel/wgsl.d.ts +10 -0
  547. package/dist/ui/world-panel/wgsl.js +52 -0
  548. package/dist/ui/world-panel/widgets.d.ts +207 -0
  549. package/dist/ui/world-panel/widgets.js +569 -0
  550. package/dist/voxel/chunks.d.ts +77 -0
  551. package/dist/voxel/chunks.js +149 -0
  552. package/dist/voxel/grid.d.ts +84 -0
  553. package/dist/voxel/grid.js +223 -0
  554. package/dist/voxel/index.d.ts +22 -0
  555. package/dist/voxel/index.js +7 -0
  556. package/dist/voxel/mesher-worker.d.ts +14 -0
  557. package/dist/voxel/mesher-worker.js +47 -0
  558. package/dist/voxel/mesher.d.ts +73 -0
  559. package/dist/voxel/mesher.js +306 -0
  560. package/dist/voxel/ray.d.ts +32 -0
  561. package/dist/voxel/ray.js +73 -0
  562. package/dist/voxel/wgsl.d.ts +16 -0
  563. package/dist/voxel/wgsl.js +28 -0
  564. package/dist/voxel/worker-client.d.ts +79 -0
  565. package/dist/voxel/worker-client.js +122 -0
  566. package/package.json +177 -3
@@ -0,0 +1,20 @@
1
+ export type { AtlasDrawContext, AtlasLayout, AtlasOptions, AtlasPixels, AtlasRect, AtlasSource, AtlasTexture, AtlasTextureOptions, } from './atlas.js';
2
+ export { createAtlasTexture, extrudePixels, packAtlas } from './atlas.js';
3
+ export type { BakeKind, BakeManifest, BakeManifestEntry } from './baked.js';
4
+ export { BAKE_MANIFEST_VERSION, readBakeManifest } from './baked.js';
5
+ export type { AssetReader, AudioDecoder, Bundle, BundleError, BundleEvents, BundleOptions, BundleProgress, ReadResult, } from './bundle.js';
6
+ export { createBundle } from './bundle.js';
7
+ export type { AssetCache, AssetCacheOptions, AssetCacheStats } from './cache.js';
8
+ export { createAssetCache } from './cache.js';
9
+ export type { GltfAccessorType, GltfAlphaMode, GltfAnimation, GltfAnimationChannel, GltfAnimationPath, GltfBounds, GltfCamera, GltfClearcoat, GltfComponentType, GltfDocument, GltfFilter, GltfImage, GltfInterpolation, GltfIor, GltfJson, GltfJsonAccessor, GltfJsonAnimation, GltfJsonAnimationChannel, GltfJsonAnimationSampler, GltfJsonBufferView, GltfJsonCamera, GltfJsonInterpolation, GltfJsonLight, GltfJsonMaterial, GltfJsonMesh, GltfJsonMeshoptView, GltfJsonNode, GltfJsonPrimitive, GltfJsonSkin, GltfJsonSource, GltfJsonSparse, GltfJsonTextureInfo, GltfJsonTextureTransform, GltfJsonVariantMapping, GltfLight, GltfMaterial, GltfMaterialExtensions, GltfMesh, GltfMorphTarget, GltfNode, GltfPrimitive, GltfSampler, GltfSheen, GltfSkin, GltfSpecular, GltfTexture, GltfTextureTransform, GltfTransmission, GltfVariantMapping, GltfVolume, GltfWrap, TextureRef, Vec3, Vec4, } from './gltf.js';
10
+ export { composeTrs, decodeDataUri, GltfError, parseGltf, transformUv } from './gltf.js';
11
+ export type { GltfImageSource, GltfLitMode, GltfMorph, GltfSceneLights, GltfSceneNode, LoadGltfOptions, } from './gltf-load.js';
12
+ export { applyGltfCamera, GLTF_LIT_WGSL, GltfScene, gltfSamplerKind, interleave3d, interleave3dTangent, loadGltf, } from './gltf-load.js';
13
+ export type { GltfSkeleton, SkinnedVertices } from './gltf-skin.js';
14
+ export { interleaveSkinned, skeletonFromSkin } from './gltf-skin.js';
15
+ export type { Ktx2DataFormat, Ktx2Level, Ktx2Supercompression, Ktx2Texture, } from './ktx2.js';
16
+ export { isKtx2, Ktx2Error, ktx2ToWebGpuFormat, parseKtx2 } from './ktx2.js';
17
+ export type { AssetKind, AssetOf, AtlasAsset, AtlasEntry, AudioEntry, BytesEntry, GltfEntry, ImageEntry, JsonEntry, Manifest, ManifestEntry, TextEntry, TextureArrayEntry, TextureEntry, } from './manifest.js';
18
+ export { defineManifest } from './manifest.js';
19
+ export type { MeshoptFilter, MeshoptMode } from './meshopt.js';
20
+ export { decodeMeshopt, MeshoptError } from './meshopt.js';
@@ -0,0 +1,10 @@
1
+ export { createAtlasTexture, extrudePixels, packAtlas } from './atlas.js';
2
+ export { BAKE_MANIFEST_VERSION, readBakeManifest } from './baked.js';
3
+ export { createBundle } from './bundle.js';
4
+ export { createAssetCache } from './cache.js';
5
+ export { composeTrs, decodeDataUri, GltfError, parseGltf, transformUv } from './gltf.js';
6
+ export { applyGltfCamera, GLTF_LIT_WGSL, GltfScene, gltfSamplerKind, interleave3d, interleave3dTangent, loadGltf, } from './gltf-load.js';
7
+ export { interleaveSkinned, skeletonFromSkin } from './gltf-skin.js';
8
+ export { isKtx2, Ktx2Error, ktx2ToWebGpuFormat, parseKtx2 } from './ktx2.js';
9
+ export { defineManifest } from './manifest.js';
10
+ export { decodeMeshopt, MeshoptError } from './meshopt.js';
@@ -0,0 +1,71 @@
1
+ /**
2
+ * KTX2 container reader: header, level index and the basic data format descriptor of a
3
+ * `.ktx2` file, each mip level as a view into the file's bytes (nothing copied). It reads the
4
+ * container only: Zstd / ZLIB-supercompressed levels and BasisLZ / UASTC Basis payloads are
5
+ * detected and reported (`supercompression`, no `levels`), not decoded, and nothing is
6
+ * uploaded (that needs a compressed-format texture path in `render`).
7
+ *
8
+ * `ktx2ToWebGpuFormat(vkFormat)` names the WebGPU format a level's bytes are in, when there is
9
+ * one (BC needs the `texture-compression-bc` device feature, ETC2 / EAC `-etc2`, ASTC `-astc`).
10
+ */
11
+ /** Malformed or truncated KTX2 data. */
12
+ export declare class Ktx2Error extends Error {
13
+ constructor(message: string);
14
+ }
15
+ /** `supercompressionScheme`: how the levels are packed on top of `vkFormat`. */
16
+ export type Ktx2Supercompression = 'none' | 'basislz' | 'zstd' | 'zlib';
17
+ /** One mip level: its bytes (a view into the file) and its size in texels. */
18
+ export interface Ktx2Level {
19
+ bytes: Uint8Array;
20
+ width: number;
21
+ height: number;
22
+ }
23
+ /** The basic data format descriptor's colour fields (Khronos Data Format spec). */
24
+ export interface Ktx2DataFormat {
25
+ /** `KHR_DF_MODEL_*`: 1 RGBSDA, 128+ block-compressed (BC1 128, BC7 135, ETC2 161, ASTC 162), 166 UASTC, 163 ETC1S. */
26
+ colorModel: number;
27
+ /** `KHR_DF_PRIMARIES_*`: 1 BT.709 / sRGB. */
28
+ colorPrimaries: number;
29
+ /** `KHR_DF_TRANSFER_*`: 1 linear, 2 sRGB. */
30
+ transferFunction: number;
31
+ /** `KHR_DF_FLAG_*`: bit 0 premultiplied alpha. */
32
+ flags: number;
33
+ }
34
+ /** A parsed KTX2 file. */
35
+ export interface Ktx2Texture {
36
+ /** The Vulkan `VkFormat` of the level data (0 `VK_FORMAT_UNDEFINED` for Basis payloads). */
37
+ vkFormat: number;
38
+ /** Bytes per component for uncompressed formats (1 for block-compressed ones). */
39
+ typeSize: number;
40
+ width: number;
41
+ /** 0 for a 1D texture. */
42
+ height: number;
43
+ /** 0 for a 1D or 2D texture. */
44
+ depth: number;
45
+ /** 0 when the texture is not an array. */
46
+ layers: number;
47
+ /** 6 for a cube map, else 1. */
48
+ faces: number;
49
+ /**
50
+ * Mip levels, largest first; each holds every layer and face of that level. Empty when
51
+ * `supercompression` is not `'none'` (the payload needs a decoder this reader does not have).
52
+ */
53
+ levels: Ktx2Level[];
54
+ /** How many levels the file says it has (1 when it asks the reader to generate mips). */
55
+ levelCount: number;
56
+ /** The basic descriptor's colour fields, or null when the file has none. */
57
+ dataFormat: Ktx2DataFormat | null;
58
+ supercompression: Ktx2Supercompression;
59
+ }
60
+ /** True when `bytes` starts with the KTX2 identifier. */
61
+ export declare function isKtx2(bytes: Uint8Array): boolean;
62
+ /**
63
+ * Read a KTX2 file's header, data format and levels. Throws `Ktx2Error` for a bad identifier,
64
+ * a truncated file or a level that runs past the end.
65
+ */
66
+ export declare function parseKtx2(bytes: Uint8Array): Ktx2Texture;
67
+ /**
68
+ * The WebGPU texture format a `VkFormat` stores, or null when WebGPU has none (or the file
69
+ * holds a Basis payload, `vkFormat` 0, that must be transcoded first).
70
+ */
71
+ export declare function ktx2ToWebGpuFormat(vkFormat: number): GPUTextureFormat | null;
@@ -0,0 +1,213 @@
1
+ /**
2
+ * KTX2 container reader: header, level index and the basic data format descriptor of a
3
+ * `.ktx2` file, each mip level as a view into the file's bytes (nothing copied). It reads the
4
+ * container only: Zstd / ZLIB-supercompressed levels and BasisLZ / UASTC Basis payloads are
5
+ * detected and reported (`supercompression`, no `levels`), not decoded, and nothing is
6
+ * uploaded (that needs a compressed-format texture path in `render`).
7
+ *
8
+ * `ktx2ToWebGpuFormat(vkFormat)` names the WebGPU format a level's bytes are in, when there is
9
+ * one (BC needs the `texture-compression-bc` device feature, ETC2 / EAC `-etc2`, ASTC `-astc`).
10
+ */
11
+ /** Malformed or truncated KTX2 data. */
12
+ export class Ktx2Error extends Error {
13
+ constructor(message) {
14
+ super(`ktx2: ${message}`);
15
+ this.name = 'Ktx2Error';
16
+ }
17
+ }
18
+ const IDENTIFIER = [0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
19
+ const HEADER_BYTES = 80;
20
+ const LEVEL_INDEX_BYTES = 24;
21
+ const SCHEMES = ['none', 'basislz', 'zstd', 'zlib'];
22
+ /** True when `bytes` starts with the KTX2 identifier. */
23
+ export function isKtx2(bytes) {
24
+ if (bytes.byteLength < IDENTIFIER.length)
25
+ return false;
26
+ for (let i = 0; i < IDENTIFIER.length; i++)
27
+ if (bytes[i] !== IDENTIFIER[i])
28
+ return false;
29
+ return true;
30
+ }
31
+ /**
32
+ * Read a KTX2 file's header, data format and levels. Throws `Ktx2Error` for a bad identifier,
33
+ * a truncated file or a level that runs past the end.
34
+ */
35
+ export function parseKtx2(bytes) {
36
+ if (!isKtx2(bytes))
37
+ throw new Ktx2Error('not a KTX2 file (bad identifier)');
38
+ if (bytes.byteLength < HEADER_BYTES)
39
+ throw new Ktx2Error('truncated header');
40
+ const dv = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
41
+ const u32 = (at) => dv.getUint32(at, true);
42
+ const u64 = (at) => {
43
+ const hi = dv.getUint32(at + 4, true);
44
+ if (hi !== 0)
45
+ throw new Ktx2Error(`offset at byte ${at} does not fit in 32 bits`);
46
+ return dv.getUint32(at, true);
47
+ };
48
+ const vkFormat = u32(12);
49
+ const typeSize = u32(16);
50
+ const width = u32(20);
51
+ const height = u32(24);
52
+ const depth = u32(28);
53
+ const layers = u32(32);
54
+ const faces = u32(36);
55
+ const levelCount = Math.max(1, u32(40));
56
+ const scheme = u32(44);
57
+ const supercompression = SCHEMES[scheme];
58
+ if (!supercompression)
59
+ throw new Ktx2Error(`supercompression scheme ${scheme} unknown`);
60
+ if (width === 0)
61
+ throw new Ktx2Error('pixelWidth is 0');
62
+ if (faces !== 1 && faces !== 6)
63
+ throw new Ktx2Error(`faceCount ${faces} must be 1 or 6`);
64
+ const dfdOffset = u32(48);
65
+ const dfdLength = u32(52);
66
+ if (HEADER_BYTES + levelCount * LEVEL_INDEX_BYTES > bytes.byteLength) {
67
+ throw new Ktx2Error('truncated level index');
68
+ }
69
+ let dataFormat = null;
70
+ // DFD: u32 total size, then the basic block: two u32 words, then the colour bytes.
71
+ if (dfdLength >= 16) {
72
+ if (dfdOffset + dfdLength > bytes.byteLength)
73
+ throw new Ktx2Error('data format runs past the end');
74
+ dataFormat = {
75
+ colorModel: bytes[dfdOffset + 12],
76
+ colorPrimaries: bytes[dfdOffset + 13],
77
+ transferFunction: bytes[dfdOffset + 14],
78
+ flags: bytes[dfdOffset + 15],
79
+ };
80
+ }
81
+ const levels = [];
82
+ if (supercompression === 'none') {
83
+ for (let i = 0; i < levelCount; i++) {
84
+ const at = HEADER_BYTES + i * LEVEL_INDEX_BYTES;
85
+ const off = u64(at);
86
+ const len = u64(at + 8);
87
+ if (off + len > bytes.byteLength)
88
+ throw new Ktx2Error(`level ${i} runs past the end`);
89
+ levels.push({
90
+ bytes: bytes.subarray(off, off + len),
91
+ width: Math.max(1, width >> i),
92
+ height: Math.max(1, height >> i),
93
+ });
94
+ }
95
+ }
96
+ return {
97
+ vkFormat,
98
+ typeSize,
99
+ width,
100
+ height,
101
+ depth,
102
+ layers,
103
+ faces,
104
+ levels,
105
+ levelCount,
106
+ dataFormat,
107
+ supercompression,
108
+ };
109
+ }
110
+ /** Uncompressed and packed `VkFormat`s with a WebGPU twin. */
111
+ const PLAIN_FORMATS = {
112
+ 9: 'r8unorm',
113
+ 10: 'r8snorm',
114
+ 13: 'r8uint',
115
+ 14: 'r8sint',
116
+ 16: 'rg8unorm',
117
+ 17: 'rg8snorm',
118
+ 20: 'rg8uint',
119
+ 21: 'rg8sint',
120
+ 37: 'rgba8unorm',
121
+ 38: 'rgba8snorm',
122
+ 41: 'rgba8uint',
123
+ 42: 'rgba8sint',
124
+ 43: 'rgba8unorm-srgb',
125
+ 44: 'bgra8unorm',
126
+ 50: 'bgra8unorm-srgb',
127
+ 64: 'rgb10a2unorm',
128
+ 74: 'r16uint',
129
+ 75: 'r16sint',
130
+ 76: 'r16float',
131
+ 81: 'rg16uint',
132
+ 82: 'rg16sint',
133
+ 83: 'rg16float',
134
+ 95: 'rgba16uint',
135
+ 96: 'rgba16sint',
136
+ 97: 'rgba16float',
137
+ 98: 'r32uint',
138
+ 99: 'r32sint',
139
+ 100: 'r32float',
140
+ 101: 'rg32uint',
141
+ 102: 'rg32sint',
142
+ 103: 'rg32float',
143
+ 107: 'rgba32uint',
144
+ 108: 'rgba32sint',
145
+ 109: 'rgba32float',
146
+ 122: 'rg11b10ufloat',
147
+ 123: 'rgb9e5ufloat',
148
+ 124: 'depth16unorm',
149
+ 126: 'depth32float',
150
+ };
151
+ /** Block-compressed `VkFormat`s 131..156 (BC1..BC7, ETC2, EAC), in VkFormat order. */
152
+ const BLOCK_FORMATS = [
153
+ 'bc1-rgba-unorm', // 131 BC1_RGB_UNORM (WebGPU has the RGBA form only)
154
+ 'bc1-rgba-unorm-srgb',
155
+ 'bc1-rgba-unorm',
156
+ 'bc1-rgba-unorm-srgb',
157
+ 'bc2-rgba-unorm',
158
+ 'bc2-rgba-unorm-srgb',
159
+ 'bc3-rgba-unorm',
160
+ 'bc3-rgba-unorm-srgb',
161
+ 'bc4-r-unorm',
162
+ 'bc4-r-snorm',
163
+ 'bc5-rg-unorm',
164
+ 'bc5-rg-snorm',
165
+ 'bc6h-rgb-ufloat',
166
+ 'bc6h-rgb-float',
167
+ 'bc7-rgba-unorm',
168
+ 'bc7-rgba-unorm-srgb',
169
+ 'etc2-rgb8unorm',
170
+ 'etc2-rgb8unorm-srgb',
171
+ 'etc2-rgb8a1unorm',
172
+ 'etc2-rgb8a1unorm-srgb',
173
+ 'etc2-rgba8unorm',
174
+ 'etc2-rgba8unorm-srgb',
175
+ 'eac-r11unorm',
176
+ 'eac-r11snorm',
177
+ 'eac-rg11unorm',
178
+ 'eac-rg11snorm', // 156
179
+ ];
180
+ /** ASTC block sizes of `VkFormat` 157..184, each as (unorm, sRGB). */
181
+ const ASTC_SIZES = [
182
+ '4x4',
183
+ '5x4',
184
+ '5x5',
185
+ '6x5',
186
+ '6x6',
187
+ '8x5',
188
+ '8x6',
189
+ '8x8',
190
+ '10x5',
191
+ '10x6',
192
+ '10x8',
193
+ '10x10',
194
+ '12x10',
195
+ '12x12',
196
+ ];
197
+ /**
198
+ * The WebGPU texture format a `VkFormat` stores, or null when WebGPU has none (or the file
199
+ * holds a Basis payload, `vkFormat` 0, that must be transcoded first).
200
+ */
201
+ export function ktx2ToWebGpuFormat(vkFormat) {
202
+ const plain = PLAIN_FORMATS[vkFormat];
203
+ if (plain)
204
+ return plain;
205
+ if (vkFormat >= 131 && vkFormat <= 156)
206
+ return BLOCK_FORMATS[vkFormat - 131];
207
+ if (vkFormat >= 157 && vkFormat <= 184) {
208
+ const i = vkFormat - 157;
209
+ const size = ASTC_SIZES[i >> 1];
210
+ return `astc-${size}-${i & 1 ? 'unorm-srgb' : 'unorm'}`;
211
+ }
212
+ return null;
213
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * A typed asset manifest: the keys a game loads by, each with a kind and the uri(s) the game's
3
+ * `read` resolves. `defineManifest` is an identity function that keeps the literal types, so
4
+ * `bundle.get('hero')` is typed by the entry's kind (`AssetOf`). Plain data: no GPU, no network.
5
+ */
6
+ import type { LoadTextureArrayOptions, LoadTextureOptions, Texture } from '../render/texture.js';
7
+ import type { AtlasLayout, AtlasOptions, AtlasRect } from './atlas.js';
8
+ import type { GltfScene, LoadGltfOptions } from './gltf-load.js';
9
+ /** One 2D `Texture` through `loadTexture` (the image decoded with `createImageBitmap`). */
10
+ export interface TextureEntry {
11
+ kind: 'texture';
12
+ uri: string;
13
+ options?: LoadTextureOptions;
14
+ }
15
+ /** One `texture_2d_array` through `loadTextureArray`, a layer per uri, in order. */
16
+ export interface TextureArrayEntry {
17
+ kind: 'texture-array';
18
+ uris: string[];
19
+ options?: LoadTextureArrayOptions;
20
+ }
21
+ /**
22
+ * A glTF scene: the uri is parsed with `parseGltf`, every `externalUris` entry is read through
23
+ * `resources` (the uri the file names → the uri to read; an unmapped uri is read as is) and the
24
+ * result goes through `loadGltf`.
25
+ */
26
+ export interface GltfEntry {
27
+ kind: 'gltf';
28
+ uri: string;
29
+ resources?: Record<string, string>;
30
+ options?: LoadGltfOptions;
31
+ }
32
+ /** An `AudioBuffer`, decoded by the `audio` the bundle was given. */
33
+ export interface AudioEntry {
34
+ kind: 'audio';
35
+ uri: string;
36
+ }
37
+ /** `JSON.parse` of the bytes as UTF-8. */
38
+ export interface JsonEntry {
39
+ kind: 'json';
40
+ uri: string;
41
+ }
42
+ /** The bytes as a UTF-8 string. */
43
+ export interface TextEntry {
44
+ kind: 'text';
45
+ uri: string;
46
+ }
47
+ /** The bytes themselves. */
48
+ export interface BytesEntry {
49
+ kind: 'bytes';
50
+ uri: string;
51
+ }
52
+ /** An `ImageBitmap` (for a game that packs or inspects the pixels itself). */
53
+ export interface ImageEntry {
54
+ kind: 'image';
55
+ uri: string;
56
+ }
57
+ /** Loose images packed into one texture with `packAtlas` and `createAtlasTexture`. */
58
+ export interface AtlasEntry<N extends string = string> {
59
+ kind: 'atlas';
60
+ uris: Record<N, string>;
61
+ options?: AtlasOptions;
62
+ }
63
+ export type ManifestEntry = TextureEntry | TextureArrayEntry | GltfEntry | AudioEntry | JsonEntry | TextEntry | BytesEntry | ImageEntry | AtlasEntry;
64
+ export type AssetKind = ManifestEntry['kind'];
65
+ /** A manifest: asset keys to entries. */
66
+ export type Manifest = Record<string, ManifestEntry>;
67
+ /** What an `atlas` entry loads to: the texture, the uv rect per image name and the layout. */
68
+ export interface AtlasAsset<N extends string = string> {
69
+ texture: Texture;
70
+ rects: Record<N, AtlasRect>;
71
+ layout: AtlasLayout;
72
+ }
73
+ /** The loaded value of a manifest entry, by its kind. */
74
+ export type AssetOf<E extends ManifestEntry> = E extends TextureEntry ? Texture : E extends TextureArrayEntry ? Texture : E extends GltfEntry ? GltfScene : E extends AudioEntry ? AudioBuffer : E extends JsonEntry ? unknown : E extends TextEntry ? string : E extends BytesEntry ? ArrayBuffer : E extends ImageEntry ? ImageBitmap : E extends AtlasEntry<infer N> ? AtlasAsset<N> : never;
75
+ /**
76
+ * Identity with types: `const manifest = defineManifest({ hero: { kind: 'texture', uri: 'hero.png' } })`
77
+ * keeps `hero` as a `TextureEntry`, so `createBundle(manifest).get('hero')` is a `Texture`.
78
+ */
79
+ export declare function defineManifest<M extends Manifest>(entries: M): M;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Identity with types: `const manifest = defineManifest({ hero: { kind: 'texture', uri: 'hero.png' } })`
3
+ * keeps `hero` as a `TextureEntry`, so `createBundle(manifest).get('hero')` is a `Texture`.
4
+ */
5
+ export function defineManifest(entries) {
6
+ return entries;
7
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * A TypeScript port of the meshoptimizer decoders `EXT_meshopt_compression` needs (bitstream
3
+ * version 0 for vertices, versions 0 and 1 for indices): the vertex codec (`ATTRIBUTES`), the
4
+ * triangle index codec (`TRIANGLES`), the index sequence codec (`INDICES`) and the three
5
+ * filters (`OCTAHEDRAL`, `QUATERNION`, `EXPONENTIAL`) applied after the vertex codec. Sync, on
6
+ * `Uint8Array`s; the only allocation is the caller's target (one per buffer view). Malformed
7
+ * input throws `MeshoptError`. The reference is meshoptimizer's `vertexcodec.cpp`,
8
+ * `indexcodec.cpp` and `vertexfilter.cpp` (MIT, Arseny Kapoulkine); this port follows their
9
+ * scalar paths byte for byte.
10
+ */
11
+ /** `EXT_meshopt_compression` `mode`. */
12
+ export type MeshoptMode = 'ATTRIBUTES' | 'TRIANGLES' | 'INDICES';
13
+ /** `EXT_meshopt_compression` `filter` (`'NONE'` when absent). */
14
+ export type MeshoptFilter = 'NONE' | 'OCTAHEDRAL' | 'QUATERNION' | 'EXPONENTIAL';
15
+ /** A meshopt stream that does not decode (bad header, truncated, trailing bytes, bad stride). */
16
+ export declare class MeshoptError extends Error {
17
+ readonly name = "MeshoptError";
18
+ }
19
+ /**
20
+ * Decode one `EXT_meshopt_compression` buffer view into `target` (`count × stride` bytes, the
21
+ * view's `byteLength`), then apply `filter` in place. Throws `MeshoptError` on a bad stream.
22
+ */
23
+ export declare function decodeMeshopt(target: Uint8Array, count: number, stride: number, source: Uint8Array, mode: MeshoptMode, filter?: MeshoptFilter): void;