@woosh/meep-engine 2.155.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 (475) 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_orthonormal_matrix_from_normal.d.ts.map +1 -0
  125. package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.js +1 -1
  126. package/src/core/graph/coloring/colorizeGraph.js +2 -2
  127. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  128. package/src/core/graph/csr/CSRGraph.js +325 -319
  129. package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
  130. package/src/core/graph/layout/CircleLayout.js +8 -6
  131. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -1
  132. package/src/core/graph/metis/native/refine/compute_kway_params.js +139 -138
  133. package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -1
  134. package/src/core/graph/mn_graph_coarsen.js +4 -2
  135. package/src/core/graph/v2/NodeContainer.js +7 -7
  136. package/src/core/localization/LocalizationEngine.js +1 -1
  137. package/src/core/math/bell_membership_function.d.ts.map +1 -1
  138. package/src/core/math/bell_membership_function.js +3 -1
  139. package/src/core/math/complex/complex_add.d.ts +4 -4
  140. package/src/core/math/complex/complex_add.d.ts.map +1 -1
  141. package/src/core/math/complex/complex_add.js +3 -3
  142. package/src/core/math/complex/complex_div.d.ts +4 -4
  143. package/src/core/math/complex/complex_div.d.ts.map +1 -1
  144. package/src/core/math/complex/complex_div.js +3 -3
  145. package/src/core/math/complex/complex_mul.d.ts +4 -4
  146. package/src/core/math/complex/complex_mul.d.ts.map +1 -1
  147. package/src/core/math/complex/complex_mul.js +3 -3
  148. package/src/core/math/complex/complex_sub.d.ts +4 -4
  149. package/src/core/math/complex/complex_sub.d.ts.map +1 -1
  150. package/src/core/math/complex/complex_sub.js +3 -3
  151. package/src/core/math/idct_1d.d.ts +4 -4
  152. package/src/core/math/idct_1d.d.ts.map +1 -1
  153. package/src/core/math/idct_1d.js +3 -3
  154. package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
  155. package/src/core/math/noise/create_simplex_noise_2d.js +4 -2
  156. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  157. package/src/core/math/noise/sdnoise.js +12 -9
  158. package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
  159. package/src/core/math/physics/mie/compute_bhmie_optical_properties.js +94 -50
  160. package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts +3 -6
  161. package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts.map +1 -1
  162. package/src/core/math/physics/mie/lorenz_mie_coefs.js +180 -157
  163. package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts +3 -4
  164. package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts.map +1 -1
  165. package/src/core/math/physics/mie/mie_ab_to_optical_properties.js +47 -21
  166. package/src/core/math/random/randomIntegerBetween.d.ts.map +1 -1
  167. package/src/core/math/random/randomIntegerBetween.js +4 -1
  168. package/src/core/math/solveCubic.d.ts.map +1 -1
  169. package/src/core/math/solveCubic.js +95 -82
  170. package/src/core/math/spline/computeCatmullRomSplineUniformDistance.d.ts.map +1 -1
  171. package/src/core/math/spline/computeCatmullRomSplineUniformDistance.js +13 -0
  172. package/src/core/math/statistics/softmax.js +1 -1
  173. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +1 -0
  174. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  175. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +2 -1
  176. package/src/core/model/node-graph/visual/NodeVisualData.js +1 -1
  177. package/src/core/model/object/ImmutableObjectPool.d.ts +7 -0
  178. package/src/core/model/object/ImmutableObjectPool.d.ts.map +1 -1
  179. package/src/core/model/object/ImmutableObjectPool.js +20 -10
  180. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts.map +1 -1
  181. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +39 -2
  182. package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
  183. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -0
  184. package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
  185. package/src/core/parser/simple/readHexToken.js +6 -0
  186. package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
  187. package/src/core/primitives/numbers/number_pretty_print.js +4 -1
  188. package/src/core/primitives/strings/string_jaro_winkler.js +1 -1
  189. package/src/core/process/CompositeProcess.js +1 -1
  190. package/src/core/process/action/AsynchronousDelayAction.d.ts.map +1 -1
  191. package/src/core/process/action/AsynchronousDelayAction.js +3 -0
  192. package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
  193. package/src/core/process/executor/ConcurrentExecutor.js +3 -2
  194. package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
  195. package/src/core/process/task/util/randomCountTask.js +3 -1
  196. package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
  197. package/src/core/process/undo/ActionProcessor.js +5 -3
  198. package/src/core/process/worker/WorkerBuilder.js +3 -3
  199. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  200. package/src/engine/animation/curve/AnimationCurve.js +4 -2
  201. package/src/engine/control/first-person/DESIGN.md +1 -1
  202. package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts +55 -0
  203. package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts.map +1 -0
  204. package/src/engine/control/first-person/FirstPersonMotionPhase.js +134 -0
  205. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +23 -2
  206. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  207. package/src/engine/control/first-person/FirstPersonPlayerController.js +1 -1
  208. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +168 -0
  209. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  210. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +115 -0
  211. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +71 -0
  212. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  213. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +255 -55
  214. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +82 -43
  215. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  216. package/src/engine/control/first-person/abilities/LedgeGrab.js +405 -213
  217. package/src/engine/control/first-person/abilities/Mantle.d.ts +6 -0
  218. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
  219. package/src/engine/control/first-person/abilities/Mantle.js +104 -45
  220. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts +61 -0
  221. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts.map +1 -0
  222. package/src/engine/control/first-person/abilities/ScrambleUp.js +182 -0
  223. package/src/engine/control/first-person/math/jumpDynamics.d.ts +84 -0
  224. package/src/engine/control/first-person/math/jumpDynamics.d.ts.map +1 -0
  225. package/src/engine/control/first-person/math/jumpDynamics.js +108 -0
  226. package/src/engine/control/first-person/prototype_first_person_controller.js +45 -1
  227. package/src/engine/graphics/camera/testClippingPlaneComputation.js +1 -1
  228. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +1 -1
  229. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
  230. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +1 -1
  231. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
  232. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  233. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +1 -1
  234. package/src/engine/graphics/shadows/testShadowMapRendering.js +1 -1
  235. package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +208 -0
  236. package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +364 -0
  237. package/src/engine/physics/PLAN.md +6 -5
  238. package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
  239. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  240. package/src/engine/physics/constraint/solve_constraints.js +147 -33
  241. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  242. package/src/engine/physics/ecs/PhysicsSystem.js +1750 -1747
  243. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  244. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -1
  245. package/src/engine/physics/gjk/gjk_epa_penetration.js +5 -9
  246. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  247. package/src/engine/physics/narrowphase/convex_convex_manifold.js +22 -25
  248. package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -13
  249. package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
  250. package/src/engine/physics/narrowphase/convex_decomposition.js +61 -65
  251. package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -1
  252. package/src/engine/physics/narrowphase/mesh_convex_hull.js +13 -8
  253. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  254. package/src/engine/physics/narrowphase/refine_ray_concave.js +5 -3
  255. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
  256. package/src/engine/physics/narrowphase/refine_ray_hit.js +81 -78
  257. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  258. package/src/engine/sound/SoundEngine.js +28 -0
  259. package/src/engine/sound/dB2Volume.d.ts +1 -1
  260. package/src/engine/sound/dB2Volume.d.ts.map +1 -1
  261. package/src/engine/sound/dB2Volume.js +1 -1
  262. package/src/engine/sound/ecs/SoundController.d.ts +4 -0
  263. package/src/engine/sound/ecs/SoundController.d.ts.map +1 -1
  264. package/src/engine/sound/ecs/SoundController.js +4 -0
  265. package/src/engine/sound/ecs/SoundControllerSystem.d.ts +5 -0
  266. package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
  267. package/src/engine/sound/ecs/SoundControllerSystem.js +5 -0
  268. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +69 -0
  269. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -0
  270. package/src/engine/sound/ecs/audio/AudioEmitter.js +83 -0
  271. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +97 -0
  272. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -0
  273. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +238 -0
  274. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +90 -0
  275. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -0
  276. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +324 -0
  277. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +59 -0
  278. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -0
  279. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +140 -0
  280. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts +16 -65
  281. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +1 -1
  282. package/src/engine/sound/ecs/emitter/SoundEmitter.js +19 -224
  283. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +26 -29
  284. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +1 -1
  285. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +168 -135
  286. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +36 -59
  287. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +1 -1
  288. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +154 -390
  289. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts +20 -23
  290. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +1 -1
  291. package/src/engine/sound/ecs/emitter/SoundTrack.js +34 -152
  292. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +993 -0
  293. package/src/engine/sound/sopra/README.md +643 -7
  294. package/src/engine/sound/sopra/SopraEngine.d.ts +229 -0
  295. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -0
  296. package/src/engine/sound/sopra/SopraEngine.js +423 -0
  297. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts +26 -0
  298. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts.map +1 -0
  299. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.js +71 -0
  300. package/src/engine/sound/sopra/asset/BufferProvider.d.ts +24 -0
  301. package/src/engine/sound/sopra/asset/BufferProvider.d.ts.map +1 -0
  302. package/src/engine/sound/sopra/asset/BufferProvider.js +29 -0
  303. package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts +31 -0
  304. package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts.map +1 -0
  305. package/src/engine/sound/sopra/asset/StubBufferProvider.js +58 -0
  306. package/src/engine/sound/sopra/definition/BusDefinition.d.ts +83 -0
  307. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -0
  308. package/src/engine/sound/sopra/definition/BusDefinition.js +142 -0
  309. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts +17 -0
  310. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts.map +1 -0
  311. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.js +54 -0
  312. package/src/engine/sound/sopra/definition/DuckingRule.d.ts +71 -0
  313. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -0
  314. package/src/engine/sound/sopra/definition/DuckingRule.js +106 -0
  315. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts +18 -0
  316. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts.map +1 -0
  317. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.js +31 -0
  318. package/src/engine/sound/sopra/definition/EventDescription.d.ts +132 -0
  319. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -0
  320. package/src/engine/sound/sopra/definition/EventDescription.js +259 -0
  321. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +17 -0
  322. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -0
  323. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +71 -0
  324. package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts +51 -0
  325. package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts.map +1 -0
  326. package/src/engine/sound/sopra/definition/MixerSnapshot.js +83 -0
  327. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts +18 -0
  328. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts.map +1 -0
  329. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.js +39 -0
  330. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts +72 -0
  331. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -0
  332. package/src/engine/sound/sopra/definition/ParameterDefinition.js +117 -0
  333. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts +18 -0
  334. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts.map +1 -0
  335. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.js +31 -0
  336. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts +14 -0
  337. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts.map +1 -0
  338. package/src/engine/sound/sopra/definition/SopraPanningModel.js +20 -0
  339. package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts +10 -0
  340. package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts.map +1 -0
  341. package/src/engine/sound/sopra/definition/VoiceStealMode.js +18 -0
  342. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts +93 -0
  343. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts.map +1 -0
  344. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +109 -0
  345. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts +80 -0
  346. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -0
  347. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +181 -0
  348. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts +17 -0
  349. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  350. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +74 -0
  351. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts +34 -0
  352. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -0
  353. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +100 -0
  354. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +101 -0
  355. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -0
  356. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +230 -0
  357. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts +17 -0
  358. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  359. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.js +54 -0
  360. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts +103 -0
  361. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -0
  362. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +191 -0
  363. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts +18 -0
  364. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts.map +1 -0
  365. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.js +39 -0
  366. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts +40 -0
  367. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts.map +1 -0
  368. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +91 -0
  369. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts +17 -0
  370. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  371. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.js +42 -0
  372. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts +44 -0
  373. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts.map +1 -0
  374. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +77 -0
  375. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts +18 -0
  376. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts.map +1 -0
  377. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.js +27 -0
  378. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +65 -0
  379. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -0
  380. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +131 -0
  381. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts +17 -0
  382. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  383. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.js +41 -0
  384. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +24 -0
  385. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -0
  386. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +24 -0
  387. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +70 -0
  388. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -0
  389. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +120 -0
  390. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts +18 -0
  391. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts.map +1 -0
  392. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.js +31 -0
  393. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +74 -0
  394. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -0
  395. package/src/engine/sound/sopra/definition/effect/EqEffect.js +128 -0
  396. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts +18 -0
  397. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts.map +1 -0
  398. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js +29 -0
  399. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +49 -0
  400. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -0
  401. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +101 -0
  402. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts +18 -0
  403. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts.map +1 -0
  404. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js +25 -0
  405. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +31 -0
  406. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -0
  407. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +106 -0
  408. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +79 -0
  409. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -0
  410. package/src/engine/sound/sopra/runtime/BusGraph.js +227 -0
  411. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +144 -0
  412. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -0
  413. package/src/engine/sound/sopra/runtime/EventInstance.js +579 -0
  414. package/src/engine/sound/sopra/runtime/ParameterStore.d.ts +42 -0
  415. package/src/engine/sound/sopra/runtime/ParameterStore.d.ts.map +1 -0
  416. package/src/engine/sound/sopra/runtime/ParameterStore.js +98 -0
  417. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts +42 -0
  418. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts.map +1 -0
  419. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.js +68 -0
  420. package/src/engine/sound/sopra/runtime/Voice.d.ts +67 -0
  421. package/src/engine/sound/sopra/runtime/Voice.d.ts.map +1 -0
  422. package/src/engine/sound/sopra/runtime/Voice.js +145 -0
  423. package/src/engine/sound/sopra/runtime/VoiceManager.d.ts +38 -0
  424. package/src/engine/sound/sopra/runtime/VoiceManager.d.ts.map +1 -0
  425. package/src/engine/sound/sopra/runtime/VoiceManager.js +136 -0
  426. package/src/engine/sound/sopra/runtime/VoicePool.d.ts +12 -0
  427. package/src/engine/sound/sopra/runtime/VoicePool.d.ts.map +1 -0
  428. package/src/engine/sound/sopra/runtime/VoicePool.js +17 -0
  429. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +11 -0
  430. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -0
  431. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +42 -0
  432. package/src/engine/sound/sopra/serialization/sopraJSON.d.ts +33 -0
  433. package/src/engine/sound/sopra/serialization/sopraJSON.d.ts.map +1 -0
  434. package/src/engine/sound/sopra/serialization/sopraJSON.js +99 -0
  435. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +27 -0
  436. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -0
  437. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +49 -0
  438. package/src/engine/sound/sopra/util/MockAudioContext.d.ts +74 -0
  439. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -0
  440. package/src/engine/sound/sopra/util/MockAudioContext.js +215 -0
  441. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +15 -0
  442. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -0
  443. package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -0
  444. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +34 -0
  445. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -0
  446. package/src/engine/sound/sopra/util/fadeOutAndStop.js +60 -0
  447. package/src/engine/sound/volume2dB.d.ts +1 -1
  448. package/src/engine/sound/volume2dB.d.ts.map +1 -1
  449. package/src/engine/sound/volume2dB.js +1 -1
  450. package/src/engine/graphics/sh3/path_tracer/sampling/v3_orthonormal_matrix_from_normal.d.ts.map +0 -1
  451. package/src/engine/physics/narrowphase/ray_shapes.d.ts +0 -66
  452. package/src/engine/physics/narrowphase/ray_shapes.d.ts.map +0 -1
  453. package/src/engine/physics/narrowphase/ray_shapes.js +0 -187
  454. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts +0 -23
  455. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts.map +0 -1
  456. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.js +0 -32
  457. package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts +0 -18
  458. package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts.map +0 -1
  459. package/src/engine/sound/ecs/emitter/SoundTrackNodes.js +0 -18
  460. package/src/engine/sound/sopra/AbstractAudioClip.d.ts +0 -26
  461. package/src/engine/sound/sopra/AbstractAudioClip.d.ts.map +0 -1
  462. package/src/engine/sound/sopra/AbstractAudioClip.js +0 -29
  463. package/src/engine/sound/sopra/ContainerAudioClip.d.ts +0 -12
  464. package/src/engine/sound/sopra/ContainerAudioClip.d.ts.map +0 -1
  465. package/src/engine/sound/sopra/ContainerAudioClip.js +0 -13
  466. package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts +0 -12
  467. package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts.map +0 -1
  468. package/src/engine/sound/sopra/RandomContainerAudioClip.js +0 -15
  469. package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts +0 -7
  470. package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts.map +0 -1
  471. package/src/engine/sound/sopra/SequenceContainerAudioClip.js +0 -8
  472. package/src/engine/sound/sopra/SilenceAudioClip.d.ts +0 -13
  473. package/src/engine/sound/sopra/SilenceAudioClip.d.ts.map +0 -1
  474. package/src/engine/sound/sopra/SilenceAudioClip.js +0 -15
  475. /package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.d.ts +0 -0
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Smallest non-zero gain to ramp toward. Ramping a GainNode to exactly 0 (especially with an
3
+ * exponential ramp) is the classic WebAudio click/throw trap, so we always target this epsilon and
4
+ * stop the source just after the gain has effectively reached silence.
5
+ * @type {number}
6
+ */
7
+ export const FADE_EPSILON = 0.0001;
8
+
9
+ /**
10
+ * The ONE click-safe gain ramp. Anchor-then-ramp: pin the current value at the ramp start so the
11
+ * origin is well-defined and re-trigger-safe (D1). Prefers `cancelAndHoldAtTime` but FEATURE-DETECTS
12
+ * it (unimplemented in Firefox) and falls back to the portable `cancelScheduledValues` +
13
+ * `setValueAtTime` idiom. Linear-ramps to `targetLinear` (use {@link FADE_EPSILON}, never 0, for fades
14
+ * to silence). Shared by every fade so no call site hand-rolls one.
15
+ *
16
+ * @param {AudioParam} param the gain param to ramp
17
+ * @param {number} targetLinear target linear gain
18
+ * @param {number} duration ramp duration in seconds
19
+ * @param {BaseAudioContext} ctx
20
+ * @param {number} [startAfter=0] delay before the ramp begins, in seconds
21
+ * @returns {number} the absolute context time at which the ramp completes
22
+ */
23
+ export function rampGain(param, targetLinear, duration, ctx, startAfter = 0) {
24
+ const startTime = ctx.currentTime + startAfter;
25
+ const endTime = startTime + duration;
26
+
27
+ const currentValue = param.value;
28
+
29
+ if (typeof param.cancelAndHoldAtTime === "function") {
30
+ // holds the current automation value at startTime, discarding later scheduled events
31
+ param.cancelAndHoldAtTime(startTime);
32
+ } else {
33
+ // portable fallback (Firefox): clear future events then explicitly anchor the value
34
+ param.cancelScheduledValues(startTime);
35
+ param.setValueAtTime(currentValue, startTime);
36
+ }
37
+
38
+ param.linearRampToValueAtTime(targetLinear, endTime);
39
+
40
+ return endTime;
41
+ }
42
+
43
+ /**
44
+ * Click-safe fade-out of a single gain that also stops a source node once silent. Used for node-level
45
+ * fades; EventInstance fades use {@link rampGain} directly on its instance gain.
46
+ *
47
+ * @param {GainNode} gainNode the gain to fade
48
+ * @param {AudioScheduledSourceNode|null} source source to stop once silent (may be null)
49
+ * @param {BaseAudioContext} ctx
50
+ * @param {number} duration fade duration in seconds
51
+ * @param {number} [startAfter=0] delay before the fade begins, in seconds
52
+ */
53
+ export function fadeOutAndStop(gainNode, source, ctx, duration, startAfter = 0) {
54
+ const endTime = rampGain(gainNode.gain, FADE_EPSILON, duration, ctx, startAfter);
55
+
56
+ if (source !== null) {
57
+ // stop a hair after silence so we never cut a still-audible tail (no click)
58
+ source.stop(endTime + 0.01);
59
+ }
60
+ }
@@ -3,5 +3,5 @@
3
3
  * @param {number} volume
4
4
  * @returns {number}
5
5
  */
6
- declare function volume2dB(volume: number): number;
6
+ export function volume2dB(volume: number): number;
7
7
  //# sourceMappingURL=volume2dB.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"volume2dB.d.ts","sourceRoot":"","sources":["../../../../src/engine/sound/volume2dB.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,mCAHW,MAAM,GACJ,MAAM,CAIlB"}
1
+ {"version":3,"file":"volume2dB.d.ts","sourceRoot":"","sources":["../../../../src/engine/sound/volume2dB.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kCAHW,MAAM,GACJ,MAAM,CAIlB"}
@@ -3,6 +3,6 @@
3
3
  * @param {number} volume
4
4
  * @returns {number}
5
5
  */
6
- function volume2dB(volume) {
6
+ export function volume2dB(volume) {
7
7
  return 20 * Math.log10(volume);
8
8
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"v3_orthonormal_matrix_from_normal.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/sh3/path_tracer/sampling/v3_orthonormal_matrix_from_normal.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,uDANW,MAAM,EAAE,cACR,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,QAsChB"}
@@ -1,66 +0,0 @@
1
- /**
2
- * # Local-frame ray ↔ primitive intersections (raycast narrowphase)
3
- *
4
- * Each function intersects a ray, **expressed in the shape's local frame**,
5
- * against a canonical primitive at the origin (sphere at the origin; box
6
- * axis-aligned spanning `[-h, +h]`; capsule along the local Y axis). They
7
- * return the hit distance `t` along the ray (`Infinity` on a miss) and write
8
- * the **local** outward surface normal (unit) into `outNormal[0..2]`.
9
- *
10
- * The ray-narrowphase dispatch transforms the world ray into the body's local
11
- * frame once (rotate by the inverse body rotation — a unit direction stays
12
- * unit, so `t` is preserved), calls the matching primitive, then rotates the
13
- * returned local normal back to world. Keeping the primitives canonical lets
14
- * the box and capsule tests be axis-aligned (cheap slab / cylinder math) and
15
- * shares a single transform across them.
16
- *
17
- * Conventions:
18
- * - the ray direction is unit length (the caller guarantees it);
19
- * - the first surface crossing at or after the origin within `tMax` is
20
- * returned; a ray starting inside the shape returns its exit crossing;
21
- * - the normal is the geometric outward surface normal at the hit.
22
- *
23
- * @author Alex Goldring
24
- * @copyright Company Named Limited (c) 2026
25
- */
26
- /**
27
- * Ray vs a sphere of radius `r` centred at the local origin.
28
- *
29
- * @param {Float64Array} outNormal length-3, written on hit
30
- * @param {number} ox @param {number} oy @param {number} oz ray origin (local)
31
- * @param {number} dx @param {number} dy @param {number} dz ray dir (local, unit)
32
- * @param {number} tMax
33
- * @param {number} r sphere radius
34
- * @returns {number} hit distance, or `Infinity` on miss
35
- */
36
- export function ray_sphere_local(outNormal: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, tMax: number, r: number): number;
37
- /**
38
- * Ray vs an axis-aligned box spanning `[-hx,hx] × [-hy,hy] × [-hz,hz]` at the
39
- * local origin (the canonical pose of {@link BoxShape3D}). Slab method, with
40
- * the entry (or, origin-inside, exit) face's outward normal.
41
- *
42
- * @param {Float64Array} outNormal length-3, written on hit
43
- * @param {number} ox @param {number} oy @param {number} oz ray origin (local)
44
- * @param {number} dx @param {number} dy @param {number} dz ray dir (local, unit)
45
- * @param {number} tMax
46
- * @param {number} hx @param {number} hy @param {number} hz half-extents
47
- * @returns {number} hit distance, or `Infinity` on miss
48
- */
49
- export function ray_box_local(outNormal: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, tMax: number, hx: number, hy: number, hz: number): number;
50
- /**
51
- * Ray vs a capsule along the local Y axis: a cylinder of radius `r` over
52
- * `y ∈ [−hh, hh]` capped by hemispheres of radius `r` at `(0, ±hh, 0)` — the
53
- * canonical pose of {@link CapsuleShape3D} (`hh = height/2`). Tests the
54
- * infinite cylinder (clamped to the segment) and the two cap spheres, taking
55
- * the nearest valid crossing.
56
- *
57
- * @param {Float64Array} outNormal length-3, written on hit
58
- * @param {number} ox @param {number} oy @param {number} oz ray origin (local)
59
- * @param {number} dx @param {number} dy @param {number} dz ray dir (local, unit)
60
- * @param {number} tMax
61
- * @param {number} r capsule radius
62
- * @param {number} hh half-height of the cylindrical section (`height/2`)
63
- * @returns {number} hit distance, or `Infinity` on miss
64
- */
65
- export function ray_capsule_local(outNormal: Float64Array, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, tMax: number, r: number, hh: number): number;
66
- //# sourceMappingURL=ray_shapes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ray_shapes.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/ray_shapes.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;;;;GASG;AACH,4CAPW,YAAY,MACZ,MAAM,MAAa,MAAM,MAAa,MAAM,MAC5C,MAAM,MAAa,MAAM,MAAa,MAAM,QAC5C,MAAM,KACN,MAAM,GACJ,MAAM,CAiBlB;AAED;;;;;;;;;;;GAWG;AACH,yCAPW,YAAY,MACZ,MAAM,MAAa,MAAM,MAAa,MAAM,MAC5C,MAAM,MAAa,MAAM,MAAa,MAAM,QAC5C,MAAM,MACN,MAAM,MAAa,MAAM,MAAa,MAAM,GAC1C,MAAM,CA+ClB;AAED;;;;;;;;;;;;;;GAcG;AACH,6CARW,YAAY,MACZ,MAAM,MAAa,MAAM,MAAa,MAAM,MAC5C,MAAM,MAAa,MAAM,MAAa,MAAM,QAC5C,MAAM,KACN,MAAM,MACN,MAAM,GACJ,MAAM,CA6DlB"}
@@ -1,187 +0,0 @@
1
- /**
2
- * # Local-frame ray ↔ primitive intersections (raycast narrowphase)
3
- *
4
- * Each function intersects a ray, **expressed in the shape's local frame**,
5
- * against a canonical primitive at the origin (sphere at the origin; box
6
- * axis-aligned spanning `[-h, +h]`; capsule along the local Y axis). They
7
- * return the hit distance `t` along the ray (`Infinity` on a miss) and write
8
- * the **local** outward surface normal (unit) into `outNormal[0..2]`.
9
- *
10
- * The ray-narrowphase dispatch transforms the world ray into the body's local
11
- * frame once (rotate by the inverse body rotation — a unit direction stays
12
- * unit, so `t` is preserved), calls the matching primitive, then rotates the
13
- * returned local normal back to world. Keeping the primitives canonical lets
14
- * the box and capsule tests be axis-aligned (cheap slab / cylinder math) and
15
- * shares a single transform across them.
16
- *
17
- * Conventions:
18
- * - the ray direction is unit length (the caller guarantees it);
19
- * - the first surface crossing at or after the origin within `tMax` is
20
- * returned; a ray starting inside the shape returns its exit crossing;
21
- * - the normal is the geometric outward surface normal at the hit.
22
- *
23
- * @author Alex Goldring
24
- * @copyright Company Named Limited (c) 2026
25
- */
26
-
27
- /**
28
- * Ray vs a sphere of radius `r` centred at the local origin.
29
- *
30
- * @param {Float64Array} outNormal length-3, written on hit
31
- * @param {number} ox @param {number} oy @param {number} oz ray origin (local)
32
- * @param {number} dx @param {number} dy @param {number} dz ray dir (local, unit)
33
- * @param {number} tMax
34
- * @param {number} r sphere radius
35
- * @returns {number} hit distance, or `Infinity` on miss
36
- */
37
- export function ray_sphere_local(outNormal, ox, oy, oz, dx, dy, dz, tMax, r) {
38
- // |o + t·d|² = r², d unit → t² + 2(o·d)t + (|o|² − r²) = 0.
39
- const b = ox * dx + oy * dy + oz * dz;
40
- const c = ox * ox + oy * oy + oz * oz - r * r;
41
- const disc = b * b - c;
42
- if (disc < 0) return Infinity;
43
- const sq = Math.sqrt(disc);
44
- let t = -b - sq; // near root (entry)
45
- if (t < 0) t = -b + sq; // origin inside the sphere → far root (exit)
46
- if (t < 0 || t > tMax) return Infinity;
47
- const inv = 1 / r;
48
- outNormal[0] = (ox + dx * t) * inv;
49
- outNormal[1] = (oy + dy * t) * inv;
50
- outNormal[2] = (oz + dz * t) * inv;
51
- return t;
52
- }
53
-
54
- /**
55
- * Ray vs an axis-aligned box spanning `[-hx,hx] × [-hy,hy] × [-hz,hz]` at the
56
- * local origin (the canonical pose of {@link BoxShape3D}). Slab method, with
57
- * the entry (or, origin-inside, exit) face's outward normal.
58
- *
59
- * @param {Float64Array} outNormal length-3, written on hit
60
- * @param {number} ox @param {number} oy @param {number} oz ray origin (local)
61
- * @param {number} dx @param {number} dy @param {number} dz ray dir (local, unit)
62
- * @param {number} tMax
63
- * @param {number} hx @param {number} hy @param {number} hz half-extents
64
- * @returns {number} hit distance, or `Infinity` on miss
65
- */
66
- export function ray_box_local(outNormal, ox, oy, oz, dx, dy, dz, tMax, hx, hy, hz) {
67
- let tmin = -Infinity, tmax = Infinity;
68
- let enterAxis = 0, enterSign = 0, exitAxis = 0, exitSign = 0;
69
-
70
- // X slab.
71
- if (dx !== 0) {
72
- const inv = 1 / dx;
73
- let tn = (-hx - ox) * inv, tf = (hx - ox) * inv, nsign = -1;
74
- if (tn > tf) { const tmp = tn; tn = tf; tf = tmp; nsign = 1; }
75
- if (tn > tmin) { tmin = tn; enterAxis = 0; enterSign = nsign; }
76
- if (tf < tmax) { tmax = tf; exitAxis = 0; exitSign = -nsign; }
77
- } else if (ox < -hx || ox > hx) {
78
- return Infinity;
79
- }
80
- // Y slab.
81
- if (dy !== 0) {
82
- const inv = 1 / dy;
83
- let tn = (-hy - oy) * inv, tf = (hy - oy) * inv, nsign = -1;
84
- if (tn > tf) { const tmp = tn; tn = tf; tf = tmp; nsign = 1; }
85
- if (tn > tmin) { tmin = tn; enterAxis = 1; enterSign = nsign; }
86
- if (tf < tmax) { tmax = tf; exitAxis = 1; exitSign = -nsign; }
87
- } else if (oy < -hy || oy > hy) {
88
- return Infinity;
89
- }
90
- // Z slab.
91
- if (dz !== 0) {
92
- const inv = 1 / dz;
93
- let tn = (-hz - oz) * inv, tf = (hz - oz) * inv, nsign = -1;
94
- if (tn > tf) { const tmp = tn; tn = tf; tf = tmp; nsign = 1; }
95
- if (tn > tmin) { tmin = tn; enterAxis = 2; enterSign = nsign; }
96
- if (tf < tmax) { tmax = tf; exitAxis = 2; exitSign = -nsign; }
97
- } else if (oz < -hz || oz > hz) {
98
- return Infinity;
99
- }
100
-
101
- if (tmax < tmin || tmax < 0) return Infinity;
102
-
103
- let t, axis, sign;
104
- if (tmin >= 0) { t = tmin; axis = enterAxis; sign = enterSign; }
105
- else { t = tmax; axis = exitAxis; sign = exitSign; } // origin inside the box
106
-
107
- if (t > tMax) return Infinity;
108
- outNormal[0] = 0; outNormal[1] = 0; outNormal[2] = 0;
109
- outNormal[axis] = sign;
110
- return t;
111
- }
112
-
113
- /**
114
- * Ray vs a capsule along the local Y axis: a cylinder of radius `r` over
115
- * `y ∈ [−hh, hh]` capped by hemispheres of radius `r` at `(0, ±hh, 0)` — the
116
- * canonical pose of {@link CapsuleShape3D} (`hh = height/2`). Tests the
117
- * infinite cylinder (clamped to the segment) and the two cap spheres, taking
118
- * the nearest valid crossing.
119
- *
120
- * @param {Float64Array} outNormal length-3, written on hit
121
- * @param {number} ox @param {number} oy @param {number} oz ray origin (local)
122
- * @param {number} dx @param {number} dy @param {number} dz ray dir (local, unit)
123
- * @param {number} tMax
124
- * @param {number} r capsule radius
125
- * @param {number} hh half-height of the cylindrical section (`height/2`)
126
- * @returns {number} hit distance, or `Infinity` on miss
127
- */
128
- export function ray_capsule_local(outNormal, ox, oy, oz, dx, dy, dz, tMax, r, hh) {
129
- let best = Infinity;
130
- let nx = 0, ny = 0, nz = 0;
131
- const r2 = r * r;
132
- const inv_r = 1 / r;
133
-
134
- // --- Cylinder side (infinite cylinder about Y, projected to XZ). ---
135
- const a = dx * dx + dz * dz;
136
- if (a > 1e-12) {
137
- const b = ox * dx + oz * dz;
138
- const c = ox * ox + oz * oz - r2;
139
- const disc = b * b - a * c;
140
- if (disc >= 0) {
141
- const sq = Math.sqrt(disc);
142
- const inv_a = 1 / a;
143
- // Both roots; the smaller non-negative one whose hit lies on the
144
- // cylindrical section is the side contact.
145
- const roots = (-b - sq) * inv_a;
146
- const rootf = (-b + sq) * inv_a;
147
- for (let i = 0; i < 2; i++) {
148
- const t = i === 0 ? roots : rootf;
149
- if (t < 0 || t >= best || t > tMax) continue;
150
- const y = oy + dy * t;
151
- if (y < -hh || y > hh) continue; // off the cylinder, onto a cap
152
- best = t;
153
- const px = ox + dx * t, pz = oz + dz * t;
154
- nx = px * inv_r; ny = 0; nz = pz * inv_r;
155
- break; // roots is the nearer; if it qualified we're done
156
- }
157
- }
158
- }
159
-
160
- // --- Cap spheres at (0, ±hh, 0), each valid only on its outer hemisphere. ---
161
- for (let cap = 0; cap < 2; cap++) {
162
- const cy = cap === 0 ? hh : -hh;
163
- const oyc = oy - cy;
164
- const bb = ox * dx + oyc * dy + oz * dz;
165
- const cc = ox * ox + oyc * oyc + oz * oz - r2;
166
- const disc = bb * bb - cc;
167
- if (disc < 0) continue;
168
- const sq = Math.sqrt(disc);
169
- const tn = -bb - sq, tf = -bb + sq;
170
- for (let i = 0; i < 2; i++) {
171
- const t = i === 0 ? tn : tf;
172
- if (t < 0 || t >= best || t > tMax) continue;
173
- const hy = oy + dy * t;
174
- // Only the hemisphere beyond the segment end belongs to this cap.
175
- if (cap === 0 ? hy < hh : hy > -hh) continue;
176
- best = t;
177
- nx = (ox + dx * t) * inv_r;
178
- ny = (hy - cy) * inv_r;
179
- nz = (oz + dz * t) * inv_r;
180
- break;
181
- }
182
- }
183
-
184
- if (best === Infinity) return Infinity;
185
- outNormal[0] = nx; outNormal[1] = ny; outNormal[2] = nz;
186
- return best;
187
- }
@@ -1,23 +0,0 @@
1
- export class SoundEmitterChannel {
2
- /**
3
- * Unique name identifying the channel
4
- * @type {string}
5
- */
6
- id: string;
7
- /**
8
- * Output to which all sound should be attached to
9
- * @type {GainNode}
10
- */
11
- sink: GainNode;
12
- /**
13
- *
14
- * @param {number} v
15
- */
16
- set volume(arg: number);
17
- /**
18
- *
19
- * @return {number}
20
- */
21
- get volume(): number;
22
- }
23
- //# sourceMappingURL=SoundEmitterChannel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SoundEmitterChannel.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterChannel.js"],"names":[],"mappings":"AAAA;IAEQ;;;OAGG;IACH,IAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,MAFU,QAAQ,CAEF;IAGpB;;;OAGG;IACH,wBAGC;IAED;;;OAGG;IACH,qBAEC;CACJ"}
@@ -1,32 +0,0 @@
1
- export class SoundEmitterChannel {
2
- constructor() {
3
- /**
4
- * Unique name identifying the channel
5
- * @type {string}
6
- */
7
- this.id = '';
8
-
9
- /**
10
- * Output to which all sound should be attached to
11
- * @type {GainNode}
12
- */
13
- this.sink = null;
14
- }
15
-
16
- /**
17
- *
18
- * @param {number} v
19
- */
20
- set volume(v) {
21
- // TODO consider if direct writing to .value is handled well on all supported platforms
22
- this.sink.gain.value = v;
23
- }
24
-
25
- /**
26
- *
27
- * @return {number}
28
- */
29
- get volume() {
30
- return this.sink.gain.value;
31
- }
32
- }
@@ -1,18 +0,0 @@
1
- export class SoundTrackNodes {
2
- /**
3
- *
4
- * @param {AudioContext} context
5
- */
6
- constructor(context: AudioContext);
7
- /**
8
- *
9
- * @type {AudioBufferSourceNode}
10
- */
11
- source: AudioBufferSourceNode;
12
- /**
13
- *
14
- * @type {GainNode}
15
- */
16
- volume: GainNode;
17
- }
18
- //# sourceMappingURL=SoundTrackNodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SoundTrackNodes.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundTrackNodes.js"],"names":[],"mappings":"AAAA;IACI;;;OAGG;IACH,qBAFW,YAAY,EAatB;IAVG;;;OAGG;IACH,QAFU,qBAAqB,CAEb;IAClB;;;OAGG;IACH,QAFU,QAAQ,CAEgB;CAEzC"}
@@ -1,18 +0,0 @@
1
- export class SoundTrackNodes {
2
- /**
3
- *
4
- * @param {AudioContext} context
5
- */
6
- constructor(context) {
7
- /**
8
- *
9
- * @type {AudioBufferSourceNode}
10
- */
11
- this.source = null;
12
- /**
13
- *
14
- * @type {GainNode}
15
- */
16
- this.volume = context.createGain();
17
- }
18
- }
@@ -1,26 +0,0 @@
1
- /**
2
- * Base class for all audio clips
3
- */
4
- export class AbstractAudioClip {
5
- /**
6
- * Parent clip, if set - will propagate various parameters to the child at play-time
7
- * @type {null}
8
- */
9
- parent: null;
10
- /**
11
- * Relative offset from source
12
- * @type {number}
13
- */
14
- pitch: number;
15
- /**
16
- * Gain offset in decibel
17
- * @type {number}
18
- */
19
- gain: number;
20
- /**
21
- * Output channel, if not set - will use a settings from parent
22
- * @type {null}
23
- */
24
- channel: null;
25
- }
26
- //# sourceMappingURL=AbstractAudioClip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractAudioClip.d.ts","sourceRoot":"","sources":["../../../../../src/engine/sound/sopra/AbstractAudioClip.js"],"names":[],"mappings":"AAAA;;GAEG;AACH;IACI;;;OAGG;IACH,QAFU,IAAI,CAEA;IAEd;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,SAFU,IAAI,CAEC;CAElB"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Base class for all audio clips
3
- */
4
- export class AbstractAudioClip {
5
- /**
6
- * Parent clip, if set - will propagate various parameters to the child at play-time
7
- * @type {null}
8
- */
9
- parent = null;
10
-
11
- /**
12
- * Relative offset from source
13
- * @type {number}
14
- */
15
- pitch = 0;
16
-
17
- /**
18
- * Gain offset in decibel
19
- * @type {number}
20
- */
21
- gain = 0;
22
-
23
- /**
24
- * Output channel, if not set - will use a settings from parent
25
- * @type {null}
26
- */
27
- channel = null;
28
-
29
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * Base container class
3
- */
4
- export class ContainerAudioClip extends AbstractAudioClip {
5
- /**
6
- *
7
- * @type {AbstractAudioClip[]}
8
- */
9
- children: AbstractAudioClip[];
10
- }
11
- import { AbstractAudioClip } from "./AbstractAudioClip.js";
12
- //# sourceMappingURL=ContainerAudioClip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContainerAudioClip.d.ts","sourceRoot":"","sources":["../../../../../src/engine/sound/sopra/ContainerAudioClip.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAEI;;;OAGG;IACH,UAFU,iBAAiB,EAAE,CAEhB;CAChB;kCAZiC,wBAAwB"}
@@ -1,13 +0,0 @@
1
- import { AbstractAudioClip } from "./AbstractAudioClip.js";
2
-
3
- /**
4
- * Base container class
5
- */
6
- export class ContainerAudioClip extends AbstractAudioClip {
7
-
8
- /**
9
- *
10
- * @type {AbstractAudioClip[]}
11
- */
12
- children = []
13
- }
@@ -1,12 +0,0 @@
1
- /**
2
- * When being played back, will play a random child element
3
- */
4
- export class RandomContainerAudioClip extends ContainerAudioClip {
5
- /**
6
- * Try not to repeat last X played sounds
7
- * @type {number}
8
- */
9
- avoid_repeating_last: number;
10
- }
11
- import { ContainerAudioClip } from "./ContainerAudioClip.js";
12
- //# sourceMappingURL=RandomContainerAudioClip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RandomContainerAudioClip.d.ts","sourceRoot":"","sources":["../../../../../src/engine/sound/sopra/RandomContainerAudioClip.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAGI;;;OAGG;IACH,sBAFU,MAAM,CAES;CAE5B;mCAdkC,yBAAyB"}
@@ -1,15 +0,0 @@
1
- import { ContainerAudioClip } from "./ContainerAudioClip.js";
2
-
3
- /**
4
- * When being played back, will play a random child element
5
- */
6
- export class RandomContainerAudioClip extends ContainerAudioClip {
7
-
8
-
9
- /**
10
- * Try not to repeat last X played sounds
11
- * @type {number}
12
- */
13
- avoid_repeating_last = 1;
14
-
15
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * Plays all children in sequence
3
- */
4
- export class SequenceContainerAudioClip extends ContainerAudioClip {
5
- }
6
- import { ContainerAudioClip } from "./ContainerAudioClip.js";
7
- //# sourceMappingURL=SequenceContainerAudioClip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SequenceContainerAudioClip.d.ts","sourceRoot":"","sources":["../../../../../src/engine/sound/sopra/SequenceContainerAudioClip.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;CAEC;mCAPkC,yBAAyB"}
@@ -1,8 +0,0 @@
1
- import { ContainerAudioClip } from "./ContainerAudioClip.js";
2
-
3
- /**
4
- * Plays all children in sequence
5
- */
6
- export class SequenceContainerAudioClip extends ContainerAudioClip {
7
-
8
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Represents dead air
3
- * @example useful for introducing pauses in sequences
4
- */
5
- export class SilenceAudioClip extends AbstractAudioClip {
6
- /**
7
- * Duration of the silence
8
- * @type {number}
9
- */
10
- duration: number;
11
- }
12
- import { AbstractAudioClip } from "./AbstractAudioClip.js";
13
- //# sourceMappingURL=SilenceAudioClip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SilenceAudioClip.d.ts","sourceRoot":"","sources":["../../../../../src/engine/sound/sopra/SilenceAudioClip.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IAEI;;;OAGG;IACH,UAFU,MAAM,CAEH;CAEhB;kCAdiC,wBAAwB"}
@@ -1,15 +0,0 @@
1
- import { AbstractAudioClip } from "./AbstractAudioClip.js";
2
-
3
- /**
4
- * Represents dead air
5
- * @example useful for introducing pauses in sequences
6
- */
7
- export class SilenceAudioClip extends AbstractAudioClip {
8
-
9
- /**
10
- * Duration of the silence
11
- * @type {number}
12
- */
13
- duration = 0;
14
-
15
- }