@woosh/meep-engine 2.154.0 → 2.156.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 (487) hide show
  1. package/README.md +1 -1
  2. package/build/bundle-worker-image-decoder.js +1 -1
  3. package/build/bundle-worker-terrain.js +1 -1
  4. package/editor/view/ecs/ComponentControlView.d.ts +0 -9
  5. package/editor/view/ecs/ComponentControlView.js +2 -98
  6. package/package.json +1 -1
  7. package/src/core/binary/32BitEncoder.js +1 -1
  8. package/src/core/binary/to_half_float_uint16.js +3 -3
  9. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
  10. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +275 -253
  11. package/src/core/cache/Cache.d.ts.map +1 -1
  12. package/src/core/cache/Cache.js +7 -0
  13. package/src/core/cache/FrequencySketch.d.ts.map +1 -1
  14. package/src/core/cache/FrequencySketch.js +8 -4
  15. package/src/core/clipboard/obtainClipBoard.d.ts +6 -0
  16. package/src/core/clipboard/obtainClipBoard.d.ts.map +1 -0
  17. package/src/core/clipboard/obtainClipBoard.js +29 -0
  18. package/src/core/clipboard/safeClipboardReadText.d.ts +6 -0
  19. package/src/core/clipboard/safeClipboardReadText.d.ts.map +1 -0
  20. package/src/core/clipboard/safeClipboardReadText.js +55 -0
  21. package/src/core/clipboard/safeClipboardWriteText.d.ts +8 -0
  22. package/src/core/clipboard/safeClipboardWriteText.d.ts.map +1 -0
  23. package/src/core/clipboard/safeClipboardWriteText.js +23 -0
  24. package/src/core/collection/array/array_quick_sort_by_lookup_map.js +1 -1
  25. package/src/core/collection/array/array_set_diff_sorting.d.ts.map +1 -1
  26. package/src/core/collection/array/array_set_diff_sorting.js +4 -1
  27. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  28. package/src/core/collection/array/array_shuffle.js +30 -27
  29. package/src/core/collection/array/binarySearchLowIndex.d.ts.map +1 -1
  30. package/src/core/collection/array/binarySearchLowIndex.js +4 -3
  31. package/src/core/collection/array/typed/array_buffer_hash.js +1 -1
  32. package/src/core/collection/array/typed/is_typed_array_equals.d.ts.map +1 -1
  33. package/src/core/collection/array/typed/is_typed_array_equals.js +12 -2
  34. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  35. package/src/core/collection/heap/BinaryHeap.js +12 -2
  36. package/src/core/collection/queue/Deque.d.ts.map +1 -1
  37. package/src/core/collection/queue/Deque.js +10 -8
  38. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  39. package/src/core/collection/table/RowFirstTable.js +4 -2
  40. package/src/core/collection/table/RowFirstTableSpec.js +2 -2
  41. package/src/core/color/operations/color_lerp.d.ts.map +1 -1
  42. package/src/core/color/operations/color_lerp.js +10 -3
  43. package/src/core/color/rgb2uint32.js +1 -1
  44. package/src/core/color/rgbe9995_to_rgb.js +1 -1
  45. package/src/core/function/objectsEqual.d.ts.map +1 -1
  46. package/src/core/function/objectsEqual.js +2 -1
  47. package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
  48. package/src/core/geom/2d/aabb/AABB2.js +12 -11
  49. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.d.ts.map +1 -1
  50. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.js +30 -4
  51. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +1 -1
  52. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +6 -2
  53. package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
  54. package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +388 -386
  55. package/src/core/geom/2d/hash-grid/shg_query_elements_line.d.ts.map +1 -1
  56. package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +8 -3
  57. package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
  58. package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +9 -1
  59. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +3 -1
  60. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +1 -1
  61. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +3 -1
  62. package/src/core/geom/2d/quad-tree-binary/QuadTree.js +714 -714
  63. package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
  64. package/src/core/geom/2d/r-tree/StaticR2Tree.js +5 -4
  65. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +1 -1
  66. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +33 -29
  67. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +1 -1
  68. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +3 -1
  69. package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.d.ts.map +1 -1
  70. package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js +10 -7
  71. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.d.ts.map +1 -1
  72. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +30 -9
  73. package/src/core/geom/3d/aabb/compute_aabb_from_points.js +3 -3
  74. package/src/core/geom/3d/box/box3_raycast.d.ts +37 -0
  75. package/src/core/geom/3d/box/box3_raycast.d.ts.map +1 -0
  76. package/src/core/geom/3d/box/box3_raycast.js +81 -0
  77. package/src/core/geom/3d/capsule/capsule_raycast.d.ts +35 -0
  78. package/src/core/geom/3d/capsule/capsule_raycast.d.ts.map +1 -0
  79. package/src/core/geom/3d/capsule/capsule_raycast.js +93 -0
  80. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +1 -1
  81. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +4 -0
  82. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  83. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
  84. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +3 -2
  85. package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +1 -1
  86. package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +12 -2
  87. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +2 -2
  88. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts +1 -1
  89. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts.map +1 -1
  90. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.js +19 -13
  91. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts.map +1 -1
  92. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.js +3 -2
  93. package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +3 -2
  94. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
  95. package/src/core/geom/3d/shape/MeshShape3D.js +7 -0
  96. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  97. package/src/core/geom/3d/shape/UnionShape3D.js +3 -2
  98. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -1
  99. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +153 -148
  100. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts.map +1 -1
  101. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +7 -0
  102. package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.d.ts.map +1 -1
  103. package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.js +13 -10
  104. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +1 -1
  105. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +2 -2
  106. package/src/core/geom/3d/sphere/sphere_raycast.d.ts +33 -0
  107. package/src/core/geom/3d/sphere/sphere_raycast.d.ts.map +1 -0
  108. package/src/core/geom/3d/sphere/sphere_raycast.js +47 -0
  109. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +24 -0
  110. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +1 -0
  111. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +39 -0
  112. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.d.ts.map +1 -1
  113. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.js +4 -2
  114. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +3 -3
  115. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +1 -1
  116. package/src/core/geom/3d/topology/tm_vertex_compute_normal.d.ts.map +1 -1
  117. package/src/core/geom/3d/topology/tm_vertex_compute_normal.js +4 -2
  118. package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +1 -1
  119. package/src/core/geom/3d/util/make_justified_point_grid.js +18 -10
  120. package/src/core/geom/ConicRay.d.ts.map +1 -1
  121. package/src/core/geom/ConicRay.js +11 -13
  122. package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +1 -1
  123. package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +19 -4
  124. package/src/core/geom/vec3/v3_array_copy.d.ts +3 -3
  125. package/src/core/geom/vec3/v3_array_copy.d.ts.map +1 -1
  126. package/src/core/geom/vec3/v3_array_copy.js +2 -2
  127. package/src/core/geom/vec3/v3_cross.d.ts +17 -0
  128. package/src/core/geom/vec3/v3_cross.d.ts.map +1 -0
  129. package/src/core/geom/vec3/v3_cross.js +20 -0
  130. package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.d.ts.map +1 -0
  131. package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.js +1 -1
  132. package/src/core/geom/vec3/v3_subtract.d.ts +16 -0
  133. package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -0
  134. package/src/core/geom/vec3/v3_subtract.js +19 -0
  135. package/src/core/graph/coloring/colorizeGraph.js +2 -2
  136. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  137. package/src/core/graph/csr/CSRGraph.js +325 -319
  138. package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
  139. package/src/core/graph/layout/CircleLayout.js +8 -6
  140. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -1
  141. package/src/core/graph/metis/native/refine/compute_kway_params.js +139 -138
  142. package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -1
  143. package/src/core/graph/mn_graph_coarsen.js +4 -2
  144. package/src/core/graph/v2/NodeContainer.js +7 -7
  145. package/src/core/localization/LocalizationEngine.js +1 -1
  146. package/src/core/math/bell_membership_function.d.ts.map +1 -1
  147. package/src/core/math/bell_membership_function.js +3 -1
  148. package/src/core/math/complex/complex_add.d.ts +4 -4
  149. package/src/core/math/complex/complex_add.d.ts.map +1 -1
  150. package/src/core/math/complex/complex_add.js +3 -3
  151. package/src/core/math/complex/complex_div.d.ts +4 -4
  152. package/src/core/math/complex/complex_div.d.ts.map +1 -1
  153. package/src/core/math/complex/complex_div.js +3 -3
  154. package/src/core/math/complex/complex_mul.d.ts +4 -4
  155. package/src/core/math/complex/complex_mul.d.ts.map +1 -1
  156. package/src/core/math/complex/complex_mul.js +3 -3
  157. package/src/core/math/complex/complex_sub.d.ts +4 -4
  158. package/src/core/math/complex/complex_sub.d.ts.map +1 -1
  159. package/src/core/math/complex/complex_sub.js +3 -3
  160. package/src/core/math/idct_1d.d.ts +4 -4
  161. package/src/core/math/idct_1d.d.ts.map +1 -1
  162. package/src/core/math/idct_1d.js +3 -3
  163. package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
  164. package/src/core/math/noise/create_simplex_noise_2d.js +4 -2
  165. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  166. package/src/core/math/noise/sdnoise.js +12 -9
  167. package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
  168. package/src/core/math/physics/mie/compute_bhmie_optical_properties.js +94 -50
  169. package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts +3 -6
  170. package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts.map +1 -1
  171. package/src/core/math/physics/mie/lorenz_mie_coefs.js +180 -157
  172. package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts +3 -4
  173. package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts.map +1 -1
  174. package/src/core/math/physics/mie/mie_ab_to_optical_properties.js +47 -21
  175. package/src/core/math/random/randomIntegerBetween.d.ts.map +1 -1
  176. package/src/core/math/random/randomIntegerBetween.js +4 -1
  177. package/src/core/math/solveCubic.d.ts.map +1 -1
  178. package/src/core/math/solveCubic.js +95 -82
  179. package/src/core/math/spline/computeCatmullRomSplineUniformDistance.d.ts.map +1 -1
  180. package/src/core/math/spline/computeCatmullRomSplineUniformDistance.js +13 -0
  181. package/src/core/math/statistics/softmax.js +1 -1
  182. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +1 -0
  183. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  184. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +2 -1
  185. package/src/core/model/node-graph/visual/NodeVisualData.js +1 -1
  186. package/src/core/model/object/ImmutableObjectPool.d.ts +7 -0
  187. package/src/core/model/object/ImmutableObjectPool.d.ts.map +1 -1
  188. package/src/core/model/object/ImmutableObjectPool.js +20 -10
  189. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts.map +1 -1
  190. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +39 -2
  191. package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
  192. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -0
  193. package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
  194. package/src/core/parser/simple/readHexToken.js +6 -0
  195. package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
  196. package/src/core/primitives/numbers/number_pretty_print.js +4 -1
  197. package/src/core/primitives/strings/string_jaro_winkler.js +1 -1
  198. package/src/core/process/CompositeProcess.js +1 -1
  199. package/src/core/process/action/AsynchronousDelayAction.d.ts.map +1 -1
  200. package/src/core/process/action/AsynchronousDelayAction.js +3 -0
  201. package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
  202. package/src/core/process/executor/ConcurrentExecutor.js +3 -2
  203. package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
  204. package/src/core/process/task/util/randomCountTask.js +3 -1
  205. package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
  206. package/src/core/process/undo/ActionProcessor.js +5 -3
  207. package/src/core/process/worker/WorkerBuilder.js +3 -3
  208. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  209. package/src/engine/animation/curve/AnimationCurve.js +4 -2
  210. package/src/engine/control/first-person/DESIGN.md +1 -1
  211. package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts +55 -0
  212. package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts.map +1 -0
  213. package/src/engine/control/first-person/FirstPersonMotionPhase.js +134 -0
  214. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +23 -2
  215. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  216. package/src/engine/control/first-person/FirstPersonPlayerController.js +1 -1
  217. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +168 -0
  218. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  219. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +115 -0
  220. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +71 -0
  221. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  222. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +255 -55
  223. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +82 -43
  224. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  225. package/src/engine/control/first-person/abilities/LedgeGrab.js +405 -213
  226. package/src/engine/control/first-person/abilities/Mantle.d.ts +6 -0
  227. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
  228. package/src/engine/control/first-person/abilities/Mantle.js +104 -45
  229. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts +61 -0
  230. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts.map +1 -0
  231. package/src/engine/control/first-person/abilities/ScrambleUp.js +182 -0
  232. package/src/engine/control/first-person/math/jumpDynamics.d.ts +84 -0
  233. package/src/engine/control/first-person/math/jumpDynamics.d.ts.map +1 -0
  234. package/src/engine/control/first-person/math/jumpDynamics.js +108 -0
  235. package/src/engine/control/first-person/prototype_first_person_controller.js +45 -1
  236. package/src/engine/graphics/camera/testClippingPlaneComputation.js +1 -1
  237. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
  238. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +8 -0
  239. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +1 -1
  240. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
  241. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +1 -1
  242. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
  243. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  244. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +1 -1
  245. package/src/engine/graphics/shadows/testShadowMapRendering.js +1 -1
  246. package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +208 -0
  247. package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +364 -0
  248. package/src/engine/physics/PLAN.md +6 -5
  249. package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
  250. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  251. package/src/engine/physics/constraint/solve_constraints.js +147 -33
  252. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  253. package/src/engine/physics/ecs/PhysicsSystem.js +1750 -1747
  254. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  255. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts +12 -8
  256. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -1
  257. package/src/engine/physics/gjk/gjk_epa_penetration.js +447 -158
  258. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  259. package/src/engine/physics/narrowphase/convex_convex_manifold.js +22 -25
  260. package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -13
  261. package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
  262. package/src/engine/physics/narrowphase/convex_decomposition.js +61 -65
  263. package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -1
  264. package/src/engine/physics/narrowphase/mesh_convex_hull.js +13 -8
  265. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  266. package/src/engine/physics/narrowphase/refine_ray_concave.js +5 -3
  267. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
  268. package/src/engine/physics/narrowphase/refine_ray_hit.js +81 -78
  269. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  270. package/src/engine/sound/SoundEngine.js +28 -0
  271. package/src/engine/sound/dB2Volume.d.ts +1 -1
  272. package/src/engine/sound/dB2Volume.d.ts.map +1 -1
  273. package/src/engine/sound/dB2Volume.js +1 -1
  274. package/src/engine/sound/ecs/SoundController.d.ts +4 -0
  275. package/src/engine/sound/ecs/SoundController.d.ts.map +1 -1
  276. package/src/engine/sound/ecs/SoundController.js +4 -0
  277. package/src/engine/sound/ecs/SoundControllerSystem.d.ts +5 -0
  278. package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
  279. package/src/engine/sound/ecs/SoundControllerSystem.js +5 -0
  280. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +69 -0
  281. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -0
  282. package/src/engine/sound/ecs/audio/AudioEmitter.js +83 -0
  283. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +97 -0
  284. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -0
  285. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +238 -0
  286. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +90 -0
  287. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -0
  288. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +324 -0
  289. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +59 -0
  290. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -0
  291. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +140 -0
  292. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts +16 -65
  293. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +1 -1
  294. package/src/engine/sound/ecs/emitter/SoundEmitter.js +19 -224
  295. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +26 -29
  296. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +1 -1
  297. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +168 -135
  298. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +36 -59
  299. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +1 -1
  300. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +154 -390
  301. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts +20 -23
  302. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +1 -1
  303. package/src/engine/sound/ecs/emitter/SoundTrack.js +34 -152
  304. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +993 -0
  305. package/src/engine/sound/sopra/README.md +643 -7
  306. package/src/engine/sound/sopra/SopraEngine.d.ts +229 -0
  307. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -0
  308. package/src/engine/sound/sopra/SopraEngine.js +423 -0
  309. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts +26 -0
  310. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts.map +1 -0
  311. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.js +71 -0
  312. package/src/engine/sound/sopra/asset/BufferProvider.d.ts +24 -0
  313. package/src/engine/sound/sopra/asset/BufferProvider.d.ts.map +1 -0
  314. package/src/engine/sound/sopra/asset/BufferProvider.js +29 -0
  315. package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts +31 -0
  316. package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts.map +1 -0
  317. package/src/engine/sound/sopra/asset/StubBufferProvider.js +58 -0
  318. package/src/engine/sound/sopra/definition/BusDefinition.d.ts +83 -0
  319. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -0
  320. package/src/engine/sound/sopra/definition/BusDefinition.js +142 -0
  321. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts +17 -0
  322. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts.map +1 -0
  323. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.js +54 -0
  324. package/src/engine/sound/sopra/definition/DuckingRule.d.ts +71 -0
  325. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -0
  326. package/src/engine/sound/sopra/definition/DuckingRule.js +106 -0
  327. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts +18 -0
  328. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts.map +1 -0
  329. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.js +31 -0
  330. package/src/engine/sound/sopra/definition/EventDescription.d.ts +132 -0
  331. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -0
  332. package/src/engine/sound/sopra/definition/EventDescription.js +259 -0
  333. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +17 -0
  334. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -0
  335. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +71 -0
  336. package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts +51 -0
  337. package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts.map +1 -0
  338. package/src/engine/sound/sopra/definition/MixerSnapshot.js +83 -0
  339. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts +18 -0
  340. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts.map +1 -0
  341. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.js +39 -0
  342. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts +72 -0
  343. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -0
  344. package/src/engine/sound/sopra/definition/ParameterDefinition.js +117 -0
  345. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts +18 -0
  346. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts.map +1 -0
  347. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.js +31 -0
  348. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts +14 -0
  349. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts.map +1 -0
  350. package/src/engine/sound/sopra/definition/SopraPanningModel.js +20 -0
  351. package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts +10 -0
  352. package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts.map +1 -0
  353. package/src/engine/sound/sopra/definition/VoiceStealMode.js +18 -0
  354. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts +93 -0
  355. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts.map +1 -0
  356. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +109 -0
  357. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts +80 -0
  358. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -0
  359. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +181 -0
  360. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts +17 -0
  361. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  362. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +74 -0
  363. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts +34 -0
  364. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -0
  365. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +100 -0
  366. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +101 -0
  367. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -0
  368. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +230 -0
  369. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts +17 -0
  370. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  371. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.js +54 -0
  372. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts +103 -0
  373. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -0
  374. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +191 -0
  375. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts +18 -0
  376. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts.map +1 -0
  377. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.js +39 -0
  378. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts +40 -0
  379. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts.map +1 -0
  380. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +91 -0
  381. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts +17 -0
  382. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  383. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.js +42 -0
  384. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts +44 -0
  385. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts.map +1 -0
  386. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +77 -0
  387. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts +18 -0
  388. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts.map +1 -0
  389. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.js +27 -0
  390. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +65 -0
  391. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -0
  392. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +131 -0
  393. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts +17 -0
  394. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  395. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.js +41 -0
  396. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +24 -0
  397. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -0
  398. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +24 -0
  399. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +70 -0
  400. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -0
  401. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +120 -0
  402. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts +18 -0
  403. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts.map +1 -0
  404. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.js +31 -0
  405. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +74 -0
  406. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -0
  407. package/src/engine/sound/sopra/definition/effect/EqEffect.js +128 -0
  408. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts +18 -0
  409. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts.map +1 -0
  410. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js +29 -0
  411. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +49 -0
  412. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -0
  413. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +101 -0
  414. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts +18 -0
  415. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts.map +1 -0
  416. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js +25 -0
  417. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +31 -0
  418. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -0
  419. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +106 -0
  420. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +79 -0
  421. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -0
  422. package/src/engine/sound/sopra/runtime/BusGraph.js +227 -0
  423. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +144 -0
  424. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -0
  425. package/src/engine/sound/sopra/runtime/EventInstance.js +579 -0
  426. package/src/engine/sound/sopra/runtime/ParameterStore.d.ts +42 -0
  427. package/src/engine/sound/sopra/runtime/ParameterStore.d.ts.map +1 -0
  428. package/src/engine/sound/sopra/runtime/ParameterStore.js +98 -0
  429. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts +42 -0
  430. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts.map +1 -0
  431. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.js +68 -0
  432. package/src/engine/sound/sopra/runtime/Voice.d.ts +67 -0
  433. package/src/engine/sound/sopra/runtime/Voice.d.ts.map +1 -0
  434. package/src/engine/sound/sopra/runtime/Voice.js +145 -0
  435. package/src/engine/sound/sopra/runtime/VoiceManager.d.ts +38 -0
  436. package/src/engine/sound/sopra/runtime/VoiceManager.d.ts.map +1 -0
  437. package/src/engine/sound/sopra/runtime/VoiceManager.js +136 -0
  438. package/src/engine/sound/sopra/runtime/VoicePool.d.ts +12 -0
  439. package/src/engine/sound/sopra/runtime/VoicePool.d.ts.map +1 -0
  440. package/src/engine/sound/sopra/runtime/VoicePool.js +17 -0
  441. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +11 -0
  442. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -0
  443. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +42 -0
  444. package/src/engine/sound/sopra/serialization/sopraJSON.d.ts +33 -0
  445. package/src/engine/sound/sopra/serialization/sopraJSON.d.ts.map +1 -0
  446. package/src/engine/sound/sopra/serialization/sopraJSON.js +99 -0
  447. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +27 -0
  448. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -0
  449. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +49 -0
  450. package/src/engine/sound/sopra/util/MockAudioContext.d.ts +74 -0
  451. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -0
  452. package/src/engine/sound/sopra/util/MockAudioContext.js +215 -0
  453. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +15 -0
  454. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -0
  455. package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -0
  456. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +34 -0
  457. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -0
  458. package/src/engine/sound/sopra/util/fadeOutAndStop.js +60 -0
  459. package/src/engine/sound/volume2dB.d.ts +1 -1
  460. package/src/engine/sound/volume2dB.d.ts.map +1 -1
  461. package/src/engine/sound/volume2dB.js +1 -1
  462. package/src/engine/graphics/sh3/path_tracer/sampling/v3_orthonormal_matrix_from_normal.d.ts.map +0 -1
  463. package/src/engine/physics/narrowphase/ray_shapes.d.ts +0 -66
  464. package/src/engine/physics/narrowphase/ray_shapes.d.ts.map +0 -1
  465. package/src/engine/physics/narrowphase/ray_shapes.js +0 -187
  466. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts +0 -23
  467. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts.map +0 -1
  468. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.js +0 -32
  469. package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts +0 -18
  470. package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts.map +0 -1
  471. package/src/engine/sound/ecs/emitter/SoundTrackNodes.js +0 -18
  472. package/src/engine/sound/sopra/AbstractAudioClip.d.ts +0 -26
  473. package/src/engine/sound/sopra/AbstractAudioClip.d.ts.map +0 -1
  474. package/src/engine/sound/sopra/AbstractAudioClip.js +0 -29
  475. package/src/engine/sound/sopra/ContainerAudioClip.d.ts +0 -12
  476. package/src/engine/sound/sopra/ContainerAudioClip.d.ts.map +0 -1
  477. package/src/engine/sound/sopra/ContainerAudioClip.js +0 -13
  478. package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts +0 -12
  479. package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts.map +0 -1
  480. package/src/engine/sound/sopra/RandomContainerAudioClip.js +0 -15
  481. package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts +0 -7
  482. package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts.map +0 -1
  483. package/src/engine/sound/sopra/SequenceContainerAudioClip.js +0 -8
  484. package/src/engine/sound/sopra/SilenceAudioClip.d.ts +0 -13
  485. package/src/engine/sound/sopra/SilenceAudioClip.d.ts.map +0 -1
  486. package/src/engine/sound/sopra/SilenceAudioClip.js +0 -15
  487. /package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.d.ts +0 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Spatial broadphase for 3D audio emitters (P5.1, cull-only).
3
+ *
4
+ * Holds a dynamic BVH whose leaves are each emitter's AUDIBLE region — an axis-aligned box of
5
+ * half-extent `event.distanceMax` centred on the emitter. So "which emitters can possibly be heard
6
+ * from point P" is one O(log n + k) BVH point-query instead of an O(n) scan over every emitter. This
7
+ * is the registered/dormant tier: a registered emitter is a record plus one BVH leaf — no
8
+ * `EventInstance`, no WebAudio nodes, no per-frame work. Promoting in-range emitters to live instances
9
+ * (voice slots, stealing, fades) is layered on top later; this class only answers the cull.
10
+ *
11
+ * Leaf bounds track the emitter REACTIVELY: each leaf subscribes to its position's `onChanged`, so a
12
+ * still emitter costs nothing per frame and a moving one refits only when it actually moves. (meep is
13
+ * fully dynamic — there is no static/dynamic distinction and no per-tick refit loop.)
14
+ *
15
+ * The cull is conservative: the leaf is a cube of half-extent `distanceMax`, so its corners admit a
16
+ * few emitters whose true (spherical) distance slightly exceeds `distanceMax`. That is correct
17
+ * broadphase behaviour — the exact distance test belongs to the narrowphase (the live instance).
18
+ */
19
+ export class SpatialAudioIndex {
20
+ /**
21
+ * @returns {number} number of registered emitters
22
+ */
23
+ get size(): number;
24
+ /**
25
+ * @param {number} entity
26
+ * @returns {boolean}
27
+ */
28
+ has(entity: number): boolean;
29
+ /**
30
+ * Register an emitter: insert a BVH leaf sized to its audible region and start tracking its
31
+ * position. The entity id is the leaf's user data (so queries return entity ids).
32
+ *
33
+ * @param {number} entity non-negative integer id
34
+ * @param {EventDescription} event read for `distanceMax` (and retained for later promotion)
35
+ * @param {Vector3} position shared position vector — its `onChanged` drives leaf refits
36
+ */
37
+ add(entity: number, event: EventDescription, position: Vector3): void;
38
+ /**
39
+ * Unregister an emitter: stop tracking its position and drop its BVH leaf. No-op for an unknown
40
+ * entity.
41
+ * @param {number} entity
42
+ */
43
+ remove(entity: number): void;
44
+ /**
45
+ * Write the entity ids whose audible region contains `listenerPosition` into `out` (starting at
46
+ * `out_offset`) and return how many — every emitter that can possibly be heard from there (a
47
+ * conservative superset; see the class note), in unspecified order. Allocation-free: `out` is a
48
+ * caller-owned reusable buffer, grown as needed (never shrunk), so only `out[out_offset .. out_offset
49
+ * + count)` is meaningful — entries elsewhere may be stale from a prior query and must be ignored.
50
+ *
51
+ * @param {number[]} out caller-owned result buffer, reused across calls (grows, never shrinks)
52
+ * @param {number} out_offset index in `out` to start writing at
53
+ * @param {Vector3} listenerPosition
54
+ * @returns {number} number of matches written to `out`
55
+ */
56
+ queryAudible(out: number[], out_offset: number, listenerPosition: Vector3): number;
57
+ #private;
58
+ }
59
+ //# sourceMappingURL=SpatialAudioIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpatialAudioIndex.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/audio/SpatialAudioIndex.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH;IAyBI;;OAEG;IACH,mBAEC;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,YAJW,MAAM,oDAoBhB;IAED;;;;OAIG;IACH,eAFW,MAAM,QAahB;IAcD;;;;;;;;;;;OAWG;IACH,kBALW,MAAM,EAAE,cACR,MAAM,8BAEJ,MAAM,CASlB;;CACJ"}
@@ -0,0 +1,140 @@
1
+ import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
2
+ import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
3
+ import { BVHQueryIntersectsSphere } from "../../../../core/bvh2/bvh3/query/BVHQueryIntersectsSphere.js";
4
+ import { bvh_query_user_data_generic } from "../../../../core/bvh2/bvh3/query/bvh_query_user_data_generic.js";
5
+
6
+ /**
7
+ * Spatial broadphase for 3D audio emitters (P5.1, cull-only).
8
+ *
9
+ * Holds a dynamic BVH whose leaves are each emitter's AUDIBLE region — an axis-aligned box of
10
+ * half-extent `event.distanceMax` centred on the emitter. So "which emitters can possibly be heard
11
+ * from point P" is one O(log n + k) BVH point-query instead of an O(n) scan over every emitter. This
12
+ * is the registered/dormant tier: a registered emitter is a record plus one BVH leaf — no
13
+ * `EventInstance`, no WebAudio nodes, no per-frame work. Promoting in-range emitters to live instances
14
+ * (voice slots, stealing, fades) is layered on top later; this class only answers the cull.
15
+ *
16
+ * Leaf bounds track the emitter REACTIVELY: each leaf subscribes to its position's `onChanged`, so a
17
+ * still emitter costs nothing per frame and a moving one refits only when it actually moves. (meep is
18
+ * fully dynamic — there is no static/dynamic distinction and no per-tick refit loop.)
19
+ *
20
+ * The cull is conservative: the leaf is a cube of half-extent `distanceMax`, so its corners admit a
21
+ * few emitters whose true (spherical) distance slightly exceeds `distanceMax`. That is correct
22
+ * broadphase behaviour — the exact distance test belongs to the narrowphase (the live instance).
23
+ */
24
+ export class SpatialAudioIndex {
25
+
26
+ /**
27
+ * @type {BVH}
28
+ */
29
+ #bvh = new BVH();
30
+
31
+ /**
32
+ * entity id -> { entity, event, position, bvhClient, onMove }
33
+ * @type {Map<number, {entity:number, event:EventDescription, position:Vector3, bvhClient:BvhClient, onMove:function}>}
34
+ */
35
+ #records = new Map();
36
+
37
+ /**
38
+ * Reused point-query. The sphere `[x, y, z, radius]` is mutated in place each query; radius stays 0,
39
+ * so the test is "listener point inside the leaf AABB".
40
+ * @type {number[]}
41
+ */
42
+ #querySphere = [0, 0, 0, 0];
43
+
44
+ /**
45
+ * @type {BVHQueryIntersectsSphere}
46
+ */
47
+ #query = BVHQueryIntersectsSphere.from(this.#querySphere);
48
+
49
+ /**
50
+ * @returns {number} number of registered emitters
51
+ */
52
+ get size() {
53
+ return this.#records.size;
54
+ }
55
+
56
+ /**
57
+ * @param {number} entity
58
+ * @returns {boolean}
59
+ */
60
+ has(entity) {
61
+ return this.#records.has(entity);
62
+ }
63
+
64
+ /**
65
+ * Register an emitter: insert a BVH leaf sized to its audible region and start tracking its
66
+ * position. The entity id is the leaf's user data (so queries return entity ids).
67
+ *
68
+ * @param {number} entity non-negative integer id
69
+ * @param {EventDescription} event read for `distanceMax` (and retained for later promotion)
70
+ * @param {Vector3} position shared position vector — its `onChanged` drives leaf refits
71
+ */
72
+ add(entity, event, position) {
73
+ if (this.#records.has(entity)) {
74
+ throw new Error(`SpatialAudioIndex: entity ${entity} already registered`);
75
+ }
76
+
77
+ const bvhClient = new BvhClient();
78
+
79
+ const record = { entity, event, position, bvhClient, onMove: null };
80
+
81
+ this.#writeBounds(record); // size the leaf AABB before linking (resize no-ops the write pre-link)
82
+ bvhClient.link(this.#bvh, entity); // user_data = entity id
83
+
84
+ record.onMove = () => this.#writeBounds(record);
85
+ position.onChanged.add(record.onMove);
86
+
87
+ this.#records.set(entity, record);
88
+ }
89
+
90
+ /**
91
+ * Unregister an emitter: stop tracking its position and drop its BVH leaf. No-op for an unknown
92
+ * entity.
93
+ * @param {number} entity
94
+ */
95
+ remove(entity) {
96
+ const record = this.#records.get(entity);
97
+
98
+ if (record === undefined) {
99
+ return;
100
+ }
101
+
102
+ record.position.onChanged.remove(record.onMove);
103
+ record.bvhClient.unlink();
104
+
105
+ this.#records.delete(entity);
106
+ }
107
+
108
+ /**
109
+ * Refit a record's leaf to `position ± distanceMax`. Called once at registration and again
110
+ * (reactively) whenever the position changes.
111
+ * @param {{event:EventDescription, position:Vector3, bvhClient:BvhClient}} record
112
+ */
113
+ #writeBounds(record) {
114
+ const p = record.position;
115
+ const d = record.event.distanceMax;
116
+
117
+ record.bvhClient.resize(p.x - d, p.y - d, p.z - d, p.x + d, p.y + d, p.z + d);
118
+ }
119
+
120
+ /**
121
+ * Write the entity ids whose audible region contains `listenerPosition` into `out` (starting at
122
+ * `out_offset`) and return how many — every emitter that can possibly be heard from there (a
123
+ * conservative superset; see the class note), in unspecified order. Allocation-free: `out` is a
124
+ * caller-owned reusable buffer, grown as needed (never shrunk), so only `out[out_offset .. out_offset
125
+ * + count)` is meaningful — entries elsewhere may be stale from a prior query and must be ignored.
126
+ *
127
+ * @param {number[]} out caller-owned result buffer, reused across calls (grows, never shrinks)
128
+ * @param {number} out_offset index in `out` to start writing at
129
+ * @param {Vector3} listenerPosition
130
+ * @returns {number} number of matches written to `out`
131
+ */
132
+ queryAudible(out, out_offset, listenerPosition) {
133
+ this.#querySphere[0] = listenerPosition.x;
134
+ this.#querySphere[1] = listenerPosition.y;
135
+ this.#querySphere[2] = listenerPosition.z;
136
+ // radius stays 0 -> point-in-AABB
137
+
138
+ return bvh_query_user_data_generic(out, out_offset, this.#bvh, this.#bvh.root, this.#query);
139
+ }
140
+ }
@@ -1,4 +1,7 @@
1
1
  /**
2
+ * @deprecated Legacy sound component — superseded by the native {@link AudioEmitter}, which owns a
3
+ * sopra `EventDescription` directly. Retained as a deprecate-and-plumb compat reader (it still routes
4
+ * through sopra via {@link SoundEmitterSystem}); prefer `AudioEmitter` for new content.
2
5
  * @class
3
6
  */
4
7
  export class SoundEmitter {
@@ -30,12 +33,6 @@ export class SoundEmitter {
30
33
  * @private
31
34
  */
32
35
  private __distanceMax;
33
- /**
34
- * @deprecated
35
- * @type {number}
36
- * @private
37
- */
38
- private __distanceRolloff;
39
36
  /**
40
37
  * TODO add to binary serialization
41
38
  * @type {SoundPanningModelType}
@@ -51,38 +48,22 @@ export class SoundEmitter {
51
48
  * @type {number|SoundEmitterFlags}
52
49
  */
53
50
  flags: number | SoundEmitterFlags;
54
- /**
55
- * @readonly
56
- */
57
- readonly nodes: {
58
- /**
59
- * @type {GainNode}
60
- */
61
- volume: GainNode;
62
- /**
63
- * @type {PannerNode}
64
- */
65
- panner: PannerNode;
66
- /**
67
- * @type {GainNode}
68
- */
69
- attenuation: GainNode;
70
- /**
71
- * One of the other nodes, depending on the configuration
72
- * @type {AudioNode}
73
- */
74
- endpoint: AudioNode;
75
- };
76
51
  /**
77
52
  *
78
53
  * @type {Vector1}
79
54
  */
80
55
  volume: Vector1;
81
56
  /**
82
- * @readonly
83
- * @type {BvhClient}
57
+ * Back-reference to the per-entity sopra translation record (set on link by
58
+ * {@link SoundEmitterComponentContext}). Used by the deprecated fade/stop helpers to reach the
59
+ * live sopra instances.
60
+ * @type {SoundEmitterComponentContext|null}
61
+ */
62
+ __soundRuntime: SoundEmitterComponentContext | null;
63
+ /**
64
+ * @deprecated sopra owns the audio graph — the emitter no longer holds WebAudio nodes.
84
65
  */
85
- readonly bvh: BvhClient;
66
+ get nodes(): void;
86
67
  /**
87
68
  *
88
69
  * @param {SoundEmitter} other
@@ -123,10 +104,6 @@ export class SoundEmitter {
123
104
  * @return {boolean}
124
105
  */
125
106
  get isPositioned(): boolean;
126
- /**
127
- * @return {AudioNode}
128
- */
129
- getTargetNode(): AudioNode;
130
107
  /**
131
108
  * @returns {boolean}
132
109
  * @param {SoundEmitter} other
@@ -137,16 +114,6 @@ export class SoundEmitter {
137
114
  * @return {number}
138
115
  */
139
116
  hash(): number;
140
- /**
141
- *
142
- * @param {AudioContext} ctx
143
- */
144
- buildNodes(ctx: AudioContext): void;
145
- /**
146
- * @private
147
- * @param {number} distance
148
- */
149
- private writeAttenuationVolume;
150
117
  /**
151
118
  * @param {number} v
152
119
  */
@@ -166,28 +133,13 @@ export class SoundEmitter {
166
133
  */
167
134
  get distanceMax(): number;
168
135
  /**
169
- * @deprecated
170
- * @param {number} v
171
- */
172
- set distanceRolloff(arg: number);
173
- /**
174
- * @deprecated
175
- * @returns {number}
176
- */
177
- get distanceRolloff(): number;
178
- /**
179
- *
180
- * @param {number} x
181
- * @param {number} y
182
- * @param {number} z
136
+ * @deprecated plumbs into sopra — fades every playing track out and stops it.
137
+ * @param {number} [duration] fade duration in seconds
183
138
  */
184
- updatePosition(x: number, y: number, z: number): void;
139
+ fadeOutAllTracks(duration?: number): void;
185
140
  /**
186
- *
187
- * @param {number} [duration] fade duration in seconds
188
- * @param startAfter
141
+ * @deprecated plumbs into sopra — stops every playing track on this emitter.
189
142
  */
190
- fadeOutAllTracks(duration?: number, startAfter?: number): void;
191
143
  stopAllTracks(): void;
192
144
  toJSON(): {
193
145
  isPositioned: boolean;
@@ -211,5 +163,4 @@ import { SoundPanningModelType } from "./SoundPanningModelType.js";
211
163
  import { SoundAttenuationFunction } from "./SoundAttenuationFunction.js";
212
164
  import { SoundEmitterFlags } from "./SoundEmitterFlags.js";
213
165
  import Vector1 from "../../../../core/geom/Vector1.js";
214
- import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
215
166
  //# sourceMappingURL=SoundEmitter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SoundEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitter.js"],"names":[],"mappings":"AA2BA;;GAEG;AACH;IA4hBI;;;;OAIG;IACH,4BAFa,YAAY,CAQxB;IApiBD;;;OAGG;IACH,iBAFU,KAAK,UAAU,CAAC,CAEN;IAEpB;;;OAGG;IACH,SAFU,gCAA4B,IAAI,CAEhB;IAE1B;;;;OAIG;IACH,sBAAkB;IAElB;;;;OAIG;IACH,sBAAsB;IAEtB;;;;OAIG;IACH,0BAAsB;IAEtB;;;OAGG;IACH,cAFU,qBAAqB,CAEW;IAE1C;;;OAGG;IACH,aAFU,wBAAwB,GAAC,MAAM,CAEI;IAE7C;;;OAGG;IACH,OAFU,MAAM,GAAC,iBAAiB,CAExB;IAEV;;OAEG;IACH;QACI;;WAEG;gBADO,QAAQ;QAGlB;;WAEG;gBADO,UAAU;QAGpB;;WAEG;qBADO,QAAQ;QAGlB;;;WAGG;kBADO,SAAS;MAGrB;IAEF;;;OAGG;IACH,QAFU,OAAO,CAEO;IAExB;;;OAGG;IACH,cAFU,SAAS,CAEG;IAkBtB;;;;OAIG;IACH,eAHW,YAAY,OAqDtB;IAGD;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,SACxB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,OAAO,CAInB;IAGD;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,4BAEC;IAED;;OAEG;IACH,iBAFY,SAAS,CAIpB;IAED;;;OAGG;IACH,cAFW,YAAY,GADV,OAAO,CAWnB;IAED;;;OAGG;IACH,QAFY,MAAM,CAWjB;IAED;;;OAGG;IACH,gBAFW,YAAY,QAqDtB;IAED;;;OAGG;IACH,+BA6BC;IAUD;;OAEG;IACH,6BAEC;IAbD;;;OAGG;IACH,0BAEC;IAiBD;;OAEG;IACH,6BAEC;IAbD;;;OAGG;IACH,0BAEC;IAkBD;;;OAGG;IACH,iCAQC;IApBD;;;OAGG;IACH,8BAEC;IAgBD;;;;;OAKG;IACH,kBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAyBhB;IAED;;;;OAIG;IACH,4BAHW,MAAM,6BAahB;IAED,sBASC;IAED;;;;;;;;;;MAYC;IAED,0BA+DC;CAeJ;;;;iBApkBgB,0CAA0C;2BAkBhC,iBAAiB;sCADN,4BAA4B;yCAFzB,+BAA+B;kCACtC,wBAAwB;oBAdtC,kCAAkC;0BAJ5B,yCAAyC"}
1
+ {"version":3,"file":"SoundEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitter.js"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH;IAqVI;;;;OAIG;IACH,4BAFa,YAAY,CAQxB;IA7VD;;;OAGG;IACH,iBAFU,KAAK,UAAU,CAAC,CAEN;IAEpB;;;OAGG;IACH,SAFU,gCAA4B,IAAI,CAEhB;IAE1B;;;;OAIG;IACH,sBAAkB;IAElB;;;;OAIG;IACH,sBAAsB;IAEtB;;;OAGG;IACH,cAFU,qBAAqB,CAEW;IAE1C;;;OAGG;IACH,aAFU,wBAAwB,GAAC,MAAM,CAEI;IAE7C;;;OAGG;IACH,OAFU,MAAM,GAAC,iBAAiB,CAExB;IAEV;;;OAGG;IACH,QAFU,OAAO,CAEO;IAExB;;;;;OAKG;IACH,gBAFU,+BAA6B,IAAI,CAErB;IAEtB;;OAEG;IACH,kBAEC;IAED;;;;OAIG;IACH,eAHW,YAAY,OAqDtB;IAGD;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,GACtB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,iBAAiB,SACxB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,iBAAiB,GACtB,OAAO,CAInB;IAGD;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,4BAEC;IAED;;;OAGG;IACH,cAFW,YAAY,GADV,OAAO,CAWnB;IAED;;;OAGG;IACH,QAFY,MAAM,CAWjB;IAUD;;OAEG;IACH,6BAEC;IAbD;;;OAGG;IACH,0BAEC;IAiBD;;OAEG;IACH,6BAEC;IAbD;;;OAGG;IACH,0BAEC;IASD;;;OAGG;IACH,4BAFW,MAAM,QAMhB;IAED;;OAEG;IACH,sBAIC;IAED;;;;;;;;;;MAYC;IAED,0BA+DC;CAeJ;;;;iBAxXgB,0CAA0C;2BAUhC,iBAAiB;sCADN,4BAA4B;yCAFzB,+BAA+B;kCACtC,wBAAwB;oBAPtC,kCAAkC"}
@@ -1,15 +1,6 @@
1
- import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
2
1
  import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
3
2
  import List from '../../../../core/collection/list/List.js';
4
- import { aabb3_array_compute_from_sphere } from "../../../../core/geom/3d/aabb/aabb3_array_compute_from_sphere.js";
5
3
  import Vector1 from "../../../../core/geom/Vector1.js";
6
- import {
7
- interpolate_irradiance_linear
8
- } from "../../../../core/math/physics/irradiance/interpolate_irradiance_linear.js";
9
- import {
10
- interpolate_irradiance_lograrithmic
11
- } from "../../../../core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js";
12
- import { interpolate_irradiance_smith } from "../../../../core/math/physics/irradiance/interpolate_irradiance_smith.js";
13
4
  import { objectKeyByValue } from "../../../../core/model/object/objectKeyByValue.js";
14
5
  import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
15
6
  import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
@@ -26,6 +17,9 @@ const DEFAULT_DISTANCE_MAX = 10000;
26
17
  const DEFAULT_CHANNEL = null;
27
18
 
28
19
  /**
20
+ * @deprecated Legacy sound component — superseded by the native {@link AudioEmitter}, which owns a
21
+ * sopra `EventDescription` directly. Retained as a deprecate-and-plumb compat reader (it still routes
22
+ * through sopra via {@link SoundEmitterSystem}); prefer `AudioEmitter` for new content.
29
23
  * @class
30
24
  */
31
25
  export class SoundEmitter {
@@ -57,13 +51,6 @@ export class SoundEmitter {
57
51
  */
58
52
  __distanceMax = 10000;
59
53
 
60
- /**
61
- * @deprecated
62
- * @type {number}
63
- * @private
64
- */
65
- __distanceRolloff = 1;
66
-
67
54
  /**
68
55
  * TODO add to binary serialization
69
56
  * @type {SoundPanningModelType}
@@ -82,29 +69,6 @@ export class SoundEmitter {
82
69
  */
83
70
  flags = 0;
84
71
 
85
- /**
86
- * @readonly
87
- */
88
- nodes = {
89
- /**
90
- * @type {GainNode}
91
- */
92
- volume: null,
93
- /**
94
- * @type {PannerNode}
95
- */
96
- panner: null,
97
- /**
98
- * @type {GainNode}
99
- */
100
- attenuation: null,
101
- /**
102
- * One of the other nodes, depending on the configuration
103
- * @type {AudioNode}
104
- */
105
- endpoint: null
106
- };
107
-
108
72
  /**
109
73
  *
110
74
  * @type {Vector1}
@@ -112,25 +76,18 @@ export class SoundEmitter {
112
76
  volume = new Vector1(1);
113
77
 
114
78
  /**
115
- * @readonly
116
- * @type {BvhClient}
79
+ * Back-reference to the per-entity sopra translation record (set on link by
80
+ * {@link SoundEmitterComponentContext}). Used by the deprecated fade/stop helpers to reach the
81
+ * live sopra instances.
82
+ * @type {SoundEmitterComponentContext|null}
117
83
  */
118
- bvh = new BvhClient();
84
+ __soundRuntime = null;
119
85
 
120
86
  /**
121
- *
122
- * @constructor
87
+ * @deprecated sopra owns the audio graph — the emitter no longer holds WebAudio nodes.
123
88
  */
124
- constructor() {
125
-
126
- this.volume.onChanged.add((value) => {
127
- const volume_node = this.nodes.volume;
128
-
129
- if (volume_node !== null) {
130
- volume_node.gain.setValueAtTime(value, 0);
131
- }
132
- });
133
-
89
+ get nodes() {
90
+ throw new Error("SoundEmitter.nodes is deprecated — sopra owns the audio graph");
134
91
  }
135
92
 
136
93
  /**
@@ -248,13 +205,6 @@ export class SoundEmitter {
248
205
  return this.getFlag(SoundEmitterFlags.Spatialization);
249
206
  }
250
207
 
251
- /**
252
- * @return {AudioNode}
253
- */
254
- getTargetNode() {
255
- return this.nodes.endpoint;
256
- }
257
-
258
208
  /**
259
209
  * @returns {boolean}
260
210
  * @param {SoundEmitter} other
@@ -284,98 +234,6 @@ export class SoundEmitter {
284
234
  );
285
235
  }
286
236
 
287
- /**
288
- *
289
- * @param {AudioContext} ctx
290
- */
291
- buildNodes(ctx) {
292
- const nodes = this.nodes;
293
-
294
- nodes.volume = ctx.createGain();
295
-
296
- if (this.getFlag(SoundEmitterFlags.Attenuation)) {
297
- nodes.attenuation = ctx.createGain();
298
- }
299
-
300
- if (this.getFlag(SoundEmitterFlags.Spatialization)) {
301
- nodes.panner = ctx.createPanner();
302
-
303
-
304
- //
305
- if (this.panningModel === SoundPanningModelType.HRTF) {
306
- nodes.panner.panningModel = 'HRTF';
307
- } else if (this.panningModel === SoundPanningModelType.EqualPower) {
308
- nodes.panner.panningModel = 'equalpower';
309
- } else {
310
- console.error('Invalid value of panning model type:', this.panningModel);
311
-
312
- nodes.panner.panningModel = 'equalpower';
313
- }
314
-
315
- // we set up distance model in the most efficient way, since we are ignoring it anyway and use custom distance model via a GainNode instead
316
- nodes.panner.distanceModel = 'linear';
317
- nodes.panner.rolloffFactor = 0;
318
- nodes.panner.refDistance = this.distanceMin;
319
- nodes.panner.maxDistance = this.distanceMax;
320
-
321
- }
322
-
323
- //do wiring
324
- if (this.getFlag(SoundEmitterFlags.Attenuation | SoundEmitterFlags.Spatialization)) {
325
- nodes.attenuation.connect(nodes.panner);
326
- nodes.volume.connect(nodes.attenuation);
327
-
328
- nodes.endpoint = nodes.panner;
329
- } else if (this.getFlag(SoundEmitterFlags.Spatialization)) {
330
- nodes.volume.connect(nodes.panner);
331
-
332
- nodes.endpoint = nodes.panner;
333
- } else if (this.getFlag(SoundEmitterFlags.Attenuation)) {
334
- nodes.volume.connect(nodes.attenuation);
335
-
336
- nodes.endpoint = nodes.attenuation;
337
- } else {
338
- nodes.endpoint = nodes.volume;
339
- }
340
-
341
- nodes.volume.gain.setValueAtTime(this.volume.getValue(), 0);
342
- }
343
-
344
- /**
345
- * @private
346
- * @param {number} distance
347
- */
348
- writeAttenuationVolume(distance) {
349
-
350
- let volume;
351
-
352
- const attenuation = this.attenuation;
353
-
354
- const distance_min = this.__distanceMin;
355
- const distance_max = this.__distanceMax;
356
-
357
- if (attenuation === SoundAttenuationFunction.Linear) {
358
- volume = interpolate_irradiance_linear(distance, distance_min, distance_max);
359
- } else if (attenuation === SoundAttenuationFunction.Logarithmic) {
360
- volume = interpolate_irradiance_lograrithmic(distance, distance_min, distance_max);
361
- } else if (attenuation === SoundAttenuationFunction.Smith) {
362
- volume = interpolate_irradiance_smith(distance, distance_min, distance_max);
363
- } else {
364
- //unsupported function, don't attenuate
365
- volume = 1;
366
- }
367
-
368
- /**
369
- *
370
- * @type {GainNode}
371
- */
372
- const pv = this.nodes.attenuation;
373
-
374
- if (pv !== null) {
375
- pv.gain.setValueAtTime(volume, 0);
376
- }
377
- }
378
-
379
237
  /**
380
238
  *
381
239
  * @returns {number}
@@ -406,85 +264,22 @@ export class SoundEmitter {
406
264
  this.__distanceMax = v;
407
265
  }
408
266
 
409
-
410
267
  /**
411
- * @deprecated
412
- * @returns {number}
413
- */
414
- get distanceRolloff() {
415
- return this.__distanceRolloff;
416
- }
417
-
418
- /**
419
- * @deprecated
420
- * @param {number} v
421
- */
422
- set distanceRolloff(v) {
423
- this.__distanceRolloff = v;
424
-
425
- const panner = this.nodes.panner;
426
-
427
- if (panner !== null) {
428
- panner.rolloffFactor = v;
429
- }
430
- }
431
-
432
- /**
433
- *
434
- * @param {number} x
435
- * @param {number} y
436
- * @param {number} z
268
+ * @deprecated plumbs into sopra — fades every playing track out and stops it.
269
+ * @param {number} [duration] fade duration in seconds
437
270
  */
438
- updatePosition(x, y, z) {
439
- if (this.getFlag(SoundEmitterFlags.Spatialization)) {
440
- //update position of the panner node
441
- const nodes = this.nodes;
442
-
443
- /**
444
- *
445
- * @type {PannerNode}
446
- */
447
- const panner = nodes.panner;
448
-
449
- if (panner !== null) {
450
- panner.setPosition(x, y, z);
451
- }
271
+ fadeOutAllTracks(duration = 1) {
272
+ if (this.__soundRuntime !== null) {
273
+ this.__soundRuntime.fadeOutAll(duration);
452
274
  }
453
-
454
- const distanceMax = this.distanceMax;
455
-
456
- const bounds = this.bvh.bounds;
457
-
458
- aabb3_array_compute_from_sphere(bounds, 0, x, y, z, distanceMax);
459
-
460
- this.bvh.write_bounds();
461
275
  }
462
276
 
463
277
  /**
464
- *
465
- * @param {number} [duration] fade duration in seconds
466
- * @param startAfter
278
+ * @deprecated plumbs into sopra — stops every playing track on this emitter.
467
279
  */
468
- fadeOutAllTracks(duration = 1, startAfter = 0) {
469
-
470
- const tracks = this.tracks;
471
- const n = tracks.length;
472
-
473
- for (let i = 0; i < n; i++) {
474
- const soundTrack = tracks.get(i);
475
-
476
- soundTrack.setVolumeOverTime(0, duration, startAfter);
477
- }
478
- }
479
-
480
280
  stopAllTracks() {
481
- const tracks = this.tracks;
482
- const n = tracks.length;
483
-
484
- for (let i = 0; i < n; i++) {
485
- const soundTrack = tracks.get(i);
486
-
487
- soundTrack.playing = false;
281
+ if (this.__soundRuntime !== null) {
282
+ this.__soundRuntime.stopAll();
488
283
  }
489
284
  }
490
285