@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,229 @@
1
+ /**
2
+ * A flow field over a `NavMesh`: one Dijkstra from the goal polygons outward (centre to portal
3
+ * midpoint to centre, from the goal point itself in a goal polygon, priced by area) gives every
4
+ * polygon a distance and the neighbour it flows to, so any number of agents read a direction in
5
+ * O(1) with no search of their own.
6
+ * `direction3` points from the query to the portal midpoint into the next polygon (or to the
7
+ * nearest goal inside a goal polygon). `update()` rebuilds on a mesh version change.
8
+ * Allocated once per field; `update` allocates nothing.
9
+ */
10
+ import { CellHeap } from '../heap.js';
11
+ import { areaAllowed } from './mesh-path.js';
12
+ const snapped = { x: 0, y: 0, z: 0 };
13
+ /** Builds a flow field toward `goals` (points on the mesh) and keeps it current. */
14
+ export function createFlowField3(mesh, goals, opts = {}) {
15
+ const n = Math.max(1, mesh.polyCount);
16
+ const distances = new Float64Array(n);
17
+ const next = new Int32Array(n);
18
+ const portal = new Int32Array(n);
19
+ const heap = new CellHeap(n, distances);
20
+ const closed = new Uint8Array(n);
21
+ const goalPoly = new Int32Array(goals.length);
22
+ const goalX = new Float64Array(goals.length);
23
+ const goalY = new Float64Array(goals.length);
24
+ const goalZ = new Float64Array(goals.length);
25
+ const centreX = new Float64Array(n);
26
+ const centreY = new Float64Array(n);
27
+ const centreZ = new Float64Array(n);
28
+ /** The exit portal's midpoint per polygon (its centre at a goal). */
29
+ const exitX = new Float64Array(n);
30
+ const exitY = new Float64Array(n);
31
+ const exitZ = new Float64Array(n);
32
+ const areaCost = opts.areaCost;
33
+ const areaMask = opts.areaMask;
34
+ const snap = opts.snapRadius ?? Number.POSITIVE_INFINITY;
35
+ let version = -1;
36
+ let reached = 0;
37
+ const nvp = mesh.maxVertsPerPoly;
38
+ const build = () => {
39
+ version = mesh.version;
40
+ distances.fill(Number.POSITIVE_INFINITY);
41
+ next.fill(-1);
42
+ portal.fill(-1);
43
+ closed.fill(0);
44
+ heap.clear();
45
+ reached = 0;
46
+ for (let p = 0; p < mesh.polyCount; p++) {
47
+ mesh.polyCenter(p, snapped);
48
+ centreX[p] = snapped.x;
49
+ centreY[p] = snapped.y;
50
+ centreZ[p] = snapped.z;
51
+ }
52
+ for (let i = 0; i < goals.length; i++) {
53
+ const g = goals[i];
54
+ const p = mesh.findNearestPoly(g.x, g.y, g.z, snapped, snap);
55
+ goalPoly[i] = p;
56
+ goalX[i] = snapped.x;
57
+ goalY[i] = snapped.y;
58
+ goalZ[i] = snapped.z;
59
+ if (p < 0 || !areaAllowed(mesh.area[p], areaCost, areaMask))
60
+ continue;
61
+ if (distances[p] !== 0) {
62
+ // A goal polygon's legs are measured from the goal itself, not its centre.
63
+ centreX[p] = snapped.x;
64
+ centreY[p] = snapped.y;
65
+ centreZ[p] = snapped.z;
66
+ }
67
+ distances[p] = 0;
68
+ heap.pushOrDecrease(p);
69
+ }
70
+ const verts = mesh.verts;
71
+ const polys = mesh.polys;
72
+ const adjacency = mesh.adjacency;
73
+ while (heap.size > 0) {
74
+ const cur = heap.pop();
75
+ closed[cur] = 1;
76
+ reached++;
77
+ const dc = distances[cur];
78
+ const cx = centreX[cur];
79
+ const cy = centreY[cur];
80
+ const cz = centreZ[cur];
81
+ const count = mesh.polyVertexCount(cur);
82
+ for (let e = 0; e < count; e++) {
83
+ const nb = adjacency[cur * nvp + e];
84
+ if (nb < 0 || closed[nb] === 1)
85
+ continue;
86
+ const na = mesh.area[nb];
87
+ if (!areaAllowed(na, areaCost, areaMask))
88
+ continue;
89
+ const a = polys[cur * nvp + e] * 3;
90
+ const b = polys[cur * nvp + (e + 1 === count ? 0 : e + 1)] * 3;
91
+ const mx = (verts[a] + verts[b]) * 0.5;
92
+ const my = (verts[a + 1] + verts[b + 1]) * 0.5;
93
+ const mz = (verts[a + 2] + verts[b + 2]) * 0.5;
94
+ const mul = areaCost === undefined ? 1 : areaCost[na];
95
+ // Into `cur` from `nb`: the leg from nb's centre to the portal is priced by nb's area, the
96
+ // leg from the portal to cur's centre by cur's.
97
+ const curMul = areaCost === undefined ? 1 : areaCost[mesh.area[cur]];
98
+ const d = dc +
99
+ dist3(cx, cy, cz, mx, my, mz) * curMul +
100
+ dist3(mx, my, mz, centreX[nb], centreY[nb], centreZ[nb]) * mul;
101
+ if (d >= distances[nb])
102
+ continue;
103
+ distances[nb] = d;
104
+ next[nb] = cur;
105
+ exitX[nb] = mx;
106
+ exitY[nb] = my;
107
+ exitZ[nb] = mz;
108
+ // The edge of `nb` shared with `cur`.
109
+ const nc = mesh.polyVertexCount(nb);
110
+ let pe = 0;
111
+ while (pe < nc && adjacency[nb * nvp + pe] !== cur)
112
+ pe++;
113
+ portal[nb] = pe < nc ? pe : -1;
114
+ heap.pushOrDecrease(nb);
115
+ }
116
+ }
117
+ };
118
+ build();
119
+ /**
120
+ * A point on the portal out of `p` lies in `next[p]` too; the field answers for the polygon
121
+ * furthest downstream that holds it, so a walker standing on a portal is never sent back to it.
122
+ */
123
+ const downstream = (p, x, z) => {
124
+ let cur = p;
125
+ for (let nb = next[cur]; nb >= 0 && mesh.containsXZ(nb, x, z); nb = next[cur])
126
+ cur = nb;
127
+ return cur;
128
+ };
129
+ return {
130
+ mesh,
131
+ distances,
132
+ next,
133
+ portal,
134
+ get version() {
135
+ return version;
136
+ },
137
+ get stale() {
138
+ return version !== mesh.version;
139
+ },
140
+ get reached() {
141
+ return reached;
142
+ },
143
+ update(force = false) {
144
+ if (!force && version === mesh.version)
145
+ return false;
146
+ build();
147
+ return true;
148
+ },
149
+ direction3(x, y, z, out) {
150
+ out.x = 0;
151
+ out.y = 0;
152
+ out.z = 0;
153
+ let p = mesh.findPolyAt(x, y, z);
154
+ if (p < 0 || distances[p] === Number.POSITIVE_INFINITY)
155
+ return p;
156
+ p = downstream(p, x, z);
157
+ let tx;
158
+ let ty;
159
+ let tz;
160
+ const nb = next[p];
161
+ if (nb < 0) {
162
+ // A goal polygon: head for the nearest goal inside it.
163
+ let best = -1;
164
+ let bestD = Number.POSITIVE_INFINITY;
165
+ for (let i = 0; i < goalPoly.length; i++) {
166
+ if (goalPoly[i] !== p)
167
+ continue;
168
+ const d = dist3(x, y, z, goalX[i], goalY[i], goalZ[i]);
169
+ if (d < bestD) {
170
+ bestD = d;
171
+ best = i;
172
+ }
173
+ }
174
+ if (best < 0)
175
+ return p;
176
+ tx = goalX[best];
177
+ ty = goalY[best];
178
+ tz = goalZ[best];
179
+ }
180
+ else {
181
+ tx = exitX[p];
182
+ ty = exitY[p];
183
+ tz = exitZ[p];
184
+ }
185
+ const dx = tx - x;
186
+ const dy = ty - y;
187
+ const dz = tz - z;
188
+ const len = Math.sqrt(dx * dx + dy * dy + dz * dz);
189
+ if (len === 0)
190
+ return p;
191
+ out.x = dx / len;
192
+ out.y = dy / len;
193
+ out.z = dz / len;
194
+ return p;
195
+ },
196
+ distanceAt(x, y, z) {
197
+ let p = mesh.findPolyAt(x, y, z);
198
+ if (p < 0 || distances[p] === Number.POSITIVE_INFINITY)
199
+ return Number.POSITIVE_INFINITY;
200
+ p = downstream(p, x, z);
201
+ const mul = areaCost === undefined ? 1 : areaCost[mesh.area[p]];
202
+ if (next[p] < 0) {
203
+ let best = Number.POSITIVE_INFINITY;
204
+ for (let i = 0; i < goalPoly.length; i++) {
205
+ if (goalPoly[i] !== p)
206
+ continue;
207
+ const d = dist3(x, y, z, goalX[i], goalY[i], goalZ[i]);
208
+ if (d < best)
209
+ best = d;
210
+ }
211
+ return best * mul;
212
+ }
213
+ // The polygon's distance is measured from its centre through its exit portal: swap the
214
+ // centre leg for the query's own.
215
+ const ex = exitX[p];
216
+ const ey = exitY[p];
217
+ const ez = exitZ[p];
218
+ return (distances[p] -
219
+ dist3(centreX[p], centreY[p], centreZ[p], ex, ey, ez) * mul +
220
+ dist3(x, y, z, ex, ey, ez) * mul);
221
+ },
222
+ };
223
+ }
224
+ function dist3(ax, ay, az, bx, by, bz) {
225
+ const dx = bx - ax;
226
+ const dy = by - ay;
227
+ const dz = bz - az;
228
+ return Math.sqrt(dx * dx + dy * dy + dz * dz);
229
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Off-mesh links: a jump, ladder or teleport between two points of the navmesh that the
3
+ * pathfinder may take as one edge. Links live on the mesh; adding or removing one rebuilds the
4
+ * per-polygon link index (edit-time, allocates) and bumps `mesh.version`.
5
+ */
6
+ import type { NavMesh, NavPoint3 } from './navmesh.js';
7
+ export interface OffMeshLinkOptions {
8
+ from: NavPoint3;
9
+ to: NavPoint3;
10
+ /** How far from `from` (and `to`, when bidirectional) an agent may be to take the link. */
11
+ radius: number;
12
+ bidirectional?: boolean;
13
+ /** Traversal cost in world units; default the straight distance from `from` to `to`. */
14
+ cost?: number;
15
+ /** Anything the game wants back from `path.links`; not serialised. */
16
+ userData?: unknown;
17
+ }
18
+ export interface OffMeshLink {
19
+ readonly id: number;
20
+ readonly from: NavPoint3;
21
+ readonly to: NavPoint3;
22
+ readonly radius: number;
23
+ readonly bidirectional: boolean;
24
+ /** The cost given, or `undefined` for the straight distance. */
25
+ readonly cost: number | undefined;
26
+ readonly userData: unknown;
27
+ /** The polygons the ends landed on (-1 when an end is off the mesh; such a link is never taken). */
28
+ readonly fromPoly: number;
29
+ readonly toPoly: number;
30
+ }
31
+ /** Adds a link and returns its id (0 is never an id). An end farther than `radius` from the mesh never connects. */
32
+ export declare function addOffMeshLink(mesh: NavMesh, opts: OffMeshLinkOptions): number;
33
+ /** Removes the link with `id`; false when there is none. */
34
+ export declare function removeOffMeshLink(mesh: NavMesh, id: number): boolean;
35
+ /** The link with `id`, or `undefined`. */
36
+ export declare function getOffMeshLink(mesh: NavMesh, id: number): OffMeshLink | undefined;
37
+ /** Rebuilds `mesh.linkStart` / `mesh.linkItems`: per polygon the `link * 2 + end` records that start there. */
38
+ export declare function rebuildLinkIndex(mesh: NavMesh): void;
@@ -0,0 +1,72 @@
1
+ /** Adds a link and returns its id (0 is never an id). An end farther than `radius` from the mesh never connects. */
2
+ export function addOffMeshLink(mesh, opts) {
3
+ const id = mesh.nextLinkId++;
4
+ const tmp = { x: 0, y: 0, z: 0 };
5
+ const fromPoly = mesh.findNearestPoly(opts.from.x, opts.from.y, opts.from.z, tmp, opts.radius);
6
+ const toPoly = mesh.findNearestPoly(opts.to.x, opts.to.y, opts.to.z, tmp, opts.radius);
7
+ const link = {
8
+ id,
9
+ from: { x: opts.from.x, y: opts.from.y, z: opts.from.z },
10
+ to: { x: opts.to.x, y: opts.to.y, z: opts.to.z },
11
+ radius: opts.radius,
12
+ bidirectional: opts.bidirectional ?? false,
13
+ cost: opts.cost,
14
+ userData: opts.userData,
15
+ fromPoly,
16
+ toPoly,
17
+ };
18
+ mesh.links.push(link);
19
+ rebuildLinkIndex(mesh);
20
+ return id;
21
+ }
22
+ /** Removes the link with `id`; false when there is none. */
23
+ export function removeOffMeshLink(mesh, id) {
24
+ const i = mesh.links.findIndex((l) => l !== null && l.id === id);
25
+ if (i < 0)
26
+ return false;
27
+ mesh.links[i] = null;
28
+ // Trim trailing holes so the array does not grow without bound.
29
+ while (mesh.links.length > 0 && mesh.links[mesh.links.length - 1] === null)
30
+ mesh.links.pop();
31
+ rebuildLinkIndex(mesh);
32
+ return true;
33
+ }
34
+ /** The link with `id`, or `undefined`. */
35
+ export function getOffMeshLink(mesh, id) {
36
+ for (const l of mesh.links)
37
+ if (l !== null && l.id === id)
38
+ return l;
39
+ return undefined;
40
+ }
41
+ /** Rebuilds `mesh.linkStart` / `mesh.linkItems`: per polygon the `link * 2 + end` records that start there. */
42
+ export function rebuildLinkIndex(mesh) {
43
+ const start = new Int32Array(mesh.polyCount + 1);
44
+ let total = 0;
45
+ for (const l of mesh.links) {
46
+ if (l === null)
47
+ continue;
48
+ if (l.fromPoly >= 0 && l.toPoly >= 0) {
49
+ start[l.fromPoly + 1]++;
50
+ total++;
51
+ if (l.bidirectional) {
52
+ start[l.toPoly + 1]++;
53
+ total++;
54
+ }
55
+ }
56
+ }
57
+ for (let p = 0; p < mesh.polyCount; p++)
58
+ start[p + 1] += start[p];
59
+ const items = new Int32Array(Math.max(1, total));
60
+ const fill = new Int32Array(mesh.polyCount);
61
+ for (let i = 0; i < mesh.links.length; i++) {
62
+ const l = mesh.links[i];
63
+ if (l === null || l.fromPoly < 0 || l.toPoly < 0)
64
+ continue;
65
+ items[start[l.fromPoly] + fill[l.fromPoly]++] = i * 2;
66
+ if (l.bidirectional)
67
+ items[start[l.toPoly] + fill[l.toPoly]++] = i * 2 + 1;
68
+ }
69
+ mesh.linkStart = start;
70
+ mesh.linkItems = items;
71
+ mesh.version++;
72
+ }
@@ -0,0 +1,152 @@
1
+ import type { FollowResult } from '../path.js';
2
+ import type { NavMesh, NavPoint3 } from './navmesh.js';
3
+ export interface NavPathLink {
4
+ /** The waypoint the link starts at; waypoint `index + 1` is where it lands. */
5
+ index: number;
6
+ /** The off-mesh link's id. */
7
+ id: number;
8
+ }
9
+ export interface NavPath3 {
10
+ /** Waypoints as world `x, y, z` triples; `length * 3` floats are valid. Grows in place as needed. */
11
+ points: Float32Array;
12
+ /** Waypoints in the path (0 when no path). */
13
+ length: number;
14
+ /** Index of the waypoint `followPath3` is heading for. */
15
+ cursor: number;
16
+ /** `mesh.version` when the path was found. */
17
+ version: number;
18
+ /** Off-mesh links the path takes, in order; `linkCount` entries are valid (records are reused). */
19
+ links: NavPathLink[];
20
+ linkCount: number;
21
+ /** The polygon corridor the path crosses, start to goal; `polyCount` entries are valid. */
22
+ polys: Int32Array;
23
+ polyCount: number;
24
+ /**
25
+ * The search's cost of the route (ws/nav-5): the priced length of its legs between portal
26
+ * midpoints (each × its polygon's `areaCost`) plus every link's cost, 0 when both ends share
27
+ * a polygon or there is no path. It is what `reachable(mesh, …)` budgets against, not the
28
+ * length of the pulled string (`pathDistance3`), which is never longer.
29
+ */
30
+ cost: number;
31
+ }
32
+ export interface FindMeshPathOptions extends AreaQueryOptions {
33
+ /** Give up (return false) after expanding this many polygons. Default: the whole mesh. */
34
+ maxExpand?: number;
35
+ /** How far `from` and `to` may be from the mesh to snap onto it. Default: any distance. */
36
+ snapRadius?: number;
37
+ /** False keeps the portal midpoints instead of pulling the string taut (for debugging). Default true. */
38
+ stringPull?: boolean;
39
+ /**
40
+ * Scales the straight-line heuristic (ws/nav-5). Default 1; 0 makes the search a Dijkstra,
41
+ * which settles every polygon at the same cost `reachable(mesh, …)` gives it (the heuristic
42
+ * can settle a polygon through a costlier portal when a nearer one points away from the goal).
43
+ */
44
+ heuristicWeight?: number;
45
+ }
46
+ /** A path with room for `capacity` waypoints (grows on demand). */
47
+ export declare function createNavPath3(capacity?: number): NavPath3;
48
+ /** Makes room for `count` corridor polygons (1.5× growth), keeping the data already there. */
49
+ export declare function reservePolys3(path: NavPath3, count: number): void;
50
+ /** Makes room for `count` waypoints (1.5× growth), keeping the floats already there. */
51
+ export declare function reservePath3(path: NavPath3, count: number): void;
52
+ /** Empties the path (`length` 0, `cursor` 0, no links, no corridor); the buffers stay. */
53
+ export declare function clearPath3(path: NavPath3): void;
54
+ /** Writes waypoint `i` into `out`. */
55
+ export declare function pathPoint3(path: NavPath3, i: number, out: NavPoint3): NavPoint3;
56
+ /** The sum of the segment lengths, world units. */
57
+ export declare function pathDistance3(path: NavPath3): number;
58
+ /** How a step into a polygon is priced and whether it is allowed: the area options every mesh query shares. */
59
+ export interface AreaQueryOptions {
60
+ /**
61
+ * A cost multiplier per area byte (256 entries, see `createAreaCosts`): a leg across a
62
+ * polygon costs its length × `areaCost[area]`; `Infinity` excludes the area. Default: 1
63
+ * everywhere. Area 255 (obstacles) is always excluded.
64
+ */
65
+ areaCost?: Float32Array;
66
+ /** Per area byte (256 entries, see `createAreaMask`): 0 excludes the area. Default: all allowed. */
67
+ areaMask?: Uint8Array;
68
+ }
69
+ /** Whether a polygon of area `a` may be entered under the options. */
70
+ export declare function areaAllowed(a: number, cost?: Float32Array, mask?: Uint8Array): boolean;
71
+ export type MeshSearchState = 'idle' | 'running' | 'found' | 'failed';
72
+ /**
73
+ * A resumable polygon A*: `begin` snaps the ends and seeds the open heap, `step(maxPops)`
74
+ * expands at most that many polygons and `finish` backtracks the corridor and string-pulls it
75
+ * into a path. `findMeshPath` runs one to the end; a path queue slices one across frames. Every
76
+ * array is allocated once per search (sized to the mesh) and reused.
77
+ */
78
+ export declare class MeshSearch {
79
+ readonly mesh: NavMesh;
80
+ state: MeshSearchState;
81
+ /** The mesh version `begin` saw; a differing `mesh.version` means the search is stale. */
82
+ version: number;
83
+ private readonly g;
84
+ private readonly f;
85
+ private readonly parent;
86
+ /** How the polygon was entered: the parent's edge index, or `-(link * 2 + end) - 1` for a link. */
87
+ private readonly via;
88
+ /** Where the search stands inside each polygon (portal midpoints, link landings). */
89
+ private readonly px;
90
+ private readonly py;
91
+ private readonly pz;
92
+ private readonly seen;
93
+ private readonly closed;
94
+ private readonly heap;
95
+ private stamp;
96
+ /** The corridor, start to end, after backtracking. */
97
+ private readonly corridor;
98
+ private readonly corridorVia;
99
+ /** Funnel portals, `lx, ly, lz, rx, ry, rz` per step. */
100
+ private readonly portals;
101
+ private readonly start;
102
+ private readonly end;
103
+ /** The polygons the ends snapped to (-1 before `begin`). */
104
+ startPoly: number;
105
+ endPoly: number;
106
+ private expanded;
107
+ private maxExpand;
108
+ private pull;
109
+ private hw;
110
+ private areaCost;
111
+ private areaMask;
112
+ constructor(mesh: NavMesh);
113
+ /**
114
+ * Snaps `from` and `to` onto the mesh and seeds the search. False (state `'failed'`) when
115
+ * either end is off the mesh (beyond `snapRadius`) or the goal polygon's area is excluded.
116
+ */
117
+ begin(from: Readonly<NavPoint3>, to: Readonly<NavPoint3>, opts?: FindMeshPathOptions): boolean;
118
+ /** The funnel portal buffer (room for every polygon plus two), for `pullString`. */
119
+ portalsScratch(): Float64Array;
120
+ /** Pops up to `maxPops` polygons off the open heap; returns how many it popped. */
121
+ step(maxPops: number): number;
122
+ /**
123
+ * After `'found'`: backtracks the corridor into `out.polys` and string-pulls it (each stretch
124
+ * between links through its portals) into `out.points`. False, with `out` empty, unless the
125
+ * search found the goal.
126
+ */
127
+ finish(out: NavPath3): boolean;
128
+ }
129
+ /**
130
+ * Finds the shortest route over the mesh from `from` to `to` (both snapped to the nearest
131
+ * polygon) and writes its waypoints into `out`, the first being the snapped start and the last
132
+ * the snapped goal, and its polygon corridor into `out.polys`. Off-mesh links are taken when
133
+ * they are cheaper and listed in `out.links`. Steps are priced by `areaCost` and filtered by
134
+ * `areaMask`; area 255 (an obstacle) is never entered. Returns false, with `out` empty, when
135
+ * either end is off the mesh (beyond `snapRadius`), the goal is unreachable or excluded, or
136
+ * `maxExpand` ran out.
137
+ */
138
+ export declare function findMeshPath(mesh: NavMesh, from: Readonly<NavPoint3>, to: Readonly<NavPoint3>, out: NavPath3, opts?: FindMeshPathOptions): boolean;
139
+ /**
140
+ * String-pulls a corridor of `count` polygons (`polys[offset ..]`, each adjacent to the next)
141
+ * from `from` (inside the first) to `to` (inside the last) into `out`: the start, every
142
+ * corner, the target. A pair without a shared edge (an off-mesh link) is bridged through the
143
+ * next polygon's centre. Allocation-free after the mesh's first query; used by corridors.
144
+ */
145
+ export declare function pullString(mesh: NavMesh, polys: Int32Array, offset: number, count: number, from: Readonly<NavPoint3>, to: Readonly<NavPoint3>, out: NavPath3): void;
146
+ /**
147
+ * Heads for `path.points[path.cursor]` at `speed`: the cursor advances when `position` is within
148
+ * `arriveRadius` (measured in XZ) of its waypoint, and the last waypoint reached is `'arrived'`
149
+ * with a zero velocity. `outVelocity` is the desired velocity in 3D (world units per second);
150
+ * a walker usually keeps its own y and snaps it to `mesh.height(x, z)`.
151
+ */
152
+ export declare function followPath3(path: NavPath3, position: Readonly<NavPoint3>, speed: number, arriveRadius: number, outVelocity: NavPoint3): FollowResult;