@woosh/meep-engine 2.163.11 → 2.164.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 (1787) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +45 -0
  3. package/editor/ecs/component/prototypeObjectEditor.js +3 -0
  4. package/editor/tools/v2/BlenderCameraOrientationGizmo.js +2 -2
  5. package/editor/view/node-graph/connection_wire_geometry.js +2 -2
  6. package/package.json +1 -1
  7. package/src/core/bvh2/binary/2/BinaryUint32BVH.js +2 -2
  8. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
  9. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +2 -4
  10. package/src/core/bvh2/bvh3/BVH.d.ts +388 -55
  11. package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
  12. package/src/core/bvh2/bvh3/BVH.js +11 -5
  13. package/src/core/bvh2/bvh3/BvhClient.d.ts +31 -11
  14. package/src/core/bvh2/bvh3/bvh_build_from_unindexed_triangles.d.ts.map +1 -0
  15. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +2 -2
  16. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.d.ts.map +1 -1
  17. package/src/core/bvh2/bvh3/ebvh_build_hierarchy.js +8 -0
  18. package/src/core/bvh2/bvh3/ebvh_geometry_query_any_triangle_ray.d.ts +22 -0
  19. package/src/core/bvh2/bvh3/ebvh_geometry_query_any_triangle_ray.d.ts.map +1 -0
  20. package/src/core/bvh2/bvh3/ebvh_geometry_query_any_triangle_ray.js +149 -0
  21. package/src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.d.ts +5 -2
  22. package/src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.d.ts.map +1 -1
  23. package/src/core/bvh2/bvh3/ebvh_geometry_query_nearest_triangle_ray.js +16 -10
  24. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
  25. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +19 -6
  26. package/src/core/bvh2/bvh3/ebvh_sort_for_traversal_depth_first.d.ts +14 -3
  27. package/src/core/bvh2/bvh3/ebvh_sort_for_traversal_depth_first.d.ts.map +1 -1
  28. package/src/core/bvh2/bvh3/ebvh_sort_for_traversal_depth_first.js +96 -116
  29. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts +3 -3
  30. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.d.ts.map +1 -1
  31. package/src/core/bvh2/bvh3/query/backtracking/bvh_backtracking_query_leaves_ray.js +3 -3
  32. package/src/core/bvh2/bvh3/query/bvh_query_depth_range_in_frustum.js +2 -2
  33. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.d.ts +12 -5
  34. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.d.ts.map +1 -1
  35. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.js +11 -4
  36. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.d.ts +3 -3
  37. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.d.ts.map +1 -1
  38. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.js +3 -3
  39. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray_segment.d.ts +3 -3
  40. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray_segment.d.ts.map +1 -1
  41. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray_segment.js +3 -3
  42. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.d.ts +12 -5
  43. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.d.ts.map +1 -1
  44. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.js +11 -4
  45. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.d.ts +9 -0
  46. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.d.ts.map +1 -0
  47. package/src/core/bvh2/bvh3/query/{bvh_query_user_data_overlaps_aabb.js → bvh_query_user_data_intersects_aabb.js} +1 -1
  48. package/src/core/bvh2/bvh3/query/{bvh_query_user_data_overlaps_capsule.d.ts → bvh_query_user_data_intersects_capsule.d.ts} +4 -4
  49. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_capsule.d.ts.map +1 -0
  50. package/src/core/bvh2/bvh3/query/{bvh_query_user_data_overlaps_capsule.js → bvh_query_user_data_intersects_capsule.js} +3 -3
  51. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_frustum.d.ts +9 -0
  52. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_frustum.d.ts.map +1 -0
  53. package/src/core/bvh2/bvh3/query/{bvh_query_user_data_overlaps_frustum.js → bvh_query_user_data_intersects_frustum.js} +3 -3
  54. package/src/core/bvh2/bvh3/query/{bvh_query_user_data_overlaps_sphere.d.ts → bvh_query_user_data_intersects_sphere.d.ts} +2 -2
  55. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_sphere.d.ts.map +1 -0
  56. package/src/core/bvh2/bvh3/query/{bvh_query_user_data_overlaps_sphere.js → bvh_query_user_data_intersects_sphere.js} +1 -1
  57. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts +23 -0
  58. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts.map +1 -0
  59. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.js +86 -0
  60. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.d.ts +3 -3
  61. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.d.ts.map +1 -1
  62. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray.js +3 -3
  63. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray_segment.d.ts +3 -3
  64. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray_segment.d.ts.map +1 -1
  65. package/src/core/bvh2/bvh3/query/bvh_query_user_data_ray_segment.js +3 -3
  66. package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.js +2 -2
  67. package/src/core/bvh8/bvh8_node_child_surface_area.js +2 -2
  68. package/src/core/bvh8/bvh8_quality.js +2 -2
  69. package/src/core/collection/SCRATCH_UINT32_TRAVERSAL_STACK.d.ts +12 -0
  70. package/src/core/collection/SCRATCH_UINT32_TRAVERSAL_STACK.d.ts.map +1 -1
  71. package/src/core/collection/SCRATCH_UINT32_TRAVERSAL_STACK.js +12 -0
  72. package/src/core/collection/heap/IndexedFloatMinHeap.d.ts +62 -0
  73. package/src/core/collection/heap/IndexedFloatMinHeap.d.ts.map +1 -0
  74. package/src/core/collection/heap/IndexedFloatMinHeap.js +268 -0
  75. package/src/core/color/tonemap/tonemap_aces.d.ts +21 -0
  76. package/src/core/color/tonemap/tonemap_aces.d.ts.map +1 -0
  77. package/src/core/color/tonemap/tonemap_aces.js +41 -0
  78. package/src/core/geom/2d/Rectangle.js +2 -2
  79. package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
  80. package/src/core/geom/2d/aabb/AABB2.js +11 -13
  81. package/src/core/geom/2d/aabb/aabb2_area.d.ts +10 -0
  82. package/src/core/geom/2d/aabb/aabb2_area.d.ts.map +1 -0
  83. package/src/core/geom/2d/aabb/aabb2_area.js +14 -0
  84. package/src/core/geom/2d/aabb/aabb2_array_combine.d.ts +4 -8
  85. package/src/core/geom/2d/aabb/aabb2_array_combine.d.ts.map +1 -1
  86. package/src/core/geom/2d/aabb/aabb2_array_combine.js +7 -35
  87. package/src/core/geom/2d/aabb/aabb2_center_from_aabb2_buffer.d.ts +8 -0
  88. package/src/core/geom/2d/aabb/aabb2_center_from_aabb2_buffer.d.ts.map +1 -0
  89. package/src/core/geom/2d/aabb/aabb2_center_from_aabb2_buffer.js +24 -0
  90. package/src/core/geom/2d/aabb/aabb2_compute_area.d.ts +4 -7
  91. package/src/core/geom/2d/aabb/aabb2_compute_area.d.ts.map +1 -1
  92. package/src/core/geom/2d/aabb/aabb2_compute_area.js +7 -14
  93. package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts +4 -5
  94. package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts.map +1 -1
  95. package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.js +7 -24
  96. package/src/core/geom/2d/aabb/aabb2_compute_intersection.d.ts +15 -0
  97. package/src/core/geom/2d/aabb/aabb2_compute_intersection.d.ts.map +1 -0
  98. package/src/core/geom/2d/aabb/aabb2_compute_intersection.js +42 -0
  99. package/src/core/geom/2d/aabb/aabb2_compute_overlap.d.ts +4 -12
  100. package/src/core/geom/2d/aabb/aabb2_compute_overlap.d.ts.map +1 -1
  101. package/src/core/geom/2d/aabb/aabb2_compute_overlap.js +7 -42
  102. package/src/core/geom/2d/aabb/aabb2_contains_point.d.ts +12 -0
  103. package/src/core/geom/2d/aabb/aabb2_contains_point.d.ts.map +1 -0
  104. package/src/core/geom/2d/aabb/aabb2_contains_point.js +17 -0
  105. package/src/core/geom/2d/aabb/aabb2_from_rectangle.d.ts +8 -0
  106. package/src/core/geom/2d/aabb/aabb2_from_rectangle.d.ts.map +1 -0
  107. package/src/core/geom/2d/aabb/aabb2_from_rectangle.js +29 -0
  108. package/src/core/geom/2d/aabb/aabb2_from_v2_array.d.ts +4 -5
  109. package/src/core/geom/2d/aabb/aabb2_from_v2_array.d.ts.map +1 -1
  110. package/src/core/geom/2d/aabb/aabb2_from_v2_array.js +7 -33
  111. package/src/core/geom/2d/aabb/aabb2_from_v2_buffer.d.ts +8 -0
  112. package/src/core/geom/2d/aabb/aabb2_from_v2_buffer.d.ts.map +1 -0
  113. package/src/core/geom/2d/aabb/aabb2_from_v2_buffer.js +33 -0
  114. package/src/core/geom/2d/aabb/aabb2_intersects_aabb2.d.ts +14 -0
  115. package/src/core/geom/2d/aabb/aabb2_intersects_aabb2.d.ts.map +1 -0
  116. package/src/core/geom/2d/aabb/aabb2_intersects_aabb2.js +21 -0
  117. package/src/core/geom/2d/aabb/aabb2_intersects_point.d.ts +4 -9
  118. package/src/core/geom/2d/aabb/aabb2_intersects_point.d.ts.map +1 -1
  119. package/src/core/geom/2d/aabb/aabb2_intersects_point.js +7 -17
  120. package/src/core/geom/2d/aabb/aabb2_overlap_exists.d.ts +4 -11
  121. package/src/core/geom/2d/aabb/aabb2_overlap_exists.d.ts.map +1 -1
  122. package/src/core/geom/2d/aabb/aabb2_overlap_exists.js +7 -21
  123. package/src/core/geom/2d/aabb/aabb2_union_array.d.ts +11 -0
  124. package/src/core/geom/2d/aabb/aabb2_union_array.d.ts.map +1 -0
  125. package/src/core/geom/2d/aabb/aabb2_union_array.js +35 -0
  126. package/src/core/geom/2d/bvh/BVH2D.js +5 -5
  127. package/src/core/geom/2d/circle/circle_compute_circle_intersection.d.ts +4 -11
  128. package/src/core/geom/2d/circle/circle_compute_circle_intersection.d.ts.map +1 -1
  129. package/src/core/geom/2d/circle/circle_compute_circle_intersection.js +7 -64
  130. package/src/core/geom/2d/circle/circle_compute_circle_penetration.d.ts +4 -9
  131. package/src/core/geom/2d/circle/circle_compute_circle_penetration.d.ts.map +1 -1
  132. package/src/core/geom/2d/circle/circle_compute_circle_penetration.js +7 -32
  133. package/src/core/geom/2d/circle/circle_compute_intersection.d.ts +14 -0
  134. package/src/core/geom/2d/circle/circle_compute_intersection.d.ts.map +1 -0
  135. package/src/core/geom/2d/circle/circle_compute_intersection.js +64 -0
  136. package/src/core/geom/2d/circle/circle_compute_penetration.d.ts +12 -0
  137. package/src/core/geom/2d/circle/circle_compute_penetration.d.ts.map +1 -0
  138. package/src/core/geom/2d/circle/circle_compute_penetration.js +32 -0
  139. package/src/core/geom/2d/circle/circle_contains_point.d.ts +11 -0
  140. package/src/core/geom/2d/circle/circle_contains_point.d.ts.map +1 -0
  141. package/src/core/geom/2d/circle/circle_contains_point.js +16 -0
  142. package/src/core/geom/2d/circle/circle_intersects_point.d.ts +4 -8
  143. package/src/core/geom/2d/circle/circle_intersects_point.d.ts.map +1 -1
  144. package/src/core/geom/2d/circle/circle_intersects_point.js +7 -16
  145. package/src/core/geom/2d/compute_polygon_area_2d.d.ts +4 -5
  146. package/src/core/geom/2d/compute_polygon_area_2d.d.ts.map +1 -1
  147. package/src/core/geom/2d/compute_polygon_area_2d.js +7 -34
  148. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.d.ts +17 -0
  149. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.d.ts.map +1 -0
  150. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.js +156 -0
  151. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts +17 -0
  152. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts.map +1 -0
  153. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.js +288 -0
  154. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.js +2 -2
  155. package/src/core/geom/2d/convex-hull/convex_hull_monotone_2d.js +3 -3
  156. package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.d.ts +4 -14
  157. package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.d.ts.map +1 -1
  158. package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.js +7 -156
  159. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts +4 -14
  160. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +1 -1
  161. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +7 -288
  162. package/src/core/geom/2d/convex-hull/orient2d_indexed.d.ts +10 -0
  163. package/src/core/geom/2d/convex-hull/orient2d_indexed.d.ts.map +1 -0
  164. package/src/core/geom/2d/convex-hull/orient2d_indexed.js +22 -0
  165. package/src/core/geom/2d/convex-hull/orientation3_array.d.ts +4 -7
  166. package/src/core/geom/2d/convex-hull/orientation3_array.d.ts.map +1 -1
  167. package/src/core/geom/2d/convex-hull/orientation3_array.js +7 -22
  168. package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +3 -3
  169. package/src/core/geom/2d/intersect_ray_2d.d.ts +4 -13
  170. package/src/core/geom/2d/intersect_ray_2d.d.ts.map +1 -1
  171. package/src/core/geom/2d/intersect_ray_2d.js +7 -49
  172. package/src/core/geom/2d/line/line2_compute_segment_point_distance_sqr.d.ts +11 -0
  173. package/src/core/geom/2d/line/line2_compute_segment_point_distance_sqr.d.ts.map +1 -0
  174. package/src/core/geom/2d/line/line2_compute_segment_point_distance_sqr.js +39 -0
  175. package/src/core/geom/2d/line/line2_distance_to_point_sqr.d.ts +4 -8
  176. package/src/core/geom/2d/line/line2_distance_to_point_sqr.d.ts.map +1 -1
  177. package/src/core/geom/2d/line/line2_distance_to_point_sqr.js +7 -39
  178. package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.d.ts +23 -0
  179. package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.d.ts.map +1 -0
  180. package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.js +44 -0
  181. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.d.ts +4 -11
  182. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.d.ts.map +1 -1
  183. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.js +7 -35
  184. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.d.ts +4 -17
  185. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.d.ts.map +1 -1
  186. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.js +7 -51
  187. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.d.ts +4 -7
  188. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.d.ts.map +1 -1
  189. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.js +7 -15
  190. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.d.ts +4 -6
  191. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.d.ts.map +1 -1
  192. package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.js +7 -30
  193. package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.d.ts +4 -20
  194. package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.d.ts.map +1 -1
  195. package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.js +4 -41
  196. package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.d.ts +4 -12
  197. package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.d.ts.map +1 -1
  198. package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.js +7 -29
  199. package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.d.ts +16 -0
  200. package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.d.ts.map +1 -0
  201. package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.js +49 -0
  202. package/src/core/geom/2d/line/segment2_intersects_segment2_2d.d.ts +15 -0
  203. package/src/core/geom/2d/line/segment2_intersects_segment2_2d.d.ts.map +1 -0
  204. package/src/core/geom/2d/line/segment2_intersects_segment2_2d.js +29 -0
  205. package/src/core/geom/2d/line/segment2_segment_compute_intersection_array_2d.d.ts +20 -0
  206. package/src/core/geom/2d/line/segment2_segment_compute_intersection_array_2d.d.ts.map +1 -0
  207. package/src/core/geom/2d/line/segment2_segment_compute_intersection_array_2d.js +51 -0
  208. package/src/core/geom/2d/line/segment2_segment_compute_intersection_to_new_array_2d.d.ts +9 -0
  209. package/src/core/geom/2d/line/segment2_segment_compute_intersection_to_new_array_2d.d.ts.map +1 -0
  210. package/src/core/geom/2d/line/segment2_segment_compute_intersection_to_new_array_2d.js +28 -0
  211. package/src/core/geom/2d/line/segment2_segment_compute_intersection_v2_2d.d.ts +14 -0
  212. package/src/core/geom/2d/line/segment2_segment_compute_intersection_v2_2d.d.ts.map +1 -0
  213. package/src/core/geom/2d/line/segment2_segment_compute_intersection_v2_2d.js +33 -0
  214. package/src/core/geom/2d/line/segment2_segment_compute_intersection_v2_objects_2d.d.ts +10 -0
  215. package/src/core/geom/2d/line/segment2_segment_compute_intersection_v2_objects_2d.d.ts.map +1 -0
  216. package/src/core/geom/2d/line/segment2_segment_compute_intersection_v2_objects_2d.js +13 -0
  217. package/src/core/geom/2d/polygon/polygon2_clip_halfplane.d.ts +17 -0
  218. package/src/core/geom/2d/polygon/polygon2_clip_halfplane.d.ts.map +1 -0
  219. package/src/core/geom/2d/polygon/polygon2_clip_halfplane.js +50 -0
  220. package/src/core/geom/2d/polygon/polygon2_signed_area.d.ts +8 -0
  221. package/src/core/geom/2d/polygon/polygon2_signed_area.d.ts.map +1 -0
  222. package/src/core/geom/2d/polygon/polygon2_signed_area.js +34 -0
  223. package/src/core/geom/2d/quad-tree/qt_collect_by_box.js +3 -3
  224. package/src/core/geom/2d/quad-tree/qt_collect_by_point.js +3 -3
  225. package/src/core/geom/2d/quad-tree/qt_query_closest_to_point.d.ts +12 -0
  226. package/src/core/geom/2d/quad-tree/qt_query_closest_to_point.d.ts.map +1 -0
  227. package/src/core/geom/2d/quad-tree/qt_query_closest_to_point.js +62 -0
  228. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +4 -9
  229. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +1 -1
  230. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +7 -62
  231. package/src/core/geom/2d/r-tree/StaticR2Tree.js +3 -3
  232. package/src/core/geom/2d/rectangle_to_aabb.d.ts +4 -5
  233. package/src/core/geom/2d/rectangle_to_aabb.d.ts.map +1 -1
  234. package/src/core/geom/2d/rectangle_to_aabb.js +7 -29
  235. package/src/core/geom/2d/spline2_quadratic_bezier.d.ts +13 -0
  236. package/src/core/geom/2d/spline2_quadratic_bezier.d.ts.map +1 -0
  237. package/src/core/geom/2d/spline2_quadratic_bezier.js +26 -0
  238. package/src/core/geom/2d/spline_bezier2_2d.d.ts +4 -10
  239. package/src/core/geom/2d/spline_bezier2_2d.d.ts.map +1 -1
  240. package/src/core/geom/2d/spline_bezier2_2d.js +7 -26
  241. package/src/core/geom/2d/triangle/tri2_compute_barycentric.d.ts +15 -0
  242. package/src/core/geom/2d/triangle/tri2_compute_barycentric.d.ts.map +1 -0
  243. package/src/core/geom/2d/triangle/tri2_compute_barycentric.js +48 -0
  244. package/src/core/geom/2d/triangle/tri2_contains_point.d.ts +14 -0
  245. package/src/core/geom/2d/triangle/tri2_contains_point.d.ts.map +1 -0
  246. package/src/core/geom/2d/triangle/tri2_contains_point.js +39 -0
  247. package/src/core/geom/2d/triangle/tri2_signed_area.d.ts +12 -0
  248. package/src/core/geom/2d/triangle/tri2_signed_area.d.ts.map +1 -0
  249. package/src/core/geom/2d/triangle/tri2_signed_area.js +23 -0
  250. package/src/core/geom/2d/triangle2d_compute_area.d.ts +4 -9
  251. package/src/core/geom/2d/triangle2d_compute_area.d.ts.map +1 -1
  252. package/src/core/geom/2d/triangle2d_compute_area.js +7 -23
  253. package/src/core/geom/2d/triangle2d_contains_point.d.ts +4 -11
  254. package/src/core/geom/2d/triangle2d_contains_point.d.ts.map +1 -1
  255. package/src/core/geom/2d/triangle2d_contains_point.js +7 -39
  256. package/src/core/geom/2d/triangle2d_get_barycentric.d.ts +4 -12
  257. package/src/core/geom/2d/triangle2d_get_barycentric.d.ts.map +1 -1
  258. package/src/core/geom/2d/triangle2d_get_barycentric.js +7 -48
  259. package/src/core/geom/3d/aabb/AABB3.js +6 -6
  260. package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.d.ts +4 -6
  261. package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.d.ts.map +1 -1
  262. package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.js +7 -29
  263. package/src/core/geom/3d/aabb/aabb3_array_near_distance_to_intersection_ray_segment.js +2 -2
  264. package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.d.ts +4 -4
  265. package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.d.ts.map +1 -1
  266. package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.js +7 -10
  267. package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts +11 -0
  268. package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts.map +1 -1
  269. package/src/core/geom/3d/aabb/aabb3_build_frustum.js +6 -1
  270. package/src/core/geom/3d/aabb/aabb3_classify_against_frustum.d.ts +13 -0
  271. package/src/core/geom/3d/aabb/aabb3_classify_against_frustum.d.ts.map +1 -0
  272. package/src/core/geom/3d/aabb/aabb3_classify_against_frustum.js +46 -0
  273. package/src/core/geom/3d/aabb/aabb3_classify_against_frustum_array.d.ts +9 -0
  274. package/src/core/geom/3d/aabb/aabb3_classify_against_frustum_array.d.ts.map +1 -0
  275. package/src/core/geom/3d/aabb/aabb3_classify_against_frustum_array.js +29 -0
  276. package/src/core/geom/3d/aabb/aabb3_closest_point_on_surface.d.ts +15 -0
  277. package/src/core/geom/3d/aabb/aabb3_closest_point_on_surface.d.ts.map +1 -0
  278. package/src/core/geom/3d/aabb/aabb3_closest_point_on_surface.js +57 -0
  279. package/src/core/geom/3d/aabb/aabb3_combined_surface_area.d.ts +4 -5
  280. package/src/core/geom/3d/aabb/aabb3_combined_surface_area.d.ts.map +1 -1
  281. package/src/core/geom/3d/aabb/aabb3_combined_surface_area.js +7 -21
  282. package/src/core/geom/3d/aabb/aabb3_compute_clipping_volume_intersection.d.ts +22 -0
  283. package/src/core/geom/3d/aabb/aabb3_compute_clipping_volume_intersection.d.ts.map +1 -0
  284. package/src/core/geom/3d/aabb/aabb3_compute_clipping_volume_intersection.js +298 -0
  285. package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.d.ts +4 -9
  286. package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.d.ts.map +1 -1
  287. package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.js +7 -19
  288. package/src/core/geom/3d/aabb/aabb3_compute_projected_area.d.ts +4 -6
  289. package/src/core/geom/3d/aabb/aabb3_compute_projected_area.d.ts.map +1 -1
  290. package/src/core/geom/3d/aabb/aabb3_compute_projected_area.js +7 -86
  291. package/src/core/geom/3d/aabb/aabb3_compute_surface_area.d.ts +4 -9
  292. package/src/core/geom/3d/aabb/aabb3_compute_surface_area.d.ts.map +1 -1
  293. package/src/core/geom/3d/aabb/aabb3_compute_surface_area.js +7 -16
  294. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts +4 -19
  295. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +1 -1
  296. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +7 -298
  297. package/src/core/geom/3d/aabb/aabb3_estimate_projected_area.d.ts +8 -0
  298. package/src/core/geom/3d/aabb/aabb3_estimate_projected_area.d.ts.map +1 -0
  299. package/src/core/geom/3d/aabb/aabb3_estimate_projected_area.js +59 -0
  300. package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.d.ts +4 -5
  301. package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.d.ts.map +1 -1
  302. package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +7 -59
  303. package/src/core/geom/3d/aabb/aabb3_from_three_geometry.d.ts +7 -0
  304. package/src/core/geom/3d/aabb/aabb3_from_three_geometry.d.ts.map +1 -0
  305. package/src/core/geom/3d/aabb/aabb3_from_three_geometry.js +18 -0
  306. package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.d.ts +4 -4
  307. package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.d.ts.map +1 -1
  308. package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.js +7 -18
  309. package/src/core/geom/3d/aabb/aabb3_from_triangle_group.d.ts +12 -0
  310. package/src/core/geom/3d/aabb/aabb3_from_triangle_group.d.ts.map +1 -0
  311. package/src/core/geom/3d/aabb/aabb3_from_triangle_group.js +46 -0
  312. package/src/core/geom/3d/aabb/aabb3_half_surface_area.d.ts +7 -0
  313. package/src/core/geom/3d/aabb/aabb3_half_surface_area.d.ts.map +1 -0
  314. package/src/core/geom/3d/aabb/aabb3_half_surface_area.js +10 -0
  315. package/src/core/geom/3d/aabb/aabb3_half_surface_area_extents.d.ts +12 -0
  316. package/src/core/geom/3d/aabb/aabb3_half_surface_area_extents.d.ts.map +1 -0
  317. package/src/core/geom/3d/aabb/aabb3_half_surface_area_extents.js +19 -0
  318. package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.d.ts +4 -10
  319. package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.d.ts.map +1 -1
  320. package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.js +7 -46
  321. package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.d.ts +4 -15
  322. package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.d.ts.map +1 -1
  323. package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.js +7 -77
  324. package/src/core/geom/3d/aabb/aabb3_intersects_ray_segment.d.ts +13 -0
  325. package/src/core/geom/3d/aabb/aabb3_intersects_ray_segment.d.ts.map +1 -1
  326. package/src/core/geom/3d/aabb/aabb3_intersects_ray_segment.js +27 -6
  327. package/src/core/geom/3d/aabb/aabb3_intersects_segment3.d.ts +18 -0
  328. package/src/core/geom/3d/aabb/aabb3_intersects_segment3.d.ts.map +1 -0
  329. package/src/core/geom/3d/aabb/aabb3_intersects_segment3.js +77 -0
  330. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts +4 -17
  331. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +1 -1
  332. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +7 -70
  333. package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.d.ts +4 -12
  334. package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.d.ts.map +1 -1
  335. package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.js +4 -54
  336. package/src/core/geom/3d/aabb/aabb3_projected_area.d.ts +9 -0
  337. package/src/core/geom/3d/aabb/aabb3_projected_area.d.ts.map +1 -0
  338. package/src/core/geom/3d/aabb/aabb3_projected_area.js +86 -0
  339. package/src/core/geom/3d/aabb/aabb3_ray_segment_entry_distance.d.ts +38 -0
  340. package/src/core/geom/3d/aabb/aabb3_ray_segment_entry_distance.d.ts.map +1 -0
  341. package/src/core/geom/3d/aabb/aabb3_ray_segment_entry_distance.js +95 -0
  342. package/src/core/geom/3d/aabb/aabb3_raycast.d.ts +4 -22
  343. package/src/core/geom/3d/aabb/aabb3_raycast.d.ts.map +1 -1
  344. package/src/core/geom/3d/aabb/aabb3_raycast.js +7 -109
  345. package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.d.ts +25 -0
  346. package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.d.ts.map +1 -0
  347. package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.js +109 -0
  348. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.js +2 -2
  349. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH_delta.d.ts +7 -1
  350. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH_delta.d.ts.map +1 -1
  351. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH_delta.js +8 -5
  352. package/src/core/geom/3d/aabb/aabb3_surface_area.d.ts +12 -0
  353. package/src/core/geom/3d/aabb/aabb3_surface_area.d.ts.map +1 -0
  354. package/src/core/geom/3d/aabb/aabb3_surface_area.js +16 -0
  355. package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.js +2 -2
  356. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.d.ts.map +1 -1
  357. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +4 -1
  358. package/src/core/geom/3d/aabb/aabb3_union_half_surface_area.d.ts +8 -0
  359. package/src/core/geom/3d/aabb/aabb3_union_half_surface_area.d.ts.map +1 -0
  360. package/src/core/geom/3d/aabb/aabb3_union_half_surface_area.js +21 -0
  361. package/src/core/geom/3d/aabb/aabb_nd_from_points.d.ts +10 -0
  362. package/src/core/geom/3d/aabb/aabb_nd_from_points.d.ts.map +1 -0
  363. package/src/core/geom/3d/aabb/aabb_nd_from_points.js +39 -0
  364. package/src/core/geom/3d/aabb/compute_aabb_from_points.d.ts +4 -7
  365. package/src/core/geom/3d/aabb/compute_aabb_from_points.d.ts.map +1 -1
  366. package/src/core/geom/3d/aabb/compute_aabb_from_points.js +7 -39
  367. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +4 -9
  368. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +1 -1
  369. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +4 -43
  370. package/src/core/geom/3d/capsule/capsule_intersects_aabb3_closed.d.ts +1 -1
  371. package/src/core/geom/3d/capsule/capsule_intersects_aabb3_closed.js +3 -3
  372. package/src/core/geom/3d/circle3_compute_bounding_box.d.ts +14 -0
  373. package/src/core/geom/3d/circle3_compute_bounding_box.d.ts.map +1 -0
  374. package/src/core/geom/3d/circle3_compute_bounding_box.js +35 -0
  375. package/src/core/geom/3d/compute_circle_bounding_box.d.ts +4 -11
  376. package/src/core/geom/3d/compute_circle_bounding_box.d.ts.map +1 -1
  377. package/src/core/geom/3d/compute_circle_bounding_box.js +7 -35
  378. package/src/core/geom/3d/cone/computeConeBoundingBox.d.ts +4 -11
  379. package/src/core/geom/3d/cone/computeConeBoundingBox.d.ts.map +1 -1
  380. package/src/core/geom/3d/cone/computeConeBoundingBox.js +7 -58
  381. package/src/core/geom/3d/cone/computeConePlaneSide.d.ts +4 -16
  382. package/src/core/geom/3d/cone/computeConePlaneSide.d.ts.map +1 -1
  383. package/src/core/geom/3d/cone/computeConePlaneSide.js +7 -86
  384. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts +4 -5
  385. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +1 -1
  386. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +7 -97
  387. package/src/core/geom/3d/cone/cone_compute_bounding_box.d.ts +14 -0
  388. package/src/core/geom/3d/cone/cone_compute_bounding_box.d.ts.map +1 -0
  389. package/src/core/geom/3d/cone/cone_compute_bounding_box.js +58 -0
  390. package/src/core/geom/3d/cone/cone_compute_bounding_of_2_cones.d.ts +8 -0
  391. package/src/core/geom/3d/cone/cone_compute_bounding_of_2_cones.d.ts.map +1 -0
  392. package/src/core/geom/3d/cone/cone_compute_bounding_of_2_cones.js +97 -0
  393. package/src/core/geom/3d/cone/cone_compute_plane_side.d.ts +19 -0
  394. package/src/core/geom/3d/cone/cone_compute_plane_side.d.ts.map +1 -0
  395. package/src/core/geom/3d/cone/cone_compute_plane_side.js +86 -0
  396. package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.d.ts +4 -8
  397. package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.d.ts.map +1 -1
  398. package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.js +7 -45
  399. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.d.ts +4 -9
  400. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.d.ts.map +1 -1
  401. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +7 -112
  402. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts +12 -0
  403. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -0
  404. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +110 -0
  405. package/src/core/geom/3d/frustum/frustum3_from_aabb.d.ts +19 -0
  406. package/src/core/geom/3d/frustum/frustum3_from_aabb.d.ts.map +1 -0
  407. package/src/core/geom/3d/frustum/frustum3_from_aabb.js +60 -0
  408. package/src/core/geom/3d/frustum/frustum3_matrix4_project.d.ts +10 -0
  409. package/src/core/geom/3d/frustum/frustum3_matrix4_project.d.ts.map +1 -0
  410. package/src/core/geom/3d/frustum/frustum3_matrix4_project.js +18 -0
  411. package/src/core/geom/3d/frustum/frustum3_matrix4_project_n.d.ts +11 -0
  412. package/src/core/geom/3d/frustum/frustum3_matrix4_project_n.d.ts.map +1 -0
  413. package/src/core/geom/3d/frustum/frustum3_matrix4_project_n.js +45 -0
  414. package/src/core/geom/3d/frustum/frustum3_planes_to_flat_from_three.d.ts +7 -0
  415. package/src/core/geom/3d/frustum/frustum3_planes_to_flat_from_three.d.ts.map +1 -0
  416. package/src/core/geom/3d/frustum/frustum3_planes_to_flat_from_three.js +26 -0
  417. package/src/core/geom/3d/frustum/frustum3_slice_linear_to_points.d.ts +10 -0
  418. package/src/core/geom/3d/frustum/frustum3_slice_linear_to_points.d.ts.map +1 -0
  419. package/src/core/geom/3d/frustum/frustum3_slice_linear_to_points.js +96 -0
  420. package/src/core/geom/3d/frustum/frustum_compute_corners.js +9 -9
  421. package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts +4 -7
  422. package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts.map +1 -1
  423. package/src/core/geom/3d/frustum/frustum_matrix4_project.js +7 -18
  424. package/src/core/geom/3d/frustum/hexahedron_from_aabb.d.ts +4 -16
  425. package/src/core/geom/3d/frustum/hexahedron_from_aabb.d.ts.map +1 -1
  426. package/src/core/geom/3d/frustum/hexahedron_from_aabb.js +7 -60
  427. package/src/core/geom/3d/frustum/read_three_planes_to_array.d.ts.map +1 -1
  428. package/src/core/geom/3d/frustum/read_three_planes_to_array.js +7 -26
  429. package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts +4 -7
  430. package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts.map +1 -1
  431. package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +7 -96
  432. package/src/core/geom/3d/funnel_string_pull.d.ts.map +1 -0
  433. package/src/{engine/navigation/mesh → core/geom/3d}/funnel_string_pull.js +1 -1
  434. package/src/core/geom/3d/gjk/gjk.js +4 -4
  435. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +13 -13
  436. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +4 -24
  437. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -1
  438. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +4 -85
  439. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts.map +1 -1
  440. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +7 -34
  441. package/src/core/geom/3d/line/line3_compute_segment_closest_point.d.ts +16 -0
  442. package/src/core/geom/3d/line/line3_compute_segment_closest_point.d.ts.map +1 -0
  443. package/src/core/geom/3d/line/line3_compute_segment_closest_point.js +34 -0
  444. package/src/core/geom/3d/line/line3_compute_segment_closest_point_t.d.ts +19 -0
  445. package/src/core/geom/3d/line/line3_compute_segment_closest_point_t.d.ts.map +1 -0
  446. package/src/core/geom/3d/line/line3_compute_segment_closest_point_t.js +48 -0
  447. package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +44 -0
  448. package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts.map +1 -0
  449. package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +153 -0
  450. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.d.ts +4 -41
  451. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.d.ts.map +1 -1
  452. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.js +4 -150
  453. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts +4 -16
  454. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts.map +1 -1
  455. package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js +7 -48
  456. package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts +1 -1
  457. package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.js +2 -2
  458. package/src/core/geom/3d/line/line3_compute_segment_segment_closest_points.d.ts +27 -0
  459. package/src/core/geom/3d/line/line3_compute_segment_segment_closest_points.d.ts.map +1 -0
  460. package/src/core/geom/3d/line/line3_compute_segment_segment_closest_points.js +88 -0
  461. package/src/core/geom/3d/line/segment3_point_distance_to_segments.d.ts +11 -0
  462. package/src/core/geom/3d/line/segment3_point_distance_to_segments.d.ts.map +1 -0
  463. package/src/core/geom/3d/line/segment3_point_distance_to_segments.js +25 -0
  464. package/src/core/geom/3d/mat4/allocate_m4.d.ts +4 -3
  465. package/src/core/geom/3d/mat4/allocate_m4.d.ts.map +1 -1
  466. package/src/core/geom/3d/mat4/allocate_m4.js +7 -16
  467. package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.d.ts +4 -9
  468. package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.d.ts.map +1 -1
  469. package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.js +7 -55
  470. package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.d.ts +4 -9
  471. package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.d.ts.map +1 -1
  472. package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.js +7 -30
  473. package/src/core/geom/3d/mat4/compose_matrix4_array.d.ts +4 -19
  474. package/src/core/geom/3d/mat4/compose_matrix4_array.d.ts.map +1 -1
  475. package/src/core/geom/3d/mat4/compose_matrix4_array.js +7 -53
  476. package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts +4 -6
  477. package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +1 -1
  478. package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +7 -76
  479. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts +4 -30
  480. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts.map +1 -1
  481. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +7 -124
  482. package/src/core/geom/3d/mat4/m4_allocate.d.ts +6 -0
  483. package/src/core/geom/3d/mat4/m4_allocate.d.ts.map +1 -0
  484. package/src/core/geom/3d/mat4/m4_allocate.js +16 -0
  485. package/src/core/geom/3d/mat4/m4_compose.d.ts +22 -0
  486. package/src/core/geom/3d/mat4/m4_compose.d.ts.map +1 -0
  487. package/src/core/geom/3d/mat4/m4_compose.js +53 -0
  488. package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.d.ts +7 -0
  489. package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.d.ts.map +1 -0
  490. package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.js +7 -0
  491. package/src/core/geom/3d/mat4/m4_decompose.d.ts +9 -0
  492. package/src/core/geom/3d/mat4/m4_decompose.d.ts.map +1 -0
  493. package/src/core/geom/3d/mat4/m4_decompose.js +76 -0
  494. package/src/core/geom/3d/mat4/m4_euler_angles.d.ts +33 -0
  495. package/src/core/geom/3d/mat4/m4_euler_angles.d.ts.map +1 -0
  496. package/src/core/geom/3d/mat4/m4_euler_angles.js +124 -0
  497. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +20 -0
  498. package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -0
  499. package/src/core/geom/3d/mat4/m4_normal_matrix3.js +39 -0
  500. package/src/core/geom/3d/mat4/m4_transform_direction_v3_buffer.d.ts +12 -0
  501. package/src/core/geom/3d/mat4/m4_transform_direction_v3_buffer.d.ts.map +1 -0
  502. package/src/core/geom/3d/mat4/m4_transform_direction_v3_buffer.js +55 -0
  503. package/src/core/geom/3d/mat4/m4_transform_v3_buffer.d.ts +12 -0
  504. package/src/core/geom/3d/mat4/m4_transform_v3_buffer.d.ts.map +1 -0
  505. package/src/core/geom/3d/mat4/m4_transform_v3_buffer.js +30 -0
  506. package/src/core/geom/3d/morton/mortonEncode_LUT.d.ts +4 -9
  507. package/src/core/geom/3d/morton/mortonEncode_LUT.d.ts.map +1 -1
  508. package/src/core/geom/3d/morton/mortonEncode_LUT.js +7 -143
  509. package/src/core/geom/3d/morton/mortonEncode_magicbits.d.ts +4 -9
  510. package/src/core/geom/3d/morton/mortonEncode_magicbits.d.ts.map +1 -1
  511. package/src/core/geom/3d/morton/mortonEncode_magicbits.js +7 -20
  512. package/src/core/geom/3d/morton/v3_morton_encode.d.ts +2 -2
  513. package/src/core/geom/3d/morton/v3_morton_encode.d.ts.map +1 -1
  514. package/src/core/geom/3d/morton/v3_morton_encode.js +2 -2
  515. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts +2 -2
  516. package/src/core/geom/3d/morton/v3_morton_encode_bounded.d.ts.map +1 -1
  517. package/src/core/geom/3d/morton/v3_morton_encode_bounded.js +1 -1
  518. package/src/core/geom/3d/morton/v3_morton_encode_lut.d.ts +12 -0
  519. package/src/core/geom/3d/morton/v3_morton_encode_lut.d.ts.map +1 -0
  520. package/src/core/geom/3d/morton/v3_morton_encode_lut.js +143 -0
  521. package/src/core/geom/3d/morton/v3_morton_encode_magicbits.d.ts +12 -0
  522. package/src/core/geom/3d/morton/v3_morton_encode_magicbits.d.ts.map +1 -0
  523. package/src/core/geom/3d/morton/v3_morton_encode_magicbits.js +20 -0
  524. package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.d.ts +1 -14
  525. package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.d.ts.map +1 -1
  526. package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.js +5 -29
  527. package/src/core/geom/3d/normal/hemioct/encode_unit_to_hemioct.d.ts +15 -0
  528. package/src/core/geom/3d/normal/hemioct/encode_unit_to_hemioct.d.ts.map +1 -0
  529. package/src/core/geom/3d/normal/hemioct/encode_unit_to_hemioct.js +28 -0
  530. package/src/core/geom/3d/normal/lambert_azimuth/decode_azimuth_to_unit.d.ts +9 -0
  531. package/src/core/geom/3d/normal/lambert_azimuth/decode_azimuth_to_unit.d.ts.map +1 -0
  532. package/src/core/geom/3d/normal/{lamber_azimuth/transform.js → lambert_azimuth/decode_azimuth_to_unit.js} +30 -61
  533. package/src/core/geom/3d/normal/lambert_azimuth/encode_unit_to_azimuth.d.ts +10 -0
  534. package/src/core/geom/3d/normal/lambert_azimuth/encode_unit_to_azimuth.d.ts.map +1 -0
  535. package/src/core/geom/3d/normal/lambert_azimuth/encode_unit_to_azimuth.js +19 -0
  536. package/src/core/geom/3d/normal/spherical/decode_spheremap_to_unit.d.ts +9 -0
  537. package/src/core/geom/3d/normal/spherical/decode_spheremap_to_unit.d.ts.map +1 -0
  538. package/src/core/geom/3d/normal/spherical/decode_spheremap_to_unit.js +38 -0
  539. package/src/core/geom/3d/normal/spherical/{sphere_map_transform.d.ts → encode_unit_to_spheremap.d.ts} +2 -2
  540. package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.d.ts.map +1 -0
  541. package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.js +30 -0
  542. package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.js +2 -2
  543. package/src/core/geom/3d/plane/is_point_within_planes.d.ts +4 -10
  544. package/src/core/geom/3d/plane/is_point_within_planes.d.ts.map +1 -1
  545. package/src/core/geom/3d/plane/is_point_within_planes.js +7 -46
  546. package/src/core/geom/3d/plane/plane3_compute_3_plane_intersection.d.ts +25 -0
  547. package/src/core/geom/3d/plane/plane3_compute_3_plane_intersection.d.ts.map +1 -0
  548. package/src/core/geom/3d/plane/plane3_compute_3_plane_intersection.js +72 -0
  549. package/src/core/geom/3d/plane/plane3_compute_3_plane_intersection_from_three.d.ts +11 -0
  550. package/src/core/geom/3d/plane/plane3_compute_3_plane_intersection_from_three.d.ts.map +1 -0
  551. package/src/core/geom/3d/plane/plane3_compute_3_plane_intersection_from_three.js +27 -0
  552. package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.d.ts +4 -22
  553. package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.d.ts.map +1 -1
  554. package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +7 -72
  555. package/src/core/geom/3d/plane/plane3_compute_intersection.d.ts +17 -0
  556. package/src/core/geom/3d/plane/plane3_compute_intersection.d.ts.map +1 -0
  557. package/src/core/geom/3d/plane/plane3_compute_intersection.js +76 -0
  558. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.d.ts +14 -0
  559. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.d.ts.map +1 -0
  560. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.js +82 -0
  561. package/src/core/geom/3d/plane/plane3_compute_plane_intersection.d.ts +4 -11
  562. package/src/core/geom/3d/plane/plane3_compute_plane_intersection.d.ts.map +1 -1
  563. package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +7 -82
  564. package/src/core/geom/3d/plane/plane3_contains_point_within_set.d.ts +13 -0
  565. package/src/core/geom/3d/plane/plane3_contains_point_within_set.d.ts.map +1 -0
  566. package/src/core/geom/3d/plane/plane3_contains_point_within_set.js +46 -0
  567. package/src/core/geom/3d/plane/plane3_intersect_plane.d.ts +4 -14
  568. package/src/core/geom/3d/plane/plane3_intersect_plane.d.ts.map +1 -1
  569. package/src/core/geom/3d/plane/plane3_intersect_plane.js +7 -76
  570. package/src/core/geom/3d/plane/plane3_matrix4_project.js +4 -4
  571. package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.d.ts +4 -8
  572. package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.d.ts.map +1 -1
  573. package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.js +7 -27
  574. package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.d.ts +4 -5
  575. package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.d.ts.map +1 -1
  576. package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.js +7 -11
  577. package/src/core/geom/3d/quaternion/quat3_decode_from_uint32.d.ts +12 -0
  578. package/src/core/geom/3d/quaternion/quat3_decode_from_uint32.d.ts.map +1 -0
  579. package/src/core/geom/3d/quaternion/quat3_decode_from_uint32.js +66 -0
  580. package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.d.ts +14 -0
  581. package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.d.ts.map +1 -0
  582. package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.js +110 -0
  583. package/src/core/geom/3d/quaternion/quat3_from_axis_angle.d.ts +8 -0
  584. package/src/core/geom/3d/quaternion/quat3_from_axis_angle.d.ts.map +1 -0
  585. package/src/core/geom/3d/quaternion/quat3_from_axis_angle.js +11 -0
  586. package/src/core/geom/3d/quaternion/quat_decode_from_uint32.d.ts +4 -9
  587. package/src/core/geom/3d/quaternion/quat_decode_from_uint32.d.ts.map +1 -1
  588. package/src/core/geom/3d/quaternion/quat_decode_from_uint32.js +7 -57
  589. package/src/core/geom/3d/quaternion/quat_encode_to_uint32.d.ts +4 -11
  590. package/src/core/geom/3d/quaternion/quat_encode_to_uint32.d.ts.map +1 -1
  591. package/src/core/geom/3d/quaternion/quat_encode_to_uint32.js +7 -110
  592. package/src/core/geom/3d/ray/Ray3.js +4 -4
  593. package/src/core/geom/3d/ray/ray3_array_apply_matrix4.js +2 -2
  594. package/src/core/geom/3d/ray/ray3_array_compose.d.ts +4 -9
  595. package/src/core/geom/3d/ray/ray3_array_compose.d.ts.map +1 -1
  596. package/src/core/geom/3d/ray/ray3_array_compose.js +7 -19
  597. package/src/core/geom/3d/ray/ray3_compose_array.d.ts +12 -0
  598. package/src/core/geom/3d/ray/ray3_compose_array.d.ts.map +1 -0
  599. package/src/core/geom/3d/ray/ray3_compose_array.js +19 -0
  600. package/src/core/geom/3d/ray/ray3_compute_closest_point.d.ts +16 -0
  601. package/src/core/geom/3d/ray/ray3_compute_closest_point.d.ts.map +1 -0
  602. package/src/core/geom/3d/ray/ray3_compute_closest_point.js +43 -0
  603. package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.d.ts +4 -13
  604. package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.d.ts.map +1 -1
  605. package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.js +7 -43
  606. package/src/core/geom/3d/ray/ray3_compute_point_projection_t.d.ts +15 -0
  607. package/src/core/geom/3d/ray/ray3_compute_point_projection_t.d.ts.map +1 -0
  608. package/src/core/geom/3d/ray/ray3_compute_point_projection_t.js +31 -0
  609. package/src/core/geom/3d/ray/ray3_distance_to_point.d.ts +4 -12
  610. package/src/core/geom/3d/ray/ray3_distance_to_point.d.ts.map +1 -1
  611. package/src/core/geom/3d/ray/ray3_distance_to_point.js +7 -31
  612. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.d.ts +4 -7
  613. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.d.ts.map +1 -1
  614. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +7 -35
  615. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction_array.d.ts +10 -0
  616. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction_array.d.ts.map +1 -0
  617. package/src/core/geom/3d/ray/ray3_shift_origin_along_direction_array.js +35 -0
  618. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +13 -0
  619. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  620. package/src/core/geom/3d/shape/AbstractShape3D.js +16 -0
  621. package/src/core/geom/3d/shape/BoxShape3D.d.ts +1 -0
  622. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
  623. package/src/core/geom/3d/shape/BoxShape3D.js +21 -5
  624. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +1 -0
  625. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  626. package/src/core/geom/3d/shape/CapsuleShape3D.js +23 -4
  627. package/src/core/geom/3d/shape/ConvexHullShape3D.js +3 -3
  628. package/src/core/geom/3d/shape/CylinderShape3D.js +2 -2
  629. package/src/core/geom/3d/shape/MeshShape3D.d.ts +39 -4
  630. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
  631. package/src/core/geom/3d/shape/MeshShape3D.js +120 -11
  632. package/src/core/geom/3d/shape/SphereShape3D.d.ts +1 -0
  633. package/src/core/geom/3d/shape/SphereShape3D.d.ts.map +1 -1
  634. package/src/core/geom/3d/shape/SphereShape3D.js +17 -2
  635. package/src/core/geom/3d/shape/TransformedShape3D.d.ts +7 -3
  636. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  637. package/src/core/geom/3d/shape/TransformedShape3D.js +3 -1
  638. package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -1
  639. package/src/core/geom/3d/shape/Triangle3D.js +5 -5
  640. package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts +30 -0
  641. package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts.map +1 -0
  642. package/src/core/geom/3d/shape/shape3_mesh_from_geometry.js +64 -0
  643. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +4 -27
  644. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +1 -1
  645. package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +4 -61
  646. package/src/core/geom/3d/shape/util/shape3_voxelize_to_grid.d.ts +61 -0
  647. package/src/core/geom/3d/shape/util/shape3_voxelize_to_grid.d.ts.map +1 -0
  648. package/src/core/geom/3d/shape/util/shape3_voxelize_to_grid.js +153 -0
  649. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +4 -58
  650. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -1
  651. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +7 -153
  652. package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.d.ts +4 -5
  653. package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.d.ts.map +1 -1
  654. package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.js +7 -74
  655. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +2 -2
  656. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts +8 -0
  657. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts.map +1 -0
  658. package/src/core/geom/3d/sphere/harmonics/sh3_rotate.js +94 -0
  659. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts +4 -5
  660. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts.map +1 -1
  661. package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.js +7 -94
  662. package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts +4 -6
  663. package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts.map +1 -1
  664. package/src/core/geom/3d/sphere/harmonics/sh_compute_K.js +7 -17
  665. package/src/core/geom/3d/sphere/harmonics/sh_normalization_factor.d.ts +9 -0
  666. package/src/core/geom/3d/sphere/harmonics/sh_normalization_factor.d.ts.map +1 -0
  667. package/src/core/geom/3d/sphere/harmonics/sh_normalization_factor.js +17 -0
  668. package/src/core/geom/3d/sphere/sphere_array_intersects_point.d.ts +4 -7
  669. package/src/core/geom/3d/sphere/sphere_array_intersects_point.d.ts.map +1 -1
  670. package/src/core/geom/3d/sphere/sphere_array_intersects_point.js +7 -15
  671. package/src/core/geom/3d/sphere/sphere_array_intersects_ray.d.ts +4 -10
  672. package/src/core/geom/3d/sphere/sphere_array_intersects_ray.d.ts.map +1 -1
  673. package/src/core/geom/3d/sphere/sphere_array_intersects_ray.js +7 -25
  674. package/src/core/geom/3d/sphere/sphere_compute_bounding_of_2_spheres.d.ts +8 -0
  675. package/src/core/geom/3d/sphere/sphere_compute_bounding_of_2_spheres.d.ts.map +1 -0
  676. package/src/core/geom/3d/sphere/sphere_compute_bounding_of_2_spheres.js +74 -0
  677. package/src/core/geom/3d/sphere/sphere_contains_point.d.ts +13 -0
  678. package/src/core/geom/3d/sphere/sphere_contains_point.d.ts.map +1 -0
  679. package/src/core/geom/3d/sphere/sphere_contains_point.js +29 -0
  680. package/src/core/geom/3d/sphere/sphere_fibonacci_point.d.ts +2 -2
  681. package/src/core/geom/3d/sphere/sphere_fibonacci_point.d.ts.map +1 -1
  682. package/src/core/geom/3d/sphere/sphere_fibonacci_point.js +1 -1
  683. package/src/core/geom/3d/sphere/sphere_intersects_point.d.ts +4 -10
  684. package/src/core/geom/3d/sphere/sphere_intersects_point.d.ts.map +1 -1
  685. package/src/core/geom/3d/sphere/sphere_intersects_point.js +7 -29
  686. package/src/core/geom/3d/sphere/sphere_matrix4_transform.d.ts +7 -0
  687. package/src/core/geom/3d/sphere/sphere_matrix4_transform.d.ts.map +1 -1
  688. package/src/core/geom/3d/sphere/sphere_matrix4_transform.js +6 -2
  689. package/src/core/geom/3d/sphere/sphere_packed_contains_point.d.ts +10 -0
  690. package/src/core/geom/3d/sphere/sphere_packed_contains_point.d.ts.map +1 -0
  691. package/src/core/geom/3d/sphere/sphere_packed_contains_point.js +15 -0
  692. package/src/core/geom/3d/sphere/sphere_packed_intersects_ray.d.ts +13 -0
  693. package/src/core/geom/3d/sphere/sphere_packed_intersects_ray.d.ts.map +1 -0
  694. package/src/core/geom/3d/sphere/sphere_packed_intersects_ray.js +25 -0
  695. package/src/core/geom/3d/sphere/sphere_project.js +2 -2
  696. package/src/core/geom/3d/sphere/sphere_projected_radius_sqr.d.ts +9 -0
  697. package/src/core/geom/3d/sphere/sphere_projected_radius_sqr.d.ts.map +1 -0
  698. package/src/core/geom/3d/sphere/sphere_projected_radius_sqr.js +45 -0
  699. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +4 -6
  700. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts.map +1 -1
  701. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +7 -45
  702. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.d.ts +4 -6
  703. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.d.ts.map +1 -1
  704. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.js +7 -32
  705. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_buffer_transformed.d.ts +9 -0
  706. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_buffer_transformed.d.ts.map +1 -0
  707. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_buffer_transformed.js +32 -0
  708. package/src/core/geom/3d/sphere/sphere_spherical_from_cartesian.d.ts +10 -0
  709. package/src/core/geom/3d/sphere/sphere_spherical_from_cartesian.d.ts.map +1 -0
  710. package/src/core/geom/3d/sphere/sphere_spherical_from_cartesian.js +29 -0
  711. package/src/core/geom/3d/sphere/spherical_from_cartesian.d.ts +4 -7
  712. package/src/core/geom/3d/sphere/spherical_from_cartesian.d.ts.map +1 -1
  713. package/src/core/geom/3d/sphere/spherical_from_cartesian.js +7 -29
  714. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.js +5 -5
  715. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -1
  716. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +3 -5
  717. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +4 -12
  718. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -1
  719. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +4 -19
  720. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.d.ts +4 -6
  721. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.d.ts.map +1 -1
  722. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.js +7 -18
  723. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +2 -2
  724. package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.d.ts +4 -7
  725. package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.d.ts.map +1 -1
  726. package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.js +7 -166
  727. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_fill_cavity.d.ts +10 -0
  728. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_fill_cavity.d.ts.map +1 -0
  729. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_fill_cavity.js +166 -0
  730. package/src/core/geom/3d/tetrahedra/prototypeTetrahedraBuilder.js +2 -2
  731. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +6 -8
  732. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +3 -3
  733. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.d.ts +15 -0
  734. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.d.ts.map +1 -0
  735. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.js +22 -0
  736. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_volume.d.ts +9 -0
  737. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_volume.d.ts.map +1 -0
  738. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_volume.js +18 -0
  739. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_get_neighbours.d.ts +24 -0
  740. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_get_neighbours.d.ts.map +1 -0
  741. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_get_neighbours.js +39 -0
  742. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +12 -12
  743. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +4 -21
  744. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +1 -1
  745. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +7 -39
  746. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +5 -5
  747. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.js +2 -2
  748. package/src/core/geom/3d/tetrahedra/triangle/prototype.js +5 -4
  749. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.js +2 -2
  750. package/src/core/geom/3d/tetrahedra/triangle/triangle_decode_depth.d.ts +2 -0
  751. package/src/core/geom/3d/tetrahedra/triangle/triangle_decode_depth.d.ts.map +1 -0
  752. package/src/core/geom/3d/tetrahedra/triangle/{triangle_encode_rasterized_depth.js → triangle_decode_depth.js} +59 -112
  753. package/src/core/geom/3d/tetrahedra/triangle/triangle_rasterized_depth_sample_index.d.ts +12 -0
  754. package/src/core/geom/3d/tetrahedra/triangle/triangle_rasterized_depth_sample_index.d.ts.map +1 -0
  755. package/src/core/geom/3d/tetrahedra/triangle/triangle_rasterized_depth_sample_index.js +54 -0
  756. package/src/core/geom/3d/tetrahedra/validate_neighbour.d.ts +10 -0
  757. package/src/core/geom/3d/tetrahedra/validate_neighbour.d.ts.map +1 -0
  758. package/src/core/geom/3d/tetrahedra/validate_neighbour.js +70 -0
  759. package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts +0 -16
  760. package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts.map +1 -1
  761. package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.js +69 -186
  762. package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts +9 -0
  763. package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts.map +1 -0
  764. package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.js +50 -0
  765. package/src/core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.d.ts +4 -4
  766. package/src/core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.d.ts.map +1 -1
  767. package/src/core/geom/3d/topology/bounds/computeTopoMeshBoundingSphere.js +7 -37
  768. package/src/core/geom/3d/topology/bounds/computeTopoMeshBoundiningBox.d.ts +4 -4
  769. package/src/core/geom/3d/topology/bounds/computeTopoMeshBoundiningBox.d.ts.map +1 -1
  770. package/src/core/geom/3d/topology/bounds/computeTopoMeshBoundiningBox.js +7 -16
  771. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.d.ts +4 -6
  772. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.d.ts.map +1 -1
  773. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +7 -87
  774. package/src/core/geom/3d/topology/bounds/compute_topo_mesh_bounding_box.d.ts +7 -0
  775. package/src/core/geom/3d/topology/bounds/compute_topo_mesh_bounding_box.d.ts.map +1 -0
  776. package/src/core/geom/3d/topology/bounds/compute_topo_mesh_bounding_box.js +16 -0
  777. package/src/core/geom/3d/topology/bounds/compute_topo_mesh_bounding_sphere.d.ts +7 -0
  778. package/src/core/geom/3d/topology/bounds/compute_topo_mesh_bounding_sphere.d.ts.map +1 -0
  779. package/src/core/geom/3d/topology/bounds/compute_topo_mesh_bounding_sphere.js +37 -0
  780. package/src/core/geom/3d/topology/bounds/compute_triangle_cluster_normal_bounding_cone.d.ts +9 -0
  781. package/src/core/geom/3d/topology/bounds/compute_triangle_cluster_normal_bounding_cone.d.ts.map +1 -0
  782. package/src/core/geom/3d/topology/bounds/compute_triangle_cluster_normal_bounding_cone.js +87 -0
  783. package/src/core/geom/3d/topology/build_face_graph_from_mesh.d.ts +0 -7
  784. package/src/core/geom/3d/topology/build_face_graph_from_mesh.d.ts.map +1 -1
  785. package/src/core/geom/3d/topology/build_face_graph_from_mesh.js +78 -113
  786. package/src/core/geom/3d/topology/compareEdges.d.ts +6 -1
  787. package/src/core/geom/3d/topology/compareEdges.d.ts.map +1 -1
  788. package/src/core/geom/3d/topology/compareEdges.js +7 -16
  789. package/src/core/geom/3d/topology/compare_edges.d.ts +8 -0
  790. package/src/core/geom/3d/topology/compare_edges.d.ts.map +1 -0
  791. package/src/core/geom/3d/topology/compare_edges.js +16 -0
  792. package/src/core/geom/3d/topology/computeTopoMeshVertexDuplicates.d.ts +4 -6
  793. package/src/core/geom/3d/topology/computeTopoMeshVertexDuplicates.d.ts.map +1 -1
  794. package/src/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +7 -108
  795. package/src/core/geom/3d/topology/compute_topo_mesh_vertex_duplicates.d.ts +9 -0
  796. package/src/core/geom/3d/topology/compute_topo_mesh_vertex_duplicates.d.ts.map +1 -0
  797. package/src/core/geom/3d/topology/compute_topo_mesh_vertex_duplicates.js +108 -0
  798. package/src/core/geom/3d/topology/expandConnectivityByLocality.js +2 -2
  799. package/src/core/geom/3d/topology/graph_create_off_mesh_links.d.ts +8 -0
  800. package/src/core/geom/3d/topology/graph_create_off_mesh_links.d.ts.map +1 -0
  801. package/src/core/geom/3d/topology/graph_create_off_mesh_links.js +35 -0
  802. package/src/core/geom/3d/topology/samples/prototypeFloodFill.js +4 -4
  803. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.d.ts.map +1 -1
  804. package/src/core/geom/3d/topology/simplify/EdgeCollapseCandidate.js +9 -8
  805. package/src/core/geom/3d/topology/simplify/collapse_degenerate_edge.js +2 -2
  806. package/src/core/geom/3d/topology/simplify/collapse_edge.d.ts +11 -0
  807. package/src/core/geom/3d/topology/simplify/collapse_edge.d.ts.map +1 -0
  808. package/src/core/geom/3d/topology/simplify/collapse_edge.js +21 -0
  809. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.d.ts +4 -8
  810. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.d.ts.map +1 -1
  811. package/src/core/geom/3d/topology/simplify/computeEdgeCollapseCost.js +7 -82
  812. package/src/core/geom/3d/topology/simplify/compute_edge_collapse_cost.d.ts +11 -0
  813. package/src/core/geom/3d/topology/simplify/compute_edge_collapse_cost.d.ts.map +1 -0
  814. package/src/core/geom/3d/topology/simplify/compute_edge_collapse_cost.js +82 -0
  815. package/src/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +3 -3
  816. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +2 -2
  817. package/src/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +2 -2
  818. package/src/core/geom/3d/topology/simplify/partial_edge_collapse.d.ts +11 -0
  819. package/src/core/geom/3d/topology/simplify/partial_edge_collapse.d.ts.map +1 -0
  820. package/src/core/geom/3d/topology/simplify/{collapseEdge.js → partial_edge_collapse.js} +118 -167
  821. package/src/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +2 -2
  822. package/src/core/geom/3d/topology/simplify/quadratic/apply_border_penalties_to_vertex_quadrics.d.ts +9 -0
  823. package/src/core/geom/3d/topology/simplify/quadratic/apply_border_penalties_to_vertex_quadrics.d.ts.map +1 -0
  824. package/src/core/geom/3d/topology/simplify/quadratic/apply_border_penalties_to_vertex_quadrics.js +16 -0
  825. package/src/core/geom/3d/topology/simplify/quadratic/apply_border_penalty_to_vertex_quadrics.d.ts +10 -0
  826. package/src/core/geom/3d/topology/simplify/quadratic/apply_border_penalty_to_vertex_quadrics.d.ts.map +1 -0
  827. package/src/core/geom/3d/topology/simplify/quadratic/apply_border_penalty_to_vertex_quadrics.js +47 -0
  828. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadrics.d.ts +9 -0
  829. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadrics.d.ts.map +1 -0
  830. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadrics.js +95 -0
  831. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.d.ts +4 -7
  832. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.d.ts.map +1 -1
  833. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadratic.js +7 -28
  834. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadric.d.ts +10 -0
  835. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadric.d.ts.map +1 -0
  836. package/src/core/geom/3d/topology/simplify/quadratic/compute_edge_collapse_cost_quadric.js +28 -0
  837. package/src/core/geom/3d/topology/simplify/quadratic/deep_copy_vertex_quadrics.d.ts +8 -0
  838. package/src/core/geom/3d/topology/simplify/quadratic/deep_copy_vertex_quadrics.d.ts.map +1 -0
  839. package/src/core/geom/3d/topology/simplify/quadratic/deep_copy_vertex_quadrics.js +20 -0
  840. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh.js +2 -2
  841. package/src/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +2 -2
  842. package/src/core/geom/3d/topology/struct/TopoMesh.d.ts +3 -3
  843. package/src/core/geom/3d/topology/struct/TopoMesh.js +10 -10
  844. package/src/core/geom/3d/topology/struct/TopoTriangle.js +2 -2
  845. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_bridge_islands.js +4 -4
  846. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_cleanup_faceless_references.js +2 -2
  847. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +2 -2
  848. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.js +2 -2
  849. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts +4 -11
  850. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts.map +1 -1
  851. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.js +4 -92
  852. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts +14 -0
  853. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts.map +1 -0
  854. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +95 -0
  855. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple_islands.js +2 -2
  856. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.d.ts.map +1 -1
  857. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_island_erode.js +6 -8
  858. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.js +2 -2
  859. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_resolve_t_junctions.js +3 -3
  860. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +6 -6
  861. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify_by_error.d.ts.map +1 -1
  862. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify_by_error.js +45 -10
  863. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_collapse.js +2 -2
  864. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts +14 -0
  865. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts.map +1 -1
  866. package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +6 -2
  867. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts +4 -4
  868. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts.map +1 -1
  869. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.js +7 -8
  870. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_vertices_by_distance.d.ts +10 -0
  871. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_vertices_by_distance.d.ts.map +1 -0
  872. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_vertices_by_distance.js +165 -0
  873. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts +4 -7
  874. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts.map +1 -1
  875. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.js +7 -165
  876. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts +4 -19
  877. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts.map +1 -1
  878. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.js +4 -145
  879. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts +4 -4
  880. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts.map +1 -1
  881. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.js +7 -21
  882. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.d.ts +22 -0
  883. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.d.ts.map +1 -0
  884. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.js +148 -0
  885. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill.d.ts +7 -0
  886. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill.d.ts.map +1 -0
  887. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill.js +21 -0
  888. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill_only.d.ts +7 -0
  889. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill_only.d.ts.map +1 -0
  890. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_kill_only.js +8 -0
  891. package/src/core/geom/3d/topology/struct/binary/query/bt_collect_boundary_segments.d.ts +14 -0
  892. package/src/core/geom/3d/topology/struct/binary/query/bt_collect_boundary_segments.d.ts.map +1 -0
  893. package/src/core/geom/3d/topology/struct/binary/query/bt_collect_boundary_segments.js +29 -0
  894. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_is_boundary.d.ts +11 -0
  895. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_is_boundary.d.ts.map +1 -0
  896. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_is_boundary.js +20 -0
  897. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts +4 -9
  898. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts.map +1 -1
  899. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.js +7 -96
  900. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces.d.ts +12 -0
  901. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces.d.ts.map +1 -0
  902. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces.js +74 -0
  903. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +2 -2
  904. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts +4 -9
  905. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts.map +1 -1
  906. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.js +7 -74
  907. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_shared_loop.d.ts +15 -0
  908. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_shared_loop.d.ts.map +1 -0
  909. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_shared_loop.js +48 -0
  910. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.d.ts +12 -0
  911. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.d.ts.map +1 -0
  912. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.js +96 -0
  913. package/src/core/geom/3d/topology/struct/binary/query/bt_face_island_flood_fill.js +2 -2
  914. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts +4 -12
  915. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts.map +1 -1
  916. package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.js +4 -45
  917. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_euclidean_distance_field.d.ts +0 -23
  918. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_euclidean_distance_field.d.ts.map +1 -1
  919. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_euclidean_distance_field.js +2 -54
  920. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.d.ts +9 -0
  921. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.d.ts.map +1 -0
  922. package/src/{engine/navigation/mesh/bvh_build_from_bt_mesh.js → core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.js} +5 -3
  923. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.d.ts.map +1 -0
  924. package/src/{engine/navigation/mesh → core/geom/3d/topology/struct/binary/query}/bt_mesh_face_find_path.js +7 -9
  925. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.d.ts.map +1 -0
  926. package/src/{engine/navigation/mesh → core/geom/3d/topology/struct/binary/query}/bt_mesh_face_find_path_polyanya.js +16 -16
  927. package/src/{engine/navigation/mesh/bvh_query_nearest_face.d.ts → core/geom/3d/topology/struct/binary/query/bt_mesh_find_nearest_face.d.ts} +3 -3
  928. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_find_nearest_face.d.ts.map +1 -0
  929. package/src/{engine/navigation/mesh/bvh_query_nearest_face.js → core/geom/3d/topology/struct/binary/query/bt_mesh_find_nearest_face.js} +9 -11
  930. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +3 -3
  931. package/src/{engine/navigation/mesh/bvh_segment_penetrates_mesh.d.ts → core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.d.ts} +3 -3
  932. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.d.ts.map +1 -0
  933. package/src/{engine/navigation/mesh/bvh_segment_penetrates_mesh.js → core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.js} +4 -4
  934. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +3 -3
  935. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +4 -8
  936. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -1
  937. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +4 -17
  938. package/src/core/geom/3d/topology/tm_edge_kill.js +2 -2
  939. package/src/core/geom/3d/topology/tm_edge_kill_only.d.ts +7 -0
  940. package/src/core/geom/3d/topology/tm_edge_kill_only.d.ts.map +1 -0
  941. package/src/core/geom/3d/topology/tm_edge_kill_only.js +35 -0
  942. package/src/core/geom/3d/topology/tm_face_area.js +2 -2
  943. package/src/core/geom/3d/topology/tm_face_kill.js +2 -2
  944. package/src/core/geom/3d/topology/tm_face_kill_only.d.ts +7 -0
  945. package/src/core/geom/3d/topology/tm_face_kill_only.d.ts.map +1 -0
  946. package/src/core/geom/3d/topology/tm_face_kill_only.js +12 -0
  947. package/src/core/geom/3d/topology/tm_face_normal.js +2 -2
  948. package/src/core/geom/3d/topology/tm_kill_only_edge.d.ts +4 -4
  949. package/src/core/geom/3d/topology/tm_kill_only_edge.d.ts.map +1 -1
  950. package/src/core/geom/3d/topology/tm_kill_only_edge.js +7 -35
  951. package/src/core/geom/3d/topology/tm_kill_only_face.d.ts +4 -4
  952. package/src/core/geom/3d/topology/tm_kill_only_face.d.ts.map +1 -1
  953. package/src/core/geom/3d/topology/tm_kill_only_face.js +7 -12
  954. package/src/core/geom/3d/topology/tm_kill_only_vert.d.ts +4 -4
  955. package/src/core/geom/3d/topology/tm_kill_only_vert.d.ts.map +1 -1
  956. package/src/core/geom/3d/topology/tm_kill_only_vert.js +7 -14
  957. package/src/core/geom/3d/topology/tm_vert_kill.d.ts +4 -4
  958. package/src/core/geom/3d/topology/tm_vert_kill.d.ts.map +1 -1
  959. package/src/core/geom/3d/topology/tm_vert_kill.js +7 -19
  960. package/src/core/geom/3d/topology/tm_vert_splice.d.ts +4 -9
  961. package/src/core/geom/3d/topology/tm_vert_splice.d.ts.map +1 -1
  962. package/src/core/geom/3d/topology/tm_vert_splice.js +7 -64
  963. package/src/core/geom/3d/topology/tm_vertex_compute_normal.js +2 -2
  964. package/src/core/geom/3d/topology/tm_vertex_kill.d.ts +7 -0
  965. package/src/core/geom/3d/topology/tm_vertex_kill.d.ts.map +1 -0
  966. package/src/core/geom/3d/topology/tm_vertex_kill.js +19 -0
  967. package/src/core/geom/3d/topology/tm_vertex_kill_only.d.ts +7 -0
  968. package/src/core/geom/3d/topology/tm_vertex_kill_only.d.ts.map +1 -0
  969. package/src/core/geom/3d/topology/tm_vertex_kill_only.js +14 -0
  970. package/src/core/geom/3d/topology/tm_vertex_splice.d.ts +12 -0
  971. package/src/core/geom/3d/topology/tm_vertex_splice.d.ts.map +1 -0
  972. package/src/core/geom/3d/topology/tm_vertex_splice.js +64 -0
  973. package/src/core/geom/3d/topology/tm_weld_duplicate_vertices.js +4 -4
  974. package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.d.ts +4 -17
  975. package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.d.ts.map +1 -1
  976. package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.js +7 -167
  977. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.d.ts +4 -20
  978. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.d.ts.map +1 -1
  979. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +4 -157
  980. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.d.ts +4 -22
  981. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.d.ts.map +1 -1
  982. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.js +4 -93
  983. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts +4 -23
  984. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts.map +1 -1
  985. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +7 -95
  986. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts +4 -13
  987. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts.map +1 -1
  988. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.js +7 -55
  989. package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts +4 -12
  990. package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +1 -1
  991. package/src/core/geom/3d/triangle/compute_triangle_area_3d.js +7 -50
  992. package/src/core/geom/3d/triangle/compute_triangle_normal.d.ts +4 -18
  993. package/src/core/geom/3d/triangle/compute_triangle_normal.d.ts.map +1 -1
  994. package/src/core/geom/3d/triangle/compute_triangle_normal.js +7 -25
  995. package/src/core/geom/3d/triangle/rayTriangleIntersection.d.ts +4 -10
  996. package/src/core/geom/3d/triangle/rayTriangleIntersection.d.ts.map +1 -1
  997. package/src/core/geom/3d/triangle/rayTriangleIntersection.js +7 -37
  998. package/src/core/geom/3d/triangle/tri3_area.d.ts +15 -0
  999. package/src/core/geom/3d/triangle/tri3_area.d.ts.map +1 -0
  1000. package/src/core/geom/3d/triangle/tri3_area.js +50 -0
  1001. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts +20 -0
  1002. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts.map +1 -0
  1003. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +167 -0
  1004. package/src/core/geom/3d/triangle/tri3_compute_normal.d.ts +16 -0
  1005. package/src/core/geom/3d/triangle/tri3_compute_normal.d.ts.map +1 -0
  1006. package/src/core/geom/3d/triangle/tri3_compute_normal.js +57 -0
  1007. package/src/core/geom/3d/triangle/tri3_compute_normal_v3_objects.d.ts +21 -0
  1008. package/src/core/geom/3d/triangle/tri3_compute_normal_v3_objects.d.ts.map +1 -0
  1009. package/src/core/geom/3d/triangle/tri3_compute_normal_v3_objects.js +25 -0
  1010. package/src/core/geom/3d/triangle/tri3_compute_plane_side.d.ts +24 -0
  1011. package/src/core/geom/3d/triangle/tri3_compute_plane_side.d.ts.map +1 -0
  1012. package/src/core/geom/3d/triangle/tri3_compute_plane_side.js +39 -0
  1013. package/src/core/geom/3d/triangle/tri3_compute_signed_volume.d.ts +17 -0
  1014. package/src/core/geom/3d/triangle/tri3_compute_signed_volume.d.ts.map +1 -0
  1015. package/src/core/geom/3d/triangle/tri3_compute_signed_volume.js +33 -0
  1016. package/src/core/geom/3d/triangle/tri3_incenter.d.ts +19 -0
  1017. package/src/core/geom/3d/triangle/tri3_incenter.d.ts.map +1 -0
  1018. package/src/core/geom/3d/triangle/tri3_incenter.js +60 -0
  1019. package/src/core/geom/3d/triangle/tri3_intersects_clipping_volume.d.ts +17 -0
  1020. package/src/core/geom/3d/triangle/tri3_intersects_clipping_volume.d.ts.map +1 -0
  1021. package/src/core/geom/3d/triangle/tri3_intersects_clipping_volume.js +51 -0
  1022. package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.d.ts +20 -0
  1023. package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.d.ts.map +1 -0
  1024. package/src/core/geom/3d/triangle/tri3_mesh_compute_signed_volume.js +38 -0
  1025. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +23 -0
  1026. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -0
  1027. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +160 -0
  1028. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.d.ts +25 -0
  1029. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.d.ts.map +1 -0
  1030. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.js +96 -0
  1031. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.d.ts +26 -0
  1032. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.d.ts.map +1 -0
  1033. package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.js +95 -0
  1034. package/src/core/geom/3d/triangle/tri3_ray_intersection_indexed.d.ts +16 -0
  1035. package/src/core/geom/3d/triangle/tri3_ray_intersection_indexed.d.ts.map +1 -0
  1036. package/src/core/geom/3d/triangle/tri3_ray_intersection_indexed.js +55 -0
  1037. package/src/core/geom/3d/triangle/tri3_ray_intersection_v3_objects.d.ts +13 -0
  1038. package/src/core/geom/3d/triangle/tri3_ray_intersection_v3_objects.d.ts.map +1 -0
  1039. package/src/core/geom/3d/triangle/tri3_ray_intersection_v3_objects.js +37 -0
  1040. package/src/core/geom/3d/triangle/triangle3_incenter.d.ts +4 -16
  1041. package/src/core/geom/3d/triangle/triangle3_incenter.d.ts.map +1 -1
  1042. package/src/core/geom/3d/triangle/triangle3_incenter.js +7 -60
  1043. package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts +4 -21
  1044. package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts.map +1 -1
  1045. package/src/core/geom/3d/triangle/triangle_compute_plane_side.js +7 -39
  1046. package/src/core/geom/3d/triangle/triangle_compute_signed_volume.d.ts +4 -14
  1047. package/src/core/geom/3d/triangle/triangle_compute_signed_volume.d.ts.map +1 -1
  1048. package/src/core/geom/3d/triangle/triangle_compute_signed_volume.js +7 -33
  1049. package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.d.ts +4 -14
  1050. package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.d.ts.map +1 -1
  1051. package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.js +7 -51
  1052. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +4 -17
  1053. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -1
  1054. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +4 -35
  1055. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +4 -13
  1056. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +1 -1
  1057. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +7 -57
  1058. package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts +10 -0
  1059. package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts.map +1 -0
  1060. package/src/core/geom/3d/util/aabb3_emit_point_grid.js +42 -0
  1061. package/src/core/geom/3d/util/make_justified_point_grid.d.ts +4 -7
  1062. package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +1 -1
  1063. package/src/core/geom/3d/util/make_justified_point_grid.js +7 -42
  1064. package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +381 -0
  1065. package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +684 -0
  1066. package/src/core/geom/Vector3.js +2 -2
  1067. package/src/core/geom/Vector4.d.ts +1 -1
  1068. package/src/core/geom/Vector4.d.ts.map +1 -1
  1069. package/src/core/geom/Vector4.js +0 -10
  1070. package/src/core/geom/mat3/m3_cm_from_translation.d.ts +4 -5
  1071. package/src/core/geom/mat3/m3_cm_from_translation.d.ts.map +1 -1
  1072. package/src/core/geom/mat3/m3_cm_from_translation.js +7 -19
  1073. package/src/core/geom/mat3/m3_cm_invert.d.ts +4 -4
  1074. package/src/core/geom/mat3/m3_cm_invert.d.ts.map +1 -1
  1075. package/src/core/geom/mat3/m3_cm_invert.js +7 -45
  1076. package/src/core/geom/mat3/m3_cm_make_translation.d.ts +8 -0
  1077. package/src/core/geom/mat3/m3_cm_make_translation.d.ts.map +1 -0
  1078. package/src/core/geom/mat3/m3_cm_make_translation.js +19 -0
  1079. package/src/core/geom/mat3/m3_invert.d.ts +7 -0
  1080. package/src/core/geom/mat3/m3_invert.d.ts.map +1 -0
  1081. package/src/core/geom/mat3/m3_invert.js +45 -0
  1082. package/src/core/geom/mat3/m3_make_rotation.d.ts +1 -8
  1083. package/src/core/geom/mat3/m3_make_rotation.d.ts.map +1 -1
  1084. package/src/core/geom/mat3/m3_make_rotation.js +5 -31
  1085. package/src/core/geom/mat3/m3_make_rotation_TBN.d.ts +9 -0
  1086. package/src/core/geom/mat3/m3_make_rotation_TBN.d.ts.map +1 -0
  1087. package/src/core/geom/mat3/m3_make_rotation_TBN.js +31 -0
  1088. package/src/core/geom/mat3/m3_multiply_vec3.d.ts +4 -5
  1089. package/src/core/geom/mat3/m3_multiply_vec3.d.ts.map +1 -1
  1090. package/src/core/geom/mat3/m3_multiply_vec3.js +7 -21
  1091. package/src/core/geom/mat3/m3_scale_columns_by_vec3.d.ts +8 -0
  1092. package/src/core/geom/mat3/m3_scale_columns_by_vec3.d.ts.map +1 -0
  1093. package/src/core/geom/mat3/m3_scale_columns_by_vec3.js +21 -0
  1094. package/src/core/geom/packing/computeBoundingSphereOfSpheres.d.ts +4 -9
  1095. package/src/core/geom/packing/computeBoundingSphereOfSpheres.d.ts.map +1 -1
  1096. package/src/core/geom/packing/computeBoundingSphereOfSpheres.js +7 -102
  1097. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.js +9 -9
  1098. package/src/core/geom/packing/max-rect/aabb2_validate_packing.d.ts +7 -1
  1099. package/src/core/geom/packing/max-rect/aabb2_validate_packing.d.ts.map +1 -1
  1100. package/src/core/geom/packing/max-rect/aabb2_validate_packing.js +2 -2
  1101. package/src/core/geom/packing/max-rect/cost/costByBestShortSide.d.ts +4 -7
  1102. package/src/core/geom/packing/max-rect/cost/costByBestShortSide.d.ts.map +1 -1
  1103. package/src/core/geom/packing/max-rect/cost/costByBestShortSide.js +7 -11
  1104. package/src/core/geom/packing/max-rect/cost/costByRemainingArea.d.ts +4 -7
  1105. package/src/core/geom/packing/max-rect/cost/costByRemainingArea.d.ts.map +1 -1
  1106. package/src/core/geom/packing/max-rect/cost/costByRemainingArea.js +7 -14
  1107. package/src/core/geom/packing/max-rect/cost/cost_by_best_short_side.d.ts +10 -0
  1108. package/src/core/geom/packing/max-rect/cost/cost_by_best_short_side.d.ts.map +1 -0
  1109. package/src/core/geom/packing/max-rect/cost/cost_by_best_short_side.js +11 -0
  1110. package/src/core/geom/packing/max-rect/cost/cost_by_remaining_area.d.ts +10 -0
  1111. package/src/core/geom/packing/max-rect/cost/cost_by_remaining_area.d.ts.map +1 -0
  1112. package/src/core/geom/packing/max-rect/cost/cost_by_remaining_area.js +14 -0
  1113. package/src/core/geom/packing/max-rect/cutArea.d.ts +4 -4
  1114. package/src/core/geom/packing/max-rect/cutArea.d.ts.map +1 -1
  1115. package/src/core/geom/packing/max-rect/cutArea.js +7 -85
  1116. package/src/core/geom/packing/max-rect/cut_area.d.ts +7 -0
  1117. package/src/core/geom/packing/max-rect/cut_area.d.ts.map +1 -0
  1118. package/src/core/geom/packing/max-rect/cut_area.js +85 -0
  1119. package/src/core/geom/packing/max-rect/findBestContainer.d.ts +4 -7
  1120. package/src/core/geom/packing/max-rect/findBestContainer.d.ts.map +1 -1
  1121. package/src/core/geom/packing/max-rect/findBestContainer.js +7 -80
  1122. package/src/core/geom/packing/max-rect/find_best_container.d.ts +10 -0
  1123. package/src/core/geom/packing/max-rect/find_best_container.d.ts.map +1 -0
  1124. package/src/core/geom/packing/max-rect/find_best_container.js +80 -0
  1125. package/src/core/geom/packing/max-rect/packMaxRectangles.d.ts +4 -7
  1126. package/src/core/geom/packing/max-rect/packMaxRectangles.d.ts.map +1 -1
  1127. package/src/core/geom/packing/max-rect/packMaxRectangles.js +7 -16
  1128. package/src/core/geom/packing/max-rect/packOneBox.d.ts +4 -5
  1129. package/src/core/geom/packing/max-rect/packOneBox.d.ts.map +1 -1
  1130. package/src/core/geom/packing/max-rect/packOneBox.js +7 -54
  1131. package/src/core/geom/packing/max-rect/pack_max_rectangles.d.ts +10 -0
  1132. package/src/core/geom/packing/max-rect/pack_max_rectangles.d.ts.map +1 -0
  1133. package/src/core/geom/packing/max-rect/pack_max_rectangles.js +16 -0
  1134. package/src/core/geom/packing/max-rect/pack_one_box.d.ts +8 -0
  1135. package/src/core/geom/packing/max-rect/pack_one_box.d.ts.map +1 -0
  1136. package/src/core/geom/packing/max-rect/pack_one_box.js +54 -0
  1137. package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts +4 -3
  1138. package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +1 -1
  1139. package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +7 -84
  1140. package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.d.ts +4 -3
  1141. package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.d.ts.map +1 -1
  1142. package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.js +7 -46
  1143. package/src/core/geom/packing/max-rect/remove_redundant_boxes.d.ts +6 -0
  1144. package/src/core/geom/packing/max-rect/remove_redundant_boxes.d.ts.map +1 -0
  1145. package/src/core/geom/packing/max-rect/remove_redundant_boxes.js +84 -0
  1146. package/src/core/geom/packing/max-rect/remove_redundant_boxes_from_array.d.ts +6 -0
  1147. package/src/core/geom/packing/max-rect/remove_redundant_boxes_from_array.d.ts.map +1 -0
  1148. package/src/core/geom/packing/max-rect/remove_redundant_boxes_from_array.js +46 -0
  1149. package/src/core/geom/packing/sphere_compute_bounding_of_spheres.d.ts +12 -0
  1150. package/src/core/geom/packing/sphere_compute_bounding_of_spheres.d.ts.map +1 -0
  1151. package/src/core/geom/packing/sphere_compute_bounding_of_spheres.js +102 -0
  1152. package/src/core/geom/random/randomPointInBox.d.ts +4 -5
  1153. package/src/core/geom/random/randomPointInBox.d.ts.map +1 -1
  1154. package/src/core/geom/random/randomPointInBox.js +7 -16
  1155. package/src/core/geom/random/randomPointInCircle.d.ts +4 -6
  1156. package/src/core/geom/random/randomPointInCircle.d.ts.map +1 -1
  1157. package/src/core/geom/random/randomPointInCircle.js +7 -21
  1158. package/src/core/geom/random/randomPointInPoint.d.ts +4 -5
  1159. package/src/core/geom/random/randomPointInPoint.d.ts.map +1 -1
  1160. package/src/core/geom/random/randomPointInPoint.js +7 -11
  1161. package/src/core/geom/random/randomPointInSphere.d.ts +4 -6
  1162. package/src/core/geom/random/randomPointInSphere.d.ts.map +1 -1
  1163. package/src/core/geom/random/randomPointInSphere.js +7 -35
  1164. package/src/core/geom/random/randomPointOnBox.d.ts +4 -5
  1165. package/src/core/geom/random/randomPointOnBox.d.ts.map +1 -1
  1166. package/src/core/geom/random/randomPointOnBox.js +7 -37
  1167. package/src/core/geom/random/randomPointOnSphere.d.ts +4 -6
  1168. package/src/core/geom/random/randomPointOnSphere.d.ts.map +1 -1
  1169. package/src/core/geom/random/randomPointOnSphere.js +7 -26
  1170. package/src/core/geom/random/random_point_in_box.d.ts +8 -0
  1171. package/src/core/geom/random/random_point_in_box.d.ts.map +1 -0
  1172. package/src/core/geom/random/random_point_in_box.js +16 -0
  1173. package/src/core/geom/random/random_point_in_circle.d.ts +9 -0
  1174. package/src/core/geom/random/random_point_in_circle.d.ts.map +1 -0
  1175. package/src/core/geom/random/random_point_in_circle.js +21 -0
  1176. package/src/core/geom/random/random_point_in_point.d.ts +8 -0
  1177. package/src/core/geom/random/random_point_in_point.d.ts.map +1 -0
  1178. package/src/core/geom/random/random_point_in_point.js +11 -0
  1179. package/src/core/geom/random/random_point_in_sphere.d.ts +9 -0
  1180. package/src/core/geom/random/random_point_in_sphere.d.ts.map +1 -0
  1181. package/src/core/geom/random/random_point_in_sphere.js +35 -0
  1182. package/src/core/geom/random/random_point_on_box.d.ts +8 -0
  1183. package/src/core/geom/random/random_point_on_box.d.ts.map +1 -0
  1184. package/src/core/geom/random/random_point_on_box.js +37 -0
  1185. package/src/core/geom/random/random_point_on_sphere.d.ts +9 -0
  1186. package/src/core/geom/random/random_point_on_sphere.d.ts.map +1 -0
  1187. package/src/core/geom/random/random_point_on_sphere.js +26 -0
  1188. package/src/core/geom/vec/vector_copy.d.ts +4 -7
  1189. package/src/core/geom/vec/vector_copy.d.ts.map +1 -1
  1190. package/src/core/geom/vec/vector_copy.js +7 -13
  1191. package/src/core/geom/vec/vector_copy_offset.d.ts +10 -0
  1192. package/src/core/geom/vec/vector_copy_offset.d.ts.map +1 -0
  1193. package/src/core/geom/vec/vector_copy_offset.js +13 -0
  1194. package/src/core/geom/vec/vector_scale_array.d.ts +4 -8
  1195. package/src/core/geom/vec/vector_scale_array.d.ts.map +1 -1
  1196. package/src/core/geom/vec/vector_scale_array.js +7 -31
  1197. package/src/core/geom/vec/vector_scale_offset.d.ts +11 -0
  1198. package/src/core/geom/vec/vector_scale_offset.d.ts.map +1 -0
  1199. package/src/core/geom/vec/vector_scale_offset.js +31 -0
  1200. package/src/core/geom/vec3/v3_add.d.ts +10 -0
  1201. package/src/core/geom/vec3/v3_add.d.ts.map +1 -0
  1202. package/src/core/geom/vec3/v3_add.js +13 -0
  1203. package/src/core/geom/vec3/v3_add_array.d.ts +10 -0
  1204. package/src/core/geom/vec3/v3_add_array.d.ts.map +1 -0
  1205. package/src/core/geom/vec3/v3_add_array.js +19 -0
  1206. package/src/core/geom/vec3/v3_angle.d.ts +12 -0
  1207. package/src/core/geom/vec3/v3_angle.d.ts.map +1 -0
  1208. package/src/core/geom/vec3/v3_angle.js +23 -0
  1209. package/src/core/geom/vec3/v3_angle_atan2_between.d.ts +4 -9
  1210. package/src/core/geom/vec3/v3_angle_atan2_between.d.ts.map +1 -1
  1211. package/src/core/geom/vec3/v3_angle_atan2_between.js +7 -27
  1212. package/src/core/geom/vec3/v3_angle_between.d.ts +4 -9
  1213. package/src/core/geom/vec3/v3_angle_between.d.ts.map +1 -1
  1214. package/src/core/geom/vec3/v3_angle_between.js +7 -23
  1215. package/src/core/geom/vec3/v3_angle_cos_between.d.ts +4 -9
  1216. package/src/core/geom/vec3/v3_angle_cos_between.d.ts.map +1 -1
  1217. package/src/core/geom/vec3/v3_angle_cos_between.js +7 -35
  1218. package/src/core/geom/vec3/v3_angle_stable.d.ts +12 -0
  1219. package/src/core/geom/vec3/v3_angle_stable.d.ts.map +1 -0
  1220. package/src/core/geom/vec3/v3_angle_stable.js +27 -0
  1221. package/src/core/geom/vec3/v3_array_add_in_place.d.ts +4 -7
  1222. package/src/core/geom/vec3/v3_array_add_in_place.d.ts.map +1 -1
  1223. package/src/core/geom/vec3/v3_array_add_in_place.js +7 -13
  1224. package/src/core/geom/vec3/v3_array_centroid.d.ts +4 -8
  1225. package/src/core/geom/vec3/v3_array_centroid.d.ts.map +1 -1
  1226. package/src/core/geom/vec3/v3_array_centroid.js +7 -40
  1227. package/src/core/geom/vec3/v3_array_copy.d.ts +4 -6
  1228. package/src/core/geom/vec3/v3_array_copy.d.ts.map +1 -1
  1229. package/src/core/geom/vec3/v3_array_copy.js +7 -17
  1230. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +4 -11
  1231. package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +1 -1
  1232. package/src/core/geom/vec3/v3_array_displace_in_direction.js +7 -23
  1233. package/src/core/geom/vec3/v3_array_equals.d.ts +4 -6
  1234. package/src/core/geom/vec3/v3_array_equals.d.ts.map +1 -1
  1235. package/src/core/geom/vec3/v3_array_equals.js +7 -13
  1236. package/src/core/geom/vec3/v3_array_immediate_add.d.ts +4 -7
  1237. package/src/core/geom/vec3/v3_array_immediate_add.d.ts.map +1 -1
  1238. package/src/core/geom/vec3/v3_array_immediate_add.js +7 -19
  1239. package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts +4 -8
  1240. package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts.map +1 -1
  1241. package/src/core/geom/vec3/v3_array_matrix4_rotate.js +7 -22
  1242. package/src/core/geom/vec3/v3_array_normalize.d.ts +4 -6
  1243. package/src/core/geom/vec3/v3_array_normalize.d.ts.map +1 -1
  1244. package/src/core/geom/vec3/v3_array_normalize.js +7 -32
  1245. package/src/core/geom/vec3/v3_array_scale.d.ts +4 -8
  1246. package/src/core/geom/vec3/v3_array_scale.d.ts.map +1 -1
  1247. package/src/core/geom/vec3/v3_array_scale.js +5 -16
  1248. package/src/core/geom/vec3/v3_centroid_v3_buffer.d.ts +11 -0
  1249. package/src/core/geom/vec3/v3_centroid_v3_buffer.d.ts.map +1 -0
  1250. package/src/core/geom/vec3/v3_centroid_v3_buffer.js +40 -0
  1251. package/src/core/geom/vec3/v3_compute_interior_angle.d.ts +4 -19
  1252. package/src/core/geom/vec3/v3_compute_interior_angle.d.ts.map +1 -1
  1253. package/src/core/geom/vec3/v3_compute_interior_angle.js +7 -26
  1254. package/src/core/geom/vec3/v3_copy_array.d.ts +9 -0
  1255. package/src/core/geom/vec3/v3_copy_array.d.ts.map +1 -0
  1256. package/src/core/geom/vec3/v3_copy_array.js +17 -0
  1257. package/src/core/geom/vec3/v3_cos_angle.d.ts +12 -0
  1258. package/src/core/geom/vec3/v3_cos_angle.d.ts.map +1 -0
  1259. package/src/core/geom/vec3/v3_cos_angle.js +35 -0
  1260. package/src/core/geom/vec3/v3_displace_in_direction_to_array.d.ts +14 -0
  1261. package/src/core/geom/vec3/v3_displace_in_direction_to_array.d.ts.map +1 -0
  1262. package/src/core/geom/vec3/v3_displace_in_direction_to_array.js +23 -0
  1263. package/src/core/geom/vec3/v3_dot_array.d.ts +10 -0
  1264. package/src/core/geom/vec3/v3_dot_array.d.ts.map +1 -0
  1265. package/src/core/geom/vec3/v3_dot_array.js +25 -0
  1266. package/src/core/geom/vec3/v3_dot_array_array.d.ts +4 -7
  1267. package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
  1268. package/src/core/geom/vec3/v3_dot_array_array.js +7 -25
  1269. package/src/core/geom/vec3/v3_equals_array.d.ts +9 -0
  1270. package/src/core/geom/vec3/v3_equals_array.d.ts.map +1 -0
  1271. package/src/core/geom/vec3/v3_equals_array.js +13 -0
  1272. package/src/core/geom/vec3/v3_interior_angle.d.ts +22 -0
  1273. package/src/core/geom/vec3/v3_interior_angle.d.ts.map +1 -0
  1274. package/src/core/geom/vec3/v3_interior_angle.js +26 -0
  1275. package/src/core/geom/vec3/v3_matrix3_rotate.d.ts +3 -3
  1276. package/src/core/geom/vec3/v3_matrix3_rotate.d.ts.map +1 -1
  1277. package/src/core/geom/vec3/v3_matrix3_rotate.js +2 -2
  1278. package/src/core/geom/vec3/v3_matrix4_rotate.d.ts +4 -13
  1279. package/src/core/geom/vec3/v3_matrix4_rotate.d.ts.map +1 -1
  1280. package/src/core/geom/vec3/v3_matrix4_rotate.js +7 -51
  1281. package/src/core/geom/vec3/v3_matrix4_rotate_array.d.ts +11 -0
  1282. package/src/core/geom/vec3/v3_matrix4_rotate_array.d.ts.map +1 -0
  1283. package/src/core/geom/vec3/v3_matrix4_rotate_array.js +22 -0
  1284. package/src/core/geom/vec3/v3_matrix4_rotate_unit.d.ts +16 -0
  1285. package/src/core/geom/vec3/v3_matrix4_rotate_unit.d.ts.map +1 -0
  1286. package/src/core/geom/vec3/v3_matrix4_rotate_unit.js +51 -0
  1287. package/src/core/geom/vec3/v3_multiply_scalar.d.ts +4 -8
  1288. package/src/core/geom/vec3/v3_multiply_scalar.d.ts.map +1 -1
  1289. package/src/core/geom/vec3/v3_multiply_scalar.js +7 -19
  1290. package/src/core/geom/vec3/v3_normalize_array.d.ts +9 -0
  1291. package/src/core/geom/vec3/v3_normalize_array.d.ts.map +1 -0
  1292. package/src/core/geom/vec3/v3_normalize_array.js +32 -0
  1293. package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.d.ts +4 -1
  1294. package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.d.ts.map +1 -1
  1295. package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.js +4 -1
  1296. package/src/core/geom/vec3/v3_quat3_apply.d.ts +4 -26
  1297. package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +1 -1
  1298. package/src/core/geom/vec3/v3_quat3_apply.js +5 -37
  1299. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +4 -27
  1300. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +1 -1
  1301. package/src/core/geom/vec3/v3_quat3_apply_inverse.js +5 -39
  1302. package/src/core/geom/vec3/v3_quaternion_apply.d.ts +29 -0
  1303. package/src/core/geom/vec3/v3_quaternion_apply.d.ts.map +1 -0
  1304. package/src/core/geom/vec3/v3_quaternion_apply.js +39 -0
  1305. package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +30 -0
  1306. package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts.map +1 -0
  1307. package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +41 -0
  1308. package/src/core/geom/vec3/v3_reflect.d.ts +19 -0
  1309. package/src/core/geom/vec3/v3_reflect.d.ts.map +1 -0
  1310. package/src/core/geom/vec3/v3_reflect.js +24 -0
  1311. package/src/core/geom/vec3/v3_scale.d.ts +11 -0
  1312. package/src/core/geom/vec3/v3_scale.d.ts.map +1 -0
  1313. package/src/core/geom/vec3/v3_scale.js +19 -0
  1314. package/src/core/geom/vec3/v3_scale_array.d.ts +11 -0
  1315. package/src/core/geom/vec3/v3_scale_array.d.ts.map +1 -0
  1316. package/src/core/geom/vec3/v3_scale_array.js +18 -0
  1317. package/src/core/geom/vec3/v3_triple_cross.d.ts +32 -0
  1318. package/src/core/geom/vec3/v3_triple_cross.d.ts.map +1 -0
  1319. package/src/core/geom/vec3/v3_triple_cross.js +45 -0
  1320. package/src/core/geom/vec3/v3_triple_cross_product.d.ts +4 -29
  1321. package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +1 -1
  1322. package/src/core/geom/vec3/v3_triple_cross_product.js +5 -43
  1323. package/src/core/geom/vec4/v4_matrix4_multiply.d.ts +8 -0
  1324. package/src/core/geom/vec4/v4_matrix4_multiply.d.ts.map +1 -0
  1325. package/src/core/geom/vec4/v4_matrix4_multiply.js +42 -0
  1326. package/src/core/geom/vec4/v4_multiply_mat4.d.ts +4 -5
  1327. package/src/core/geom/vec4/v4_multiply_mat4.d.ts.map +1 -1
  1328. package/src/core/geom/vec4/v4_multiply_mat4.js +7 -42
  1329. package/src/core/graph/csr/CSRGraph.d.ts +12 -8
  1330. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  1331. package/src/core/graph/csr/CSRGraph.js +18 -10
  1332. package/src/core/graph/csr/csr_graph_build_distance_field.d.ts +36 -0
  1333. package/src/core/graph/csr/csr_graph_build_distance_field.d.ts.map +1 -0
  1334. package/src/core/graph/csr/csr_graph_build_distance_field.js +112 -0
  1335. package/src/core/graph/csr/csr_graph_find_edge.d.ts +15 -0
  1336. package/src/core/graph/csr/csr_graph_find_edge.d.ts.map +1 -0
  1337. package/src/core/graph/csr/csr_graph_find_edge.js +25 -0
  1338. package/src/core/graph/csr/csr_graph_find_shortest_path.d.ts +20 -0
  1339. package/src/core/graph/csr/csr_graph_find_shortest_path.d.ts.map +1 -0
  1340. package/src/core/graph/csr/csr_graph_find_shortest_path.js +105 -0
  1341. package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
  1342. package/src/core/graph/layout/CircleLayout.js +2 -4
  1343. package/src/core/graph/layout/box/applyCentralGravityAABB2.js +2 -2
  1344. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  1345. package/src/core/graph/metis/cluster_mesh_metis.js +8 -1
  1346. package/src/core/graph/metis/mesh_to_metis_graph.d.ts +2 -2
  1347. package/src/core/graph/metis/mesh_to_metis_graph.d.ts.map +1 -1
  1348. package/src/core/graph/metis/mesh_to_metis_graph.js +3 -3
  1349. package/src/core/graph/metis/native/MetisGraph.d.ts +26 -10
  1350. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -1
  1351. package/src/core/graph/metis/native/MetisGraph.js +34 -15
  1352. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +2 -2
  1353. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -1
  1354. package/src/core/graph/metis/native/bisection/BisectionScratch.js +4 -2
  1355. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -1
  1356. package/src/core/graph/metis/native/bisection/compute_2way_params.js +3 -1
  1357. package/src/core/graph/metis/native/metis_partition_kway.d.ts +2 -2
  1358. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -1
  1359. package/src/core/graph/metis/native/metis_partition_kway.js +1 -1
  1360. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -1
  1361. package/src/core/graph/metis/native/refine/compute_kway_params.js +20 -8
  1362. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -1
  1363. package/src/core/graph/metis/native/refine/fm_kway.js +58 -33
  1364. package/src/engine/EngineHarness.js +2 -2
  1365. package/src/engine/animation/curve/view/AnimationCurveView.js +2 -2
  1366. package/src/engine/asset/loaders/material/planeHash.js +2 -2
  1367. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  1368. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +7 -7
  1369. package/src/engine/control/first-person/prototype_first_person_controller.js +3 -3
  1370. package/src/engine/ecs/terrain/ecs/TerrainSystem.js +6 -6
  1371. package/src/engine/ecs/terrain/tiles/TerrainTile.js +2 -2
  1372. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +3 -3
  1373. package/src/engine/ecs/transform/Transform.js +7 -7
  1374. package/src/engine/ecs/transform/TransformSerializationAdapter.js +4 -4
  1375. package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.js +2 -2
  1376. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +2 -2
  1377. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +8 -8
  1378. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts.map +1 -1
  1379. package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.js +4 -6
  1380. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +2 -2
  1381. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +6 -6
  1382. package/src/engine/graphics/ecs/mesh-v2/render/ShadedGeometryRendererContext.js +3 -3
  1383. package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts +26 -5
  1384. package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
  1385. package/src/engine/graphics/ecs/trail2d/Trail2D.js +51 -11
  1386. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts.map +1 -1
  1387. package/src/engine/graphics/ecs/trail2d/Trail2DSystem.js +1 -0
  1388. package/src/engine/graphics/ecs/trail2d/prototypeTrail2D.js +2 -2
  1389. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +186 -0
  1390. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -0
  1391. package/src/engine/graphics/ecs/trail3d/Trail3D.js +430 -0
  1392. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +9 -0
  1393. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts.map +1 -0
  1394. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +18 -0
  1395. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts +55 -0
  1396. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.d.ts.map +1 -0
  1397. package/src/engine/graphics/ecs/trail3d/Trail3DSystem.js +248 -0
  1398. package/src/engine/graphics/ecs/trail3d/prototypeTrail3D.d.ts +2 -0
  1399. package/src/engine/graphics/ecs/trail3d/prototypeTrail3D.d.ts.map +1 -0
  1400. package/src/engine/graphics/ecs/trail3d/prototypeTrail3D.js +76 -0
  1401. package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.js +4 -4
  1402. package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +2 -2
  1403. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_nearest.d.ts.map +1 -1
  1404. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_nearest.js +4 -6
  1405. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_overlap_clipping_volume.d.ts.map +1 -1
  1406. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_overlap_clipping_volume.js +2 -4
  1407. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +2 -2
  1408. package/src/engine/graphics/geometry/buffered/query/query_bvh_geometry_nearest.d.ts.map +1 -1
  1409. package/src/engine/graphics/geometry/buffered/query/query_bvh_geometry_nearest.js +4 -6
  1410. package/src/engine/graphics/geometry/buffered/v3_array_normalize_many.js +2 -2
  1411. package/src/engine/graphics/geometry/computeMeshSurfaceArea.js +2 -2
  1412. package/src/engine/graphics/geometry/geometry_construct_triangle_normal.js +2 -2
  1413. package/src/engine/graphics/impostors/octahedral/bake/compute_bounding_sphere.js +2 -2
  1414. package/src/engine/graphics/impostors/octahedral/bake/compute_bounding_sphere_radius_only.d.ts.map +1 -1
  1415. package/src/engine/graphics/impostors/octahedral/bake/compute_bounding_sphere_radius_only.js +2 -4
  1416. package/src/engine/graphics/impostors/octahedral/util/sampler2d_build_cutout.js +4 -4
  1417. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +8 -8
  1418. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +20 -5
  1419. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +1 -1
  1420. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +2 -2
  1421. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +10 -10
  1422. package/src/engine/graphics/render/forward_plus/LightManager.d.ts.map +1 -1
  1423. package/src/engine/graphics/render/forward_plus/LightManager.js +8 -13
  1424. package/src/engine/graphics/render/forward_plus/assign_cluster.d.ts.map +1 -1
  1425. package/src/engine/graphics/render/forward_plus/assign_cluster.js +1 -2
  1426. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.d.ts.map +1 -1
  1427. package/src/engine/graphics/render/forward_plus/computeFrustumCorners.js +9 -11
  1428. package/src/engine/graphics/render/forward_plus/model/SpotLight.js +2 -2
  1429. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.d.ts +8 -0
  1430. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.d.ts.map +1 -1
  1431. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +8 -0
  1432. package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.d.ts +12 -2
  1433. package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.d.ts.map +1 -1
  1434. package/src/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +18 -48
  1435. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.d.ts +1 -2
  1436. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.d.ts.map +1 -1
  1437. package/src/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +2 -3
  1438. package/src/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +2 -2
  1439. package/src/engine/graphics/render/forward_plus/testClusterEquality.js +1 -1
  1440. package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.js +5 -5
  1441. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +1 -1
  1442. package/src/engine/graphics/render/layers/RenderLayerUtils.js +2 -4
  1443. package/src/engine/graphics/render/make_bvh_visibility_builder.js +3 -3
  1444. package/src/engine/graphics/render/view/CameraView.js +2 -2
  1445. package/src/engine/graphics/sh3/fromCubeRenderTarget.js +2 -2
  1446. package/src/engine/graphics/sh3/gi/prototypeSHGI.js +2 -2
  1447. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +4 -4
  1448. package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map.js +2 -2
  1449. package/src/engine/graphics/sh3/lpv/depth/octahedral/bake_octahedral_depth_map_fibonacci.js +2 -2
  1450. package/src/engine/graphics/sh3/lpv/depth/sh3_bake_depth.js +2 -2
  1451. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.d.ts.map +1 -1
  1452. package/src/engine/graphics/sh3/path_tracer/BufferedGeometryBVH.js +7 -8
  1453. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +1 -0
  1454. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
  1455. package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.js +20 -6
  1456. package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.d.ts +57 -0
  1457. package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.d.ts.map +1 -0
  1458. package/src/engine/graphics/sh3/path_tracer/PathTracedRenderer.js +186 -0
  1459. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.d.ts.map +1 -1
  1460. package/src/engine/graphics/sh3/path_tracer/PathTracedScene.js +166 -51
  1461. package/src/engine/graphics/sh3/path_tracer/PathTracer.d.ts.map +1 -1
  1462. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +44 -25
  1463. package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +490 -0
  1464. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +4 -4
  1465. package/src/engine/graphics/sh3/path_tracer/material/MaterialConverter.d.ts.map +1 -1
  1466. package/src/engine/graphics/sh3/path_tracer/material/MaterialConverter.js +10 -2
  1467. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts +6 -0
  1468. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.d.ts.map +1 -1
  1469. package/src/engine/graphics/sh3/path_tracer/material/StandardTexture.js +14 -0
  1470. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +9 -136
  1471. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts +2 -1
  1472. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.d.ts.map +1 -1
  1473. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +32 -31
  1474. package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.d.ts +3 -3
  1475. package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.d.ts.map +1 -1
  1476. package/src/engine/graphics/sh3/path_tracer/sampling/getBiasedNormalSample.js +3 -3
  1477. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts +1 -1
  1478. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.d.ts.map +1 -1
  1479. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +144 -133
  1480. package/src/engine/graphics/sh3/prototypeSH3Probe.js +2 -2
  1481. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +7 -7
  1482. package/src/engine/graphics/texture/sprite/prototypeSpriteCutoutGeometry.js +5 -5
  1483. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.js +2 -2
  1484. package/src/engine/graphics/trail/TrailSpawnMode.d.ts +19 -0
  1485. package/src/engine/graphics/trail/TrailSpawnMode.d.ts.map +1 -0
  1486. package/src/engine/graphics/trail/TrailSpawnMode.js +20 -0
  1487. package/src/engine/graphics/trail/tube/TubeMaterialX.d.ts +5 -0
  1488. package/src/engine/graphics/trail/tube/TubeMaterialX.d.ts.map +1 -0
  1489. package/src/engine/graphics/trail/tube/TubeMaterialX.js +80 -0
  1490. package/src/engine/graphics/trail/tube/TubeX.d.ts +141 -0
  1491. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -0
  1492. package/src/engine/graphics/trail/tube/TubeX.js +555 -0
  1493. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +26 -0
  1494. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts.map +1 -0
  1495. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +47 -0
  1496. package/src/engine/graphics/trail/tube/TubeXPlugin.d.ts +21 -0
  1497. package/src/engine/graphics/trail/tube/TubeXPlugin.d.ts.map +1 -0
  1498. package/src/engine/graphics/trail/tube/TubeXPlugin.js +80 -0
  1499. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +14 -0
  1500. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +1 -0
  1501. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +32 -0
  1502. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +26 -0
  1503. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -0
  1504. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +69 -0
  1505. package/src/engine/graphics/trail/tube/tube_frame.d.ts +32 -0
  1506. package/src/engine/graphics/trail/tube/tube_frame.d.ts.map +1 -0
  1507. package/src/engine/graphics/trail/tube/tube_frame.js +83 -0
  1508. package/src/engine/graphics/util/composeMatrix4.js +2 -2
  1509. package/src/engine/navigation/mesh/NavigationMesh.js +6 -6
  1510. package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +1 -1
  1511. package/src/engine/navigation/mesh/build/clip_soup_against_overhangs.d.ts.map +1 -1
  1512. package/src/engine/navigation/mesh/build/clip_soup_against_overhangs.js +5 -51
  1513. package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts.map +1 -1
  1514. package/src/engine/navigation/mesh/build/navmesh_build_topology.js +19 -23
  1515. package/src/engine/network/CONGESTION_CONTROL.md +87 -0
  1516. package/src/engine/network/NetworkSession.d.ts +7 -1
  1517. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  1518. package/src/engine/network/NetworkSession.js +144 -0
  1519. package/src/engine/network/README.md +7 -0
  1520. package/src/engine/network/adapters/TransformInterpolationAdapter.js +5 -5
  1521. package/src/engine/network/adapters/TransformReplicationAdapter.js +4 -4
  1522. package/src/engine/network/core/MalformedPacketError.d.ts +24 -0
  1523. package/src/engine/network/core/MalformedPacketError.d.ts.map +1 -0
  1524. package/src/engine/network/core/MalformedPacketError.js +26 -0
  1525. package/src/engine/network/ecs/owner_authorization.d.ts +49 -0
  1526. package/src/engine/network/ecs/owner_authorization.d.ts.map +1 -0
  1527. package/src/engine/network/ecs/owner_authorization.js +55 -0
  1528. package/src/engine/network/orchestrator/NetworkPeer.d.ts +31 -0
  1529. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  1530. package/src/engine/network/orchestrator/NetworkPeer.js +89 -2
  1531. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +38 -1
  1532. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  1533. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +75 -0
  1534. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  1535. package/src/engine/network/replication/Replicator.js +28 -0
  1536. package/src/engine/network/sim/SimActionExecutor.d.ts +46 -1
  1537. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  1538. package/src/engine/network/sim/SimActionExecutor.js +68 -0
  1539. package/src/engine/network/sim/Snapshotter.d.ts.map +1 -1
  1540. package/src/engine/network/sim/Snapshotter.js +18 -2
  1541. package/src/engine/network/transport/Channel.d.ts +12 -1
  1542. package/src/engine/network/transport/Channel.d.ts.map +1 -1
  1543. package/src/engine/network/transport/Channel.js +34 -1
  1544. package/src/engine/physics/broadphase/generate_pairs.js +3 -3
  1545. package/src/engine/physics/constraint/solve_constraints.js +3 -3
  1546. package/src/engine/physics/ecs/PhysicsSystem.js +2 -2
  1547. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  1548. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  1549. package/src/engine/physics/inverse_kinematics/two_joint_ik.js +4 -4
  1550. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
  1551. package/src/engine/physics/narrowphase/box_box_manifold.js +4 -6
  1552. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  1553. package/src/engine/physics/narrowphase/box_triangle_contact.js +4 -6
  1554. package/src/engine/physics/narrowphase/capsule_contacts.js +15 -15
  1555. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +8 -8
  1556. package/src/engine/physics/narrowphase/compute_penetration.js +8 -8
  1557. package/src/engine/physics/narrowphase/convex_convex_manifold.js +9 -9
  1558. package/src/engine/physics/narrowphase/convex_decomposition.js +8 -8
  1559. package/src/engine/physics/narrowphase/mesh_convex_hull.js +3 -3
  1560. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +3 -3
  1561. package/src/engine/physics/narrowphase/refine_ray_concave.js +5 -5
  1562. package/src/engine/physics/narrowphase/refine_ray_hit.js +5 -5
  1563. package/src/engine/physics/narrowphase/sphere_box_contact.js +5 -5
  1564. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +2 -2
  1565. package/src/engine/physics/queries/overlap_shape.js +3 -3
  1566. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  1567. package/src/engine/physics/queries/raycast.js +3 -5
  1568. package/src/engine/physics/queries/shape_cast.js +3 -3
  1569. package/src/engine/physics/solver/solve_contacts.js +6 -6
  1570. package/src/engine/physics/vehicle/RaycastVehicle.js +4 -4
  1571. package/src/engine/sound/SoundEngine.js +2 -2
  1572. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +32 -1
  1573. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  1574. package/src/engine/sound/ecs/audio/AudioEmitter.js +40 -1
  1575. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +33 -8
  1576. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  1577. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +90 -12
  1578. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +12 -1
  1579. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  1580. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +25 -4
  1581. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +1 -1
  1582. package/src/engine/sound/simulation/AcousticSimulator.d.ts +134 -0
  1583. package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -0
  1584. package/src/engine/sound/simulation/AcousticSimulator.js +637 -0
  1585. package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +432 -0
  1586. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +250 -0
  1587. package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +322 -0
  1588. package/src/engine/sound/simulation/README.md +277 -0
  1589. package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +261 -0
  1590. package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +121 -0
  1591. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts +31 -0
  1592. package/src/engine/sound/simulation/configureAcousticSimulation.d.ts.map +1 -0
  1593. package/src/engine/sound/simulation/configureAcousticSimulation.js +48 -0
  1594. package/src/engine/sound/simulation/core/AcousticMedium.d.ts +60 -0
  1595. package/src/engine/sound/simulation/core/AcousticMedium.d.ts.map +1 -0
  1596. package/src/engine/sound/simulation/core/AcousticMedium.js +113 -0
  1597. package/src/engine/sound/simulation/core/AcousticMediumSerializationAdapter.d.ts +22 -0
  1598. package/src/engine/sound/simulation/core/AcousticMediumSerializationAdapter.d.ts.map +1 -0
  1599. package/src/engine/sound/simulation/core/AcousticMediumSerializationAdapter.js +27 -0
  1600. package/src/engine/sound/simulation/core/AcousticOccluderIndex.d.ts +85 -0
  1601. package/src/engine/sound/simulation/core/AcousticOccluderIndex.d.ts.map +1 -0
  1602. package/src/engine/sound/simulation/core/AcousticOccluderIndex.js +314 -0
  1603. package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts +56 -0
  1604. package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts.map +1 -0
  1605. package/src/engine/sound/simulation/core/AcousticRegionIndex.js +159 -0
  1606. package/src/engine/sound/simulation/core/AcousticSolution.d.ts +66 -0
  1607. package/src/engine/sound/simulation/core/AcousticSolution.d.ts.map +1 -0
  1608. package/src/engine/sound/simulation/core/AcousticSolution.js +90 -0
  1609. package/src/engine/sound/simulation/core/AcousticSourceState.d.ts +55 -0
  1610. package/src/engine/sound/simulation/core/AcousticSourceState.d.ts.map +1 -0
  1611. package/src/engine/sound/simulation/core/AcousticSourceState.js +109 -0
  1612. package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts +45 -0
  1613. package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts.map +1 -0
  1614. package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +73 -0
  1615. package/src/engine/sound/simulation/core/OccluderBody.d.ts +57 -0
  1616. package/src/engine/sound/simulation/core/OccluderBody.d.ts.map +1 -0
  1617. package/src/engine/sound/simulation/core/OccluderBody.js +74 -0
  1618. package/src/engine/sound/simulation/core/OcclusionSolver.d.ts +29 -0
  1619. package/src/engine/sound/simulation/core/OcclusionSolver.d.ts.map +1 -0
  1620. package/src/engine/sound/simulation/core/OcclusionSolver.js +119 -0
  1621. package/src/engine/sound/simulation/core/RayHit.d.ts +42 -0
  1622. package/src/engine/sound/simulation/core/RayHit.d.ts.map +1 -0
  1623. package/src/engine/sound/simulation/core/RayHit.js +50 -0
  1624. package/src/engine/sound/simulation/core/VolumeField.d.ts +55 -0
  1625. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -0
  1626. package/src/engine/sound/simulation/core/VolumeField.js +145 -0
  1627. package/src/engine/sound/simulation/definition/AcousticDirectivity.d.ts +75 -0
  1628. package/src/engine/sound/simulation/definition/AcousticDirectivity.d.ts.map +1 -0
  1629. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +114 -0
  1630. package/src/engine/sound/simulation/definition/AcousticDirectivitySerializationAdapter.d.ts +23 -0
  1631. package/src/engine/sound/simulation/definition/AcousticDirectivitySerializationAdapter.d.ts.map +1 -0
  1632. package/src/engine/sound/simulation/definition/AcousticDirectivitySerializationAdapter.js +30 -0
  1633. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts +61 -0
  1634. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -0
  1635. package/src/engine/sound/simulation/definition/AcousticMaterial.js +122 -0
  1636. package/src/engine/sound/simulation/definition/AcousticMaterialSerializationAdapter.d.ts +23 -0
  1637. package/src/engine/sound/simulation/definition/AcousticMaterialSerializationAdapter.d.ts.map +1 -0
  1638. package/src/engine/sound/simulation/definition/AcousticMaterialSerializationAdapter.js +32 -0
  1639. package/src/engine/sound/simulation/ecs/AcousticBody.d.ts +39 -0
  1640. package/src/engine/sound/simulation/ecs/AcousticBody.d.ts.map +1 -0
  1641. package/src/engine/sound/simulation/ecs/AcousticBody.js +48 -0
  1642. package/src/engine/sound/simulation/ecs/AcousticBodySerializationAdapter.d.ts +24 -0
  1643. package/src/engine/sound/simulation/ecs/AcousticBodySerializationAdapter.d.ts.map +1 -0
  1644. package/src/engine/sound/simulation/ecs/AcousticBodySerializationAdapter.js +34 -0
  1645. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts +39 -0
  1646. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts.map +1 -0
  1647. package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.js +64 -0
  1648. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +44 -0
  1649. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -0
  1650. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +75 -0
  1651. package/src/engine/sound/simulation/ecs/AcousticVolume.d.ts +53 -0
  1652. package/src/engine/sound/simulation/ecs/AcousticVolume.d.ts.map +1 -0
  1653. package/src/engine/sound/simulation/ecs/AcousticVolume.js +74 -0
  1654. package/src/engine/sound/simulation/ecs/AcousticVolumeSerializationAdapter.d.ts +25 -0
  1655. package/src/engine/sound/simulation/ecs/AcousticVolumeSerializationAdapter.d.ts.map +1 -0
  1656. package/src/engine/sound/simulation/ecs/AcousticVolumeSerializationAdapter.js +37 -0
  1657. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts +39 -0
  1658. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts.map +1 -0
  1659. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +66 -0
  1660. package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts +245 -0
  1661. package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -0
  1662. package/src/engine/sound/simulation/probe/AcousticProbeField.js +574 -0
  1663. package/src/engine/sound/simulation/probe/AcousticProbeFieldSerializationAdapter.d.ts +24 -0
  1664. package/src/engine/sound/simulation/probe/AcousticProbeFieldSerializationAdapter.d.ts.map +1 -0
  1665. package/src/engine/sound/simulation/probe/AcousticProbeFieldSerializationAdapter.js +60 -0
  1666. package/src/engine/sound/simulation/probe/ProbeFieldPathingSolution.d.ts +48 -0
  1667. package/src/engine/sound/simulation/probe/ProbeFieldPathingSolution.d.ts.map +1 -0
  1668. package/src/engine/sound/simulation/probe/ProbeFieldPathingSolution.js +64 -0
  1669. package/src/engine/sound/simulation/probe/ProbeVisibilityRecheck.d.ts +51 -0
  1670. package/src/engine/sound/simulation/probe/ProbeVisibilityRecheck.d.ts.map +1 -0
  1671. package/src/engine/sound/simulation/probe/ProbeVisibilityRecheck.js +137 -0
  1672. package/src/engine/sound/simulation/probe/acoustic_probe_transfer.d.ts +29 -0
  1673. package/src/engine/sound/simulation/probe/acoustic_probe_transfer.d.ts.map +1 -0
  1674. package/src/engine/sound/simulation/probe/acoustic_probe_transfer.js +99 -0
  1675. package/src/engine/sound/simulation/probe/acoustic_trace_energy.d.ts +46 -0
  1676. package/src/engine/sound/simulation/probe/acoustic_trace_energy.d.ts.map +1 -0
  1677. package/src/engine/sound/simulation/probe/acoustic_trace_energy.js +136 -0
  1678. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +50 -0
  1679. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -0
  1680. package/src/engine/sound/simulation/probe/bakeProbeField.js +169 -0
  1681. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts +15 -0
  1682. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -0
  1683. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +108 -0
  1684. package/src/engine/sound/simulation/probe/bakeReverbBands.d.ts +32 -0
  1685. package/src/engine/sound/simulation/probe/bakeReverbBands.d.ts.map +1 -0
  1686. package/src/engine/sound/simulation/probe/bakeReverbBands.js +114 -0
  1687. package/src/engine/sound/simulation/probe/bakeVisibility.d.ts +48 -0
  1688. package/src/engine/sound/simulation/probe/bakeVisibility.d.ts.map +1 -0
  1689. package/src/engine/sound/simulation/probe/bakeVisibility.js +178 -0
  1690. package/src/engine/sound/simulation/probe/echogram_band_rt60.d.ts +17 -0
  1691. package/src/engine/sound/simulation/probe/echogram_band_rt60.d.ts.map +1 -0
  1692. package/src/engine/sound/simulation/probe/echogram_band_rt60.js +83 -0
  1693. package/src/engine/sound/simulation/probe/probe_delaunay_edges.d.ts +23 -0
  1694. package/src/engine/sound/simulation/probe/probe_delaunay_edges.d.ts.map +1 -0
  1695. package/src/engine/sound/simulation/probe/probe_delaunay_edges.js +215 -0
  1696. package/src/engine/sound/simulation/probe/probe_densify_portals.d.ts +35 -0
  1697. package/src/engine/sound/simulation/probe/probe_densify_portals.d.ts.map +1 -0
  1698. package/src/engine/sound/simulation/probe/probe_densify_portals.js +143 -0
  1699. package/src/engine/sound/simulation/probe/probe_detect_portals.d.ts +32 -0
  1700. package/src/engine/sound/simulation/probe/probe_detect_portals.d.ts.map +1 -0
  1701. package/src/engine/sound/simulation/probe/probe_detect_portals.js +196 -0
  1702. package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts +16 -0
  1703. package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts.map +1 -0
  1704. package/src/engine/sound/simulation/probe/probe_edge_visible.js +41 -0
  1705. package/src/engine/sound/simulation/probe/probe_place_sdf_cover.d.ts +28 -0
  1706. package/src/engine/sound/simulation/probe/probe_place_sdf_cover.d.ts.map +1 -0
  1707. package/src/engine/sound/simulation/probe/probe_place_sdf_cover.js +82 -0
  1708. package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts +26 -0
  1709. package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts.map +1 -0
  1710. package/src/engine/sound/simulation/probe/probe_refine_connectivity.js +181 -0
  1711. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +100 -0
  1712. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -0
  1713. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +183 -0
  1714. package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts +30 -0
  1715. package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts.map +1 -0
  1716. package/src/engine/sound/simulation/probe/probe_visibility_augment.js +182 -0
  1717. package/src/engine/sound/simulation/probe/probe_visibility_bridge_components.d.ts +31 -0
  1718. package/src/engine/sound/simulation/probe/probe_visibility_bridge_components.d.ts.map +1 -0
  1719. package/src/engine/sound/simulation/probe/probe_visibility_bridge_components.js +166 -0
  1720. package/src/engine/sound/simulation/prototypeAcousticSolver.d.ts +2 -0
  1721. package/src/engine/sound/simulation/prototypeAcousticSolver.d.ts.map +1 -0
  1722. package/src/engine/sound/simulation/prototypeAcousticSolver.js +1534 -0
  1723. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts +80 -0
  1724. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts.map +1 -0
  1725. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +354 -0
  1726. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +75 -0
  1727. package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -0
  1728. package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +231 -0
  1729. package/src/engine/sound/simulation/render/foaReverbImpulseResponse.d.ts +37 -0
  1730. package/src/engine/sound/simulation/render/foaReverbImpulseResponse.d.ts.map +1 -0
  1731. package/src/engine/sound/simulation/render/foaReverbImpulseResponse.js +113 -0
  1732. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts +26 -0
  1733. package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -0
  1734. package/src/engine/sound/simulation/render/reverbImpulseResponse.js +76 -0
  1735. package/src/engine/sound/simulation/serialization/populateAcousticSerializationRegistry.d.ts +10 -0
  1736. package/src/engine/sound/simulation/serialization/populateAcousticSerializationRegistry.d.ts.map +1 -0
  1737. package/src/engine/sound/simulation/serialization/populateAcousticSerializationRegistry.js +25 -0
  1738. package/src/engine/sound/sopra/SopraEngine.d.ts +6 -0
  1739. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
  1740. package/src/engine/sound/sopra/SopraEngine.js +9 -0
  1741. package/src/engine/sound/sopra/definition/EventDescription.d.ts +3 -0
  1742. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  1743. package/src/engine/sound/sopra/definition/EventDescription.js +4 -1
  1744. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +7 -0
  1745. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
  1746. package/src/engine/sound/sopra/runtime/BusGraph.js +16 -0
  1747. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +46 -2
  1748. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  1749. package/src/engine/sound/sopra/runtime/EventInstance.js +240 -4
  1750. package/src/engine/sound/sopra/util/MockAudioContext.d.ts +4 -0
  1751. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -1
  1752. package/src/engine/sound/sopra/util/MockAudioContext.js +9 -0
  1753. package/src/engine/ui/tiles2d/computeTileGridMove.js +2 -2
  1754. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +2 -2
  1755. package/src/view/elements/progress/RectangularPieProgressView.d.ts.map +1 -1
  1756. package/src/view/elements/progress/RectangularPieProgressView.js +6 -8
  1757. package/src/view/tooltip/TooltipView.js +2 -2
  1758. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts +0 -9
  1759. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts.map +0 -1
  1760. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_capsule.d.ts.map +0 -1
  1761. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_frustum.d.ts +0 -9
  1762. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_frustum.d.ts.map +0 -1
  1763. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts.map +0 -1
  1764. package/src/core/geom/3d/normal/lamber_azimuth/transform.d.ts +0 -18
  1765. package/src/core/geom/3d/normal/lamber_azimuth/transform.d.ts.map +0 -1
  1766. package/src/core/geom/3d/normal/spherical/sphere_map_transform.d.ts.map +0 -1
  1767. package/src/core/geom/3d/normal/spherical/sphere_map_transform.js +0 -77
  1768. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts +0 -9
  1769. package/src/core/geom/3d/tetrahedra/triangle/triangle_encode_rasterized_depth.d.ts.map +0 -1
  1770. package/src/core/geom/3d/topology/simplify/collapseEdge.d.ts +0 -21
  1771. package/src/core/geom/3d/topology/simplify/collapseEdge.d.ts.map +0 -1
  1772. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.d.ts +0 -25
  1773. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.d.ts.map +0 -1
  1774. package/src/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +0 -177
  1775. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +0 -1
  1776. package/src/engine/navigation/mesh/bt_mesh_face_find_path_polyanya.d.ts.map +0 -1
  1777. package/src/engine/navigation/mesh/build/bvh_build_from_unindexed_triangles.d.ts.map +0 -1
  1778. package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.d.ts +0 -7
  1779. package/src/engine/navigation/mesh/bvh_build_from_bt_mesh.d.ts.map +0 -1
  1780. package/src/engine/navigation/mesh/bvh_query_nearest_face.d.ts.map +0 -1
  1781. package/src/engine/navigation/mesh/bvh_segment_penetrates_mesh.d.ts.map +0 -1
  1782. package/src/engine/navigation/mesh/funnel_string_pull.d.ts.map +0 -1
  1783. /package/src/{engine/navigation/mesh/build → core/bvh2/bvh3}/bvh_build_from_unindexed_triangles.d.ts +0 -0
  1784. /package/src/{engine/navigation/mesh/build → core/bvh2/bvh3}/bvh_build_from_unindexed_triangles.js +0 -0
  1785. /package/src/{engine/navigation/mesh → core/geom/3d}/funnel_string_pull.d.ts +0 -0
  1786. /package/src/{engine/navigation/mesh → core/geom/3d/topology/struct/binary/query}/bt_mesh_face_find_path.d.ts +0 -0
  1787. /package/src/{engine/navigation/mesh → core/geom/3d/topology/struct/binary/query}/bt_mesh_face_find_path_polyanya.d.ts +0 -0
@@ -0,0 +1,1534 @@
1
+ import {
2
+ BoxGeometry,
3
+ BufferGeometry,
4
+ Float32BufferAttribute,
5
+ LineBasicMaterial,
6
+ MeshStandardMaterial,
7
+ SphereGeometry
8
+ } from "three";
9
+ import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
10
+ import { Ray3 } from "../../../core/geom/3d/ray/Ray3.js";
11
+ import { BoxShape3D } from "../../../core/geom/3d/shape/BoxShape3D.js";
12
+ import { CapsuleShape3D } from "../../../core/geom/3d/shape/CapsuleShape3D.js";
13
+ import { TransformedShape3D } from "../../../core/geom/3d/shape/TransformedShape3D.js";
14
+ import { Quaternion } from "../../../core/geom/Quaternion.js";
15
+ import Vector3 from "../../../core/geom/Vector3.js";
16
+ import { interpolate_irradiance_smith } from "../../../core/math/physics/irradiance/interpolate_irradiance_smith.js";
17
+ import { seededRandom } from "../../../core/math/random/seededRandom.js";
18
+ import { FirstPersonPlayerController } from "../../control/first-person/FirstPersonPlayerController.js";
19
+ import { FirstPersonPlayerControllerSystem } from "../../control/first-person/FirstPersonPlayerControllerSystem.js";
20
+ import { FirstPersonSensorsSystem } from "../../control/first-person/sensors/FirstPersonSensorsSystem.js";
21
+ import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
22
+ import { Tag } from "../../ecs/components/Tag.js";
23
+ import Entity from "../../ecs/Entity.js";
24
+ import { System } from "../../ecs/System.js";
25
+ import { Transform } from "../../ecs/transform/Transform.js";
26
+ import { EngineHarness } from "../../EngineHarness.js";
27
+ import { CameraSystem } from "../../graphics/ecs/camera/CameraSystem.js";
28
+ import { Light } from "../../graphics/ecs/light/Light.js";
29
+ import { DrawMode } from "../../graphics/ecs/mesh-v2/DrawMode.js";
30
+ import { ShadedGeometry } from "../../graphics/ecs/mesh-v2/ShadedGeometry.js";
31
+ import { ShadedGeometryFlags } from "../../graphics/ecs/mesh-v2/ShadedGeometryFlags.js";
32
+ import { ShadedGeometrySystem } from "../../graphics/ecs/mesh-v2/ShadedGeometrySystem.js";
33
+ import {
34
+ AmbientOcclusionPostProcessEffect
35
+ } from "../../graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js";
36
+ import { MaterialTransformer, ProbeResolutionStage } from "../../graphics/sh3/gi/material/MaterialTransformer.js";
37
+ import { LightProbeVolume } from "../../graphics/sh3/lpv/LightProbeVolume.js";
38
+ import { LightProbeVolumeBaker } from "../../graphics/sh3/lpv/LightProbeVolumeBaker.js";
39
+ import { setup_environment_sky_from_ecd } from "../../graphics/sh3/sky/hosek/setup_environment_sky_from_ecd.js";
40
+ import {
41
+ sampler2d_sample_equirectangular_direction
42
+ } from "../../graphics/texture/sampler/sampler2d_sample_equirectangular_direction.js";
43
+ import InputController from "../../input/ecs/components/InputController.js";
44
+ import InputControllerSystem from "../../input/ecs/systems/InputControllerSystem.js";
45
+ import { BodyKind } from "../../physics/ecs/BodyKind.js";
46
+ import { Collider } from "../../physics/ecs/Collider.js";
47
+ import { ColliderObserverSystem } from "../../physics/ecs/ColliderObserverSystem.js";
48
+ import { PhysicsSystem } from "../../physics/ecs/PhysicsSystem.js";
49
+ import { RigidBody } from "../../physics/ecs/RigidBody.js";
50
+ import { PhysicsSurfacePoint } from "../../physics/queries/PhysicsSurfacePoint.js";
51
+ import { AudioEmitter } from "../ecs/audio/AudioEmitter.js";
52
+ import { AudioEmitterSystem } from "../ecs/audio/AudioEmitterSystem.js";
53
+ import SoundListener from "../ecs/SoundListener.js";
54
+ import SoundListenerSystem from "../ecs/SoundListenerSystem.js";
55
+ import { SampleAudioClip } from "../sopra/definition/clip/SampleAudioClip.js";
56
+ import { EventDescription } from "../sopra/definition/EventDescription.js";
57
+ import { buildAttenuationCurve } from "../sopra/util/buildAttenuationCurve.js";
58
+ import { configureAcousticSimulation } from "./configureAcousticSimulation.js";
59
+ import { AcousticMaterial } from "./definition/AcousticMaterial.js";
60
+ import { AcousticBody } from "./ecs/AcousticBody.js";
61
+ import { bakeProbeField } from "./probe/bakeProbeField.js";
62
+ import { FoaProbeReverbRenderer } from "./render/FoaProbeReverbRenderer.js";
63
+
64
+ /**
65
+ * Prototype harness for the geometry-driven acoustic solver — a first-person walkaround under a Hosek sky.
66
+ *
67
+ * A platform holding TWO sealed sources with deliberately different acoustics:
68
+ * - a small HOUSE (orchestral loop) — a tight, dead room; leaks from its south DOOR + north WINDOW, with a
69
+ * hard REFLECTOR wall set back from the window that bounces its leak back at you;
70
+ * - a much larger CATHEDRAL (main-menu loop) west across a gap — a tall, hard stone hall with a wide main
71
+ * entrance, side windows, and a TOWER shaft (open to the nave) that gives a long, coupled-volume tail.
72
+ * Every surface is an {@link AcousticBody} occluder, so each source only escapes through its openings — the
73
+ * baked probe-field pathing routes it around corners and out, and the baked per-probe reverb colours the tail.
74
+ *
75
+ * What to listen for, as you walk: the house leak from its door/window (brighter near the reflector); the
76
+ * cathedral's long reverb through its entrance/windows; plain occlusion behind a solid wall or barrier. A
77
+ * RAMP on the house's east side walks you up onto its roof.
78
+ *
79
+ * Controls (same as the first-person gym):
80
+ * - Click the canvas to capture the mouse (pointer lock); ESC to release. The first click also resumes
81
+ * the (autoplay-policy-suspended) audio context, so sound starts on that click.
82
+ * - WASD — move Mouse — look Space — jump
83
+ * - P (or the top-right button) — toggle the probe + visibility-edge overlay
84
+ *
85
+ * The probe field is baked ONCE at startup against the live occluder geometry (a brief synchronous
86
+ * freeze — watch the console for the probe count + bake time). Tune the BAKE_* / scene constants below.
87
+ *
88
+ * @author Alex Goldring
89
+ * @copyright Company Named Limited (c) 2026
90
+ */
91
+
92
+ // -- Scene layout (metres; the platform is centred on the origin) --------
93
+ const SPAWN_X = 0;
94
+ const SPAWN_Z = 10; // player starts south of the house, facing it
95
+
96
+ const SRC = new Vector3(0, 1.2, 0); // the orchestral source, inside the house
97
+ const SRC_DIST_MIN = 3; // full volume within this radius (m)
98
+ const SRC_DIST_MAX = 30; // rolled off to silence by here (m)
99
+
100
+ const HOUSE_HALF = 4; // footprint half-extent (x,z ∈ [-4, 4])
101
+ const WALL_H = 3; // wall height
102
+ const WALL_T = 0.3; // wall thickness
103
+ const WALL_MID_Y = WALL_H / 2;
104
+
105
+ const DOOR_HALF_W = 0.7; // south wall opening: 1.4 m wide, to 2.2 m tall
106
+ const DOOR_H = 2.2;
107
+ const WIN_HALF_W = 0.9; // north wall opening: 1.8 m wide, sill 1.0 → head 2.2
108
+ const WIN_SILL = 1.0;
109
+ const WIN_HEAD = 2.2;
110
+
111
+ // -- Cathedral (a much larger, taller, more reverberant space + a tower) west of the house, across a gap.
112
+ // The small house is a tight, dead room; the cathedral is a big stone hall whose tall nave + a tower shaft
113
+ // (open to the nave through a hole in the roof) give a long, coupled-volume reverb tail — a deliberately
114
+ // different "echo character", à la Šibenik.
115
+ const CATH_X1 = -10; // east face (x=-10) is the entrance, facing the house across the gap
116
+ const CATH_X0 = -38; // back (west) wall — 28 m deep, ≈2× the width, a proper long nave
117
+ const CATH_Z0 = -9, CATH_Z1 = 9; // 28 × 18 footprint
118
+ const CATH_H = 8; // nave wall height (very tall ceiling)
119
+ const CATH_T = 0.4; // wall thickness
120
+ const CATH_ENTRY_HALF_W = 1.75; // main entrance on the east wall: 3.5 m wide, 4.5 m tall
121
+ const CATH_ENTRY_H = 4.5;
122
+ const CATH_WIN_HALF_W = 1.25; // side windows: 2.5 m wide, sill 3.5 → head 5.5
123
+ const CATH_WIN_SILL = 3.5, CATH_WIN_HEAD = 5.5;
124
+ const CATH_WIN_XS = [-15, -21, -27, -33]; // four windows per long side, spread along the longer nave
125
+ const TOWER_X0 = -37, TOWER_X1 = -31; // a 6 × 6 shaft centred at the BACK of the nave (z=0), rising to y=20
126
+ const TOWER_Z0 = -3, TOWER_Z1 = 3;
127
+ const TOWER_BOTTOM = CATH_H - 1; // tower walls drop 1 m below the roof so the roof seam is buried (no z-fight)
128
+ const TOWER_TOP = 20;
129
+ const JUMP_HOLE_X = -22, JUMP_HOLE_Z = 0, JUMP_HOLE_HALF = 1.0; // a 2×2 m hole in the roof to drop through
130
+
131
+ const CATH_SRC = new Vector3(-28, 1.5, 0); // the MainMenu source, deep in the longer nave
132
+ const CATH_SRC_DIST_MIN = 4;
133
+ const CATH_SRC_DIST_MAX = 46; // the long hall carries further than the house source
134
+
135
+ // -- A free-standing wall opposite the house's WINDOW (north face, z=-4), set back far enough to walk between
136
+ // it and the window — a hard REFLECTOR that bounces the window's leaked sound back (a baked early-reflection).
137
+ const REFLECTOR_Z = -12; // 8 m north of the window
138
+ const REFLECTOR_HALF_W = 6; // 12 m wide, x ∈ [-6, 6]
139
+ const REFLECTOR_H = 4;
140
+
141
+ // -- Ramps: ground → house roof (east), and house roof → cathedral roof (over the gap). The prototype's
142
+ // ground resolver snaps the player to whatever surface is underfoot, so any angle is walkable.
143
+ const ROOF_TOP = WALL_H + WALL_T; // the house roof's walking surface (y)
144
+
145
+ // -- Bake (offline probe field, for corner-leak pathing) -----------------
146
+ // bakeProbeField derives its region from the scene (the occluder hull + a margin) — no bounds to configure.
147
+ // minSpacing dominates the one-off startup bake: this big scene is ~400 probes (≈60 s) at spacing 3 but ~200
148
+ // (≈10 s) at spacing 4, because the visibility/portal/lobe passes scale super-linearly in probe count (the
149
+ // reverb ray count barely moves it). 4 keeps the bake tolerable; drop to 3 for finer pathing if you'll wait.
150
+ const BAKE_MIN_SPACING = 2; // probe density hint (m)
151
+ const BAKE_REVERB_RAYS = 1024; // rays/probe for the per-band reverb (cheap at this probe count — keep it high)
152
+
153
+ // Fully-blocking, mildly absorptive surfaces — so the door/window leak is the ONLY exit and the pathing
154
+ // is unambiguous (a tiny transmission would muddy "is this leak or through-wall?").
155
+ const WALL_MATERIAL = AcousticMaterial.from({
156
+ absorption: [0.1, 0.15, 0.25],
157
+ scattering: 0.3,
158
+ transmission: [0.1, 0.02, 0],
159
+ });
160
+
161
+ // The ground platform is an acoustic occluder too — this is load-bearing for the probe bake. WITHOUT a
162
+ // floor in the occluder index the SDF cover treats the y=0 voxel layer as open air and drops ~half the
163
+ // probes onto the ground; visibility rays between two ground probes then graze UNDER the walls (whose
164
+ // bottoms sit at y=0), so inside connects to outside and occlusion is lost. With the floor, probes lift
165
+ // into the wall band and the leak is forced through the door/window. (See demo_scene_probe_placement.spec.js
166
+ // — no-floor: inside→behind-the-east-wall is a near-straight 9 m leak; with-floor: a 19 m detour.) Ground-
167
+ // like absorption (a touch deader + more scattering than the walls).
168
+ const GROUND_MATERIAL = AcousticMaterial.from({
169
+ absorption: [0.3, 0.35, 0.4],
170
+ scattering: 0.7,
171
+ transmission: [0, 0, 0],
172
+ });
173
+
174
+ // Hard, lightly-absorptive STONE for the cathedral — a much longer reverberation tail than the deader house
175
+ // walls (low absorption = little energy lost per bounce → high RT60 in the big tall volume).
176
+ const CATHEDRAL_MATERIAL = AcousticMaterial.from({
177
+ absorption: [0.04, 0.06, 0.1],
178
+ scattering: 0.25,
179
+ transmission: [0.1, 0, 0],
180
+ });
181
+
182
+ // A near-rigid REFLECTOR — almost nothing absorbed, almost no scatter → a clean specular bounce of the window's
183
+ // leaked sound back toward the listener.
184
+ const REFLECTOR_MATERIAL = AcousticMaterial.from({
185
+ absorption: [0.02, 0.03, 0.05],
186
+ scattering: 0.1,
187
+ transmission: [0, 0, 0],
188
+ });
189
+
190
+ // -- A small 3×3 reverb-chamber shack in the open SE: a door (west face) and NO windows. A low, hard little
191
+ // box → a bright, ringy small-room tail, isolated from the rest for an A/B against the big stone cathedral.
192
+ const SHACK_X = 13, SHACK_Z = -13; // clear of the barrier (13,5), the SE block (8,-10) and the reflector
193
+ const SHACK_HALF = 1.5; // 3 × 3 footprint
194
+ const SHACK_H = 2.6, SHACK_T = 0.25;
195
+ const SHACK_DOOR_HALF = 0.5, SHACK_DOOR_H = 2.0; // a 1 m doorway on the west wall (faces the scene)
196
+
197
+ // -- Operable sliding doors (house south DOOR + cathedral east ENTRANCE). They START open (slab slid down into
198
+ // the ground, opening clear); pressing E within range slides it back UP to fill the opening (closed) and down
199
+ // again (open). The slab is a KinematicPosition body AND an AcousticBody, so its occlusion follows it live (the
200
+ // occluder index re-syncs on transform change) — closed it seals the opening, open it clears it.
201
+ const DOOR_T = 0.2; // door slab thickness (sits within the opening)
202
+ const DOOR_SLIDE_SPEED = 3.0; // m/s vertical travel
203
+
204
+ // -- Orbiting external source (WorldMode layer), circling the scene from outside ------------------------
205
+ const ORBIT_CLIP = "data/sounds/music/matsmusic/d1/Fiverr Alexgoldring WorldMode LAYER 1.ogg";
206
+ const ORBIT_CX = -12, ORBIT_CZ = 0; // scene centre (between the cathedral and the east edge)
207
+ const ORBIT_RADIUS = 40; // well outside the platform (x∈[-44,16], z∈[-16,16])
208
+ const ORBIT_HEIGHT = 5; // a touch above the walls, so line-of-sight is wall-gated
209
+ const ORBIT_SPEED = 0.18; // rad/s (~35 s per lap)
210
+ const ORBIT_DIST_MIN = 12, ORBIT_DIST_MAX = 90; // carries far — clearly audible from the centre with LoS
211
+
212
+ // -- Light probe volume (baked diffuse GI). Baked once at startup by path-tracing each grid probe, so the probe
213
+ // COUNT is the bake-cost knob. After the bake the IBL is switched off (scene.environment = null) so the LPV is
214
+ // the only indirect light — the sky stays only as the backdrop.
215
+ //
216
+ // The volume must ENCLOSE every rendered surface with margin: a surface sitting exactly on the hull boundary
217
+ // makes the per-fragment tetrahedral-mesh lookup flip in/out across neighbouring pixels (salt-and-pepper noise
218
+ // with the tet grid showing through). In particular the bottom is BELOW the platform (y0 = -4, platform top is
219
+ // y=0) so the floor is INTERIOR; ny=5 over y∈[-4,12] lands a probe LAYER exactly on the floor (y = -4,0,4,8,12),
220
+ // where it captures the floor's incident sky/sun light. The x/z bounds overhang the platform for the same reason.
221
+ const LPV_BOUNDS = [-46, -4, -18, 18, 16, 18]; // x0,y0,z0, x1,y1,z1 — overhangs the platform; floor y=0 is interior
222
+ const LPV_RESOLUTION = new Vector3(30, 10, 20); // counts/axis; ny=5 over y∈[-4,12] → a layer at y=0
223
+
224
+ // -- Point lights co-located with each emissive source marker (a warm/cool glow in its room) -----------
225
+ const SOURCE_LIGHT_INTENSITY = 6, SOURCE_LIGHT_DISTANCE = 12;
226
+
227
+ // Wired in the configuration callback (needs the EngineConfiguration); baked against in main().
228
+ let acousticSim = null;
229
+
230
+ // Set in setupLightProbes() once the graphics MaterialManager exists. Lit scene materials are obtained THROUGH
231
+ // it (see litMaterial) so the LPV MaterialTransformer compile-step actually patches them — a bare
232
+ // `new MeshStandardMaterial(...)` never passes through the transform chain, so it would get NO probe GI.
233
+ let materialManager = null;
234
+
235
+ /**
236
+ * A managed lit material: routed through the {@link MaterialManager} so every registered compile-step (notably
237
+ * the LPV {@link MaterialTransformer}) patches it. Use this for every lit surface instead of a bare
238
+ * `new MeshStandardMaterial` — that is what makes the baked probe lighting visible.
239
+ *
240
+ * @param {object} params MeshStandardMaterial parameters (color, roughness, emissive, …)
241
+ * @returns {MeshStandardMaterial} the managed (compiled) material to hand to {@link ShadedGeometry.from}
242
+ */
243
+ function litMaterial(params) {
244
+ const mat = new MeshStandardMaterial(params);
245
+ return materialManager === null ? mat : materialManager.obtain(mat).getValue();
246
+ }
247
+
248
+ const eh = new EngineHarness();
249
+
250
+ /**
251
+ * Wire the sound + acoustic systems into the engine config. Runs inside {@link EngineHarness.initialize}
252
+ * (which owns the `EngineConfiguration` and `engine.sound` / `engine.assetManager`), before the world is
253
+ * built in {@link main}. `configureAcousticSimulation` needs the config, so it lives here rather than in
254
+ * main()'s `em.addSystem` flow.
255
+ *
256
+ * @param {EngineConfiguration} config
257
+ * @param {Engine} engine
258
+ */
259
+ function setupSound(config, engine) {
260
+ // Native sopra-backed emitter system. acousticSim is injected by configureAcousticSimulation below,
261
+ // so it is constructed WITHOUT the 4th arg.
262
+ const audioEmitterSystem = new AudioEmitterSystem(engine.assetManager, engine.sound);
263
+ config.addSystem(audioEmitterSystem);
264
+
265
+ // Registers AcousticSimulationSystem (occluders) + AcousticVolumeSystem (media) +
266
+ // AcousticProbeFieldSystem (the baked field), all sharing one simulator, and sets
267
+ // audioEmitterSystem.acousticSim = simulator.
268
+ acousticSim = configureAcousticSimulation(config, audioEmitterSystem);
269
+ acousticSim.rayCount = 32; // a touch crisper occlusion than the default 16
270
+ acousticSim.pathing = false; // corner-leak through the door/window (needs the baked field, set in main)
271
+
272
+ // Poses the WebAudio listener from a SoundListener+Transform entity (the player, built in main).
273
+ config.addSystem(new SoundListenerSystem(engine.sound.context));
274
+ }
275
+
276
+ /**
277
+ * Create the light probe volume + its material compile-step. MUST run before any scene geometry compiles — the
278
+ * transformer injects the irradiance-sampling shader chunk into lit materials AT compile time — so it is called
279
+ * at the very top of {@link main}. The bake itself runs later, once the geometry exists ({@link bakeLightProbes}).
280
+ *
281
+ * @param {Engine} engine
282
+ * @returns {{volume:LightProbeVolume, transformer:MaterialTransformer}}
283
+ */
284
+ function setupLightProbes(engine) {
285
+ materialManager = engine.graphics.getMaterialManager();
286
+ const volume = new LightProbeVolume();
287
+ // Fragment (per-pixel) sampling: this scene is big flat boxes, so vertex sampling (only the 4 face corners)
288
+ // would barely read; fragment is costlier but shows the baked GI gradient across a wall/floor.
289
+ const transformer = new MaterialTransformer({ volume, stage: ProbeResolutionStage.Fragment });
290
+ materialManager.addCompileStep(transformer);
291
+ return { volume, transformer };
292
+ }
293
+
294
+ const _skyScratch = new Float32Array(4);
295
+
296
+ /**
297
+ * A path-tracer background sampler over the Hosek sky equirectangular texture, by ray direction (+Y up). The LPV
298
+ * baker's path tracer otherwise has a BLACK background ({@link PathTracedScene} default), so without this the
299
+ * bake captures only the sun bouncing off surfaces — no sky-dome fill. It samples the SAME sharp sky texture the
300
+ * renderer applies, so the baked GI matches the visible sky.
301
+ *
302
+ * @param {THREE.DataTexture} skyTexture equirectangular Float32 RGBA sky (the return of setup_environment_sky_from_ecd)
303
+ * @returns {function(out:number[], out_offset:number, direction:number[], direction_offset:number): void}
304
+ */
305
+ function makeSkyBackgroundSampler(skyTexture) {
306
+ const sampler = {
307
+ width: skyTexture.image.width,
308
+ height: skyTexture.image.height,
309
+ itemSize: 4, // RGBA Float32
310
+ data: skyTexture.image.data,
311
+ };
312
+
313
+ return (out, out_offset, direction, direction_offset) => {
314
+ sampler2d_sample_equirectangular_direction(
315
+ sampler,
316
+ direction[direction_offset], direction[direction_offset + 1], direction[direction_offset + 2],
317
+ _skyScratch, 0);
318
+ out[out_offset] = _skyScratch[0];
319
+ out[out_offset + 1] = _skyScratch[1];
320
+ out[out_offset + 2] = _skyScratch[2];
321
+ };
322
+ }
323
+
324
+ /**
325
+ * Bake the LPV against the now-populated scene (path-traces each grid probe — {@link LPV_RESOLUTION} drives the
326
+ * cost), giving the path tracer the Hosek SKY as its background radiance (its default is black) so the bake picks
327
+ * up sky-dome fill, not just the sun. Then switch the IBL OFF (`scene.environment = null`) so the baked diffuse
328
+ * GI is the only indirect light; the sky stays as the visible backdrop (`scene.background`). Finally push the
329
+ * baked irradiance into the already-compiled materials.
330
+ *
331
+ * @param {Engine} engine
332
+ * @param {EntityComponentDataset} ecd
333
+ * @param {{volume:LightProbeVolume, transformer:MaterialTransformer}} lpv
334
+ * @param {THREE.DataTexture} skyTexture the equirectangular sky to sample as the bake's background radiance
335
+ */
336
+ async function bakeLightProbes(engine, ecd, lpv, skyTexture) {
337
+ const b = LPV_BOUNDS;
338
+ // build_grid populates the probe positions AND the (grid) tetrahedral mesh the bake/interp need.
339
+ lpv.volume.build_grid(new AABB3(b[0], b[1], b[2], b[3], b[4], b[5]), LPV_RESOLUTION);
340
+
341
+ const baker = new LightProbeVolumeBaker();
342
+ // Give the path tracer the sky (its background defaults to black) — otherwise escaped rays return no
343
+ // radiance and the bake is sun-bounce only, so surfaces in shadow / facing away go dark.
344
+ baker._ren.scene.__background_sampler = makeSkyBackgroundSampler(skyTexture);
345
+
346
+ // Path-trace each probe (via the executor's task group) and wait for the whole bake to finish.
347
+ const task = baker.bake(lpv.volume, ecd);
348
+ engine.executor.runGroup(task);
349
+ await task.promise();
350
+
351
+ engine.graphics.scene.environment = null; // IBL off — only the LPV contributes indirect light now
352
+ lpv.transformer.update();
353
+ }
354
+
355
+ async function main(engine) {
356
+ const em = engine.entityManager;
357
+ const ecd = em.dataset;
358
+
359
+ // Light probe volume — create the volume + its material compile-step BEFORE any geometry compiles (the
360
+ // transformer injects the irradiance-sampling shader chunk at material-compile time). Baked + the IBL
361
+ // switched off later, once the scene exists (see bakeLightProbes, after the acoustic bake).
362
+ const lpv = setupLightProbes(engine);
363
+
364
+ // -- Systems ---------------------------------------------------------
365
+ EngineHarness.addFpsCounter(engine);
366
+
367
+ await EngineHarness.buildLights({
368
+ engine,
369
+ sunIntensity: 1.0,
370
+ ambientIntensity: 0.0,
371
+ shadowmapResolution: 2048,
372
+ sunShadowDistance: 60,
373
+ });
374
+
375
+ // Hosek-Wilkie sky + image-based lighting, sun direction taken from the directional light built above.
376
+ // A clear-ish daytime sky (low turbidity) lit by a touch of ground bounce so the stone reads warmer.
377
+ const skyTexture = setup_environment_sky_from_ecd(engine.graphics, ecd, { turbidity: 2.5, albedo: [0.12, 0.11, 0.1] });
378
+
379
+ engine.plugins.acquire(AmbientOcclusionPostProcessEffect);
380
+
381
+ if (em.getSystem(CameraSystem) === null) {
382
+ await em.addSystem(new CameraSystem(engine.graphics));
383
+ }
384
+ if (em.getSystem(InputControllerSystem) === null) {
385
+ await em.addSystem(new InputControllerSystem(engine.devices));
386
+ }
387
+ if (em.getSystem(ShadedGeometrySystem) === null) {
388
+ await em.addSystem(new ShadedGeometrySystem(engine));
389
+ }
390
+
391
+ // Physics — owns the static occluder/floor bodies, the kinematic player capsule, and serves the
392
+ // first-person ground resolver's downward raycasts (added before the controller so its sensors and
393
+ // mover find it).
394
+ const physicsSystem = new PhysicsSystem();
395
+ await em.addSystem(physicsSystem);
396
+ await em.addSystem(new ColliderObserverSystem(physicsSystem));
397
+
398
+ // Per-frame mover for the orbiting source + the sliding doors, plus the centred "Press E" cue it shows when
399
+ // the player is in a door's trigger zone. (motion.playerEntity is set below, once the player is built.)
400
+ const motion = new PrototypeMotionSystem({ physics: physicsSystem, cue: makeInteractionCue() });
401
+ await em.addSystem(motion);
402
+
403
+ const fpsSystem = new FirstPersonPlayerControllerSystem();
404
+ // The platform is a physics body, not a flat y=0 baseline — let the physics-backed resolver below be
405
+ // the sole ground source (so the house roof / barriers are stood-on correctly).
406
+ fpsSystem.useBuiltInFlatGround = false;
407
+ await em.addSystem(fpsSystem);
408
+ await em.addSystem(new FirstPersonSensorsSystem());
409
+
410
+ // -- World -----------------------------------------------------------
411
+ buildPlatform(ecd);
412
+ buildHouse(ecd);
413
+ buildCathedral(ecd);
414
+ buildReflectorWall(ecd);
415
+ buildRoofRamp(ecd);
416
+ buildScatteredOccluders(ecd);
417
+ buildSmallShack(ecd);
418
+ buildSlidingDoors(ecd); // house door + cathedral entrance, built OPEN (so the bake sees the openings clear)
419
+ // The audio sources are spawned on the FIRST click (setupInteraction), once the context has resumed —
420
+ // the engine starts ticking inside EngineHarness.initialize, so a source built here would be promoted
421
+ // and play on the still-suspended context (the autoplay-policy warning). Deferring the spawn to the
422
+ // gesture means its first playEvent always lands on a running context.
423
+
424
+ // -- Player ----------------------------------------------------------
425
+ const player = buildPlayerEntity(ecd);
426
+ fpsSystem.groundResolver = makePhysicsGroundResolver(physicsSystem, player.entity);
427
+ motion.playerEntity = player.entity; // door-proximity overlap tests against the player capsule
428
+ buildInputBindings(ecd, player, motion);
429
+ setupInteraction(engine, ecd);
430
+
431
+ // -- Bake the probe field against the now-populated occluder index ----
432
+ // The acoustic entities above linked into acousticSim.occluderIndex on build; bake the visibility
433
+ // graph + per-band reverb over it, then hand the field to the simulator for pathing.
434
+ console.log("%c[acoustic] baking probe field…", "color:#88ddff;font-weight:bold");
435
+ console.time("[acoustic] bake");
436
+ const field = bakeProbeField(
437
+ acousticSim.occluderIndex,
438
+ BAKE_MIN_SPACING,
439
+ BAKE_REVERB_RAYS,
440
+ seededRandom(1),
441
+ );
442
+ console.timeEnd("[acoustic] bake");
443
+ acousticSim.setProbeField(field);
444
+ console.log(`%c[acoustic] ${field.size} probes and ${field.visibilityGraph.adjacency_length} edges baked — pathing ${acousticSim.pathing ? "ON" : "off"}`,
445
+ "color:#88ddff;font-weight:bold");
446
+
447
+ // Probe-baked reverb: a listener-centric (FOA directional) reverb send tapped off the master bus, driven
448
+ // from the listener's nearest probe each frame — the SAME baked field carries the per-band RT60 + arrival
449
+ // direction. Inside the house's enclosed probes it gives a room tail that leans toward the openings; outside
450
+ // (open probes, ~0 RT60) it crossfades dry. Wired AFTER the bake (the renderer needs the field) and fed a
451
+ // copy of the dry mix; its own output goes to the master destination.
452
+ const reverb = new FoaProbeReverbRenderer(engine.sound.context, engine.sound.destination);
453
+ reverb.setProbeField(field);
454
+ engine.sound.sopra.masterBusOutput.connect(reverb.input);
455
+ em.getSystem(AudioEmitterSystem).probeReverb = reverb;
456
+
457
+ // Toggleable probe + visibility-edge overlay (top-right button, or press P). Starts hidden.
458
+ setupProbeVizToggle(makeProbeVisualization(ecd, field));
459
+
460
+ logHelp();
461
+
462
+ // -- Light probe volume: bake the diffuse GI against the populated scene, then switch the IBL off so the LPV
463
+ // is the only indirect light. Done LAST (after the audio path is fully wired) — it path-traces ≈240 probes,
464
+ // a few seconds; the scene renders IBL-lit until it finishes, then switches to the baked GI. --------------
465
+ console.log("%c[lpv] baking light probes…", "color:#ffcc66;font-weight:bold");
466
+ console.time("[lpv] bake");
467
+ await bakeLightProbes(engine, ecd, lpv, skyTexture);
468
+ console.timeEnd("[lpv] bake");
469
+ }
470
+
471
+ /**
472
+ * Downward-raycast ground resolver backed by {@link PhysicsSystem.raycast}, filtered to exclude the
473
+ * player's own capsule. Identical in spirit to the first-person gym's — from just above the feet, cast
474
+ * straight down, return the surface y or null. (Copied from the gym prototype.)
475
+ *
476
+ * @param {PhysicsSystem} physicsSystem
477
+ * @param {number} playerEntity
478
+ * @returns {(x:number, y:number, z:number) => number|null}
479
+ */
480
+ function makePhysicsGroundResolver(physicsSystem, playerEntity) {
481
+ const PROBE_LIFT = 0.1;
482
+ const PROBE_DOWN = 50;
483
+ const filter = (entity) => entity !== playerEntity;
484
+ const ray = Ray3.from(0, 0, 0, 0, -1, 0, PROBE_DOWN);
485
+ const hit = new PhysicsSurfacePoint();
486
+ return function physicsGroundResolver(x, y, z) {
487
+ ray.setOrigin(x, y + PROBE_LIFT, z);
488
+ if (!physicsSystem.raycast(ray, hit, filter)) return null;
489
+ return (y + PROBE_LIFT) - hit.t;
490
+ };
491
+ }
492
+
493
+ // =====================================================================
494
+ // World construction
495
+ // =====================================================================
496
+
497
+ /**
498
+ * The flat box platform everyone stands on — visible + a static physics body, top face at y=0. Also an
499
+ * acoustic occluder (a real floor): this is what keeps the probe bake from dropping probes onto y=0 and
500
+ * leaking sound under the walls — see {@link GROUND_MATERIAL}.
501
+ */
502
+ function buildPlatform(ecd) {
503
+ // Sized to hold the cathedral (west, x≈-24..-10), the house (origin), the reflector (north, z=-12) and the
504
+ // roof ramp (east, x≈10) with room to roam — the floor's extent IS the bake's horizontal extent, so it is
505
+ // kept only as large as the scene needs. Centred on x=-7 (between house and cathedral).
506
+ const THICK = 1.0;
507
+ spawnBox(ecd, {
508
+ center: new Vector3(-14, -THICK / 2, 0),
509
+ size: new Vector3(60, THICK, 32), // x ∈ [-44, 16], z ∈ [-16, 16]
510
+ color: 0x5a6b52,
511
+ roughness: 0.97,
512
+ material: GROUND_MATERIAL,
513
+ });
514
+ }
515
+
516
+ /**
517
+ * The house: four 3 m walls + a roof around an 8×8 m room, every surface an acoustic occluder. South wall
518
+ * carries a DOOR (opening to the floor, walk-through); north wall a WINDOW (mid-height opening); east /
519
+ * west walls + roof are solid. Each opening is framed by wall segments so the gap is a real hole in the
520
+ * geometry the solver routes through.
521
+ */
522
+ function buildHouse(ecd) {
523
+ const color = 0xc9b79a;
524
+
525
+ // -- South wall (z = +HOUSE_HALF) — DOOR, centred on x, open to the floor -----------------
526
+ // left + right jambs (full height), and a lintel above the opening.
527
+ acousticWall(ecd, segCenter(-HOUSE_HALF, -DOOR_HALF_W), WALL_MID_Y, HOUSE_HALF,
528
+ segWidth(-HOUSE_HALF, -DOOR_HALF_W), WALL_H, WALL_T, color);
529
+ acousticWall(ecd, segCenter(DOOR_HALF_W, HOUSE_HALF), WALL_MID_Y, HOUSE_HALF,
530
+ segWidth(DOOR_HALF_W, HOUSE_HALF), WALL_H, WALL_T, color);
531
+ acousticWall(ecd, 0, (DOOR_H + WALL_H) / 2, HOUSE_HALF,
532
+ DOOR_HALF_W * 2, WALL_H - DOOR_H, WALL_T, color); // lintel
533
+
534
+ // -- North wall (z = -HOUSE_HALF) — WINDOW, framed sill + lintel -------------------------
535
+ acousticWall(ecd, segCenter(-HOUSE_HALF, -WIN_HALF_W), WALL_MID_Y, -HOUSE_HALF,
536
+ segWidth(-HOUSE_HALF, -WIN_HALF_W), WALL_H, WALL_T, color);
537
+ acousticWall(ecd, segCenter(WIN_HALF_W, HOUSE_HALF), WALL_MID_Y, -HOUSE_HALF,
538
+ segWidth(WIN_HALF_W, HOUSE_HALF), WALL_H, WALL_T, color);
539
+ acousticWall(ecd, 0, WIN_SILL / 2, -HOUSE_HALF,
540
+ WIN_HALF_W * 2, WIN_SILL, WALL_T, color); // sill (below window)
541
+ acousticWall(ecd, 0, (WIN_HEAD + WALL_H) / 2, -HOUSE_HALF,
542
+ WIN_HALF_W * 2, WALL_H - WIN_HEAD, WALL_T, color); // lintel (above window)
543
+
544
+ // -- East / west walls (solid), inset along z to butt against the N/S walls' inner faces --
545
+ const sideLen = HOUSE_HALF * 2 - WALL_T;
546
+ acousticWall(ecd, HOUSE_HALF, WALL_MID_Y, 0, WALL_T, WALL_H, sideLen, color);
547
+ acousticWall(ecd, -HOUSE_HALF, WALL_MID_Y, 0, WALL_T, WALL_H, sideLen, color);
548
+
549
+ // -- Roof — caps the room so the source is genuinely sealed -------------------------------
550
+ acousticWall(ecd, 0, WALL_H + WALL_T / 2, 0,
551
+ HOUSE_HALF * 2 + 0.6, WALL_T, HOUSE_HALF * 2 + 0.6, 0x8a5a3a);
552
+ }
553
+
554
+ /** Centre of the wall segment spanning [a, b] along one axis. */
555
+ function segCenter(a, b) {
556
+ return (a + b) / 2;
557
+ }
558
+
559
+ /** Width of the wall segment spanning [a, b] along one axis. */
560
+ function segWidth(a, b) {
561
+ return b - a;
562
+ }
563
+
564
+ /** A house wall slab: a visual + physics + acoustic box from a centre + full extents. */
565
+ function acousticWall(ecd, cx, cy, cz, sx, sy, sz, color) {
566
+ spawnBox(ecd, {
567
+ center: new Vector3(cx, cy, cz),
568
+ size: new Vector3(sx, sy, sz),
569
+ color,
570
+ roughness: 0.85,
571
+ material: WALL_MATERIAL,
572
+ });
573
+ }
574
+
575
+ /**
576
+ * Free-standing occluders dotted around the platform, away from the house — direct-path occlusion test
577
+ * pieces (duck behind one and the music dampens, no opening involved).
578
+ */
579
+ function buildScatteredOccluders(ecd) {
580
+ const color = 0x8a8a8a;
581
+
582
+ // A long barrier wall east of the house.
583
+ spawnBox(ecd, { center: new Vector3(13, 1.5, 5), size: new Vector3(WALL_T, 3, 7), color, roughness: 0.8, material: WALL_MATERIAL });
584
+ // A chunky block in the open south-east (clear of the cathedral, the reflector corridor, and the ramp).
585
+ spawnBox(ecd, { center: new Vector3(8, 1.5, -10), size: new Vector3(3, 3, 3), color, roughness: 0.8, material: WALL_MATERIAL });
586
+ // A couple of pillars for parallax + narrow shadows.
587
+ spawnBox(ecd, { center: new Vector3(7, 2, 13), size: new Vector3(1, 4, 1), color, roughness: 0.8, material: WALL_MATERIAL });
588
+ spawnBox(ecd, { center: new Vector3(-7, 2, -14), size: new Vector3(1, 4, 1), color, roughness: 0.8, material: WALL_MATERIAL });
589
+ }
590
+
591
+ /**
592
+ * A tiny 3×3 m enclosed shack in the open south-east: four hard walls (one with a 1 m doorway, NO windows) and a
593
+ * roof, all {@link CATHEDRAL_MATERIAL}. A deliberately small, hard cavity — a "reverb chamber" test site whose
594
+ * baked tail (short but bright/ringy) contrasts the big stone cathedral and the dead little house. No source
595
+ * inside: walk in with the orbiting source audible, or A/B the room tone against the open platform.
596
+ */
597
+ function buildSmallShack(ecd) {
598
+ const color = 0xb0a48c;
599
+ const x0 = SHACK_X - SHACK_HALF, x1 = SHACK_X + SHACK_HALF;
600
+ const z0 = SHACK_Z - SHACK_HALF, z1 = SHACK_Z + SHACK_HALF;
601
+
602
+ // West wall (x=x0, faces the scene) — a doorway to the floor, centred on z
603
+ buildWall(ecd, {
604
+ fixedAxis: "x", fixed: x0, from: z0, to: z1, height: SHACK_H, thickness: SHACK_T,
605
+ openings: [{ a: SHACK_Z - SHACK_DOOR_HALF, b: SHACK_Z + SHACK_DOOR_HALF, y0: 0, y1: SHACK_DOOR_H }],
606
+ material: CATHEDRAL_MATERIAL, color,
607
+ });
608
+ // East wall (x=x1) — solid
609
+ buildWall(ecd, {
610
+ fixedAxis: "x", fixed: x1, from: z0, to: z1, height: SHACK_H, thickness: SHACK_T,
611
+ material: CATHEDRAL_MATERIAL, color,
612
+ });
613
+ // North + south walls (z=z0/z1) — solid
614
+ for (const z of [z0, z1]) {
615
+ buildWall(ecd, {
616
+ fixedAxis: "z", fixed: z, from: x0, to: x1, height: SHACK_H, thickness: SHACK_T,
617
+ material: CATHEDRAL_MATERIAL, color,
618
+ });
619
+ }
620
+ roofSlab(ecd, x0, x1, z0, z1, SHACK_H, SHACK_T, color);
621
+ }
622
+
623
+ /**
624
+ * The cathedral, west of the house across a ~6 m gap: a big, tall, hard-walled stone hall — a much larger,
625
+ * more reverberant space than the dead little house. A wide MAIN ENTRANCE faces the gap (east wall), a couple
626
+ * of WINDOWS line each long side, and a TOWER shaft rises from the centre of the nave roof's back (open to the nave
627
+ * through a roof hole) — a tall coupled volume that lengthens + colours the tail near it (à la Šibenik). Every
628
+ * surface is a {@link CATHEDRAL_MATERIAL} occluder, so the source within only escapes through the openings.
629
+ */
630
+ function buildCathedral(ecd) {
631
+ const color = 0xb8b0a0;
632
+
633
+ // -- East wall (x=CATH_X1, faces the house) — the MAIN ENTRANCE, centred, open to the floor -------------
634
+ buildWall(ecd, {
635
+ fixedAxis: "x", fixed: CATH_X1, from: CATH_Z0, to: CATH_Z1, height: CATH_H, thickness: CATH_T,
636
+ openings: [{ a: -CATH_ENTRY_HALF_W, b: CATH_ENTRY_HALF_W, y0: 0, y1: CATH_ENTRY_H }],
637
+ material: CATHEDRAL_MATERIAL, color,
638
+ });
639
+
640
+ // -- West wall (x=CATH_X0) — solid --------------------------------------------------------------------
641
+ buildWall(ecd, {
642
+ fixedAxis: "x", fixed: CATH_X0, from: CATH_Z0, to: CATH_Z1, height: CATH_H, thickness: CATH_T,
643
+ material: CATHEDRAL_MATERIAL, color,
644
+ });
645
+
646
+ // -- North + south long walls (z=CATH_Z0 / CATH_Z1) — four windows each, along the nave -----------------
647
+ const sideWindows = CATH_WIN_XS.map((x) => (
648
+ { a: x - CATH_WIN_HALF_W, b: x + CATH_WIN_HALF_W, y0: CATH_WIN_SILL, y1: CATH_WIN_HEAD }
649
+ ));
650
+ for (const z of [CATH_Z0, CATH_Z1]) {
651
+ buildWall(ecd, {
652
+ fixedAxis: "z", fixed: z, from: CATH_X0, to: CATH_X1, height: CATH_H, thickness: CATH_T,
653
+ openings: sideWindows, material: CATHEDRAL_MATERIAL, color,
654
+ });
655
+ }
656
+
657
+ // -- Roof at y=CATH_H, tiled around two holes: the tower shaft (back centre) and a 2×2 m drop-through -----
658
+ buildRoofWithHoles(ecd, CATH_X0, CATH_X1, CATH_Z0, CATH_Z1, CATH_H, CATH_T, [
659
+ { x0: TOWER_X0, x1: TOWER_X1, z0: TOWER_Z0, z1: TOWER_Z1 },
660
+ { x0: JUMP_HOLE_X - JUMP_HOLE_HALF, x1: JUMP_HOLE_X + JUMP_HOLE_HALF, z0: JUMP_HOLE_Z - JUMP_HOLE_HALF, z1: JUMP_HOLE_Z + JUMP_HOLE_HALF },
661
+ ], 0x6b5a48);
662
+
663
+ // -- Tower: four walls around the tower roof hole, from TOWER_BOTTOM (1 m below the roof, so the roof
664
+ // seam is buried — no z-fighting) up to TOWER_TOP, capped — open to the nave below -------------------
665
+ const towerMidY = (TOWER_BOTTOM + TOWER_TOP) / 2, towerHeight = TOWER_TOP - TOWER_BOTTOM;
666
+ const towerCz = (TOWER_Z0 + TOWER_Z1) / 2, towerDz = TOWER_Z1 - TOWER_Z0;
667
+ const towerCx = (TOWER_X0 + TOWER_X1) / 2, towerDx = TOWER_X1 - TOWER_X0;
668
+ const tower = (center, size) => spawnBox(ecd, { center, size, color, roughness: 0.8, material: CATHEDRAL_MATERIAL });
669
+ tower(new Vector3(TOWER_X0, towerMidY, towerCz), new Vector3(CATH_T, towerHeight, towerDz));
670
+ tower(new Vector3(TOWER_X1, towerMidY, towerCz), new Vector3(CATH_T, towerHeight, towerDz));
671
+ tower(new Vector3(towerCx, towerMidY, TOWER_Z0), new Vector3(towerDx, towerHeight, CATH_T));
672
+ tower(new Vector3(towerCx, towerMidY, TOWER_Z1), new Vector3(towerDx, towerHeight, CATH_T));
673
+ tower(new Vector3(towerCx, TOWER_TOP + CATH_T / 2, towerCz), new Vector3(towerDx, CATH_T, towerDz)); // cap
674
+ }
675
+
676
+ /**
677
+ * A vertical wall (a slab of `thickness` at `fixed` on `fixedAxis` — 'x' or 'z' — spanning [from,to] on the
678
+ * other horizontal axis, y∈[0,height]) with rectangular `openings` cut out of it. Each opening is `{a, b, y0,
679
+ * y1}` (a,b on the span axis, y0..y1 vertical); the gaps between openings become full-height pillars, and each
680
+ * opening gets a sill below + a lintel above. The same recipe the house door/window are framed with.
681
+ */
682
+ function buildWall(ecd, { fixedAxis, fixed, from, to, height, thickness, openings = [], material, color }) {
683
+ const ops = openings.slice().sort((p, q) => p.a - q.a);
684
+
685
+ // full-height pillars in the gaps between openings (and at the two ends)
686
+ let cursor = from;
687
+ for (const op of ops) {
688
+ if (op.a > cursor) {
689
+ wallSlab(ecd, fixedAxis, fixed, cursor, op.a, 0, height, thickness, material, color);
690
+ }
691
+ cursor = Math.max(cursor, op.b);
692
+ }
693
+ if (to > cursor) {
694
+ wallSlab(ecd, fixedAxis, fixed, cursor, to, 0, height, thickness, material, color);
695
+ }
696
+
697
+ // sill below + lintel above each opening
698
+ for (const op of ops) {
699
+ if (op.y0 > 0) {
700
+ wallSlab(ecd, fixedAxis, fixed, op.a, op.b, 0, op.y0, thickness, material, color);
701
+ }
702
+ if (op.y1 < height) {
703
+ wallSlab(ecd, fixedAxis, fixed, op.a, op.b, op.y1, height, thickness, material, color);
704
+ }
705
+ }
706
+ }
707
+
708
+ /** One box of a {@link buildWall}: spans [s0,s1] on the span axis, [y0,y1] vertical, `thickness` at `fixed`. */
709
+ function wallSlab(ecd, fixedAxis, fixed, s0, s1, y0, y1, thickness, material, color) {
710
+ const sc = (s0 + s1) / 2, sw = s1 - s0;
711
+ const yc = (y0 + y1) / 2, yh = y1 - y0;
712
+ const center = fixedAxis === "x" ? new Vector3(fixed, yc, sc) : new Vector3(sc, yc, fixed);
713
+ const size = fixedAxis === "x" ? new Vector3(thickness, yh, sw) : new Vector3(sw, yh, thickness);
714
+ spawnBox(ecd, { center, size, color, roughness: 0.8, material });
715
+ }
716
+
717
+ /** A horizontal roof slab over the x/z rectangle, its bottom face at `y`. */
718
+ function roofSlab(ecd, x0, x1, z0, z1, y, thickness, color) {
719
+ spawnBox(ecd, {
720
+ center: new Vector3((x0 + x1) / 2, y + thickness / 2, (z0 + z1) / 2),
721
+ size: new Vector3(x1 - x0, thickness, z1 - z0),
722
+ color, roughness: 0.8, material: CATHEDRAL_MATERIAL,
723
+ });
724
+ }
725
+
726
+ /**
727
+ * A flat roof over [x0,x1]×[z0,z1] (bottom face at `y`) with rectangular `holes` ({x0,x1,z0,z1}) cut out. Tiled
728
+ * as z-strips split at the holes' z-edges; within each strip the x-span is split around any hole that spans it
729
+ * (so non-overlapping holes at different z are all handled).
730
+ */
731
+ function buildRoofWithHoles(ecd, x0, x1, z0, z1, y, thickness, holes, color) {
732
+ const zEdges = [z0, z1];
733
+ for (const h of holes) {
734
+ zEdges.push(h.z0, h.z1);
735
+ }
736
+ const bands = Array.from(new Set(zEdges)).sort((a, b) => a - b);
737
+
738
+ for (let i = 0; i < bands.length - 1; i++) {
739
+ const za = bands[i], zb = bands[i + 1];
740
+ // holes spanning this whole z-band → their x-ranges are cut from this strip
741
+ const cuts = holes
742
+ .filter((h) => h.z0 <= za + 1e-6 && h.z1 >= zb - 1e-6)
743
+ .map((h) => ({ a: h.x0, b: h.x1 }))
744
+ .sort((p, q) => p.a - q.a);
745
+
746
+ let cursor = x0;
747
+ for (const cut of cuts) {
748
+ if (cut.a > cursor) {
749
+ roofSlab(ecd, cursor, cut.a, za, zb, y, thickness, color);
750
+ }
751
+ cursor = Math.max(cursor, cut.b);
752
+ }
753
+ if (x1 > cursor) {
754
+ roofSlab(ecd, cursor, x1, za, zb, y, thickness, color);
755
+ }
756
+ }
757
+ }
758
+
759
+ /**
760
+ * A free-standing hard wall opposite the house's WINDOW (north face), set back so you can walk between them —
761
+ * a {@link REFLECTOR_MATERIAL} reflector that bounces the window's leaked sound back at a listener in the gap
762
+ * (the bounce shows up as a baked early reflection / a brighter local reverb between window and wall).
763
+ */
764
+ function buildReflectorWall(ecd) {
765
+ spawnBox(ecd, {
766
+ center: new Vector3(0, REFLECTOR_H / 2, REFLECTOR_Z),
767
+ size: new Vector3(REFLECTOR_HALF_W * 2, REFLECTOR_H, 0.4),
768
+ color: 0x9aa0a8,
769
+ roughness: 0.6,
770
+ material: REFLECTOR_MATERIAL,
771
+ });
772
+ }
773
+
774
+ /**
775
+ * Two ramps: from the platform up onto the HOUSE roof (east side), and from the house roof across the gap up
776
+ * onto the (taller) CATHEDRAL roof. Walkable static bodies (the ground resolver snaps the player to whatever's
777
+ * underfoot), and acoustic occluders too — the tilted slabs cast their own (rotated-box) shadow, e.g. the
778
+ * gap-spanning ramp shades the gap below it.
779
+ */
780
+ function buildRoofRamp(ecd) {
781
+ const ROOF_EDGE = HOUSE_HALF + 0.3; // the house roof overhangs its walls to ±(HOUSE_HALF+0.3)
782
+ const CATH_ROOF_TOP = CATH_H + CATH_T; // the cathedral roof's walking surface
783
+ buildRamp(ecd, 10, 0.05, ROOF_EDGE, ROOF_TOP, 0, 2.6, 0x7a6f5e); // platform → house roof
784
+ buildRamp(ecd, -ROOF_EDGE, ROOF_TOP, CATH_X1, CATH_ROOF_TOP, 0, 3.0, 0x7a6f5e); // house roof → cathedral roof
785
+ }
786
+
787
+ /**
788
+ * A ramp whose top face runs from the lower surface point (bx,by) up to the upper one (tx,ty) in the x–y plane
789
+ * at z=`z`, `width` wide: a thin box rotated so its length runs bottom→top. The top end lands EXACTLY on
790
+ * (tx,ty) (so it never pokes through the roof it meets); a short overhang is added only at the BOTTOM to seat
791
+ * it in the lower surface. An acoustic occluder (`WALL_MATERIAL`) — the rotated box is honoured by the occluder
792
+ * index exactly as by the collider.
793
+ */
794
+ function buildRamp(ecd, bx, by, tx, ty, z, width, color) {
795
+ const dx = tx - bx, dy = ty - by;
796
+ const span = Math.hypot(dx, dy);
797
+ const angle = Math.atan2(dy, dx);
798
+ const overhang = 0.6;
799
+ const ux = dx / span, uy = dy / span; // unit bottom→top
800
+ spawnBox(ecd, {
801
+ // centre shifted half the overhang toward the bottom, so the +x (top) end is exactly (tx,ty)
802
+ center: new Vector3((bx + tx) / 2 - ux * overhang / 2, (by + ty) / 2 - uy * overhang / 2, z),
803
+ size: new Vector3(span + overhang, 0.3, width),
804
+ color,
805
+ roughness: 0.9,
806
+ rotation: Quaternion.fromAxisAngle(new Vector3(0, 0, 1), angle),
807
+ material: WALL_MATERIAL,
808
+ });
809
+ }
810
+
811
+ // =====================================================================
812
+ // Operable sliding doors + the per-frame mover (orbiter + doors + proximity cue)
813
+ // =====================================================================
814
+
815
+ const IDENTITY_QUATERNION = Quaternion.fromAxisAngle(new Vector3(0, 1, 0), 0); // axis-aligned overlap queries
816
+
817
+ /**
818
+ * Build one operable sliding door: a slab filling an opening (centre `center`, full extents `size`), a
819
+ * KinematicPosition body so it can be driven, an {@link AcousticBody} occluder so it seals/clears the opening
820
+ * LIVE as it slides (the occluder index re-syncs on transform change), and a {@link PrototypeMover} (kind
821
+ * "door") so {@link PrototypeMotionSystem} slides it down (open) / up (closed) on E and tracks player proximity
822
+ * to `zoneCenter ± zoneHalf`.
823
+ *
824
+ * @param {EntityComponentDataset} ecd
825
+ * @param {{center:Vector3, size:Vector3, zoneCenter:Vector3, zoneHalf:Vector3, label:string}} p
826
+ */
827
+ function spawnSlidingDoor(ecd, { center, size, zoneCenter, zoneHalf, label }) {
828
+ const geom = new BoxGeometry(size.x, size.y, size.z);
829
+ const mat = litMaterial({ color: 0x5a4632, roughness: 0.7 });
830
+ const sg = ShadedGeometry.from(geom, mat);
831
+ sg.setFlag(ShadedGeometryFlags.CastShadow);
832
+ sg.setFlag(ShadedGeometryFlags.ReceiveShadow);
833
+ sg.setFlag(ShadedGeometryFlags.Visible);
834
+
835
+ const rigidBody = new RigidBody();
836
+ rigidBody.kind = BodyKind.KinematicPosition; // scripted vertical motion; solid + occluding while raised
837
+
838
+ const collider = new Collider();
839
+ collider.shape = BoxShape3D.from_size(size.x, size.y, size.z);
840
+
841
+ const openY = center.y - size.y; // slid fully below the floor → the opening is clear
842
+
843
+ // START open (slid down): the doors begin open AND, since the acoustic bake runs after the world is built,
844
+ // it sees the openings clear rather than sealed. E closes them.
845
+ const transform = new Transform();
846
+ transform.position.set(center.x, openY, center.z);
847
+
848
+ const mover = new PrototypeMover();
849
+ mover.kind = "door";
850
+ mover.closedY = center.y;
851
+ mover.openY = openY;
852
+ mover.open = true;
853
+ mover.label = label;
854
+ mover.zoneShape = BoxShape3D.from(zoneHalf.x, zoneHalf.y, zoneHalf.z);
855
+ mover.zoneCenter = zoneCenter;
856
+
857
+ new Entity()
858
+ .add(sg)
859
+ .add(rigidBody)
860
+ .add(collider)
861
+ .add(AcousticBody.from(WALL_MATERIAL))
862
+ .add(mover)
863
+ .add(Tag.fromJSON(["AcousticDemo", "Door"]))
864
+ .add(SerializationMetadata.Transient)
865
+ .add(transform)
866
+ .build(ecd);
867
+ }
868
+
869
+ /** The two operable doors: the house's south DOOR and the cathedral's east ENTRANCE (built OPEN; E closes them). */
870
+ function buildSlidingDoors(ecd) {
871
+ // House south door — fills the 1.4 m × 2.2 m opening at z = +HOUSE_HALF
872
+ spawnSlidingDoor(ecd, {
873
+ center: new Vector3(0, DOOR_H / 2, HOUSE_HALF),
874
+ size: new Vector3(DOOR_HALF_W * 2, DOOR_H, DOOR_T),
875
+ zoneCenter: new Vector3(0, 1.5, HOUSE_HALF),
876
+ zoneHalf: new Vector3(2.5, 2.0, 2.5),
877
+ label: "house door",
878
+ });
879
+ // Cathedral main entrance — fills the 3.5 m × 4.5 m opening at x = CATH_X1
880
+ spawnSlidingDoor(ecd, {
881
+ center: new Vector3(CATH_X1, CATH_ENTRY_H / 2, 0),
882
+ size: new Vector3(DOOR_T, CATH_ENTRY_H, CATH_ENTRY_HALF_W * 2),
883
+ zoneCenter: new Vector3(CATH_X1, 2.2, 0),
884
+ zoneHalf: new Vector3(3.5, 2.5, 3.5),
885
+ label: "cathedral entrance",
886
+ });
887
+ }
888
+
889
+ /** A centred "Press E" hint, shown by the motion system whenever the player is in a door's trigger zone. */
890
+ function makeInteractionCue() {
891
+ const el = document.createElement("div");
892
+ Object.assign(el.style, {
893
+ position: "absolute", left: "50%", top: "60%", transform: "translate(-50%, -50%)",
894
+ zIndex: "1000", padding: "6px 14px", font: "16px sans-serif", color: "#eaf4ff",
895
+ background: "rgba(18,26,34,0.82)", border: "1px solid #3a6ea5", borderRadius: "4px",
896
+ pointerEvents: "none", display: "none", letterSpacing: "0.5px",
897
+ });
898
+ el.textContent = 'Press "E"';
899
+ document.body.appendChild(el);
900
+ return el;
901
+ }
902
+
903
+ /**
904
+ * Per-entity motion record, attached alongside a {@link Transform} and observed by {@link PrototypeMotionSystem}.
905
+ * A tagged record: either an ORBITING source (`kind` "orbit" — circles (cx,cz) at `radius`/`height`, advancing
906
+ * `angle` by `speed`) or a SLIDING door (`kind` "door" — slides between `closedY`/`openY`, `open` toggled by E;
907
+ * `zoneShape`/`zoneCenter` is its proximity trigger). A plain data component; never serialized (the prototype
908
+ * entities are {@link SerializationMetadata.Transient}).
909
+ */
910
+ class PrototypeMover {
911
+ kind = "orbit";
912
+ // kind "orbit"
913
+ cx = 0;
914
+ cz = 0;
915
+ radius = 0;
916
+ height = 0;
917
+ speed = 0;
918
+ angle = 0;
919
+ // kind "door"
920
+ closedY = 0;
921
+ openY = 0;
922
+ open = false;
923
+ label = "";
924
+ zoneShape = null;
925
+ zoneCenter = null;
926
+ }
927
+
928
+ PrototypeMover.typeName = "PrototypeMover";
929
+
930
+ /**
931
+ * One per-frame mover for the prototype's dynamic pieces (added via {@link EntityManager.addSystem}). It observes
932
+ * ({@link PrototypeMover}, {@link Transform}) — link/unlink keep a working list — and each tick:
933
+ * - ORBIT movers — advance around their circle (the entity's Transform.position is set every frame);
934
+ * - DOOR movers — slide toward the target (open = down into the ground, closed = up), and the physics is
935
+ * queried for the player capsule overlapping a door's trigger zone. The nearest in-range door becomes
936
+ * {@link activeDoor} (E toggles it) and the "Press E" cue is shown. Proximity is a real collider overlap
937
+ * ({@link PhysicsSystem.overlap} of the zone box vs the player), not a distance test.
938
+ *
939
+ * (A system must declare ≥1 dependency — the engine drives it as an entity observer — so the movers are a real
940
+ * component rather than a side list.)
941
+ */
942
+ class PrototypeMotionSystem extends System {
943
+ #scratch = new Uint32Array(8);
944
+
945
+ constructor({ physics, cue }) {
946
+ super();
947
+ this.dependencies = [PrototypeMover, Transform];
948
+ this.physics = physics;
949
+ this.cue = cue;
950
+ this.playerEntity = -1; // set once the player is built
951
+ this.movers = []; // { mover: PrototypeMover, transform: Transform, entity: number }
952
+ this.activeDoor = null; // the door mover the player is next to, or null
953
+ }
954
+
955
+ /** EntityObserver callbacks — argument order matches `dependencies`, entity last, `this` = the system. */
956
+ link(mover, transform, entity) {
957
+ this.movers.push({ mover, transform, entity });
958
+ }
959
+
960
+ unlink(mover, transform, entity) {
961
+ const i = this.movers.findIndex((m) => m.entity === entity);
962
+ if (i !== -1) {
963
+ this.movers.splice(i, 1);
964
+ }
965
+ }
966
+
967
+ /** E handler — flip the door the player is standing next to (if any). */
968
+ toggleActiveDoor() {
969
+ if (this.activeDoor !== null) {
970
+ this.activeDoor.open = !this.activeDoor.open;
971
+ }
972
+ }
973
+
974
+ update(timeDelta) {
975
+ const ecd = this.entityManager === null ? null : this.entityManager.dataset;
976
+ if (ecd === null) {
977
+ return;
978
+ }
979
+
980
+ let active = null;
981
+ for (let i = 0; i < this.movers.length; i++) {
982
+ const mover = this.movers[i].mover;
983
+ const transform = this.movers[i].transform;
984
+
985
+ if (mover.kind === "orbit") {
986
+ mover.angle += mover.speed * timeDelta;
987
+ transform.position.set(
988
+ mover.cx + Math.cos(mover.angle) * mover.radius, mover.height,
989
+ mover.cz + Math.sin(mover.angle) * mover.radius);
990
+ continue;
991
+ }
992
+
993
+ // kind "door": proximity (collider overlap vs the player) + slide toward target
994
+ if (this.playerEntity !== -1 && active === null) {
995
+ const n = this.physics.overlap(
996
+ mover.zoneShape, mover.zoneCenter, IDENTITY_QUATERNION, this.#scratch, 0,
997
+ (entity) => entity === this.playerEntity);
998
+ if (n > 0) {
999
+ active = mover;
1000
+ }
1001
+ }
1002
+
1003
+ const targetY = mover.open ? mover.openY : mover.closedY;
1004
+ const p = transform.position;
1005
+ const dy = targetY - p.y;
1006
+ if (dy !== 0) {
1007
+ const step = Math.sign(dy) * Math.min(Math.abs(dy), DOOR_SLIDE_SPEED * timeDelta);
1008
+ p.set(p.x, p.y + step, p.z); // onChanged → the kinematic body + acoustic occluder follow
1009
+ }
1010
+ }
1011
+
1012
+ this.activeDoor = active;
1013
+ this.cue.style.display = active === null ? "none" : "block";
1014
+ }
1015
+ }
1016
+
1017
+ // The MainMenu loop, shared by the house, cathedral and shack sources (same clip, different rooms/acoustics).
1018
+ const MAIN_MENU_CLIP = "data/sounds/music/matsmusic/d1/Fiverr Alexgoldring MainMenu.ogg";
1019
+
1020
+ /** Sources spawned on the first click. House, cathedral and the little SHACK all play the SAME MainMenu loop (so
1021
+ * the difference you hear is purely the room acoustics); a fourth source orbits the scene from outside. (The
1022
+ * paths have spaces — the browser percent-encodes them on fetch, and the dev server serves it straight from
1023
+ * `app/`.) */
1024
+ function buildSources(ecd) {
1025
+ spawnAudioSource(ecd, {
1026
+ id: "house-mainmenu",
1027
+ clipPath: MAIN_MENU_CLIP,
1028
+ position: SRC,
1029
+ distanceMin: SRC_DIST_MIN,
1030
+ distanceMax: SRC_DIST_MAX,
1031
+ markerColor: 0xffcc66,
1032
+ markerEmissive: 0xff8800,
1033
+ lightDistance: SOURCE_LIGHT_DISTANCE / 2, // a tighter orange glow in the small dead room
1034
+ });
1035
+ spawnAudioSource(ecd, {
1036
+ id: "cathedral-mainmenu",
1037
+ clipPath: MAIN_MENU_CLIP,
1038
+ position: CATH_SRC,
1039
+ distanceMin: CATH_SRC_DIST_MIN,
1040
+ distanceMax: CATH_SRC_DIST_MAX,
1041
+ markerColor: 0x99ccff,
1042
+ markerEmissive: 0x3388ff,
1043
+ });
1044
+ spawnAudioSource(ecd, {
1045
+ id: "shack-mainmenu",
1046
+ clipPath: MAIN_MENU_CLIP,
1047
+ position: new Vector3(SHACK_X, 1.2, SHACK_Z),
1048
+ distanceMin: SRC_DIST_MIN,
1049
+ distanceMax: SRC_DIST_MAX,
1050
+ markerColor: 0xcc99ff,
1051
+ markerEmissive: 0x8844cc,
1052
+ });
1053
+
1054
+ // A third source ORBITS the whole scene from outside (a WorldMode layer). Acoustic + a long max distance,
1055
+ // so from the centre you hear it swing in and out as buildings break the line of sight. The
1056
+ // PrototypeMotionSystem drives its position each frame around (ORBIT_CX, ORBIT_CZ).
1057
+ const orbiter = spawnAudioSource(ecd, {
1058
+ id: "orbit-worldmode",
1059
+ clipPath: ORBIT_CLIP,
1060
+ position: new Vector3(ORBIT_CX + ORBIT_RADIUS, ORBIT_HEIGHT, ORBIT_CZ),
1061
+ distanceMin: ORBIT_DIST_MIN,
1062
+ distanceMax: ORBIT_DIST_MAX,
1063
+ markerColor: 0x99ff99,
1064
+ markerEmissive: 0x33cc55,
1065
+ lightIntensity: 9,
1066
+ lightDistance: 15, // ~30% smaller than the other markers' default reach
1067
+ });
1068
+ const mover = new PrototypeMover();
1069
+ mover.kind = "orbit";
1070
+ mover.cx = ORBIT_CX;
1071
+ mover.cz = ORBIT_CZ;
1072
+ mover.radius = ORBIT_RADIUS;
1073
+ mover.height = ORBIT_HEIGHT;
1074
+ mover.speed = ORBIT_SPEED;
1075
+ ecd.addComponentToEntity(orbiter.entity, mover); // PrototypeMotionSystem links it via (PrototypeMover, Transform)
1076
+ }
1077
+
1078
+ /**
1079
+ * Spawn one 3D looping {@link AudioEmitter} (acoustic on) with a small emissive marker sphere so it's visible.
1080
+ * Looping + 3D + autoplay → the emitter is "managed": it sounds once the listener (player) exists and is
1081
+ * within `distanceMax`, after the context resumes on the first click.
1082
+ *
1083
+ * @param {EntityComponentDataset} ecd
1084
+ * @param {{id:string, clipPath:string, position:Vector3, distanceMin:number, distanceMax:number,
1085
+ * markerColor:number, markerEmissive:number, lightIntensity?:number, lightDistance?:number}} p
1086
+ * @returns {{entity:number, transform:Transform}} the spawned entity + its transform (so a mover can drive it)
1087
+ */
1088
+ function spawnAudioSource(ecd, { id, clipPath, position, distanceMin, distanceMax, markerColor, markerEmissive,
1089
+ lightIntensity = SOURCE_LIGHT_INTENSITY, lightDistance = SOURCE_LIGHT_DISTANCE }) {
1090
+ const event = EventDescription.from(
1091
+ id,
1092
+ SampleAudioClip.from(clipPath, { loop: true }),
1093
+ {
1094
+ is3D: true,
1095
+ distanceMin,
1096
+ distanceMax,
1097
+ // Physically-based (sound-pressure-fitted) rolloff, sampled across [min, max] in metres: full
1098
+ // volume within distanceMin, a natural log-ish falloff to silence at distanceMax. Reuses the
1099
+ // engine's own falloff + curve builder rather than a hand-rolled line.
1100
+ attenuation: buildAttenuationCurve(distanceMin, distanceMax, interpolate_irradiance_smith),
1101
+ },
1102
+ );
1103
+
1104
+ const emitter = new AudioEmitter();
1105
+ emitter.event = event;
1106
+ emitter.acoustic = true; // occlusion / transmission / pathing
1107
+ emitter.sourceRadius = 0.3; // a little volume so occlusion fades in/out rather than popping
1108
+ emitter.autoplay = true;
1109
+ emitter.volume.set(1);
1110
+
1111
+ const markerGeom = new SphereGeometry(0.3, 16, 16);
1112
+ const markerMat = litMaterial({
1113
+ color: markerColor,
1114
+ emissive: markerEmissive,
1115
+ emissiveIntensity: 1.4,
1116
+ roughness: 0.4,
1117
+ });
1118
+ const sg = ShadedGeometry.from(markerGeom, markerMat);
1119
+ sg.setFlag(ShadedGeometryFlags.Visible);
1120
+ sg.setFlag(ShadedGeometryFlags.CastShadow);
1121
+
1122
+ // A point light co-located with the marker — the markers were already emissive, this lets each one cast a
1123
+ // coloured glow into its room (the light colour is taken from the marker's emissive tint).
1124
+ const light = new Light();
1125
+ light.type.set(Light.Type.POINT);
1126
+ light.color.setRGBUint8((markerEmissive >> 16) & 0xff, (markerEmissive >> 8) & 0xff, markerEmissive & 0xff);
1127
+ light.intensity.set(lightIntensity);
1128
+ light.distance.set(lightDistance);
1129
+
1130
+ const transform = new Transform();
1131
+ transform.position.copy(position);
1132
+
1133
+ const eb = new Entity()
1134
+ .add(emitter)
1135
+ .add(sg)
1136
+ .add(light)
1137
+ .add(Tag.fromJSON(["AudioSource"]))
1138
+ .add(SerializationMetadata.Transient)
1139
+ .add(transform);
1140
+ eb.build(ecd);
1141
+
1142
+ return { entity: eb.id, transform };
1143
+ }
1144
+
1145
+ /**
1146
+ * Add a box to the world: visual ({@link ShadedGeometry}) + a static physics body ({@link RigidBody} +
1147
+ * {@link Collider}). If an {@link AcousticMaterial} is given, it also becomes an {@link AcousticBody}
1148
+ * occluder (the same Collider shape is the occluding geometry). Position is the box centre; Transform is
1149
+ * added LAST so the (RigidBody, Transform) and (AcousticBody, Collider, Transform) tuples complete on it.
1150
+ *
1151
+ * @param {EntityComponentDataset} ecd
1152
+ * @param {object} p
1153
+ * @param {Vector3} p.center
1154
+ * @param {Vector3} p.size full w, h, d
1155
+ * @param {number} p.color
1156
+ * @param {number} [p.roughness]
1157
+ * @param {AcousticMaterial} [p.material] present → also an acoustic occluder
1158
+ * @param {Quaternion} [p.rotation] present → the box is oriented (e.g. a ramp); physics + acoustics use it
1159
+ */
1160
+ function spawnBox(ecd, { center, size, color, roughness = 0.8, material, rotation }) {
1161
+ const geom = new BoxGeometry(size.x, size.y, size.z);
1162
+ const mat = litMaterial({ color, roughness });
1163
+ const sg = ShadedGeometry.from(geom, mat);
1164
+ sg.setFlag(ShadedGeometryFlags.CastShadow);
1165
+ sg.setFlag(ShadedGeometryFlags.ReceiveShadow);
1166
+ sg.setFlag(ShadedGeometryFlags.Visible);
1167
+
1168
+ const rigidBody = new RigidBody();
1169
+ rigidBody.kind = BodyKind.Static;
1170
+
1171
+ const collider = new Collider();
1172
+ // Explicit half/full-extent box → the closed-form box narrowphase, not GJK+EPA.
1173
+ collider.shape = BoxShape3D.from_size(size.x, size.y, size.z);
1174
+
1175
+ const transform = new Transform();
1176
+ transform.position.copy(center);
1177
+ if (rotation !== undefined) {
1178
+ transform.rotation.copy(rotation); // a tilted box — the renderer, the collider, and the occluder all honour it
1179
+ }
1180
+
1181
+ const eb = new Entity()
1182
+ .add(sg)
1183
+ .add(rigidBody)
1184
+ .add(collider)
1185
+ .add(Tag.fromJSON(["AcousticDemo"]))
1186
+ .add(SerializationMetadata.Transient);
1187
+
1188
+ if (material !== undefined) {
1189
+ eb.add(AcousticBody.from(material));
1190
+ }
1191
+
1192
+ eb.add(transform).build(ecd);
1193
+ }
1194
+
1195
+ // =====================================================================
1196
+ // Player + input (mirrors the first-person gym, minus the parkour abilities)
1197
+ // =====================================================================
1198
+
1199
+ /**
1200
+ * @param {EntityComponentDataset} ecd
1201
+ * @returns {{entity:number, controller:FirstPersonPlayerController}}
1202
+ */
1203
+ function buildPlayerEntity(ecd) {
1204
+ const transform = new Transform();
1205
+ transform.position.set(SPAWN_X, 0, SPAWN_Z);
1206
+
1207
+ // Plain walk / look / jump — no parkour abilities for this acoustic walkaround.
1208
+ const controller = new FirstPersonPlayerController();
1209
+
1210
+ const bodyCfg = controller.config.body;
1211
+ const radius = bodyCfg.radius;
1212
+ const totalHeight = bodyCfg.height;
1213
+ const cylinderHeight = Math.max(0, totalHeight - 2 * radius);
1214
+
1215
+ const rigidBody = new RigidBody();
1216
+ rigidBody.kind = BodyKind.KinematicPosition;
1217
+ rigidBody.mass = bodyCfg.mass;
1218
+
1219
+ const collider = new Collider();
1220
+ // Capsule bottom at the feet (Transform.position), top at the head — see the gym prototype.
1221
+ collider.shape = TransformedShape3D.from_translation(
1222
+ CapsuleShape3D.from(radius, cylinderHeight),
1223
+ [0, totalHeight / 2, 0],
1224
+ );
1225
+
1226
+ const eb = new Entity()
1227
+ .add(controller)
1228
+ .add(rigidBody)
1229
+ .add(collider)
1230
+ .add(Tag.fromJSON(["Player"]))
1231
+ .add(SerializationMetadata.Transient)
1232
+ .add(transform);
1233
+
1234
+ eb.build(ecd);
1235
+
1236
+ // The acoustic listener rides the CAMERA (eye height), not the feet. Building the player linked the
1237
+ // first-person controller, whose link() created an eye entity — a Camera + a Transform driven to eye
1238
+ // height and look direction every frame — so attaching the SoundListener there makes occlusion / pathing
1239
+ // (and the WebAudio listener pose) test from the EARS. At feet height (Transform.position) a window sill
1240
+ // or a low wall occludes a source the player plainly sees through it; the modelled ears were below the
1241
+ // geometry the eye is above. (Component-add linking is synchronous, so controller.eyeEntity is valid here.)
1242
+ ecd.addComponentToEntity(controller.eyeEntity, new SoundListener());
1243
+
1244
+ return { entity: eb.id, controller };
1245
+ }
1246
+
1247
+ /**
1248
+ * Keyboard + mouse → the controller's intent surface (WASD move, mouse look, space jump).
1249
+ *
1250
+ * @param {EntityComponentDataset} ecd
1251
+ * @param {{entity:number, controller:FirstPersonPlayerController}} player
1252
+ * @param {PrototypeMotionSystem} motion drives the doors; E operates the one the player is next to
1253
+ */
1254
+ function buildInputBindings(ecd, player, motion) {
1255
+ const ic = new InputController();
1256
+ const intent = player.controller.intent;
1257
+
1258
+ const SENSITIVITY = (Math.PI * 2) / 1200;
1259
+
1260
+ const held = { w: false, a: false, s: false, d: false };
1261
+
1262
+ function recomputeMove() {
1263
+ let mx = 0, my = 0;
1264
+ if (held.d) mx += 1;
1265
+ if (held.a) mx -= 1;
1266
+ if (held.w) my += 1;
1267
+ if (held.s) my -= 1;
1268
+ intent.move.set(mx, my);
1269
+ }
1270
+
1271
+ function bindMoveKey(key, prop) {
1272
+ ic.bind(`keyboard/keys/${key}/down`, () => { held[prop] = true; recomputeMove(); });
1273
+ ic.bind(`keyboard/keys/${key}/up`, () => { held[prop] = false; recomputeMove(); });
1274
+ }
1275
+
1276
+ bindMoveKey("w", "w");
1277
+ bindMoveKey("a", "a");
1278
+ bindMoveKey("s", "s");
1279
+ bindMoveKey("d", "d");
1280
+
1281
+ ic.bind("keyboard/keys/space/down", () => { intent.jump = true; });
1282
+ ic.bind("keyboard/keys/space/up", () => { intent.jump = false; });
1283
+
1284
+ // Sprint — hold Shift while moving (the controller reads intent.sprint; see prototype_first_person_controller).
1285
+ ic.bind("keyboard/keys/shift/down", () => { intent.sprint = true; });
1286
+ ic.bind("keyboard/keys/shift/up", () => { intent.sprint = false; });
1287
+
1288
+ // E — operate the door the player is standing next to (the motion system tracks which one is in range).
1289
+ ic.bind("keyboard/keys/e/down", () => { motion.toggleActiveDoor(); });
1290
+
1291
+ ic.bind("pointer/on/move", (position, event, delta) => {
1292
+ if (document.pointerLockElement === null) return;
1293
+ intent.look._add(delta.x * SENSITIVITY, delta.y * SENSITIVITY);
1294
+ });
1295
+
1296
+ ic.on.unlinked.add(() => {
1297
+ intent.move.set(0, 0);
1298
+ intent.look.set(0, 0);
1299
+ intent.jump = false;
1300
+ intent.sprint = false;
1301
+ });
1302
+
1303
+ new Entity()
1304
+ .add(ic)
1305
+ .add(Tag.fromJSON(["FirstPersonInputBindings"]))
1306
+ .add(SerializationMetadata.Transient)
1307
+ .build(ecd);
1308
+ }
1309
+
1310
+ /**
1311
+ * Wire the canvas click to (a) start audio and (b) capture the mouse.
1312
+ *
1313
+ * The autoplay policy requires a user gesture before audio: the engine creates the context suspended and
1314
+ * starts ticking immediately, so we must not let the source play before the first click. On that click we
1315
+ * resume the context and — only once `resume()` has actually resolved — spawn the source, so its first
1316
+ * `playEvent` lands on a running context (no autoplay warning). Pointer lock is (re)requested every click;
1317
+ * ESC (browser default) releases it.
1318
+ *
1319
+ * @param {Engine} engine
1320
+ * @param {EntityComponentDataset} ecd
1321
+ */
1322
+ function setupInteraction(engine, ecd) {
1323
+ const el = engine.graphics.domElement;
1324
+ const captureEl = engine.viewStack.el;
1325
+
1326
+ let audioStarted = false;
1327
+
1328
+ captureEl.addEventListener("click", () => {
1329
+ if (!audioStarted) {
1330
+ audioStarted = true;
1331
+ // resume() returns the context.resume() promise — spawn the sources only after it resolves, so the
1332
+ // first playEvent lands on a running context.
1333
+ engine.sound.resumeContext().then(() => buildSources(ecd));
1334
+ }
1335
+
1336
+ if (document.pointerLockElement === el || !el.requestPointerLock) return;
1337
+ let p;
1338
+ try {
1339
+ p = el.requestPointerLock({ unadjustedMovement: true });
1340
+ } catch (e) {
1341
+ el.requestPointerLock();
1342
+ return;
1343
+ }
1344
+ if (p && typeof p.catch === "function") {
1345
+ p.catch(() => { el.requestPointerLock(); });
1346
+ }
1347
+ });
1348
+
1349
+ captureEl.addEventListener("contextmenu", (e) => e.preventDefault());
1350
+ }
1351
+
1352
+ function logHelp() {
1353
+ /* eslint-disable no-console */
1354
+ console.log("%cAcoustic solver — first-person walkaround",
1355
+ "color:#88ddff;font-weight:bold;font-size:14px");
1356
+ console.log("Click the canvas to capture the mouse (and start audio). ESC to release.");
1357
+ console.log("WASD = move | Shift = sprint | Mouse = look | Space = jump | E = operate a door | P = probe overlay");
1358
+ console.log("");
1359
+ console.log("%cThree sources + a tiny chamber — listen as you move:", "font-weight:bold");
1360
+ console.log(" • HOUSE (main-menu) — a tight, dead room; leaks from its DOOR (south) + WINDOW (north); a");
1361
+ console.log(" REFLECTOR wall north of the window bounces the window leak back at you");
1362
+ console.log(" • CATHEDRAL (main-menu, west across the gap) — a tall stone hall: long reverb + a coupled");
1363
+ console.log(" TOWER tail. SAME loop as the house, so the difference you hear is purely the room");
1364
+ console.log(" • ORBITER (WorldMode) — circles the scene from outside; fades in/out as buildings break LoS");
1365
+ console.log(" • SHACK (south-east) — a tiny hard reverb chamber; step in for a bright, ringy room tone");
1366
+ console.log(" • DOORS — walk up to the house door / cathedral entrance and press E to lower/raise it");
1367
+ console.log(" • RAMPS up onto the house roof + across to the cathedral roof; duck behind a barrier to occlude");
1368
+ }
1369
+
1370
+ // =====================================================================
1371
+ // Probe visualization (toggleable debug overlay)
1372
+ // =====================================================================
1373
+
1374
+ /**
1375
+ * Toggleable debug overlay for the baked field: the probe positions (small 3-axis crosses) and the
1376
+ * visibility-graph edges (line segments between mutually-visible probes). Mimics
1377
+ * {@link visualize_tetrahedral_mesh} / {@link lpv_visualize_probes} — built as {@link DrawMode.LineSegments}
1378
+ * {@link ShadedGeometry}, and ADDED/REMOVED on toggle (so there is zero cost while hidden, and no reliance
1379
+ * on live flag mutation).
1380
+ *
1381
+ * @param {EntityComponentDataset} ecd
1382
+ * @param {AcousticProbeField} field
1383
+ * @returns {{toggle: function(): void, shown: boolean}}
1384
+ */
1385
+ function makeProbeVisualization(ecd, field) {
1386
+ let ids = null; // [edgesEntity, probesEntity] while shown; null while hidden
1387
+
1388
+ function show() {
1389
+ // Magenta edges read clearly against the blue sky (cyan washed out); probe crosses stay amber.
1390
+ const edges = lineSegmentsEntity(buildVisibilityEdgesGeometry(field), 0xff00ff, 0.7);
1391
+ const probes = lineSegmentsEntity(buildProbeMarkersGeometry(field, 0.18), 0xffdd33, 1.0);
1392
+ edges.build(ecd);
1393
+ probes.build(ecd);
1394
+ ids = [edges.id, probes.id];
1395
+ }
1396
+
1397
+ function hide() {
1398
+ for (const id of ids) {
1399
+ ecd.removeEntity(id);
1400
+ }
1401
+ ids = null;
1402
+ }
1403
+
1404
+ return {
1405
+ toggle() {
1406
+ if (ids === null) {
1407
+ show();
1408
+ } else {
1409
+ hide();
1410
+ }
1411
+ },
1412
+ get shown() {
1413
+ return ids !== null;
1414
+ },
1415
+ };
1416
+ }
1417
+
1418
+ /**
1419
+ * A LineSegments {@link ShadedGeometry} entity over `geometry` — the unlit, shadowless, no-depth-write
1420
+ * debug-draw recipe from {@link visualize_tetrahedral_mesh}. Geometry positions are absolute world coords,
1421
+ * so the entity carries an identity {@link Transform}.
1422
+ */
1423
+ function lineSegmentsEntity(geometry, color, opacity) {
1424
+ const material = new LineBasicMaterial({ color, transparent: true, opacity, depthWrite: false });
1425
+ const sg = ShadedGeometry.from(geometry, material, DrawMode.LineSegments);
1426
+ sg.clearFlag(ShadedGeometryFlags.CastShadow);
1427
+ sg.clearFlag(ShadedGeometryFlags.ReceiveShadow);
1428
+
1429
+ return new Entity()
1430
+ .add(sg)
1431
+ .add(Tag.fromJSON(["ProbeViz"]))
1432
+ .add(SerializationMetadata.Transient)
1433
+ .add(new Transform());
1434
+ }
1435
+
1436
+ /** LineSegments geometry: one segment per visibility-graph edge (each undirected edge emitted once). */
1437
+ function buildVisibilityEdgesGeometry(field) {
1438
+ const positions = [];
1439
+ const graph = field.visibilityGraph;
1440
+
1441
+ if (graph !== null) {
1442
+ const addresses = graph.edge_addresses;
1443
+ const adjacency = graph.adjacency;
1444
+
1445
+ for (let v = 0; v < graph.vertex_count; v++) {
1446
+ const end = addresses[v + 1];
1447
+ for (let k = addresses[v]; k < end; k++) {
1448
+ const u = adjacency[k];
1449
+ if (v < u) { // CSR is symmetric — emit each undirected edge once
1450
+ positions.push(field.probeX(v), field.probeY(v), field.probeZ(v));
1451
+ positions.push(field.probeX(u), field.probeY(u), field.probeZ(u));
1452
+ }
1453
+ }
1454
+ }
1455
+ }
1456
+
1457
+ return lineGeometry(positions);
1458
+ }
1459
+
1460
+ /** LineSegments geometry: a small 3-axis cross (3 segments) at each probe position. */
1461
+ function buildProbeMarkersGeometry(field, r) {
1462
+ const positions = [];
1463
+
1464
+ for (let i = 0; i < field.size; i++) {
1465
+ const x = field.probeX(i);
1466
+ const y = field.probeY(i);
1467
+ const z = field.probeZ(i);
1468
+
1469
+ positions.push(x - r, y, z, x + r, y, z);
1470
+ positions.push(x, y - r, z, x, y + r, z);
1471
+ positions.push(x, y, z - r, x, y, z + r);
1472
+ }
1473
+
1474
+ return lineGeometry(positions);
1475
+ }
1476
+
1477
+ /** A BufferGeometry with a single position attribute (3 floats/vertex). */
1478
+ function lineGeometry(positions) {
1479
+ const geometry = new BufferGeometry();
1480
+ geometry.setAttribute("position", new Float32BufferAttribute(positions, 3));
1481
+ return geometry;
1482
+ }
1483
+
1484
+ /**
1485
+ * On-screen toggle for the probe overlay: a top-right button plus the P key. (The button can't be clicked
1486
+ * while the pointer is locked — the OS hides the cursor — so the key is the in-play toggle; ESC unlocks to
1487
+ * reach the button.)
1488
+ *
1489
+ * @param {{toggle: function(): void, shown: boolean}} viz
1490
+ */
1491
+ function setupProbeVizToggle(viz) {
1492
+ const button = document.createElement("button");
1493
+ Object.assign(button.style, {
1494
+ position: "absolute",
1495
+ top: "10px",
1496
+ right: "10px",
1497
+ zIndex: "1000",
1498
+ padding: "8px 12px",
1499
+ font: "13px sans-serif",
1500
+ color: "#cfe6ff",
1501
+ background: "rgba(18,26,34,0.85)",
1502
+ border: "1px solid #3a6ea5",
1503
+ borderRadius: "4px",
1504
+ cursor: "pointer",
1505
+ });
1506
+
1507
+ function sync() {
1508
+ button.textContent = `Probes: ${viz.shown ? "ON" : "off"} (P)`;
1509
+ }
1510
+
1511
+ sync();
1512
+
1513
+ button.addEventListener("click", (e) => {
1514
+ e.stopPropagation(); // don't let the canvas capture-click also fire (pointer lock)
1515
+ viz.toggle();
1516
+ sync();
1517
+ });
1518
+
1519
+ document.body.appendChild(button);
1520
+
1521
+ window.addEventListener("keydown", (e) => {
1522
+ if (e.code === "KeyP") {
1523
+ viz.toggle();
1524
+ sync();
1525
+ }
1526
+ });
1527
+ }
1528
+
1529
+ async function init() {
1530
+ await eh.initialize({ configuration: setupSound });
1531
+ await main(eh.engine);
1532
+ }
1533
+
1534
+ init();