@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,197 @@
1
+ import { WGSL_PBR } from '../render/pbr-wgsl.js';
2
+ import { WGSL_GLOBALS, WGSL_LIGHTS, WGSL_NOISE } from '../render/wgsl.js';
3
+ /** Wave layers the params block carries (`WaterOptions.waves` beyond this are ignored). */
4
+ export const WATER_MAX_WAVES = 4;
5
+ /**
6
+ * The water shader: a plane in the engine's 3D vertex layout, no instance, group 1 = the
7
+ * water's params block and its copy of the scene depth.
8
+ *
9
+ * Waves. Each layer is an analytic field with a closed-form gradient (`water_wave`):
10
+ * `p = (x, z) * scale + dir * (t * speed)`, `a = p.x + 0.6 sin(1.3 p.y)`,
11
+ * `b = 0.8 p.y + 0.5 sin(0.9 p.x)`, value `sin(a) cos(b)` in -1..1, and its derivatives by the
12
+ * chain rule. The height is `level + displace * Σ amplitude_i * value_i` (the vertex shader
13
+ * offsets y by it; `waterHeight` in `water.ts` is the same sum in TypeScript), and the normal
14
+ * is `normalize(-slope.x, 1, -slope.z)` with `slope = Σ amplitude_i * scale_i * grad_i`, so
15
+ * `amplitude` is the normal strength whether or not vertices move.
16
+ *
17
+ * Shading, all linear: the view ray's Schlick Fresnel (f0 0.02) times `fresnel` lerps the
18
+ * refraction colour (`shallow` → `deep` by the linear depth below the surface over
19
+ * `depth_fade`, from the depth copy) towards the reflection colour (a sky gradient between
20
+ * `lights.fog.rgb`, or a pale haze without fog, at the horizon and a bluer zenith, darkened at
21
+ * night like `Sky`); the sun adds a GGX lobe of `roughness` (`engine_d_ggx`,
22
+ * `engine_v_smith_ggx`, `engine_f_schlick` from `WGSL_PBR`), which also goes to the emissive
23
+ * target so bloom picks it up; foam (`foam.w` > 0) mixes `foam.rgb` in where the depth below the
24
+ * surface is under `foam.w`, through a two-octave noise mask; the alpha ramps up from zero at
25
+ * the shoreline over a quarter of `depth_fade` to `opacity`, then `engine_fog`.
26
+ *
27
+ * Depth copy. `misc.z` says whether `scene_depth` holds this frame's copy. Its texel is turned
28
+ * into view-space z (`view_z_of`) and compared with the fragment's own: the difference is the
29
+ * water depth along the ray. A texel within a sliver of the fragment's own depth is the water
30
+ * surface itself (the copy was taken after a frame that drew this water into the same depth
31
+ * buffer) and counts as no information: fully deep, no foam. Without a copy the surface is
32
+ * deep everywhere, foam off.
33
+ */
34
+ export const WATER_WGSL = /* wgsl */ `
35
+ ${WGSL_GLOBALS}
36
+ ${WGSL_LIGHTS}
37
+ ${WGSL_NOISE}
38
+ ${WGSL_PBR}
39
+ struct WaterParams {
40
+ shallow: vec4f, // rgb, opacity
41
+ deep: vec4f, // rgb, depth fade (world units)
42
+ surface: vec4f, // fresnel, roughness, displace, level
43
+ foam: vec4f, // rgb, width (0 = off)
44
+ misc: vec4f, // time, wave count, depth copy on, origin y
45
+ waves: array<vec4f, ${WATER_MAX_WAVES}>, // scale, speed, amplitude, direction angle
46
+ };
47
+ @group(1) @binding(0) var<uniform> water: WaterParams;
48
+ @group(1) @binding(1) var scene_depth: texture_depth_2d;
49
+
50
+ struct VertexIn {
51
+ @location(0) pos: vec3f,
52
+ @location(10) normal: vec3f,
53
+ @location(1) uv: vec2f,
54
+ @location(2) color: vec4f,
55
+ };
56
+
57
+ struct WaterOut {
58
+ @builtin(position) clip: vec4f,
59
+ @location(0) world: vec3f,
60
+ @location(1) view_z: f32,
61
+ };
62
+
63
+ struct FragOut {
64
+ @location(0) color: vec4f,
65
+ @location(1) emissive: vec4f,
66
+ };
67
+
68
+ // One layer's value and gradient (d/dp.x, d/dp.y) at p.
69
+ fn water_wave(p: vec2f) -> vec3f {
70
+ let a = p.x + 0.6 * sin(1.3 * p.y);
71
+ let b = 0.8 * p.y + 0.5 * sin(0.9 * p.x);
72
+ let sa = sin(a);
73
+ let ca = cos(a);
74
+ let sb = sin(b);
75
+ let cb = cos(b);
76
+ let dx = ca * cb - sa * sb * 0.45 * cos(0.9 * p.x);
77
+ let dy = ca * cb * 0.78 * cos(1.3 * p.y) - sa * sb * 0.8;
78
+ return vec3f(sa * cb, dx, dy);
79
+ }
80
+
81
+ // Summed layers at world (x, z): height sum (before displace) and the normal slope.
82
+ fn water_field(xz: vec2f, t: f32) -> vec3f {
83
+ var h = 0.0;
84
+ var slope = vec2f(0.0);
85
+ let n = u32(water.misc.y);
86
+ for (var i = 0u; i < n; i++) {
87
+ let w = water.waves[i];
88
+ let dir = vec2f(cos(w.w), sin(w.w));
89
+ let p = xz * w.x + dir * (t * w.y);
90
+ let f = water_wave(p);
91
+ h += w.z * f.x;
92
+ slope += w.z * w.x * f.yz;
93
+ }
94
+ return vec3f(h, slope);
95
+ }
96
+
97
+ @vertex fn vs(v: VertexIn) -> WaterOut {
98
+ let t = water.misc.x;
99
+ let f = water_field(v.pos.xz, t);
100
+ let world = vec3f(v.pos.x, water.misc.w + water.surface.w + water.surface.z * f.x, v.pos.z);
101
+ var o: WaterOut;
102
+ o.clip = camera.view_proj * vec4f(world, 1.0);
103
+ o.world = world;
104
+ o.view_z = (camera.view * vec4f(world, 1.0)).z;
105
+ return o;
106
+ }
107
+
108
+ // View-space z of a depth-buffer value under camera.proj (any perspective or ortho matrix).
109
+ fn view_z_of(d: f32) -> f32 {
110
+ let p = camera.proj;
111
+ let den = d * p[2][3] - p[2][2];
112
+ return (p[3][2] - d * p[3][3]) / select(den, 1e-6, abs(den) < 1e-6);
113
+ }
114
+
115
+ @fragment fn fs(in: WaterOut) -> FragOut {
116
+ let t = water.misc.x;
117
+ let f = water_field(in.world.xz, t);
118
+ let n = normalize(vec3f(-f.y, 1.0, -f.z));
119
+ let v = normalize(camera.camera_pos.xyz - in.world);
120
+ let n_dot_v = max(dot(n, v), 1e-4);
121
+ let depth_fade = max(water.deep.w, 1e-3);
122
+
123
+ // Water depth along the view ray, from the depth copy.
124
+ var diff = depth_fade;
125
+ var has_depth = false;
126
+ if (water.misc.z > 0.5) {
127
+ let dims = vec2i(textureDimensions(scene_depth));
128
+ let px = clamp(vec2i(in.clip.xy), vec2i(0), dims - 1);
129
+ let scene_z = view_z_of(textureLoad(scene_depth, px, 0));
130
+ let own = abs(scene_z - in.view_z) < 0.002 * abs(in.view_z) + 1e-3;
131
+ if (!own) {
132
+ diff = max(in.view_z - scene_z, 0.0);
133
+ has_depth = true;
134
+ }
135
+ }
136
+ let deep_t = saturate(diff / depth_fade);
137
+ let refraction = mix(water.shallow.rgb, water.deep.rgb, deep_t);
138
+
139
+ // Reflection: the sky gradient the reflected ray would see.
140
+ let r = reflect(-v, n);
141
+ let has_fog = lights.fog.w > 0.0;
142
+ let horizon = select(vec3f(0.62, 0.72, 0.9), lights.fog.rgb, has_fog);
143
+ let zenith = horizon * vec3f(0.35, 0.55, 1.0);
144
+ let to_sun = -lights.sun_dir;
145
+ let has_sun = dot(lights.sun_color, vec3f(1.0)) > 0.0;
146
+ let day = select(1.0, smoothstep(-0.12, 0.08, to_sun.y), has_sun);
147
+ let sky = mix(horizon, zenith, pow(saturate(r.y), 0.6)) * mix(0.06, 1.0, day);
148
+
149
+ let fresnel = water.surface.x * engine_f_schlick(vec3f(0.02), n_dot_v).x;
150
+ var col = mix(refraction, sky, saturate(fresnel));
151
+
152
+ // Sun highlight.
153
+ var spec = vec3f(0.0);
154
+ let n_dot_l = dot(n, to_sun);
155
+ if (has_sun && n_dot_l > 0.0) {
156
+ let rough = max(water.surface.y, ENGINE_MIN_ROUGHNESS);
157
+ let a2 = rough * rough * rough * rough;
158
+ let h = normalize(to_sun + v);
159
+ let d = engine_d_ggx(saturate(dot(n, h)), a2);
160
+ let vis = engine_v_smith_ggx(n_dot_v, n_dot_l, a2);
161
+ let f_s = engine_f_schlick(vec3f(0.02), saturate(dot(v, h)));
162
+ spec = lights.sun_color * (d * vis * ENGINE_PI * n_dot_l) * f_s;
163
+ }
164
+ col += spec;
165
+
166
+ // Alpha: transparent at the shoreline, opacity further out.
167
+ var alpha = water.shallow.w * smoothstep(0.0, 0.25 * depth_fade, diff);
168
+
169
+ // Foam against geometry.
170
+ var foam = 0.0;
171
+ if (has_depth && water.foam.w > 0.0) {
172
+ let edge = saturate(1.0 - diff / water.foam.w);
173
+ let mask = 0.65 * engine_noise(in.world.xz * 5.0 + vec2f(t * 0.4, -t * 0.3))
174
+ + 0.35 * engine_noise(in.world.xz * 13.0 - vec2f(t * 0.9, t * 0.5));
175
+ foam = edge * smoothstep(0.42, 0.72, mask + 0.4 * edge);
176
+ col = mix(col, water.foam.rgb, foam);
177
+ alpha = max(alpha, foam * water.shallow.w);
178
+ }
179
+
180
+ col = engine_fog(col, in.world);
181
+ var o: FragOut;
182
+ o.color = vec4f(col * alpha, alpha);
183
+ o.emissive = vec4f(spec * alpha, alpha);
184
+ return o;
185
+ }
186
+ `;
187
+ /** Copies a depth texture into the water's own depth32float copy (one fullscreen triangle). */
188
+ export const WATER_DEPTH_COPY_WGSL = /* wgsl */ `
189
+ @group(0) @binding(0) var src: texture_depth_2d;
190
+ @vertex fn vs(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {
191
+ let p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));
192
+ return vec4f(p * 2.0 - 1.0, 0.0, 1.0);
193
+ }
194
+ @fragment fn fs(@builtin(position) pos: vec4f) -> @builtin(frag_depth) f32 {
195
+ return textureLoad(src, vec2i(pos.xy), 0);
196
+ }
197
+ `;
@@ -0,0 +1,176 @@
1
+ import type { Drawable, Frame, ViewInfo } from '../render/frame.js';
2
+ import { type Mesh } from '../render/mesh.js';
3
+ import type { Renderer } from '../render/renderer.js';
4
+ import type { SceneTarget } from '../render/scene-target.js';
5
+ /** Floats in the water's params block: 5 vec4 + `WATER_MAX_WAVES` vec4 (144 bytes). */
6
+ export declare const WATER_PARAMS_FLOATS: number;
7
+ /** One scrolling wave layer (`WaterOptions.waves`, `Water.waves`). */
8
+ export interface WaterWave {
9
+ /** World units → field units (bigger is choppier). */
10
+ scale: number;
11
+ /** Field units scrolled per second. */
12
+ speed: number;
13
+ /** Normal strength (and, times `displace`, height) of the layer. */
14
+ amplitude: number;
15
+ /** Scroll direction in the xz plane; normalised when packed. */
16
+ direction: [number, number];
17
+ }
18
+ /** Foam settings (`WaterOptions.foam`, `Water.foam`); `null` for none. */
19
+ export interface WaterFoam {
20
+ /** World units of water depth under which foam forms. Default 0.4. */
21
+ width: number;
22
+ /** Linear RGB. Default near white. */
23
+ color: ArrayLike<number>;
24
+ }
25
+ export interface WaterOptions {
26
+ /** Plane extent along x and z (one number for a square). Default 100. Fixed at construction. */
27
+ size?: number | [number, number];
28
+ /** Grid subdivisions; `displace` needs more than 1 to show. Default 1. Fixed at construction. */
29
+ segments?: number | [number, number];
30
+ /** Surface height (y), relative to `origin`. Default 0. */
31
+ level?: number;
32
+ /**
33
+ * World position of the plane's centre: x and z are baked into the mesh, y is added to
34
+ * `level` (a world whose corner is the origin puts its water at `[sizeX / 2, 0, sizeZ / 2]`).
35
+ * Default `[0, 0, 0]`. Fixed at construction.
36
+ */
37
+ origin?: ArrayLike<number>;
38
+ /** Linear RGB where the water is shallow. */
39
+ shallowColor?: ArrayLike<number>;
40
+ /** Linear RGB at full depth. */
41
+ deepColor?: ArrayLike<number>;
42
+ /** World units of water depth at which the tint reaches `deepColor`. Default 4. */
43
+ depthFade?: number;
44
+ /** Reflection strength, 0..1 (the weight of the sky colour at grazing angles). Default 0.6. */
45
+ fresnel?: number;
46
+ /** Roughness of the sun highlight. Default 0.08. */
47
+ roughness?: number;
48
+ /** Wave layers (up to `WATER_MAX_WAVES`). Default two layers. */
49
+ waves?: WaterWave[];
50
+ /** Foam where the surface meets geometry; `null` for none. Default on, width 0.4. */
51
+ foam?: Partial<WaterFoam> | null;
52
+ /** Vertex height amplitude of the summed layers. Default 0 (flat mesh, normals still move). */
53
+ displace?: number;
54
+ /** Alpha away from the shoreline. Default 0.85. */
55
+ opacity?: number;
56
+ /** Where to copy the scene depth from (`renderer.target` by default). */
57
+ depthTarget?: SceneTarget;
58
+ /**
59
+ * Take this frame's opaque depth from the renderer's depth hook (`Drawable.readsDepth`,
60
+ * ws/render-hooks) instead of copying the previous frame's in `prepare`: the view splits its
61
+ * scene pass and the water samples the renderer's copy. Only a view with `depthTest` splits;
62
+ * elsewhere the water is then deep everywhere (no copy of its own). Default false.
63
+ */
64
+ readsDepth?: boolean;
65
+ }
66
+ /**
67
+ * An animated water surface: a plane from `geom`'s `plane` whose shader sums scrolling
68
+ * analytic wave layers for the normal (and the height when `displace` > 0), lerps a depth-tinted
69
+ * refraction colour towards a sky reflection by Fresnel, adds the sun's GGX highlight (also to
70
+ * the emissive target), fades to transparent at the shoreline and foams where the water is
71
+ * shallower than `foam.width`. `frame.drawable(water, order)` draws it after opaque geometry
72
+ * (drawables sort as blended); `update(dt)` advances the waves.
73
+ *
74
+ * Every field is live; `prepare` packs them into one `WATER_PARAMS_FLOATS` params block per
75
+ * frame. The sun, its colour and the fog colour (the horizon of the reflection) come from
76
+ * `frame.lights`; `Sky` present or not.
77
+ *
78
+ * Depth: under a depth camera the water tests and writes depth (`less-equal`), so particles and
79
+ * trails sort against it, and `prepare` copies the scene depth (`depthTarget ?? renderer.target`,
80
+ * its `SceneTarget.depth`) into its own `depth32float` texture for the depth fade, the shoreline
81
+ * alpha and the foam. The copy runs before this frame's scene pass, so it holds what the target
82
+ * held then: the previous frame's depth (which includes this water's own surface, read as "no
83
+ * information": deep, no foam) or that of an earlier `renderer.render` call this frame. For a
84
+ * shoreline, draw the water on its own layer in a second view of the same camera, after the
85
+ * opaque view (`harness/water.ts` does). Without a depth camera there is no copy: the surface is
86
+ * deep everywhere, foam off, and the pipeline has no depth state.
87
+ */
88
+ export declare class Water implements Drawable {
89
+ /** Surface height (y) above `origin`. Live. */
90
+ level: number;
91
+ /** World position of the plane's centre (`WaterOptions.origin`). Fixed. */
92
+ readonly origin: Float32Array<ArrayBuffer>;
93
+ /** Linear RGB where the water is shallow. Live. */
94
+ readonly shallowColor: Float32Array<ArrayBuffer>;
95
+ /** Linear RGB at full depth. Live. */
96
+ readonly deepColor: Float32Array<ArrayBuffer>;
97
+ /** World units of water depth to full `deepColor`. Live. */
98
+ depthFade: number;
99
+ /** Reflection strength, 0..1. Live. */
100
+ fresnel: number;
101
+ /** Roughness of the sun highlight. Live. */
102
+ roughness: number;
103
+ /** Wave layers; the first `WATER_MAX_WAVES` are uploaded. Live (replace or mutate). */
104
+ waves: WaterWave[];
105
+ /** Foam settings, or null for none. Live (replace or mutate). */
106
+ foam: WaterFoam | null;
107
+ /** Vertex height amplitude. Live. */
108
+ displace: number;
109
+ /** Alpha away from the shoreline. Live. */
110
+ opacity: number;
111
+ /** Where the scene depth is copied from; null for `renderer.target`. Live. */
112
+ depthTarget: SceneTarget | null;
113
+ /** See `WaterOptions.readsDepth`. Live. */
114
+ readsDepth: boolean;
115
+ /** Seconds `update` has advanced; the waves' clock. */
116
+ time: number;
117
+ /** The plane, owned; drawn through this drawable's own pipeline. */
118
+ readonly mesh: Mesh;
119
+ private readonly renderer;
120
+ private readonly device;
121
+ private readonly params;
122
+ private readonly paramsBuffer;
123
+ private readonly layout;
124
+ private readonly dummy;
125
+ private readonly dummyGroup;
126
+ private readonly desc;
127
+ /**
128
+ * Pipelines per depth format (null: none; a depth one writes depth) × the view target's aux
129
+ * key, built on first use from `renderer.sceneTargets` (ws/render-10).
130
+ */
131
+ private readonly pipelines;
132
+ private readonly copyLayout;
133
+ private readonly copyPipeline;
134
+ private readonly copyAtt;
135
+ private readonly copyPass;
136
+ private copy;
137
+ private copyGroup;
138
+ private src;
139
+ private srcGroup;
140
+ /** The depth copy ran this frame (`draw` binds it and the shader reads it). */
141
+ private depthOn;
142
+ /** The renderer's `depthCopy` view the hook group was made for (`readsDepth`). */
143
+ private hookView;
144
+ private hookGroup;
145
+ /** The group `draw` binds: own copy, the renderer's copy, or the 1×1 stand-in. */
146
+ private depthGroup;
147
+ constructor(renderer: Renderer, opts?: WaterOptions);
148
+ /** Advance the waves' clock. */
149
+ update(dt: number): void;
150
+ /**
151
+ * Copy the scene depth (under a depth camera) and pack the live fields into the params block
152
+ * (`WATER_PARAMS_FLOATS` floats: shallow rgb + opacity, deep rgb + depthFade, fresnel,
153
+ * roughness, displace, level, foam rgb + width, time, wave count, depth copy on, 0, then
154
+ * scale, speed, amplitude, direction angle per wave). Called by the renderer once per frame.
155
+ * No allocation in steady state.
156
+ */
157
+ prepare(encoder: GPUCommandEncoder, frame?: Frame): void;
158
+ /** Draw inside the scene pass: the plane, a depth-writing pipeline when the frame has depth. */
159
+ draw(pass: GPURenderPassEncoder, frame?: Frame): void;
160
+ /**
161
+ * The renderer's depth hook (`readsDepth`): bind this frame's opaque depth copy and flip the
162
+ * shader's depth flag on (a 4-byte write; `queue.writeBuffer` lands before the frame's
163
+ * commands run). A new bind group only when the copy texture changed (resize).
164
+ */
165
+ afterOpaque(_encoder: GPUCommandEncoder, view: ViewInfo): void;
166
+ private copyDepth;
167
+ private makeGroup;
168
+ private pipelineFor;
169
+ destroy(): void;
170
+ }
171
+ /**
172
+ * The surface height at world (`x`, `z`) at time `t` (default `water.time`): the origin's y
173
+ * plus `level` plus `displace` times the summed wave layers, the formula the vertex shader
174
+ * runs. Pure; no allocation. With `displace` 0 it is `origin[1] + level`.
175
+ */
176
+ export declare function waterHeight(water: Water, x: number, z: number, t?: number): number;