@woosh/meep-engine 2.131.47 → 2.132.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 (235) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
  4. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +4 -3
  5. package/src/core/codegen/LineBuilder.js +3 -3
  6. package/src/core/collection/heap/Uint32Heap.d.ts +14 -0
  7. package/src/core/collection/heap/Uint32Heap.d.ts.map +1 -1
  8. package/src/core/collection/heap/Uint32Heap.js +18 -0
  9. package/src/core/collection/map/HashMap.d.ts.map +1 -1
  10. package/src/core/collection/map/HashMap.js +4 -22
  11. package/src/core/collection/map/generate_next_linear_congruential_index.d.ts +15 -0
  12. package/src/core/collection/map/generate_next_linear_congruential_index.d.ts.map +1 -0
  13. package/src/core/collection/map/generate_next_linear_congruential_index.js +18 -0
  14. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts.map +1 -1
  15. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +10 -26
  16. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts +19 -0
  17. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts.map +1 -0
  18. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js +48 -0
  19. package/src/core/geom/3d/line/line3_compute_segment_point_distance.d.ts +15 -0
  20. package/src/core/geom/3d/line/line3_compute_segment_point_distance.d.ts.map +1 -0
  21. package/src/core/geom/3d/line/line3_compute_segment_point_distance.js +24 -0
  22. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts +17 -0
  23. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -0
  24. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +95 -0
  25. package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts +16 -0
  26. package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts.map +1 -0
  27. package/src/core/geom/3d/line/{line3_computeSegmentPointDistance_sqr.js → line3_compute_segment_point_distance_sqr.js} +16 -3
  28. package/src/core/geom/3d/plane/plane3_matrix4_project.d.ts.map +1 -1
  29. package/src/core/geom/3d/plane/plane3_matrix4_project.js +0 -1
  30. package/src/core/geom/3d/topology/struct/TopoMesh.d.ts +4 -0
  31. package/src/core/geom/3d/topology/struct/TopoMesh.d.ts.map +1 -1
  32. package/src/core/geom/3d/topology/struct/TopoMesh.js +4 -0
  33. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +18 -1
  34. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  35. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +56 -0
  36. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +46 -16
  37. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  38. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +85 -15
  39. package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_add.d.ts +9 -0
  40. package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_add.d.ts.map +1 -0
  41. package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_add.js +43 -0
  42. package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_remove.d.ts +4 -3
  43. package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_remove.d.ts.map +1 -1
  44. package/src/core/geom/3d/topology/struct/binary/io/bt_disk_edge_remove.js +38 -4
  45. package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.d.ts +8 -0
  46. package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.d.ts.map +1 -0
  47. package/src/core/geom/3d/topology/struct/binary/io/bt_loop_kill.js +36 -0
  48. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.d.ts +10 -0
  49. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.d.ts.map +1 -0
  50. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.js +62 -0
  51. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts +13 -0
  52. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -0
  53. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +145 -0
  54. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.d.ts +12 -0
  55. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.d.ts.map +1 -0
  56. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.js +111 -0
  57. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.d.ts +15 -0
  58. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.d.ts.map +1 -0
  59. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.js +290 -0
  60. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.d.ts +11 -0
  61. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_indexed_geometry.d.ts.map +1 -0
  62. package/src/core/geom/3d/topology/struct/binary/io/{bt_index_geometry_to_topology.js → bt_mesh_from_indexed_geometry.js} +6 -7
  63. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.d.ts +8 -0
  64. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.d.ts.map +1 -0
  65. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_from_unindexed_geometry.js +31 -0
  66. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.d.ts +7 -0
  67. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.d.ts.map +1 -0
  68. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_triangulate.js +22 -0
  69. package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.d.ts +8 -0
  70. package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.d.ts.map +1 -0
  71. package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_add.js +32 -0
  72. package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.d.ts +8 -0
  73. package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.d.ts.map +1 -0
  74. package/src/core/geom/3d/topology/struct/binary/io/bt_radial_loop_remove.js +26 -0
  75. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +1 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/{OrderedEdge.js → edge/OrderedEdge.js} +1 -1
  77. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_create.js → edge/bt_edge_create.js} +1 -1
  79. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_get_or_create.js → edge/bt_edge_get_or_create.js} +1 -1
  81. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -0
  82. package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_kill.js → edge/bt_edge_kill.js} +6 -3
  83. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.d.ts +13 -0
  84. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.d.ts.map +1 -0
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_split.js +180 -0
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_kill_only_edge.d.ts.map +1 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +1 -0
  88. package/src/core/geom/3d/topology/struct/binary/io/{bt_mesh_calc_edges.js → edge/bt_mesh_calc_edges.js} +10 -7
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +1 -0
  90. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.d.ts +8 -0
  91. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.d.ts.map +1 -0
  92. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_kill.js +26 -0
  93. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts +15 -0
  94. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts.map +1 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +152 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts +13 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.d.ts.map +1 -0
  98. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_triangulate.js +124 -0
  99. package/src/core/geom/3d/topology/struct/binary/io/face/bt_kill_only_face.d.ts.map +1 -0
  100. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts +10 -0
  102. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts.map +1 -0
  103. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.js +165 -0
  104. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts.map +1 -0
  105. package/src/core/geom/3d/topology/struct/binary/io/{bt_vert_kill.js → vertex/bt_vert_kill.js} +5 -2
  106. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts +13 -0
  107. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -0
  108. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +125 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_has_vertex.d.ts +9 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_has_vertex.d.ts.map +1 -0
  111. package/src/core/geom/3d/topology/struct/binary/query/{bt_mesh_edge_has_vertex.js → bt_edge_has_vertex.js} +1 -1
  112. package/src/core/geom/3d/topology/struct/binary/query/{bt_mesh_edge_other_vertex.d.ts → bt_edge_other_vertex.d.ts} +2 -2
  113. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_other_vertex.d.ts.map +1 -0
  114. package/src/core/geom/3d/topology/struct/binary/query/{bt_mesh_edge_other_vertex.js → bt_edge_other_vertex.js} +1 -1
  115. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts +12 -0
  116. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts.map +1 -0
  117. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.js +96 -0
  118. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_centroid.d.ts +10 -0
  119. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_centroid.d.ts.map +1 -0
  120. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_centroid.js +75 -0
  121. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.d.ts +10 -0
  122. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.d.ts.map +1 -0
  123. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +85 -0
  124. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts +12 -0
  125. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts.map +1 -0
  126. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.js +74 -0
  127. package/src/core/geom/3d/topology/struct/binary/query/bt_face_is_degenerate.d.ts +9 -0
  128. package/src/core/geom/3d/topology/struct/binary/query/bt_face_is_degenerate.d.ts.map +1 -0
  129. package/src/core/geom/3d/topology/struct/binary/query/bt_face_is_degenerate.js +78 -0
  130. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts +15 -0
  131. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts.map +1 -0
  132. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.js +151 -0
  133. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_edge_distance_eikonal.d.ts +13 -0
  134. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_edge_distance_eikonal.d.ts.map +1 -0
  135. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_edge_distance_eikonal.js +46 -0
  136. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.d.ts +9 -0
  137. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.d.ts.map +1 -0
  138. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_compute_face_islands.js +78 -0
  139. package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_edge.d.ts +10 -0
  140. package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_edge.d.ts.map +1 -0
  141. package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_edge.js +48 -0
  142. package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_vertex.d.ts +9 -0
  143. package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_vertex.d.ts.map +1 -0
  144. package/src/core/geom/3d/topology/struct/binary/query/bt_vertex_distance_to_vertex.js +31 -0
  145. package/src/core/geom/3d/topology/struct/prototypeBinaryTopology.js +2 -2
  146. package/src/core/geom/3d/triangle/triangle3_incenter.d.ts +19 -0
  147. package/src/core/geom/3d/triangle/triangle3_incenter.d.ts.map +1 -0
  148. package/src/core/geom/3d/triangle/triangle3_incenter.js +60 -0
  149. package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts +24 -0
  150. package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts.map +1 -0
  151. package/src/core/geom/3d/triangle/{computeTrianglePlaneSide.js → triangle_compute_plane_side.js} +9 -5
  152. package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.js +2 -2
  153. package/src/core/math/hash/lowbias32.d.ts +9 -0
  154. package/src/core/math/hash/lowbias32.d.ts.map +1 -0
  155. package/src/core/math/hash/lowbias32.js +20 -0
  156. package/src/core/process/task/util/iteratorTask.d.ts +2 -2
  157. package/src/core/process/task/util/iteratorTask.d.ts.map +1 -1
  158. package/src/core/process/task/util/iteratorTask.js +3 -3
  159. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
  160. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +4 -4
  161. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +4 -4
  162. package/src/engine/navigation/ecs/components/Path.js +3 -3
  163. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts +4 -4
  164. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  165. package/src/engine/navigation/grid/find_path_on_grid_astar.js +5 -4
  166. package/src/engine/navigation/mesh/NavigationMesh.d.ts +32 -0
  167. package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -0
  168. package/src/engine/navigation/mesh/NavigationMesh.js +190 -0
  169. package/src/engine/navigation/mesh/NavigationMeshAgent.d.ts +9 -0
  170. package/src/engine/navigation/mesh/NavigationMeshAgent.d.ts.map +1 -0
  171. package/src/engine/navigation/mesh/NavigationMeshAgent.js +11 -0
  172. package/src/engine/navigation/mesh/README.md +3 -0
  173. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts +14 -0
  174. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -0
  175. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +203 -0
  176. package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.d.ts +8 -0
  177. package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.d.ts.map +1 -0
  178. package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.js +46 -0
  179. package/src/engine/navigation/mesh/build/enforce_agent_height_clearance.d.ts +12 -0
  180. package/src/engine/navigation/mesh/build/enforce_agent_height_clearance.d.ts.map +1 -0
  181. package/src/engine/navigation/mesh/build/enforce_agent_height_clearance.js +204 -0
  182. package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts +14 -0
  183. package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts.map +1 -0
  184. package/src/engine/navigation/mesh/build/navmesh_build_topology.js +183 -0
  185. package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.d.ts +7 -0
  186. package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.d.ts.map +1 -0
  187. package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.js +64 -0
  188. package/src/engine/navigation/mesh/funnel_string_pull.d.ts +15 -0
  189. package/src/engine/navigation/mesh/funnel_string_pull.d.ts.map +1 -0
  190. package/src/engine/navigation/mesh/funnel_string_pull.js +225 -0
  191. package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.d.ts +0 -14
  192. package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.d.ts.map +0 -1
  193. package/src/core/geom/3d/topology/struct/binary/io/OrderedEdge.d.ts.map +0 -1
  194. package/src/core/geom/3d/topology/struct/binary/io/bt_edge_create.d.ts.map +0 -1
  195. package/src/core/geom/3d/topology/struct/binary/io/bt_edge_get_or_create.d.ts.map +0 -1
  196. package/src/core/geom/3d/topology/struct/binary/io/bt_edge_kill.d.ts.map +0 -1
  197. package/src/core/geom/3d/topology/struct/binary/io/bt_face_kill.d.ts +0 -7
  198. package/src/core/geom/3d/topology/struct/binary/io/bt_face_kill.d.ts.map +0 -1
  199. package/src/core/geom/3d/topology/struct/binary/io/bt_face_kill.js +0 -8
  200. package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.d.ts +0 -11
  201. package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.d.ts.map +0 -1
  202. package/src/core/geom/3d/topology/struct/binary/io/bt_kill_only_edge.d.ts.map +0 -1
  203. package/src/core/geom/3d/topology/struct/binary/io/bt_kill_only_face.d.ts.map +0 -1
  204. package/src/core/geom/3d/topology/struct/binary/io/bt_kill_only_vert.d.ts.map +0 -1
  205. package/src/core/geom/3d/topology/struct/binary/io/bt_merge_verts_by_distance.d.ts +0 -18
  206. package/src/core/geom/3d/topology/struct/binary/io/bt_merge_verts_by_distance.d.ts.map +0 -1
  207. package/src/core/geom/3d/topology/struct/binary/io/bt_merge_verts_by_distance.js +0 -83
  208. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_calc_edges.d.ts.map +0 -1
  209. package/src/core/geom/3d/topology/struct/binary/io/bt_vert_kill.d.ts.map +0 -1
  210. package/src/core/geom/3d/topology/struct/binary/io/get_or_create_edge_map.d.ts.map +0 -1
  211. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.d.ts +0 -9
  212. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.d.ts.map +0 -1
  213. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_other_vertex.d.ts.map +0 -1
  214. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_get_neighbour_faces.d.ts +0 -10
  215. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_get_neighbour_faces.d.ts.map +0 -1
  216. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_get_neighbour_faces.js +0 -44
  217. package/src/core/geom/3d/triangle/computeTrianglePlaneSide.d.ts +0 -20
  218. package/src/core/geom/3d/triangle/computeTrianglePlaneSide.d.ts.map +0 -1
  219. package/src/engine/navigation/__module.d.ts +0 -2
  220. package/src/engine/navigation/__module.d.ts.map +0 -1
  221. package/src/engine/navigation/__module.js +0 -1
  222. /package/src/core/geom/3d/topology/struct/binary/io/{OrderedEdge.d.ts → edge/OrderedEdge.d.ts} +0 -0
  223. /package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_create.d.ts → edge/bt_edge_create.d.ts} +0 -0
  224. /package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_get_or_create.d.ts → edge/bt_edge_get_or_create.d.ts} +0 -0
  225. /package/src/core/geom/3d/topology/struct/binary/io/{bt_edge_kill.d.ts → edge/bt_edge_kill.d.ts} +0 -0
  226. /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_edge.d.ts → edge/bt_kill_only_edge.d.ts} +0 -0
  227. /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_edge.js → edge/bt_kill_only_edge.js} +0 -0
  228. /package/src/core/geom/3d/topology/struct/binary/io/{bt_mesh_calc_edges.d.ts → edge/bt_mesh_calc_edges.d.ts} +0 -0
  229. /package/src/core/geom/3d/topology/struct/binary/io/{get_or_create_edge_map.d.ts → edge/get_or_create_edge_map.d.ts} +0 -0
  230. /package/src/core/geom/3d/topology/struct/binary/io/{get_or_create_edge_map.js → edge/get_or_create_edge_map.js} +0 -0
  231. /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_face.d.ts → face/bt_kill_only_face.d.ts} +0 -0
  232. /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_face.js → face/bt_kill_only_face.js} +0 -0
  233. /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_vert.d.ts → vertex/bt_kill_only_vert.d.ts} +0 -0
  234. /package/src/core/geom/3d/topology/struct/binary/io/{bt_kill_only_vert.js → vertex/bt_kill_only_vert.js} +0 -0
  235. /package/src/core/geom/3d/topology/struct/binary/io/{bt_vert_kill.d.ts → vertex/bt_vert_kill.d.ts} +0 -0
package/README.md CHANGED
@@ -82,7 +82,7 @@ export default defineConfig({
82
82
  ```
83
83
 
84
84
  ### Reliability
85
- * **Tests:** 2,944 handwritten tests covering critical algorithms and complex edge cases.
85
+ * **Tests:** 3,159 handwritten tests covering critical algorithms and complex edge cases.
86
86
 
87
87
  * **Coverage:** 90%+ core coverage.
88
88
 
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Pure JavaScript game engine. Fully featured and production ready.",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.131.47",
8
+ "version": "2.132.0",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"ebvh_optimize_treelet.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_optimize_treelet.js"],"names":[],"mappings":"AAgRA;;;;;;;GAOG;AACH,uDAHW,MAAM,iBACN,MAAM,QA+IhB"}
1
+ {"version":3,"file":"ebvh_optimize_treelet.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_optimize_treelet.js"],"names":[],"mappings":"AAgRA;;;;;;;GAOG;AACH,uDAHW,MAAM,iBACN,MAAM,QAgJhB"}
@@ -117,7 +117,7 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
117
117
  const i_rest = mask_rest * 6;
118
118
 
119
119
  // Merge bounds
120
- min_x = Math.min(scratch_bounds[i_lsb], scratch_bounds[i_rest]);
120
+ min_x = Math.min(scratch_bounds[i_lsb], scratch_bounds[i_rest]);
121
121
  min_y = Math.min(scratch_bounds[i_lsb + 1], scratch_bounds[i_rest + 1]);
122
122
  min_z = Math.min(scratch_bounds[i_lsb + 2], scratch_bounds[i_rest + 2]);
123
123
  max_x = Math.max(scratch_bounds[i_lsb + 3], scratch_bounds[i_rest + 3]);
@@ -128,7 +128,7 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
128
128
  // --- STORE ---
129
129
  const dest_offset = s * 6;
130
130
 
131
- scratch_bounds[dest_offset] = min_x;
131
+ scratch_bounds[dest_offset] = min_x;
132
132
  scratch_bounds[dest_offset + 1] = min_y;
133
133
  scratch_bounds[dest_offset + 2] = min_z;
134
134
  scratch_bounds[dest_offset + 3] = max_x;
@@ -144,7 +144,7 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
144
144
 
145
145
  scratch_areas[s] = area;
146
146
 
147
- if(is_a_leaf){
147
+ if (is_a_leaf) {
148
148
  // Initialize costs of individual leaves
149
149
  scratch_cost[s] = SAH_COST_TRIANGLE * area;
150
150
  }
@@ -285,6 +285,7 @@ export function ebvh_optimize_treelet(
285
285
  ) {
286
286
  assert.isNonNegativeInteger(treelet_size, 'treelet_size');
287
287
  assert.lessThanOrEqual(treelet_size, 8, 'limit is 8');
288
+ assert.isNonNegativeInteger(root, 'root');
288
289
 
289
290
  if (root === NULL_NODE) {
290
291
  // special case
@@ -211,15 +211,15 @@ class LineBuilder {
211
211
  for (let i = 0; i < line_count; i++) {
212
212
  const line = lines[i];
213
213
 
214
- let indentString = '';
214
+ let prefix = '';
215
215
 
216
216
  const indent_count = line.indentation;
217
217
 
218
218
  for (let j = 0; j < indent_count; j++) {
219
- indentString += indent_string;
219
+ prefix += indent_string;
220
220
  }
221
221
 
222
- result.push(indentString + line.text);
222
+ result.push(prefix + line.text);
223
223
  }
224
224
 
225
225
  return result.join('\n');
@@ -85,7 +85,20 @@ export class Uint32Heap {
85
85
  * @returns {boolean}
86
86
  */
87
87
  is_empty(): boolean;
88
+ /**
89
+ * Returns the score of the node with the lowest score
90
+ * @returns {number}
91
+ */
92
+ peek_score(): number;
93
+ /**
94
+ * Returns the ID of the node with the lowest score
95
+ * @returns {number}
96
+ */
88
97
  peek_min(): number;
98
+ /**
99
+ * Removed and returns the ID of the node with the lowest score
100
+ * @returns {number}
101
+ */
89
102
  pop_min(): number;
90
103
  /**
91
104
  *
@@ -133,6 +146,7 @@ export class Uint32Heap {
133
146
  */
134
147
  get_score(id: number): number;
135
148
  /**
149
+ * Insert or update an element, if the element already exists, its score will be updated.
136
150
  *
137
151
  * @param {number} id
138
152
  * @param {number} score
@@ -1 +1 @@
1
- {"version":3,"file":"Uint32Heap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/Uint32Heap.js"],"names":[],"mappings":"AAiDA;;;;;GAKG;AACH;IAGI;;;OAGG;IACH,+BAFW,MAAM,EAkChB;IA7BG,2BAA0E;IAE1E;;;;OAIG;IACH,sBAAwD;IAExD;;;;OAIG;IACH,uBAA0D;IAE1D;;;;OAIG;IACH,mBAAkC;IAElC;;;;OAIG;IACH,eAAe;IAGnB;;;OAGG;IACH,wBAsBC;IAED;;;;;OAKG;IACH,gBAOC;IAED;;;;;OAKG;IACH,aAiBC;IAED;;;OAGG;IACH,kBA6BC;IAED;;;;OAIG;IACH,gBAeC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,YAFa,OAAO,CAInB;IAED,mBAEC;IAED,kBAoBC;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,MAAM,CAmBlB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,cAEC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,OAAO,CAWnB;IAED;;;OAGG;IACH,yBAFW,MAAM,QAehB;IAED;;;;OAIG;IACH,iBAHW,MAAM,SACN,MAAM,QAUhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,SACN,MAAM,QAiBhB;IAED;;;;OAIG;IACH,cAHW,MAAM,GACJ,MAAM,CAYlB;IAGD;;;;OAIG;IACH,qBAHW,MAAM,SACN,MAAM,QAUhB;IAED;;;;OAIG;IACH,WAHW,MAAM,SACN,MAAM,QA0BhB;CAGJ"}
1
+ {"version":3,"file":"Uint32Heap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/Uint32Heap.js"],"names":[],"mappings":"AAiDA;;;;;GAKG;AACH;IAGI;;;OAGG;IACH,+BAFW,MAAM,EAkChB;IA7BG,2BAA0E;IAE1E;;;;OAIG;IACH,sBAAwD;IAExD;;;;OAIG;IACH,uBAA0D;IAE1D;;;;OAIG;IACH,mBAAkC;IAElC;;;;OAIG;IACH,eAAe;IAGnB;;;OAGG;IACH,wBAsBC;IAED;;;;;OAKG;IACH,gBAOC;IAED;;;;;OAKG;IACH,aAiBC;IAED;;;OAGG;IACH,kBA6BC;IAED;;;;OAIG;IACH,gBAeC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,qBAEC;IAED;;;OAGG;IACH,YAFa,OAAO,CAInB;IAED;;;OAGG;IACH,cAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,WAFa,MAAM,CAsBlB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,MAAM,CAmBlB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,cAEC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,OAAO,CAWnB;IAED;;;OAGG;IACH,yBAFW,MAAM,QAehB;IAED;;;;OAIG;IACH,iBAHW,MAAM,SACN,MAAM,QAUhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,SACN,MAAM,QAiBhB;IAED;;;;OAIG;IACH,cAHW,MAAM,GACJ,MAAM,CAYlB;IAGD;;;;;OAKG;IACH,qBAHW,MAAM,SACN,MAAM,QAUhB;IAED;;;;OAIG;IACH,WAHW,MAAM,SACN,MAAM,QA2BhB;CAGJ"}
@@ -251,10 +251,26 @@ export class Uint32Heap {
251
251
  return this.__size === 0;
252
252
  }
253
253
 
254
+ /**
255
+ * Returns the score of the node with the lowest score
256
+ * @returns {number}
257
+ */
258
+ peek_score() {
259
+ return this.__data_float32[1];
260
+ }
261
+
262
+ /**
263
+ * Returns the ID of the node with the lowest score
264
+ * @returns {number}
265
+ */
254
266
  peek_min() {
255
267
  return this.top_id;
256
268
  }
257
269
 
270
+ /**
271
+ * Removed and returns the ID of the node with the lowest score
272
+ * @returns {number}
273
+ */
258
274
  pop_min() {
259
275
  assert.greaterThan(this.__size, 0, 'heap is empty');
260
276
 
@@ -408,6 +424,7 @@ export class Uint32Heap {
408
424
 
409
425
 
410
426
  /**
427
+ * Insert or update an element, if the element already exists, its score will be updated.
411
428
  *
412
429
  * @param {number} id
413
430
  * @param {number} score
@@ -431,6 +448,7 @@ export class Uint32Heap {
431
448
  assert.isNonNegativeInteger(id, 'value');
432
449
  assert.lessThanOrEqual(id, UINT32_MAX - 1, 'must be less than or equal to (2^32 - 2)');
433
450
  assert.isNumber(score, 'score');
451
+ assert.notNaN(score, 'score');
434
452
 
435
453
  const current_size = this.__size;
436
454
 
@@ -1 +1 @@
1
- {"version":3,"file":"HashMap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/map/HashMap.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;GAYG;AACH,uFAIC;AAgGD;;;;;;;;;GASG;AACH;IAsFI;;;;;;OAMG;IACH,4FALuB,MAAM,EAsC5B;IA7HD;;;;;OAKG;IACH,eAAoB;IAEpB;;;;OAIG;IACH,kBAAyB;IAEzB;;;;OAIG;IACH,wBAAoB;IAEpB;;;;OAIG;IACH,wBAAoB;IAEpB;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,oBAAgB;IAEhB;;;;OAIG;IACH,kCAA8B;IAE9B;;;;OAIG;IACH,iCAA6B;IAE7B;;;;OAIG;IACH,qCAAiC;IAEjC;;;;OAIG;IACH,yBAAqB;IAErB;;;;OAIG;IACH,sBAAoC;IAEpC;;;;OAIG;IACH,kBAAc;IAwBV;;;;;OAKG;IACH,iCAAsC;IACtC;;;;;OAKG;IACH,qCAA8C;IAOlD;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IA2CD;;;;;OAKG;IACH,0BAUC;IAuGD;;;;OAIG;IACH,SAHW,CAAC,SACD,CAAC,QA0EX;IAED;;;;OAIG;IACH,SAHW,CAAC,GACC,CAAC,GAAC,SAAS,CA+BvB;IAED;;;;;;;;OAQG;IACH,kBALW,CAAC,kBACQ,CAAC,KAAE,CAAC,0BAEZ,CAAC,CAgBZ;IAED;;;;;OAKG;IACH,cAJW,CAAC,SACD,CAAC,GACA,CAAC,CAaZ;IAwBD;;;;OAIG;IACH,YAHW,CAAC,GACC,OAAO,CA+CnB;IAED;;;;;OAKG;IACH,4CAFa,OAAO,CA+BnB;IAOD;;OAEG;IACH,gBA0DC;IAmBD,2CA0BC;IAED;;;;OAIG;IACH,SAHW,CAAC,GACC,OAAO,CAInB;IAED;;OAEG;IACH,cA6BC;IA+BD;;;OAGG;IACH,WAFa,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAM3B;IAED;;;OAGG;IACH,UAFa,SAAS,CAAC,CAAC,CAOvB;IAED;;;OAGG;IACH,QAFa,SAAS,CAAC,CAAC,CAMvB;IA1DD,yDA2BC;;CAgCJ"}
1
+ {"version":3,"file":"HashMap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/map/HashMap.js"],"names":[],"mappings":"AA+GA;;;;;;;;;GASG;AACH;IAsFI;;;;;;OAMG;IACH,4FALuB,MAAM,EAsC5B;IA7HD;;;;;OAKG;IACH,eAAoB;IAEpB;;;;OAIG;IACH,kBAAyB;IAEzB;;;;OAIG;IACH,wBAAoB;IAEpB;;;;OAIG;IACH,wBAAoB;IAEpB;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,oBAAgB;IAEhB;;;;OAIG;IACH,kCAA8B;IAE9B;;;;OAIG;IACH,iCAA6B;IAE7B;;;;OAIG;IACH,qCAAiC;IAEjC;;;;OAIG;IACH,yBAAqB;IAErB;;;;OAIG;IACH,sBAAoC;IAEpC;;;;OAIG;IACH,kBAAc;IAwBV;;;;;OAKG;IACH,iCAAsC;IACtC;;;;;OAKG;IACH,qCAA8C;IAOlD;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IA2CD;;;;;OAKG;IACH,0BAUC;IAuGD;;;;OAIG;IACH,SAHW,CAAC,SACD,CAAC,QA0EX;IAED;;;;OAIG;IACH,SAHW,CAAC,GACC,CAAC,GAAC,SAAS,CA+BvB;IAED;;;;;;;;OAQG;IACH,kBALW,CAAC,kBACQ,CAAC,KAAE,CAAC,0BAEZ,CAAC,CAgBZ;IAED;;;;;OAKG;IACH,cAJW,CAAC,SACD,CAAC,GACA,CAAC,CAaZ;IAwBD;;;;OAIG;IACH,YAHW,CAAC,GACC,OAAO,CA+CnB;IAED;;;;;OAKG;IACH,4CAFa,OAAO,CA+BnB;IAOD;;OAEG;IACH,gBA0DC;IAmBD,2CA0BC;IAED;;;;OAIG;IACH,SAHW,CAAC,GACC,OAAO,CAInB;IAED;;OAEG;IACH,cA6BC;IA+BD;;;OAGG;IACH,WAFa,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAM3B;IAED;;;OAGG;IACH,UAFa,SAAS,CAAC,CAAC,CAOvB;IAED;;;OAGG;IACH,QAFa,SAAS,CAAC,CAAC,CAMvB;IA1DD,yDA2BC;;CAgCJ"}
@@ -7,6 +7,7 @@ import { invokeObjectEquals } from "../../model/object/invokeObjectEquals.js";
7
7
  import { invokeObjectHash } from "../../model/object/invokeObjectHash.js";
8
8
  import { array_copy } from "../array/array_copy.js";
9
9
  import { UintArrayForCount } from "../array/typed/uint_array_for_count.js";
10
+ import { generate_next_linear_congruential_index } from "./generate_next_linear_congruential_index.js";
10
11
 
11
12
  /*
12
13
  * Heavily inspired by ruby's "new" (circa 2016) hash table implementation
@@ -14,25 +15,6 @@ import { UintArrayForCount } from "../array/typed/uint_array_for_count.js";
14
15
  * @see https://blog.heroku.com/ruby-2-4-features-hashes-integers-rounding#hash-changes
15
16
  */
16
17
 
17
- /**
18
- * Formula: Xn+1 = (a * Xn + c ) % m
19
- *
20
- * According the Hull-Dobell theorem a generator
21
- * "Xnext = (a*Xprev + c) mod m" is a full cycle generator if and only if
22
- * o m and c are relatively prime
23
- * o a-1 is divisible by all prime factors of m
24
- * o a-1 is divisible by 4 if m is divisible by 4.
25
- * For our case a is 5, c is 1, and m is a power of two.
26
- * @param index
27
- * @param mask used to execute division, this is a number equal to (2^K - 1) where 2^K is the size of the "bins" array
28
- * @see https://en.wikipedia.org/wiki/Linear_congruential_generator
29
- */
30
- export function generate_next_linear_congruential_index(index, mask) {
31
- const index5 = (index << 2) + index; // this is just a faster version of index*5
32
-
33
- return (index5 + 1) & mask;
34
- }
35
-
36
18
 
37
19
  /**
38
20
  * @template K,V
@@ -452,7 +434,7 @@ export class HashMap {
452
434
  const raw_hash = this.#build_key_hash(key);
453
435
  let bin_index = this.compute_bin_index(raw_hash);
454
436
 
455
- assert.isFiniteNumber(bin_index, 'hash');
437
+ assert.isFinite(bin_index, 'hash');
456
438
 
457
439
  let first_deleted_bin_index = UNDEFINED_BIN_INDEX;
458
440
 
@@ -900,8 +882,8 @@ export class HashMap {
900
882
  *
901
883
  * @returns {Iterator<[K,V]>}
902
884
  */
903
- * entries(){
904
- for (const e of this){
885
+ * entries() {
886
+ for (const e of this) {
905
887
  yield e;
906
888
  }
907
889
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Formula: Xn+1 = (a * Xn + c ) % m
3
+ *
4
+ * According the Hull-Dobell theorem a generator
5
+ * "Xnext = (a*Xprev + c) mod m" is a full cycle generator if and only if
6
+ * o m and c are relatively prime
7
+ * o a-1 is divisible by all prime factors of m
8
+ * o a-1 is divisible by 4 if m is divisible by 4.
9
+ * For our case a is 5, c is 1, and m is a power of two.
10
+ * @param {number} index
11
+ * @param {number} mask used to execute division, this is a number equal to (2^K - 1) where 2^K is the size of the "bins" array
12
+ * @see https://en.wikipedia.org/wiki/Linear_congruential_generator
13
+ */
14
+ export function generate_next_linear_congruential_index(index: number, mask: number): number;
15
+ //# sourceMappingURL=generate_next_linear_congruential_index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate_next_linear_congruential_index.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/map/generate_next_linear_congruential_index.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,+DAJW,MAAM,QACN,MAAM,UAOhB"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Formula: Xn+1 = (a * Xn + c ) % m
3
+ *
4
+ * According the Hull-Dobell theorem a generator
5
+ * "Xnext = (a*Xprev + c) mod m" is a full cycle generator if and only if
6
+ * o m and c are relatively prime
7
+ * o a-1 is divisible by all prime factors of m
8
+ * o a-1 is divisible by 4 if m is divisible by 4.
9
+ * For our case a is 5, c is 1, and m is a power of two.
10
+ * @param {number} index
11
+ * @param {number} mask used to execute division, this is a number equal to (2^K - 1) where 2^K is the size of the "bins" array
12
+ * @see https://en.wikipedia.org/wiki/Linear_congruential_generator
13
+ */
14
+ export function generate_next_linear_congruential_index(index, mask) {
15
+ const index5 = (index << 2) + index; // this is just a faster version of index*5
16
+
17
+ return (index5 + 1) & mask;
18
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"line3_compute_nearest_point_to_point.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_nearest_point_to_point.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,6DAZW,MAAM,EAAE,iBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,QAkChB"}
1
+ {"version":3,"file":"line3_compute_nearest_point_to_point.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_nearest_point_to_point.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,6DAZW,MAAM,EAAE,iBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,QAkBhB"}
@@ -1,5 +1,5 @@
1
- import { clamp01 } from "../../../math/clamp01.js";
2
- import { v3_dot } from "../../vec3/v3_dot.js";
1
+ import { lerp } from "../../../math/lerp.js";
2
+ import { line3_compute_segment_nearest_point_to_point_t } from "./line3_compute_segment_nearest_point_to_point_t.js";
3
3
 
4
4
  /**
5
5
  *
@@ -22,29 +22,13 @@ export function line3_compute_nearest_point_to_point(
22
22
  ref_x, ref_y, ref_z
23
23
  ) {
24
24
 
25
- const direction_x = bx - ax;
26
- const direction_y = by - ay;
27
- const direction_z = bz - az;
25
+ const t = line3_compute_segment_nearest_point_to_point_t(
26
+ ax, ay, az,
27
+ bx, by, bz,
28
+ ref_x, ref_y, ref_z
29
+ );
28
30
 
29
- // find the closest point
30
- const sp0_x = ref_x - ax;
31
- const sp0_y = ref_y - ay;
32
- const sp0_z = ref_z - az;
33
-
34
- //
35
- const d2 = v3_dot(direction_x, direction_y, direction_z, direction_x, direction_y, direction_z);
36
- const d3 = v3_dot(direction_x, direction_y, direction_z, sp0_x, sp0_y, sp0_z);
37
-
38
- const t = d3 / d2;
39
-
40
- const t_clamped = clamp01(t);
41
-
42
- // compute point on the line
43
- const lp_x = direction_x * t_clamped + ax;
44
- const lp_y = direction_y * t_clamped + ay;
45
- const lp_z = direction_z * t_clamped + az;
46
-
47
- result[result_offset + 0] = lp_x;
48
- result[result_offset + 1] = lp_y;
49
- result[result_offset + 2] = lp_z;
31
+ result[result_offset + 0] = lerp(ax, bx, t);
32
+ result[result_offset + 1] = lerp(ay, by, t);
33
+ result[result_offset + 2] = lerp(az, bz, t);
50
34
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Computes parameter t for the nearest point on the line segment to the given point.
3
+ *
4
+ * t is clamped to [0, 1] and represents position along the line segment from v0 to v1.
5
+ *
6
+ * @param {number} x0
7
+ * @param {number} y0
8
+ * @param {number} z0
9
+ * @param {number} x1
10
+ * @param {number} y1
11
+ * @param {number} z1
12
+ * @param {number} px
13
+ * @param {number} py
14
+ * @param {number} pz
15
+ * @returns {number}
16
+ * @see line3_compute_segment_point_distance_sqr
17
+ */
18
+ export function line3_compute_segment_nearest_point_to_point_t(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
19
+ //# sourceMappingURL=line3_compute_segment_nearest_point_to_point_t.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line3_compute_segment_nearest_point_to_point_t.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,mEAZW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CA+BlB"}
@@ -0,0 +1,48 @@
1
+ import { clamp01 } from "../../../math/clamp01.js";
2
+
3
+ /**
4
+ * Computes parameter t for the nearest point on the line segment to the given point.
5
+ *
6
+ * t is clamped to [0, 1] and represents position along the line segment from v0 to v1.
7
+ *
8
+ * @param {number} x0
9
+ * @param {number} y0
10
+ * @param {number} z0
11
+ * @param {number} x1
12
+ * @param {number} y1
13
+ * @param {number} z1
14
+ * @param {number} px
15
+ * @param {number} py
16
+ * @param {number} pz
17
+ * @returns {number}
18
+ * @see line3_compute_segment_point_distance_sqr
19
+ */
20
+ export function line3_compute_segment_nearest_point_to_point_t(
21
+ x0, y0, z0,
22
+ x1, y1, z1,
23
+ px, py, pz
24
+ ) {
25
+ // get line delta
26
+ const line_delta_x = x1 - x0;
27
+ const line_delta_y = y1 - y0;
28
+ const line_delta_z = z1 - z0;
29
+
30
+ // find closest point
31
+ const sp0_x = px - x0;
32
+ const sp0_y = py - y0;
33
+ const sp0_z = pz - z0;
34
+
35
+ //
36
+ const d2 = line_delta_x * line_delta_x + line_delta_y * line_delta_y + line_delta_z * line_delta_z;
37
+
38
+ if (d2 === 0) {
39
+ // line is a point
40
+ return 0;
41
+ }
42
+
43
+ const d3 = line_delta_x * sp0_x + line_delta_y * sp0_y + line_delta_z * sp0_z;
44
+
45
+ const t = clamp01(d3 / d2);
46
+
47
+ return t;
48
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ *
3
+ * @param {number} x0
4
+ * @param {number} y0
5
+ * @param {number} z0
6
+ * @param {number} x1
7
+ * @param {number} y1
8
+ * @param {number} z1
9
+ * @param {number} px
10
+ * @param {number} py
11
+ * @param {number} pz
12
+ * @returns {number}
13
+ */
14
+ export function line3_compute_segment_point_distance(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
15
+ //# sourceMappingURL=line3_compute_segment_point_distance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line3_compute_segment_point_distance.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,yDAXW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAUlB"}
@@ -0,0 +1,24 @@
1
+ import { line3_compute_segment_point_distance_sqr } from "./line3_compute_segment_point_distance_sqr.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number} x0
6
+ * @param {number} y0
7
+ * @param {number} z0
8
+ * @param {number} x1
9
+ * @param {number} y1
10
+ * @param {number} z1
11
+ * @param {number} px
12
+ * @param {number} py
13
+ * @param {number} pz
14
+ * @returns {number}
15
+ */
16
+ export function line3_compute_segment_point_distance(
17
+ x0, y0, z0,
18
+ x1, y1, z1,
19
+ px, py, pz
20
+ ) {
21
+ const d2 = line3_compute_segment_point_distance_sqr(x0, y0, z0, x1, y1, z1, px, py, pz);
22
+
23
+ return Math.sqrt(d2);
24
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ *
3
+ * @param {number} d0 distance at v0
4
+ * @param {number} d1 distance at v1
5
+ * @param {number} x0 X coordinate of v0
6
+ * @param {number} y0 Y coordinate of v0
7
+ * @param {number} z0 Z coordinate of v0
8
+ * @param {number} x1 X coordinate of v1
9
+ * @param {number} y1 Y coordinate of v1
10
+ * @param {number} z1 Z coordinate of v1
11
+ * @param {number} px X coordinate of reference point
12
+ * @param {number} py Y coordinate of reference point
13
+ * @param {number} pz Z coordinate of reference point
14
+ * @returns {number} The exact geodesic distance
15
+ */
16
+ export function line3_compute_segment_point_distance_eikonal(d0: number, d1: number, x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
17
+ //# sourceMappingURL=line3_compute_segment_point_distance_eikonal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line3_compute_segment_point_distance_eikonal.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,iEAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAiFlB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ *
3
+ * @param {number} d0 distance at v0
4
+ * @param {number} d1 distance at v1
5
+ * @param {number} x0 X coordinate of v0
6
+ * @param {number} y0 Y coordinate of v0
7
+ * @param {number} z0 Z coordinate of v0
8
+ * @param {number} x1 X coordinate of v1
9
+ * @param {number} y1 Y coordinate of v1
10
+ * @param {number} z1 Z coordinate of v1
11
+ * @param {number} px X coordinate of reference point
12
+ * @param {number} py Y coordinate of reference point
13
+ * @param {number} pz Z coordinate of reference point
14
+ * @returns {number} The exact geodesic distance
15
+ */
16
+ export function line3_compute_segment_point_distance_eikonal(
17
+ d0, d1,
18
+ x0, y0, z0,
19
+ x1, y1, z1,
20
+ px, py, pz
21
+ ) {
22
+ // 2. Map to 2D Local Coordinate System
23
+ // A (v0) is origin (0,0), B (v1) is (L, 0)
24
+ const ab_x = x1 - x0;
25
+ const ab_y = y1 - y0;
26
+ const ab_z = z1 - z0;
27
+ const L = Math.hypot(ab_x, ab_y, ab_z);
28
+
29
+ if (L < 1e-9) return Math.min(d0, d1);
30
+
31
+ // Vector AC
32
+ const ac_x = px - x0;
33
+ const ac_y = py - y0;
34
+ const ac_z = pz - z0;
35
+
36
+ // Project AC onto AB to find x coordinate of C
37
+ const dot = ac_x * ab_x + ac_y * ab_y + ac_z * ab_z;
38
+ const x = dot / L;
39
+
40
+ // Find height (y coordinate) of C
41
+ const ac_sq_len = ac_x * ac_x + ac_y * ac_y + ac_z * ac_z;
42
+ const y_sq = ac_sq_len - x * x;
43
+ const y = y_sq > 0 ? Math.sqrt(y_sq) : 0;
44
+
45
+ // 3. Prepare for Eikonal Update
46
+ let u0 = d0;
47
+ let u1 = d1;
48
+ let x_local = x;
49
+
50
+ // We need to track which vertex corresponds to u0 for fallback logic
51
+ let dist_to_u0_vertex_sq = ac_sq_len;
52
+
53
+ // Mirror if d1 < d0 to ensure u0 <= u1
54
+ if (d1 < d0) {
55
+ u0 = d1;
56
+ u1 = d0;
57
+ x_local = L - x;
58
+ // If u0 is now v1, we need distance from v1 to C (BC squared)
59
+ // BC^2 = AC^2 + L^2 - 2 * AC * AB_normalized (Law of Cosines / Vector arithmetic)
60
+ // Or simply recalculate:
61
+ const bc_x = px - x1;
62
+ const bc_y = py - y1;
63
+ const bc_z = pz - z1;
64
+ dist_to_u0_vertex_sq = bc_x * bc_x + bc_y * bc_y + bc_z * bc_z;
65
+ }
66
+
67
+ const u = u1 - u0;
68
+
69
+ // 4. Causality & Consistency Checks
70
+
71
+ // Lipschitz / Gradient limit check
72
+ if (u >= L) {
73
+ // FIX: Use the distance to the vertex associated with u0 (the smaller value)
74
+ return u0 + Math.sqrt(dist_to_u0_vertex_sq);
75
+ }
76
+
77
+ // "Virtual Source" Direction check
78
+ const p = u;
79
+ const q = L;
80
+ const det = q * q - p * p;
81
+ const det_sqrt = Math.sqrt(Math.max(0, det));
82
+ const coef = p / det_sqrt;
83
+ const s = x_local - y * coef; // Intersection with x-axis
84
+
85
+ if (s > 0) {
86
+ // 5. Valid Eikonal Update
87
+ return u0 + (p * x_local + y * det_sqrt) / q;
88
+ } else {
89
+ // 6. Fallback (The path comes strictly from one of the vertices)
90
+ const dist_to_v0 = Math.sqrt(ac_sq_len);
91
+ // Recalculate dist_to_v1 explicitly to be safe
92
+ const dist_to_v1 = Math.hypot(px - x1, py - y1, pz - z1);
93
+ return Math.min(d0 + dist_to_v0, d1 + dist_to_v1);
94
+ }
95
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Computes the shortest distance squared between a line segment defined by 2 points and another point
3
+ * @param {number} x0
4
+ * @param {number} y0
5
+ * @param {number} z0
6
+ * @param {number} x1
7
+ * @param {number} y1
8
+ * @param {number} z1
9
+ * @param {number} px
10
+ * @param {number} py
11
+ * @param {number} pz
12
+ * @returns {number}
13
+ * @see line3_compute_segment_nearest_point_to_point_t
14
+ */
15
+ export function line3_compute_segment_point_distance_sqr(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, px: number, py: number, pz: number): number;
16
+ //# sourceMappingURL=line3_compute_segment_point_distance_sqr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line3_compute_segment_point_distance_sqr.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,6DAZW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAsClB"}
@@ -1,8 +1,9 @@
1
- import { v3_distance_sqr } from "../../vec3/v3_distance_sqr.js";
2
1
  import { clamp01 } from "../../../math/clamp01.js";
2
+ import { v3_distance_sqr } from "../../vec3/v3_distance_sqr.js";
3
+ import { line3_compute_segment_nearest_point_to_point_t } from "./line3_compute_segment_nearest_point_to_point_t.js";
3
4
 
4
5
  /**
5
- * Computes shortest distance between a line segment(defined by 2 points) and a point
6
+ * Computes the shortest distance squared between a line segment defined by 2 points and another point
6
7
  * @param {number} x0
7
8
  * @param {number} y0
8
9
  * @param {number} z0
@@ -12,8 +13,15 @@ import { clamp01 } from "../../../math/clamp01.js";
12
13
  * @param {number} px
13
14
  * @param {number} py
14
15
  * @param {number} pz
16
+ * @returns {number}
17
+ * @see line3_compute_segment_nearest_point_to_point_t
15
18
  */
16
- export function line3_computeSegmentPointDistance_sqr(x0, y0, z0, x1, y1, z1, px, py, pz) {
19
+ export function line3_compute_segment_point_distance_sqr(
20
+ x0, y0, z0,
21
+ x1, y1, z1,
22
+ px, py, pz
23
+ ) {
24
+
17
25
  // get line delta
18
26
  const line_delta_x = x1 - x0;
19
27
  const line_delta_y = y1 - y0;
@@ -27,6 +35,11 @@ export function line3_computeSegmentPointDistance_sqr(x0, y0, z0, x1, y1, z1, px
27
35
  //
28
36
  const d2 = line_delta_x * line_delta_x + line_delta_y * line_delta_y + line_delta_z * line_delta_z;
29
37
 
38
+ if (d2 === 0) {
39
+ // line is a point
40
+ return v3_distance_sqr(px, py, pz, x0, y0, z0);
41
+ }
42
+
30
43
  const d3 = line_delta_x * sp0_x + line_delta_y * sp0_y + line_delta_z * sp0_z;
31
44
 
32
45
  const t = clamp01(d3 / d2);
@@ -1 +1 @@
1
- {"version":3,"file":"plane3_matrix4_project.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/plane/plane3_matrix4_project.js"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,oDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,sBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,KAClC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAiBhB"}
1
+ {"version":3,"file":"plane3_matrix4_project.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/plane/plane3_matrix4_project.js"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,oDARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,sBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,KAClC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAiBhB"}
@@ -1,6 +1,5 @@
1
1
  import { v3_dot_array_array } from "../../vec3/v3_dot_array_array.js";
2
2
  import { v3_matrix4_multiply } from "../../vec3/v3_matrix4_multiply.js";
3
- import { v3_matrix4_rotate } from "../../vec3/v3_matrix4_rotate.js";
4
3
  import { v3_matrix4_rotate_normal } from "../../vec3/v3_matrix4_rotate_normal.js";
5
4
  import { v3_multiply_scalar } from "../../vec3/v3_multiply_scalar.js";
6
5
 
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Triangulated mesh graph.
3
+ * @see BinaryTopology
4
+ */
1
5
  export class TopoMesh {
2
6
  /**
3
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"TopoMesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/struct/TopoMesh.js"],"names":[],"mappings":"AAcA;IAEI;;;OAGG;IACH,UAFU,UAAU,EAAE,CAER;IAEd;;;;OAIG;IACH,gBAAoB;IAGpB;;;;OAIG;IACH,gBAAoB;IAEpB;;;;OAIG;IACH,uBAkBC;IAED;;;OAGG;IACH,YAFa,IAAI,QAAQ,CAAC,CAIzB;IAED;;;OAGG;IACH,YAFa,IAAI,YAAY,CAAC,CAI7B;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACL,SAAS,GAAC,YAAY,CAYjC;IAED;;;;OAIG;IACH,wCAFa,OAAO,CA0GnB;IAED,kBAMC;IAED;;;OAGG;IACH,sBAFa,IAAI,MAAM,EAAE,UAAU,CAAC,CAoBnC;IAED;;;;OAIG;IACH,yBAHW,QAAQ,cACR,IAAI,MAAM,EAAE,UAAU,CAAC,QAYjC;IAED;;;;OAIG;IACH,kBAHW,YAAY,cACZ,IAAI,MAAM,EAAC,UAAU,CAAC,QAqChC;IAED;;;;OAIG;IACH,qBAFW,YAAY,QAsBtB;IAED;;;OAGG;IACH,WAFW,QAAQ,QAclB;IAED;;;OAGG;IACH,aAFW,UAAU,QAKpB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAMpB;IAED;;;OAGG;IACH,gBAFW,UAAU,QAIpB;IAED;;;;OAIG;IACH,kBAHW,UAAU,GACR,OAAO,CAKnB;IAGD;;;OAGG;IACH,WAFW,QAAQ,QAKlB;IAED;;;OAGG;IACH,iBAFW,QAAQ,QAMlB;IAED;;;OAGG;IACH,cAFW,QAAQ,QAIlB;IAED;;;;OAIG;IACH,gBAHW,QAAQ,GACN,OAAO,CAKnB;IAED;;;OAGG;IACH,WAFW,YAAY,QAUtB;IAED;;;OAGG;IACH,uBAFW,SAAS,YAAY,CAAC,QAMhC;IAED;;;OAGG;IACH,cAFW,YAAY,QAwBtB;IAED;;;OAGG;IACH,cAFW,YAAY,QAItB;IAED;;;;OAIG;IACH,gBAHW,YAAY,GACV,OAAO,CAKnB;IAED;;;;;;OAMG;IACH,cALW,UAAU,KACV,UAAU,GAER,QAAQ,CAoCpB;IAED,mBAsCC;IAED,kCAQC;IAED;;;OAGG;IACH,+BAFW,YAAY,QA6BtB;IAED;;;OAGG;IACH,8BAFW,WAAW,GAAC,WAAW,GAAC,MAAM,EAAE,QA4B1C;IAED,0BAiBC;IAED;;;;OAIG;IACH,gBAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,UAClC,WAAW,GAAC,WAAW,GAAC,UAAU,GAAC,MAAM,EAAE,QAYrD;IAED;;;;;;;OAOG;IACH,sBANW,MAAM,MACN,UAAU,MACV,UAAU,MACV,UAAU,GACR,YAAY,CA0BxB;IAED,mBAEC;IAIL;;;OAGG;IACH,qBAFU,OAAO,CAEY;CAP5B;2BAlsB0B,iBAAiB;yBAFnB,eAAe;6BACX,mBAAmB;qBAR3B,8BAA8B"}
1
+ {"version":3,"file":"TopoMesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/topology/struct/TopoMesh.js"],"names":[],"mappings":"AAcA;;;GAGG;AACH;IAEI;;;OAGG;IACH,UAFU,UAAU,EAAE,CAER;IAEd;;;;OAIG;IACH,gBAAoB;IAGpB;;;;OAIG;IACH,gBAAoB;IAEpB;;;;OAIG;IACH,uBAkBC;IAED;;;OAGG;IACH,YAFa,IAAI,QAAQ,CAAC,CAIzB;IAED;;;OAGG;IACH,YAFa,IAAI,YAAY,CAAC,CAI7B;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACL,SAAS,GAAC,YAAY,CAYjC;IAED;;;;OAIG;IACH,wCAFa,OAAO,CA0GnB;IAED,kBAMC;IAED;;;OAGG;IACH,sBAFa,IAAI,MAAM,EAAE,UAAU,CAAC,CAoBnC;IAED;;;;OAIG;IACH,yBAHW,QAAQ,cACR,IAAI,MAAM,EAAE,UAAU,CAAC,QAYjC;IAED;;;;OAIG;IACH,kBAHW,YAAY,cACZ,IAAI,MAAM,EAAC,UAAU,CAAC,QAqChC;IAED;;;;OAIG;IACH,qBAFW,YAAY,QAsBtB;IAED;;;OAGG;IACH,WAFW,QAAQ,QAclB;IAED;;;OAGG;IACH,aAFW,UAAU,QAKpB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAMpB;IAED;;;OAGG;IACH,gBAFW,UAAU,QAIpB;IAED;;;;OAIG;IACH,kBAHW,UAAU,GACR,OAAO,CAKnB;IAGD;;;OAGG;IACH,WAFW,QAAQ,QAKlB;IAED;;;OAGG;IACH,iBAFW,QAAQ,QAMlB;IAED;;;OAGG;IACH,cAFW,QAAQ,QAIlB;IAED;;;;OAIG;IACH,gBAHW,QAAQ,GACN,OAAO,CAKnB;IAED;;;OAGG;IACH,WAFW,YAAY,QAUtB;IAED;;;OAGG;IACH,uBAFW,SAAS,YAAY,CAAC,QAMhC;IAED;;;OAGG;IACH,cAFW,YAAY,QAwBtB;IAED;;;OAGG;IACH,cAFW,YAAY,QAItB;IAED;;;;OAIG;IACH,gBAHW,YAAY,GACV,OAAO,CAKnB;IAED;;;;;;OAMG;IACH,cALW,UAAU,KACV,UAAU,GAER,QAAQ,CAoCpB;IAED,mBAsCC;IAED,kCAQC;IAED;;;OAGG;IACH,+BAFW,YAAY,QA6BtB;IAED;;;OAGG;IACH,8BAFW,WAAW,GAAC,WAAW,GAAC,MAAM,EAAE,QA4B1C;IAED,0BAiBC;IAED;;;;OAIG;IACH,gBAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,UAClC,WAAW,GAAC,WAAW,GAAC,UAAU,GAAC,MAAM,EAAE,QAYrD;IAED;;;;;;;OAOG;IACH,sBANW,MAAM,MACN,UAAU,MACV,UAAU,MACV,UAAU,GACR,YAAY,CA0BxB;IAED,mBAEC;IAIL;;;OAGG;IACH,qBAFU,OAAO,CAEY;CAP5B;2BAtsB0B,iBAAiB;yBAFnB,eAAe;6BACX,mBAAmB;qBAR3B,8BAA8B"}