@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,320 @@
1
+ /**
2
+ * Tweens: the `Tween` handle every kind shares, and the three leaf kinds (`PropertyTween`,
3
+ * `ValueTween`, `DelayTween`). `timeline.ts` adds the groups and the `Tweens` manager.
4
+ *
5
+ * A tween is driven through `advance(dt)`, which returns the part of `dt` it did not use (0
6
+ * while running; the overflow once it finishes), so a sequence carries leftover time into the
7
+ * next child and a loop into the next iteration. After construction nothing here allocates per
8
+ * update: property paths are resolved to holders and keys up front, start values are captured
9
+ * into typed arrays, and callbacks are stored in arrays that only grow in `then`.
10
+ */
11
+ import { isSpring, stepSpring } from './ease.js';
12
+ export class TweenBase {
13
+ progress = 0;
14
+ elapsed = 0;
15
+ duration;
16
+ complete = false;
17
+ killed = false;
18
+ paused = false;
19
+ timeScale;
20
+ /** @internal The manager this tween registered with (roots only). */
21
+ owner = null;
22
+ /** @internal True while the owner's list holds this tween. */
23
+ listed = false;
24
+ /** @internal True once a group took the tween; it then never talks to the manager. */
25
+ grouped = false;
26
+ /** @internal Direction imposed by the parent (yoyo on a group). */
27
+ parentReversed = false;
28
+ ease;
29
+ spring;
30
+ delay;
31
+ loops;
32
+ yoyo;
33
+ onStart;
34
+ onUpdate;
35
+ onComplete;
36
+ delayLeft;
37
+ iteration = 0;
38
+ started = false;
39
+ /** Start values were read once; a group's loop replays them instead of reading again. */
40
+ captured = false;
41
+ keepStart = false;
42
+ thenFns = null;
43
+ /** Spring state `[position, velocity]`, springs only. */
44
+ springState;
45
+ constructor(seconds, opts) {
46
+ const e = opts.ease;
47
+ if (isSpring(e)) {
48
+ this.spring = e;
49
+ this.ease = null;
50
+ this.duration = Number.POSITIVE_INFINITY;
51
+ this.springState = new Float64Array(2);
52
+ this.loops = 0;
53
+ this.yoyo = false;
54
+ }
55
+ else {
56
+ this.spring = null;
57
+ this.ease = e ?? null;
58
+ this.duration = Math.max(0, Number.isFinite(seconds) ? seconds : 0);
59
+ this.springState = null;
60
+ this.loops = opts.loops ?? 0;
61
+ this.yoyo = opts.yoyo ?? false;
62
+ }
63
+ this.delay = Math.max(0, opts.delay ?? 0);
64
+ this.delayLeft = this.delay;
65
+ this.timeScale = opts.timeScale ?? 1;
66
+ this.onStart = opts.onStart;
67
+ this.onUpdate = opts.onUpdate;
68
+ this.onComplete = opts.onComplete;
69
+ }
70
+ pause() {
71
+ this.paused = true;
72
+ }
73
+ resume() {
74
+ this.paused = false;
75
+ }
76
+ kill() {
77
+ this.killed = true;
78
+ }
79
+ restart() {
80
+ this.reset();
81
+ if (!this.grouped && this.owner && !this.listed)
82
+ this.owner.readd(this);
83
+ }
84
+ // biome-ignore lint/suspicious/noThenProperty: intentionally thenable, so `await tween` works too.
85
+ then(fn) {
86
+ if (this.complete) {
87
+ fn();
88
+ return this;
89
+ }
90
+ if (!this.thenFns)
91
+ this.thenFns = [];
92
+ this.thenFns.push(fn);
93
+ return this;
94
+ }
95
+ promise() {
96
+ return new Promise((resolve) => {
97
+ this.then(resolve);
98
+ });
99
+ }
100
+ /** @internal True once the tween no longer moves. */
101
+ get done() {
102
+ return this.complete || this.killed;
103
+ }
104
+ /** @internal Seconds the whole tween lasts: delay plus every iteration; `Infinity` if it never ends. */
105
+ get total() {
106
+ return this.loops < 0
107
+ ? Number.POSITIVE_INFINITY
108
+ : this.delay + this.duration * (this.loops + 1);
109
+ }
110
+ /** @internal Seconds consumed so far, delay and finished iterations included. */
111
+ get consumed() {
112
+ if (this.done)
113
+ return this.total;
114
+ return this.delay - this.delayLeft + this.duration * this.iteration + this.elapsed;
115
+ }
116
+ /**
117
+ * @internal Back to the initial state without touching the manager. With `keepStart` (a
118
+ * group looping) the start values read on the first run are kept, so the motion replays.
119
+ */
120
+ reset(keepStart = false) {
121
+ this.keepStart = keepStart && this.captured;
122
+ this.progress = 0;
123
+ this.elapsed = 0;
124
+ this.complete = false;
125
+ this.killed = false;
126
+ this.delayLeft = this.delay;
127
+ this.iteration = 0;
128
+ this.started = false;
129
+ if (this.springState) {
130
+ this.springState[0] = 0;
131
+ this.springState[1] = 0;
132
+ }
133
+ this.resetChildren();
134
+ }
135
+ /** @internal Groups reset their children here. */
136
+ resetChildren() { }
137
+ /** @internal The direction of the current iteration: true runs 1 → 0. */
138
+ get reversed() {
139
+ return this.parentReversed !== (this.yoyo && (this.iteration & 1) === 1);
140
+ }
141
+ /**
142
+ * @internal Move forward by `dt` seconds (unscaled). Returns the part of `dt` left unused:
143
+ * 0 while running or paused, the overflow when the tween finishes, all of it when it already
144
+ * had.
145
+ */
146
+ advance(dt) {
147
+ if (this.done)
148
+ return dt;
149
+ if (this.paused || dt <= 0)
150
+ return 0;
151
+ const scale = this.timeScale;
152
+ if (scale <= 0)
153
+ return 0;
154
+ let local = dt * scale;
155
+ if (this.delayLeft > 0) {
156
+ if (local < this.delayLeft) {
157
+ this.delayLeft -= local;
158
+ return 0;
159
+ }
160
+ local -= this.delayLeft;
161
+ this.delayLeft = 0;
162
+ }
163
+ if (!this.started) {
164
+ this.started = true;
165
+ if (!this.keepStart) {
166
+ this.capture();
167
+ this.captured = true;
168
+ }
169
+ this.onStart?.(this);
170
+ if (this.killed)
171
+ return 0;
172
+ }
173
+ return this.run(local) / scale;
174
+ }
175
+ /** @internal Move by `local` (scaled) seconds past the delay; return the unused part. */
176
+ run(local) {
177
+ if (this.spring)
178
+ return this.runSpring(local);
179
+ return this.runTimed(local);
180
+ }
181
+ runSpring(local) {
182
+ const s = this.springState;
183
+ const settled = stepSpring(s, this.spring, local);
184
+ this.elapsed += local;
185
+ this.progress = s[0];
186
+ this.applyAt(this.progress);
187
+ this.onUpdate?.(this);
188
+ if (settled && !this.killed)
189
+ this.finish();
190
+ return 0;
191
+ }
192
+ runTimed(local) {
193
+ const duration = this.duration;
194
+ let t = this.elapsed + local;
195
+ // Each loop boundary crossed applies its end value, so callbacks see every extreme.
196
+ while (t >= duration && this.canLoop()) {
197
+ this.applyAt(this.reversed ? 0 : 1);
198
+ this.nextIteration();
199
+ t -= duration;
200
+ if (duration === 0) {
201
+ // A zero-length looping tween would spin forever; one boundary is enough.
202
+ t = 0;
203
+ break;
204
+ }
205
+ }
206
+ let leftover = 0;
207
+ if (t >= duration) {
208
+ leftover = t - duration;
209
+ t = duration;
210
+ }
211
+ this.elapsed = t;
212
+ this.progress = duration > 0 ? t / duration : 1;
213
+ const p = this.reversed ? 1 - this.progress : this.progress;
214
+ // The endpoints bypass the ease: every ease is 0 at 0 and 1 at 1 by contract, but floating
215
+ // point may land at 0.9999999999999999, and the end value must be exactly the target.
216
+ this.applyAt(this.ease && p > 0 && p < 1 ? this.ease(p) : p);
217
+ this.onUpdate?.(this);
218
+ if (this.killed)
219
+ return 0;
220
+ if (t >= duration) {
221
+ this.finish();
222
+ return leftover;
223
+ }
224
+ return 0;
225
+ }
226
+ /** @internal Whether another iteration follows the current one. */
227
+ canLoop() {
228
+ return this.loops < 0 || this.iteration < this.loops;
229
+ }
230
+ /** @internal Begin the next iteration. */
231
+ nextIteration() {
232
+ this.iteration++;
233
+ this.elapsed = 0;
234
+ this.progress = 0;
235
+ this.onIteration();
236
+ }
237
+ /** @internal A loop boundary was crossed (groups restart their children). */
238
+ onIteration() { }
239
+ /** @internal Mark complete and fire the completion callbacks. */
240
+ finish() {
241
+ this.complete = true;
242
+ this.onComplete?.(this);
243
+ const fns = this.thenFns;
244
+ if (fns)
245
+ for (let i = 0; i < fns.length; i++)
246
+ fns[i]();
247
+ }
248
+ }
249
+ /** Animates number fields of an object (nested paths and typed-array indices allowed). */
250
+ export class PropertyTween extends TweenBase {
251
+ target;
252
+ holders;
253
+ keys;
254
+ from;
255
+ to;
256
+ constructor(target, props, seconds, opts) {
257
+ super(seconds, opts);
258
+ this.target = target;
259
+ const paths = Object.keys(props);
260
+ const n = paths.length;
261
+ this.holders = new Array(n);
262
+ this.keys = new Array(n);
263
+ this.from = new Float64Array(n);
264
+ this.to = new Float64Array(n);
265
+ for (let i = 0; i < n; i++) {
266
+ const path = paths[i];
267
+ const parts = path.split('.');
268
+ let holder = target;
269
+ for (let j = 0; j < parts.length - 1; j++) {
270
+ holder = holder[parts[j]];
271
+ if (holder === null || typeof holder !== 'object') {
272
+ throw new Error(`tween: '${path}' does not exist on the target`);
273
+ }
274
+ }
275
+ const key = parts[parts.length - 1];
276
+ if (typeof holder[key] !== 'number') {
277
+ throw new Error(`tween: '${path}' is not a number on the target`);
278
+ }
279
+ this.holders[i] = holder;
280
+ this.keys[i] = key;
281
+ this.to[i] = props[path];
282
+ }
283
+ }
284
+ capture() {
285
+ for (let i = 0; i < this.keys.length; i++)
286
+ this.from[i] = this.holders[i][this.keys[i]];
287
+ }
288
+ applyAt(k) {
289
+ const { holders, keys, from, to } = this;
290
+ for (let i = 0; i < keys.length; i++) {
291
+ const a = from[i];
292
+ holders[i][keys[i]] = k === 1 ? to[i] : a + (to[i] - a) * k;
293
+ }
294
+ }
295
+ }
296
+ /** Animates one number from `from` to `to`, reporting it through `onUpdate(value, tween)`. */
297
+ export class ValueTween extends TweenBase {
298
+ /** The value from the last update. */
299
+ value;
300
+ from;
301
+ to;
302
+ report;
303
+ constructor(from, to, seconds, onUpdate, opts) {
304
+ super(seconds, opts);
305
+ this.from = from;
306
+ this.to = to;
307
+ this.value = from;
308
+ this.report = onUpdate;
309
+ }
310
+ capture() { }
311
+ applyAt(k) {
312
+ this.value = k === 1 ? this.to : this.from + (this.to - this.from) * k;
313
+ this.report(this.value, this);
314
+ }
315
+ }
316
+ /** Does nothing for `seconds`; a pause inside a sequence. */
317
+ export class DelayTween extends TweenBase {
318
+ capture() { }
319
+ applyAt() { }
320
+ }
@@ -0,0 +1,206 @@
1
+ import { type Vec2 } from '../platform/letterbox.js';
2
+ /** A rectangle: origin top-left, y down (the shape of `Camera.screen` and `Surface.rect`). */
3
+ export interface AnchorRect {
4
+ x: number;
5
+ y: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ /**
10
+ * What anchors read from a camera: `Camera` from `@thunderclap-engine/engine/render` fits. `screen` is
11
+ * in logical px, or a fraction of the canvas when it lies inside the unit square (the renderer's
12
+ * viewport rule).
13
+ */
14
+ export interface AnchorCamera {
15
+ readonly viewProjection: ArrayLike<number>;
16
+ readonly screen: Readonly<AnchorRect>;
17
+ }
18
+ /**
19
+ * Where the canvas is: `rect` in CSS px relative to the overlay's parent and the logical (design)
20
+ * size it shows. `Surface` fits; `overlay.anchors` passes its own frame and design size.
21
+ */
22
+ export interface AnchorSurface {
23
+ readonly rect: Readonly<AnchorRect>;
24
+ readonly logicalWidth: number;
25
+ readonly logicalHeight: number;
26
+ }
27
+ export interface AnchorOptions {
28
+ /** CSS px added to the projected point. Default `[0, 0]`. */
29
+ offset?: readonly [number, number];
30
+ /**
31
+ * The point of the element's box placed on the anchor, as fractions of its size. Default
32
+ * `[0.5, 0.5]` (centred); `[0.5, 1]` sits the element on top of the point.
33
+ */
34
+ align?: readonly [number, number];
35
+ /**
36
+ * Keep the element inside the camera's viewport, `margin` CSS px from its edges, when the point
37
+ * leaves it or goes behind the camera (an off-screen marker). A clamped anchor is never hidden;
38
+ * while pinned to an edge it carries `data-anchor-clamped`. Default false.
39
+ */
40
+ clamp?: boolean;
41
+ /** Edge margin for `clamp`, CSS px. Default 16. */
42
+ margin?: number;
43
+ /**
44
+ * `'distance'` scales the element by `distance / w` (w is the clip w: the view depth under a
45
+ * perspective camera, 1 under an orthographic one), kept within `min`..`max`. Default `'none'`.
46
+ */
47
+ scale?: 'none' | 'distance';
48
+ /** The depth at which `scale: 'distance'` draws at 1. Default 10. */
49
+ distance?: number;
50
+ /** Scale bounds for `scale: 'distance'`. Default 0.25 and 2. */
51
+ min?: number;
52
+ max?: number;
53
+ /**
54
+ * Hide the element (`hidden` attribute) when the point is behind the camera or outside clip
55
+ * space. Default true; ignored when `clamp` is on.
56
+ */
57
+ hideBehind?: boolean;
58
+ /** The layer to place the element in (a key of `AnchorsOptions.layers`). Default: `root`. */
59
+ layer?: string;
60
+ }
61
+ /** One anchored element. */
62
+ export interface AnchorHandle {
63
+ readonly el: HTMLElement;
64
+ /** False while hidden by `hideBehind`, as of the last `update()`. */
65
+ readonly visible: boolean;
66
+ /** True while `clamp` holds the element at the viewport's edge. */
67
+ readonly clamped: boolean;
68
+ /** The anchor point in the layer, CSS px, as of the last `update()` (offset included). */
69
+ readonly x: number;
70
+ readonly y: number;
71
+ /** The scale applied, as of the last `update()` (1 unless `scale: 'distance'`). */
72
+ readonly scale: number;
73
+ /** Move the anchor to a world point (copied). */
74
+ set(world: ArrayLike<number>): void;
75
+ /** Stop placing the element and take it out of the layer. */
76
+ remove(): void;
77
+ }
78
+ /**
79
+ * The frame anchors project into (ws/ui-4): the logical (design) size the camera's `screen` is
80
+ * in and the CSS rect it fills, relative to the overlay's parent. `Anchors.frame` is kept current
81
+ * with the surface, so tooltips, the cursor, float numbers and the minimap read one source.
82
+ */
83
+ export interface AnchorFrame {
84
+ readonly width: number;
85
+ readonly height: number;
86
+ readonly rect: Readonly<AnchorRect>;
87
+ }
88
+ export interface AnchorsOptions {
89
+ /** The default layer. It should be laid over the frame (the canvas rect), like `ui.layers.hud`. */
90
+ root: HTMLElement;
91
+ surface: AnchorSurface;
92
+ /** The camera to project through, read on every `update()`. */
93
+ camera: () => AnchorCamera;
94
+ /** Other layers by name, for `AnchorOptions.layer`. */
95
+ layers?: Readonly<Record<string, HTMLElement>>;
96
+ /**
97
+ * Is the named layer laid over the frame (true) or over the frame's parent (false, so the
98
+ * frame's offset is added)? Default: every layer is on the frame.
99
+ */
100
+ onFrame?: (layer: string) => boolean;
101
+ }
102
+ /** Typed OM parts reused for one element, so a move allocates nothing where the API exists. */
103
+ export interface TypedTransform {
104
+ x: CSSUnitValue;
105
+ y: CSSUnitValue;
106
+ s: CSSUnitValue;
107
+ value: CSSTransformValue;
108
+ }
109
+ declare class Anchor implements AnchorHandle {
110
+ readonly el: HTMLElement;
111
+ private readonly owner;
112
+ readonly world: Float32Array<ArrayBuffer>;
113
+ visible: boolean;
114
+ clamped: boolean;
115
+ x: number;
116
+ y: number;
117
+ scale: number;
118
+ removed: boolean;
119
+ readonly ax: number;
120
+ readonly ay: number;
121
+ readonly ox: number;
122
+ readonly oy: number;
123
+ readonly clamp: boolean;
124
+ readonly margin: number;
125
+ readonly byDistance: boolean;
126
+ readonly distance: number;
127
+ readonly min: number;
128
+ readonly max: number;
129
+ readonly hideBehind: boolean;
130
+ readonly layer: string | null;
131
+ readonly typed: TypedTransform | null;
132
+ /** The string fallback's tail: `scale(…)` is written in front of it. */
133
+ readonly alignCss: string;
134
+ constructor(el: HTMLElement, world: ArrayLike<number>, opts: AnchorOptions, owner: Anchors);
135
+ set(world: ArrayLike<number>): void;
136
+ remove(): void;
137
+ /** Write the element's place; only what changed touches the DOM. */
138
+ place(x: number, y: number, s: number, visible: boolean, clamped: boolean): void;
139
+ }
140
+ /**
141
+ * CSS Typed OM where the browser has it (Chromium, WebKit); null elsewhere (string fallback).
142
+ * `translate3d(x, y, 0) scale(s) translate(-ax%, -ay%)` with its three values reusable.
143
+ * @internal shared with the float numbers.
144
+ */
145
+ export declare function typedTransform(el: HTMLElement, ax: number, ay: number): TypedTransform | null;
146
+ /**
147
+ * DOM elements that follow world points: a name over a character, a damage number, a hint on a
148
+ * tile, a marker that stays on screen for something off it. Each `update()` projects every point
149
+ * through the camera (`viewProjection`), maps clip space onto the camera's `screen` and that onto
150
+ * the canvas rect in CSS px, and writes `transform` on the element (layout never reflows). A
151
+ * point behind the camera or outside clip space hides its element (`hidden`) unless it is
152
+ * clamped. `update()` allocates nothing in steady state where CSS Typed OM exists; elsewhere a
153
+ * moved element gets one transform string.
154
+ *
155
+ * In a game, `ctx.ui.anchors(camera)` builds the overlay's one `Anchors` on `ui.layers.hud`, and
156
+ * `createGame` updates it after every frame.
157
+ */
158
+ export declare class Anchors {
159
+ private readonly opts;
160
+ private readonly list;
161
+ private readonly clip;
162
+ private readonly pt;
163
+ private cam;
164
+ private readonly frameState;
165
+ private m;
166
+ private sc;
167
+ private kx;
168
+ private ky;
169
+ private vx0;
170
+ private vy0;
171
+ private vx1;
172
+ private vy1;
173
+ /** The clip w of the last projected point (view depth under a perspective camera). */
174
+ private depth;
175
+ constructor(opts: AnchorsOptions);
176
+ /** Anchored elements. */
177
+ get size(): number;
178
+ /** The logical size and CSS rect projected into, as the surface has them now (one reused object). */
179
+ get frame(): AnchorFrame;
180
+ /**
181
+ * Project a world point into frame CSS px (the hud layer's coordinates), written to `out`, the
182
+ * way an anchor is placed before its offset and clamp. Returns whether the point is in view: a
183
+ * point behind the camera is pushed far out along its direction, one outside the viewport
184
+ * lands where it would. Allocates nothing.
185
+ */
186
+ project(x: number, y: number, z: number, out: Vec2): boolean;
187
+ /** Project through another camera from the next `update()` on. */
188
+ setCamera(camera: () => AnchorCamera): void;
189
+ /**
190
+ * Place `el` at the world point `world` (copied) from the next `update()` on. The element is
191
+ * appended to its layer (`opts.layer`, else `root`) and positioned absolutely at the layer's
192
+ * top-left, moved by `transform` only.
193
+ */
194
+ add(el: HTMLElement, world: ArrayLike<number>, opts?: AnchorOptions): AnchorHandle;
195
+ /** Remove every anchored element. */
196
+ clear(): void;
197
+ /** @internal */
198
+ drop(a: Anchor): void;
199
+ /** Place every element for the camera as it is now. Call once a frame, after the camera moved. */
200
+ update(): void;
201
+ /** Read the camera and the viewport (camera.screen in frame CSS px) for the projections after. */
202
+ private prepare;
203
+ /** One point through the prepared camera: `out` gets frame CSS px, `depth` the clip w. */
204
+ private projectPrepared;
205
+ }
206
+ export {};