@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.
- package/README.md +1 -1
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/view/ecs/ComponentControlView.d.ts +0 -9
- package/editor/view/ecs/ComponentControlView.js +2 -98
- package/package.json +1 -1
- package/src/core/binary/32BitEncoder.js +1 -1
- package/src/core/binary/to_half_float_uint16.js +3 -3
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +275 -253
- package/src/core/cache/Cache.d.ts.map +1 -1
- package/src/core/cache/Cache.js +7 -0
- package/src/core/cache/FrequencySketch.d.ts.map +1 -1
- package/src/core/cache/FrequencySketch.js +8 -4
- package/src/core/clipboard/obtainClipBoard.d.ts +6 -0
- package/src/core/clipboard/obtainClipBoard.d.ts.map +1 -0
- package/src/core/clipboard/obtainClipBoard.js +29 -0
- package/src/core/clipboard/safeClipboardReadText.d.ts +6 -0
- package/src/core/clipboard/safeClipboardReadText.d.ts.map +1 -0
- package/src/core/clipboard/safeClipboardReadText.js +55 -0
- package/src/core/clipboard/safeClipboardWriteText.d.ts +8 -0
- package/src/core/clipboard/safeClipboardWriteText.d.ts.map +1 -0
- package/src/core/clipboard/safeClipboardWriteText.js +23 -0
- package/src/core/collection/array/array_quick_sort_by_lookup_map.js +1 -1
- package/src/core/collection/array/array_set_diff_sorting.d.ts.map +1 -1
- package/src/core/collection/array/array_set_diff_sorting.js +4 -1
- package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
- package/src/core/collection/array/array_shuffle.js +30 -27
- package/src/core/collection/array/binarySearchLowIndex.d.ts.map +1 -1
- package/src/core/collection/array/binarySearchLowIndex.js +4 -3
- package/src/core/collection/array/typed/array_buffer_hash.js +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.d.ts.map +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.js +12 -2
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +12 -2
- package/src/core/collection/queue/Deque.d.ts.map +1 -1
- package/src/core/collection/queue/Deque.js +10 -8
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +4 -2
- package/src/core/collection/table/RowFirstTableSpec.js +2 -2
- package/src/core/color/operations/color_lerp.d.ts.map +1 -1
- package/src/core/color/operations/color_lerp.js +10 -3
- package/src/core/color/rgb2uint32.js +1 -1
- package/src/core/color/rgbe9995_to_rgb.js +1 -1
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +2 -1
- package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
- package/src/core/geom/2d/aabb/AABB2.js +12 -11
- package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.js +30 -4
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +6 -2
- package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +388 -386
- package/src/core/geom/2d/hash-grid/shg_query_elements_line.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +8 -3
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +9 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +3 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +3 -1
- package/src/core/geom/2d/quad-tree-binary/QuadTree.js +714 -714
- package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
- package/src/core/geom/2d/r-tree/StaticR2Tree.js +5 -4
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +33 -29
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +3 -1
- package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js +10 -7
- package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +30 -9
- package/src/core/geom/3d/aabb/compute_aabb_from_points.js +3 -3
- package/src/core/geom/3d/box/box3_raycast.d.ts +37 -0
- package/src/core/geom/3d/box/box3_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/box/box3_raycast.js +81 -0
- package/src/core/geom/3d/capsule/capsule_raycast.d.ts +35 -0
- package/src/core/geom/3d/capsule/capsule_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/capsule/capsule_raycast.js +93 -0
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +1 -1
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +4 -0
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +3 -2
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +12 -2
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +2 -2
- package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts +1 -1
- package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_multiply_alphatensor.js +19 -13
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts.map +1 -1
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.js +3 -2
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +3 -2
- package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/MeshShape3D.js +7 -0
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +3 -2
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -1
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +153 -148
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +7 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.js +13 -10
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +1 -1
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +2 -2
- package/src/core/geom/3d/sphere/sphere_raycast.d.ts +33 -0
- package/src/core/geom/3d/sphere/sphere_raycast.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/sphere_raycast.js +47 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +24 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +39 -0
- package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.js +4 -2
- package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +3 -3
- package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +1 -1
- package/src/core/geom/3d/topology/tm_vertex_compute_normal.d.ts.map +1 -1
- package/src/core/geom/3d/topology/tm_vertex_compute_normal.js +4 -2
- package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +1 -1
- package/src/core/geom/3d/util/make_justified_point_grid.js +18 -10
- package/src/core/geom/ConicRay.d.ts.map +1 -1
- package/src/core/geom/ConicRay.js +11 -13
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +1 -1
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +19 -4
- package/src/core/geom/vec3/v3_array_copy.d.ts +3 -3
- package/src/core/geom/vec3/v3_array_copy.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_array_copy.js +2 -2
- package/src/core/geom/vec3/v3_cross.d.ts +17 -0
- package/src/core/geom/vec3/v3_cross.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_cross.js +20 -0
- package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.d.ts.map +1 -0
- package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.js +1 -1
- package/src/core/geom/vec3/v3_subtract.d.ts +16 -0
- package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_subtract.js +19 -0
- package/src/core/graph/coloring/colorizeGraph.js +2 -2
- package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
- package/src/core/graph/csr/CSRGraph.js +325 -319
- package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
- package/src/core/graph/layout/CircleLayout.js +8 -6
- package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -1
- package/src/core/graph/metis/native/refine/compute_kway_params.js +139 -138
- package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -1
- package/src/core/graph/mn_graph_coarsen.js +4 -2
- package/src/core/graph/v2/NodeContainer.js +7 -7
- package/src/core/localization/LocalizationEngine.js +1 -1
- package/src/core/math/bell_membership_function.d.ts.map +1 -1
- package/src/core/math/bell_membership_function.js +3 -1
- package/src/core/math/complex/complex_add.d.ts +4 -4
- package/src/core/math/complex/complex_add.d.ts.map +1 -1
- package/src/core/math/complex/complex_add.js +3 -3
- package/src/core/math/complex/complex_div.d.ts +4 -4
- package/src/core/math/complex/complex_div.d.ts.map +1 -1
- package/src/core/math/complex/complex_div.js +3 -3
- package/src/core/math/complex/complex_mul.d.ts +4 -4
- package/src/core/math/complex/complex_mul.d.ts.map +1 -1
- package/src/core/math/complex/complex_mul.js +3 -3
- package/src/core/math/complex/complex_sub.d.ts +4 -4
- package/src/core/math/complex/complex_sub.d.ts.map +1 -1
- package/src/core/math/complex/complex_sub.js +3 -3
- package/src/core/math/idct_1d.d.ts +4 -4
- package/src/core/math/idct_1d.d.ts.map +1 -1
- package/src/core/math/idct_1d.js +3 -3
- package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
- package/src/core/math/noise/create_simplex_noise_2d.js +4 -2
- package/src/core/math/noise/sdnoise.d.ts.map +1 -1
- package/src/core/math/noise/sdnoise.js +12 -9
- package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
- package/src/core/math/physics/mie/compute_bhmie_optical_properties.js +94 -50
- package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts +3 -6
- package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts.map +1 -1
- package/src/core/math/physics/mie/lorenz_mie_coefs.js +180 -157
- package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts +3 -4
- package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts.map +1 -1
- package/src/core/math/physics/mie/mie_ab_to_optical_properties.js +47 -21
- package/src/core/math/random/randomIntegerBetween.d.ts.map +1 -1
- package/src/core/math/random/randomIntegerBetween.js +4 -1
- package/src/core/math/solveCubic.d.ts.map +1 -1
- package/src/core/math/solveCubic.js +95 -82
- package/src/core/math/spline/computeCatmullRomSplineUniformDistance.d.ts.map +1 -1
- package/src/core/math/spline/computeCatmullRomSplineUniformDistance.js +13 -0
- package/src/core/math/statistics/softmax.js +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +1 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +2 -1
- package/src/core/model/node-graph/visual/NodeVisualData.js +1 -1
- package/src/core/model/object/ImmutableObjectPool.d.ts +7 -0
- package/src/core/model/object/ImmutableObjectPool.d.ts.map +1 -1
- package/src/core/model/object/ImmutableObjectPool.js +20 -10
- package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts.map +1 -1
- package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +39 -2
- package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
- package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -0
- package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
- package/src/core/parser/simple/readHexToken.js +6 -0
- package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
- package/src/core/primitives/numbers/number_pretty_print.js +4 -1
- package/src/core/primitives/strings/string_jaro_winkler.js +1 -1
- package/src/core/process/CompositeProcess.js +1 -1
- package/src/core/process/action/AsynchronousDelayAction.d.ts.map +1 -1
- package/src/core/process/action/AsynchronousDelayAction.js +3 -0
- package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
- package/src/core/process/executor/ConcurrentExecutor.js +3 -2
- package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
- package/src/core/process/task/util/randomCountTask.js +3 -1
- package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
- package/src/core/process/undo/ActionProcessor.js +5 -3
- package/src/core/process/worker/WorkerBuilder.js +3 -3
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +4 -2
- package/src/engine/control/first-person/DESIGN.md +1 -1
- package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts +55 -0
- package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts.map +1 -0
- package/src/engine/control/first-person/FirstPersonMotionPhase.js +134 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +23 -2
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.js +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +168 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +115 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +71 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +255 -55
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +82 -43
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +405 -213
- package/src/engine/control/first-person/abilities/Mantle.d.ts +6 -0
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +104 -45
- package/src/engine/control/first-person/abilities/ScrambleUp.d.ts +61 -0
- package/src/engine/control/first-person/abilities/ScrambleUp.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/ScrambleUp.js +182 -0
- package/src/engine/control/first-person/math/jumpDynamics.d.ts +84 -0
- package/src/engine/control/first-person/math/jumpDynamics.d.ts.map +1 -0
- package/src/engine/control/first-person/math/jumpDynamics.js +108 -0
- package/src/engine/control/first-person/prototype_first_person_controller.js +45 -1
- package/src/engine/graphics/camera/testClippingPlaneComputation.js +1 -1
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +8 -0
- package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
- package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +1 -1
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +1 -1
- package/src/engine/graphics/shadows/testShadowMapRendering.js +1 -1
- package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +208 -0
- package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +364 -0
- package/src/engine/physics/PLAN.md +6 -5
- package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +147 -33
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +1750 -1747
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts +12 -8
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/engine/physics/gjk/gjk_epa_penetration.js +447 -158
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +22 -25
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -13
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_decomposition.js +61 -65
- package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +13 -8
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +5 -3
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +81 -78
- package/src/engine/sound/SoundEngine.d.ts.map +1 -1
- package/src/engine/sound/SoundEngine.js +28 -0
- package/src/engine/sound/dB2Volume.d.ts +1 -1
- package/src/engine/sound/dB2Volume.d.ts.map +1 -1
- package/src/engine/sound/dB2Volume.js +1 -1
- package/src/engine/sound/ecs/SoundController.d.ts +4 -0
- package/src/engine/sound/ecs/SoundController.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundController.js +4 -0
- package/src/engine/sound/ecs/SoundControllerSystem.d.ts +5 -0
- package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundControllerSystem.js +5 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +69 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/AudioEmitter.js +83 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +97 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +238 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +90 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +324 -0
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +59 -0
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -0
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +140 -0
- package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts +16 -65
- package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundEmitter.js +19 -224
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +26 -29
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +168 -135
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +36 -59
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +154 -390
- package/src/engine/sound/ecs/emitter/SoundTrack.d.ts +20 -23
- package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +1 -1
- package/src/engine/sound/ecs/emitter/SoundTrack.js +34 -152
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +993 -0
- package/src/engine/sound/sopra/README.md +643 -7
- package/src/engine/sound/sopra/SopraEngine.d.ts +229 -0
- package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -0
- package/src/engine/sound/sopra/SopraEngine.js +423 -0
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts +26 -0
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts.map +1 -0
- package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.js +71 -0
- package/src/engine/sound/sopra/asset/BufferProvider.d.ts +24 -0
- package/src/engine/sound/sopra/asset/BufferProvider.d.ts.map +1 -0
- package/src/engine/sound/sopra/asset/BufferProvider.js +29 -0
- package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts +31 -0
- package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts.map +1 -0
- package/src/engine/sound/sopra/asset/StubBufferProvider.js +58 -0
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts +83 -0
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/BusDefinition.js +142 -0
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.js +54 -0
- package/src/engine/sound/sopra/definition/DuckingRule.d.ts +71 -0
- package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/DuckingRule.js +106 -0
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.js +31 -0
- package/src/engine/sound/sopra/definition/EventDescription.d.ts +132 -0
- package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/EventDescription.js +259 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +71 -0
- package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts +51 -0
- package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/MixerSnapshot.js +83 -0
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.js +39 -0
- package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts +72 -0
- package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/ParameterDefinition.js +117 -0
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.js +31 -0
- package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts +14 -0
- package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/SopraPanningModel.js +20 -0
- package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts +10 -0
- package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/VoiceStealMode.js +18 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts +93 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +109 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts +80 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +181 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +74 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts +34 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +100 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +101 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +230 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.js +54 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts +103 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +191 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.js +39 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts +40 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +91 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.js +42 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts +44 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +77 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.js +27 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +65 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +131 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts +17 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.js +41 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +24 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +24 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +70 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +120 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.js +31 -0
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +74 -0
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/EqEffect.js +128 -0
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js +29 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +49 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +101 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts +18 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts.map +1 -0
- package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js +25 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +31 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -0
- package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +106 -0
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts +79 -0
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/BusGraph.js +227 -0
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts +144 -0
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/EventInstance.js +579 -0
- package/src/engine/sound/sopra/runtime/ParameterStore.d.ts +42 -0
- package/src/engine/sound/sopra/runtime/ParameterStore.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/ParameterStore.js +98 -0
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts +42 -0
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/SopraPlaybackContext.js +68 -0
- package/src/engine/sound/sopra/runtime/Voice.d.ts +67 -0
- package/src/engine/sound/sopra/runtime/Voice.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/Voice.js +145 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.d.ts +38 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.js +136 -0
- package/src/engine/sound/sopra/runtime/VoicePool.d.ts +12 -0
- package/src/engine/sound/sopra/runtime/VoicePool.d.ts.map +1 -0
- package/src/engine/sound/sopra/runtime/VoicePool.js +17 -0
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +11 -0
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -0
- package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +42 -0
- package/src/engine/sound/sopra/serialization/sopraJSON.d.ts +33 -0
- package/src/engine/sound/sopra/serialization/sopraJSON.d.ts.map +1 -0
- package/src/engine/sound/sopra/serialization/sopraJSON.js +99 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +27 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -0
- package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +49 -0
- package/src/engine/sound/sopra/util/MockAudioContext.d.ts +74 -0
- package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -0
- package/src/engine/sound/sopra/util/MockAudioContext.js +215 -0
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +15 -0
- package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -0
- package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +34 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -0
- package/src/engine/sound/sopra/util/fadeOutAndStop.js +60 -0
- package/src/engine/sound/volume2dB.d.ts +1 -1
- package/src/engine/sound/volume2dB.d.ts.map +1 -1
- package/src/engine/sound/volume2dB.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/sampling/v3_orthonormal_matrix_from_normal.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/ray_shapes.d.ts +0 -66
- package/src/engine/physics/narrowphase/ray_shapes.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/ray_shapes.js +0 -187
- package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts +0 -23
- package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundEmitterChannel.js +0 -32
- package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts +0 -18
- package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts.map +0 -1
- package/src/engine/sound/ecs/emitter/SoundTrackNodes.js +0 -18
- package/src/engine/sound/sopra/AbstractAudioClip.d.ts +0 -26
- package/src/engine/sound/sopra/AbstractAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/AbstractAudioClip.js +0 -29
- package/src/engine/sound/sopra/ContainerAudioClip.d.ts +0 -12
- package/src/engine/sound/sopra/ContainerAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/ContainerAudioClip.js +0 -13
- package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts +0 -12
- package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/RandomContainerAudioClip.js +0 -15
- package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts +0 -7
- package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/SequenceContainerAudioClip.js +0 -8
- package/src/engine/sound/sopra/SilenceAudioClip.d.ts +0 -13
- package/src/engine/sound/sopra/SilenceAudioClip.d.ts.map +0 -1
- package/src/engine/sound/sopra/SilenceAudioClip.js +0 -15
- /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
|
-
*
|
|
83
|
-
* @
|
|
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
|
-
|
|
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}
|
|
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
|
-
|
|
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":"
|
|
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
|
-
*
|
|
116
|
-
* @
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
* @
|
|
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
|
-
|
|
439
|
-
if (this.
|
|
440
|
-
|
|
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
|
-
|
|
482
|
-
|
|
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
|
|