@babylonjs/lite 1.0.1 → 1.2.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 (212) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +51 -0
  3. package/THIRD_PARTY_NOTICES.txt +318 -0
  4. package/{_mat4-storage-f64-BW9sTaVh.js → _mat4-storage-f64-WeexU-hd.js} +2 -2
  5. package/{_mat4-storage-f64-BW9sTaVh.js.map → _mat4-storage-f64-WeexU-hd.js.map} +1 -1
  6. package/{alpha-test-fragment-eUG971h3.js → alpha-test-fragment-x2mnjLgC.js} +2 -2
  7. package/{alpha-test-fragment-eUG971h3.js.map → alpha-test-fragment-x2mnjLgC.js.map} +1 -1
  8. package/{background-dds-skybox-BwG0kYQP.js → background-dds-skybox-BpcDr-9c.js} +3 -3
  9. package/{background-dds-skybox-BwG0kYQP.js.map → background-dds-skybox-BpcDr-9c.js.map} +1 -1
  10. package/{background-ground-DiFpKJzF.js → background-ground-Bm6gjWqx.js} +2 -2
  11. package/{background-ground-DiFpKJzF.js.map → background-ground-Bm6gjWqx.js.map} +1 -1
  12. package/{background-hdr-skybox-DIgJhvfj.js → background-hdr-skybox-CSFo8RX6.js} +3 -3
  13. package/{background-hdr-skybox-DIgJhvfj.js.map → background-hdr-skybox-CSFo8RX6.js.map} +1 -1
  14. package/{background-solid-skybox--fqHdan_.js → background-solid-skybox-DOOBeDIz.js} +2 -2
  15. package/{background-solid-skybox--fqHdan_.js.map → background-solid-skybox-DOOBeDIz.js.map} +1 -1
  16. package/{billboard-renderable-HY2XCd52.js → billboard-renderable-IJfCpeDS.js} +2 -2
  17. package/{billboard-renderable-HY2XCd52.js.map → billboard-renderable-IJfCpeDS.js.map} +1 -1
  18. package/{clamp-block-XHdUk2Va.js → clamp-block-BD_t8I89.js} +2 -2
  19. package/{clamp-block-XHdUk2Va.js.map → clamp-block-BD_t8I89.js.map} +1 -1
  20. package/{clearcoat-fragment-CHYw8MPB.js → clearcoat-fragment-Dj7vGX2u.js} +2 -2
  21. package/{clearcoat-fragment-CHYw8MPB.js.map → clearcoat-fragment-Dj7vGX2u.js.map} +1 -1
  22. package/{create-skeleton-9tdiUjRP.js → create-skeleton-s0hjrC3A.js} +2 -2
  23. package/{create-skeleton-9tdiUjRP.js.map → create-skeleton-s0hjrC3A.js.map} +1 -1
  24. package/{cubemap-skybox-material-DqQ0dyz8.js → cubemap-skybox-material-8lzbgi7K.js} +2 -2
  25. package/{cubemap-skybox-material-DqQ0dyz8.js.map → cubemap-skybox-material-8lzbgi7K.js.map} +1 -1
  26. package/{curve-block-S27sXrJQ.js → curve-block-Ditr4R7V.js} +2 -2
  27. package/{curve-block-S27sXrJQ.js.map → curve-block-Ditr4R7V.js.map} +1 -1
  28. package/{emissive-fragment-CZMQ0_bF.js → emissive-fragment-BOAezkfk.js} +2 -2
  29. package/{emissive-fragment-CZMQ0_bF.js.map → emissive-fragment-BOAezkfk.js.map} +1 -1
  30. package/{esm-shadow-view-Cl36rOrK.js → esm-shadow-view-DRpyRAfa.js} +2 -2
  31. package/{esm-shadow-view-Cl36rOrK.js.map → esm-shadow-view-DRpyRAfa.js.map} +1 -1
  32. package/{esm-shadow-view-CUwxbnMR.js → esm-shadow-view-DmIORQGZ.js} +2 -2
  33. package/{esm-shadow-view-CUwxbnMR.js.map → esm-shadow-view-DmIORQGZ.js.map} +1 -1
  34. package/{esm-shadow-view-DKQ-FSoV.js → esm-shadow-view-JCPaOOi7.js} +2 -2
  35. package/{esm-shadow-view-DKQ-FSoV.js.map → esm-shadow-view-JCPaOOi7.js.map} +1 -1
  36. package/{gaussian-splatting-pipeline-sh-DDo7QQ8l.js → gaussian-splatting-pipeline-sh-B30Mu56i.js} +2 -2
  37. package/{gaussian-splatting-pipeline-sh-DDo7QQ8l.js.map → gaussian-splatting-pipeline-sh-B30Mu56i.js.map} +1 -1
  38. package/{geometry-texture-output-BmuAquio.js → geometry-texture-output-DURiaJ_n.js} +2 -2
  39. package/{geometry-texture-output-BmuAquio.js.map → geometry-texture-output-DURiaJ_n.js.map} +1 -1
  40. package/{geometry-view-xWZmq799.js → geometry-view-DRrscyWU.js} +4 -4
  41. package/{geometry-view-xWZmq799.js.map → geometry-view-DRrscyWU.js.map} +1 -1
  42. package/{gltf-animation-Bq7k_5HA.js → gltf-animation-BjnXkop6.js} +2 -2
  43. package/{gltf-animation-Bq7k_5HA.js.map → gltf-animation-BjnXkop6.js.map} +1 -1
  44. package/{gltf-ext-basisu-C5teqxzQ.js → gltf-ext-basisu-DtzVV1Xx.js} +2 -2
  45. package/{gltf-ext-basisu-C5teqxzQ.js.map → gltf-ext-basisu-DtzVV1Xx.js.map} +1 -1
  46. package/{gltf-ext-node-visibility-DnGTKkMf.js → gltf-ext-node-visibility-BhX0DmiP.js} +2 -2
  47. package/{gltf-ext-node-visibility-DnGTKkMf.js.map → gltf-ext-node-visibility-BhX0DmiP.js.map} +1 -1
  48. package/{gltf-ext-quantization-DheC7FhB.js → gltf-ext-quantization-DaymajCR.js} +2 -2
  49. package/{gltf-ext-quantization-DheC7FhB.js.map → gltf-ext-quantization-DaymajCR.js.map} +1 -1
  50. package/{gltf-ext-uv-transform-DljdVllE.js → gltf-ext-uv-transform-DFmNJ8kA.js} +2 -2
  51. package/{gltf-ext-uv-transform-DljdVllE.js.map → gltf-ext-uv-transform-DFmNJ8kA.js.map} +1 -1
  52. package/{gltf-feature-animation-pointer-DVhymFLK.js → gltf-feature-animation-pointer-C40tqOhL.js} +3 -3
  53. package/{gltf-feature-animation-pointer-DVhymFLK.js.map → gltf-feature-animation-pointer-C40tqOhL.js.map} +1 -1
  54. package/{gltf-feature-animations-hxC3y3bJ.js → gltf-feature-animations-v0S_yb4T.js} +2 -2
  55. package/{gltf-feature-animations-hxC3y3bJ.js.map → gltf-feature-animations-v0S_yb4T.js.map} +1 -1
  56. package/{gltf-feature-draco-B7Q_cMUv.js → gltf-feature-draco-CljWrsna.js} +2 -2
  57. package/{gltf-feature-draco-B7Q_cMUv.js.map → gltf-feature-draco-CljWrsna.js.map} +1 -1
  58. package/{gltf-feature-gpu-instancing-C7sRzWv7.js → gltf-feature-gpu-instancing-BoeSm6Tn.js} +2 -2
  59. package/{gltf-feature-gpu-instancing-C7sRzWv7.js.map → gltf-feature-gpu-instancing-BoeSm6Tn.js.map} +1 -1
  60. package/{gltf-feature-lights-punctual-DF7kya14.js → gltf-feature-lights-punctual-BCTwgyi_.js} +5 -5
  61. package/{gltf-feature-lights-punctual-DF7kya14.js.map → gltf-feature-lights-punctual-BCTwgyi_.js.map} +1 -1
  62. package/{gltf-feature-meshopt-DRG9hEqT.js → gltf-feature-meshopt-DItMkOMt.js} +2 -2
  63. package/{gltf-feature-meshopt-DRG9hEqT.js.map → gltf-feature-meshopt-DItMkOMt.js.map} +1 -1
  64. package/{gltf-feature-morph-DZydYgWp.js → gltf-feature-morph-Cv0mEYIq.js} +3 -3
  65. package/{gltf-feature-morph-DZydYgWp.js.map → gltf-feature-morph-Cv0mEYIq.js.map} +1 -1
  66. package/{gltf-feature-registry-DeYdy3DV.js → gltf-feature-registry-wNbt6UC-.js} +15 -15
  67. package/{gltf-feature-registry-DeYdy3DV.js.map → gltf-feature-registry-wNbt6UC-.js.map} +1 -1
  68. package/{gltf-feature-skeleton-B9och1W0.js → gltf-feature-skeleton-Deh2UBAn.js} +3 -3
  69. package/{gltf-feature-skeleton-B9och1W0.js.map → gltf-feature-skeleton-Deh2UBAn.js.map} +1 -1
  70. package/{gltf-feature-variants-CY_Qft7f.js → gltf-feature-variants-DGSdFNJq.js} +2 -2
  71. package/{gltf-feature-variants-CY_Qft7f.js.map → gltf-feature-variants-DGSdFNJq.js.map} +1 -1
  72. package/{gltf-glb-parser-CqOeXFOz.js → gltf-glb-parser-DSQWsT4r.js} +2 -2
  73. package/{gltf-glb-parser-CqOeXFOz.js.map → gltf-glb-parser-DSQWsT4r.js.map} +1 -1
  74. package/{gltf-interleave-DWf27t-h.js → gltf-interleave-OBqmlu-h.js} +11 -4
  75. package/gltf-interleave-OBqmlu-h.js.map +1 -0
  76. package/{gltf-normals-b2h74380.js → gltf-normals-D_P0KA4b.js} +10 -2
  77. package/gltf-normals-D_P0KA4b.js.map +1 -0
  78. package/{gltf-pbr-builder-ext-DvFxuOqN.js → gltf-pbr-builder-ext-3imk8Tev.js} +2 -2
  79. package/{gltf-pbr-builder-ext-DvFxuOqN.js.map → gltf-pbr-builder-ext-3imk8Tev.js.map} +1 -1
  80. package/{gltf-variants-CUvzYGYX.js → gltf-variants-Dyr54wwg.js} +4 -4
  81. package/{gltf-variants-CUvzYGYX.js.map → gltf-variants-Dyr54wwg.js.map} +1 -1
  82. package/{gpu-task-timer-Dgkff80h.js → gpu-task-timer-DVBNZfq5.js} +2 -2
  83. package/{gpu-task-timer-Dgkff80h.js.map → gpu-task-timer-DVBNZfq5.js.map} +1 -1
  84. package/{gs-picking-pipeline-55sM5LzV.js → gs-picking-pipeline-CERN-Trj.js} +2 -2
  85. package/{gs-picking-pipeline-55sM5LzV.js.map → gs-picking-pipeline-CERN-Trj.js.map} +1 -1
  86. package/{havok-floating-origin-5xp32P-C.js → havok-floating-origin-VVdJRUYc.js} +2 -2
  87. package/{havok-floating-origin-5xp32P-C.js.map → havok-floating-origin-VVdJRUYc.js.map} +1 -1
  88. package/{index-CYZDclhF.js → index-7Bk-uLSM.js} +2 -2
  89. package/{index-CYZDclhF.js.map → index-7Bk-uLSM.js.map} +1 -1
  90. package/{index-C-tEgwbZ.js → index-BgY3QEzL.js} +2817 -1166
  91. package/index-BgY3QEzL.js.map +1 -0
  92. package/{index-SMJ67XwT.js → index-Dr5LK2tg.js} +2 -2
  93. package/{index-SMJ67XwT.js.map → index-Dr5LK2tg.js.map} +1 -1
  94. package/index.d.ts +572 -18
  95. package/index.js +499 -464
  96. package/{input-block-DbRYCnet.js → input-block-DjdlndCL.js} +2 -2
  97. package/{input-block-DbRYCnet.js.map → input-block-DjdlndCL.js.map} +1 -1
  98. package/{iridescence-fragment-S3Ko1jvC.js → iridescence-fragment-kfsCs8lN.js} +2 -2
  99. package/{iridescence-fragment-S3Ko1jvC.js.map → iridescence-fragment-kfsCs8lN.js.map} +1 -1
  100. package/{light-block-CAqWkucp.js → light-block-qjCrz3de.js} +2 -2
  101. package/{light-block-CAqWkucp.js.map → light-block-qjCrz3de.js.map} +1 -1
  102. package/{loop-block-ch-biPFY.js → loop-block-C8vkQ2bz.js} +2 -2
  103. package/{loop-block-ch-biPFY.js.map → loop-block-C8vkQ2bz.js.map} +1 -1
  104. package/{manifold-AS8POaOr.js → manifold-DeXMNgxT.js} +3 -3
  105. package/{manifold-AS8POaOr.js.map → manifold-DeXMNgxT.js.map} +1 -1
  106. package/{morph-fragment-D9he3Ksk.js → morph-fragment-NpZYyIIU.js} +2 -2
  107. package/{morph-fragment-D9he3Ksk.js.map → morph-fragment-NpZYyIIU.js.map} +1 -1
  108. package/{multilight-wgsl-74aXpcJG.js → multilight-wgsl-I5SncF0q.js} +2 -2
  109. package/{multilight-wgsl-74aXpcJG.js.map → multilight-wgsl-I5SncF0q.js.map} +1 -1
  110. package/{node-env-B2bjGcMS.js → node-env-D7Aee08u.js} +2 -2
  111. package/{node-env-B2bjGcMS.js.map → node-env-D7Aee08u.js.map} +1 -1
  112. package/{node-geometry-view-CSXlEAhG.js → node-geometry-view-DfKXWNfV.js} +3 -3
  113. package/{node-geometry-view-CSXlEAhG.js.map → node-geometry-view-DfKXWNfV.js.map} +1 -1
  114. package/{node-registry-extra-compat-BEQH_ksg.js → node-registry-extra-compat-CDLeBR1P.js} +2 -2
  115. package/{node-registry-extra-compat-BEQH_ksg.js.map → node-registry-extra-compat-CDLeBR1P.js.map} +1 -1
  116. package/{node-registry-extra-math-Bm32WBAa.js → node-registry-extra-math-BA8_l4lB.js} +2 -2
  117. package/{node-registry-extra-math-Bm32WBAa.js.map → node-registry-extra-math-BA8_l4lB.js.map} +1 -1
  118. package/{node-renderable-BMHny4tC.js → node-renderable-EwLLnaL1.js} +2 -2
  119. package/{node-renderable-BMHny4tC.js.map → node-renderable-EwLLnaL1.js.map} +1 -1
  120. package/{node-shadow-BRiz7CT1.js → node-shadow-CeTmT6g4.js} +2 -2
  121. package/{node-shadow-BRiz7CT1.js.map → node-shadow-CeTmT6g4.js.map} +1 -1
  122. package/{normal-map-fragment-sE3TjF4U.js → normal-map-fragment-BHImLyM-.js} +2 -2
  123. package/{normal-map-fragment-sE3TjF4U.js.map → normal-map-fragment-BHImLyM-.js.map} +1 -1
  124. package/package.json +10 -3
  125. package/{parse-camera-CmZBS423.js → parse-camera-5IGdctAS.js} +2 -2
  126. package/{parse-camera-CmZBS423.js.map → parse-camera-5IGdctAS.js.map} +1 -1
  127. package/{pbr-geometry-view-T3vMABM8.js → pbr-geometry-view-Dthf9Aut.js} +3 -3
  128. package/{pbr-geometry-view-T3vMABM8.js.map → pbr-geometry-view-Dthf9Aut.js.map} +1 -1
  129. package/{pbr-metallic-roughness-block-full-CHC8w-Uv.js → pbr-metallic-roughness-block-full-DD6zI_Lx.js} +2 -2
  130. package/{pbr-metallic-roughness-block-full-CHC8w-Uv.js.map → pbr-metallic-roughness-block-full-DD6zI_Lx.js.map} +1 -1
  131. package/{pbr-metallic-roughness-block-DbozMlHU.js → pbr-metallic-roughness-block-g7wjzwN_.js} +2 -2
  132. package/{pbr-metallic-roughness-block-DbozMlHU.js.map → pbr-metallic-roughness-block-g7wjzwN_.js.map} +1 -1
  133. package/{pbr-mr-helper-core-DGRgbRXl.js → pbr-mr-helper-core-CWROQ7OA.js} +2 -2
  134. package/{pbr-mr-helper-core-DGRgbRXl.js.map → pbr-mr-helper-core-CWROQ7OA.js.map} +1 -1
  135. package/{pbr-refraction-CquDP9JO.js → pbr-refraction-Dxsm_gii.js} +2 -2
  136. package/{pbr-refraction-CquDP9JO.js.map → pbr-refraction-Dxsm_gii.js.map} +1 -1
  137. package/{pbr-renderable-CaHKHU0g.js → pbr-renderable-CuKWalEM.js} +22 -22
  138. package/{pbr-renderable-CaHKHU0g.js.map → pbr-renderable-CuKWalEM.js.map} +1 -1
  139. package/{pbr-shadow-fragment-DmnNe6yz.js → pbr-shadow-fragment-waeIBQUq.js} +2 -2
  140. package/{pbr-shadow-fragment-DmnNe6yz.js.map → pbr-shadow-fragment-waeIBQUq.js.map} +1 -1
  141. package/{pbr-tracking-Bo7RTANK.js → pbr-tracking-CdeqbBrh.js} +2 -2
  142. package/{pbr-tracking-Bo7RTANK.js.map → pbr-tracking-CdeqbBrh.js.map} +1 -1
  143. package/{pbr-transmission-ext-CoGcJBGE.js → pbr-transmission-ext-BNiXngZc.js} +2 -2
  144. package/{pbr-transmission-ext-CoGcJBGE.js.map → pbr-transmission-ext-BNiXngZc.js.map} +1 -1
  145. package/{recast-navigation.wasm-DG_0AFuk.js → recast-navigation.wasm-VC4lGlEe.js} +3 -3
  146. package/{recast-navigation.wasm-DG_0AFuk.js.map → recast-navigation.wasm-VC4lGlEe.js.map} +1 -1
  147. package/{recast-navigation.wasm-compat-C-Bf2ylB.js → recast-navigation.wasm-compat-CTwYOzRz.js} +3 -3
  148. package/{recast-navigation.wasm-compat-C-Bf2ylB.js.map → recast-navigation.wasm-compat-CTwYOzRz.js.map} +1 -1
  149. package/{reflectance-fragment-CExe6qDY.js → reflectance-fragment-BQFZ_pgy.js} +2 -2
  150. package/{reflectance-fragment-CExe6qDY.js.map → reflectance-fragment-BQFZ_pgy.js.map} +1 -1
  151. package/{rgbd-decode-DkiiiIlt.js → rgbd-decode-duTlXMWd.js} +2 -2
  152. package/{rgbd-decode-DkiiiIlt.js.map → rgbd-decode-duTlXMWd.js.map} +1 -1
  153. package/{screenshot-readback-avr_tYGZ.js → screenshot-readback-DnxR4rhp.js} +2 -2
  154. package/{screenshot-readback-avr_tYGZ.js.map → screenshot-readback-DnxR4rhp.js.map} +1 -1
  155. package/{shader-composer-CZagsJDS.js → shader-composer-CBy2i8nU.js} +2 -2
  156. package/{shader-composer-CZagsJDS.js.map → shader-composer-CBy2i8nU.js.map} +1 -1
  157. package/{shader-renderable-D5sbgzxt.js → shader-renderable-DVMVD6zP.js} +4 -4
  158. package/{shader-renderable-D5sbgzxt.js.map → shader-renderable-DVMVD6zP.js.map} +1 -1
  159. package/{shader-thin-instance-CkQ8rrfH.js → shader-thin-instance-CsDo3ULk.js} +2 -2
  160. package/{shader-thin-instance-CkQ8rrfH.js.map → shader-thin-instance-CsDo3ULk.js.map} +1 -1
  161. package/{sheen-fragment-BEigjpTX.js → sheen-fragment-B_Jd7wrr.js} +2 -2
  162. package/{sheen-fragment-BEigjpTX.js.map → sheen-fragment-B_Jd7wrr.js.map} +1 -1
  163. package/{singlelight-directional-wgsl-Ccsk-ys3.js → singlelight-directional-wgsl-Bw84txva.js} +2 -2
  164. package/{singlelight-directional-wgsl-Ccsk-ys3.js.map → singlelight-directional-wgsl-Bw84txva.js.map} +1 -1
  165. package/{singlelight-hemispheric-wgsl-DL-jpc97.js → singlelight-hemispheric-wgsl-DjxhgI8r.js} +2 -2
  166. package/{singlelight-hemispheric-wgsl-DL-jpc97.js.map → singlelight-hemispheric-wgsl-DjxhgI8r.js.map} +1 -1
  167. package/{singlelight-point-wgsl-hYmiP6ys.js → singlelight-point-wgsl-iA1aRkXA.js} +2 -2
  168. package/{singlelight-point-wgsl-hYmiP6ys.js.map → singlelight-point-wgsl-iA1aRkXA.js.map} +1 -1
  169. package/{singlelight-spot-wgsl-DSjp1p1C.js → singlelight-spot-wgsl-MDdTdstF.js} +2 -2
  170. package/{singlelight-spot-wgsl-DSjp1p1C.js.map → singlelight-spot-wgsl-MDdTdstF.js.map} +1 -1
  171. package/{skeleton-fragment-B__bUbPK.js → skeleton-fragment-COdHWFcK.js} +2 -2
  172. package/{skeleton-fragment-B__bUbPK.js.map → skeleton-fragment-COdHWFcK.js.map} +1 -1
  173. package/{skybox-renderable-BH6uUkal.js → skybox-renderable-DJYkfw32.js} +2 -2
  174. package/{skybox-renderable-BH6uUkal.js.map → skybox-renderable-DJYkfw32.js.map} +1 -1
  175. package/{splat-ply-compressed-BGNK6dnh.js → splat-ply-compressed-SxMlsKNK.js} +2 -2
  176. package/{splat-ply-compressed-BGNK6dnh.js.map → splat-ply-compressed-SxMlsKNK.js.map} +1 -1
  177. package/{standard-pipeline-BvFynkwL.js → standard-pipeline-DXFOUqU_.js} +3 -3
  178. package/{standard-pipeline-BvFynkwL.js.map → standard-pipeline-DXFOUqU_.js.map} +1 -1
  179. package/{standard-renderable-1Q3zemys.js → standard-renderable-BAc-i-ig.js} +3 -3
  180. package/{standard-renderable-1Q3zemys.js.map → standard-renderable-BAc-i-ig.js.map} +1 -1
  181. package/{std-ambient-fragment-__F1KTEu.js → std-ambient-fragment-P8dHZ4An.js} +2 -2
  182. package/{std-ambient-fragment-__F1KTEu.js.map → std-ambient-fragment-P8dHZ4An.js.map} +1 -1
  183. package/{std-cube-reflection-fragment-DidM0byH.js → std-cube-reflection-fragment-CF03MuQt.js} +2 -2
  184. package/{std-cube-reflection-fragment-DidM0byH.js.map → std-cube-reflection-fragment-CF03MuQt.js.map} +1 -1
  185. package/{std-emissive-fragment-Bj62X4Np.js → std-emissive-fragment-P8yJGclx.js} +2 -2
  186. package/{std-emissive-fragment-Bj62X4Np.js.map → std-emissive-fragment-P8yJGclx.js.map} +1 -1
  187. package/{std-lightmap-fragment-DXvfWvKc.js → std-lightmap-fragment-CymEG79z.js} +9 -6
  188. package/std-lightmap-fragment-CymEG79z.js.map +1 -0
  189. package/{std-opacity-fragment-BzMMb1K_.js → std-opacity-fragment-DLa1zV06.js} +2 -2
  190. package/{std-opacity-fragment-BzMMb1K_.js.map → std-opacity-fragment-DLa1zV06.js.map} +1 -1
  191. package/{std-reflection-fragment-DC9Kvu1C.js → std-reflection-fragment-BLySsYos.js} +2 -2
  192. package/{std-reflection-fragment-DC9Kvu1C.js.map → std-reflection-fragment-BLySsYos.js.map} +1 -1
  193. package/{std-shadow-fragment-BnMHeF1-.js → std-shadow-fragment-C_q27Mdi.js} +2 -2
  194. package/{std-shadow-fragment-BnMHeF1-.js.map → std-shadow-fragment-C_q27Mdi.js.map} +1 -1
  195. package/{std-specular-fragment-Bio681OG.js → std-specular-fragment-CaBXyAWY.js} +2 -2
  196. package/{std-specular-fragment-Bio681OG.js.map → std-specular-fragment-CaBXyAWY.js.map} +1 -1
  197. package/{std-tracking-BTcrry2o.js → std-tracking-Bw61Dv98.js} +2 -2
  198. package/{std-tracking-BTcrry2o.js.map → std-tracking-Bw61Dv98.js.map} +1 -1
  199. package/{subsurface-fragment-DpKib445.js → subsurface-fragment-BNQoG9gr.js} +2 -2
  200. package/{subsurface-fragment-DpKib445.js.map → subsurface-fragment-BNQoG9gr.js.map} +1 -1
  201. package/{thin-instance-cull-binding-DwZi7mlE.js → thin-instance-cull-binding-BNC5JiGw.js} +3 -3
  202. package/{thin-instance-cull-binding-DwZi7mlE.js.map → thin-instance-cull-binding-BNC5JiGw.js.map} +1 -1
  203. package/{thin-instance-gpu-uY2NOv0J.js → thin-instance-gpu-C1DGstap.js} +2 -2
  204. package/{thin-instance-gpu-uY2NOv0J.js.map → thin-instance-gpu-C1DGstap.js.map} +1 -1
  205. package/{tracking-primitives-Ck5bgCuo.js → tracking-primitives-CMBWLxGr.js} +2 -2
  206. package/{tracking-primitives-Ck5bgCuo.js.map → tracking-primitives-CMBWLxGr.js.map} +1 -1
  207. package/{unlit-fragment-nc6hu3Mw.js → unlit-fragment-BsHrS9XX.js} +2 -2
  208. package/{unlit-fragment-nc6hu3Mw.js.map → unlit-fragment-BsHrS9XX.js.map} +1 -1
  209. package/gltf-interleave-DWf27t-h.js.map +0 -1
  210. package/gltf-normals-b2h74380.js.map +0 -1
  211. package/index-C-tEgwbZ.js.map +0 -1
  212. package/std-lightmap-fragment-DXvfWvKc.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-SMJ67XwT.js","sources":["../../../node_modules/.pnpm/@recast-navigation+core@0.43.0/node_modules/@recast-navigation/core/dist/index.mjs"],"sourcesContent":["const instances = ['Recast', 'Detour', 'DetourNavMeshBuilder', 'DetourTileCacheBuilder', 'NavMeshImporter', 'NavMeshExporter', 'CrowdUtils', 'ChunkyTriMeshUtils', 'RecastDebugDraw', 'DetourDebugDraw'];\nconst classes = ['rcConfig', 'rcContext', 'dtNavMeshParams', 'dtNavMeshCreateParams', 'RecastLinearAllocator', 'RecastFastLZCompressor', 'rcChunkyTriMesh', 'dtTileCacheParams', 'dtTileCacheLayerHeader', 'Vec3', 'BoolRef', 'IntRef', 'UnsignedIntRef', 'UnsignedCharRef', 'UnsignedShortRef', 'FloatRef', 'IntArray', 'UnsignedIntArray', 'UnsignedCharArray', 'UnsignedShortArray', 'FloatArray'];\n/**\n * Lower level bindings for the Recast and Detour libraries.\n *\n * The `init` function must be called before using the `Raw` api.\n */\nconst Raw = {\n isNull: obj => {\n return Raw.Module.getPointer(obj) === 0;\n },\n destroy: obj => {\n Raw.Module.destroy(obj);\n }\n};\nconst Recast = {};\nconst Detour = {};\nconst init = async impl => {\n if (Raw.Module !== undefined) {\n return;\n }\n if (impl) {\n Raw.Module = await impl();\n } else {\n const defaultExport = (await import('@recast-navigation/wasm')).default;\n Raw.Module = await defaultExport();\n }\n for (const instance of instances) {\n Raw[instance] = new Raw.Module[instance]();\n }\n for (const clazz of classes) {\n Raw[clazz] = Raw.Module[clazz];\n }\n // recast constants\n Recast.RC_BORDER_REG = Raw.Recast.BORDER_REG;\n Recast.RC_MULTIPLE_REGS = Raw.Recast.MULTIPLE_REGS;\n Recast.RC_BORDER_VERTEX = Raw.Recast.BORDER_VERTEX;\n Recast.RC_AREA_BORDER = Raw.Recast.AREA_BORDER;\n Recast.RC_CONTOUR_REG_MASK = Raw.Recast.CONTOUR_REG_MASK;\n Recast.RC_MESH_NULL_IDX = Raw.Recast.MESH_NULL_IDX;\n Recast.RC_NULL_AREA = Raw.Recast.NULL_AREA;\n Recast.RC_WALKABLE_AREA = Raw.Recast.WALKABLE_AREA;\n Recast.RC_NOT_CONNECTED = Raw.Recast.NOT_CONNECTED;\n // recast enums\n Recast.RC_CONTOUR_TESS_WALL_EDGES = Raw.Module.RC_CONTOUR_TESS_WALL_EDGES;\n Recast.RC_CONTOUR_TESS_AREA_EDGES = Raw.Module.RC_CONTOUR_TESS_AREA_EDGES;\n Recast.RC_LOG_PROGRESS = Raw.Module.RC_LOG_PROGRESS;\n Recast.RC_LOG_WARNING = Raw.Module.RC_LOG_WARNING;\n Recast.RC_LOG_ERROR = Raw.Module.RC_LOG_ERROR;\n Recast.RC_TIMER_TOTAL = Raw.Module.RC_TIMER_TOTAL;\n Recast.RC_TIMER_TEMP = Raw.Module.RC_TIMER_TEMP;\n Recast.RC_TIMER_RASTERIZE_TRIANGLES = Raw.Module.RC_TIMER_RASTERIZE_TRIANGLES;\n Recast.RC_TIMER_BUILD_COMPACTHEIGHTFIELD = Raw.Module.RC_TIMER_BUILD_COMPACTHEIGHTFIELD;\n Recast.RC_TIMER_BUILD_CONTOURS = Raw.Module.RC_TIMER_BUILD_CONTOURS;\n Recast.RC_TIMER_BUILD_CONTOURS_TRACE = Raw.Module.RC_TIMER_BUILD_CONTOURS_TRACE;\n Recast.RC_TIMER_BUILD_CONTOURS_SIMPLIFY = Raw.Module.RC_TIMER_BUILD_CONTOURS_SIMPLIFY;\n Recast.RC_TIMER_FILTER_BORDER = Raw.Module.RC_TIMER_FILTER_BORDER;\n Recast.RC_TIMER_FILTER_WALKABLE = Raw.Module.RC_TIMER_FILTER_WALKABLE;\n Recast.RC_TIMER_MEDIAN_AREA = Raw.Module.RC_TIMER_MEDIAN_AREA;\n Recast.RC_TIMER_FILTER_LOW_OBSTACLES = Raw.Module.RC_TIMER_FILTER_LOW_OBSTACLES;\n Recast.RC_TIMER_BUILD_POLYMESH = Raw.Module.RC_TIMER_BUILD_POLYMESH;\n Recast.RC_TIMER_MERGE_POLYMESH = Raw.Module.RC_TIMER_MERGE_POLYMESH;\n Recast.RC_TIMER_ERODE_AREA = Raw.Module.RC_TIMER_ERODE_AREA;\n Recast.RC_TIMER_MARK_BOX_AREA = Raw.Module.RC_TIMER_MARK_BOX_AREA;\n Recast.RC_TIMER_MARK_CYLINDER_AREA = Raw.Module.RC_TIMER_MARK_CYLINDER_AREA;\n Recast.RC_TIMER_MARK_CONVEXPOLY_AREA = Raw.Module.RC_TIMER_MARK_CONVEXPOLY_AREA;\n Recast.RC_TIMER_BUILD_DISTANCEFIELD = Raw.Module.RC_TIMER_BUILD_DISTANCEFIELD;\n Recast.RC_TIMER_BUILD_DISTANCEFIELD_DIST = Raw.Module.RC_TIMER_BUILD_DISTANCEFIELD_DIST;\n Recast.RC_TIMER_BUILD_DISTANCEFIELD_BLUR = Raw.Module.RC_TIMER_BUILD_DISTANCEFIELD_BLUR;\n Recast.RC_TIMER_BUILD_REGIONS = Raw.Module.RC_TIMER_BUILD_REGIONS;\n Recast.RC_TIMER_BUILD_REGIONS_WATERSHED = Raw.Module.RC_TIMER_BUILD_REGIONS_WATERSHED;\n Recast.RC_TIMER_BUILD_REGIONS_EXPAND = Raw.Module.RC_TIMER_BUILD_REGIONS_EXPAND;\n Recast.RC_TIMER_BUILD_REGIONS_FLOOD = Raw.Module.RC_TIMER_BUILD_REGIONS_FLOOD;\n Recast.RC_TIMER_BUILD_REGIONS_FILTER = Raw.Module.RC_TIMER_BUILD_REGIONS_FILTER;\n Recast.RC_TIMER_BUILD_LAYERS = Raw.Module.RC_TIMER_BUILD_LAYERS;\n Recast.RC_TIMER_BUILD_POLYMESHDETAIL = Raw.Module.RC_TIMER_BUILD_POLYMESHDETAIL;\n Recast.RC_TIMER_MERGE_POLYMESHDETAIL = Raw.Module.RC_TIMER_MERGE_POLYMESHDETAIL;\n Recast.RC_MAX_TIMERS = Raw.Module.RC_MAX_TIMERS;\n // detour constants\n Detour.DT_FAILURE = Raw.Detour.FAILURE;\n Detour.DT_SUCCESS = Raw.Detour.SUCCESS;\n Detour.DT_IN_PROGRESS = Raw.Detour.IN_PROGRESS;\n Detour.DT_STATUS_DETAIL_MASK = Raw.Detour.STATUS_DETAIL_MASK;\n Detour.DT_WRONG_MAGIC = Raw.Detour.WRONG_MAGIC;\n Detour.DT_WRONG_VERSION = Raw.Detour.WRONG_VERSION;\n Detour.DT_OUT_OF_MEMORY = Raw.Detour.OUT_OF_MEMORY;\n Detour.DT_INVALID_PARAM = Raw.Detour.INVALID_PARAM;\n Detour.DT_BUFFER_TOO_SMALL = Raw.Detour.BUFFER_TOO_SMALL;\n Detour.DT_OUT_OF_NODES = Raw.Detour.OUT_OF_NODES;\n Detour.DT_PARTIAL_RESULT = Raw.Detour.PARTIAL_RESULT;\n Detour.DT_ALREADY_OCCUPIED = Raw.Detour.ALREADY_OCCUPIED;\n Detour.DT_VERTS_PER_POLYGON = Raw.Detour.VERTS_PER_POLYGON;\n Detour.DT_NAVMESH_MAGIC = Raw.Detour.NAVMESH_MAGIC;\n Detour.DT_NAVMESH_VERSION = Raw.Detour.NAVMESH_VERSION;\n Detour.DT_NAVMESH_STATE_MAGIC = Raw.Detour.NAVMESH_STATE_MAGIC;\n Detour.DT_NAVMESH_STATE_VERSION = Raw.Detour.NAVMESH_STATE_VERSION;\n Detour.DT_TILECACHE_MAGIC = Raw.Detour.TILECACHE_MAGIC;\n Detour.DT_TILECACHE_VERSION = Raw.Detour.TILECACHE_VERSION;\n Detour.DT_TILECACHE_NULL_AREA = Raw.Detour.TILECACHE_NULL_AREA;\n Detour.DT_TILECACHE_WALKABLE_AREA = Raw.Detour.TILECACHE_WALKABLE_AREA;\n Detour.DT_TILECACHE_NULL_IDX = Raw.Detour.TILECACHE_NULL_IDX;\n Detour.DT_NULL_LINK = Raw.Detour.NULL_LINK;\n Detour.DT_NULL_LINK = Raw.Detour.NULL_LINK;\n Detour.DT_EXT_LINK = Raw.Detour.EXT_LINK;\n Detour.DT_OFFMESH_CON_BIDIR = Raw.Detour.OFFMESH_CON_BIDIR;\n // detour enums\n Detour.DT_STRAIGHTPATH_START = Raw.Module.DT_STRAIGHTPATH_START;\n Detour.DT_STRAIGHTPATH_END = Raw.Module.DT_STRAIGHTPATH_END;\n Detour.DT_STRAIGHTPATH_OFFMESH_CONNECTION = Raw.Module.DT_STRAIGHTPATH_OFFMESH_CONNECTION;\n Detour.DT_STRAIGHTPATH_AREA_CROSSINGS = Raw.Module.DT_STRAIGHTPATH_AREA_CROSSINGS;\n Detour.DT_STRAIGHTPATH_ALL_CROSSINGS = Raw.Module.DT_STRAIGHTPATH_ALL_CROSSINGS;\n Detour.DT_FINDPATH_ANY_ANGLE = Raw.Module.DT_FINDPATH_ANY_ANGLE;\n Detour.DT_RAYCAST_USE_COSTS = Raw.Module.DT_RAYCAST_USE_COSTS;\n Detour.DT_CROWDAGENT_STATE_INVALID = Raw.Module.DT_CROWDAGENT_STATE_INVALID;\n Detour.DT_CROWDAGENT_STATE_WALKING = Raw.Module.DT_CROWDAGENT_STATE_WALKING;\n Detour.DT_CROWDAGENT_STATE_OFFMESH = Raw.Module.DT_CROWDAGENT_STATE_OFFMESH;\n Detour.DT_CROWDAGENT_TARGET_NONE = Raw.Module.DT_CROWDAGENT_TARGET_NONE;\n Detour.DT_CROWDAGENT_TARGET_FAILED = Raw.Module.DT_CROWDAGENT_TARGET_FAILED;\n Detour.DT_CROWDAGENT_TARGET_VALID = Raw.Module.DT_CROWDAGENT_TARGET_VALID;\n Detour.DT_CROWDAGENT_TARGET_REQUESTING = Raw.Module.DT_CROWDAGENT_TARGET_REQUESTING;\n Detour.DT_CROWDAGENT_TARGET_WAITING_FOR_QUEUE = Raw.Module.DT_CROWDAGENT_TARGET_WAITING_FOR_QUEUE;\n Detour.DT_CROWDAGENT_TARGET_WAITING_FOR_PATH = Raw.Module.DT_CROWDAGENT_TARGET_WAITING_FOR_PATH;\n Detour.DT_CROWDAGENT_TARGET_VELOCITY = Raw.Module.DT_CROWDAGENT_TARGET_VELOCITY;\n Detour.DT_COMPRESSEDTILE_FREE_DATA = Raw.Module.DT_COMPRESSEDTILE_FREE_DATA;\n Detour.DT_TILE_FREE_DATA = Raw.Module.DT_TILE_FREE_DATA;\n};\n\nclass BaseArray {\n get size() {\n return this.raw.size;\n }\n constructor(raw) {\n this.raw = raw;\n }\n get(i) {\n return this.raw.get(i);\n }\n set(i, value) {\n this.raw.set(i, value);\n }\n resize(size) {\n this.raw.resize(size);\n }\n copy(data) {\n this.raw.resize(data.length);\n const view = this.getHeapView();\n view.set(data);\n }\n destroy() {\n Raw.destroy(this.raw);\n }\n getHeapView() {\n const heap = this.getHeap();\n const dataHeap = new this.typedArrayClass(heap.buffer, this.raw.getDataPointer(), this.size);\n return dataHeap;\n }\n toTypedArray() {\n const view = this.getHeapView();\n const data = new this.typedArrayClass(this.size);\n data.set(view);\n return data;\n }\n}\nclass IntArray extends BaseArray {\n typedArrayClass = Int32Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.IntArray());\n }\n getHeap() {\n return Raw.Module.HEAP32;\n }\n static fromRaw(raw) {\n return new IntArray(raw);\n }\n}\nclass UnsignedIntArray extends BaseArray {\n typedArrayClass = Uint32Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.UnsignedIntArray());\n }\n getHeap() {\n return Raw.Module.HEAPU32;\n }\n static fromRaw(raw) {\n return new UnsignedIntArray(raw);\n }\n}\nclass UnsignedCharArray extends BaseArray {\n typedArrayClass = Uint8Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.UnsignedCharArray());\n }\n getHeap() {\n return Raw.Module.HEAPU8;\n }\n static fromRaw(raw) {\n return new UnsignedCharArray(raw);\n }\n}\nclass UnsignedShortArray extends BaseArray {\n typedArrayClass = Uint16Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.UnsignedShortArray());\n }\n getHeap() {\n return Raw.Module.HEAPU16;\n }\n static fromRaw(raw) {\n return new UnsignedShortArray(raw);\n }\n}\nclass FloatArray extends BaseArray {\n typedArrayClass = Float32Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.FloatArray());\n }\n getHeap() {\n return Raw.Module.HEAPF32;\n }\n static fromRaw(raw) {\n return new FloatArray(raw);\n }\n}\nconst VerticesArray = FloatArray;\nconst TrianglesArray = IntArray;\nconst TriangleAreasArray = UnsignedCharArray;\nconst ChunkIdsArray = IntArray;\nconst TileCacheData = UnsignedCharArray;\n\nconst vec3 = {\n toRaw: ({\n x,\n y,\n z\n }, existing) => {\n if (existing) {\n existing.x = x;\n existing.y = y;\n existing.z = z;\n return existing;\n }\n return new Raw.Module.Vec3(x, y, z);\n },\n fromRaw: vec3 => {\n const {\n x,\n y,\n z\n } = vec3;\n return {\n x,\n y,\n z\n };\n },\n fromArray: ([x, y, z]) => {\n return {\n x,\n y,\n z\n };\n },\n toArray: ({\n x,\n y,\n z\n }) => {\n return [x, y, z];\n },\n lerp: (a, b, t, out = {\n x: 0,\n y: 0,\n z: 0\n }) => {\n out.x = a.x + (b.x - a.x) * t;\n out.y = a.y + (b.y - a.y) * t;\n out.z = a.z + (b.z - a.z) * t;\n },\n copy: (source, out = {\n x: 0,\n y: 0,\n z: 0\n }) => {\n out.x = source.x;\n out.y = source.y;\n out.z = source.z;\n }\n};\nconst array = (getter, count) => {\n const array = [];\n for (let i = 0; i < count; i++) {\n array.push(getter(i));\n }\n return array;\n};\n\nconst statusSucceed = status => {\n return Raw.Detour.statusSucceed(status);\n};\nconst statusFailed = status => {\n return Raw.Detour.statusFailed(status);\n};\nconst statusInProgress = status => {\n return Raw.Detour.statusInProgress(status);\n};\nconst statusDetail = (status, detail) => {\n return Raw.Detour.statusDetail(status, detail);\n};\nconst statusToReadableString = status => {\n if (Raw.Detour.statusSucceed(status)) {\n return 'success';\n }\n if (Raw.Detour.statusInProgress(status)) {\n return 'in progress';\n }\n if (Raw.Detour.statusFailed(status)) {\n let reason;\n const DT_STATUS_REASONS = {\n DT_WRONG_MAGIC: Detour.DT_WRONG_MAGIC,\n DT_WRONG_VERSION: Detour.DT_WRONG_VERSION,\n DT_OUT_OF_MEMORY: Detour.DT_OUT_OF_MEMORY,\n DT_INVALID_PARAM: Detour.DT_INVALID_PARAM,\n DT_BUFFER_TOO_SMALL: Detour.DT_BUFFER_TOO_SMALL,\n DT_OUT_OF_NODES: Detour.DT_OUT_OF_NODES,\n DT_PARTIAL_RESULT: Detour.DT_PARTIAL_RESULT,\n DT_ALREADY_OCCUPIED: Detour.DT_ALREADY_OCCUPIED\n };\n for (const [reasonName, reasonMask] of Object.entries(DT_STATUS_REASONS)) {\n if (Raw.Detour.statusDetail(status, reasonMask)) {\n reason = reasonName;\n break;\n }\n }\n if (reason) {\n return `failed - ${reason}`;\n }\n return `failed - unknown`;\n }\n return 'unknown';\n};\nclass DetourPolyDetail {\n constructor(raw) {\n this.raw = raw;\n }\n vertBase() {\n return this.raw.vertBase;\n }\n triBase() {\n return this.raw.triBase;\n }\n vertCount() {\n return this.raw.vertCount;\n }\n triCount() {\n return this.raw.triCount;\n }\n}\nclass DetourLink {\n constructor(raw) {\n this.raw = raw;\n }\n ref() {\n return this.raw.ref;\n }\n next() {\n return this.raw.next;\n }\n edge() {\n return this.raw.edge;\n }\n side() {\n return this.raw.side;\n }\n bmin() {\n return this.raw.bmin;\n }\n bmax() {\n return this.raw.bmax;\n }\n}\nclass DetourBVNode {\n constructor(raw) {\n this.raw = raw;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n i() {\n return this.raw.i;\n }\n}\nclass DetourOffMeshConnection {\n constructor(raw) {\n this.raw = raw;\n }\n pos(index) {\n return this.raw.get_pos(index);\n }\n rad() {\n return this.raw.rad;\n }\n poly() {\n return this.raw.poly;\n }\n flags() {\n return this.raw.flags;\n }\n side() {\n return this.raw.side;\n }\n userId() {\n return this.raw.userId;\n }\n}\nclass DetourMeshHeader {\n constructor(raw) {\n this.raw = raw;\n }\n magic() {\n return this.raw.magic;\n }\n version() {\n return this.raw.version;\n }\n x() {\n return this.raw.x;\n }\n y() {\n return this.raw.y;\n }\n layer() {\n return this.raw.layer;\n }\n userId() {\n return this.raw.userId;\n }\n polyCount() {\n return this.raw.polyCount;\n }\n vertCount() {\n return this.raw.vertCount;\n }\n maxLinkCount() {\n return this.raw.maxLinkCount;\n }\n detailMeshCount() {\n return this.raw.detailMeshCount;\n }\n detailVertCount() {\n return this.raw.detailVertCount;\n }\n detailTriCount() {\n return this.raw.detailTriCount;\n }\n bvNodeCount() {\n return this.raw.bvNodeCount;\n }\n offMeshConCount() {\n return this.raw.offMeshConCount;\n }\n offMeshBase() {\n return this.raw.offMeshBase;\n }\n walkableHeight() {\n return this.raw.walkableHeight;\n }\n walkableRadius() {\n return this.raw.walkableRadius;\n }\n walkableClimb() {\n return this.raw.walkableClimb;\n }\n bmin(index) {\n return this.raw.get_bmin(index);\n }\n bmax(index) {\n return this.raw.get_bmax(index);\n }\n bvQuantFactor() {\n return this.raw.bvQuantFactor;\n }\n}\nclass DetourPoly {\n constructor(raw) {\n this.raw = raw;\n }\n firstLink() {\n return this.raw.firstLink;\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n neis(index) {\n return this.raw.get_neis(index);\n }\n flags() {\n return this.raw.flags;\n }\n vertCount() {\n return this.raw.vertCount;\n }\n areaAndType() {\n return this.raw.get_areaAndtype();\n }\n getType() {\n return this.raw.getType();\n }\n}\nclass DetourMeshTile {\n constructor(raw) {\n this.raw = raw;\n }\n salt() {\n return this.raw.salt;\n }\n linksFreeList() {\n return this.raw.linksFreeList;\n }\n header() {\n return !Raw.isNull(this.raw.header) ? new DetourMeshHeader(this.raw.header) : null;\n }\n polys(index) {\n return new DetourPoly(this.raw.get_polys(index));\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n links(index) {\n return new DetourLink(this.raw.get_links(index));\n }\n detailMeshes(index) {\n return new DetourPolyDetail(this.raw.get_detailMeshes(index));\n }\n detailVerts(index) {\n return this.raw.get_detailVerts(index);\n }\n detailTris(index) {\n return this.raw.get_detailTris(index);\n }\n bvTree(index) {\n return new DetourBVNode(this.raw.get_bvTree(index));\n }\n offMeshCons(index) {\n return new DetourOffMeshConnection(this.raw.get_offMeshCons(index));\n }\n data(index) {\n return this.raw.get_data(index);\n }\n dataSize() {\n return this.raw.dataSize;\n }\n flags() {\n return this.raw.flags;\n }\n next() {\n return new DetourMeshTile(this.raw.next);\n }\n}\nconst createNavMeshData = navMeshCreateParams => {\n const result = Raw.DetourNavMeshBuilder.createNavMeshData(navMeshCreateParams.raw);\n return {\n success: result.success,\n navMeshData: UnsignedCharArray.fromRaw(result.navMeshData)\n };\n};\nclass NavMeshCreateParams {\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.dtNavMeshCreateParams();\n }\n setPolyMeshCreateParams(polyMesh) {\n Raw.DetourNavMeshBuilder.setPolyMeshCreateParams(this.raw, polyMesh.raw);\n }\n setPolyMeshDetailCreateParams(polyMeshDetail) {\n Raw.DetourNavMeshBuilder.setPolyMeshDetailCreateParams(this.raw, polyMeshDetail.raw);\n }\n setOffMeshConnections(offMeshConnections) {\n if (offMeshConnections.length <= 0) return;\n const verts = [];\n const rads = [];\n const dir = [];\n const areas = [];\n const flags = [];\n const userIds = [];\n for (let i = 0; i < offMeshConnections.length; i++) {\n const connection = offMeshConnections[i];\n verts.push(connection.startPosition.x, connection.startPosition.y, connection.startPosition.z);\n verts.push(connection.endPosition.x, connection.endPosition.y, connection.endPosition.z);\n rads.push(connection.radius);\n dir.push(connection.bidirectional ? 1 : 0);\n areas.push(connection.area ?? 0);\n flags.push(connection.flags ?? 1);\n userIds.push(connection.userId ?? 1000 + i);\n }\n Raw.DetourNavMeshBuilder.setOffMeshConnections(this.raw, offMeshConnections.length, verts, rads, dir, areas, flags, userIds);\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n setVerts(index, value) {\n this.raw.set_verts(index, value);\n }\n vertCount() {\n return this.raw.vertCount;\n }\n polys(index) {\n return this.raw.get_polys(index);\n }\n setPolys(index, value) {\n this.raw.set_polys(index, value);\n }\n polyAreas(index) {\n return this.raw.get_polyAreas(index);\n }\n setPolyAreas(index, value) {\n this.raw.set_polyAreas(index, value);\n }\n polyFlags(index) {\n return this.raw.get_polyFlags(index);\n }\n setPolyFlags(index, value) {\n this.raw.set_polyFlags(index, value);\n }\n polyCount() {\n return this.raw.polyCount;\n }\n nvp() {\n return this.raw.nvp;\n }\n setNvp(value) {\n this.raw.nvp = value;\n }\n detailMeshes(index) {\n return this.raw.get_detailMeshes(index);\n }\n setDetailMeshes(index, value) {\n this.raw.set_detailMeshes(index, value);\n }\n detailVerts(index) {\n return this.raw.get_detailVerts(index);\n }\n setDetailVerts(index, value) {\n this.raw.set_detailVerts(index, value);\n }\n detailVertsCount() {\n return this.raw.detailVertsCount;\n }\n detailTris(index) {\n return this.raw.get_detailTris(index);\n }\n setDetailTris(index, value) {\n this.raw.set_detailTris(index, value);\n }\n detailTriCount() {\n return this.raw.detailTriCount;\n }\n offMeshConVerts(index) {\n return this.raw.get_offMeshConVerts(index);\n }\n offMeshConRad(index) {\n return this.raw.get_offMeshConRad(index);\n }\n offMeshConDir(index) {\n return this.raw.get_offMeshConDir(index);\n }\n offMeshConAreas(index) {\n return this.raw.get_offMeshConAreas(index);\n }\n offMeshConFlags(index) {\n return this.raw.get_offMeshConFlags(index);\n }\n offMeshConUserID(index) {\n return this.raw.get_offMeshConUserID(index);\n }\n offMeshConCount() {\n return this.raw.offMeshConCount;\n }\n userId() {\n return this.raw.userId;\n }\n tileX() {\n return this.raw.tileX;\n }\n setTileX(value) {\n this.raw.tileX = value;\n }\n tileY() {\n return this.raw.tileY;\n }\n setTileY(value) {\n this.raw.tileY = value;\n }\n tileLayer() {\n return this.raw.tileLayer;\n }\n setTileLayer(value) {\n this.raw.tileLayer = value;\n }\n boundsMin() {\n return array(i => this.raw.get_bmin(i), 3);\n }\n setBoundsMin(value) {\n this.raw.set_bmin(0, value[0]);\n this.raw.set_bmin(1, value[1]);\n this.raw.set_bmin(2, value[2]);\n }\n boundsMax() {\n return array(i => this.raw.get_bmax(i), 3);\n }\n setBoundsMax(value) {\n this.raw.set_bmax(0, value[0]);\n this.raw.set_bmax(1, value[1]);\n this.raw.set_bmax(2, value[2]);\n }\n walkableHeight() {\n return this.raw.walkableHeight;\n }\n setWalkableHeight(value) {\n this.raw.walkableHeight = value;\n }\n walkableRadius() {\n return this.raw.walkableRadius;\n }\n setWalkableRadius(value) {\n this.raw.walkableRadius = value;\n }\n walkableClimb() {\n return this.raw.walkableClimb;\n }\n setWalkableClimb(value) {\n this.raw.walkableClimb = value;\n }\n cellSize() {\n return this.raw.cs;\n }\n setCellSize(value) {\n this.raw.cs = value;\n }\n cellHeight() {\n return this.raw.ch;\n }\n setCellHeight(value) {\n this.raw.ch = value;\n }\n buildBvTree() {\n return this.raw.buildBvTree;\n }\n setBuildBvTree(value) {\n this.raw.buildBvTree = value;\n }\n}\n\nclass QueryFilter {\n get includeFlags() {\n return this.raw.getIncludeFlags();\n }\n set includeFlags(flags) {\n this.raw.setIncludeFlags(flags);\n }\n get excludeFlags() {\n return this.raw.getExcludeFlags();\n }\n set excludeFlags(flags) {\n this.raw.setExcludeFlags(flags);\n }\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.dtQueryFilter();\n }\n getAreaCost(i) {\n return this.raw.getAreaCost(i);\n }\n setAreaCost(i, cost) {\n this.raw.setAreaCost(i, cost);\n }\n}\nclass NavMeshQuery {\n /**\n * Default query filter.\n */\n\n /**\n * Default search distance along each axis.\n */\n defaultQueryHalfExtents = {\n x: 1,\n y: 1,\n z: 1\n };\n constructor(value, params) {\n if (value instanceof Raw.Module.NavMeshQuery) {\n this.raw = value;\n } else {\n this.raw = new Raw.Module.NavMeshQuery();\n this.raw.init(value.raw, params?.maxNodes ?? 2048);\n }\n if (params?.defaultQueryFilter) {\n this.defaultFilter = params.defaultQueryFilter;\n } else {\n this.defaultFilter = new QueryFilter();\n this.defaultFilter.includeFlags = 0xffff;\n this.defaultFilter.excludeFlags = 0;\n }\n }\n /**\n * Finds the polygon nearest to the given position.\n */\n findNearestPoly(position, options) {\n const nearestRefRaw = new Raw.UnsignedIntRef();\n const nearestPointRaw = new Raw.Vec3();\n const isOverPolyRaw = new Raw.BoolRef();\n const status = this.raw.findNearestPoly(vec3.toArray(position), vec3.toArray(options?.halfExtents ?? this.defaultQueryHalfExtents), options?.filter?.raw ?? this.defaultFilter.raw, nearestRefRaw, nearestPointRaw, isOverPolyRaw);\n const nearestPoint = vec3.fromRaw(nearestPointRaw);\n Raw.destroy(nearestPointRaw);\n const nearestRef = nearestRefRaw.value;\n Raw.destroy(nearestRefRaw);\n const isOverPoly = isOverPolyRaw.value;\n Raw.destroy(isOverPolyRaw);\n return {\n success: statusSucceed(status),\n status,\n nearestRef,\n nearestPoint,\n isOverPoly\n };\n }\n /**\n * Finds the polygons along the navigation graph that touch the specified circle.\n * @param startRef Reference of polygon to start search from\n * @param centerPos Center of circle\n * @param radius Radius of circle\n * @param options\n */\n findPolysAroundCircle(startRef, centerPos, radius, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const maxPolys = options?.maxPolys ?? 256;\n const resultRefArray = new UnsignedIntArray();\n const resultParentArray = new UnsignedIntArray();\n const resultCostArray = new FloatArray();\n resultRefArray.resize(maxPolys);\n resultParentArray.resize(maxPolys);\n resultCostArray.resize(maxPolys);\n const resultCountRef = new Raw.IntRef();\n const status = this.raw.findPolysAroundCircle(startRef, vec3.toArray(centerPos), radius, filter.raw, resultRefArray.raw, resultParentArray.raw, resultCostArray.raw, resultCountRef, maxPolys);\n const resultRefs = [...resultRefArray.getHeapView()];\n resultRefArray.destroy();\n const resultParents = [...resultParentArray.getHeapView()];\n resultParentArray.destroy();\n const resultCost = [...resultCostArray.getHeapView()];\n resultCostArray.destroy();\n const resultCount = resultCountRef.value;\n Raw.destroy(resultCountRef);\n // todo: freeing resultCostRef and resultCountRef intermittently throws\n // memory related errors.\n // const resultCost = resultCostRef.value;\n // const resultCount = resultCountRef.value;\n return {\n success: statusSucceed(status),\n status,\n resultRefs,\n resultParents,\n resultCost,\n resultCount\n };\n }\n /**\n * Finds polygons that overlap the search box.\n * @param center The center of the search box\n * @param halfExtents The search distance along each axis\n * @param options\n */\n queryPolygons(center, halfExtents, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const maxPolys = options?.maxPolys ?? 256;\n const polysRefsArray = new UnsignedIntArray();\n polysRefsArray.resize(maxPolys);\n const polyCountRef = new Raw.IntRef();\n const status = this.raw.queryPolygons(vec3.toArray(center), vec3.toArray(halfExtents), filter.raw, polysRefsArray.raw, polyCountRef, maxPolys);\n const polyCount = polyCountRef.value;\n Raw.destroy(polyCountRef);\n const polyRefs = [...polysRefsArray.getHeapView()].slice(0, polyCount);\n polysRefsArray.destroy();\n return {\n success: statusSucceed(status),\n status,\n polyRefs\n };\n }\n /**\n * Returns the closest point on the given polygon to the given position.\n *\n * @param polyRef The reference of the polygon\n * @param position The position to find the closest point to\n */\n closestPointOnPoly(polyRef, position) {\n const closestPointRaw = new Raw.Vec3();\n const positionOverPolyRaw = new Raw.BoolRef();\n const status = this.raw.closestPointOnPoly(polyRef, vec3.toArray(position), closestPointRaw, positionOverPolyRaw);\n const closestPoint = vec3.fromRaw(closestPointRaw);\n Raw.destroy(closestPointRaw);\n const isPointOverPoly = positionOverPolyRaw.value;\n Raw.destroy(positionOverPolyRaw);\n return {\n success: statusSucceed(status),\n status,\n closestPoint,\n isPointOverPoly\n };\n }\n /**\n * Finds the closest point on the NavMesh to the given position.\n * @param position the position to find the closest point to\n * @param options additional options\n * @returns the result of the find closest point operation\n */\n findClosestPoint(position, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const halfExtents = options?.halfExtents ?? this.defaultQueryHalfExtents;\n const resultPolyRef = new Raw.UnsignedIntRef();\n const resultPoint = new Raw.Vec3();\n const resultPointOverPoly = new Raw.BoolRef();\n const status = this.raw.findClosestPoint(vec3.toArray(position), vec3.toArray(halfExtents), filter.raw, resultPolyRef, resultPoint, resultPointOverPoly);\n const polyRef = resultPolyRef.value;\n Raw.destroy(resultPolyRef);\n const point = vec3.fromRaw(resultPoint);\n Raw.destroy(resultPoint);\n const isPointOverPoly = resultPointOverPoly.value;\n Raw.destroy(resultPointOverPoly);\n return {\n success: statusSucceed(status),\n status,\n polyRef,\n point,\n isPointOverPoly\n };\n }\n /**\n * Returns a random point on the NavMesh within the given radius of the given position.\n *\n * @param position the center of the search circle\n * @param radius the radius of the search circle\n * @param options additional options\n */\n findRandomPointAroundCircle(position, radius, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const halfExtents = options?.halfExtents ?? this.defaultQueryHalfExtents;\n let startRef;\n if (options?.startRef) {\n startRef = options.startRef;\n } else {\n const nearestPoly = this.findNearestPoly(position, {\n filter,\n halfExtents\n });\n if (!nearestPoly.success) {\n return {\n success: false,\n status: nearestPoly.status,\n randomPolyRef: 0,\n randomPoint: {\n x: 0,\n y: 0,\n z: 0\n }\n };\n }\n startRef = nearestPoly.nearestRef;\n }\n const randomPolyRefRaw = new Raw.UnsignedIntRef();\n const randomPointRaw = new Raw.Vec3();\n const status = this.raw.findRandomPointAroundCircle(startRef, vec3.toArray(position), radius, filter.raw, randomPolyRefRaw, randomPointRaw);\n const randomPolyRef = randomPolyRefRaw.value;\n Raw.destroy(randomPolyRefRaw);\n const randomPoint = vec3.fromRaw(randomPointRaw);\n Raw.destroy(randomPointRaw);\n return {\n success: statusSucceed(status),\n status,\n randomPolyRef,\n randomPoint\n };\n }\n /**\n * Moves from the start to the end position constrained to the navigation mesh.\n *\n * @param startRef the reference id of the start polygon.\n * @param startPosition a position of the mover within the start polygon.\n * @param endPosition the desired end position of the mover.\n *\n * @returns The result of the move along surface operation.\n */\n moveAlongSurface(startRef, startPosition, endPosition, options) {\n const maxVisitedSize = options?.maxVisitedSize ?? 256;\n const resultPositionRaw = new Raw.Vec3();\n const visitedArray = new UnsignedIntArray();\n const filter = options?.filter?.raw ?? this.defaultFilter.raw;\n const status = this.raw.moveAlongSurface(startRef, vec3.toArray(startPosition), vec3.toArray(endPosition), filter, resultPositionRaw, visitedArray.raw, maxVisitedSize);\n const resultPosition = vec3.fromRaw(resultPositionRaw);\n Raw.destroy(resultPositionRaw);\n const visited = [...visitedArray.getHeapView()];\n visitedArray.destroy();\n return {\n success: statusSucceed(status),\n status,\n resultPosition,\n visited\n };\n }\n /**\n * Returns a random point on the navmesh.\n * @param options additional options\n * @returns a random point on the navmesh\n */\n findRandomPoint(options) {\n const randomPolyRefRaw = new Raw.UnsignedIntRef();\n const randomPointRaw = new Raw.Vec3();\n const status = this.raw.findRandomPoint(options?.filter?.raw ?? this.defaultFilter.raw, randomPolyRefRaw, randomPointRaw);\n const randomPolyRef = randomPolyRefRaw.value;\n Raw.destroy(randomPolyRefRaw);\n const randomPoint = vec3.fromRaw(randomPointRaw);\n Raw.destroy(randomPointRaw);\n return {\n success: statusSucceed(status),\n status,\n randomPolyRef,\n randomPoint\n };\n }\n /**\n * Gets the height of the polygon at the provided position using the height detail.\n *\n * @param polyRef the reference id of the polygon.\n * @param position a position within the xz-bounds of the polygon.\n */\n getPolyHeight(polyRef, position) {\n const floatRef = new Raw.FloatRef();\n const status = this.raw.getPolyHeight(polyRef, vec3.toArray(position), floatRef);\n const height = floatRef.value;\n Raw.destroy(floatRef);\n return {\n success: statusSucceed(status),\n status,\n height\n };\n }\n /**\n * Finds a straight path from the start position to the end position.\n *\n * @param start the start position\n * @param end the end position\n * @param options additional options\n *\n * @returns an array of Vector3 positions that make up the path, or an empty array if no path was found.\n */\n computePath(start, end, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const halfExtents = options?.halfExtents ?? this.defaultQueryHalfExtents;\n // find nearest polygons for start and end positions\n const startNearestPolyResult = this.findNearestPoly(start, {\n filter,\n halfExtents\n });\n if (!startNearestPolyResult.success) {\n return {\n success: false,\n error: {\n name: 'findNearestPoly for start position failed',\n status: startNearestPolyResult.status\n },\n path: []\n };\n }\n const endNearestPolyResult = this.findNearestPoly(end, {\n filter,\n halfExtents\n });\n if (!endNearestPolyResult.success) {\n return {\n success: false,\n error: {\n name: 'findNearestPoly for end position failed',\n status: endNearestPolyResult.status\n },\n path: []\n };\n }\n const startRef = startNearestPolyResult.nearestRef;\n const endRef = endNearestPolyResult.nearestRef;\n // find polygon path\n const maxPathPolys = options?.maxPathPolys ?? 256;\n const findPathResult = this.findPath(startRef, endRef, start, end, {\n filter,\n maxPathPolys\n });\n if (!findPathResult.success) {\n return {\n success: false,\n error: {\n name: 'findPath unsuccessful',\n status: findPathResult.status\n },\n path: []\n };\n }\n if (findPathResult.polys.size <= 0) {\n return {\n success: false,\n error: {\n name: 'no polygon path found'\n },\n path: []\n };\n }\n const lastPoly = findPathResult.polys.get(findPathResult.polys.size - 1);\n let closestEnd = {\n x: end.x,\n y: end.y,\n z: end.z\n };\n if (lastPoly !== endRef) {\n const lastPolyClosestPointResult = this.closestPointOnPoly(lastPoly, end);\n if (!lastPolyClosestPointResult.success) {\n return {\n success: false,\n error: {\n name: 'no closest point on last polygon found',\n status: lastPolyClosestPointResult.status\n },\n path: []\n };\n }\n closestEnd = lastPolyClosestPointResult.closestPoint;\n }\n // find straight path\n const maxStraightPathPoints = options?.maxStraightPathPoints;\n const findStraightPathResult = this.findStraightPath(start, closestEnd, findPathResult.polys, {\n maxStraightPathPoints\n });\n if (!findStraightPathResult.success) {\n return {\n success: false,\n error: {\n name: 'findStraightPath unsuccessful',\n status: findStraightPathResult.status\n },\n path: []\n };\n }\n const {\n straightPath,\n straightPathCount\n } = findStraightPathResult;\n // format output\n const points = [];\n for (let i = 0; i < straightPathCount; i++) {\n points.push({\n x: straightPath.get(i * 3),\n y: straightPath.get(i * 3 + 1),\n z: straightPath.get(i * 3 + 2)\n });\n }\n findPathResult.polys.destroy();\n findStraightPathResult.straightPath.destroy();\n findStraightPathResult.straightPathFlags.destroy();\n findStraightPathResult.straightPathRefs.destroy();\n return {\n success: true,\n path: points\n };\n }\n /**\n * Finds a path from the start polygon to the end polygon.\n * @param startRef the reference id of the start polygon.\n * @param endRef the reference id of the end polygon.\n * @param startPosition position within the start polygon.\n * @param endPosition position within the end polygon.\n * @param options additional options\n * @returns\n *\n * The `polys` array returned must be freed after use.\n *\n * ```ts\n * findPathResult.polys.destroy();\n * ```\n */\n findPath(startRef, endRef, startPosition, endPosition, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const maxPathPolys = options?.maxPathPolys ?? 256;\n const polysArray = new UnsignedIntArray();\n polysArray.resize(maxPathPolys);\n const status = this.raw.findPath(startRef, endRef, vec3.toArray(startPosition), vec3.toArray(endPosition), filter.raw, polysArray.raw, maxPathPolys);\n return {\n success: statusSucceed(status),\n status,\n polys: polysArray\n };\n }\n /**\n * Finds the straight path from the start to the end position within the polygon corridor.\n *\n * This method peforms what is often called 'string pulling'.\n *\n * The start position is clamped to the first polygon in the path, and the\n * end position is clamped to the last. So the start and end positions should\n * normally be within or very near the first and last polygons respectively.\n *\n * The returned polygon references represent the reference id of the polygon\n * that is entered at the associated path position. The reference id associated\n * with the end point will always be zero. This allows, for example, matching\n * off-mesh link points to their representative polygons.\n *\n * If the provided result arrays are too small for the entire result set,\n * they will be filled as far as possible from the start toward the end\n * position.\n *\n * @param start path start position\n * @param end path end position\n * @param path an array of polygon references that represent the path corridor\n * @param options additional options\n * @returns the straight path result\n *\n * The straightPath, straightPathFlags, and straightPathRefs arrays returned must be freed after use.\n *\n * ```ts\n * findStraightPathResult.straightPath.destroy();\n * findStraightPathResult.straightPathFlags.destroy();\n * findStraightPathResult.straightPathRefs.destroy();\n * ```\n */\n findStraightPath(start, end, path, options) {\n const maxStraightPathPoints = options?.maxStraightPathPoints ?? 256;\n const straightPathOptions = options?.straightPathOptions ?? 0;\n let pathPolys;\n if (Array.isArray(path)) {\n pathPolys = new UnsignedIntArray();\n pathPolys.copy(path);\n } else {\n pathPolys = path;\n }\n const straightPath = new FloatArray();\n straightPath.resize(maxStraightPathPoints * 3);\n const straightPathFlags = new UnsignedCharArray();\n straightPathFlags.resize(maxStraightPathPoints);\n const straightPathRefs = new UnsignedIntArray();\n straightPathRefs.resize(maxStraightPathPoints);\n const straightPathCountRaw = new Raw.IntRef();\n const status = this.raw.findStraightPath(vec3.toArray(start), vec3.toArray(end), pathPolys.raw, straightPath.raw, straightPathFlags.raw, straightPathRefs.raw, straightPathCountRaw, maxStraightPathPoints, straightPathOptions);\n const straightPathCount = straightPathCountRaw.value;\n Raw.destroy(straightPathCountRaw);\n if (Array.isArray(path)) {\n pathPolys.destroy();\n }\n return {\n success: statusSucceed(status),\n status,\n straightPath,\n straightPathFlags,\n straightPathRefs,\n straightPathCount\n };\n }\n /**\n * Casts a 'walkability' ray along the surface of the navigation mesh from the start position toward the end position.\n *\n * This method is meant to be used for quick, short distance checks.\n *\n * If the path array is too small to hold the result, it will be filled as far as possible from the start postion toward the end position.\n *\n * The raycast ignores the y-value of the end position. (2D check.) This places significant limits on how it can be used.\n *\n * <b>Using the Hit Parameter (t)</b>\n *\n * If the hit parameter is a very high value, then the ray has hit\n * the end position. In this case the path represents a valid corridor to the\n * end position and the value of hitNormal is undefined.\n *\n * If the hit parameter is zero, then the start position is on the wall that\n * was hit and the value of hitNormal is undefined.\n *\n * If 0 < t < 1.0 then the following applies:\n *\n * ```\n * distanceToHitBorder = distanceToEndPosition * t\n * hitPoint = startPos + (endPos - startPos) * t\n * ```\n *\n * <b>Use Case Restriction</b>\n *\n * Consider a scene where there is a main floor with a second floor balcony that hangs over the main floor.\n * So the first floor mesh extends below the balcony mesh.\n * The start position is somewhere on the first floor.\n * The end position is on the balcony.\n *\n * The raycast will search toward the end position along the first floor mesh.\n * If it reaches the end position's xz-coordinates it will indicate FLT_MAX,(no wall hit), meaning it reached the end position.\n * This is one example of why this method is meant for short distance checks.\n *\n * @param startRef the reference id of the start polygon.\n * @param startPosition a position within the start polygon representing the start of the ray\n * @param endPosition the position to cast the ray toward.\n * @param options additional options\n */\n raycast(startRef, startPosition, endPosition, options) {\n const raycastHit = new Raw.Module.dtRaycastHit();\n const raycastOptions = options?.raycastOptions ?? 0;\n const prevRef = options?.prevRef ?? 0;\n const queryFilter = options?.filter?.raw ?? this.defaultFilter.raw;\n const status = this.raw.raycast(startRef, vec3.toArray(startPosition), vec3.toArray(endPosition), queryFilter, raycastOptions, raycastHit, prevRef);\n const result = {\n success: statusSucceed(status),\n status,\n t: raycastHit.t,\n hitNormal: vec3.fromArray(array(i => raycastHit.get_hitNormal(i), 3)),\n hitEdgeIndex: raycastHit.hitEdgeIndex,\n path: array(i => raycastHit.get_path(i), raycastHit.pathCount),\n maxPath: raycastHit.maxPath,\n pathCost: raycastHit.pathCost\n };\n Raw.destroy(raycastHit);\n return result;\n }\n /**\n * Destroys the NavMeshQuery instance\n */\n destroy() {\n this.raw.destroy();\n }\n}\n\nconst crowdAgentParamsDefaults = {\n radius: 0.5,\n height: 1,\n maxAcceleration: 20,\n maxSpeed: 6,\n collisionQueryRange: 2.5,\n pathOptimizationRange: 0,\n separationWeight: 0,\n updateFlags: 7,\n obstacleAvoidanceType: 0,\n queryFilterType: 0,\n userData: 0\n};\nclass CrowdAgent {\n get radius() {\n return this.raw.params.radius;\n }\n set radius(value) {\n this.raw.params.radius = value;\n }\n get height() {\n return this.raw.params.height;\n }\n set height(value) {\n this.raw.params.height = value;\n }\n get maxAcceleration() {\n return this.raw.params.maxAcceleration;\n }\n set maxAcceleration(value) {\n this.raw.params.maxAcceleration = value;\n }\n get maxSpeed() {\n return this.raw.params.maxSpeed;\n }\n set maxSpeed(value) {\n this.raw.params.maxSpeed = value;\n }\n get collisionQueryRange() {\n return this.raw.params.collisionQueryRange;\n }\n set collisionQueryRange(value) {\n this.raw.params.collisionQueryRange = value;\n }\n get pathOptimizationRange() {\n return this.raw.params.pathOptimizationRange;\n }\n set pathOptimizationRange(value) {\n this.raw.params.pathOptimizationRange = value;\n }\n get separationWeight() {\n return this.raw.params.separationWeight;\n }\n set separationWeight(value) {\n this.raw.params.separationWeight = value;\n }\n get updateFlags() {\n return this.raw.params.updateFlags;\n }\n set updateFlags(value) {\n this.raw.params.updateFlags = value;\n }\n get obstacleAvoidanceType() {\n return this.raw.params.obstacleAvoidanceType;\n }\n set obstacleAvoidanceType(value) {\n this.raw.params.obstacleAvoidanceType = value;\n }\n get queryFilterType() {\n return this.raw.params.queryFilterType;\n }\n set queryFilterType(value) {\n this.raw.params.queryFilterType = value;\n }\n get userData() {\n return this.raw.params.userData;\n }\n set userData(value) {\n this.raw.params.userData = value;\n }\n /**\n * The interpolated position of the agent.\n *\n * Use this if stepping the crowd with interpolation.\n * This will not be updated if stepping the crowd without interpolation.\n */\n interpolatedPosition = {\n x: 0,\n y: 0,\n z: 0\n };\n constructor(crowd, agentIndex) {\n this.crowd = crowd;\n this.agentIndex = agentIndex;\n this.raw = crowd.raw.getEditableAgent(agentIndex);\n this.interpolatedPosition = this.position();\n }\n /**\n * Updates the agent's target.\n * @param position The new target position.\n * @returns True if the request was successful.\n */\n requestMoveTarget(position) {\n const {\n nearestPoint,\n nearestRef\n } = this.crowd.navMeshQuery.findNearestPoly(position, {\n halfExtents: this.crowd.navMeshQuery.defaultQueryHalfExtents,\n filter: this.crowd.navMeshQuery.defaultFilter\n });\n return this.crowd.raw.requestMoveTarget(this.agentIndex, nearestRef, vec3.toArray(nearestPoint));\n }\n /**\n * Submits a new move request for the specified agent.\n * @param velocity The desired velocity of the agent.\n * @returns True if the request was successful.\n */\n requestMoveVelocity(velocity) {\n return this.crowd.raw.requestMoveVelocity(this.agentIndex, vec3.toArray(velocity));\n }\n /**\n * Resets the current move request for the specified agent.\n */\n resetMoveTarget() {\n this.crowd.raw.resetMoveTarget(this.agentIndex);\n }\n /**\n * Teleports the agent to the specified position.\n * @param position\n */\n teleport(position) {\n Raw.CrowdUtils.agentTeleport(this.crowd.raw, this.agentIndex, vec3.toArray(position), vec3.toArray(this.crowd.navMeshQuery.defaultQueryHalfExtents), this.crowd.navMeshQuery.defaultFilter.raw);\n vec3.copy(position, this.interpolatedPosition);\n }\n /**\n * The position of the agent.\n * @returns\n */\n position() {\n return {\n x: this.raw.get_npos(0),\n y: this.raw.get_npos(1),\n z: this.raw.get_npos(2)\n };\n }\n /**\n * The actual velocity of the agent. The change from velocityDesiredObstacleAdjusted -> velocity is constrained by max acceleration.\n */\n velocity() {\n return {\n x: this.raw.get_vel(0),\n y: this.raw.get_vel(1),\n z: this.raw.get_vel(2)\n };\n }\n /**\n * The desired velocity of the agent. Based on the current path, calculated from scratch each frame.\n */\n desiredVelocity() {\n return {\n x: this.raw.get_dvel(0),\n y: this.raw.get_dvel(1),\n z: this.raw.get_dvel(2)\n };\n }\n /**\n * The desired velocity adjusted by obstacle avoidance, calculated from scratch each frame.\n */\n desiredVelocityObstacleAdjusted() {\n return {\n x: this.raw.get_nvel(0),\n y: this.raw.get_nvel(1),\n z: this.raw.get_nvel(2)\n };\n }\n /**\n * Returns the state of the agent.\n *\n * 0 = DT_CROWDAGENT_STATE_INVALID\n * 1 = DT_CROWDAGENT_STATE_WALKING\n * 2 = DT_CROWDAGENT_STATE_OFFMESH\n */\n state() {\n return this.raw.state;\n }\n /**\n * Returns the next target position on the path to the target\n * @returns\n */\n target() {\n return {\n x: this.raw.get_targetPos(0),\n y: this.raw.get_targetPos(1),\n z: this.raw.get_targetPos(2)\n };\n }\n /**\n * Returns the next target position on the path to the target\n * @returns\n */\n nextTargetInPath() {\n return {\n x: this.raw.get_cornerVerts(0),\n y: this.raw.get_cornerVerts(1),\n z: this.raw.get_cornerVerts(2)\n };\n }\n /**\n * Returns the local path corridor corners for the agent\n * @returns\n */\n corners() {\n const points = [];\n for (let i = 0; i < this.raw.ncorners; i++) {\n points.push({\n x: this.raw.get_cornerVerts(i * 3),\n y: this.raw.get_cornerVerts(i * 3 + 1),\n z: this.raw.get_cornerVerts(i * 3 + 2)\n });\n }\n return points;\n }\n /**\n * Returns the agents parameters.\n * @returns\n */\n parameters() {\n const {\n params\n } = this.raw;\n return {\n radius: params.radius,\n height: params.height,\n maxAcceleration: params.maxAcceleration,\n maxSpeed: params.maxSpeed,\n collisionQueryRange: params.collisionQueryRange,\n pathOptimizationRange: params.pathOptimizationRange,\n separationWeight: params.separationWeight,\n updateFlags: params.updateFlags,\n obstacleAvoidanceType: params.obstacleAvoidanceType,\n queryFilterType: params.queryFilterType,\n userData: params.userData\n };\n }\n /**\n * Updates the agent's parameters.\n * Any parameters not specified in the crowdAgentParams object will be unchanged.\n * @param crowdAgentParams agent parameters to update.\n */\n updateParameters(crowdAgentParams) {\n const params = {\n ...this.parameters(),\n ...crowdAgentParams\n };\n this.setParameters(params);\n }\n /**\n * Sets the agent's parameters.\n * Any parameters not specified in the crowdAgentParams object will be set to their default values.\n * @param crowdAgentParams agent parameters\n */\n setParameters(crowdAgentParams) {\n const params = {\n ...crowdAgentParamsDefaults,\n ...crowdAgentParams\n };\n const dtCrowdAgentParams = new Raw.Module.dtCrowdAgentParams();\n dtCrowdAgentParams.radius = params.radius;\n dtCrowdAgentParams.height = params.height;\n dtCrowdAgentParams.maxAcceleration = params.maxAcceleration;\n dtCrowdAgentParams.maxSpeed = params.maxSpeed;\n dtCrowdAgentParams.collisionQueryRange = params.collisionQueryRange;\n dtCrowdAgentParams.pathOptimizationRange = params.pathOptimizationRange;\n dtCrowdAgentParams.separationWeight = params.separationWeight;\n dtCrowdAgentParams.updateFlags = params.updateFlags;\n dtCrowdAgentParams.obstacleAvoidanceType = params.obstacleAvoidanceType;\n dtCrowdAgentParams.queryFilterType = params.queryFilterType;\n dtCrowdAgentParams.userData = params.userData;\n this.crowd.raw.updateAgentParameters(this.agentIndex, dtCrowdAgentParams);\n }\n /**\n * Returns whether the agent is over an off-mesh connection.\n * @returns\n */\n overOffMeshConnection() {\n return Raw.CrowdUtils.overOffMeshConnection(this.crowd.raw, this.agentIndex);\n }\n}\nclass Crowd {\n /**\n * The agents in the crowd.\n */\n agents = {};\n /**\n * The NavMesh the crowd is interacting with.\n */\n\n /**\n * The NavMeshQuery used to find nearest polys for commands\n */\n\n /**\n * Accumulator for fixed updates with interpolation\n */\n accumulator = 0;\n /**\n *\n * @param navMesh the navmesh the crowd will use for planning\n * @param param1 the crowd parameters\n *\n * @example\n * ```ts\n * const crowd = new Crowd(navMesh, {\n * maxAgents: 100,\n * maxAgentRadius: 1,\n * });\n * ```\n */\n constructor(navMesh, {\n maxAgents,\n maxAgentRadius\n }) {\n this.navMesh = navMesh;\n this.raw = Raw.Detour.allocCrowd();\n this.raw.init(maxAgents, maxAgentRadius, navMesh.raw.getNavMesh());\n this.navMeshQuery = new NavMeshQuery(new Raw.Module.NavMeshQuery(this.raw.getNavMeshQuery()));\n }\n /**\n * Steps the crowd forward in time with a fixed time step.\n *\n * There are two modes. The simple mode is fixed timestepping without interpolation. In this case you only use the first argument. The second case uses interpolation. In that you also provide the time since the function was last used, as well as the maximum fixed timesteps to take.\n *\n * @param dt The fixed time step size to use.\n * @param timeSinceLastCalled The time elapsed since the function was last called.\n * @param maxSubSteps Maximum number of fixed steps to take per function call.\n *\n * @example fixed time stepping\n * ```ts\n * const deltaTime = 1 / 60;\n * crowd.update(deltaTime);\n * ```\n *\n * @example variable time stepping\n * ```ts\n * crowd.update(timeSinceLastUpdate);\n * ```\n *\n * @example fixed time stepping with interpolation\n * ```ts\n * const deltaTime = 1 / 60;\n * const maxSubSteps = 10;\n * crowd.update(deltaTime, timeSinceLastUpdate, maxSubSteps);\n *\n * console.log(agent.interpolatedPosition);\n * ```\n */\n update(dt, timeSinceLastCalled, maxSubSteps = 10) {\n if (timeSinceLastCalled === undefined) {\n // fixed step\n this.raw.update(dt, undefined);\n } else {\n this.accumulator += timeSinceLastCalled;\n // Do fixed steps to catch up\n let substeps = 0;\n while (this.accumulator >= dt && substeps < maxSubSteps) {\n this.raw.update(dt, undefined);\n this.accumulator -= dt;\n substeps++;\n }\n // Interpolate the agent positions\n const t = this.accumulator % dt / dt;\n const agents = this.getAgents();\n for (const agent of agents) {\n vec3.lerp(agent.interpolatedPosition, agent.position(), t, agent.interpolatedPosition);\n }\n }\n }\n /**\n * Adds a new agent to the crowd.\n */\n addAgent(position, crowdAgentParams) {\n const params = {\n ...crowdAgentParamsDefaults,\n ...crowdAgentParams\n };\n const dtCrowdAgentParams = new Raw.Module.dtCrowdAgentParams();\n dtCrowdAgentParams.radius = params.radius;\n dtCrowdAgentParams.height = params.height;\n dtCrowdAgentParams.maxAcceleration = params.maxAcceleration;\n dtCrowdAgentParams.maxSpeed = params.maxSpeed;\n dtCrowdAgentParams.collisionQueryRange = params.collisionQueryRange;\n dtCrowdAgentParams.pathOptimizationRange = params.pathOptimizationRange;\n dtCrowdAgentParams.separationWeight = params.separationWeight;\n dtCrowdAgentParams.updateFlags = params.updateFlags;\n dtCrowdAgentParams.obstacleAvoidanceType = params.obstacleAvoidanceType;\n dtCrowdAgentParams.queryFilterType = params.queryFilterType;\n dtCrowdAgentParams.userData = params.userData;\n const agentIndex = this.raw.addAgent(vec3.toArray(position), dtCrowdAgentParams);\n const agent = new CrowdAgent(this, agentIndex);\n this.agents[agentIndex] = agent;\n return agent;\n }\n /**\n * Gets the agent for the specified index, or null if no agent has the given index.\n * @param agentIndex\n * @returns\n */\n getAgent(agentIndex) {\n const agent = this.agents[agentIndex];\n if (!agent) {\n return null;\n }\n return agent;\n }\n /**\n * Removes the agent from the crowd.\n */\n removeAgent(agent) {\n const agentIndex = typeof agent === 'number' ? agent : agent.agentIndex;\n this.raw.removeAgent(agentIndex);\n delete this.agents[agentIndex];\n }\n /**\n * Returns the maximum number of agents that can be managed by the crowd.\n */\n getAgentCount() {\n return this.raw.getAgentCount();\n }\n /**\n * Returns the number of active agents in the crowd.\n */\n getActiveAgentCount() {\n return Raw.CrowdUtils.getActiveAgentCount(this.raw);\n }\n /**\n * Returns all the agents managed by the crowd.\n */\n getAgents() {\n return Object.values(this.agents);\n }\n /**\n * Gets the query filter for the specified index.\n * @param filterIndex the index of the query filter to retrieve, (min 0, max 15)\n * @returns the query filter\n */\n getFilter(filterIndex) {\n return new QueryFilter(this.raw.getEditableFilter(filterIndex));\n }\n /**\n * Destroys the crowd.\n */\n destroy() {\n Raw.Detour.freeCrowd(this.raw);\n }\n}\n\n/**\n * Represents a helper class to visualize navigation cur and related data in PlayCanvas.\n */\nclass DebugDrawerUtils {\n currentPrimitiveType = 0;\n currentVertices = [];\n primitives = [];\n constructor() {\n this.debugDrawImpl = new Raw.Module.DebugDrawImpl();\n // Bind the debug draw implementation handlers\n this.debugDrawImpl.handleBegin = (primitive, _size) => {\n this.currentPrimitiveType = primitive;\n this.currentVertices = [];\n };\n this.debugDrawImpl.handleDepthMask = _state => {\n // unused for now...\n };\n this.debugDrawImpl.handleTexture = _state => {\n // unused for now...\n };\n this.debugDrawImpl.handleVertexWithColor = (x, y, z, color) => {\n this.vertex(x, y, z, color);\n };\n this.debugDrawImpl.handleVertexWithColorAndUV = (x, y, z, color, _u, _v) => {\n this.vertex(x, y, z, color);\n };\n const primitiveMap = {\n [Raw.Module.DU_DRAW_LINES]: 'lines',\n [Raw.Module.DU_DRAW_TRIS]: 'tris',\n [Raw.Module.DU_DRAW_QUADS]: 'quads',\n [Raw.Module.DU_DRAW_POINTS]: 'points'\n };\n this.debugDrawImpl.handleEnd = () => {\n const type = primitiveMap[this.currentPrimitiveType];\n this.primitives.push({\n type,\n vertices: this.currentVertices\n });\n };\n }\n flush() {\n const cur = this.primitives;\n this.primitives = [];\n return cur;\n }\n drawHeightfieldSolid(hf) {\n Raw.RecastDebugDraw.debugDrawHeightfieldSolid(this.debugDrawImpl, hf.raw);\n return this.flush();\n }\n drawHeightfieldWalkable(hf) {\n Raw.RecastDebugDraw.debugDrawHeightfieldWalkable(this.debugDrawImpl, hf.raw);\n return this.flush();\n }\n drawCompactHeightfieldSolid(chf) {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldSolid(this.debugDrawImpl, chf.raw);\n return this.flush();\n }\n drawCompactHeightfieldRegions(chf) {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldRegions(this.debugDrawImpl, chf.raw);\n return this.flush();\n }\n drawCompactHeightfieldDistance(chf) {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldDistance(this.debugDrawImpl, chf.raw);\n return this.flush();\n }\n drawHeightfieldLayer(layer, idx) {\n Raw.RecastDebugDraw.debugDrawHeightfieldLayer(this.debugDrawImpl, layer.raw, idx);\n return this.flush();\n }\n drawHeightfieldLayers(lset) {\n Raw.RecastDebugDraw.debugDrawHeightfieldLayers(this.debugDrawImpl, lset.raw);\n return this.flush();\n }\n drawRegionConnections(cset, alpha = 1) {\n Raw.RecastDebugDraw.debugDrawRegionConnections(this.debugDrawImpl, cset.raw, alpha);\n return this.flush();\n }\n drawRawContours(cset, alpha = 1) {\n Raw.RecastDebugDraw.debugDrawRawContours(this.debugDrawImpl, cset.raw, alpha);\n return this.flush();\n }\n drawContours(cset, alpha = 1) {\n Raw.RecastDebugDraw.debugDrawContours(this.debugDrawImpl, cset.raw, alpha);\n return this.flush();\n }\n drawPolyMesh(mesh) {\n Raw.RecastDebugDraw.debugDrawPolyMesh(this.debugDrawImpl, mesh.raw);\n return this.flush();\n }\n drawPolyMeshDetail(dmesh) {\n Raw.RecastDebugDraw.debugDrawPolyMeshDetail(this.debugDrawImpl, dmesh.raw);\n return this.flush();\n }\n drawNavMesh(mesh, flags = 0) {\n Raw.DetourDebugDraw.debugDrawNavMesh(this.debugDrawImpl, mesh.raw.getNavMesh(), flags);\n return this.flush();\n }\n drawNavMeshWithClosedList(mesh, query, flags = 0) {\n Raw.DetourDebugDraw.debugDrawNavMeshWithClosedList(this.debugDrawImpl, mesh.raw.m_navMesh, query.raw.m_navQuery, flags);\n return this.flush();\n }\n drawNavMeshNodes(query) {\n Raw.DetourDebugDraw.debugDrawNavMeshNodes(this.debugDrawImpl, query.raw.m_navQuery);\n return this.flush();\n }\n drawNavMeshBVTree(mesh) {\n Raw.DetourDebugDraw.debugDrawNavMeshBVTree(this.debugDrawImpl, mesh.raw.m_navMesh);\n return this.flush();\n }\n drawNavMeshPortals(mesh) {\n Raw.DetourDebugDraw.debugDrawNavMeshPortals(this.debugDrawImpl, mesh.raw.m_navMesh);\n return this.flush();\n }\n drawNavMeshPolysWithFlags(mesh, flags, col) {\n Raw.DetourDebugDraw.debugDrawNavMeshPolysWithFlags(this.debugDrawImpl, mesh.raw.m_navMesh, flags, col);\n return this.flush();\n }\n drawNavMeshPoly(mesh, ref, col) {\n Raw.DetourDebugDraw.debugDrawNavMeshPoly(this.debugDrawImpl, mesh.raw.m_navMesh, ref, col);\n return this.flush();\n }\n /**\n * Disposes of the debug drawer and releases resources.\n */\n dispose() {\n Raw.Module.destroy(this.debugDrawImpl);\n }\n vertex(x, y, z, color) {\n const r = (color & 0xff) / 255;\n const g = (color >> 8 & 0xff) / 255;\n const b = (color >> 16 & 0xff) / 255;\n const a = (color >> 24 & 0xff) / 255;\n this.currentVertices.push([x, y, z, r, g, b, a]);\n }\n}\n/**\n * Converts a color in 0xRRGGBBAA format to a duRGBA format.\n */\nconst rgbToDuRgba = hexColor => {\n const r = hexColor >> 16 & 0xff;\n const g = hexColor >> 8 & 0xff;\n const b = hexColor & 0xff;\n return r | g << 8 | b << 16 | 255 << 24;\n};\n\nclass NavMeshGetTilesAtResult {\n constructor(raw) {\n this.raw = raw;\n }\n tiles(index) {\n return new DetourMeshTile(this.raw.get_tiles(index));\n }\n tileCount() {\n return this.raw.tileCount;\n }\n}\nclass NavMeshRemoveTileResult {\n constructor(raw) {\n this.raw = raw;\n }\n data() {\n return array(i => this.raw.get_data(i), this.raw.dataSize);\n }\n dataSize() {\n return this.raw.dataSize;\n }\n}\nclass NavMeshCalcTileLocResult {\n constructor(raw) {\n this.raw = raw;\n }\n tileX() {\n return this.raw.tileX;\n }\n tileY() {\n return this.raw.tileY;\n }\n}\nclass NavMeshStoreTileStateResult {\n constructor(raw) {\n this.raw = raw;\n }\n data() {\n return array(i => this.raw.get_data(i), this.raw.dataSize);\n }\n dataSize() {\n return this.raw.dataSize;\n }\n}\nclass NavMeshParams {\n constructor(raw) {\n this.raw = raw;\n }\n static create(params) {\n const raw = new Raw.Module.dtNavMeshParams();\n raw.set_orig(0, params.orig.x);\n raw.set_orig(1, params.orig.y);\n raw.set_orig(2, params.orig.z);\n raw.tileWidth = params.tileWidth;\n raw.tileHeight = params.tileHeight;\n raw.maxTiles = params.maxTiles;\n raw.maxPolys = params.maxPolys;\n return new NavMeshParams(raw);\n }\n clone() {\n return NavMeshParams.create({\n orig: {\n x: this.raw.get_orig(0),\n y: this.raw.get_orig(1),\n z: this.raw.get_orig(2)\n },\n tileWidth: this.raw.tileWidth,\n tileHeight: this.raw.tileHeight,\n maxTiles: this.raw.maxTiles,\n maxPolys: this.raw.maxPolys\n });\n }\n}\nclass NavMesh {\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.NavMesh();\n }\n /**\n * Initializes the NavMesh for use with a single tile.\n * @param navMeshData the nav mesh data\n * @returns the status of the operation\n */\n initSolo(navMeshData) {\n return this.raw.initSolo(navMeshData.raw);\n }\n /**\n * Initializes the NavMesh for use with multiple tiles.\n * @param params parameters for the NavMesh\n * @returns the status of the operation\n */\n initTiled(params) {\n return this.raw.initTiled(params.raw);\n }\n /**\n * Adds a tile to the NavMesh.\n * @param navMeshData the nav mesh data\n * @param flags the flags to use when building the nav mesh\n * @param lastRef\n * @returns the status of the operation and the reference of the added tile\n */\n addTile(navMeshData, flags, lastRef) {\n const tileRefRaw = new Raw.UnsignedIntRef();\n const status = this.raw.addTile(navMeshData.raw, flags, lastRef, tileRefRaw);\n const tileRef = tileRefRaw.value;\n Raw.destroy(tileRefRaw);\n return {\n status,\n tileRef\n };\n }\n /**\n * Decodes a standard polygon reference.\n * @param polyRef The polygon reference to decode\n * @returns the decoded polygon reference\n */\n decodePolyId(polyRef) {\n const saltRef = new Raw.UnsignedIntRef();\n const itRef = new Raw.UnsignedIntRef();\n const ipRef = new Raw.UnsignedIntRef();\n this.raw.decodePolyId(polyRef, saltRef, itRef, ipRef);\n const tileSalt = saltRef.value;\n Raw.destroy(saltRef);\n const tileIndex = itRef.value;\n Raw.destroy(itRef);\n const tilePolygonIndex = ipRef.value;\n Raw.destroy(ipRef);\n return {\n tileSalt,\n tileIndex,\n tilePolygonIndex\n };\n }\n /**\n * Derives a standard polygon reference.\n * @param salt The tile's salt value.\n * @param tileIndex The index of the tile. `it` in the C++ api.\n * @param tilePolygonIndex The index of the polygon within the tile. `ip` in the C++ api.\n * @returns the derived polygon reference\n */\n encodePolyId(salt, tileIndex, tilePolygonIndex) {\n return this.raw.encodePolyId(salt, tileIndex, tilePolygonIndex);\n }\n /**\n * Removes a tile from the NavMesh\n * @param ref the tile ref\n * @returns the nav mesh data, so it can be added back later\n */\n removeTile(ref) {\n return new NavMeshRemoveTileResult(this.raw.removeTile(ref));\n }\n /**\n * Calculates the tile grid location for the specified world position.\n * @param pos The world position for the query. [(x, y, z)]\n * @returns\n */\n calcTileLoc(pos) {\n return new NavMeshCalcTileLocResult(this.raw.calcTileLoc(vec3.toArray(pos)));\n }\n /**\n * Gets the tile at the specified grid location.\n * @param x The tile's x-location. (x, y, layer)\n * @param y The tile's y-location. (x, y, layer)\n * @param layer The tile's layer. (x, y, layer)\n * @returns The tile, or null if the tile does not exist.\n */\n getTileAt(x, y, layer) {\n const tile = this.raw.getTileAt(x, y, layer);\n return !Raw.isNull(tile) ? new DetourMeshTile(tile) : null;\n }\n /**\n * Gets all tiles at the specified grid location. (All layers.)\n * @param x The tile's x-location. (x, y)\n * @param y The tile's y-location. (x, y)\n * @param maxTiles The maximum tiles the tiles parameter can hold.\n */\n getTilesAt(x, y, maxTiles) {\n return new NavMeshGetTilesAtResult(this.raw.getTilesAt(x, y, maxTiles));\n }\n /**\n * Gets the tile reference for the tile at specified grid location.\n * @param x The tile's x-location. (x, y, layer)\n * @param y The tile's y-location. (x, y, layer)\n * @param layer The tile's layer. (x, y, layer)\n * @returns The tile reference of the tile, or 0 if there is none.\n */\n getTileRefAt(x, y, layer) {\n return this.raw.getTileRefAt(x, y, layer);\n }\n /**\n * Gets the tile reference for the specified tile.\n * @param tile\n * @returns\n */\n getTileRef(tile) {\n return this.raw.getTileRef(tile.raw);\n }\n /**\n * Gets the tile for the specified tile reference.\n * @param ref The tile reference of the tile to retrieve.\n * @returns The tile for the specified reference, or null if the reference is invalid.\n */\n getTileByRef(ref) {\n const tile = this.raw.getTileByRef(ref);\n return !Raw.isNull(tile) ? new DetourMeshTile(tile) : null;\n }\n /**\n * Returns the maximum number of tiles supported by the navigation mesh.\n */\n getMaxTiles() {\n return this.raw.getMaxTiles();\n }\n /**\n * Gets the tile at the specified index.\n * @param i the tile index. [Limit: 0 >= index < #getMaxTiles()]\n * @returns\n */\n getTile(i) {\n return new DetourMeshTile(this.raw.getTile(i));\n }\n /**\n * Gets the tile and polygon for the specified polygon reference.\n * @param ref The reference for the a polygon.\n * @returns\n */\n getTileAndPolyByRef(ref) {\n const result = this.raw.getTileAndPolyByRef(ref);\n const tile = new DetourMeshTile(result.tile);\n const poly = new DetourPoly(result.poly);\n return {\n success: statusSucceed(result.status),\n status: result.status,\n tile,\n poly\n };\n }\n /**\n * Gets the tile and polygon for the specified polygon reference.\n * @param ref A known valid reference for a polygon.\n * @returns\n */\n getTileAndPolyByRefUnsafe(ref) {\n const result = this.raw.getTileAndPolyByRef(ref);\n const tile = new DetourMeshTile(result.tile);\n const poly = new DetourPoly(result.poly);\n return {\n tile,\n poly\n };\n }\n /**\n * Checks the validity of a polygon reference.\n * @param ref\n * @returns\n */\n isValidPolyRef(ref) {\n return this.raw.isValidPolyRef(ref);\n }\n /**\n * Gets the polygon reference for the tile's base polygon.\n * @param tile\n * @returns\n */\n getPolyRefBase(tile) {\n return this.raw.getPolyRefBase(tile.raw);\n }\n /**\n * Gets the endpoints for an off-mesh connection, ordered by \"direction of travel\".\n * @param prevRef The reference of the polygon before the connection.\n * @param polyRef The reference of the off-mesh connection polygon.\n * @returns\n */\n getOffMeshConnectionPolyEndPoints(prevRef, polyRef) {\n const startRaw = new Raw.Vec3();\n const endRaw = new Raw.Vec3();\n const status = this.raw.getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startRaw, endRaw);\n const start = vec3.fromRaw(startRaw);\n Raw.destroy(startRaw);\n const end = vec3.fromRaw(endRaw);\n Raw.destroy(endRaw);\n return {\n success: statusSucceed(status),\n status,\n start,\n end\n };\n }\n /**\n * Gets the specified off-mesh connection.\n * @param ref The polygon reference of the off-mesh connection.\n * @returns\n */\n getOffMeshConnectionByRef(ref) {\n return new DetourOffMeshConnection(this.raw.getOffMeshConnectionByRef(ref));\n }\n /**\n * Sets the user defined flags for the specified polygon.\n * @param ref The polygon reference.\n * @param flags The new flags for the polygon.\n */\n setPolyFlags(ref, flags) {\n return this.raw.setPolyFlags(ref, flags);\n }\n /**\n * Gets the user defined flags for the specified polygon.\n * @param ref The polygon reference.\n * @returns\n */\n getPolyFlags(ref) {\n const flagsRaw = new Raw.UnsignedShortRef();\n const status = this.raw.getPolyFlags(ref, flagsRaw);\n const flags = flagsRaw.value;\n Raw.destroy(flagsRaw);\n return {\n status,\n flags\n };\n }\n /**\n * Sets the user defined area for the specified polygon.\n * @param ref The polygon reference.\n * @param flags The new flags for the polygon.\n */\n setPolyArea(ref, area) {\n return this.raw.setPolyArea(ref, area);\n }\n /**\n * Gets the user defined area for the specified polygon.\n * @param ref The polygon reference.\n * @returns\n */\n getPolyArea(ref) {\n const areaRaw = new Raw.UnsignedCharRef();\n const status = this.raw.getPolyArea(ref, areaRaw);\n const area = areaRaw.value;\n Raw.destroy(areaRaw);\n return {\n status,\n area\n };\n }\n /**\n * Gets the size of the buffer required by #storeTileState to store the specified tile's state.\n * @param tile\n * @returns The size of the buffer required to store the state.\n */\n getTileStateSize(tile) {\n return this.raw.getTileStateSize(tile.raw);\n }\n /**\n * Stores the non-structural state of the tile in the specified buffer. (Flags, area ids, etc.)\n * @param tile The tile.\n * @param maxDataSize The size of the data buffer. [Limit: >= #getTileStateSize]\n * @returns\n */\n storeTileState(tile, maxDataSize) {\n return new NavMeshStoreTileStateResult(this.raw.storeTileState(tile.raw, maxDataSize));\n }\n /**\n * Restores the state of the tile.\n * @param tile The tile.\n * @param data The new state. (Obtained from @see storeTileState)\n * @param maxDataSize The size of the state within the data buffer.\n * @returns\n */\n restoreTileState(tile, data, maxDataSize) {\n return this.raw.restoreTileState(tile.raw, data, maxDataSize);\n }\n /**\n * Destroys the NavMesh.\n */\n destroy() {\n this.raw.destroy();\n Raw.Module.destroy(this.raw);\n }\n}\n/**\n * Gets the positions and indices of the nav mesh.\n * @param navMesh the nav mesh\n * @param flags poly flags to filter by, defaults to undefined to include all polys\n * @returns the positions and indices of the nav mesh\n */\nconst getNavMeshPositionsAndIndices = (navMesh, flags) => {\n const positions = [];\n const indices = [];\n let tri = 0;\n const maxTiles = navMesh.getMaxTiles();\n for (let tileIndex = 0; tileIndex < maxTiles; tileIndex++) {\n const tile = navMesh.getTile(tileIndex);\n const tileHeader = tile.header();\n if (!tileHeader) continue;\n const tilePolyCount = tileHeader.polyCount();\n for (let tilePolyIndex = 0; tilePolyIndex < tilePolyCount; ++tilePolyIndex) {\n const poly = tile.polys(tilePolyIndex);\n if (flags !== undefined && (poly.flags() & flags) === 0) continue;\n if (poly.getType() === 1) continue;\n const polyVertCount = poly.vertCount();\n const polyDetail = tile.detailMeshes(tilePolyIndex);\n const polyDetailTriBase = polyDetail.triBase();\n const polyDetailTriCount = polyDetail.triCount();\n for (let polyDetailTriIndex = 0; polyDetailTriIndex < polyDetailTriCount; ++polyDetailTriIndex) {\n const detailTrisBaseIndex = (polyDetailTriBase + polyDetailTriIndex) * 4;\n for (let trianglePoint = 0; trianglePoint < 3; ++trianglePoint) {\n if (tile.detailTris(detailTrisBaseIndex + trianglePoint) < polyVertCount) {\n const tileVertsBaseIndex = poly.verts(tile.detailTris(detailTrisBaseIndex + trianglePoint)) * 3;\n positions.push(tile.verts(tileVertsBaseIndex), tile.verts(tileVertsBaseIndex + 1), tile.verts(tileVertsBaseIndex + 2));\n } else {\n const tileVertsBaseIndex = (polyDetail.vertBase() + tile.detailTris(detailTrisBaseIndex + trianglePoint) - poly.vertCount()) * 3;\n positions.push(tile.detailVerts(tileVertsBaseIndex), tile.detailVerts(tileVertsBaseIndex + 1), tile.detailVerts(tileVertsBaseIndex + 2));\n }\n indices.push(tri++);\n }\n }\n }\n }\n return [positions, indices];\n};\n/**\n * Disables all polys not connected to provided start poly refs.\n * @param navMesh the nav mesh to prune\n * @param startPolyRefs poly refs to start the flood fill from, can be retrieved with `navMeshQuery.findNearestPoly`\n *\n * @example\n * ```ts\n * const navMeshQuery = new NavMeshQuery(navMesh);\n *\n * const nearestPolyResult = navMeshQuery.findNearestPoly(point, {\n * halfExtents: { x: 2, y: 2, z: 2 },\n * });\n *\n * if (!nearestPolyResult.success) return;\n *\n * floodFillPruneNavMesh(navMesh, [nearestPolyResult.nearestRef]);\n * ```\n */\nconst floodFillPruneNavMesh = (navMesh, startPolyRefs) => {\n /* find all polys connected to the nearest poly */\n const visited = new Set();\n const openList = [];\n for (const startPolyRef of startPolyRefs) {\n visited.add(startPolyRef);\n openList.push(startPolyRef);\n }\n while (openList.length > 0) {\n const ref = openList.pop();\n // get current poly and tile\n const {\n poly,\n tile\n } = navMesh.getTileAndPolyByRefUnsafe(ref);\n // visit linked polys\n for (let i = poly.firstLink(); i !== Detour.DT_NULL_LINK; i = tile.links(i).next()) {\n const neiRef = tile.links(i).ref();\n // skip invalid and already visited\n if (!neiRef || visited.has(neiRef)) continue;\n // mark as visited\n visited.add(neiRef);\n // visit neighbours\n openList.push(neiRef);\n }\n }\n /* disable unvisited polys */\n for (let tileIndex = 0; tileIndex < navMesh.getMaxTiles(); tileIndex++) {\n const tile = navMesh.getTile(tileIndex);\n if (!tile || !tile.header()) continue;\n const tileHeader = tile.header();\n const base = navMesh.getPolyRefBase(tile);\n for (let i = 0; i < tileHeader.polyCount(); i++) {\n const ref = base | i;\n if (!visited.has(ref)) {\n // set flag to 0\n // this could also be a custom 'disabled' area flag if using custom areas\n navMesh.setPolyFlags(ref, 0);\n }\n }\n }\n};\n\nconst getRandomSeed = () => {\n return Raw.Module.FastRand.prototype.getSeed();\n};\nconst setRandomSeed = seed => {\n Raw.Module.FastRand.prototype.setSeed(seed);\n};\n\nconst recastConfigDefaults = {\n borderSize: 0,\n tileSize: 0,\n cs: 0.2,\n ch: 0.2,\n walkableSlopeAngle: 60,\n walkableHeight: 2,\n walkableClimb: 2,\n walkableRadius: 0.5,\n maxEdgeLen: 12,\n maxSimplificationError: 1.3,\n minRegionArea: 8,\n mergeRegionArea: 20,\n maxVertsPerPoly: 6,\n detailSampleDist: 6,\n detailSampleMaxError: 1\n};\nconst createRcConfig = partialConfig => {\n const config = {\n ...recastConfigDefaults,\n ...partialConfig\n };\n const rcConfig = new Raw.Module.rcConfig();\n rcConfig.borderSize = config.borderSize;\n rcConfig.tileSize = config.tileSize;\n rcConfig.cs = config.cs;\n rcConfig.ch = config.ch;\n rcConfig.walkableSlopeAngle = config.walkableSlopeAngle;\n rcConfig.walkableHeight = config.walkableHeight;\n rcConfig.walkableClimb = config.walkableClimb;\n rcConfig.walkableRadius = config.walkableRadius;\n rcConfig.maxEdgeLen = config.maxEdgeLen;\n rcConfig.maxSimplificationError = config.maxSimplificationError;\n rcConfig.minRegionArea = config.minRegionArea;\n rcConfig.mergeRegionArea = config.mergeRegionArea;\n rcConfig.maxVertsPerPoly = config.maxVertsPerPoly;\n rcConfig.detailSampleDist = config.detailSampleDist;\n rcConfig.detailSampleMaxError = config.detailSampleMaxError;\n return rcConfig;\n};\nconst cloneRcConfig = rcConfig => {\n const clone = new Raw.Module.rcConfig();\n clone.set_bmin(0, rcConfig.get_bmin(0));\n clone.set_bmin(1, rcConfig.get_bmin(1));\n clone.set_bmin(2, rcConfig.get_bmin(2));\n clone.set_bmax(0, rcConfig.get_bmax(0));\n clone.set_bmax(1, rcConfig.get_bmax(1));\n clone.set_bmax(2, rcConfig.get_bmax(2));\n clone.width = rcConfig.width;\n clone.height = rcConfig.height;\n clone.borderSize = rcConfig.borderSize;\n clone.tileSize = rcConfig.tileSize;\n clone.cs = rcConfig.cs;\n clone.ch = rcConfig.ch;\n clone.walkableSlopeAngle = rcConfig.walkableSlopeAngle;\n clone.walkableHeight = rcConfig.walkableHeight;\n clone.walkableClimb = rcConfig.walkableClimb;\n clone.walkableRadius = rcConfig.walkableRadius;\n clone.maxEdgeLen = rcConfig.maxEdgeLen;\n clone.maxSimplificationError = rcConfig.maxSimplificationError;\n clone.minRegionArea = rcConfig.minRegionArea;\n clone.mergeRegionArea = rcConfig.mergeRegionArea;\n clone.maxVertsPerPoly = rcConfig.maxVertsPerPoly;\n clone.detailSampleDist = rcConfig.detailSampleDist;\n clone.detailSampleMaxError = rcConfig.detailSampleMaxError;\n return clone;\n};\nclass RecastBuildContext {\n logs = [];\n startTimes = {};\n accumulatedTimes = {};\n constructor(timersAndLogsEnabled = true) {\n const impl = new Raw.Module.RecastBuildContextJsImpl();\n impl.log = (category, msg, len) => {\n if (!this.raw.logEnabled()) return;\n // type is string, but webidl binder passes us a pointer\n const msgPointer = msg;\n const view = new Uint8Array(Raw.Module.HEAPU8.buffer, msgPointer, len);\n const data = new Uint8Array(len);\n data.set(view);\n const msgString = new TextDecoder().decode(data);\n this.log(category, msgString);\n };\n impl.resetLog = () => {\n this.resetLog();\n };\n impl.startTimer = label => {\n if (!this.raw.timerEnabled()) return;\n this.startTimer(label);\n };\n impl.stopTimer = label => {\n if (!this.raw.timerEnabled()) return;\n this.stopTimer(label);\n };\n impl.getAccumulatedTime = label => {\n if (!this.raw.timerEnabled()) return -1;\n return this.getAccumulatedTime(label);\n };\n impl.resetTimers = () => {\n if (!this.raw.timerEnabled()) return;\n this.startTimes = {};\n this.accumulatedTimes = {};\n };\n this.raw = new Raw.Module.RecastBuildContext(impl);\n this.raw.enableTimer(timersAndLogsEnabled);\n this.raw.enableLog(timersAndLogsEnabled);\n this.resetTimers();\n }\n log(category, msg) {\n this.logs.push({\n category,\n msg\n });\n }\n resetLog() {\n this.logs = [];\n }\n startTimer(label) {\n this.startTimes[label] = performance.now();\n }\n stopTimer(label) {\n const endTime = performance.now();\n const deltaTime = endTime - this.startTimes[label];\n if (this.accumulatedTimes[label] === -1) {\n this.accumulatedTimes[label] = deltaTime;\n } else {\n this.accumulatedTimes[label] += deltaTime;\n }\n }\n getAccumulatedTime(label) {\n return this.accumulatedTimes[label];\n }\n resetTimers() {\n for (let i = 0; i < Recast.RC_MAX_TIMERS; i++) {\n this.startTimes[i] = -1;\n this.accumulatedTimes[i] = -1;\n }\n }\n}\nclass RecastChunkyTriMesh {\n constructor(raw) {\n this.raw = raw ?? new Raw.rcChunkyTriMesh();\n }\n init(verts, tris, ntris, trisPerChunk) {\n return Raw.ChunkyTriMeshUtils.createChunkyTriMesh(verts.raw, tris.raw, ntris, trisPerChunk, this.raw);\n }\n getChunksOverlappingRect(boundsMin, boundsMax, chunks, maxChunks) {\n return Raw.ChunkyTriMeshUtils.getChunksOverlappingRect(this.raw, boundsMin, boundsMax, chunks.raw, maxChunks);\n }\n getNodeTris(nodeId) {\n return IntArray.fromRaw(Raw.ChunkyTriMeshUtils.getChunkyTriMeshNodeTris(this.raw, nodeId));\n }\n nodes(index) {\n return this.raw.get_nodes(index);\n }\n maxTrisPerChunk() {\n return this.raw.maxTrisPerChunk;\n }\n}\nclass RecastSpan {\n constructor(raw) {\n this.raw = raw;\n }\n smin() {\n return this.raw.smin;\n }\n smax() {\n return this.raw.smax;\n }\n area() {\n return this.raw.area;\n }\n next() {\n return !Raw.isNull(this.raw.next) ? new RecastSpan(this.raw.next) : null;\n }\n}\nclass RecastSpanPool {\n constructor(raw) {\n this.raw = raw;\n }\n next() {\n return !Raw.isNull(this.raw.next) ? new RecastSpanPool(this.raw.next) : null;\n }\n items(index) {\n return new RecastSpan(this.raw.get_items(index));\n }\n}\nclass RecastHeightfield {\n constructor(raw) {\n this.raw = raw;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n spans(index) {\n return new RecastSpan(this.raw.get_spans(index));\n }\n pools(index) {\n return new RecastSpanPool(this.raw.get_pools(index));\n }\n freelist(index) {\n return new RecastSpan(this.raw.get_freelist(index));\n }\n}\nclass RecastCompactCell {\n constructor(raw) {\n this.raw = raw;\n }\n index() {\n return this.raw.get_index();\n }\n count() {\n return this.raw.get_count();\n }\n}\nclass RecastCompactSpan {\n constructor(raw) {\n this.raw = raw;\n }\n y() {\n return this.raw.get_y();\n }\n reg() {\n return this.raw.get_reg();\n }\n con() {\n return this.raw.get_con();\n }\n h() {\n return this.raw.get_h();\n }\n}\nclass RecastCompactHeightfield {\n constructor(raw) {\n this.raw = raw;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n spanCount() {\n return this.raw.spanCount;\n }\n walkableHeight() {\n return this.raw.walkableHeight;\n }\n walkableClimb() {\n return this.raw.walkableClimb;\n }\n borderSize() {\n return this.raw.borderSize;\n }\n maxDistance() {\n return this.raw.maxDistance;\n }\n maxRegions() {\n return this.raw.maxRegions;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n cells(index) {\n return new RecastCompactCell(this.raw.get_cells(index));\n }\n spans(index) {\n return new RecastCompactSpan(this.raw.get_spans(index));\n }\n dist(index) {\n return this.raw.get_dist(index);\n }\n areas(index) {\n return this.raw.get_areas(index);\n }\n}\nclass RecastContour {\n constructor(raw) {\n this.raw = raw;\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n nverts() {\n return this.raw.nverts;\n }\n rverts(index) {\n return this.raw.get_rverts(index);\n }\n nrverts() {\n return this.raw.nrverts;\n }\n reg() {\n return this.raw.reg;\n }\n area() {\n return this.raw.area;\n }\n}\nclass RecastContourSet {\n constructor(raw) {\n this.raw = raw;\n }\n conts(index) {\n return new RecastContour(this.raw.get_conts(index));\n }\n nconts() {\n return this.raw.nconts;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n borderSize() {\n return this.raw.borderSize;\n }\n maxError() {\n return this.raw.maxError;\n }\n}\nclass RecastHeightfieldLayer {\n constructor(raw) {\n this.raw = raw;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n minx() {\n return this.raw.minx;\n }\n maxx() {\n return this.raw.maxx;\n }\n miny() {\n return this.raw.miny;\n }\n maxy() {\n return this.raw.maxy;\n }\n hmin() {\n return this.raw.hmin;\n }\n hmax() {\n return this.raw.hmax;\n }\n heights(index) {\n return this.raw.get_heights(index);\n }\n areas(index) {\n return this.raw.get_areas(index);\n }\n cons(index) {\n return this.raw.get_cons(index);\n }\n}\nclass RecastHeightfieldLayerSet {\n constructor(raw) {\n this.raw = raw;\n }\n layers(index) {\n return new RecastHeightfieldLayer(this.raw.get_layers(index));\n }\n nlayers() {\n return this.raw.nlayers;\n }\n}\nclass RecastPolyMesh {\n constructor(raw) {\n this.raw = raw;\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n polys(index) {\n return this.raw.get_polys(index);\n }\n regs(index) {\n return this.raw.get_regs(index);\n }\n flags(index) {\n return this.raw.get_flags(index);\n }\n setFlags(index, value) {\n this.raw.set_flags(index, value);\n }\n areas(index) {\n return this.raw.get_areas(index);\n }\n setAreas(index, value) {\n this.raw.set_areas(index, value);\n }\n nverts() {\n return this.raw.nverts;\n }\n npolys() {\n return this.raw.npolys;\n }\n maxpolys() {\n return this.raw.maxpolys;\n }\n nvp() {\n return this.raw.nvp;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n borderSize() {\n return this.raw.borderSize;\n }\n maxEdgeError() {\n return this.raw.maxEdgeError;\n }\n}\nclass RecastPolyMeshDetail {\n constructor(raw) {\n this.raw = raw;\n }\n meshes(index) {\n return this.raw.get_meshes(index);\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n tris(index) {\n return this.raw.get_tris(index);\n }\n nmeshes() {\n return this.raw.nmeshes;\n }\n nverts() {\n return this.raw.nverts;\n }\n ntris() {\n return this.raw.ntris;\n }\n}\nconst calcBounds = (verts, nv) => {\n return Raw.Recast.calcBounds(verts.raw, nv);\n};\nconst calcGridSize = (bmin, bmax, cs) => {\n return Raw.Recast.calcGridSize(bmin, bmax, cs);\n};\nconst createHeightfield = (buildContext, heightfield, width, height, bmin, bmax, cs, ch) => {\n return Raw.Recast.createHeightfield(buildContext.raw, heightfield.raw, width, height, bmin, bmax, cs, ch);\n};\nconst markWalkableTriangles = (buildContext, walkableSlopeAngle, verts, nv, tris, nt, areas) => {\n return Raw.Recast.markWalkableTriangles(buildContext.raw, walkableSlopeAngle, verts.raw, nv, tris.raw, nt, areas.raw);\n};\nconst clearUnwalkableTriangles = (buildContext, walkableSlopeAngle, verts, nv, tris, nt, areas) => {\n return Raw.Recast.clearUnwalkableTriangles(buildContext.raw, walkableSlopeAngle, verts.raw, nv, tris.raw, nt, areas.raw);\n};\nconst rasterizeTriangles = (buildContext, verts, nv, tris, areas, nt, heightfield, flagMergeThreshold = 1) => {\n return Raw.Recast.rasterizeTriangles(buildContext.raw, verts.raw, nv, tris.raw, areas.raw, nt, heightfield.raw, flagMergeThreshold);\n};\nconst filterLowHangingWalkableObstacles = (buildContext, walkableClimb, heightfield) => {\n return Raw.Recast.filterLowHangingWalkableObstacles(buildContext.raw, walkableClimb, heightfield.raw);\n};\nconst filterLedgeSpans = (buildContext, walkableHeight, walkableClimb, heightfield) => {\n return Raw.Recast.filterLedgeSpans(buildContext.raw, walkableHeight, walkableClimb, heightfield.raw);\n};\nconst filterWalkableLowHeightSpans = (buildContext, walkableHeight, heightfield) => {\n return Raw.Recast.filterWalkableLowHeightSpans(buildContext.raw, walkableHeight, heightfield.raw);\n};\nconst getHeightFieldSpanCount = (buildContext, heightfield) => {\n return Raw.Recast.getHeightFieldSpanCount(buildContext.raw, heightfield.raw);\n};\nconst buildCompactHeightfield = (buildContext, walkableHeight, walkableClimb, heightfield, compactHeightfield) => {\n return Raw.Recast.buildCompactHeightfield(buildContext.raw, walkableHeight, walkableClimb, heightfield.raw, compactHeightfield.raw);\n};\nconst erodeWalkableArea = (buildContext, radius, compactHeightfield) => {\n return Raw.Recast.erodeWalkableArea(buildContext.raw, radius, compactHeightfield.raw);\n};\nconst medianFilterWalkableArea = (buildContext, compactHeightfield) => {\n return Raw.Recast.medianFilterWalkableArea(buildContext.raw, compactHeightfield.raw);\n};\nconst markBoxArea = (buildContext, bmin, bmax, areaId, compactHeightfield) => {\n return Raw.Recast.markBoxArea(buildContext.raw, bmin, bmax, areaId, compactHeightfield.raw);\n};\nconst markConvexPolyArea = (buildContext, verts, nverts, hmin, hmax, areaId, compactHeightfield) => {\n return Raw.Recast.markConvexPolyArea(buildContext.raw, verts.raw, nverts, hmin, hmax, areaId, compactHeightfield.raw);\n};\nconst markCylinderArea = (buildContext, pos, radius, height, areaId, compactHeightfield) => {\n return Raw.Recast.markCylinderArea(buildContext.raw, pos, radius, height, areaId, compactHeightfield.raw);\n};\nconst buildDistanceField = (buildContext, compactHeightfield) => {\n return Raw.Recast.buildDistanceField(buildContext.raw, compactHeightfield.raw);\n};\nconst buildRegions = (buildContext, compactHeightfield, borderSize, minRegionArea, mergeRegionArea) => {\n return Raw.Recast.buildRegions(buildContext.raw, compactHeightfield.raw, borderSize, minRegionArea, mergeRegionArea);\n};\nconst buildLayerRegions = (buildContext, compactHeightfield, borderSize, minRegionArea) => {\n return Raw.Recast.buildLayerRegions(buildContext.raw, compactHeightfield.raw, borderSize, minRegionArea);\n};\nconst buildRegionsMonotone = (buildContext, compactHeightfield, borderSize, minRegionArea, mergeRegionArea) => {\n return Raw.Recast.buildRegionsMonotone(buildContext.raw, compactHeightfield.raw, borderSize, minRegionArea, mergeRegionArea);\n};\nconst setCon = (compactSpan, dir, i) => {\n return Raw.Recast.setCon(compactSpan.raw, dir, i);\n};\nconst getCon = (compactSpan, dir) => {\n return Raw.Recast.getCon(compactSpan.raw, dir);\n};\nconst getDirOffsetX = dir => {\n return Raw.Recast.getDirOffsetX(dir);\n};\nconst getDirOffsetY = dir => {\n return Raw.Recast.getDirOffsetY(dir);\n};\nconst getDirForOffset = (x, y) => {\n return Raw.Recast.getDirForOffset(x, y);\n};\nconst buildHeightfieldLayers = (buildContext, compactHeightfield, borderSize, walkableHeight, heightfieldLayerSet) => {\n return Raw.Recast.buildHeightfieldLayers(buildContext.raw, compactHeightfield.raw, borderSize, walkableHeight, heightfieldLayerSet.raw);\n};\nconst buildContours = (buildContext, compactHeightfield, maxError, maxEdgeLen, contourSet, buildFlags = Recast.RC_CONTOUR_TESS_WALL_EDGES) => {\n return Raw.Recast.buildContours(buildContext.raw, compactHeightfield.raw, maxError, maxEdgeLen, contourSet.raw, buildFlags);\n};\nconst buildPolyMesh = (buildContext, contourSet, nvp, polyMesh) => {\n return Raw.Recast.buildPolyMesh(buildContext.raw, contourSet.raw, nvp, polyMesh.raw);\n};\nconst mergePolyMeshes = (buildContext, meshes, outPolyMesh) => {\n return Raw.Recast.mergePolyMeshes(buildContext.raw, meshes.map(m => m.raw), meshes.length, outPolyMesh.raw);\n};\nconst buildPolyMeshDetail = (buildContext, mesh, compactHeightfield, sampleDist, sampleMaxError, polyMeshDetail) => {\n return Raw.Recast.buildPolyMeshDetail(buildContext.raw, mesh.raw, compactHeightfield.raw, sampleDist, sampleMaxError, polyMeshDetail.raw);\n};\nconst copyPolyMesh = (buildContext, src, dest) => {\n return Raw.Recast.copyPolyMesh(buildContext.raw, src.raw, dest.raw);\n};\nconst mergePolyMeshDetails = (buildContext, meshes, out) => {\n return Raw.Recast.mergePolyMeshDetails(buildContext.raw, meshes.map(m => m.raw), meshes.length, out.raw);\n};\nconst getHeightfieldLayerHeights = heightfieldLayer => {\n return UnsignedCharArray.fromRaw(Raw.Recast.getHeightfieldLayerHeights(heightfieldLayer.raw));\n};\nconst getHeightfieldLayerAreas = heightfieldLayer => {\n return UnsignedCharArray.fromRaw(Raw.Recast.getHeightfieldLayerAreas(heightfieldLayer.raw));\n};\nconst getHeightfieldLayerCons = heightfieldLayer => {\n return UnsignedCharArray.fromRaw(Raw.Recast.getHeightfieldLayerCons(heightfieldLayer.raw));\n};\nconst allocHeightfield = () => {\n return new RecastHeightfield(Raw.Recast.allocHeightfield());\n};\nconst freeHeightfield = heightfield => {\n return Raw.Recast.freeHeightfield(heightfield.raw);\n};\nconst allocCompactHeightfield = () => {\n return new RecastCompactHeightfield(Raw.Recast.allocCompactHeightfield());\n};\nconst freeCompactHeightfield = compactHeightfield => {\n return Raw.Recast.freeCompactHeightfield(compactHeightfield.raw);\n};\nconst allocHeightfieldLayerSet = () => {\n return new RecastHeightfieldLayerSet(Raw.Recast.allocHeightfieldLayerSet());\n};\nconst freeHeightfieldLayerSet = heightfieldLayerSet => {\n return Raw.Recast.freeHeightfieldLayerSet(heightfieldLayerSet.raw);\n};\nconst allocContourSet = () => {\n return new RecastContourSet(Raw.Recast.allocContourSet());\n};\nconst freeContourSet = contourSet => {\n return Raw.Recast.freeContourSet(contourSet.raw);\n};\nconst allocPolyMesh = () => {\n return new RecastPolyMesh(Raw.Recast.allocPolyMesh());\n};\nconst freePolyMesh = polyMesh => {\n return Raw.Recast.freePolyMesh(polyMesh.raw);\n};\nconst allocPolyMeshDetail = () => {\n return new RecastPolyMeshDetail(Raw.Recast.allocPolyMeshDetail());\n};\nconst freePolyMeshDetail = polyMeshDetail => {\n return Raw.Recast.freePolyMeshDetail(polyMeshDetail.raw);\n};\n\nconst exportImpl = (navMesh, tileCache) => {\n const navMeshExport = Raw.NavMeshExporter.exportNavMesh(navMesh.raw, tileCache?.raw);\n const arrView = new Uint8Array(Raw.Module.HEAPU8.buffer, navMeshExport.dataPointer, navMeshExport.size);\n const data = new Uint8Array(navMeshExport.size);\n data.set(arrView);\n Raw.NavMeshExporter.freeNavMeshExport(navMeshExport);\n return data;\n};\nconst exportNavMesh = navMesh => {\n return exportImpl(navMesh);\n};\nconst exportTileCache = (navMesh, tileCache) => {\n return exportImpl(navMesh, tileCache);\n};\n\nclass DetourTileCacheParams {\n constructor(raw) {\n this.raw = raw;\n }\n static create(config) {\n const tileCacheParams = new Raw.Module.dtTileCacheParams();\n tileCacheParams.set_orig(0, config.orig[0]);\n tileCacheParams.set_orig(1, config.orig[1]);\n tileCacheParams.set_orig(2, config.orig[2]);\n tileCacheParams.set_cs(config.cs);\n tileCacheParams.set_ch(config.ch);\n tileCacheParams.set_width(config.width);\n tileCacheParams.set_height(config.height);\n tileCacheParams.set_walkableHeight(config.walkableHeight);\n tileCacheParams.set_walkableRadius(config.walkableRadius);\n tileCacheParams.set_walkableClimb(config.walkableClimb);\n tileCacheParams.set_maxSimplificationError(config.maxSimplificationError);\n tileCacheParams.set_maxTiles(config.maxTiles);\n tileCacheParams.set_maxObstacles(config.maxObstacles);\n return new DetourTileCacheParams(tileCacheParams);\n }\n}\nclass TileCache {\n obstacles = new Map();\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.TileCache();\n }\n /**\n * Initialises the TileCache\n * @param params\n */\n init(params, alloc, compressor, meshProcess) {\n return this.raw.init(params.raw, alloc, compressor, meshProcess.raw);\n }\n /**\n * Updates the tile cache by rebuilding tiles touched by unfinished obstacle requests.\n *\n * After adding or removing obstacles you can call `tileCache.update(navMesh)` to rebuild navmesh tiles.\n *\n * Adding or removing an obstacle will internally create an \"obstacle request\".\n * TileCache supports queuing up to 64 obstacle requests.\n *\n * The `tileCache.update` method returns `upToDate`, whether the tile cache is fully up to date with obstacle requests and tile rebuilds.\n * Each update call processes up to 64 tiles touched by added or removed obstacles.\n * If the tile cache isn't up to date another call will continue processing obstacle requests and tile rebuilds; otherwise it will have no effect.\n *\n * If not many obstacle requests occur between updates, an easy pattern is to call `tileCache.update` periodically, such as every game update.\n * If many obstacle requests have been made and you need to avoid reaching the 64 obstacle request limit, you can call `tileCache.update` multiple times, bailing out when `upToDate` is true or after a maximum number of updates.\n *\n * @example\n * ```ts\n * const { success, status, upToDate } = tileCache.update(navMesh);\n * ```\n */\n update(navMesh) {\n const {\n status,\n upToDate\n } = this.raw.update(navMesh.raw);\n return {\n success: statusSucceed(status),\n status,\n upToDate\n };\n }\n /**\n * Creates a cylinder obstacle and adds it to the navigation mesh.\n */\n addCylinderObstacle(position, radius, height) {\n const result = this.raw.addCylinderObstacle(vec3.toRaw(position), radius, height);\n if (result.status !== Detour.DT_SUCCESS) {\n return {\n success: false,\n status: result.status\n };\n }\n const ref = result.ref;\n const obstacle = {\n type: 'cylinder',\n ref,\n position,\n radius,\n height\n };\n this.obstacles.set(ref, obstacle);\n return {\n success: true,\n status: result.status,\n obstacle\n };\n }\n /**\n * Creates a box obstacle and adds it to the navigation mesh.\n */\n addBoxObstacle(position, halfExtents, angle) {\n const rawPosition = vec3.toRaw(position);\n const rawHalfExtents = vec3.toRaw(halfExtents);\n const result = this.raw.addBoxObstacle(rawPosition, rawHalfExtents, angle);\n Raw.destroy(rawPosition);\n Raw.destroy(rawHalfExtents);\n if (result.status !== Detour.DT_SUCCESS) {\n return {\n success: false,\n status: result.status\n };\n }\n const ref = result.ref;\n const obstacle = {\n type: 'box',\n ref,\n position,\n halfExtents,\n angle\n };\n this.obstacles.set(ref, obstacle);\n return {\n success: true,\n status: result.status,\n obstacle\n };\n }\n /**\n * Removes an obstacle from the navigation mesh.\n */\n removeObstacle(obstacle) {\n let ref;\n if (typeof obstacle === 'object') {\n ref = obstacle.ref;\n } else {\n ref = obstacle;\n }\n this.obstacles.delete(ref);\n const status = this.raw.removeObstacle(ref);\n return {\n success: statusSucceed(status),\n status\n };\n }\n addTile(data, flags = Detour.DT_COMPRESSEDTILE_FREE_DATA) {\n return this.raw.addTile(data.raw, flags);\n }\n buildNavMeshTile(ref, navMesh) {\n return this.raw.buildNavMeshTile(ref, navMesh.raw);\n }\n buildNavMeshTilesAt(tx, ty, navMesh) {\n return this.raw.buildNavMeshTilesAt(tx, ty, navMesh.raw);\n }\n destroy() {\n this.raw.destroy();\n }\n}\nclass TileCacheMeshProcess {\n constructor(process) {\n this.raw = new Raw.Module.TileCacheMeshProcess();\n this.raw.process = (paramsPtr, polyAreasArrayPtr, polyFlagsArrayPtr) => {\n const params = new NavMeshCreateParams(Raw.Module.wrapPointer(paramsPtr, Raw.Module.dtNavMeshCreateParams));\n const polyAreasArray = Raw.Module.wrapPointer(polyAreasArrayPtr, Raw.Module.UnsignedCharArray);\n const polyFlagsArray = Raw.Module.wrapPointer(polyFlagsArrayPtr, Raw.Module.UnsignedShortArray);\n process(params, UnsignedCharArray.fromRaw(polyAreasArray), UnsignedShortArray.fromRaw(polyFlagsArray));\n };\n }\n}\nconst buildTileCacheLayer = (comp, header, heights, areas, cons, tileCacheData) => {\n return Raw.DetourTileCacheBuilder.buildTileCacheLayer(comp, header, heights.raw, areas.raw, cons.raw, tileCacheData.raw);\n};\n\nconst createNavMeshExport = data => {\n const nDataBytes = data.length * data.BYTES_PER_ELEMENT;\n const dataPtr = Raw.Module._malloc(nDataBytes);\n const dataHeap = new Uint8Array(Raw.Module.HEAPU8.buffer, dataPtr, nDataBytes);\n dataHeap.set(data);\n const navMeshExport = new Raw.Module.NavMeshExport();\n navMeshExport.dataPointer = dataHeap.byteOffset;\n navMeshExport.size = data.length;\n return {\n navMeshExport,\n dataHeap\n };\n};\nconst importNavMesh = data => {\n const {\n navMeshExport,\n dataHeap\n } = createNavMeshExport(data);\n const result = Raw.NavMeshImporter.importNavMesh(navMeshExport, undefined);\n Raw.Module._free(dataHeap.byteOffset);\n const navMesh = new NavMesh(result.navMesh);\n return {\n navMesh\n };\n};\nconst importTileCache = (data, tileCacheMeshProcess) => {\n const {\n navMeshExport,\n dataHeap\n } = createNavMeshExport(data);\n const result = Raw.NavMeshImporter.importNavMesh(navMeshExport, tileCacheMeshProcess.raw);\n Raw.Module._free(dataHeap.byteOffset);\n const navMesh = new NavMesh(result.navMesh);\n const tileCache = new TileCache(result.tileCache);\n const allocator = result.allocator;\n const compressor = result.compressor;\n return {\n navMesh,\n tileCache,\n allocator,\n compressor\n };\n};\n\nexport { ChunkIdsArray, Crowd, CrowdAgent, DebugDrawerUtils, Detour, DetourBVNode, DetourLink, DetourMeshHeader, DetourMeshTile, DetourOffMeshConnection, DetourPoly, DetourPolyDetail, DetourTileCacheParams, FloatArray, IntArray, NavMesh, NavMeshCalcTileLocResult, NavMeshCreateParams, NavMeshGetTilesAtResult, NavMeshParams, NavMeshQuery, NavMeshRemoveTileResult, NavMeshStoreTileStateResult, QueryFilter, Raw, Recast, RecastBuildContext, RecastChunkyTriMesh, RecastCompactCell, RecastCompactHeightfield, RecastCompactSpan, RecastContour, RecastContourSet, RecastHeightfield, RecastHeightfieldLayer, RecastHeightfieldLayerSet, RecastPolyMesh, RecastPolyMeshDetail, RecastSpan, RecastSpanPool, TileCache, TileCacheData, TileCacheMeshProcess, TriangleAreasArray, TrianglesArray, UnsignedCharArray, UnsignedIntArray, UnsignedShortArray, VerticesArray, allocCompactHeightfield, allocContourSet, allocHeightfield, allocHeightfieldLayerSet, allocPolyMesh, allocPolyMeshDetail, array, buildCompactHeightfield, buildContours, buildDistanceField, buildHeightfieldLayers, buildLayerRegions, buildPolyMesh, buildPolyMeshDetail, buildRegions, buildRegionsMonotone, buildTileCacheLayer, calcBounds, calcGridSize, clearUnwalkableTriangles, cloneRcConfig, copyPolyMesh, createHeightfield, createNavMeshData, createRcConfig, crowdAgentParamsDefaults, erodeWalkableArea, exportNavMesh, exportTileCache, filterLedgeSpans, filterLowHangingWalkableObstacles, filterWalkableLowHeightSpans, floodFillPruneNavMesh, freeCompactHeightfield, freeContourSet, freeHeightfield, freeHeightfieldLayerSet, freePolyMesh, freePolyMeshDetail, getCon, getDirForOffset, getDirOffsetX, getDirOffsetY, getHeightFieldSpanCount, getHeightfieldLayerAreas, getHeightfieldLayerCons, getHeightfieldLayerHeights, getNavMeshPositionsAndIndices, getRandomSeed, importNavMesh, importTileCache, init, markBoxArea, markConvexPolyArea, markCylinderArea, markWalkableTriangles, medianFilterWalkableArea, mergePolyMeshDetails, mergePolyMeshes, rasterizeTriangles, recastConfigDefaults, rgbToDuRgba, setCon, setRandomSeed, statusDetail, statusFailed, statusInProgress, statusSucceed, statusToReadableString, vec3 };\n"],"names":["vec3","array"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index-Dr5LK2tg.js","sources":["../../../node_modules/.pnpm/@recast-navigation+core@0.43.0/node_modules/@recast-navigation/core/dist/index.mjs"],"sourcesContent":["const instances = ['Recast', 'Detour', 'DetourNavMeshBuilder', 'DetourTileCacheBuilder', 'NavMeshImporter', 'NavMeshExporter', 'CrowdUtils', 'ChunkyTriMeshUtils', 'RecastDebugDraw', 'DetourDebugDraw'];\nconst classes = ['rcConfig', 'rcContext', 'dtNavMeshParams', 'dtNavMeshCreateParams', 'RecastLinearAllocator', 'RecastFastLZCompressor', 'rcChunkyTriMesh', 'dtTileCacheParams', 'dtTileCacheLayerHeader', 'Vec3', 'BoolRef', 'IntRef', 'UnsignedIntRef', 'UnsignedCharRef', 'UnsignedShortRef', 'FloatRef', 'IntArray', 'UnsignedIntArray', 'UnsignedCharArray', 'UnsignedShortArray', 'FloatArray'];\n/**\n * Lower level bindings for the Recast and Detour libraries.\n *\n * The `init` function must be called before using the `Raw` api.\n */\nconst Raw = {\n isNull: obj => {\n return Raw.Module.getPointer(obj) === 0;\n },\n destroy: obj => {\n Raw.Module.destroy(obj);\n }\n};\nconst Recast = {};\nconst Detour = {};\nconst init = async impl => {\n if (Raw.Module !== undefined) {\n return;\n }\n if (impl) {\n Raw.Module = await impl();\n } else {\n const defaultExport = (await import('@recast-navigation/wasm')).default;\n Raw.Module = await defaultExport();\n }\n for (const instance of instances) {\n Raw[instance] = new Raw.Module[instance]();\n }\n for (const clazz of classes) {\n Raw[clazz] = Raw.Module[clazz];\n }\n // recast constants\n Recast.RC_BORDER_REG = Raw.Recast.BORDER_REG;\n Recast.RC_MULTIPLE_REGS = Raw.Recast.MULTIPLE_REGS;\n Recast.RC_BORDER_VERTEX = Raw.Recast.BORDER_VERTEX;\n Recast.RC_AREA_BORDER = Raw.Recast.AREA_BORDER;\n Recast.RC_CONTOUR_REG_MASK = Raw.Recast.CONTOUR_REG_MASK;\n Recast.RC_MESH_NULL_IDX = Raw.Recast.MESH_NULL_IDX;\n Recast.RC_NULL_AREA = Raw.Recast.NULL_AREA;\n Recast.RC_WALKABLE_AREA = Raw.Recast.WALKABLE_AREA;\n Recast.RC_NOT_CONNECTED = Raw.Recast.NOT_CONNECTED;\n // recast enums\n Recast.RC_CONTOUR_TESS_WALL_EDGES = Raw.Module.RC_CONTOUR_TESS_WALL_EDGES;\n Recast.RC_CONTOUR_TESS_AREA_EDGES = Raw.Module.RC_CONTOUR_TESS_AREA_EDGES;\n Recast.RC_LOG_PROGRESS = Raw.Module.RC_LOG_PROGRESS;\n Recast.RC_LOG_WARNING = Raw.Module.RC_LOG_WARNING;\n Recast.RC_LOG_ERROR = Raw.Module.RC_LOG_ERROR;\n Recast.RC_TIMER_TOTAL = Raw.Module.RC_TIMER_TOTAL;\n Recast.RC_TIMER_TEMP = Raw.Module.RC_TIMER_TEMP;\n Recast.RC_TIMER_RASTERIZE_TRIANGLES = Raw.Module.RC_TIMER_RASTERIZE_TRIANGLES;\n Recast.RC_TIMER_BUILD_COMPACTHEIGHTFIELD = Raw.Module.RC_TIMER_BUILD_COMPACTHEIGHTFIELD;\n Recast.RC_TIMER_BUILD_CONTOURS = Raw.Module.RC_TIMER_BUILD_CONTOURS;\n Recast.RC_TIMER_BUILD_CONTOURS_TRACE = Raw.Module.RC_TIMER_BUILD_CONTOURS_TRACE;\n Recast.RC_TIMER_BUILD_CONTOURS_SIMPLIFY = Raw.Module.RC_TIMER_BUILD_CONTOURS_SIMPLIFY;\n Recast.RC_TIMER_FILTER_BORDER = Raw.Module.RC_TIMER_FILTER_BORDER;\n Recast.RC_TIMER_FILTER_WALKABLE = Raw.Module.RC_TIMER_FILTER_WALKABLE;\n Recast.RC_TIMER_MEDIAN_AREA = Raw.Module.RC_TIMER_MEDIAN_AREA;\n Recast.RC_TIMER_FILTER_LOW_OBSTACLES = Raw.Module.RC_TIMER_FILTER_LOW_OBSTACLES;\n Recast.RC_TIMER_BUILD_POLYMESH = Raw.Module.RC_TIMER_BUILD_POLYMESH;\n Recast.RC_TIMER_MERGE_POLYMESH = Raw.Module.RC_TIMER_MERGE_POLYMESH;\n Recast.RC_TIMER_ERODE_AREA = Raw.Module.RC_TIMER_ERODE_AREA;\n Recast.RC_TIMER_MARK_BOX_AREA = Raw.Module.RC_TIMER_MARK_BOX_AREA;\n Recast.RC_TIMER_MARK_CYLINDER_AREA = Raw.Module.RC_TIMER_MARK_CYLINDER_AREA;\n Recast.RC_TIMER_MARK_CONVEXPOLY_AREA = Raw.Module.RC_TIMER_MARK_CONVEXPOLY_AREA;\n Recast.RC_TIMER_BUILD_DISTANCEFIELD = Raw.Module.RC_TIMER_BUILD_DISTANCEFIELD;\n Recast.RC_TIMER_BUILD_DISTANCEFIELD_DIST = Raw.Module.RC_TIMER_BUILD_DISTANCEFIELD_DIST;\n Recast.RC_TIMER_BUILD_DISTANCEFIELD_BLUR = Raw.Module.RC_TIMER_BUILD_DISTANCEFIELD_BLUR;\n Recast.RC_TIMER_BUILD_REGIONS = Raw.Module.RC_TIMER_BUILD_REGIONS;\n Recast.RC_TIMER_BUILD_REGIONS_WATERSHED = Raw.Module.RC_TIMER_BUILD_REGIONS_WATERSHED;\n Recast.RC_TIMER_BUILD_REGIONS_EXPAND = Raw.Module.RC_TIMER_BUILD_REGIONS_EXPAND;\n Recast.RC_TIMER_BUILD_REGIONS_FLOOD = Raw.Module.RC_TIMER_BUILD_REGIONS_FLOOD;\n Recast.RC_TIMER_BUILD_REGIONS_FILTER = Raw.Module.RC_TIMER_BUILD_REGIONS_FILTER;\n Recast.RC_TIMER_BUILD_LAYERS = Raw.Module.RC_TIMER_BUILD_LAYERS;\n Recast.RC_TIMER_BUILD_POLYMESHDETAIL = Raw.Module.RC_TIMER_BUILD_POLYMESHDETAIL;\n Recast.RC_TIMER_MERGE_POLYMESHDETAIL = Raw.Module.RC_TIMER_MERGE_POLYMESHDETAIL;\n Recast.RC_MAX_TIMERS = Raw.Module.RC_MAX_TIMERS;\n // detour constants\n Detour.DT_FAILURE = Raw.Detour.FAILURE;\n Detour.DT_SUCCESS = Raw.Detour.SUCCESS;\n Detour.DT_IN_PROGRESS = Raw.Detour.IN_PROGRESS;\n Detour.DT_STATUS_DETAIL_MASK = Raw.Detour.STATUS_DETAIL_MASK;\n Detour.DT_WRONG_MAGIC = Raw.Detour.WRONG_MAGIC;\n Detour.DT_WRONG_VERSION = Raw.Detour.WRONG_VERSION;\n Detour.DT_OUT_OF_MEMORY = Raw.Detour.OUT_OF_MEMORY;\n Detour.DT_INVALID_PARAM = Raw.Detour.INVALID_PARAM;\n Detour.DT_BUFFER_TOO_SMALL = Raw.Detour.BUFFER_TOO_SMALL;\n Detour.DT_OUT_OF_NODES = Raw.Detour.OUT_OF_NODES;\n Detour.DT_PARTIAL_RESULT = Raw.Detour.PARTIAL_RESULT;\n Detour.DT_ALREADY_OCCUPIED = Raw.Detour.ALREADY_OCCUPIED;\n Detour.DT_VERTS_PER_POLYGON = Raw.Detour.VERTS_PER_POLYGON;\n Detour.DT_NAVMESH_MAGIC = Raw.Detour.NAVMESH_MAGIC;\n Detour.DT_NAVMESH_VERSION = Raw.Detour.NAVMESH_VERSION;\n Detour.DT_NAVMESH_STATE_MAGIC = Raw.Detour.NAVMESH_STATE_MAGIC;\n Detour.DT_NAVMESH_STATE_VERSION = Raw.Detour.NAVMESH_STATE_VERSION;\n Detour.DT_TILECACHE_MAGIC = Raw.Detour.TILECACHE_MAGIC;\n Detour.DT_TILECACHE_VERSION = Raw.Detour.TILECACHE_VERSION;\n Detour.DT_TILECACHE_NULL_AREA = Raw.Detour.TILECACHE_NULL_AREA;\n Detour.DT_TILECACHE_WALKABLE_AREA = Raw.Detour.TILECACHE_WALKABLE_AREA;\n Detour.DT_TILECACHE_NULL_IDX = Raw.Detour.TILECACHE_NULL_IDX;\n Detour.DT_NULL_LINK = Raw.Detour.NULL_LINK;\n Detour.DT_NULL_LINK = Raw.Detour.NULL_LINK;\n Detour.DT_EXT_LINK = Raw.Detour.EXT_LINK;\n Detour.DT_OFFMESH_CON_BIDIR = Raw.Detour.OFFMESH_CON_BIDIR;\n // detour enums\n Detour.DT_STRAIGHTPATH_START = Raw.Module.DT_STRAIGHTPATH_START;\n Detour.DT_STRAIGHTPATH_END = Raw.Module.DT_STRAIGHTPATH_END;\n Detour.DT_STRAIGHTPATH_OFFMESH_CONNECTION = Raw.Module.DT_STRAIGHTPATH_OFFMESH_CONNECTION;\n Detour.DT_STRAIGHTPATH_AREA_CROSSINGS = Raw.Module.DT_STRAIGHTPATH_AREA_CROSSINGS;\n Detour.DT_STRAIGHTPATH_ALL_CROSSINGS = Raw.Module.DT_STRAIGHTPATH_ALL_CROSSINGS;\n Detour.DT_FINDPATH_ANY_ANGLE = Raw.Module.DT_FINDPATH_ANY_ANGLE;\n Detour.DT_RAYCAST_USE_COSTS = Raw.Module.DT_RAYCAST_USE_COSTS;\n Detour.DT_CROWDAGENT_STATE_INVALID = Raw.Module.DT_CROWDAGENT_STATE_INVALID;\n Detour.DT_CROWDAGENT_STATE_WALKING = Raw.Module.DT_CROWDAGENT_STATE_WALKING;\n Detour.DT_CROWDAGENT_STATE_OFFMESH = Raw.Module.DT_CROWDAGENT_STATE_OFFMESH;\n Detour.DT_CROWDAGENT_TARGET_NONE = Raw.Module.DT_CROWDAGENT_TARGET_NONE;\n Detour.DT_CROWDAGENT_TARGET_FAILED = Raw.Module.DT_CROWDAGENT_TARGET_FAILED;\n Detour.DT_CROWDAGENT_TARGET_VALID = Raw.Module.DT_CROWDAGENT_TARGET_VALID;\n Detour.DT_CROWDAGENT_TARGET_REQUESTING = Raw.Module.DT_CROWDAGENT_TARGET_REQUESTING;\n Detour.DT_CROWDAGENT_TARGET_WAITING_FOR_QUEUE = Raw.Module.DT_CROWDAGENT_TARGET_WAITING_FOR_QUEUE;\n Detour.DT_CROWDAGENT_TARGET_WAITING_FOR_PATH = Raw.Module.DT_CROWDAGENT_TARGET_WAITING_FOR_PATH;\n Detour.DT_CROWDAGENT_TARGET_VELOCITY = Raw.Module.DT_CROWDAGENT_TARGET_VELOCITY;\n Detour.DT_COMPRESSEDTILE_FREE_DATA = Raw.Module.DT_COMPRESSEDTILE_FREE_DATA;\n Detour.DT_TILE_FREE_DATA = Raw.Module.DT_TILE_FREE_DATA;\n};\n\nclass BaseArray {\n get size() {\n return this.raw.size;\n }\n constructor(raw) {\n this.raw = raw;\n }\n get(i) {\n return this.raw.get(i);\n }\n set(i, value) {\n this.raw.set(i, value);\n }\n resize(size) {\n this.raw.resize(size);\n }\n copy(data) {\n this.raw.resize(data.length);\n const view = this.getHeapView();\n view.set(data);\n }\n destroy() {\n Raw.destroy(this.raw);\n }\n getHeapView() {\n const heap = this.getHeap();\n const dataHeap = new this.typedArrayClass(heap.buffer, this.raw.getDataPointer(), this.size);\n return dataHeap;\n }\n toTypedArray() {\n const view = this.getHeapView();\n const data = new this.typedArrayClass(this.size);\n data.set(view);\n return data;\n }\n}\nclass IntArray extends BaseArray {\n typedArrayClass = Int32Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.IntArray());\n }\n getHeap() {\n return Raw.Module.HEAP32;\n }\n static fromRaw(raw) {\n return new IntArray(raw);\n }\n}\nclass UnsignedIntArray extends BaseArray {\n typedArrayClass = Uint32Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.UnsignedIntArray());\n }\n getHeap() {\n return Raw.Module.HEAPU32;\n }\n static fromRaw(raw) {\n return new UnsignedIntArray(raw);\n }\n}\nclass UnsignedCharArray extends BaseArray {\n typedArrayClass = Uint8Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.UnsignedCharArray());\n }\n getHeap() {\n return Raw.Module.HEAPU8;\n }\n static fromRaw(raw) {\n return new UnsignedCharArray(raw);\n }\n}\nclass UnsignedShortArray extends BaseArray {\n typedArrayClass = Uint16Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.UnsignedShortArray());\n }\n getHeap() {\n return Raw.Module.HEAPU16;\n }\n static fromRaw(raw) {\n return new UnsignedShortArray(raw);\n }\n}\nclass FloatArray extends BaseArray {\n typedArrayClass = Float32Array;\n constructor(raw) {\n super(raw ?? new Raw.Module.FloatArray());\n }\n getHeap() {\n return Raw.Module.HEAPF32;\n }\n static fromRaw(raw) {\n return new FloatArray(raw);\n }\n}\nconst VerticesArray = FloatArray;\nconst TrianglesArray = IntArray;\nconst TriangleAreasArray = UnsignedCharArray;\nconst ChunkIdsArray = IntArray;\nconst TileCacheData = UnsignedCharArray;\n\nconst vec3 = {\n toRaw: ({\n x,\n y,\n z\n }, existing) => {\n if (existing) {\n existing.x = x;\n existing.y = y;\n existing.z = z;\n return existing;\n }\n return new Raw.Module.Vec3(x, y, z);\n },\n fromRaw: vec3 => {\n const {\n x,\n y,\n z\n } = vec3;\n return {\n x,\n y,\n z\n };\n },\n fromArray: ([x, y, z]) => {\n return {\n x,\n y,\n z\n };\n },\n toArray: ({\n x,\n y,\n z\n }) => {\n return [x, y, z];\n },\n lerp: (a, b, t, out = {\n x: 0,\n y: 0,\n z: 0\n }) => {\n out.x = a.x + (b.x - a.x) * t;\n out.y = a.y + (b.y - a.y) * t;\n out.z = a.z + (b.z - a.z) * t;\n },\n copy: (source, out = {\n x: 0,\n y: 0,\n z: 0\n }) => {\n out.x = source.x;\n out.y = source.y;\n out.z = source.z;\n }\n};\nconst array = (getter, count) => {\n const array = [];\n for (let i = 0; i < count; i++) {\n array.push(getter(i));\n }\n return array;\n};\n\nconst statusSucceed = status => {\n return Raw.Detour.statusSucceed(status);\n};\nconst statusFailed = status => {\n return Raw.Detour.statusFailed(status);\n};\nconst statusInProgress = status => {\n return Raw.Detour.statusInProgress(status);\n};\nconst statusDetail = (status, detail) => {\n return Raw.Detour.statusDetail(status, detail);\n};\nconst statusToReadableString = status => {\n if (Raw.Detour.statusSucceed(status)) {\n return 'success';\n }\n if (Raw.Detour.statusInProgress(status)) {\n return 'in progress';\n }\n if (Raw.Detour.statusFailed(status)) {\n let reason;\n const DT_STATUS_REASONS = {\n DT_WRONG_MAGIC: Detour.DT_WRONG_MAGIC,\n DT_WRONG_VERSION: Detour.DT_WRONG_VERSION,\n DT_OUT_OF_MEMORY: Detour.DT_OUT_OF_MEMORY,\n DT_INVALID_PARAM: Detour.DT_INVALID_PARAM,\n DT_BUFFER_TOO_SMALL: Detour.DT_BUFFER_TOO_SMALL,\n DT_OUT_OF_NODES: Detour.DT_OUT_OF_NODES,\n DT_PARTIAL_RESULT: Detour.DT_PARTIAL_RESULT,\n DT_ALREADY_OCCUPIED: Detour.DT_ALREADY_OCCUPIED\n };\n for (const [reasonName, reasonMask] of Object.entries(DT_STATUS_REASONS)) {\n if (Raw.Detour.statusDetail(status, reasonMask)) {\n reason = reasonName;\n break;\n }\n }\n if (reason) {\n return `failed - ${reason}`;\n }\n return `failed - unknown`;\n }\n return 'unknown';\n};\nclass DetourPolyDetail {\n constructor(raw) {\n this.raw = raw;\n }\n vertBase() {\n return this.raw.vertBase;\n }\n triBase() {\n return this.raw.triBase;\n }\n vertCount() {\n return this.raw.vertCount;\n }\n triCount() {\n return this.raw.triCount;\n }\n}\nclass DetourLink {\n constructor(raw) {\n this.raw = raw;\n }\n ref() {\n return this.raw.ref;\n }\n next() {\n return this.raw.next;\n }\n edge() {\n return this.raw.edge;\n }\n side() {\n return this.raw.side;\n }\n bmin() {\n return this.raw.bmin;\n }\n bmax() {\n return this.raw.bmax;\n }\n}\nclass DetourBVNode {\n constructor(raw) {\n this.raw = raw;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n i() {\n return this.raw.i;\n }\n}\nclass DetourOffMeshConnection {\n constructor(raw) {\n this.raw = raw;\n }\n pos(index) {\n return this.raw.get_pos(index);\n }\n rad() {\n return this.raw.rad;\n }\n poly() {\n return this.raw.poly;\n }\n flags() {\n return this.raw.flags;\n }\n side() {\n return this.raw.side;\n }\n userId() {\n return this.raw.userId;\n }\n}\nclass DetourMeshHeader {\n constructor(raw) {\n this.raw = raw;\n }\n magic() {\n return this.raw.magic;\n }\n version() {\n return this.raw.version;\n }\n x() {\n return this.raw.x;\n }\n y() {\n return this.raw.y;\n }\n layer() {\n return this.raw.layer;\n }\n userId() {\n return this.raw.userId;\n }\n polyCount() {\n return this.raw.polyCount;\n }\n vertCount() {\n return this.raw.vertCount;\n }\n maxLinkCount() {\n return this.raw.maxLinkCount;\n }\n detailMeshCount() {\n return this.raw.detailMeshCount;\n }\n detailVertCount() {\n return this.raw.detailVertCount;\n }\n detailTriCount() {\n return this.raw.detailTriCount;\n }\n bvNodeCount() {\n return this.raw.bvNodeCount;\n }\n offMeshConCount() {\n return this.raw.offMeshConCount;\n }\n offMeshBase() {\n return this.raw.offMeshBase;\n }\n walkableHeight() {\n return this.raw.walkableHeight;\n }\n walkableRadius() {\n return this.raw.walkableRadius;\n }\n walkableClimb() {\n return this.raw.walkableClimb;\n }\n bmin(index) {\n return this.raw.get_bmin(index);\n }\n bmax(index) {\n return this.raw.get_bmax(index);\n }\n bvQuantFactor() {\n return this.raw.bvQuantFactor;\n }\n}\nclass DetourPoly {\n constructor(raw) {\n this.raw = raw;\n }\n firstLink() {\n return this.raw.firstLink;\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n neis(index) {\n return this.raw.get_neis(index);\n }\n flags() {\n return this.raw.flags;\n }\n vertCount() {\n return this.raw.vertCount;\n }\n areaAndType() {\n return this.raw.get_areaAndtype();\n }\n getType() {\n return this.raw.getType();\n }\n}\nclass DetourMeshTile {\n constructor(raw) {\n this.raw = raw;\n }\n salt() {\n return this.raw.salt;\n }\n linksFreeList() {\n return this.raw.linksFreeList;\n }\n header() {\n return !Raw.isNull(this.raw.header) ? new DetourMeshHeader(this.raw.header) : null;\n }\n polys(index) {\n return new DetourPoly(this.raw.get_polys(index));\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n links(index) {\n return new DetourLink(this.raw.get_links(index));\n }\n detailMeshes(index) {\n return new DetourPolyDetail(this.raw.get_detailMeshes(index));\n }\n detailVerts(index) {\n return this.raw.get_detailVerts(index);\n }\n detailTris(index) {\n return this.raw.get_detailTris(index);\n }\n bvTree(index) {\n return new DetourBVNode(this.raw.get_bvTree(index));\n }\n offMeshCons(index) {\n return new DetourOffMeshConnection(this.raw.get_offMeshCons(index));\n }\n data(index) {\n return this.raw.get_data(index);\n }\n dataSize() {\n return this.raw.dataSize;\n }\n flags() {\n return this.raw.flags;\n }\n next() {\n return new DetourMeshTile(this.raw.next);\n }\n}\nconst createNavMeshData = navMeshCreateParams => {\n const result = Raw.DetourNavMeshBuilder.createNavMeshData(navMeshCreateParams.raw);\n return {\n success: result.success,\n navMeshData: UnsignedCharArray.fromRaw(result.navMeshData)\n };\n};\nclass NavMeshCreateParams {\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.dtNavMeshCreateParams();\n }\n setPolyMeshCreateParams(polyMesh) {\n Raw.DetourNavMeshBuilder.setPolyMeshCreateParams(this.raw, polyMesh.raw);\n }\n setPolyMeshDetailCreateParams(polyMeshDetail) {\n Raw.DetourNavMeshBuilder.setPolyMeshDetailCreateParams(this.raw, polyMeshDetail.raw);\n }\n setOffMeshConnections(offMeshConnections) {\n if (offMeshConnections.length <= 0) return;\n const verts = [];\n const rads = [];\n const dir = [];\n const areas = [];\n const flags = [];\n const userIds = [];\n for (let i = 0; i < offMeshConnections.length; i++) {\n const connection = offMeshConnections[i];\n verts.push(connection.startPosition.x, connection.startPosition.y, connection.startPosition.z);\n verts.push(connection.endPosition.x, connection.endPosition.y, connection.endPosition.z);\n rads.push(connection.radius);\n dir.push(connection.bidirectional ? 1 : 0);\n areas.push(connection.area ?? 0);\n flags.push(connection.flags ?? 1);\n userIds.push(connection.userId ?? 1000 + i);\n }\n Raw.DetourNavMeshBuilder.setOffMeshConnections(this.raw, offMeshConnections.length, verts, rads, dir, areas, flags, userIds);\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n setVerts(index, value) {\n this.raw.set_verts(index, value);\n }\n vertCount() {\n return this.raw.vertCount;\n }\n polys(index) {\n return this.raw.get_polys(index);\n }\n setPolys(index, value) {\n this.raw.set_polys(index, value);\n }\n polyAreas(index) {\n return this.raw.get_polyAreas(index);\n }\n setPolyAreas(index, value) {\n this.raw.set_polyAreas(index, value);\n }\n polyFlags(index) {\n return this.raw.get_polyFlags(index);\n }\n setPolyFlags(index, value) {\n this.raw.set_polyFlags(index, value);\n }\n polyCount() {\n return this.raw.polyCount;\n }\n nvp() {\n return this.raw.nvp;\n }\n setNvp(value) {\n this.raw.nvp = value;\n }\n detailMeshes(index) {\n return this.raw.get_detailMeshes(index);\n }\n setDetailMeshes(index, value) {\n this.raw.set_detailMeshes(index, value);\n }\n detailVerts(index) {\n return this.raw.get_detailVerts(index);\n }\n setDetailVerts(index, value) {\n this.raw.set_detailVerts(index, value);\n }\n detailVertsCount() {\n return this.raw.detailVertsCount;\n }\n detailTris(index) {\n return this.raw.get_detailTris(index);\n }\n setDetailTris(index, value) {\n this.raw.set_detailTris(index, value);\n }\n detailTriCount() {\n return this.raw.detailTriCount;\n }\n offMeshConVerts(index) {\n return this.raw.get_offMeshConVerts(index);\n }\n offMeshConRad(index) {\n return this.raw.get_offMeshConRad(index);\n }\n offMeshConDir(index) {\n return this.raw.get_offMeshConDir(index);\n }\n offMeshConAreas(index) {\n return this.raw.get_offMeshConAreas(index);\n }\n offMeshConFlags(index) {\n return this.raw.get_offMeshConFlags(index);\n }\n offMeshConUserID(index) {\n return this.raw.get_offMeshConUserID(index);\n }\n offMeshConCount() {\n return this.raw.offMeshConCount;\n }\n userId() {\n return this.raw.userId;\n }\n tileX() {\n return this.raw.tileX;\n }\n setTileX(value) {\n this.raw.tileX = value;\n }\n tileY() {\n return this.raw.tileY;\n }\n setTileY(value) {\n this.raw.tileY = value;\n }\n tileLayer() {\n return this.raw.tileLayer;\n }\n setTileLayer(value) {\n this.raw.tileLayer = value;\n }\n boundsMin() {\n return array(i => this.raw.get_bmin(i), 3);\n }\n setBoundsMin(value) {\n this.raw.set_bmin(0, value[0]);\n this.raw.set_bmin(1, value[1]);\n this.raw.set_bmin(2, value[2]);\n }\n boundsMax() {\n return array(i => this.raw.get_bmax(i), 3);\n }\n setBoundsMax(value) {\n this.raw.set_bmax(0, value[0]);\n this.raw.set_bmax(1, value[1]);\n this.raw.set_bmax(2, value[2]);\n }\n walkableHeight() {\n return this.raw.walkableHeight;\n }\n setWalkableHeight(value) {\n this.raw.walkableHeight = value;\n }\n walkableRadius() {\n return this.raw.walkableRadius;\n }\n setWalkableRadius(value) {\n this.raw.walkableRadius = value;\n }\n walkableClimb() {\n return this.raw.walkableClimb;\n }\n setWalkableClimb(value) {\n this.raw.walkableClimb = value;\n }\n cellSize() {\n return this.raw.cs;\n }\n setCellSize(value) {\n this.raw.cs = value;\n }\n cellHeight() {\n return this.raw.ch;\n }\n setCellHeight(value) {\n this.raw.ch = value;\n }\n buildBvTree() {\n return this.raw.buildBvTree;\n }\n setBuildBvTree(value) {\n this.raw.buildBvTree = value;\n }\n}\n\nclass QueryFilter {\n get includeFlags() {\n return this.raw.getIncludeFlags();\n }\n set includeFlags(flags) {\n this.raw.setIncludeFlags(flags);\n }\n get excludeFlags() {\n return this.raw.getExcludeFlags();\n }\n set excludeFlags(flags) {\n this.raw.setExcludeFlags(flags);\n }\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.dtQueryFilter();\n }\n getAreaCost(i) {\n return this.raw.getAreaCost(i);\n }\n setAreaCost(i, cost) {\n this.raw.setAreaCost(i, cost);\n }\n}\nclass NavMeshQuery {\n /**\n * Default query filter.\n */\n\n /**\n * Default search distance along each axis.\n */\n defaultQueryHalfExtents = {\n x: 1,\n y: 1,\n z: 1\n };\n constructor(value, params) {\n if (value instanceof Raw.Module.NavMeshQuery) {\n this.raw = value;\n } else {\n this.raw = new Raw.Module.NavMeshQuery();\n this.raw.init(value.raw, params?.maxNodes ?? 2048);\n }\n if (params?.defaultQueryFilter) {\n this.defaultFilter = params.defaultQueryFilter;\n } else {\n this.defaultFilter = new QueryFilter();\n this.defaultFilter.includeFlags = 0xffff;\n this.defaultFilter.excludeFlags = 0;\n }\n }\n /**\n * Finds the polygon nearest to the given position.\n */\n findNearestPoly(position, options) {\n const nearestRefRaw = new Raw.UnsignedIntRef();\n const nearestPointRaw = new Raw.Vec3();\n const isOverPolyRaw = new Raw.BoolRef();\n const status = this.raw.findNearestPoly(vec3.toArray(position), vec3.toArray(options?.halfExtents ?? this.defaultQueryHalfExtents), options?.filter?.raw ?? this.defaultFilter.raw, nearestRefRaw, nearestPointRaw, isOverPolyRaw);\n const nearestPoint = vec3.fromRaw(nearestPointRaw);\n Raw.destroy(nearestPointRaw);\n const nearestRef = nearestRefRaw.value;\n Raw.destroy(nearestRefRaw);\n const isOverPoly = isOverPolyRaw.value;\n Raw.destroy(isOverPolyRaw);\n return {\n success: statusSucceed(status),\n status,\n nearestRef,\n nearestPoint,\n isOverPoly\n };\n }\n /**\n * Finds the polygons along the navigation graph that touch the specified circle.\n * @param startRef Reference of polygon to start search from\n * @param centerPos Center of circle\n * @param radius Radius of circle\n * @param options\n */\n findPolysAroundCircle(startRef, centerPos, radius, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const maxPolys = options?.maxPolys ?? 256;\n const resultRefArray = new UnsignedIntArray();\n const resultParentArray = new UnsignedIntArray();\n const resultCostArray = new FloatArray();\n resultRefArray.resize(maxPolys);\n resultParentArray.resize(maxPolys);\n resultCostArray.resize(maxPolys);\n const resultCountRef = new Raw.IntRef();\n const status = this.raw.findPolysAroundCircle(startRef, vec3.toArray(centerPos), radius, filter.raw, resultRefArray.raw, resultParentArray.raw, resultCostArray.raw, resultCountRef, maxPolys);\n const resultRefs = [...resultRefArray.getHeapView()];\n resultRefArray.destroy();\n const resultParents = [...resultParentArray.getHeapView()];\n resultParentArray.destroy();\n const resultCost = [...resultCostArray.getHeapView()];\n resultCostArray.destroy();\n const resultCount = resultCountRef.value;\n Raw.destroy(resultCountRef);\n // todo: freeing resultCostRef and resultCountRef intermittently throws\n // memory related errors.\n // const resultCost = resultCostRef.value;\n // const resultCount = resultCountRef.value;\n return {\n success: statusSucceed(status),\n status,\n resultRefs,\n resultParents,\n resultCost,\n resultCount\n };\n }\n /**\n * Finds polygons that overlap the search box.\n * @param center The center of the search box\n * @param halfExtents The search distance along each axis\n * @param options\n */\n queryPolygons(center, halfExtents, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const maxPolys = options?.maxPolys ?? 256;\n const polysRefsArray = new UnsignedIntArray();\n polysRefsArray.resize(maxPolys);\n const polyCountRef = new Raw.IntRef();\n const status = this.raw.queryPolygons(vec3.toArray(center), vec3.toArray(halfExtents), filter.raw, polysRefsArray.raw, polyCountRef, maxPolys);\n const polyCount = polyCountRef.value;\n Raw.destroy(polyCountRef);\n const polyRefs = [...polysRefsArray.getHeapView()].slice(0, polyCount);\n polysRefsArray.destroy();\n return {\n success: statusSucceed(status),\n status,\n polyRefs\n };\n }\n /**\n * Returns the closest point on the given polygon to the given position.\n *\n * @param polyRef The reference of the polygon\n * @param position The position to find the closest point to\n */\n closestPointOnPoly(polyRef, position) {\n const closestPointRaw = new Raw.Vec3();\n const positionOverPolyRaw = new Raw.BoolRef();\n const status = this.raw.closestPointOnPoly(polyRef, vec3.toArray(position), closestPointRaw, positionOverPolyRaw);\n const closestPoint = vec3.fromRaw(closestPointRaw);\n Raw.destroy(closestPointRaw);\n const isPointOverPoly = positionOverPolyRaw.value;\n Raw.destroy(positionOverPolyRaw);\n return {\n success: statusSucceed(status),\n status,\n closestPoint,\n isPointOverPoly\n };\n }\n /**\n * Finds the closest point on the NavMesh to the given position.\n * @param position the position to find the closest point to\n * @param options additional options\n * @returns the result of the find closest point operation\n */\n findClosestPoint(position, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const halfExtents = options?.halfExtents ?? this.defaultQueryHalfExtents;\n const resultPolyRef = new Raw.UnsignedIntRef();\n const resultPoint = new Raw.Vec3();\n const resultPointOverPoly = new Raw.BoolRef();\n const status = this.raw.findClosestPoint(vec3.toArray(position), vec3.toArray(halfExtents), filter.raw, resultPolyRef, resultPoint, resultPointOverPoly);\n const polyRef = resultPolyRef.value;\n Raw.destroy(resultPolyRef);\n const point = vec3.fromRaw(resultPoint);\n Raw.destroy(resultPoint);\n const isPointOverPoly = resultPointOverPoly.value;\n Raw.destroy(resultPointOverPoly);\n return {\n success: statusSucceed(status),\n status,\n polyRef,\n point,\n isPointOverPoly\n };\n }\n /**\n * Returns a random point on the NavMesh within the given radius of the given position.\n *\n * @param position the center of the search circle\n * @param radius the radius of the search circle\n * @param options additional options\n */\n findRandomPointAroundCircle(position, radius, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const halfExtents = options?.halfExtents ?? this.defaultQueryHalfExtents;\n let startRef;\n if (options?.startRef) {\n startRef = options.startRef;\n } else {\n const nearestPoly = this.findNearestPoly(position, {\n filter,\n halfExtents\n });\n if (!nearestPoly.success) {\n return {\n success: false,\n status: nearestPoly.status,\n randomPolyRef: 0,\n randomPoint: {\n x: 0,\n y: 0,\n z: 0\n }\n };\n }\n startRef = nearestPoly.nearestRef;\n }\n const randomPolyRefRaw = new Raw.UnsignedIntRef();\n const randomPointRaw = new Raw.Vec3();\n const status = this.raw.findRandomPointAroundCircle(startRef, vec3.toArray(position), radius, filter.raw, randomPolyRefRaw, randomPointRaw);\n const randomPolyRef = randomPolyRefRaw.value;\n Raw.destroy(randomPolyRefRaw);\n const randomPoint = vec3.fromRaw(randomPointRaw);\n Raw.destroy(randomPointRaw);\n return {\n success: statusSucceed(status),\n status,\n randomPolyRef,\n randomPoint\n };\n }\n /**\n * Moves from the start to the end position constrained to the navigation mesh.\n *\n * @param startRef the reference id of the start polygon.\n * @param startPosition a position of the mover within the start polygon.\n * @param endPosition the desired end position of the mover.\n *\n * @returns The result of the move along surface operation.\n */\n moveAlongSurface(startRef, startPosition, endPosition, options) {\n const maxVisitedSize = options?.maxVisitedSize ?? 256;\n const resultPositionRaw = new Raw.Vec3();\n const visitedArray = new UnsignedIntArray();\n const filter = options?.filter?.raw ?? this.defaultFilter.raw;\n const status = this.raw.moveAlongSurface(startRef, vec3.toArray(startPosition), vec3.toArray(endPosition), filter, resultPositionRaw, visitedArray.raw, maxVisitedSize);\n const resultPosition = vec3.fromRaw(resultPositionRaw);\n Raw.destroy(resultPositionRaw);\n const visited = [...visitedArray.getHeapView()];\n visitedArray.destroy();\n return {\n success: statusSucceed(status),\n status,\n resultPosition,\n visited\n };\n }\n /**\n * Returns a random point on the navmesh.\n * @param options additional options\n * @returns a random point on the navmesh\n */\n findRandomPoint(options) {\n const randomPolyRefRaw = new Raw.UnsignedIntRef();\n const randomPointRaw = new Raw.Vec3();\n const status = this.raw.findRandomPoint(options?.filter?.raw ?? this.defaultFilter.raw, randomPolyRefRaw, randomPointRaw);\n const randomPolyRef = randomPolyRefRaw.value;\n Raw.destroy(randomPolyRefRaw);\n const randomPoint = vec3.fromRaw(randomPointRaw);\n Raw.destroy(randomPointRaw);\n return {\n success: statusSucceed(status),\n status,\n randomPolyRef,\n randomPoint\n };\n }\n /**\n * Gets the height of the polygon at the provided position using the height detail.\n *\n * @param polyRef the reference id of the polygon.\n * @param position a position within the xz-bounds of the polygon.\n */\n getPolyHeight(polyRef, position) {\n const floatRef = new Raw.FloatRef();\n const status = this.raw.getPolyHeight(polyRef, vec3.toArray(position), floatRef);\n const height = floatRef.value;\n Raw.destroy(floatRef);\n return {\n success: statusSucceed(status),\n status,\n height\n };\n }\n /**\n * Finds a straight path from the start position to the end position.\n *\n * @param start the start position\n * @param end the end position\n * @param options additional options\n *\n * @returns an array of Vector3 positions that make up the path, or an empty array if no path was found.\n */\n computePath(start, end, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const halfExtents = options?.halfExtents ?? this.defaultQueryHalfExtents;\n // find nearest polygons for start and end positions\n const startNearestPolyResult = this.findNearestPoly(start, {\n filter,\n halfExtents\n });\n if (!startNearestPolyResult.success) {\n return {\n success: false,\n error: {\n name: 'findNearestPoly for start position failed',\n status: startNearestPolyResult.status\n },\n path: []\n };\n }\n const endNearestPolyResult = this.findNearestPoly(end, {\n filter,\n halfExtents\n });\n if (!endNearestPolyResult.success) {\n return {\n success: false,\n error: {\n name: 'findNearestPoly for end position failed',\n status: endNearestPolyResult.status\n },\n path: []\n };\n }\n const startRef = startNearestPolyResult.nearestRef;\n const endRef = endNearestPolyResult.nearestRef;\n // find polygon path\n const maxPathPolys = options?.maxPathPolys ?? 256;\n const findPathResult = this.findPath(startRef, endRef, start, end, {\n filter,\n maxPathPolys\n });\n if (!findPathResult.success) {\n return {\n success: false,\n error: {\n name: 'findPath unsuccessful',\n status: findPathResult.status\n },\n path: []\n };\n }\n if (findPathResult.polys.size <= 0) {\n return {\n success: false,\n error: {\n name: 'no polygon path found'\n },\n path: []\n };\n }\n const lastPoly = findPathResult.polys.get(findPathResult.polys.size - 1);\n let closestEnd = {\n x: end.x,\n y: end.y,\n z: end.z\n };\n if (lastPoly !== endRef) {\n const lastPolyClosestPointResult = this.closestPointOnPoly(lastPoly, end);\n if (!lastPolyClosestPointResult.success) {\n return {\n success: false,\n error: {\n name: 'no closest point on last polygon found',\n status: lastPolyClosestPointResult.status\n },\n path: []\n };\n }\n closestEnd = lastPolyClosestPointResult.closestPoint;\n }\n // find straight path\n const maxStraightPathPoints = options?.maxStraightPathPoints;\n const findStraightPathResult = this.findStraightPath(start, closestEnd, findPathResult.polys, {\n maxStraightPathPoints\n });\n if (!findStraightPathResult.success) {\n return {\n success: false,\n error: {\n name: 'findStraightPath unsuccessful',\n status: findStraightPathResult.status\n },\n path: []\n };\n }\n const {\n straightPath,\n straightPathCount\n } = findStraightPathResult;\n // format output\n const points = [];\n for (let i = 0; i < straightPathCount; i++) {\n points.push({\n x: straightPath.get(i * 3),\n y: straightPath.get(i * 3 + 1),\n z: straightPath.get(i * 3 + 2)\n });\n }\n findPathResult.polys.destroy();\n findStraightPathResult.straightPath.destroy();\n findStraightPathResult.straightPathFlags.destroy();\n findStraightPathResult.straightPathRefs.destroy();\n return {\n success: true,\n path: points\n };\n }\n /**\n * Finds a path from the start polygon to the end polygon.\n * @param startRef the reference id of the start polygon.\n * @param endRef the reference id of the end polygon.\n * @param startPosition position within the start polygon.\n * @param endPosition position within the end polygon.\n * @param options additional options\n * @returns\n *\n * The `polys` array returned must be freed after use.\n *\n * ```ts\n * findPathResult.polys.destroy();\n * ```\n */\n findPath(startRef, endRef, startPosition, endPosition, options) {\n const filter = options?.filter ?? this.defaultFilter;\n const maxPathPolys = options?.maxPathPolys ?? 256;\n const polysArray = new UnsignedIntArray();\n polysArray.resize(maxPathPolys);\n const status = this.raw.findPath(startRef, endRef, vec3.toArray(startPosition), vec3.toArray(endPosition), filter.raw, polysArray.raw, maxPathPolys);\n return {\n success: statusSucceed(status),\n status,\n polys: polysArray\n };\n }\n /**\n * Finds the straight path from the start to the end position within the polygon corridor.\n *\n * This method peforms what is often called 'string pulling'.\n *\n * The start position is clamped to the first polygon in the path, and the\n * end position is clamped to the last. So the start and end positions should\n * normally be within or very near the first and last polygons respectively.\n *\n * The returned polygon references represent the reference id of the polygon\n * that is entered at the associated path position. The reference id associated\n * with the end point will always be zero. This allows, for example, matching\n * off-mesh link points to their representative polygons.\n *\n * If the provided result arrays are too small for the entire result set,\n * they will be filled as far as possible from the start toward the end\n * position.\n *\n * @param start path start position\n * @param end path end position\n * @param path an array of polygon references that represent the path corridor\n * @param options additional options\n * @returns the straight path result\n *\n * The straightPath, straightPathFlags, and straightPathRefs arrays returned must be freed after use.\n *\n * ```ts\n * findStraightPathResult.straightPath.destroy();\n * findStraightPathResult.straightPathFlags.destroy();\n * findStraightPathResult.straightPathRefs.destroy();\n * ```\n */\n findStraightPath(start, end, path, options) {\n const maxStraightPathPoints = options?.maxStraightPathPoints ?? 256;\n const straightPathOptions = options?.straightPathOptions ?? 0;\n let pathPolys;\n if (Array.isArray(path)) {\n pathPolys = new UnsignedIntArray();\n pathPolys.copy(path);\n } else {\n pathPolys = path;\n }\n const straightPath = new FloatArray();\n straightPath.resize(maxStraightPathPoints * 3);\n const straightPathFlags = new UnsignedCharArray();\n straightPathFlags.resize(maxStraightPathPoints);\n const straightPathRefs = new UnsignedIntArray();\n straightPathRefs.resize(maxStraightPathPoints);\n const straightPathCountRaw = new Raw.IntRef();\n const status = this.raw.findStraightPath(vec3.toArray(start), vec3.toArray(end), pathPolys.raw, straightPath.raw, straightPathFlags.raw, straightPathRefs.raw, straightPathCountRaw, maxStraightPathPoints, straightPathOptions);\n const straightPathCount = straightPathCountRaw.value;\n Raw.destroy(straightPathCountRaw);\n if (Array.isArray(path)) {\n pathPolys.destroy();\n }\n return {\n success: statusSucceed(status),\n status,\n straightPath,\n straightPathFlags,\n straightPathRefs,\n straightPathCount\n };\n }\n /**\n * Casts a 'walkability' ray along the surface of the navigation mesh from the start position toward the end position.\n *\n * This method is meant to be used for quick, short distance checks.\n *\n * If the path array is too small to hold the result, it will be filled as far as possible from the start postion toward the end position.\n *\n * The raycast ignores the y-value of the end position. (2D check.) This places significant limits on how it can be used.\n *\n * <b>Using the Hit Parameter (t)</b>\n *\n * If the hit parameter is a very high value, then the ray has hit\n * the end position. In this case the path represents a valid corridor to the\n * end position and the value of hitNormal is undefined.\n *\n * If the hit parameter is zero, then the start position is on the wall that\n * was hit and the value of hitNormal is undefined.\n *\n * If 0 < t < 1.0 then the following applies:\n *\n * ```\n * distanceToHitBorder = distanceToEndPosition * t\n * hitPoint = startPos + (endPos - startPos) * t\n * ```\n *\n * <b>Use Case Restriction</b>\n *\n * Consider a scene where there is a main floor with a second floor balcony that hangs over the main floor.\n * So the first floor mesh extends below the balcony mesh.\n * The start position is somewhere on the first floor.\n * The end position is on the balcony.\n *\n * The raycast will search toward the end position along the first floor mesh.\n * If it reaches the end position's xz-coordinates it will indicate FLT_MAX,(no wall hit), meaning it reached the end position.\n * This is one example of why this method is meant for short distance checks.\n *\n * @param startRef the reference id of the start polygon.\n * @param startPosition a position within the start polygon representing the start of the ray\n * @param endPosition the position to cast the ray toward.\n * @param options additional options\n */\n raycast(startRef, startPosition, endPosition, options) {\n const raycastHit = new Raw.Module.dtRaycastHit();\n const raycastOptions = options?.raycastOptions ?? 0;\n const prevRef = options?.prevRef ?? 0;\n const queryFilter = options?.filter?.raw ?? this.defaultFilter.raw;\n const status = this.raw.raycast(startRef, vec3.toArray(startPosition), vec3.toArray(endPosition), queryFilter, raycastOptions, raycastHit, prevRef);\n const result = {\n success: statusSucceed(status),\n status,\n t: raycastHit.t,\n hitNormal: vec3.fromArray(array(i => raycastHit.get_hitNormal(i), 3)),\n hitEdgeIndex: raycastHit.hitEdgeIndex,\n path: array(i => raycastHit.get_path(i), raycastHit.pathCount),\n maxPath: raycastHit.maxPath,\n pathCost: raycastHit.pathCost\n };\n Raw.destroy(raycastHit);\n return result;\n }\n /**\n * Destroys the NavMeshQuery instance\n */\n destroy() {\n this.raw.destroy();\n }\n}\n\nconst crowdAgentParamsDefaults = {\n radius: 0.5,\n height: 1,\n maxAcceleration: 20,\n maxSpeed: 6,\n collisionQueryRange: 2.5,\n pathOptimizationRange: 0,\n separationWeight: 0,\n updateFlags: 7,\n obstacleAvoidanceType: 0,\n queryFilterType: 0,\n userData: 0\n};\nclass CrowdAgent {\n get radius() {\n return this.raw.params.radius;\n }\n set radius(value) {\n this.raw.params.radius = value;\n }\n get height() {\n return this.raw.params.height;\n }\n set height(value) {\n this.raw.params.height = value;\n }\n get maxAcceleration() {\n return this.raw.params.maxAcceleration;\n }\n set maxAcceleration(value) {\n this.raw.params.maxAcceleration = value;\n }\n get maxSpeed() {\n return this.raw.params.maxSpeed;\n }\n set maxSpeed(value) {\n this.raw.params.maxSpeed = value;\n }\n get collisionQueryRange() {\n return this.raw.params.collisionQueryRange;\n }\n set collisionQueryRange(value) {\n this.raw.params.collisionQueryRange = value;\n }\n get pathOptimizationRange() {\n return this.raw.params.pathOptimizationRange;\n }\n set pathOptimizationRange(value) {\n this.raw.params.pathOptimizationRange = value;\n }\n get separationWeight() {\n return this.raw.params.separationWeight;\n }\n set separationWeight(value) {\n this.raw.params.separationWeight = value;\n }\n get updateFlags() {\n return this.raw.params.updateFlags;\n }\n set updateFlags(value) {\n this.raw.params.updateFlags = value;\n }\n get obstacleAvoidanceType() {\n return this.raw.params.obstacleAvoidanceType;\n }\n set obstacleAvoidanceType(value) {\n this.raw.params.obstacleAvoidanceType = value;\n }\n get queryFilterType() {\n return this.raw.params.queryFilterType;\n }\n set queryFilterType(value) {\n this.raw.params.queryFilterType = value;\n }\n get userData() {\n return this.raw.params.userData;\n }\n set userData(value) {\n this.raw.params.userData = value;\n }\n /**\n * The interpolated position of the agent.\n *\n * Use this if stepping the crowd with interpolation.\n * This will not be updated if stepping the crowd without interpolation.\n */\n interpolatedPosition = {\n x: 0,\n y: 0,\n z: 0\n };\n constructor(crowd, agentIndex) {\n this.crowd = crowd;\n this.agentIndex = agentIndex;\n this.raw = crowd.raw.getEditableAgent(agentIndex);\n this.interpolatedPosition = this.position();\n }\n /**\n * Updates the agent's target.\n * @param position The new target position.\n * @returns True if the request was successful.\n */\n requestMoveTarget(position) {\n const {\n nearestPoint,\n nearestRef\n } = this.crowd.navMeshQuery.findNearestPoly(position, {\n halfExtents: this.crowd.navMeshQuery.defaultQueryHalfExtents,\n filter: this.crowd.navMeshQuery.defaultFilter\n });\n return this.crowd.raw.requestMoveTarget(this.agentIndex, nearestRef, vec3.toArray(nearestPoint));\n }\n /**\n * Submits a new move request for the specified agent.\n * @param velocity The desired velocity of the agent.\n * @returns True if the request was successful.\n */\n requestMoveVelocity(velocity) {\n return this.crowd.raw.requestMoveVelocity(this.agentIndex, vec3.toArray(velocity));\n }\n /**\n * Resets the current move request for the specified agent.\n */\n resetMoveTarget() {\n this.crowd.raw.resetMoveTarget(this.agentIndex);\n }\n /**\n * Teleports the agent to the specified position.\n * @param position\n */\n teleport(position) {\n Raw.CrowdUtils.agentTeleport(this.crowd.raw, this.agentIndex, vec3.toArray(position), vec3.toArray(this.crowd.navMeshQuery.defaultQueryHalfExtents), this.crowd.navMeshQuery.defaultFilter.raw);\n vec3.copy(position, this.interpolatedPosition);\n }\n /**\n * The position of the agent.\n * @returns\n */\n position() {\n return {\n x: this.raw.get_npos(0),\n y: this.raw.get_npos(1),\n z: this.raw.get_npos(2)\n };\n }\n /**\n * The actual velocity of the agent. The change from velocityDesiredObstacleAdjusted -> velocity is constrained by max acceleration.\n */\n velocity() {\n return {\n x: this.raw.get_vel(0),\n y: this.raw.get_vel(1),\n z: this.raw.get_vel(2)\n };\n }\n /**\n * The desired velocity of the agent. Based on the current path, calculated from scratch each frame.\n */\n desiredVelocity() {\n return {\n x: this.raw.get_dvel(0),\n y: this.raw.get_dvel(1),\n z: this.raw.get_dvel(2)\n };\n }\n /**\n * The desired velocity adjusted by obstacle avoidance, calculated from scratch each frame.\n */\n desiredVelocityObstacleAdjusted() {\n return {\n x: this.raw.get_nvel(0),\n y: this.raw.get_nvel(1),\n z: this.raw.get_nvel(2)\n };\n }\n /**\n * Returns the state of the agent.\n *\n * 0 = DT_CROWDAGENT_STATE_INVALID\n * 1 = DT_CROWDAGENT_STATE_WALKING\n * 2 = DT_CROWDAGENT_STATE_OFFMESH\n */\n state() {\n return this.raw.state;\n }\n /**\n * Returns the next target position on the path to the target\n * @returns\n */\n target() {\n return {\n x: this.raw.get_targetPos(0),\n y: this.raw.get_targetPos(1),\n z: this.raw.get_targetPos(2)\n };\n }\n /**\n * Returns the next target position on the path to the target\n * @returns\n */\n nextTargetInPath() {\n return {\n x: this.raw.get_cornerVerts(0),\n y: this.raw.get_cornerVerts(1),\n z: this.raw.get_cornerVerts(2)\n };\n }\n /**\n * Returns the local path corridor corners for the agent\n * @returns\n */\n corners() {\n const points = [];\n for (let i = 0; i < this.raw.ncorners; i++) {\n points.push({\n x: this.raw.get_cornerVerts(i * 3),\n y: this.raw.get_cornerVerts(i * 3 + 1),\n z: this.raw.get_cornerVerts(i * 3 + 2)\n });\n }\n return points;\n }\n /**\n * Returns the agents parameters.\n * @returns\n */\n parameters() {\n const {\n params\n } = this.raw;\n return {\n radius: params.radius,\n height: params.height,\n maxAcceleration: params.maxAcceleration,\n maxSpeed: params.maxSpeed,\n collisionQueryRange: params.collisionQueryRange,\n pathOptimizationRange: params.pathOptimizationRange,\n separationWeight: params.separationWeight,\n updateFlags: params.updateFlags,\n obstacleAvoidanceType: params.obstacleAvoidanceType,\n queryFilterType: params.queryFilterType,\n userData: params.userData\n };\n }\n /**\n * Updates the agent's parameters.\n * Any parameters not specified in the crowdAgentParams object will be unchanged.\n * @param crowdAgentParams agent parameters to update.\n */\n updateParameters(crowdAgentParams) {\n const params = {\n ...this.parameters(),\n ...crowdAgentParams\n };\n this.setParameters(params);\n }\n /**\n * Sets the agent's parameters.\n * Any parameters not specified in the crowdAgentParams object will be set to their default values.\n * @param crowdAgentParams agent parameters\n */\n setParameters(crowdAgentParams) {\n const params = {\n ...crowdAgentParamsDefaults,\n ...crowdAgentParams\n };\n const dtCrowdAgentParams = new Raw.Module.dtCrowdAgentParams();\n dtCrowdAgentParams.radius = params.radius;\n dtCrowdAgentParams.height = params.height;\n dtCrowdAgentParams.maxAcceleration = params.maxAcceleration;\n dtCrowdAgentParams.maxSpeed = params.maxSpeed;\n dtCrowdAgentParams.collisionQueryRange = params.collisionQueryRange;\n dtCrowdAgentParams.pathOptimizationRange = params.pathOptimizationRange;\n dtCrowdAgentParams.separationWeight = params.separationWeight;\n dtCrowdAgentParams.updateFlags = params.updateFlags;\n dtCrowdAgentParams.obstacleAvoidanceType = params.obstacleAvoidanceType;\n dtCrowdAgentParams.queryFilterType = params.queryFilterType;\n dtCrowdAgentParams.userData = params.userData;\n this.crowd.raw.updateAgentParameters(this.agentIndex, dtCrowdAgentParams);\n }\n /**\n * Returns whether the agent is over an off-mesh connection.\n * @returns\n */\n overOffMeshConnection() {\n return Raw.CrowdUtils.overOffMeshConnection(this.crowd.raw, this.agentIndex);\n }\n}\nclass Crowd {\n /**\n * The agents in the crowd.\n */\n agents = {};\n /**\n * The NavMesh the crowd is interacting with.\n */\n\n /**\n * The NavMeshQuery used to find nearest polys for commands\n */\n\n /**\n * Accumulator for fixed updates with interpolation\n */\n accumulator = 0;\n /**\n *\n * @param navMesh the navmesh the crowd will use for planning\n * @param param1 the crowd parameters\n *\n * @example\n * ```ts\n * const crowd = new Crowd(navMesh, {\n * maxAgents: 100,\n * maxAgentRadius: 1,\n * });\n * ```\n */\n constructor(navMesh, {\n maxAgents,\n maxAgentRadius\n }) {\n this.navMesh = navMesh;\n this.raw = Raw.Detour.allocCrowd();\n this.raw.init(maxAgents, maxAgentRadius, navMesh.raw.getNavMesh());\n this.navMeshQuery = new NavMeshQuery(new Raw.Module.NavMeshQuery(this.raw.getNavMeshQuery()));\n }\n /**\n * Steps the crowd forward in time with a fixed time step.\n *\n * There are two modes. The simple mode is fixed timestepping without interpolation. In this case you only use the first argument. The second case uses interpolation. In that you also provide the time since the function was last used, as well as the maximum fixed timesteps to take.\n *\n * @param dt The fixed time step size to use.\n * @param timeSinceLastCalled The time elapsed since the function was last called.\n * @param maxSubSteps Maximum number of fixed steps to take per function call.\n *\n * @example fixed time stepping\n * ```ts\n * const deltaTime = 1 / 60;\n * crowd.update(deltaTime);\n * ```\n *\n * @example variable time stepping\n * ```ts\n * crowd.update(timeSinceLastUpdate);\n * ```\n *\n * @example fixed time stepping with interpolation\n * ```ts\n * const deltaTime = 1 / 60;\n * const maxSubSteps = 10;\n * crowd.update(deltaTime, timeSinceLastUpdate, maxSubSteps);\n *\n * console.log(agent.interpolatedPosition);\n * ```\n */\n update(dt, timeSinceLastCalled, maxSubSteps = 10) {\n if (timeSinceLastCalled === undefined) {\n // fixed step\n this.raw.update(dt, undefined);\n } else {\n this.accumulator += timeSinceLastCalled;\n // Do fixed steps to catch up\n let substeps = 0;\n while (this.accumulator >= dt && substeps < maxSubSteps) {\n this.raw.update(dt, undefined);\n this.accumulator -= dt;\n substeps++;\n }\n // Interpolate the agent positions\n const t = this.accumulator % dt / dt;\n const agents = this.getAgents();\n for (const agent of agents) {\n vec3.lerp(agent.interpolatedPosition, agent.position(), t, agent.interpolatedPosition);\n }\n }\n }\n /**\n * Adds a new agent to the crowd.\n */\n addAgent(position, crowdAgentParams) {\n const params = {\n ...crowdAgentParamsDefaults,\n ...crowdAgentParams\n };\n const dtCrowdAgentParams = new Raw.Module.dtCrowdAgentParams();\n dtCrowdAgentParams.radius = params.radius;\n dtCrowdAgentParams.height = params.height;\n dtCrowdAgentParams.maxAcceleration = params.maxAcceleration;\n dtCrowdAgentParams.maxSpeed = params.maxSpeed;\n dtCrowdAgentParams.collisionQueryRange = params.collisionQueryRange;\n dtCrowdAgentParams.pathOptimizationRange = params.pathOptimizationRange;\n dtCrowdAgentParams.separationWeight = params.separationWeight;\n dtCrowdAgentParams.updateFlags = params.updateFlags;\n dtCrowdAgentParams.obstacleAvoidanceType = params.obstacleAvoidanceType;\n dtCrowdAgentParams.queryFilterType = params.queryFilterType;\n dtCrowdAgentParams.userData = params.userData;\n const agentIndex = this.raw.addAgent(vec3.toArray(position), dtCrowdAgentParams);\n const agent = new CrowdAgent(this, agentIndex);\n this.agents[agentIndex] = agent;\n return agent;\n }\n /**\n * Gets the agent for the specified index, or null if no agent has the given index.\n * @param agentIndex\n * @returns\n */\n getAgent(agentIndex) {\n const agent = this.agents[agentIndex];\n if (!agent) {\n return null;\n }\n return agent;\n }\n /**\n * Removes the agent from the crowd.\n */\n removeAgent(agent) {\n const agentIndex = typeof agent === 'number' ? agent : agent.agentIndex;\n this.raw.removeAgent(agentIndex);\n delete this.agents[agentIndex];\n }\n /**\n * Returns the maximum number of agents that can be managed by the crowd.\n */\n getAgentCount() {\n return this.raw.getAgentCount();\n }\n /**\n * Returns the number of active agents in the crowd.\n */\n getActiveAgentCount() {\n return Raw.CrowdUtils.getActiveAgentCount(this.raw);\n }\n /**\n * Returns all the agents managed by the crowd.\n */\n getAgents() {\n return Object.values(this.agents);\n }\n /**\n * Gets the query filter for the specified index.\n * @param filterIndex the index of the query filter to retrieve, (min 0, max 15)\n * @returns the query filter\n */\n getFilter(filterIndex) {\n return new QueryFilter(this.raw.getEditableFilter(filterIndex));\n }\n /**\n * Destroys the crowd.\n */\n destroy() {\n Raw.Detour.freeCrowd(this.raw);\n }\n}\n\n/**\n * Represents a helper class to visualize navigation cur and related data in PlayCanvas.\n */\nclass DebugDrawerUtils {\n currentPrimitiveType = 0;\n currentVertices = [];\n primitives = [];\n constructor() {\n this.debugDrawImpl = new Raw.Module.DebugDrawImpl();\n // Bind the debug draw implementation handlers\n this.debugDrawImpl.handleBegin = (primitive, _size) => {\n this.currentPrimitiveType = primitive;\n this.currentVertices = [];\n };\n this.debugDrawImpl.handleDepthMask = _state => {\n // unused for now...\n };\n this.debugDrawImpl.handleTexture = _state => {\n // unused for now...\n };\n this.debugDrawImpl.handleVertexWithColor = (x, y, z, color) => {\n this.vertex(x, y, z, color);\n };\n this.debugDrawImpl.handleVertexWithColorAndUV = (x, y, z, color, _u, _v) => {\n this.vertex(x, y, z, color);\n };\n const primitiveMap = {\n [Raw.Module.DU_DRAW_LINES]: 'lines',\n [Raw.Module.DU_DRAW_TRIS]: 'tris',\n [Raw.Module.DU_DRAW_QUADS]: 'quads',\n [Raw.Module.DU_DRAW_POINTS]: 'points'\n };\n this.debugDrawImpl.handleEnd = () => {\n const type = primitiveMap[this.currentPrimitiveType];\n this.primitives.push({\n type,\n vertices: this.currentVertices\n });\n };\n }\n flush() {\n const cur = this.primitives;\n this.primitives = [];\n return cur;\n }\n drawHeightfieldSolid(hf) {\n Raw.RecastDebugDraw.debugDrawHeightfieldSolid(this.debugDrawImpl, hf.raw);\n return this.flush();\n }\n drawHeightfieldWalkable(hf) {\n Raw.RecastDebugDraw.debugDrawHeightfieldWalkable(this.debugDrawImpl, hf.raw);\n return this.flush();\n }\n drawCompactHeightfieldSolid(chf) {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldSolid(this.debugDrawImpl, chf.raw);\n return this.flush();\n }\n drawCompactHeightfieldRegions(chf) {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldRegions(this.debugDrawImpl, chf.raw);\n return this.flush();\n }\n drawCompactHeightfieldDistance(chf) {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldDistance(this.debugDrawImpl, chf.raw);\n return this.flush();\n }\n drawHeightfieldLayer(layer, idx) {\n Raw.RecastDebugDraw.debugDrawHeightfieldLayer(this.debugDrawImpl, layer.raw, idx);\n return this.flush();\n }\n drawHeightfieldLayers(lset) {\n Raw.RecastDebugDraw.debugDrawHeightfieldLayers(this.debugDrawImpl, lset.raw);\n return this.flush();\n }\n drawRegionConnections(cset, alpha = 1) {\n Raw.RecastDebugDraw.debugDrawRegionConnections(this.debugDrawImpl, cset.raw, alpha);\n return this.flush();\n }\n drawRawContours(cset, alpha = 1) {\n Raw.RecastDebugDraw.debugDrawRawContours(this.debugDrawImpl, cset.raw, alpha);\n return this.flush();\n }\n drawContours(cset, alpha = 1) {\n Raw.RecastDebugDraw.debugDrawContours(this.debugDrawImpl, cset.raw, alpha);\n return this.flush();\n }\n drawPolyMesh(mesh) {\n Raw.RecastDebugDraw.debugDrawPolyMesh(this.debugDrawImpl, mesh.raw);\n return this.flush();\n }\n drawPolyMeshDetail(dmesh) {\n Raw.RecastDebugDraw.debugDrawPolyMeshDetail(this.debugDrawImpl, dmesh.raw);\n return this.flush();\n }\n drawNavMesh(mesh, flags = 0) {\n Raw.DetourDebugDraw.debugDrawNavMesh(this.debugDrawImpl, mesh.raw.getNavMesh(), flags);\n return this.flush();\n }\n drawNavMeshWithClosedList(mesh, query, flags = 0) {\n Raw.DetourDebugDraw.debugDrawNavMeshWithClosedList(this.debugDrawImpl, mesh.raw.m_navMesh, query.raw.m_navQuery, flags);\n return this.flush();\n }\n drawNavMeshNodes(query) {\n Raw.DetourDebugDraw.debugDrawNavMeshNodes(this.debugDrawImpl, query.raw.m_navQuery);\n return this.flush();\n }\n drawNavMeshBVTree(mesh) {\n Raw.DetourDebugDraw.debugDrawNavMeshBVTree(this.debugDrawImpl, mesh.raw.m_navMesh);\n return this.flush();\n }\n drawNavMeshPortals(mesh) {\n Raw.DetourDebugDraw.debugDrawNavMeshPortals(this.debugDrawImpl, mesh.raw.m_navMesh);\n return this.flush();\n }\n drawNavMeshPolysWithFlags(mesh, flags, col) {\n Raw.DetourDebugDraw.debugDrawNavMeshPolysWithFlags(this.debugDrawImpl, mesh.raw.m_navMesh, flags, col);\n return this.flush();\n }\n drawNavMeshPoly(mesh, ref, col) {\n Raw.DetourDebugDraw.debugDrawNavMeshPoly(this.debugDrawImpl, mesh.raw.m_navMesh, ref, col);\n return this.flush();\n }\n /**\n * Disposes of the debug drawer and releases resources.\n */\n dispose() {\n Raw.Module.destroy(this.debugDrawImpl);\n }\n vertex(x, y, z, color) {\n const r = (color & 0xff) / 255;\n const g = (color >> 8 & 0xff) / 255;\n const b = (color >> 16 & 0xff) / 255;\n const a = (color >> 24 & 0xff) / 255;\n this.currentVertices.push([x, y, z, r, g, b, a]);\n }\n}\n/**\n * Converts a color in 0xRRGGBBAA format to a duRGBA format.\n */\nconst rgbToDuRgba = hexColor => {\n const r = hexColor >> 16 & 0xff;\n const g = hexColor >> 8 & 0xff;\n const b = hexColor & 0xff;\n return r | g << 8 | b << 16 | 255 << 24;\n};\n\nclass NavMeshGetTilesAtResult {\n constructor(raw) {\n this.raw = raw;\n }\n tiles(index) {\n return new DetourMeshTile(this.raw.get_tiles(index));\n }\n tileCount() {\n return this.raw.tileCount;\n }\n}\nclass NavMeshRemoveTileResult {\n constructor(raw) {\n this.raw = raw;\n }\n data() {\n return array(i => this.raw.get_data(i), this.raw.dataSize);\n }\n dataSize() {\n return this.raw.dataSize;\n }\n}\nclass NavMeshCalcTileLocResult {\n constructor(raw) {\n this.raw = raw;\n }\n tileX() {\n return this.raw.tileX;\n }\n tileY() {\n return this.raw.tileY;\n }\n}\nclass NavMeshStoreTileStateResult {\n constructor(raw) {\n this.raw = raw;\n }\n data() {\n return array(i => this.raw.get_data(i), this.raw.dataSize);\n }\n dataSize() {\n return this.raw.dataSize;\n }\n}\nclass NavMeshParams {\n constructor(raw) {\n this.raw = raw;\n }\n static create(params) {\n const raw = new Raw.Module.dtNavMeshParams();\n raw.set_orig(0, params.orig.x);\n raw.set_orig(1, params.orig.y);\n raw.set_orig(2, params.orig.z);\n raw.tileWidth = params.tileWidth;\n raw.tileHeight = params.tileHeight;\n raw.maxTiles = params.maxTiles;\n raw.maxPolys = params.maxPolys;\n return new NavMeshParams(raw);\n }\n clone() {\n return NavMeshParams.create({\n orig: {\n x: this.raw.get_orig(0),\n y: this.raw.get_orig(1),\n z: this.raw.get_orig(2)\n },\n tileWidth: this.raw.tileWidth,\n tileHeight: this.raw.tileHeight,\n maxTiles: this.raw.maxTiles,\n maxPolys: this.raw.maxPolys\n });\n }\n}\nclass NavMesh {\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.NavMesh();\n }\n /**\n * Initializes the NavMesh for use with a single tile.\n * @param navMeshData the nav mesh data\n * @returns the status of the operation\n */\n initSolo(navMeshData) {\n return this.raw.initSolo(navMeshData.raw);\n }\n /**\n * Initializes the NavMesh for use with multiple tiles.\n * @param params parameters for the NavMesh\n * @returns the status of the operation\n */\n initTiled(params) {\n return this.raw.initTiled(params.raw);\n }\n /**\n * Adds a tile to the NavMesh.\n * @param navMeshData the nav mesh data\n * @param flags the flags to use when building the nav mesh\n * @param lastRef\n * @returns the status of the operation and the reference of the added tile\n */\n addTile(navMeshData, flags, lastRef) {\n const tileRefRaw = new Raw.UnsignedIntRef();\n const status = this.raw.addTile(navMeshData.raw, flags, lastRef, tileRefRaw);\n const tileRef = tileRefRaw.value;\n Raw.destroy(tileRefRaw);\n return {\n status,\n tileRef\n };\n }\n /**\n * Decodes a standard polygon reference.\n * @param polyRef The polygon reference to decode\n * @returns the decoded polygon reference\n */\n decodePolyId(polyRef) {\n const saltRef = new Raw.UnsignedIntRef();\n const itRef = new Raw.UnsignedIntRef();\n const ipRef = new Raw.UnsignedIntRef();\n this.raw.decodePolyId(polyRef, saltRef, itRef, ipRef);\n const tileSalt = saltRef.value;\n Raw.destroy(saltRef);\n const tileIndex = itRef.value;\n Raw.destroy(itRef);\n const tilePolygonIndex = ipRef.value;\n Raw.destroy(ipRef);\n return {\n tileSalt,\n tileIndex,\n tilePolygonIndex\n };\n }\n /**\n * Derives a standard polygon reference.\n * @param salt The tile's salt value.\n * @param tileIndex The index of the tile. `it` in the C++ api.\n * @param tilePolygonIndex The index of the polygon within the tile. `ip` in the C++ api.\n * @returns the derived polygon reference\n */\n encodePolyId(salt, tileIndex, tilePolygonIndex) {\n return this.raw.encodePolyId(salt, tileIndex, tilePolygonIndex);\n }\n /**\n * Removes a tile from the NavMesh\n * @param ref the tile ref\n * @returns the nav mesh data, so it can be added back later\n */\n removeTile(ref) {\n return new NavMeshRemoveTileResult(this.raw.removeTile(ref));\n }\n /**\n * Calculates the tile grid location for the specified world position.\n * @param pos The world position for the query. [(x, y, z)]\n * @returns\n */\n calcTileLoc(pos) {\n return new NavMeshCalcTileLocResult(this.raw.calcTileLoc(vec3.toArray(pos)));\n }\n /**\n * Gets the tile at the specified grid location.\n * @param x The tile's x-location. (x, y, layer)\n * @param y The tile's y-location. (x, y, layer)\n * @param layer The tile's layer. (x, y, layer)\n * @returns The tile, or null if the tile does not exist.\n */\n getTileAt(x, y, layer) {\n const tile = this.raw.getTileAt(x, y, layer);\n return !Raw.isNull(tile) ? new DetourMeshTile(tile) : null;\n }\n /**\n * Gets all tiles at the specified grid location. (All layers.)\n * @param x The tile's x-location. (x, y)\n * @param y The tile's y-location. (x, y)\n * @param maxTiles The maximum tiles the tiles parameter can hold.\n */\n getTilesAt(x, y, maxTiles) {\n return new NavMeshGetTilesAtResult(this.raw.getTilesAt(x, y, maxTiles));\n }\n /**\n * Gets the tile reference for the tile at specified grid location.\n * @param x The tile's x-location. (x, y, layer)\n * @param y The tile's y-location. (x, y, layer)\n * @param layer The tile's layer. (x, y, layer)\n * @returns The tile reference of the tile, or 0 if there is none.\n */\n getTileRefAt(x, y, layer) {\n return this.raw.getTileRefAt(x, y, layer);\n }\n /**\n * Gets the tile reference for the specified tile.\n * @param tile\n * @returns\n */\n getTileRef(tile) {\n return this.raw.getTileRef(tile.raw);\n }\n /**\n * Gets the tile for the specified tile reference.\n * @param ref The tile reference of the tile to retrieve.\n * @returns The tile for the specified reference, or null if the reference is invalid.\n */\n getTileByRef(ref) {\n const tile = this.raw.getTileByRef(ref);\n return !Raw.isNull(tile) ? new DetourMeshTile(tile) : null;\n }\n /**\n * Returns the maximum number of tiles supported by the navigation mesh.\n */\n getMaxTiles() {\n return this.raw.getMaxTiles();\n }\n /**\n * Gets the tile at the specified index.\n * @param i the tile index. [Limit: 0 >= index < #getMaxTiles()]\n * @returns\n */\n getTile(i) {\n return new DetourMeshTile(this.raw.getTile(i));\n }\n /**\n * Gets the tile and polygon for the specified polygon reference.\n * @param ref The reference for the a polygon.\n * @returns\n */\n getTileAndPolyByRef(ref) {\n const result = this.raw.getTileAndPolyByRef(ref);\n const tile = new DetourMeshTile(result.tile);\n const poly = new DetourPoly(result.poly);\n return {\n success: statusSucceed(result.status),\n status: result.status,\n tile,\n poly\n };\n }\n /**\n * Gets the tile and polygon for the specified polygon reference.\n * @param ref A known valid reference for a polygon.\n * @returns\n */\n getTileAndPolyByRefUnsafe(ref) {\n const result = this.raw.getTileAndPolyByRef(ref);\n const tile = new DetourMeshTile(result.tile);\n const poly = new DetourPoly(result.poly);\n return {\n tile,\n poly\n };\n }\n /**\n * Checks the validity of a polygon reference.\n * @param ref\n * @returns\n */\n isValidPolyRef(ref) {\n return this.raw.isValidPolyRef(ref);\n }\n /**\n * Gets the polygon reference for the tile's base polygon.\n * @param tile\n * @returns\n */\n getPolyRefBase(tile) {\n return this.raw.getPolyRefBase(tile.raw);\n }\n /**\n * Gets the endpoints for an off-mesh connection, ordered by \"direction of travel\".\n * @param prevRef The reference of the polygon before the connection.\n * @param polyRef The reference of the off-mesh connection polygon.\n * @returns\n */\n getOffMeshConnectionPolyEndPoints(prevRef, polyRef) {\n const startRaw = new Raw.Vec3();\n const endRaw = new Raw.Vec3();\n const status = this.raw.getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startRaw, endRaw);\n const start = vec3.fromRaw(startRaw);\n Raw.destroy(startRaw);\n const end = vec3.fromRaw(endRaw);\n Raw.destroy(endRaw);\n return {\n success: statusSucceed(status),\n status,\n start,\n end\n };\n }\n /**\n * Gets the specified off-mesh connection.\n * @param ref The polygon reference of the off-mesh connection.\n * @returns\n */\n getOffMeshConnectionByRef(ref) {\n return new DetourOffMeshConnection(this.raw.getOffMeshConnectionByRef(ref));\n }\n /**\n * Sets the user defined flags for the specified polygon.\n * @param ref The polygon reference.\n * @param flags The new flags for the polygon.\n */\n setPolyFlags(ref, flags) {\n return this.raw.setPolyFlags(ref, flags);\n }\n /**\n * Gets the user defined flags for the specified polygon.\n * @param ref The polygon reference.\n * @returns\n */\n getPolyFlags(ref) {\n const flagsRaw = new Raw.UnsignedShortRef();\n const status = this.raw.getPolyFlags(ref, flagsRaw);\n const flags = flagsRaw.value;\n Raw.destroy(flagsRaw);\n return {\n status,\n flags\n };\n }\n /**\n * Sets the user defined area for the specified polygon.\n * @param ref The polygon reference.\n * @param flags The new flags for the polygon.\n */\n setPolyArea(ref, area) {\n return this.raw.setPolyArea(ref, area);\n }\n /**\n * Gets the user defined area for the specified polygon.\n * @param ref The polygon reference.\n * @returns\n */\n getPolyArea(ref) {\n const areaRaw = new Raw.UnsignedCharRef();\n const status = this.raw.getPolyArea(ref, areaRaw);\n const area = areaRaw.value;\n Raw.destroy(areaRaw);\n return {\n status,\n area\n };\n }\n /**\n * Gets the size of the buffer required by #storeTileState to store the specified tile's state.\n * @param tile\n * @returns The size of the buffer required to store the state.\n */\n getTileStateSize(tile) {\n return this.raw.getTileStateSize(tile.raw);\n }\n /**\n * Stores the non-structural state of the tile in the specified buffer. (Flags, area ids, etc.)\n * @param tile The tile.\n * @param maxDataSize The size of the data buffer. [Limit: >= #getTileStateSize]\n * @returns\n */\n storeTileState(tile, maxDataSize) {\n return new NavMeshStoreTileStateResult(this.raw.storeTileState(tile.raw, maxDataSize));\n }\n /**\n * Restores the state of the tile.\n * @param tile The tile.\n * @param data The new state. (Obtained from @see storeTileState)\n * @param maxDataSize The size of the state within the data buffer.\n * @returns\n */\n restoreTileState(tile, data, maxDataSize) {\n return this.raw.restoreTileState(tile.raw, data, maxDataSize);\n }\n /**\n * Destroys the NavMesh.\n */\n destroy() {\n this.raw.destroy();\n Raw.Module.destroy(this.raw);\n }\n}\n/**\n * Gets the positions and indices of the nav mesh.\n * @param navMesh the nav mesh\n * @param flags poly flags to filter by, defaults to undefined to include all polys\n * @returns the positions and indices of the nav mesh\n */\nconst getNavMeshPositionsAndIndices = (navMesh, flags) => {\n const positions = [];\n const indices = [];\n let tri = 0;\n const maxTiles = navMesh.getMaxTiles();\n for (let tileIndex = 0; tileIndex < maxTiles; tileIndex++) {\n const tile = navMesh.getTile(tileIndex);\n const tileHeader = tile.header();\n if (!tileHeader) continue;\n const tilePolyCount = tileHeader.polyCount();\n for (let tilePolyIndex = 0; tilePolyIndex < tilePolyCount; ++tilePolyIndex) {\n const poly = tile.polys(tilePolyIndex);\n if (flags !== undefined && (poly.flags() & flags) === 0) continue;\n if (poly.getType() === 1) continue;\n const polyVertCount = poly.vertCount();\n const polyDetail = tile.detailMeshes(tilePolyIndex);\n const polyDetailTriBase = polyDetail.triBase();\n const polyDetailTriCount = polyDetail.triCount();\n for (let polyDetailTriIndex = 0; polyDetailTriIndex < polyDetailTriCount; ++polyDetailTriIndex) {\n const detailTrisBaseIndex = (polyDetailTriBase + polyDetailTriIndex) * 4;\n for (let trianglePoint = 0; trianglePoint < 3; ++trianglePoint) {\n if (tile.detailTris(detailTrisBaseIndex + trianglePoint) < polyVertCount) {\n const tileVertsBaseIndex = poly.verts(tile.detailTris(detailTrisBaseIndex + trianglePoint)) * 3;\n positions.push(tile.verts(tileVertsBaseIndex), tile.verts(tileVertsBaseIndex + 1), tile.verts(tileVertsBaseIndex + 2));\n } else {\n const tileVertsBaseIndex = (polyDetail.vertBase() + tile.detailTris(detailTrisBaseIndex + trianglePoint) - poly.vertCount()) * 3;\n positions.push(tile.detailVerts(tileVertsBaseIndex), tile.detailVerts(tileVertsBaseIndex + 1), tile.detailVerts(tileVertsBaseIndex + 2));\n }\n indices.push(tri++);\n }\n }\n }\n }\n return [positions, indices];\n};\n/**\n * Disables all polys not connected to provided start poly refs.\n * @param navMesh the nav mesh to prune\n * @param startPolyRefs poly refs to start the flood fill from, can be retrieved with `navMeshQuery.findNearestPoly`\n *\n * @example\n * ```ts\n * const navMeshQuery = new NavMeshQuery(navMesh);\n *\n * const nearestPolyResult = navMeshQuery.findNearestPoly(point, {\n * halfExtents: { x: 2, y: 2, z: 2 },\n * });\n *\n * if (!nearestPolyResult.success) return;\n *\n * floodFillPruneNavMesh(navMesh, [nearestPolyResult.nearestRef]);\n * ```\n */\nconst floodFillPruneNavMesh = (navMesh, startPolyRefs) => {\n /* find all polys connected to the nearest poly */\n const visited = new Set();\n const openList = [];\n for (const startPolyRef of startPolyRefs) {\n visited.add(startPolyRef);\n openList.push(startPolyRef);\n }\n while (openList.length > 0) {\n const ref = openList.pop();\n // get current poly and tile\n const {\n poly,\n tile\n } = navMesh.getTileAndPolyByRefUnsafe(ref);\n // visit linked polys\n for (let i = poly.firstLink(); i !== Detour.DT_NULL_LINK; i = tile.links(i).next()) {\n const neiRef = tile.links(i).ref();\n // skip invalid and already visited\n if (!neiRef || visited.has(neiRef)) continue;\n // mark as visited\n visited.add(neiRef);\n // visit neighbours\n openList.push(neiRef);\n }\n }\n /* disable unvisited polys */\n for (let tileIndex = 0; tileIndex < navMesh.getMaxTiles(); tileIndex++) {\n const tile = navMesh.getTile(tileIndex);\n if (!tile || !tile.header()) continue;\n const tileHeader = tile.header();\n const base = navMesh.getPolyRefBase(tile);\n for (let i = 0; i < tileHeader.polyCount(); i++) {\n const ref = base | i;\n if (!visited.has(ref)) {\n // set flag to 0\n // this could also be a custom 'disabled' area flag if using custom areas\n navMesh.setPolyFlags(ref, 0);\n }\n }\n }\n};\n\nconst getRandomSeed = () => {\n return Raw.Module.FastRand.prototype.getSeed();\n};\nconst setRandomSeed = seed => {\n Raw.Module.FastRand.prototype.setSeed(seed);\n};\n\nconst recastConfigDefaults = {\n borderSize: 0,\n tileSize: 0,\n cs: 0.2,\n ch: 0.2,\n walkableSlopeAngle: 60,\n walkableHeight: 2,\n walkableClimb: 2,\n walkableRadius: 0.5,\n maxEdgeLen: 12,\n maxSimplificationError: 1.3,\n minRegionArea: 8,\n mergeRegionArea: 20,\n maxVertsPerPoly: 6,\n detailSampleDist: 6,\n detailSampleMaxError: 1\n};\nconst createRcConfig = partialConfig => {\n const config = {\n ...recastConfigDefaults,\n ...partialConfig\n };\n const rcConfig = new Raw.Module.rcConfig();\n rcConfig.borderSize = config.borderSize;\n rcConfig.tileSize = config.tileSize;\n rcConfig.cs = config.cs;\n rcConfig.ch = config.ch;\n rcConfig.walkableSlopeAngle = config.walkableSlopeAngle;\n rcConfig.walkableHeight = config.walkableHeight;\n rcConfig.walkableClimb = config.walkableClimb;\n rcConfig.walkableRadius = config.walkableRadius;\n rcConfig.maxEdgeLen = config.maxEdgeLen;\n rcConfig.maxSimplificationError = config.maxSimplificationError;\n rcConfig.minRegionArea = config.minRegionArea;\n rcConfig.mergeRegionArea = config.mergeRegionArea;\n rcConfig.maxVertsPerPoly = config.maxVertsPerPoly;\n rcConfig.detailSampleDist = config.detailSampleDist;\n rcConfig.detailSampleMaxError = config.detailSampleMaxError;\n return rcConfig;\n};\nconst cloneRcConfig = rcConfig => {\n const clone = new Raw.Module.rcConfig();\n clone.set_bmin(0, rcConfig.get_bmin(0));\n clone.set_bmin(1, rcConfig.get_bmin(1));\n clone.set_bmin(2, rcConfig.get_bmin(2));\n clone.set_bmax(0, rcConfig.get_bmax(0));\n clone.set_bmax(1, rcConfig.get_bmax(1));\n clone.set_bmax(2, rcConfig.get_bmax(2));\n clone.width = rcConfig.width;\n clone.height = rcConfig.height;\n clone.borderSize = rcConfig.borderSize;\n clone.tileSize = rcConfig.tileSize;\n clone.cs = rcConfig.cs;\n clone.ch = rcConfig.ch;\n clone.walkableSlopeAngle = rcConfig.walkableSlopeAngle;\n clone.walkableHeight = rcConfig.walkableHeight;\n clone.walkableClimb = rcConfig.walkableClimb;\n clone.walkableRadius = rcConfig.walkableRadius;\n clone.maxEdgeLen = rcConfig.maxEdgeLen;\n clone.maxSimplificationError = rcConfig.maxSimplificationError;\n clone.minRegionArea = rcConfig.minRegionArea;\n clone.mergeRegionArea = rcConfig.mergeRegionArea;\n clone.maxVertsPerPoly = rcConfig.maxVertsPerPoly;\n clone.detailSampleDist = rcConfig.detailSampleDist;\n clone.detailSampleMaxError = rcConfig.detailSampleMaxError;\n return clone;\n};\nclass RecastBuildContext {\n logs = [];\n startTimes = {};\n accumulatedTimes = {};\n constructor(timersAndLogsEnabled = true) {\n const impl = new Raw.Module.RecastBuildContextJsImpl();\n impl.log = (category, msg, len) => {\n if (!this.raw.logEnabled()) return;\n // type is string, but webidl binder passes us a pointer\n const msgPointer = msg;\n const view = new Uint8Array(Raw.Module.HEAPU8.buffer, msgPointer, len);\n const data = new Uint8Array(len);\n data.set(view);\n const msgString = new TextDecoder().decode(data);\n this.log(category, msgString);\n };\n impl.resetLog = () => {\n this.resetLog();\n };\n impl.startTimer = label => {\n if (!this.raw.timerEnabled()) return;\n this.startTimer(label);\n };\n impl.stopTimer = label => {\n if (!this.raw.timerEnabled()) return;\n this.stopTimer(label);\n };\n impl.getAccumulatedTime = label => {\n if (!this.raw.timerEnabled()) return -1;\n return this.getAccumulatedTime(label);\n };\n impl.resetTimers = () => {\n if (!this.raw.timerEnabled()) return;\n this.startTimes = {};\n this.accumulatedTimes = {};\n };\n this.raw = new Raw.Module.RecastBuildContext(impl);\n this.raw.enableTimer(timersAndLogsEnabled);\n this.raw.enableLog(timersAndLogsEnabled);\n this.resetTimers();\n }\n log(category, msg) {\n this.logs.push({\n category,\n msg\n });\n }\n resetLog() {\n this.logs = [];\n }\n startTimer(label) {\n this.startTimes[label] = performance.now();\n }\n stopTimer(label) {\n const endTime = performance.now();\n const deltaTime = endTime - this.startTimes[label];\n if (this.accumulatedTimes[label] === -1) {\n this.accumulatedTimes[label] = deltaTime;\n } else {\n this.accumulatedTimes[label] += deltaTime;\n }\n }\n getAccumulatedTime(label) {\n return this.accumulatedTimes[label];\n }\n resetTimers() {\n for (let i = 0; i < Recast.RC_MAX_TIMERS; i++) {\n this.startTimes[i] = -1;\n this.accumulatedTimes[i] = -1;\n }\n }\n}\nclass RecastChunkyTriMesh {\n constructor(raw) {\n this.raw = raw ?? new Raw.rcChunkyTriMesh();\n }\n init(verts, tris, ntris, trisPerChunk) {\n return Raw.ChunkyTriMeshUtils.createChunkyTriMesh(verts.raw, tris.raw, ntris, trisPerChunk, this.raw);\n }\n getChunksOverlappingRect(boundsMin, boundsMax, chunks, maxChunks) {\n return Raw.ChunkyTriMeshUtils.getChunksOverlappingRect(this.raw, boundsMin, boundsMax, chunks.raw, maxChunks);\n }\n getNodeTris(nodeId) {\n return IntArray.fromRaw(Raw.ChunkyTriMeshUtils.getChunkyTriMeshNodeTris(this.raw, nodeId));\n }\n nodes(index) {\n return this.raw.get_nodes(index);\n }\n maxTrisPerChunk() {\n return this.raw.maxTrisPerChunk;\n }\n}\nclass RecastSpan {\n constructor(raw) {\n this.raw = raw;\n }\n smin() {\n return this.raw.smin;\n }\n smax() {\n return this.raw.smax;\n }\n area() {\n return this.raw.area;\n }\n next() {\n return !Raw.isNull(this.raw.next) ? new RecastSpan(this.raw.next) : null;\n }\n}\nclass RecastSpanPool {\n constructor(raw) {\n this.raw = raw;\n }\n next() {\n return !Raw.isNull(this.raw.next) ? new RecastSpanPool(this.raw.next) : null;\n }\n items(index) {\n return new RecastSpan(this.raw.get_items(index));\n }\n}\nclass RecastHeightfield {\n constructor(raw) {\n this.raw = raw;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n spans(index) {\n return new RecastSpan(this.raw.get_spans(index));\n }\n pools(index) {\n return new RecastSpanPool(this.raw.get_pools(index));\n }\n freelist(index) {\n return new RecastSpan(this.raw.get_freelist(index));\n }\n}\nclass RecastCompactCell {\n constructor(raw) {\n this.raw = raw;\n }\n index() {\n return this.raw.get_index();\n }\n count() {\n return this.raw.get_count();\n }\n}\nclass RecastCompactSpan {\n constructor(raw) {\n this.raw = raw;\n }\n y() {\n return this.raw.get_y();\n }\n reg() {\n return this.raw.get_reg();\n }\n con() {\n return this.raw.get_con();\n }\n h() {\n return this.raw.get_h();\n }\n}\nclass RecastCompactHeightfield {\n constructor(raw) {\n this.raw = raw;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n spanCount() {\n return this.raw.spanCount;\n }\n walkableHeight() {\n return this.raw.walkableHeight;\n }\n walkableClimb() {\n return this.raw.walkableClimb;\n }\n borderSize() {\n return this.raw.borderSize;\n }\n maxDistance() {\n return this.raw.maxDistance;\n }\n maxRegions() {\n return this.raw.maxRegions;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n cells(index) {\n return new RecastCompactCell(this.raw.get_cells(index));\n }\n spans(index) {\n return new RecastCompactSpan(this.raw.get_spans(index));\n }\n dist(index) {\n return this.raw.get_dist(index);\n }\n areas(index) {\n return this.raw.get_areas(index);\n }\n}\nclass RecastContour {\n constructor(raw) {\n this.raw = raw;\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n nverts() {\n return this.raw.nverts;\n }\n rverts(index) {\n return this.raw.get_rverts(index);\n }\n nrverts() {\n return this.raw.nrverts;\n }\n reg() {\n return this.raw.reg;\n }\n area() {\n return this.raw.area;\n }\n}\nclass RecastContourSet {\n constructor(raw) {\n this.raw = raw;\n }\n conts(index) {\n return new RecastContour(this.raw.get_conts(index));\n }\n nconts() {\n return this.raw.nconts;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n borderSize() {\n return this.raw.borderSize;\n }\n maxError() {\n return this.raw.maxError;\n }\n}\nclass RecastHeightfieldLayer {\n constructor(raw) {\n this.raw = raw;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n width() {\n return this.raw.width;\n }\n height() {\n return this.raw.height;\n }\n minx() {\n return this.raw.minx;\n }\n maxx() {\n return this.raw.maxx;\n }\n miny() {\n return this.raw.miny;\n }\n maxy() {\n return this.raw.maxy;\n }\n hmin() {\n return this.raw.hmin;\n }\n hmax() {\n return this.raw.hmax;\n }\n heights(index) {\n return this.raw.get_heights(index);\n }\n areas(index) {\n return this.raw.get_areas(index);\n }\n cons(index) {\n return this.raw.get_cons(index);\n }\n}\nclass RecastHeightfieldLayerSet {\n constructor(raw) {\n this.raw = raw;\n }\n layers(index) {\n return new RecastHeightfieldLayer(this.raw.get_layers(index));\n }\n nlayers() {\n return this.raw.nlayers;\n }\n}\nclass RecastPolyMesh {\n constructor(raw) {\n this.raw = raw;\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n polys(index) {\n return this.raw.get_polys(index);\n }\n regs(index) {\n return this.raw.get_regs(index);\n }\n flags(index) {\n return this.raw.get_flags(index);\n }\n setFlags(index, value) {\n this.raw.set_flags(index, value);\n }\n areas(index) {\n return this.raw.get_areas(index);\n }\n setAreas(index, value) {\n this.raw.set_areas(index, value);\n }\n nverts() {\n return this.raw.nverts;\n }\n npolys() {\n return this.raw.npolys;\n }\n maxpolys() {\n return this.raw.maxpolys;\n }\n nvp() {\n return this.raw.nvp;\n }\n bmin() {\n return vec3.fromArray(array(i => this.raw.get_bmin(i), 3));\n }\n bmax() {\n return vec3.fromArray(array(i => this.raw.get_bmax(i), 3));\n }\n cs() {\n return this.raw.cs;\n }\n ch() {\n return this.raw.ch;\n }\n borderSize() {\n return this.raw.borderSize;\n }\n maxEdgeError() {\n return this.raw.maxEdgeError;\n }\n}\nclass RecastPolyMeshDetail {\n constructor(raw) {\n this.raw = raw;\n }\n meshes(index) {\n return this.raw.get_meshes(index);\n }\n verts(index) {\n return this.raw.get_verts(index);\n }\n tris(index) {\n return this.raw.get_tris(index);\n }\n nmeshes() {\n return this.raw.nmeshes;\n }\n nverts() {\n return this.raw.nverts;\n }\n ntris() {\n return this.raw.ntris;\n }\n}\nconst calcBounds = (verts, nv) => {\n return Raw.Recast.calcBounds(verts.raw, nv);\n};\nconst calcGridSize = (bmin, bmax, cs) => {\n return Raw.Recast.calcGridSize(bmin, bmax, cs);\n};\nconst createHeightfield = (buildContext, heightfield, width, height, bmin, bmax, cs, ch) => {\n return Raw.Recast.createHeightfield(buildContext.raw, heightfield.raw, width, height, bmin, bmax, cs, ch);\n};\nconst markWalkableTriangles = (buildContext, walkableSlopeAngle, verts, nv, tris, nt, areas) => {\n return Raw.Recast.markWalkableTriangles(buildContext.raw, walkableSlopeAngle, verts.raw, nv, tris.raw, nt, areas.raw);\n};\nconst clearUnwalkableTriangles = (buildContext, walkableSlopeAngle, verts, nv, tris, nt, areas) => {\n return Raw.Recast.clearUnwalkableTriangles(buildContext.raw, walkableSlopeAngle, verts.raw, nv, tris.raw, nt, areas.raw);\n};\nconst rasterizeTriangles = (buildContext, verts, nv, tris, areas, nt, heightfield, flagMergeThreshold = 1) => {\n return Raw.Recast.rasterizeTriangles(buildContext.raw, verts.raw, nv, tris.raw, areas.raw, nt, heightfield.raw, flagMergeThreshold);\n};\nconst filterLowHangingWalkableObstacles = (buildContext, walkableClimb, heightfield) => {\n return Raw.Recast.filterLowHangingWalkableObstacles(buildContext.raw, walkableClimb, heightfield.raw);\n};\nconst filterLedgeSpans = (buildContext, walkableHeight, walkableClimb, heightfield) => {\n return Raw.Recast.filterLedgeSpans(buildContext.raw, walkableHeight, walkableClimb, heightfield.raw);\n};\nconst filterWalkableLowHeightSpans = (buildContext, walkableHeight, heightfield) => {\n return Raw.Recast.filterWalkableLowHeightSpans(buildContext.raw, walkableHeight, heightfield.raw);\n};\nconst getHeightFieldSpanCount = (buildContext, heightfield) => {\n return Raw.Recast.getHeightFieldSpanCount(buildContext.raw, heightfield.raw);\n};\nconst buildCompactHeightfield = (buildContext, walkableHeight, walkableClimb, heightfield, compactHeightfield) => {\n return Raw.Recast.buildCompactHeightfield(buildContext.raw, walkableHeight, walkableClimb, heightfield.raw, compactHeightfield.raw);\n};\nconst erodeWalkableArea = (buildContext, radius, compactHeightfield) => {\n return Raw.Recast.erodeWalkableArea(buildContext.raw, radius, compactHeightfield.raw);\n};\nconst medianFilterWalkableArea = (buildContext, compactHeightfield) => {\n return Raw.Recast.medianFilterWalkableArea(buildContext.raw, compactHeightfield.raw);\n};\nconst markBoxArea = (buildContext, bmin, bmax, areaId, compactHeightfield) => {\n return Raw.Recast.markBoxArea(buildContext.raw, bmin, bmax, areaId, compactHeightfield.raw);\n};\nconst markConvexPolyArea = (buildContext, verts, nverts, hmin, hmax, areaId, compactHeightfield) => {\n return Raw.Recast.markConvexPolyArea(buildContext.raw, verts.raw, nverts, hmin, hmax, areaId, compactHeightfield.raw);\n};\nconst markCylinderArea = (buildContext, pos, radius, height, areaId, compactHeightfield) => {\n return Raw.Recast.markCylinderArea(buildContext.raw, pos, radius, height, areaId, compactHeightfield.raw);\n};\nconst buildDistanceField = (buildContext, compactHeightfield) => {\n return Raw.Recast.buildDistanceField(buildContext.raw, compactHeightfield.raw);\n};\nconst buildRegions = (buildContext, compactHeightfield, borderSize, minRegionArea, mergeRegionArea) => {\n return Raw.Recast.buildRegions(buildContext.raw, compactHeightfield.raw, borderSize, minRegionArea, mergeRegionArea);\n};\nconst buildLayerRegions = (buildContext, compactHeightfield, borderSize, minRegionArea) => {\n return Raw.Recast.buildLayerRegions(buildContext.raw, compactHeightfield.raw, borderSize, minRegionArea);\n};\nconst buildRegionsMonotone = (buildContext, compactHeightfield, borderSize, minRegionArea, mergeRegionArea) => {\n return Raw.Recast.buildRegionsMonotone(buildContext.raw, compactHeightfield.raw, borderSize, minRegionArea, mergeRegionArea);\n};\nconst setCon = (compactSpan, dir, i) => {\n return Raw.Recast.setCon(compactSpan.raw, dir, i);\n};\nconst getCon = (compactSpan, dir) => {\n return Raw.Recast.getCon(compactSpan.raw, dir);\n};\nconst getDirOffsetX = dir => {\n return Raw.Recast.getDirOffsetX(dir);\n};\nconst getDirOffsetY = dir => {\n return Raw.Recast.getDirOffsetY(dir);\n};\nconst getDirForOffset = (x, y) => {\n return Raw.Recast.getDirForOffset(x, y);\n};\nconst buildHeightfieldLayers = (buildContext, compactHeightfield, borderSize, walkableHeight, heightfieldLayerSet) => {\n return Raw.Recast.buildHeightfieldLayers(buildContext.raw, compactHeightfield.raw, borderSize, walkableHeight, heightfieldLayerSet.raw);\n};\nconst buildContours = (buildContext, compactHeightfield, maxError, maxEdgeLen, contourSet, buildFlags = Recast.RC_CONTOUR_TESS_WALL_EDGES) => {\n return Raw.Recast.buildContours(buildContext.raw, compactHeightfield.raw, maxError, maxEdgeLen, contourSet.raw, buildFlags);\n};\nconst buildPolyMesh = (buildContext, contourSet, nvp, polyMesh) => {\n return Raw.Recast.buildPolyMesh(buildContext.raw, contourSet.raw, nvp, polyMesh.raw);\n};\nconst mergePolyMeshes = (buildContext, meshes, outPolyMesh) => {\n return Raw.Recast.mergePolyMeshes(buildContext.raw, meshes.map(m => m.raw), meshes.length, outPolyMesh.raw);\n};\nconst buildPolyMeshDetail = (buildContext, mesh, compactHeightfield, sampleDist, sampleMaxError, polyMeshDetail) => {\n return Raw.Recast.buildPolyMeshDetail(buildContext.raw, mesh.raw, compactHeightfield.raw, sampleDist, sampleMaxError, polyMeshDetail.raw);\n};\nconst copyPolyMesh = (buildContext, src, dest) => {\n return Raw.Recast.copyPolyMesh(buildContext.raw, src.raw, dest.raw);\n};\nconst mergePolyMeshDetails = (buildContext, meshes, out) => {\n return Raw.Recast.mergePolyMeshDetails(buildContext.raw, meshes.map(m => m.raw), meshes.length, out.raw);\n};\nconst getHeightfieldLayerHeights = heightfieldLayer => {\n return UnsignedCharArray.fromRaw(Raw.Recast.getHeightfieldLayerHeights(heightfieldLayer.raw));\n};\nconst getHeightfieldLayerAreas = heightfieldLayer => {\n return UnsignedCharArray.fromRaw(Raw.Recast.getHeightfieldLayerAreas(heightfieldLayer.raw));\n};\nconst getHeightfieldLayerCons = heightfieldLayer => {\n return UnsignedCharArray.fromRaw(Raw.Recast.getHeightfieldLayerCons(heightfieldLayer.raw));\n};\nconst allocHeightfield = () => {\n return new RecastHeightfield(Raw.Recast.allocHeightfield());\n};\nconst freeHeightfield = heightfield => {\n return Raw.Recast.freeHeightfield(heightfield.raw);\n};\nconst allocCompactHeightfield = () => {\n return new RecastCompactHeightfield(Raw.Recast.allocCompactHeightfield());\n};\nconst freeCompactHeightfield = compactHeightfield => {\n return Raw.Recast.freeCompactHeightfield(compactHeightfield.raw);\n};\nconst allocHeightfieldLayerSet = () => {\n return new RecastHeightfieldLayerSet(Raw.Recast.allocHeightfieldLayerSet());\n};\nconst freeHeightfieldLayerSet = heightfieldLayerSet => {\n return Raw.Recast.freeHeightfieldLayerSet(heightfieldLayerSet.raw);\n};\nconst allocContourSet = () => {\n return new RecastContourSet(Raw.Recast.allocContourSet());\n};\nconst freeContourSet = contourSet => {\n return Raw.Recast.freeContourSet(contourSet.raw);\n};\nconst allocPolyMesh = () => {\n return new RecastPolyMesh(Raw.Recast.allocPolyMesh());\n};\nconst freePolyMesh = polyMesh => {\n return Raw.Recast.freePolyMesh(polyMesh.raw);\n};\nconst allocPolyMeshDetail = () => {\n return new RecastPolyMeshDetail(Raw.Recast.allocPolyMeshDetail());\n};\nconst freePolyMeshDetail = polyMeshDetail => {\n return Raw.Recast.freePolyMeshDetail(polyMeshDetail.raw);\n};\n\nconst exportImpl = (navMesh, tileCache) => {\n const navMeshExport = Raw.NavMeshExporter.exportNavMesh(navMesh.raw, tileCache?.raw);\n const arrView = new Uint8Array(Raw.Module.HEAPU8.buffer, navMeshExport.dataPointer, navMeshExport.size);\n const data = new Uint8Array(navMeshExport.size);\n data.set(arrView);\n Raw.NavMeshExporter.freeNavMeshExport(navMeshExport);\n return data;\n};\nconst exportNavMesh = navMesh => {\n return exportImpl(navMesh);\n};\nconst exportTileCache = (navMesh, tileCache) => {\n return exportImpl(navMesh, tileCache);\n};\n\nclass DetourTileCacheParams {\n constructor(raw) {\n this.raw = raw;\n }\n static create(config) {\n const tileCacheParams = new Raw.Module.dtTileCacheParams();\n tileCacheParams.set_orig(0, config.orig[0]);\n tileCacheParams.set_orig(1, config.orig[1]);\n tileCacheParams.set_orig(2, config.orig[2]);\n tileCacheParams.set_cs(config.cs);\n tileCacheParams.set_ch(config.ch);\n tileCacheParams.set_width(config.width);\n tileCacheParams.set_height(config.height);\n tileCacheParams.set_walkableHeight(config.walkableHeight);\n tileCacheParams.set_walkableRadius(config.walkableRadius);\n tileCacheParams.set_walkableClimb(config.walkableClimb);\n tileCacheParams.set_maxSimplificationError(config.maxSimplificationError);\n tileCacheParams.set_maxTiles(config.maxTiles);\n tileCacheParams.set_maxObstacles(config.maxObstacles);\n return new DetourTileCacheParams(tileCacheParams);\n }\n}\nclass TileCache {\n obstacles = new Map();\n constructor(raw) {\n this.raw = raw ?? new Raw.Module.TileCache();\n }\n /**\n * Initialises the TileCache\n * @param params\n */\n init(params, alloc, compressor, meshProcess) {\n return this.raw.init(params.raw, alloc, compressor, meshProcess.raw);\n }\n /**\n * Updates the tile cache by rebuilding tiles touched by unfinished obstacle requests.\n *\n * After adding or removing obstacles you can call `tileCache.update(navMesh)` to rebuild navmesh tiles.\n *\n * Adding or removing an obstacle will internally create an \"obstacle request\".\n * TileCache supports queuing up to 64 obstacle requests.\n *\n * The `tileCache.update` method returns `upToDate`, whether the tile cache is fully up to date with obstacle requests and tile rebuilds.\n * Each update call processes up to 64 tiles touched by added or removed obstacles.\n * If the tile cache isn't up to date another call will continue processing obstacle requests and tile rebuilds; otherwise it will have no effect.\n *\n * If not many obstacle requests occur between updates, an easy pattern is to call `tileCache.update` periodically, such as every game update.\n * If many obstacle requests have been made and you need to avoid reaching the 64 obstacle request limit, you can call `tileCache.update` multiple times, bailing out when `upToDate` is true or after a maximum number of updates.\n *\n * @example\n * ```ts\n * const { success, status, upToDate } = tileCache.update(navMesh);\n * ```\n */\n update(navMesh) {\n const {\n status,\n upToDate\n } = this.raw.update(navMesh.raw);\n return {\n success: statusSucceed(status),\n status,\n upToDate\n };\n }\n /**\n * Creates a cylinder obstacle and adds it to the navigation mesh.\n */\n addCylinderObstacle(position, radius, height) {\n const result = this.raw.addCylinderObstacle(vec3.toRaw(position), radius, height);\n if (result.status !== Detour.DT_SUCCESS) {\n return {\n success: false,\n status: result.status\n };\n }\n const ref = result.ref;\n const obstacle = {\n type: 'cylinder',\n ref,\n position,\n radius,\n height\n };\n this.obstacles.set(ref, obstacle);\n return {\n success: true,\n status: result.status,\n obstacle\n };\n }\n /**\n * Creates a box obstacle and adds it to the navigation mesh.\n */\n addBoxObstacle(position, halfExtents, angle) {\n const rawPosition = vec3.toRaw(position);\n const rawHalfExtents = vec3.toRaw(halfExtents);\n const result = this.raw.addBoxObstacle(rawPosition, rawHalfExtents, angle);\n Raw.destroy(rawPosition);\n Raw.destroy(rawHalfExtents);\n if (result.status !== Detour.DT_SUCCESS) {\n return {\n success: false,\n status: result.status\n };\n }\n const ref = result.ref;\n const obstacle = {\n type: 'box',\n ref,\n position,\n halfExtents,\n angle\n };\n this.obstacles.set(ref, obstacle);\n return {\n success: true,\n status: result.status,\n obstacle\n };\n }\n /**\n * Removes an obstacle from the navigation mesh.\n */\n removeObstacle(obstacle) {\n let ref;\n if (typeof obstacle === 'object') {\n ref = obstacle.ref;\n } else {\n ref = obstacle;\n }\n this.obstacles.delete(ref);\n const status = this.raw.removeObstacle(ref);\n return {\n success: statusSucceed(status),\n status\n };\n }\n addTile(data, flags = Detour.DT_COMPRESSEDTILE_FREE_DATA) {\n return this.raw.addTile(data.raw, flags);\n }\n buildNavMeshTile(ref, navMesh) {\n return this.raw.buildNavMeshTile(ref, navMesh.raw);\n }\n buildNavMeshTilesAt(tx, ty, navMesh) {\n return this.raw.buildNavMeshTilesAt(tx, ty, navMesh.raw);\n }\n destroy() {\n this.raw.destroy();\n }\n}\nclass TileCacheMeshProcess {\n constructor(process) {\n this.raw = new Raw.Module.TileCacheMeshProcess();\n this.raw.process = (paramsPtr, polyAreasArrayPtr, polyFlagsArrayPtr) => {\n const params = new NavMeshCreateParams(Raw.Module.wrapPointer(paramsPtr, Raw.Module.dtNavMeshCreateParams));\n const polyAreasArray = Raw.Module.wrapPointer(polyAreasArrayPtr, Raw.Module.UnsignedCharArray);\n const polyFlagsArray = Raw.Module.wrapPointer(polyFlagsArrayPtr, Raw.Module.UnsignedShortArray);\n process(params, UnsignedCharArray.fromRaw(polyAreasArray), UnsignedShortArray.fromRaw(polyFlagsArray));\n };\n }\n}\nconst buildTileCacheLayer = (comp, header, heights, areas, cons, tileCacheData) => {\n return Raw.DetourTileCacheBuilder.buildTileCacheLayer(comp, header, heights.raw, areas.raw, cons.raw, tileCacheData.raw);\n};\n\nconst createNavMeshExport = data => {\n const nDataBytes = data.length * data.BYTES_PER_ELEMENT;\n const dataPtr = Raw.Module._malloc(nDataBytes);\n const dataHeap = new Uint8Array(Raw.Module.HEAPU8.buffer, dataPtr, nDataBytes);\n dataHeap.set(data);\n const navMeshExport = new Raw.Module.NavMeshExport();\n navMeshExport.dataPointer = dataHeap.byteOffset;\n navMeshExport.size = data.length;\n return {\n navMeshExport,\n dataHeap\n };\n};\nconst importNavMesh = data => {\n const {\n navMeshExport,\n dataHeap\n } = createNavMeshExport(data);\n const result = Raw.NavMeshImporter.importNavMesh(navMeshExport, undefined);\n Raw.Module._free(dataHeap.byteOffset);\n const navMesh = new NavMesh(result.navMesh);\n return {\n navMesh\n };\n};\nconst importTileCache = (data, tileCacheMeshProcess) => {\n const {\n navMeshExport,\n dataHeap\n } = createNavMeshExport(data);\n const result = Raw.NavMeshImporter.importNavMesh(navMeshExport, tileCacheMeshProcess.raw);\n Raw.Module._free(dataHeap.byteOffset);\n const navMesh = new NavMesh(result.navMesh);\n const tileCache = new TileCache(result.tileCache);\n const allocator = result.allocator;\n const compressor = result.compressor;\n return {\n navMesh,\n tileCache,\n allocator,\n compressor\n };\n};\n\nexport { ChunkIdsArray, Crowd, CrowdAgent, DebugDrawerUtils, Detour, DetourBVNode, DetourLink, DetourMeshHeader, DetourMeshTile, DetourOffMeshConnection, DetourPoly, DetourPolyDetail, DetourTileCacheParams, FloatArray, IntArray, NavMesh, NavMeshCalcTileLocResult, NavMeshCreateParams, NavMeshGetTilesAtResult, NavMeshParams, NavMeshQuery, NavMeshRemoveTileResult, NavMeshStoreTileStateResult, QueryFilter, Raw, Recast, RecastBuildContext, RecastChunkyTriMesh, RecastCompactCell, RecastCompactHeightfield, RecastCompactSpan, RecastContour, RecastContourSet, RecastHeightfield, RecastHeightfieldLayer, RecastHeightfieldLayerSet, RecastPolyMesh, RecastPolyMeshDetail, RecastSpan, RecastSpanPool, TileCache, TileCacheData, TileCacheMeshProcess, TriangleAreasArray, TrianglesArray, UnsignedCharArray, UnsignedIntArray, UnsignedShortArray, VerticesArray, allocCompactHeightfield, allocContourSet, allocHeightfield, allocHeightfieldLayerSet, allocPolyMesh, allocPolyMeshDetail, array, buildCompactHeightfield, buildContours, buildDistanceField, buildHeightfieldLayers, buildLayerRegions, buildPolyMesh, buildPolyMeshDetail, buildRegions, buildRegionsMonotone, buildTileCacheLayer, calcBounds, calcGridSize, clearUnwalkableTriangles, cloneRcConfig, copyPolyMesh, createHeightfield, createNavMeshData, createRcConfig, crowdAgentParamsDefaults, erodeWalkableArea, exportNavMesh, exportTileCache, filterLedgeSpans, filterLowHangingWalkableObstacles, filterWalkableLowHeightSpans, floodFillPruneNavMesh, freeCompactHeightfield, freeContourSet, freeHeightfield, freeHeightfieldLayerSet, freePolyMesh, freePolyMeshDetail, getCon, getDirForOffset, getDirOffsetX, getDirOffsetY, getHeightFieldSpanCount, getHeightfieldLayerAreas, getHeightfieldLayerCons, getHeightfieldLayerHeights, getNavMeshPositionsAndIndices, getRandomSeed, importNavMesh, importTileCache, init, markBoxArea, markConvexPolyArea, markCylinderArea, markWalkableTriangles, medianFilterWalkableArea, mergePolyMeshDetails, mergePolyMeshes, rasterizeTriangles, recastConfigDefaults, rgbToDuRgba, setCon, setRandomSeed, statusDetail, statusFailed, statusInProgress, statusSucceed, statusToReadableString, vec3 };\n"],"names":["vec3","array"],"mappings":"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","x_google_ignoreList":[0]}