@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,403 @@
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
+ /** A meshopt stream that does not decode (bad header, truncated, trailing bytes, bad stride). */
12
+ export class MeshoptError extends Error {
13
+ name = 'MeshoptError';
14
+ }
15
+ const VERTEX_HEADER = 0xa0;
16
+ const INDEX_HEADER = 0xe0;
17
+ const SEQUENCE_HEADER = 0xd0;
18
+ const BYTE_GROUP = 16;
19
+ const BLOCK_BYTES = 8192;
20
+ const BLOCK_MAX = 256;
21
+ const TAIL_MAX = 32;
22
+ /** One byte lane of a vertex block; shared, so decoding allocates nothing. */
23
+ const lane = new Uint8Array(BLOCK_MAX);
24
+ /**
25
+ * Decode one `EXT_meshopt_compression` buffer view into `target` (`count × stride` bytes, the
26
+ * view's `byteLength`), then apply `filter` in place. Throws `MeshoptError` on a bad stream.
27
+ */
28
+ export function decodeMeshopt(target, count, stride, source, mode, filter = 'NONE') {
29
+ if (target.byteLength < count * stride) {
30
+ throw new MeshoptError(`target holds ${target.byteLength} bytes, needs ${count * stride}`);
31
+ }
32
+ if (mode === 'ATTRIBUTES') {
33
+ decodeVertices(target, count, stride, source);
34
+ if (filter !== 'NONE')
35
+ applyFilter(target, count, stride, filter);
36
+ return;
37
+ }
38
+ if (filter !== 'NONE')
39
+ throw new MeshoptError(`filter ${filter} applies to ATTRIBUTES only`);
40
+ if (stride !== 2 && stride !== 4) {
41
+ throw new MeshoptError(`index stride must be 2 or 4, got ${stride}`);
42
+ }
43
+ if (mode === 'TRIANGLES')
44
+ decodeTriangles(target, count, stride, source);
45
+ else if (mode === 'INDICES')
46
+ decodeSequence(target, count, stride, source);
47
+ else
48
+ throw new MeshoptError(`unknown mode ${String(mode)}`);
49
+ }
50
+ // ---------------------------------------------------------------- vertex codec
51
+ function decodeVertices(target, count, stride, src) {
52
+ if (stride <= 0 || stride > 256 || stride % 4 !== 0) {
53
+ throw new MeshoptError(`vertex stride must be a multiple of 4 up to 256, got ${stride}`);
54
+ }
55
+ const end = src.byteLength;
56
+ if (end < 1 + stride)
57
+ throw new MeshoptError('vertex stream truncated');
58
+ const header = src[0];
59
+ if ((header & 0xf0) !== VERTEX_HEADER)
60
+ throw new MeshoptError('not a meshopt vertex stream');
61
+ if ((header & 0x0f) > 0)
62
+ throw new MeshoptError(`vertex codec version ${header & 0x0f}`);
63
+ const blockSize = Math.min((BLOCK_BYTES / stride) & ~(BYTE_GROUP - 1), BLOCK_MAX);
64
+ // The first "previous vertex" is the stream's last `stride` bytes.
65
+ const tailFirst = end - stride;
66
+ let at = 1;
67
+ for (let offset = 0; offset < count; offset += blockSize) {
68
+ const n = Math.min(blockSize, count - offset);
69
+ const aligned = (n + BYTE_GROUP - 1) & ~(BYTE_GROUP - 1);
70
+ for (let k = 0; k < stride; k++) {
71
+ at = decodeBytes(src, at, end, aligned);
72
+ let p = offset === 0 ? src[tailFirst + k] : target[(offset - 1) * stride + k];
73
+ let o = offset * stride + k;
74
+ for (let i = 0; i < n; i++) {
75
+ const z = lane[i];
76
+ p = ((-(z & 1) ^ (z >>> 1)) + p) & 0xff;
77
+ target[o] = p;
78
+ o += stride;
79
+ }
80
+ }
81
+ }
82
+ if (end - at !== Math.max(TAIL_MAX, stride))
83
+ throw new MeshoptError('vertex stream size mismatch');
84
+ }
85
+ /** Decode `size` (a multiple of 16) bytes of one lane into `lane`; returns the new read offset. */
86
+ function decodeBytes(src, start, end, size) {
87
+ const groups = size / BYTE_GROUP;
88
+ const headerSize = (groups + 3) >> 2;
89
+ if (end - start < headerSize)
90
+ throw new MeshoptError('vertex stream truncated');
91
+ let at = start + headerSize;
92
+ for (let g = 0; g < groups; g++) {
93
+ const mode = (src[start + (g >> 2)] >> ((g & 3) * 2)) & 3;
94
+ const out = g * BYTE_GROUP;
95
+ if (mode === 0) {
96
+ lane.fill(0, out, out + BYTE_GROUP);
97
+ }
98
+ else if (mode === 3) {
99
+ if (end - at < BYTE_GROUP)
100
+ throw new MeshoptError('vertex stream truncated');
101
+ for (let i = 0; i < BYTE_GROUP; i++)
102
+ lane[out + i] = src[at + i];
103
+ at += BYTE_GROUP;
104
+ }
105
+ else {
106
+ const bits = mode === 1 ? 2 : 4;
107
+ const packed = bits * 2; // bytes of packed values for 16 entries
108
+ const escCode = (1 << bits) - 1;
109
+ let lit = at + packed;
110
+ if (lit > end)
111
+ throw new MeshoptError('vertex stream truncated');
112
+ let i = out;
113
+ for (let b = 0; b < packed; b++) {
114
+ let byte = src[at + b];
115
+ for (let s = 0; s < 8 / bits; s++) {
116
+ const enc = (byte >> (8 - bits)) & escCode;
117
+ byte = (byte << bits) & 0xff;
118
+ if (enc === escCode) {
119
+ if (lit >= end)
120
+ throw new MeshoptError('vertex stream truncated');
121
+ lane[i++] = src[lit++];
122
+ }
123
+ else {
124
+ lane[i++] = enc;
125
+ }
126
+ }
127
+ }
128
+ at = lit;
129
+ }
130
+ }
131
+ return at;
132
+ }
133
+ // ---------------------------------------------------------------- index codecs
134
+ /** The edge fifo (16 × 2) and vertex fifo (16) of the triangle codec; shared, reset per call. */
135
+ const edgeFifo = new Uint32Array(32);
136
+ const vertexFifo = new Uint32Array(16);
137
+ function decodeTriangles(target, count, size, src) {
138
+ if (count % 3 !== 0)
139
+ throw new MeshoptError(`index count ${count} is not a multiple of 3`);
140
+ const end = src.byteLength;
141
+ if (end < 1 + count / 3 + 16)
142
+ throw new MeshoptError('index stream truncated');
143
+ const header = src[0];
144
+ if ((header & 0xf0) !== INDEX_HEADER)
145
+ throw new MeshoptError('not a meshopt index stream');
146
+ const version = header & 0x0f;
147
+ if (version > 1)
148
+ throw new MeshoptError(`index codec version ${version}`);
149
+ const out = new DataView(target.buffer, target.byteOffset, target.byteLength);
150
+ const write = (i, v) => {
151
+ if (size === 2)
152
+ out.setUint16(i * 2, v & 0xffff, true);
153
+ else
154
+ out.setUint32(i * 4, v >>> 0, true);
155
+ };
156
+ edgeFifo.fill(0xffffffff);
157
+ vertexFifo.fill(0xffffffff);
158
+ let eo = 0;
159
+ let vo = 0;
160
+ let next = 0;
161
+ let last = 0;
162
+ const fecmax = version >= 1 ? 13 : 15;
163
+ let code = 1;
164
+ const safeEnd = end - 16;
165
+ const table = safeEnd;
166
+ const cursor = { at: 1 + count / 3, end: safeEnd };
167
+ const pushEdge = (a, b) => {
168
+ edgeFifo[eo * 2] = a;
169
+ edgeFifo[eo * 2 + 1] = b;
170
+ eo = (eo + 1) & 15;
171
+ };
172
+ const pushVertex = (v, cond = true) => {
173
+ vertexFifo[vo] = v;
174
+ if (cond)
175
+ vo = (vo + 1) & 15;
176
+ };
177
+ for (let i = 0; i < count; i += 3) {
178
+ if (cursor.at > safeEnd)
179
+ throw new MeshoptError('index stream truncated');
180
+ const codetri = src[code++];
181
+ if (codetri < 0xf0) {
182
+ const fe = codetri >> 4;
183
+ const e = (eo - 1 - fe) & 15;
184
+ const a = edgeFifo[e * 2];
185
+ const b = edgeFifo[e * 2 + 1];
186
+ const fec = codetri & 15;
187
+ let c;
188
+ if (fec < fecmax) {
189
+ c = fec === 0 ? next : vertexFifo[(vo - 1 - fec) & 15];
190
+ if (fec === 0)
191
+ next++;
192
+ pushVertex(c, fec === 0);
193
+ }
194
+ else {
195
+ // 13 and 14 are last - 1 and last + 1 (version 1); 15 is a free index.
196
+ c = fec !== 15 ? (last + (fec - (fec ^ 3))) >>> 0 : readIndex(src, cursor, last);
197
+ last = c;
198
+ pushVertex(c);
199
+ }
200
+ write(i, a);
201
+ write(i + 1, b);
202
+ write(i + 2, c);
203
+ pushEdge(c, b);
204
+ pushEdge(a, c);
205
+ }
206
+ else if (codetri < 0xfe) {
207
+ const aux = src[table + (codetri & 15)];
208
+ const feb = aux >> 4;
209
+ const fec = aux & 15;
210
+ const a = next++;
211
+ const b = feb === 0 ? next : vertexFifo[(vo - feb) & 15];
212
+ if (feb === 0)
213
+ next++;
214
+ const c = fec === 0 ? next : vertexFifo[(vo - fec) & 15];
215
+ if (fec === 0)
216
+ next++;
217
+ write(i, a);
218
+ write(i + 1, b);
219
+ write(i + 2, c);
220
+ pushVertex(a);
221
+ pushVertex(b, feb === 0);
222
+ pushVertex(c, fec === 0);
223
+ pushEdge(b, a);
224
+ pushEdge(c, b);
225
+ pushEdge(a, c);
226
+ }
227
+ else {
228
+ if (cursor.at >= safeEnd)
229
+ throw new MeshoptError('index stream truncated');
230
+ const aux = src[cursor.at++];
231
+ const fea = codetri === 0xfe ? 0 : 15;
232
+ const feb = aux >> 4;
233
+ const fec = aux & 15;
234
+ if (aux === 0)
235
+ next = 0; // reset (version 1)
236
+ let a = fea === 0 ? next++ : 0;
237
+ let b = feb === 0 ? next++ : vertexFifo[(vo - feb) & 15];
238
+ let c = fec === 0 ? next++ : vertexFifo[(vo - fec) & 15];
239
+ if (fea === 15)
240
+ last = a = readIndex(src, cursor, last);
241
+ if (feb === 15)
242
+ last = b = readIndex(src, cursor, last);
243
+ if (fec === 15)
244
+ last = c = readIndex(src, cursor, last);
245
+ write(i, a);
246
+ write(i + 1, b);
247
+ write(i + 2, c);
248
+ pushVertex(a);
249
+ pushVertex(b, feb === 0 || feb === 15);
250
+ pushVertex(c, fec === 0 || fec === 15);
251
+ pushEdge(b, a);
252
+ pushEdge(c, b);
253
+ pushEdge(a, c);
254
+ }
255
+ }
256
+ if (cursor.at !== safeEnd)
257
+ throw new MeshoptError('index stream size mismatch');
258
+ }
259
+ function decodeSequence(target, count, size, src) {
260
+ const end = src.byteLength;
261
+ if (end < 1 + count + 4)
262
+ throw new MeshoptError('index sequence truncated');
263
+ const header = src[0];
264
+ if ((header & 0xf0) !== SEQUENCE_HEADER)
265
+ throw new MeshoptError('not a meshopt index sequence');
266
+ const version = header & 0x0f;
267
+ if (version > 1)
268
+ throw new MeshoptError(`index sequence version ${version}`);
269
+ const out = new DataView(target.buffer, target.byteOffset, target.byteLength);
270
+ const safeEnd = end - 4;
271
+ const cursor = { at: 1, end: safeEnd };
272
+ let last0 = 0;
273
+ let last1 = 0;
274
+ for (let i = 0; i < count; i++) {
275
+ if (cursor.at >= safeEnd)
276
+ throw new MeshoptError('index sequence truncated');
277
+ let v = readVByte(src, cursor);
278
+ const current = v & 1;
279
+ v >>>= 1;
280
+ const d = (v >>> 1) ^ -(v & 1);
281
+ const index = ((current ? last1 : last0) + d) >>> 0;
282
+ if (current)
283
+ last1 = index;
284
+ else
285
+ last0 = index;
286
+ if (size === 2)
287
+ out.setUint16(i * 2, index & 0xffff, true);
288
+ else
289
+ out.setUint32(i * 4, index, true);
290
+ }
291
+ if (cursor.at !== safeEnd)
292
+ throw new MeshoptError('index sequence size mismatch');
293
+ }
294
+ function readVByte(src, cursor) {
295
+ if (cursor.at >= src.byteLength)
296
+ throw new MeshoptError('index stream truncated');
297
+ const lead = src[cursor.at++];
298
+ if (lead < 128)
299
+ return lead;
300
+ let result = lead & 127;
301
+ let shift = 7;
302
+ for (let i = 0; i < 4; i++) {
303
+ if (cursor.at >= src.byteLength)
304
+ throw new MeshoptError('index stream truncated');
305
+ const group = src[cursor.at++];
306
+ result = (result | ((group & 127) << shift)) >>> 0;
307
+ shift += 7;
308
+ if (group < 128)
309
+ break;
310
+ }
311
+ return result >>> 0;
312
+ }
313
+ function readIndex(src, cursor, last) {
314
+ const v = readVByte(src, cursor);
315
+ const d = (v >>> 1) ^ -(v & 1);
316
+ return (last + d) >>> 0;
317
+ }
318
+ // ---------------------------------------------------------------- filters
319
+ function applyFilter(data, count, stride, filter) {
320
+ const dv = new DataView(data.buffer, data.byteOffset, count * stride);
321
+ if (filter === 'OCTAHEDRAL') {
322
+ if (stride === 4)
323
+ filterOct(dv, count, 1);
324
+ else if (stride === 8)
325
+ filterOct(dv, count, 2);
326
+ else
327
+ throw new MeshoptError(`OCTAHEDRAL needs stride 4 or 8, got ${stride}`);
328
+ }
329
+ else if (filter === 'QUATERNION') {
330
+ if (stride !== 8)
331
+ throw new MeshoptError(`QUATERNION needs stride 8, got ${stride}`);
332
+ filterQuat(dv, count);
333
+ }
334
+ else if (filter === 'EXPONENTIAL') {
335
+ if (stride % 4 !== 0)
336
+ throw new MeshoptError(`EXPONENTIAL needs a stride of 4n, got ${stride}`);
337
+ filterExp(dv, (count * stride) / 4);
338
+ }
339
+ else {
340
+ throw new MeshoptError(`unknown filter ${String(filter)}`);
341
+ }
342
+ }
343
+ const f = Math.fround;
344
+ /** Round half away from zero and truncate, as `int(x + (x >= 0 ? 0.5f : -0.5f))`. */
345
+ function roundAway(x) {
346
+ return Math.trunc(f(x + (x >= 0 ? 0.5 : -0.5)));
347
+ }
348
+ function filterOct(dv, count, bytes) {
349
+ const max = bytes === 1 ? 127 : 32767;
350
+ const get = (o) => (bytes === 1 ? dv.getInt8(o) : dv.getInt16(o, true));
351
+ const set = (o, v) => {
352
+ if (bytes === 1)
353
+ dv.setInt8(o, v);
354
+ else
355
+ dv.setInt16(o, v, true);
356
+ };
357
+ for (let i = 0; i < count; i++) {
358
+ const o = i * 4 * bytes;
359
+ let x = get(o);
360
+ let y = get(o + bytes);
361
+ const z = f(get(o + 2 * bytes) - Math.abs(x) - Math.abs(y));
362
+ const t = z >= 0 ? 0 : z;
363
+ x = f(x + (x >= 0 ? t : -t));
364
+ y = f(y + (y >= 0 ? t : -t));
365
+ const l = f(Math.sqrt(f(f(f(x * x) + f(y * y)) + f(z * z))));
366
+ const s = f(max / l);
367
+ set(o, roundAway(f(x * s)));
368
+ set(o + bytes, roundAway(f(y * s)));
369
+ set(o + 2 * bytes, roundAway(f(z * s)));
370
+ }
371
+ }
372
+ function filterQuat(dv, count) {
373
+ const scale = f(1 / Math.SQRT2);
374
+ for (let i = 0; i < count; i++) {
375
+ const o = i * 8;
376
+ const d3 = dv.getInt16(o + 6, true);
377
+ const sf = d3 | 3;
378
+ const ss = f(scale / sf);
379
+ const x = f(dv.getInt16(o, true) * ss);
380
+ const y = f(dv.getInt16(o + 2, true) * ss);
381
+ const z = f(dv.getInt16(o + 4, true) * ss);
382
+ const ww = f(f(f(1 - f(x * x)) - f(y * y)) - f(z * z));
383
+ const w = f(Math.sqrt(ww >= 0 ? ww : 0));
384
+ const qc = d3 & 3;
385
+ dv.setInt16(o + ((qc + 1) & 3) * 2, roundAway(f(x * 32767)), true);
386
+ dv.setInt16(o + ((qc + 2) & 3) * 2, roundAway(f(y * 32767)), true);
387
+ dv.setInt16(o + ((qc + 3) & 3) * 2, roundAway(f(z * 32767)), true);
388
+ dv.setInt16(o + qc * 2, roundAway(f(w * 32767)), true);
389
+ }
390
+ }
391
+ /** Scratch for the exponent's bit pattern; shared. */
392
+ const expBits = new Uint32Array(1);
393
+ const expFloat = new Float32Array(expBits.buffer);
394
+ function filterExp(dv, values) {
395
+ for (let i = 0; i < values; i++) {
396
+ const v = dv.getUint32(i * 4, true);
397
+ const m = (v << 8) >> 8;
398
+ const e = v >> 24;
399
+ expBits[0] = ((e + 127) << 23) >>> 0;
400
+ expFloat[0] = expFloat[0] * m;
401
+ dv.setUint32(i * 4, expBits[0], true);
402
+ }
403
+ }