@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
@@ -1,58 +1,55 @@
1
+ /**
2
+ * Per-entity translation record: turns a legacy {@link SoundEmitter}'s mutable track list into sopra
3
+ * {@link EventInstance}s and keeps them in sync. This is NOT a WebAudio renderer anymore — sopra owns
4
+ * the audio graph. One persistent/looping track ⇒ one persistent instance; a non-looping track ⇒ a
5
+ * one-shot instance that self-ends (firing the track's `on.ended`).
6
+ */
1
7
  export class SoundEmitterComponentContext {
2
8
  /**
3
- *
4
9
  * @type {SoundEmitter}
5
10
  */
6
11
  emitter: SoundEmitter;
7
12
  /**
8
- *
9
13
  * @type {Transform}
10
14
  */
11
15
  transform: Transform;
12
16
  /**
13
- *
14
17
  * @type {SoundEmitterSystem}
15
18
  */
16
19
  system: SoundEmitterSystem;
17
20
  /**
18
- *
19
- * @type {AudioNode}
21
+ * @type {SopraEngine}
20
22
  */
21
- targetNode: AudioNode;
22
- /**
23
- *
24
- * @type {boolean}
25
- * @private
26
- */
27
- private __isConnected;
23
+ sopra: SopraEngine;
24
+ link(): void;
25
+ unlink(): void;
28
26
  /**
29
- *
30
- * @param {SoundEmitterComponentContext} other
27
+ * @param {SoundTrack} track
31
28
  */
32
- compare(other: SoundEmitterComponentContext): any;
33
- update(): void;
29
+ addTrack(track: SoundTrack): void;
34
30
  /**
35
- *
36
- * @param {SoundTrack} soundTrack
31
+ * @param {SoundTrack} track
37
32
  */
38
- addTrack(soundTrack: SoundTrack): void;
33
+ removeTrack(track: SoundTrack): void;
39
34
  /**
40
- *
35
+ * Re-apply a single track's live volume to its instance gain. Called by SoundTrack's volume setter
36
+ * (via the track's __soundRuntime back-ref) so a mid-playback `track.volume = x` is heard live.
41
37
  * @param {SoundTrack} track
42
38
  */
43
- removeTrack(track: SoundTrack): void;
39
+ refreshTrackVolume(track: SoundTrack): void;
44
40
  /**
45
- * @param {SoundTrack} t
41
+ * Fade every owned instance out and stop it (backs SoundEmitter.fadeOutAllTracks).
42
+ * @param {number} duration
46
43
  */
47
- suspendTrack(t: SoundTrack): void;
44
+ fadeOutAll(duration: number): void;
48
45
  /**
46
+ * Stop every owned instance immediately (backs SoundEmitter.stopAllTracks + unlink).
49
47
  *
50
- * @param {SoundTrack} t
48
+ * Detach the track↔instance bindings BEFORE stopping: stop() fires onEnded synchronously, and
49
+ * #onInstanceEnded must bail out (it keys off #instances) so teardown doesn't fire track.on.ended
50
+ * or mutate the emitter's authored track list.
51
51
  */
52
- resumeTrack(t: SoundTrack): void;
53
- connect(): void;
54
- disconnect(): void;
55
- link(): void;
56
- unlink(): void;
52
+ stopAll(): void;
53
+ #private;
57
54
  }
58
55
  //# sourceMappingURL=SoundEmitterComponentContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SoundEmitterComponentContext.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js"],"names":[],"mappings":"AAGA;IAGQ;;;OAGG;IACH,sBAAmB;IAEnB;;;OAGG;IACH,qBAAqB;IAErB;;;OAGG;IACH,2BAAkB;IAElB;;;OAGG;IACH,YAFU,SAAS,CAEG;IAEtB;;;;OAIG;IACH,sBAA0B;IAG9B;;;OAGG;IACH,eAFW,4BAA4B,OAItC;IAED,eAeC;IAED;;;OAGG;IACH,uCAmCC;IAED;;;OAGG;IACH,qCAYC;IAED;;OAEG;IACH,kCAIC;IAED;;;OAGG;IACH,iCAKC;IAED,gBAcC;IAED,mBAoBC;IAED,aAOC;IAED,eASC;CAGJ"}
1
+ {"version":3,"file":"SoundEmitterComponentContext.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH;IAEI;;OAEG;IACH,sBAAe;IAEf;;OAEG;IACH,qBAAiB;IAEjB;;OAEG;IACH,2BAAc;IAEd;;OAEG;IACH,mBAAa;IAYb,aAkBC;IAED,eAUC;IAED;;OAEG;IACH,kCAgCC;IAED;;OAEG;IACH,qCAWC;IAoDD;;;;OAIG;IACH,4CAQC;IAWD;;;OAGG;IACH,qBAFW,MAAM,QAMhB;IAED;;;;;;OAMG;IACH,gBAcC;;CACJ"}
@@ -1,202 +1,235 @@
1
- import { loadSoundTrackAsset } from "./loadSoundTrackAsset.js";
1
+ import { EventInstanceState } from "../../sopra/runtime/EventInstance.js";
2
+ import { soundTrackToEventDescription } from "../../sopra/legacy/soundEmitterToEventDescription.js";
3
+ import { volume2dB } from "../../volume2dB.js";
2
4
  import { SoundTrackFlags } from "./SoundTrackFlags.js";
3
5
 
6
+ /**
7
+ * Per-entity translation record: turns a legacy {@link SoundEmitter}'s mutable track list into sopra
8
+ * {@link EventInstance}s and keeps them in sync. This is NOT a WebAudio renderer anymore — sopra owns
9
+ * the audio graph. One persistent/looping track ⇒ one persistent instance; a non-looping track ⇒ a
10
+ * one-shot instance that self-ends (firing the track's `on.ended`).
11
+ */
4
12
  export class SoundEmitterComponentContext {
5
- constructor() {
6
-
7
- /**
8
- *
9
- * @type {SoundEmitter}
10
- */
11
- this.emitter = null;
12
-
13
- /**
14
- *
15
- * @type {Transform}
16
- */
17
- this.transform = null;
18
-
19
- /**
20
- *
21
- * @type {SoundEmitterSystem}
22
- */
23
- this.system = null;
24
-
25
- /**
26
- *
27
- * @type {AudioNode}
28
- */
29
- this.targetNode = null;
30
-
31
- /**
32
- *
33
- * @type {boolean}
34
- * @private
35
- */
36
- this.__isConnected = false;
37
- }
38
13
 
39
14
  /**
40
- *
41
- * @param {SoundEmitterComponentContext} other
15
+ * @type {SoundEmitter}
42
16
  */
43
- compare(other) {
44
- return this.emitter.compare(other.emitter);
45
- }
17
+ emitter = null;
18
+
19
+ /**
20
+ * @type {Transform}
21
+ */
22
+ transform = null;
23
+
24
+ /**
25
+ * @type {SoundEmitterSystem}
26
+ */
27
+ system = null;
46
28
 
47
- update() {
29
+ /**
30
+ * @type {SopraEngine}
31
+ */
32
+ sopra = null;
33
+
34
+ /**
35
+ * track → its live sopra instance
36
+ * @type {Map<SoundTrack, EventInstance>}
37
+ */
38
+ #instances = new Map();
48
39
 
49
- const position = this.transform.position;
40
+ #boundAddTrack = (track) => this.addTrack(track);
41
+ #boundRemoveTrack = (track) => this.removeTrack(track);
42
+ #boundUpdateVolume = () => this.#updateVolume();
50
43
 
51
- /**
52
- *
53
- * @type {SoundEmitter}
54
- */
44
+ link() {
55
45
  const emitter = this.emitter;
56
46
 
57
- const x = position.x;
58
- const y = position.y;
59
- const z = position.z;
47
+ // back-reference so the emitter's deprecated fade/stop helpers can reach the live instances
48
+ emitter.__soundRuntime = this;
60
49
 
61
- emitter.updatePosition(x, y, z);
62
- }
50
+ // snapshot the initial tracks before adding: addTrack can synchronously remove a track (a
51
+ // zero-duration / synchronously-failed one-shot self-ends inside playEvent), and List.forEach
52
+ // is NOT safe against re-entrant removal (it iterates by a fixed index over the live array).
53
+ const initial = [];
54
+ emitter.tracks.forEach((track) => initial.push(track));
55
+ for (let i = 0; i < initial.length; i++) {
56
+ this.addTrack(initial[i]);
57
+ }
63
58
 
64
- /**
65
- *
66
- * @param {SoundTrack} soundTrack
67
- */
68
- addTrack(soundTrack) {
69
- const system = this.system;
59
+ emitter.tracks.on.added.add(this.#boundAddTrack);
60
+ emitter.tracks.on.removed.add(this.#boundRemoveTrack);
61
+ emitter.volume.onChanged.add(this.#boundUpdateVolume);
62
+ }
70
63
 
64
+ unlink() {
71
65
  const emitter = this.emitter;
72
66
 
73
- const context = system.webAudioContext;
74
- const assetManager = system.assetManager;
75
- const targetNode = emitter.nodes.volume;
67
+ emitter.tracks.on.added.remove(this.#boundAddTrack);
68
+ emitter.tracks.on.removed.remove(this.#boundRemoveTrack);
69
+ emitter.volume.onChanged.remove(this.#boundUpdateVolume);
76
70
 
77
- soundTrack.initializeNodes(context);
71
+ this.stopAll();
78
72
 
79
- const nodes = soundTrack.nodes;
73
+ emitter.__soundRuntime = null;
74
+ }
80
75
 
81
- //connect to target
82
- nodes.volume.connect(targetNode);
76
+ /**
77
+ * @param {SoundTrack} track
78
+ */
79
+ addTrack(track) {
80
+ const emitter = this.emitter;
83
81
 
84
- nodes.volume.gain.setValueAtTime(soundTrack.volume, 0);
82
+ const description = soundTrackToEventDescription(emitter, track);
85
83
 
86
- loadSoundTrackAsset(soundTrack, assetManager, (asset) => {
84
+ // a looping track is persistent; a one-shot self-ends (and then fires track.on.ended)
85
+ const oneShot = !track.getFlag(SoundTrackFlags.Loop);
87
86
 
88
- soundTrack.buffer = asset.create();
87
+ const instance = this.sopra.playEvent(description, {
88
+ busId: description.busId,
89
+ position: this.transform.position, // shared Vector3 — tracks the entity as it moves
90
+ oneShot
91
+ });
89
92
 
90
- if (soundTrack.getFlag(SoundTrackFlags.StartWhenReady)) {
93
+ if (instance === null) {
94
+ // play denied (instance limit) — drop, matching the steal/limit policy
95
+ return;
96
+ }
91
97
 
92
- if (this.__isConnected) {
93
- soundTrack.start(context.currentTime);
94
- } else {
95
- soundTrack.setFlag(SoundTrackFlags.Playing);
96
- }
97
- }
98
+ this.#bind(track, instance);
98
99
 
100
+ // live volume = emitter.volume × track.volume, carried by the instance gain
101
+ instance.setGainDb(this.#trackGainDb(track));
99
102
 
100
- }, console.error);
103
+ instance.onEnded.addOne(() => this.#onInstanceEnded(track, instance));
101
104
 
102
- soundTrack.on.ended.add(emitter.tracks.removeOneOf, emitter.tracks);
105
+ // A zero-duration (or synchronously-failed) one-shot self-ends inside playEvent's start(),
106
+ // firing onEnded BEFORE the subscription above — so run the end path now, else the instance
107
+ // leaks in #instances and the dead track never leaves the list.
108
+ if (instance.state === EventInstanceState.Stopped) {
109
+ this.#onInstanceEnded(track, instance);
110
+ }
103
111
  }
104
112
 
105
113
  /**
106
- *
107
114
  * @param {SoundTrack} track
108
115
  */
109
116
  removeTrack(track) {
110
- /**
111
- *
112
- * @type {GainNode}
113
- */
114
- const volume = track.nodes.volume;
117
+ const instance = this.#instances.get(track);
115
118
 
116
- volume.disconnect();
119
+ if (instance === undefined) {
120
+ return;
121
+ }
117
122
 
118
- const emitter = this.emitter;
123
+ // detach BEFORE stopping so the onEnded handler (which stop() fires synchronously) bails out
124
+ this.#unbind(track);
119
125
 
120
- track.on.ended.remove(emitter.tracks.removeOneOf, emitter.tracks);
126
+ instance.stop();
121
127
  }
122
128
 
123
129
  /**
124
- * @param {SoundTrack} t
130
+ * Bind a track to its live instance.
131
+ * @param {SoundTrack} track
132
+ * @param {EventInstance} instance
125
133
  */
126
- suspendTrack(t) {
127
- if (t.getFlag(SoundTrackFlags.Playing)) {
128
- t.suspend();
129
- }
134
+ #bind(track, instance) {
135
+ track.__instance = instance;
136
+ track.__soundRuntime = this;
137
+ this.#instances.set(track, instance);
130
138
  }
131
139
 
132
140
  /**
133
- *
134
- * @param {SoundTrack} t
141
+ * Detach a track from its (now gone) instance.
142
+ * @param {SoundTrack} track
135
143
  */
136
- resumeTrack(t) {
137
-
138
- if (t.getFlag(SoundTrackFlags.Playing)) {
139
- t.start();
140
- }
144
+ #unbind(track) {
145
+ this.#instances.delete(track);
146
+ track.__instance = null;
147
+ track.__soundRuntime = null;
141
148
  }
142
149
 
143
- connect() {
144
- if (this.__isConnected) {
150
+ /**
151
+ * @param {SoundTrack} track
152
+ * @param {EventInstance} instance
153
+ */
154
+ #onInstanceEnded(track, instance) {
155
+ if (this.#instances.get(track) !== instance) {
156
+ // already removed via removeTrack() — nothing to do
145
157
  return;
146
158
  }
147
159
 
148
- const emitter = this.emitter;
149
- const targetNode = emitter.getTargetNode();
150
-
151
- targetNode.connect(this.targetNode);
160
+ this.#unbind(track);
152
161
 
153
- // update all track times
154
- emitter.tracks.forEach(this.resumeTrack);
162
+ // legacy contract: a finished track fires on.ended and leaves the list. Remove by IDENTITY
163
+ // (not value-equality) so a value-equal sibling track is never removed by mistake.
164
+ track.on.ended.send1(track);
155
165
 
156
- this.__isConnected = true;
166
+ const tracks = this.emitter.tracks;
167
+ const index = tracks.indexOf(track);
168
+ if (index !== -1) {
169
+ tracks.remove(index);
170
+ }
157
171
  }
158
172
 
159
- disconnect() {
160
- if (!this.__isConnected) {
161
- return;
162
- }
173
+ #updateVolume() {
174
+ this.#instances.forEach((instance, track) => {
175
+ instance.setGainDb(this.#trackGainDb(track));
176
+ });
177
+ }
163
178
 
164
- const emitter = this.emitter;
165
- const targetNode = emitter.getTargetNode();
179
+ /**
180
+ * Re-apply a single track's live volume to its instance gain. Called by SoundTrack's volume setter
181
+ * (via the track's __soundRuntime back-ref) so a mid-playback `track.volume = x` is heard live.
182
+ * @param {SoundTrack} track
183
+ */
184
+ refreshTrackVolume(track) {
185
+ const instance = this.#instances.get(track);
166
186
 
167
- if (targetNode !== null) {
168
- targetNode.disconnect();
187
+ if (instance === undefined) {
188
+ return;
169
189
  }
170
190
 
171
- /*
172
- The reason we suspend all tracks is to be able to track progression of a track after it is disconnected
173
- From experiments it appears that at least on Chrome v111 disconnected sources do not advance time, which leads to dis-synchronization when we later reconnected
174
- To circumvent this issue we introduced "Suspended" flag to keep track of timing on disconnected tracks
175
- */
176
- emitter.tracks.forEach(this.suspendTrack, this)
177
-
178
- this.__isConnected = false;
191
+ instance.setGainDb(this.#trackGainDb(track));
179
192
  }
180
193
 
181
- link() {
182
- this.transform.position.onChanged.add(this.update, this);
183
-
184
- this.emitter.tracks.forEach(this.addTrack, this);
194
+ /**
195
+ * Composed live gain for a track: emitter.volume × track.volume, in dB.
196
+ * @param {SoundTrack} track
197
+ * @returns {number}
198
+ */
199
+ #trackGainDb(track) {
200
+ return volume2dB(this.emitter.volume.getValue() * track.volume);
201
+ }
185
202
 
186
- this.emitter.tracks.on.added.add(this.addTrack, this);
187
- this.emitter.tracks.on.removed.add(this.removeTrack, this);
203
+ /**
204
+ * Fade every owned instance out and stop it (backs SoundEmitter.fadeOutAllTracks).
205
+ * @param {number} duration
206
+ */
207
+ fadeOutAll(duration) {
208
+ this.#instances.forEach((instance) => {
209
+ instance.fadeOutAndStop(duration);
210
+ });
188
211
  }
189
212
 
190
- unlink() {
191
- this.transform.position.onChanged.remove(this.update, this);
213
+ /**
214
+ * Stop every owned instance immediately (backs SoundEmitter.stopAllTracks + unlink).
215
+ *
216
+ * Detach the track↔instance bindings BEFORE stopping: stop() fires onEnded synchronously, and
217
+ * #onInstanceEnded must bail out (it keys off #instances) so teardown doesn't fire track.on.ended
218
+ * or mutate the emitter's authored track list.
219
+ */
220
+ stopAll() {
221
+ const instances = [];
192
222
 
193
- this.emitter.tracks.on.added.remove(this.addTrack, this);
194
- this.emitter.tracks.on.removed.remove(this.removeTrack, this);
223
+ this.#instances.forEach((instance, track) => {
224
+ track.__instance = null;
225
+ track.__soundRuntime = null;
226
+ instances.push(instance);
227
+ });
195
228
 
196
- this.emitter.tracks.forEach(this.removeTrack, this);
229
+ this.#instances.clear();
197
230
 
198
- this.disconnect();
231
+ for (let i = 0; i < instances.length; i++) {
232
+ instances[i].stop();
233
+ }
199
234
  }
200
-
201
-
202
235
  }
@@ -4,108 +4,85 @@ export namespace SoundEmitterChannels {
4
4
  let Music: string;
5
5
  let Ambient: string;
6
6
  }
7
+ /**
8
+ * @deprecated Legacy emitter system — superseded by {@link AudioEmitterSystem} (which drives the native
9
+ * {@link AudioEmitter}). Retained to keep existing {@link SoundEmitter} content working during the
10
+ * strangler migration; not for new content.
11
+ *
12
+ * Routes the legacy {@link SoundEmitter} component through the sopra engine — sopra is the single
13
+ * renderer. The system no longer builds a WebAudio graph: it creates + owns-on-{@link SoundEngine} the
14
+ * sopra engine, and per linked emitter builds a {@link SoundEmitterComponentContext} translation record
15
+ * that turns the emitter's tracks into sopra event instances. Each frame it forwards the listener pose
16
+ * and ticks sopra.
17
+ *
18
+ * The channel ids (effects/music/ambient) are sopra bus ids 1:1 at the same legacy mix; the deprecated
19
+ * get/setChannelVolume proxy onto the sopra buses.
20
+ */
7
21
  export class SoundEmitterSystem extends System<any, any, any, any, any> {
8
22
  /**
9
- *
10
23
  * @param {AssetManager} assetManager
11
- * @param {AudioNode} destinationNode
12
- * @param {AudioContext} context
24
+ * @param {SoundEngine} soundEngine owns the AudioContext + master destination + sopra engine
13
25
  * @constructor
14
- * @property {AssetManager} assetManager
15
26
  */
16
- constructor(assetManager: AssetManager, destinationNode: AudioNode, context: AudioContext);
27
+ constructor(assetManager: AssetManager, soundEngine: SoundEngine);
17
28
  dependencies: (typeof Transform | typeof SoundEmitter)[];
18
- destinationNode: AudioNode;
19
29
  /**
20
- *
30
+ * @type {SoundEngine}
31
+ */
32
+ soundEngine: SoundEngine;
33
+ /**
21
34
  * @type {AudioContext}
22
35
  */
23
36
  webAudioContext: AudioContext;
37
+ destinationNode: any;
24
38
  assetManager: AssetManager;
25
39
  /**
26
- *
27
- * @type {Object<SoundEmitterChannel>}
28
- */
29
- channels: any;
30
- /**
31
- *
32
- * @type {SoundEmitterComponentContext[]}
33
- */
34
- data: SoundEmitterComponentContext[];
35
- /**
36
- *
37
- * @type {IncrementalDeltaSet<SoundEmitterComponentContext>}
38
- */
39
- activeSet: IncrementalDeltaSet<SoundEmitterComponentContext>;
40
- /**
41
- * Spatial index
42
- * @type {BVH}
43
- * @private
40
+ * The sopra engine — the single renderer. Owned by SoundEngine; created here because we have
41
+ * the AssetManager. Reuses the single SoundAssetLoader registered above (no double registration).
42
+ * @type {SopraEngine}
44
43
  */
45
- private __bvh;
44
+ sopra: SopraEngine;
46
45
  /**
47
- * Number of currently linked entities
48
- * @type {number}
49
- * @private
46
+ * @deprecated channel ids are sopra bus ids now; retained as a name set for the editor's
47
+ * channel dropdown. Volume lives on the sopra buses (see get/setChannelVolume).
48
+ * @type {Object<string,string>}
50
49
  */
51
- private __linkedCount;
52
- startup(entityManager: any): Promise<void>;
53
- shutdown(entityManager: any): Promise<void>;
50
+ channels: {
51
+ [x: string]: string;
52
+ };
54
53
  /**
55
- *
56
- * @param {SoundEmitterComponentContext} ctx
57
- */
58
- handleContextActivation(ctx: SoundEmitterComponentContext): void;
59
- /**
60
- *
61
- * @param {SoundEmitterComponentContext} ctx
54
+ * Per-entity translation records.
55
+ * @type {SoundEmitterComponentContext[]}
62
56
  */
63
- handleContextDeactivation(ctx: SoundEmitterComponentContext): void;
57
+ data: SoundEmitterComponentContext[];
64
58
  /**
65
- *
59
+ * @deprecated channel volume is a sopra bus volume now; proxies to it.
66
60
  * @param {String} name
67
61
  * @returns {number}
68
62
  */
69
63
  getChannelVolume(name: string): number;
70
64
  /**
71
- *
65
+ * @deprecated channel volume is a sopra bus volume now; proxies to it.
72
66
  * @param {String} name
73
67
  * @param {number} value
74
68
  */
75
69
  setChannelVolume(name: string, value: number): void;
76
- addChannel(name: any): this;
77
70
  /**
78
- *
79
- * @param {String} name
80
- * @returns {boolean}
81
- */
82
- hasChannel(name: string): boolean;
83
- /**
84
- *
85
71
  * @param {SoundEmitter} emitter
86
72
  * @param {Transform} transform
87
73
  * @param {number} entity
88
74
  */
89
75
  link(emitter: SoundEmitter, transform: Transform, entity: number): void;
90
76
  /**
91
- *
92
77
  * @param {SoundEmitter} emitter
93
78
  * @param {Transform} transform
94
79
  * @param {number} entity
95
80
  */
96
81
  unlink(emitter: SoundEmitter, transform: Transform, entity: number): void;
97
- /**
98
- *
99
- * @param {SoundEmitterComponentContext} emitter
100
- * @returns {boolean}
101
- */
102
- emitter_in_hearing_range(emitter: SoundEmitterComponentContext): boolean;
103
82
  update(timeDelta: any): void;
104
- #private;
105
83
  }
106
84
  import { System } from '../../../ecs/System.js';
107
85
  import { Transform } from '../../../ecs/transform/Transform.js';
108
86
  import { SoundEmitter } from './SoundEmitter.js';
109
87
  import { SoundEmitterComponentContext } from "./SoundEmitterComponentContext.js";
110
- import { IncrementalDeltaSet } from "../../../graphics/render/visibility/IncrementalDeltaSet.js";
111
88
  //# sourceMappingURL=SoundEmitterSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SoundEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterSystem.js"],"names":[],"mappings":"mCAmBU,MAAM;;;;;;AAchB;IACI;;;;;;;OAOG;IACH,yDALW,SAAS,WACT,YAAY,EA0DtB;IAnDG,yDAA6C;IAG7C,2BAAsC;IACtC;;;OAGG;IACH,iBAFU,YAAY,CAEQ;IAC9B,2BAAgC;IAEhC;;;OAGG;IACH,cAAkB;IAWlB;;;OAGG;IACH,MAFU,4BAA4B,EAAE,CAE1B;IAEd;;;OAGG;IACH,WAFU,oBAAoB,4BAA4B,CAAC,CAEE;IAE7D;;;;OAIG;IACH,cAAsB;IAEtB;;;;OAIG;IACH,sBAAsB;IAG1B,2CAGC;IAED,4CAGC;IAED;;;OAGG;IACH,6BAFW,4BAA4B,QAItC;IAED;;;OAGG;IACH,+BAFW,4BAA4B,QAItC;IAED;;;;OAIG;IACH,gCAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,sCAFW,MAAM,QAIhB;IAED,4BAeC;IAED;;;;OAIG;IACH,0BAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,cAJW,YAAY,aACZ,SAAS,UACT,MAAM,QA6DhB;IAED;;;;;OAKG;IACH,gBAJW,YAAY,aACZ,SAAS,UACT,MAAM,QAmBhB;IAED;;;;OAIG;IACH,kCAHW,4BAA4B,GAC1B,OAAO,CAKnB;IAQD,6BA6GC;;CAGJ;uBA7XsB,wBAAwB;0BACrB,qCAAqC;6BAGlC,mBAAmB;6CAEH,mCAAmC;oCAJ5C,4DAA4D"}
1
+ {"version":3,"file":"SoundEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterSystem.js"],"names":[],"mappings":"mCAWU,MAAM;;;;;;AAQhB;;;;;;;;;;;;;GAaG;AACH;IACI;;;;OAIG;IACH,kEA4CC;IAzCG,yDAA6C;IAE7C;;OAEG;IACH,yBAA8B;IAE9B;;OAEG;IACH,iBAFU,YAAY,CAEoB;IAE1C,qBAA8C;IAE9C,2BAAgC;IAIhC;;;;OAIG;IACH,mBAAkF;IAElF;;;;OAIG;IACH;YAFiB,MAAM,GAAC,MAAM;MAM7B;IAED;;;OAGG;IACH,MAFU,4BAA4B,EAAE,CAE1B;IAGlB;;;;OAIG;IACH,gCAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,sCAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,cAJW,YAAY,aACZ,SAAS,UACT,MAAM,QAahB;IAED;;;;OAIG;IACH,gBAJW,YAAY,aACZ,SAAS,UACT,MAAM,QAUhB;IAED,6BAgBC;CACJ;uBAvJsB,wBAAwB;0BACrB,qCAAqC;6BAGlC,mBAAmB;6CACH,mCAAmC"}