@woosh/meep-engine 3.45.0 → 3.47.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 (435) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  3. package/editor/actions/concrete/TransformModifyAction.js +10 -2
  4. package/editor/ecs/component/FieldDescriptor.js +15 -0
  5. package/editor/ecs/component/createObjectEditor.js +41 -12
  6. package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -1
  7. package/editor/ecs/component/editors/ecs/Transform64Editor.js +77 -70
  8. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  9. package/editor/tools/TransformToolV2.js +4 -0
  10. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  11. package/editor/tools/v2/TransformControls.js +7 -0
  12. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  13. package/editor/view/ecs/EntityEditor.js +4 -2
  14. package/package.json +1 -1
  15. package/src/core/assert.d.ts.map +1 -1
  16. package/src/core/assert.js +5 -1
  17. package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
  18. package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
  19. package/src/core/binary/hash/XXH128Hash.js +4 -55
  20. package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
  21. package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
  22. package/src/core/binary/hash/XXH3_SECRET.js +4 -25
  23. package/src/core/binary/hash/crc32.d.ts +1 -15
  24. package/src/core/binary/hash/crc32.d.ts.map +1 -1
  25. package/src/core/binary/hash/crc32.js +4 -96
  26. package/src/core/binary/hash/xxh3_128.d.ts +1 -9
  27. package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
  28. package/src/core/binary/hash/xxh3_128.js +4 -341
  29. package/src/core/binary/hash/xxh3_64.d.ts +1 -8
  30. package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
  31. package/src/core/binary/hash/xxh3_64.js +4 -241
  32. package/src/core/binary/hash/xxh3_common.d.ts +1 -223
  33. package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
  34. package/src/core/binary/hash/xxh3_common.js +90 -476
  35. package/src/core/collection/array/array_insert_at.d.ts +16 -0
  36. package/src/core/collection/array/array_insert_at.d.ts.map +1 -0
  37. package/src/core/collection/array/array_insert_at.js +32 -0
  38. package/src/core/collection/array/array_remove_at.d.ts +15 -0
  39. package/src/core/collection/array/array_remove_at.d.ts.map +1 -0
  40. package/src/core/collection/array/array_remove_at.js +30 -0
  41. package/src/core/collection/array/combine_hash.d.ts +6 -0
  42. package/src/core/collection/array/combine_hash.d.ts.map +1 -1
  43. package/src/core/collection/array/combine_hash.js +6 -0
  44. package/src/core/function/FunctionCompiler.js +2 -2
  45. package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
  46. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  47. package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
  48. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
  49. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
  50. package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
  51. package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts +37 -0
  52. package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts.map +1 -0
  53. package/src/core/geom/3d/quaternion/quat3_look_rotation.js +172 -0
  54. package/src/core/geom/ConicRay.js +2 -2
  55. package/src/core/geom/Quaternion.d.ts +1 -0
  56. package/src/core/geom/Quaternion.d.ts.map +1 -1
  57. package/src/core/geom/Quaternion.js +12 -48
  58. package/src/core/geom/Vector4.d.ts.map +1 -1
  59. package/src/core/geom/Vector4.js +8 -5
  60. package/src/core/math/hash/XXH128Hash.d.ts +38 -0
  61. package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
  62. package/src/core/math/hash/XXH128Hash.js +55 -0
  63. package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
  64. package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
  65. package/src/core/math/hash/XXH3_SECRET.js +25 -0
  66. package/src/core/math/hash/crc32.d.ts +16 -0
  67. package/src/core/math/hash/crc32.d.ts.map +1 -0
  68. package/src/core/math/hash/crc32.js +96 -0
  69. package/src/core/math/hash/xxh3_128.d.ts +10 -0
  70. package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
  71. package/src/core/math/hash/xxh3_128.js +341 -0
  72. package/src/core/math/hash/xxh3_64.d.ts +9 -0
  73. package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
  74. package/src/core/math/hash/xxh3_64.js +241 -0
  75. package/src/core/math/hash/xxh3_common.d.ts +224 -0
  76. package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
  77. package/src/core/math/hash/xxh3_common.js +476 -0
  78. package/src/core/math/lookup/ParameterLookupTable.js +2 -2
  79. package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
  80. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
  81. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
  82. package/src/engine/Engine.d.ts.map +1 -1
  83. package/src/engine/Engine.js +9 -4
  84. package/src/engine/asset/AssetDescription.js +2 -2
  85. package/src/engine/ecs/animation/Animation.js +2 -2
  86. package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
  87. package/src/engine/ecs/animation/AnimationClip.js +7 -5
  88. package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
  89. package/src/engine/ecs/gui/GUIElement.js +7 -5
  90. package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
  91. package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
  92. package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
  93. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  94. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +10 -0
  95. package/src/engine/ecs/transform/Transform64.d.ts +1 -1
  96. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  97. package/src/engine/ecs/transform/Transform64.js +5 -4
  98. package/src/engine/ecs/transform/t64_look_rotation.d.ts +4 -4
  99. package/src/engine/ecs/transform/t64_look_rotation.d.ts.map +1 -1
  100. package/src/engine/ecs/transform/t64_look_rotation.js +7 -18
  101. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  102. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
  103. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
  104. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
  105. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
  106. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
  107. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
  108. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  109. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
  110. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  111. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +30 -1
  112. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  113. package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
  114. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
  115. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
  116. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -0
  117. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  118. package/src/engine/graphics3/GPUParticleEmitterSystem.js +72 -29
  119. package/src/engine/graphics3/ParticipatingMedia.js +204 -204
  120. package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
  121. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  122. package/src/engine/graphics3/animation/AnimationClips.js +5 -0
  123. package/src/engine/grid/obstacle/GridObstacle.js +2 -2
  124. package/src/engine/input/devices/KeyboardDevice.d.ts +1 -0
  125. package/src/engine/input/devices/KeyboardDevice.d.ts.map +1 -1
  126. package/src/engine/input/devices/KeyboardDevice.js +7 -6
  127. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  128. package/src/engine/interpolation/Interpolated.js +2 -2
  129. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  130. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +15 -2
  131. package/src/engine/network/CONGESTION_CONTROL.md +9 -9
  132. package/src/engine/network/MESSAGE_TRANSPORT.md +364 -0
  133. package/src/engine/network/NetworkSession.d.ts +31 -11
  134. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  135. package/src/engine/network/NetworkSession.js +453 -286
  136. package/src/engine/network/README.md +77 -27
  137. package/src/engine/network/SMOOTHNESS_DESIGN.md +13 -5
  138. package/src/engine/network/diagnostics/BandwidthMeter.d.ts +1 -1
  139. package/src/engine/network/diagnostics/BandwidthMeter.js +1 -1
  140. package/src/engine/network/orchestrator/HostJoin.d.ts +111 -0
  141. package/src/engine/network/orchestrator/HostJoin.d.ts.map +1 -0
  142. package/src/engine/network/orchestrator/HostJoin.js +271 -0
  143. package/src/engine/network/orchestrator/NetworkPeer.d.ts +151 -112
  144. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  145. package/src/engine/network/orchestrator/NetworkPeer.js +450 -499
  146. package/src/engine/network/orchestrator/PendingSlices.d.ts +30 -0
  147. package/src/engine/network/orchestrator/PendingSlices.d.ts.map +1 -0
  148. package/src/engine/network/orchestrator/PendingSlices.js +83 -0
  149. package/src/engine/network/orchestrator/ReliableFrames.d.ts +34 -0
  150. package/src/engine/network/orchestrator/ReliableFrames.d.ts.map +1 -0
  151. package/src/engine/network/orchestrator/ReliableFrames.js +96 -0
  152. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +77 -10
  153. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  154. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +236 -61
  155. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +20 -6
  156. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  157. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +33 -8
  158. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  159. package/src/engine/network/replication/Replicator.js +7 -1
  160. package/src/engine/network/sim/ActionLog.d.ts +32 -5
  161. package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
  162. package/src/engine/network/sim/ActionLog.js +47 -5
  163. package/src/engine/network/sim/SimActionExecutor.d.ts +42 -2
  164. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  165. package/src/engine/network/sim/SimActionExecutor.js +100 -4
  166. package/src/engine/network/sim/Snapshotter.d.ts +12 -0
  167. package/src/engine/network/sim/Snapshotter.d.ts.map +1 -1
  168. package/src/engine/network/sim/Snapshotter.js +43 -0
  169. package/src/engine/network/state/Baseline.d.ts +1 -1
  170. package/src/engine/network/state/Baseline.js +1 -1
  171. package/src/engine/network/state/FrameBufferRing.d.ts +25 -6
  172. package/src/engine/network/state/FrameBufferRing.d.ts.map +1 -1
  173. package/src/engine/network/state/FrameBufferRing.js +51 -6
  174. package/src/engine/network/state/InputRing.d.ts +4 -0
  175. package/src/engine/network/state/InputRing.d.ts.map +1 -1
  176. package/src/engine/network/state/InputRing.js +7 -0
  177. package/src/engine/network/transport/DeferredTransport.d.ts.map +1 -1
  178. package/src/engine/network/transport/DeferredTransport.js +1 -0
  179. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
  180. package/src/engine/network/transport/LoopbackTransport.js +4 -2
  181. package/src/engine/network/transport/Transport.d.ts +7 -0
  182. package/src/engine/network/transport/Transport.d.ts.map +1 -1
  183. package/src/engine/network/transport/Transport.js +8 -0
  184. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  185. package/src/engine/network/transport/adapters/NodeUDPTransport.js +20 -5
  186. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts.map +1 -1
  187. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +8 -0
  188. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
  189. package/src/engine/network/transport/adapters/WebTransportTransport.js +6 -0
  190. package/src/engine/network/transport/connection/Connection.d.ts +191 -0
  191. package/src/engine/network/transport/connection/Connection.d.ts.map +1 -0
  192. package/src/engine/network/transport/connection/Connection.js +1262 -0
  193. package/src/engine/network/transport/connection/RangeSet.d.ts +94 -0
  194. package/src/engine/network/transport/connection/RangeSet.d.ts.map +1 -0
  195. package/src/engine/network/transport/connection/RangeSet.js +260 -0
  196. package/src/engine/network/transport/connection/RxStream.d.ts +48 -0
  197. package/src/engine/network/transport/connection/RxStream.d.ts.map +1 -0
  198. package/src/engine/network/transport/connection/RxStream.js +211 -0
  199. package/src/engine/network/transport/connection/TxStream.d.ts +90 -0
  200. package/src/engine/network/transport/connection/TxStream.d.ts.map +1 -0
  201. package/src/engine/network/transport/connection/TxStream.js +243 -0
  202. package/src/engine/network/transport/connection/bytes_copy.d.ts +17 -0
  203. package/src/engine/network/transport/connection/bytes_copy.d.ts.map +1 -0
  204. package/src/engine/network/transport/connection/bytes_copy.js +34 -0
  205. package/src/engine/network/transport/connection/varint.d.ts +46 -0
  206. package/src/engine/network/transport/connection/varint.d.ts.map +1 -0
  207. package/src/engine/network/transport/connection/varint.js +107 -0
  208. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  209. package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
  210. package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
  211. package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
  212. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  213. package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
  214. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  215. package/src/engine/physics/fluid/FluidField.js +7 -5
  216. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  217. package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
  218. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  219. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
  220. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
  221. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  222. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
  223. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  224. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
  225. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  226. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
  227. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +38 -7
  228. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  229. package/src/engine/sound/ecs/audio/AudioEmitter.js +47 -14
  230. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.d.ts.map +1 -1
  231. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.js +5 -1
  232. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts +18 -0
  233. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts.map +1 -0
  234. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.js +48 -0
  235. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +12 -2
  236. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  237. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +173 -9
  238. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +9 -3
  239. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  240. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +28 -8
  241. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts +8 -0
  242. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  243. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
  244. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts.map +1 -1
  245. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.js +5 -1
  246. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts +18 -0
  247. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts.map +1 -0
  248. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.js +51 -0
  249. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
  250. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +15 -1
  251. package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
  252. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
  253. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  254. package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
  255. package/src/engine/sound/sopra/README.md +768 -644
  256. package/src/engine/sound/sopra/SopraEngine.d.ts +104 -8
  257. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
  258. package/src/engine/sound/sopra/SopraEngine.js +327 -12
  259. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
  260. package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
  261. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
  262. package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
  263. package/src/engine/sound/sopra/definition/EventDescription.d.ts +28 -2
  264. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  265. package/src/engine/sound/sopra/definition/EventDescription.js +77 -17
  266. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +10 -0
  267. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -1
  268. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +77 -55
  269. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts +31 -0
  270. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts.map +1 -0
  271. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.js +75 -0
  272. package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
  273. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
  274. package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
  275. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
  276. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  277. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
  278. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
  279. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
  280. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
  281. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
  282. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
  283. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
  284. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  285. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
  286. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +38 -9
  287. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -1
  288. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +34 -5
  289. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +7 -2
  290. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  291. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +137 -120
  292. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +3 -1
  293. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  294. package/src/engine/sound/sopra/definition/effect/EqEffect.js +146 -128
  295. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +1 -0
  296. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -1
  297. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +8 -3
  298. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
  299. package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
  300. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
  301. package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
  302. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +44 -2
  303. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
  304. package/src/engine/sound/sopra/runtime/BusGraph.js +83 -43
  305. package/src/engine/sound/sopra/runtime/EffectChain.d.ts +96 -0
  306. package/src/engine/sound/sopra/runtime/EffectChain.d.ts.map +1 -0
  307. package/src/engine/sound/sopra/runtime/EffectChain.js +286 -0
  308. package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts +123 -0
  309. package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts.map +1 -0
  310. package/src/engine/sound/sopra/runtime/EffectParamOverrides.js +320 -0
  311. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +55 -5
  312. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  313. package/src/engine/sound/sopra/runtime/EventInstance.js +201 -26
  314. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +2 -1
  315. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -1
  316. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +6 -1
  317. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +15 -0
  318. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -1
  319. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +32 -0
  320. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -1
  321. package/src/engine/sound/sopra/util/MockAudioContext.js +3 -0
  322. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +13 -3
  323. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -1
  324. package/src/engine/sound/sopra/util/fadeOutAndStop.js +25 -13
  325. package/src/format/image/png/PNGReader.js +644 -644
  326. package/src/format/image/png/crc32.d.ts +1 -1
  327. package/src/format/image/png/crc32.js +7 -8
  328. package/src/shade/RENDERER_CONTRACT.md +6 -3
  329. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
  330. package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
  331. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
  332. package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
  333. package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
  334. package/src/shade/descriptor/blend/BlendComponent.js +2 -2
  335. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
  336. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
  337. package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
  338. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
  339. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
  340. package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
  341. package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
  342. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  343. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
  344. package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
  345. package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
  346. package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
  347. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  348. package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
  349. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts +24 -0
  350. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -0
  351. package/src/shade/device/SHADE_DEVICE_FLOOR.js +34 -0
  352. package/src/shade/device/ShadeDeviceFailure.d.ts +12 -5
  353. package/src/shade/device/ShadeDeviceFailure.d.ts.map +1 -1
  354. package/src/shade/device/ShadeDeviceFailure.js +17 -8
  355. package/src/shade/device/ShadeDeviceFailureReason.d.ts +1 -1
  356. package/src/shade/device/ShadeDeviceFailureReason.js +2 -2
  357. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  358. package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
  359. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  360. package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
  361. package/src/shade/device/shade_device_floor_unmet.d.ts +13 -0
  362. package/src/shade/device/shade_device_floor_unmet.d.ts.map +1 -0
  363. package/src/shade/device/shade_device_floor_unmet.js +32 -0
  364. package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
  365. package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
  366. package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
  367. package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
  368. package/src/shade/renderer/Renderer.d.ts +2 -0
  369. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  370. package/src/shade/renderer/Renderer.js +29 -55
  371. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  372. package/src/shade/renderer/buffer/GPUBufferAllocator.d.ts.map +1 -1
  373. package/src/shade/renderer/buffer/GPUBufferAllocator.js +9 -0
  374. package/src/shade/renderer/buffer/buffer_pool_ops.d.ts +21 -12
  375. package/src/shade/renderer/buffer/buffer_pool_ops.d.ts.map +1 -1
  376. package/src/shade/renderer/buffer/buffer_pool_ops.js +18 -19
  377. package/src/shade/renderer/camera/Camera.js +2 -2
  378. package/src/shade/renderer/geometry/Attribute.js +2 -2
  379. package/src/shade/renderer/geometry/Geometry.js +2 -2
  380. package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
  381. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
  382. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
  383. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
  384. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
  385. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
  386. package/src/shade/renderer/gpu_primitive/test/gpu_test.d.ts.map +1 -1
  387. package/src/shade/renderer/gpu_primitive/test/gpu_test.js +8 -11
  388. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  389. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  390. package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
  391. package/src/shade/renderer/pool/TransientResourcePool.d.ts +24 -0
  392. package/src/shade/renderer/pool/TransientResourcePool.d.ts.map +1 -1
  393. package/src/shade/renderer/pool/TransientResourcePool.js +41 -10
  394. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
  395. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
  396. package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
  397. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  398. package/src/shade/renderer/shader/ComputeShader.js +18 -2
  399. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  400. package/src/shade/renderer/shader/ImageShader.js +230 -218
  401. package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
  402. package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
  403. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  404. package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
  405. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  406. package/src/shade/renderer/texture/ShadeTexture.js +17 -10
  407. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
  408. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
  409. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
  410. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  411. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
  412. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
  413. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  414. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
  415. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
  416. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  417. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
  418. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
  419. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  420. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
  421. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
  422. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  423. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
  424. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  425. package/src/view/common/HTMLElementCacheKey.js +4 -3
  426. package/src/view/graphics/GraphicsContextFailureView.d.ts +1 -2
  427. package/src/view/graphics/GraphicsContextFailureView.d.ts.map +1 -1
  428. package/src/view/graphics/GraphicsContextFailureView.js +1 -2
  429. package/src/view/minimap/MinimapMarker.js +2 -2
  430. package/src/engine/network/transport/Channel.js +0 -336
  431. package/src/engine/network/transport/ReliableCommandPipeline.js +0 -335
  432. package/src/engine/network/transport/fragments/FragmentAssembler.js +0 -350
  433. package/src/engine/network/transport/fragments/FragmentRetention.js +0 -191
  434. package/src/engine/network/transport/fragments/fragment_send.js +0 -157
  435. package/src/engine/network/transport/fragments/packet_size.js +0 -107
@@ -1,352 +1,357 @@
1
- import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
2
- import List from '../../../../core/collection/list/List.js';
3
- import Vector1 from "../../../../core/geom/Vector1.js";
4
- import { objectKeyByValue } from "../../../../core/model/object/objectKeyByValue.js";
5
- import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
6
- import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
7
- import { compareStrings } from "../../../../core/primitives/strings/compareStrings.js";
8
- import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
9
- import { SoundAttenuationFunction } from "./SoundAttenuationFunction.js";
10
- import { SoundEmitterFlags } from "./SoundEmitterFlags.js";
11
- import { SoundPanningModelType } from "./SoundPanningModelType.js";
12
- import { SoundTrack } from "./SoundTrack.js";
13
-
14
- const DEFAULT_DISTANCE_MIN = 1;
15
- const DEFAULT_DISTANCE_MAX = 10000;
16
-
17
- const DEFAULT_CHANNEL = null;
18
-
19
- /**
20
- * @deprecated Frozen legacy reader — superseded by the native {@link AudioEmitter}, which owns a sopra
21
- * `EventDescription` directly. Data only: no system links it and nothing plays it. It survives so that
22
- * saves written before the native audio path still deserialize, and so
23
- * {@link convertLegacySoundComponents} can turn what they carry into authored sopra events. Do not
24
- * author new content with it.
25
- * @class
26
- */
27
- export class SoundEmitter {
28
-
29
-
30
- /**
31
- * @readonly
32
- * @type {List<SoundTrack>}
33
- */
34
- tracks = new List();
35
-
36
- /**
37
- * Free-string mixer channel name. Resolved against the live bus set by
38
- * {@link convertLegacySoundComponents}, which falls back to `effects` for a name the mixer no
39
- * longer has — sopra's bus lookup throws on an unknown id.
40
- * @type {String|null}
41
- */
42
- channel = DEFAULT_CHANNEL;
43
-
44
- /**
45
- *
46
- * @type {number}
47
- * @private
48
- */
49
- __distanceMin = 1;
50
-
51
- /**
52
- *
53
- * @type {number}
54
- * @private
55
- */
56
- __distanceMax = 10000;
57
-
58
- /**
59
- * TODO add to binary serialization
60
- * @type {SoundPanningModelType}
61
- */
62
- panningModel = SoundPanningModelType.HRTF;
63
-
64
- /**
65
- * Type of attenuation used for sound fall-off, this is only used if Attenuation flag is set
66
- * @type {SoundAttenuationFunction|number}
67
- */
68
- attenuation = SoundAttenuationFunction.Smith;
69
-
70
- /**
71
- *
72
- * @type {number|SoundEmitterFlags}
73
- */
74
- flags = 0;
75
-
76
- /**
77
- *
78
- * @type {Vector1}
79
- */
80
- volume = new Vector1(1);
81
-
82
- /**
83
- *
84
- * @param {SoundEmitter} other
85
- * @returns number
86
- */
87
- compare(other) {
88
- const tracks = this.tracks.compare(other.tracks);
89
-
90
- if (tracks !== 0) {
91
- return tracks;
92
- }
93
-
94
- const channel = compareStrings(this.channel, other.channel);
95
-
96
- if (channel !== 0) {
97
- return channel;
98
- }
99
-
100
- const distanceMin = number_compare_ascending(this.__distanceMin, other.__distanceMin);
101
-
102
- if (distanceMin !== 0) {
103
- return distanceMin;
104
- }
105
- const distanceMax = number_compare_ascending(this.__distanceMax, other.__distanceMax);
106
-
107
- if (distanceMax !== 0) {
108
- return distanceMax;
109
- }
110
-
111
- const panningModel = number_compare_ascending(this.panningModel, other.panningModel);
112
-
113
- if (panningModel !== 0) {
114
- return panningModel;
115
- }
116
-
117
- const attenuation = number_compare_ascending(this.attenuation, other.attenuation);
118
-
119
- if (attenuation !== 0) {
120
- return attenuation;
121
- }
122
-
123
- const flags = number_compare_ascending(this.flags, other.flags);
124
-
125
- if (flags !== 0) {
126
- return flags;
127
- }
128
-
129
- const volume = number_compare_ascending(this.volume.getValue(), other.volume.getValue());
130
-
131
- if (volume !== 0) {
132
- return volume;
133
- }
134
-
135
-
136
- return 0;
137
- }
138
-
139
-
140
- /**
141
- *
142
- * @param {number|SoundEmitterFlags} flag
143
- * @returns {void}
144
- */
145
- setFlag(flag) {
146
- this.flags |= flag;
147
- }
148
-
149
- /**
150
- *
151
- * @param {number|SoundEmitterFlags} flag
152
- * @returns {void}
153
- */
154
- clearFlag(flag) {
155
- this.flags &= ~flag;
156
- }
157
-
158
- /**
159
- *
160
- * @param {number|SoundEmitterFlags} flag
161
- * @param {boolean} value
162
- */
163
- writeFlag(flag, value) {
164
- if (value) {
165
- this.setFlag(flag);
166
- } else {
167
- this.clearFlag(flag);
168
- }
169
- }
170
-
171
- /**
172
- *
173
- * @param {number|SoundEmitterFlags} flag
174
- * @returns {boolean}
175
- */
176
- getFlag(flag) {
177
- return (this.flags & flag) === flag;
178
- }
179
-
180
-
181
- /**
182
- * @deprecated
183
- * @param {boolean} v
184
- */
185
- set isPositioned(v) {
186
- this.writeFlag(SoundEmitterFlags.Spatialization, v);
187
- }
188
-
189
- /**
190
- * @deprecated
191
- * @return {boolean}
192
- */
193
- get isPositioned() {
194
- return this.getFlag(SoundEmitterFlags.Spatialization);
195
- }
196
-
197
- /**
198
- * @returns {boolean}
199
- * @param {SoundEmitter} other
200
- */
201
- equals(other) {
202
- return this.channel === other.channel
203
- && this.flags === other.flags
204
- && this.__distanceMin === other.__distanceMin
205
- && this.__distanceMax === other.__distanceMax
206
- && this.attenuation === other.attenuation
207
- && this.tracks.equals(other.tracks)
208
- ;
209
- }
210
-
211
- /**
212
- *
213
- * @return {number}
214
- */
215
- hash() {
216
- return combine_hash(
217
- computeStringHash(this.channel),
218
- this.flags,
219
- computeHashFloat(this.__distanceMin),
220
- computeHashFloat(this.__distanceMax),
221
- this.attenuation,
222
- this.tracks.hash()
223
- );
224
- }
225
-
226
- /**
227
- *
228
- * @returns {number}
229
- */
230
- get distanceMin() {
231
- return this.__distanceMin;
232
- }
233
-
234
- /**
235
- * @param {number} v
236
- */
237
- set distanceMin(v) {
238
- this.__distanceMin = v;
239
- }
240
-
241
- /**
242
- *
243
- * @returns {number}
244
- */
245
- get distanceMax() {
246
- return this.__distanceMax;
247
- }
248
-
249
- /**
250
- * @param {number} v
251
- */
252
- set distanceMax(v) {
253
- this.__distanceMax = v;
254
- }
255
-
256
- toJSON() {
257
- return {
258
- isPositioned: this.getFlag(SoundEmitterFlags.Spatialization),
259
- isAttenuated: this.getFlag(SoundEmitterFlags.Attenuation),
260
- channel: this.channel,
261
- volume: this.volume.toJSON(),
262
- tracks: this.tracks.toJSON(),
263
- distanceMin: this.distanceMin,
264
- distanceMax: this.distanceMax,
265
- attenuation: objectKeyByValue(SoundAttenuationFunction, this.attenuation),
266
- panningModel: objectKeyByValue(SoundPanningModelType, this.panningModel)
267
- };
268
- }
269
-
270
- fromJSON(json) {
271
- if (json.isPositioned !== undefined) {
272
- this.writeFlag(SoundEmitterFlags.Spatialization, json.isPositioned);
273
- } else {
274
- this.clearFlag(SoundEmitterFlags.Spatialization);
275
- }
276
-
277
- if (json.channel !== undefined) {
278
- this.channel = json.channel;
279
- } else {
280
- this.channel = DEFAULT_CHANNEL;
281
- }
282
-
283
- if (json.volume !== undefined) {
284
- this.volume.fromJSON(json.volume);
285
- }
286
-
287
- if (typeof json.distanceMin === "number") {
288
- this.distanceMin = json.distanceMin;
289
- } else {
290
- this.distanceMin = DEFAULT_DISTANCE_MIN;
291
- }
292
-
293
- if (typeof json.distanceMax === "number") {
294
- this.distanceMax = json.distanceMax;
295
- } else {
296
- this.distanceMax = DEFAULT_DISTANCE_MAX;
297
- }
298
-
299
- if (typeof json.isAttenuated === "boolean") {
300
- this.writeFlag(SoundEmitterFlags.Attenuation, json.isAttenuated);
301
- } else {
302
- this.setFlag(SoundEmitterFlags.Attenuation);
303
- }
304
-
305
- if (typeof json.attenuation === "string") {
306
- const attenuation = SoundAttenuationFunction[json.attenuation];
307
-
308
- if (attenuation === undefined) {
309
- throw new Error(`Unknown attenuation type '${json.attenuation}', valid types are: ${Object.keys(SoundAttenuationFunction)}`);
310
- }
311
-
312
- this.attenuation = attenuation;
313
- } else {
314
- this.attenuation = SoundAttenuationFunction.Linear;
315
- }
316
-
317
- //tracks
318
- if (json.tracks !== undefined) {
319
- this.tracks.fromJSON(json.tracks, SoundTrack);
320
- }
321
-
322
- if (json.panningModel === undefined) {
323
- this.panningModel = SoundPanningModelType.HRTF;
324
- } else {
325
- const model = SoundPanningModelType[json.panningModel];
326
-
327
- if (model === undefined) {
328
- throw new Error(`Unknown panning model '${json.panningModel}', valid types are: ${Object.keys(SoundPanningModelType)}`);
329
- }
330
-
331
- this.panningModel = model;
332
- }
333
- }
334
-
335
-
336
- /**
337
- *
338
- * @param json
339
- * @returns {SoundEmitter}
340
- */
341
- static fromJSON(json) {
342
- const result = new SoundEmitter();
343
-
344
- result.fromJSON(json);
345
-
346
- return result;
347
- }
348
- }
349
-
350
- SoundEmitter.typeName = "SoundEmitter";
351
-
352
-
1
+ import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
2
+ import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
3
+ import List from '../../../../core/collection/list/List.js';
4
+ import Vector1 from "../../../../core/geom/Vector1.js";
5
+ import { objectKeyByValue } from "../../../../core/model/object/objectKeyByValue.js";
6
+ import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
7
+ import { number_compare_ascending } from "../../../../core/primitives/numbers/number_compare_ascending.js";
8
+ import { compareStrings } from "../../../../core/primitives/strings/compareStrings.js";
9
+ import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
10
+ import { SoundAttenuationFunction } from "./SoundAttenuationFunction.js";
11
+ import { SoundEmitterFlags } from "./SoundEmitterFlags.js";
12
+ import { SoundPanningModelType } from "./SoundPanningModelType.js";
13
+ import { SoundTrack } from "./SoundTrack.js";
14
+
15
+ const DEFAULT_DISTANCE_MIN = 1;
16
+ const DEFAULT_DISTANCE_MAX = 10000;
17
+
18
+ const DEFAULT_CHANNEL = null;
19
+
20
+ /**
21
+ * @deprecated Frozen legacy reader — superseded by the native {@link AudioEmitter}, which owns a sopra
22
+ * `EventDescription` directly. Data only: no system links it and nothing plays it. It survives so that
23
+ * saves written before the native audio path still deserialize, and so
24
+ * {@link convertLegacySoundComponents} can turn what they carry into authored sopra events. Do not
25
+ * author new content with it.
26
+ * @class
27
+ */
28
+ export class SoundEmitter {
29
+
30
+
31
+ /**
32
+ * @readonly
33
+ * @type {List<SoundTrack>}
34
+ */
35
+ tracks = new List();
36
+
37
+ /**
38
+ * Free-string mixer channel name. Resolved against the live bus set by
39
+ * {@link convertLegacySoundComponents}, which falls back to `effects` for a name the mixer no
40
+ * longer has — sopra's bus lookup throws on an unknown id.
41
+ * @type {String|null}
42
+ */
43
+ channel = DEFAULT_CHANNEL;
44
+
45
+ /**
46
+ *
47
+ * @type {number}
48
+ * @private
49
+ */
50
+ __distanceMin = 1;
51
+
52
+ /**
53
+ *
54
+ * @type {number}
55
+ * @private
56
+ */
57
+ __distanceMax = 10000;
58
+
59
+ /**
60
+ * TODO add to binary serialization
61
+ * @type {SoundPanningModelType}
62
+ */
63
+ panningModel = SoundPanningModelType.HRTF;
64
+
65
+ /**
66
+ * Type of attenuation used for sound fall-off, this is only used if Attenuation flag is set
67
+ * @type {SoundAttenuationFunction|number}
68
+ */
69
+ attenuation = SoundAttenuationFunction.Smith;
70
+
71
+ /**
72
+ *
73
+ * @type {number|SoundEmitterFlags}
74
+ */
75
+ flags = 0;
76
+
77
+ /**
78
+ *
79
+ * @type {Vector1}
80
+ */
81
+ volume = new Vector1(1);
82
+
83
+ /**
84
+ *
85
+ * @param {SoundEmitter} other
86
+ * @returns number
87
+ */
88
+ compare(other) {
89
+ const tracks = this.tracks.compare(other.tracks);
90
+
91
+ if (tracks !== 0) {
92
+ return tracks;
93
+ }
94
+
95
+ const channel = compareStrings(this.channel, other.channel);
96
+
97
+ if (channel !== 0) {
98
+ return channel;
99
+ }
100
+
101
+ const distanceMin = number_compare_ascending(this.__distanceMin, other.__distanceMin);
102
+
103
+ if (distanceMin !== 0) {
104
+ return distanceMin;
105
+ }
106
+ const distanceMax = number_compare_ascending(this.__distanceMax, other.__distanceMax);
107
+
108
+ if (distanceMax !== 0) {
109
+ return distanceMax;
110
+ }
111
+
112
+ const panningModel = number_compare_ascending(this.panningModel, other.panningModel);
113
+
114
+ if (panningModel !== 0) {
115
+ return panningModel;
116
+ }
117
+
118
+ const attenuation = number_compare_ascending(this.attenuation, other.attenuation);
119
+
120
+ if (attenuation !== 0) {
121
+ return attenuation;
122
+ }
123
+
124
+ const flags = number_compare_ascending(this.flags, other.flags);
125
+
126
+ if (flags !== 0) {
127
+ return flags;
128
+ }
129
+
130
+ const volume = number_compare_ascending(this.volume.getValue(), other.volume.getValue());
131
+
132
+ if (volume !== 0) {
133
+ return volume;
134
+ }
135
+
136
+
137
+ return 0;
138
+ }
139
+
140
+
141
+ /**
142
+ *
143
+ * @param {number|SoundEmitterFlags} flag
144
+ * @returns {void}
145
+ */
146
+ setFlag(flag) {
147
+ this.flags |= flag;
148
+ }
149
+
150
+ /**
151
+ *
152
+ * @param {number|SoundEmitterFlags} flag
153
+ * @returns {void}
154
+ */
155
+ clearFlag(flag) {
156
+ this.flags &= ~flag;
157
+ }
158
+
159
+ /**
160
+ *
161
+ * @param {number|SoundEmitterFlags} flag
162
+ * @param {boolean} value
163
+ */
164
+ writeFlag(flag, value) {
165
+ if (value) {
166
+ this.setFlag(flag);
167
+ } else {
168
+ this.clearFlag(flag);
169
+ }
170
+ }
171
+
172
+ /**
173
+ *
174
+ * @param {number|SoundEmitterFlags} flag
175
+ * @returns {boolean}
176
+ */
177
+ getFlag(flag) {
178
+ return (this.flags & flag) === flag;
179
+ }
180
+
181
+
182
+ /**
183
+ * @deprecated
184
+ * @param {boolean} v
185
+ */
186
+ set isPositioned(v) {
187
+ this.writeFlag(SoundEmitterFlags.Spatialization, v);
188
+ }
189
+
190
+ /**
191
+ * @deprecated
192
+ * @return {boolean}
193
+ */
194
+ get isPositioned() {
195
+ return this.getFlag(SoundEmitterFlags.Spatialization);
196
+ }
197
+
198
+ /**
199
+ * @returns {boolean}
200
+ * @param {SoundEmitter} other
201
+ */
202
+ equals(other) {
203
+ return this.channel === other.channel
204
+ && this.flags === other.flags
205
+ && this.__distanceMin === other.__distanceMin
206
+ && this.__distanceMax === other.__distanceMax
207
+ && this.attenuation === other.attenuation
208
+ && this.tracks.equals(other.tracks)
209
+ ;
210
+ }
211
+
212
+ /**
213
+ *
214
+ * @return {number}
215
+ */
216
+ hash() {
217
+ return hash_mix2(
218
+ hash_mix3(
219
+ hash_mix3(
220
+ computeStringHash(this.channel),
221
+ this.flags,
222
+ computeHashFloat(this.__distanceMin)
223
+ ),
224
+ computeHashFloat(this.__distanceMax),
225
+ this.attenuation
226
+ ),
227
+ this.tracks.hash()
228
+ );
229
+ }
230
+
231
+ /**
232
+ *
233
+ * @returns {number}
234
+ */
235
+ get distanceMin() {
236
+ return this.__distanceMin;
237
+ }
238
+
239
+ /**
240
+ * @param {number} v
241
+ */
242
+ set distanceMin(v) {
243
+ this.__distanceMin = v;
244
+ }
245
+
246
+ /**
247
+ *
248
+ * @returns {number}
249
+ */
250
+ get distanceMax() {
251
+ return this.__distanceMax;
252
+ }
253
+
254
+ /**
255
+ * @param {number} v
256
+ */
257
+ set distanceMax(v) {
258
+ this.__distanceMax = v;
259
+ }
260
+
261
+ toJSON() {
262
+ return {
263
+ isPositioned: this.getFlag(SoundEmitterFlags.Spatialization),
264
+ isAttenuated: this.getFlag(SoundEmitterFlags.Attenuation),
265
+ channel: this.channel,
266
+ volume: this.volume.toJSON(),
267
+ tracks: this.tracks.toJSON(),
268
+ distanceMin: this.distanceMin,
269
+ distanceMax: this.distanceMax,
270
+ attenuation: objectKeyByValue(SoundAttenuationFunction, this.attenuation),
271
+ panningModel: objectKeyByValue(SoundPanningModelType, this.panningModel)
272
+ };
273
+ }
274
+
275
+ fromJSON(json) {
276
+ if (json.isPositioned !== undefined) {
277
+ this.writeFlag(SoundEmitterFlags.Spatialization, json.isPositioned);
278
+ } else {
279
+ this.clearFlag(SoundEmitterFlags.Spatialization);
280
+ }
281
+
282
+ if (json.channel !== undefined) {
283
+ this.channel = json.channel;
284
+ } else {
285
+ this.channel = DEFAULT_CHANNEL;
286
+ }
287
+
288
+ if (json.volume !== undefined) {
289
+ this.volume.fromJSON(json.volume);
290
+ }
291
+
292
+ if (typeof json.distanceMin === "number") {
293
+ this.distanceMin = json.distanceMin;
294
+ } else {
295
+ this.distanceMin = DEFAULT_DISTANCE_MIN;
296
+ }
297
+
298
+ if (typeof json.distanceMax === "number") {
299
+ this.distanceMax = json.distanceMax;
300
+ } else {
301
+ this.distanceMax = DEFAULT_DISTANCE_MAX;
302
+ }
303
+
304
+ if (typeof json.isAttenuated === "boolean") {
305
+ this.writeFlag(SoundEmitterFlags.Attenuation, json.isAttenuated);
306
+ } else {
307
+ this.setFlag(SoundEmitterFlags.Attenuation);
308
+ }
309
+
310
+ if (typeof json.attenuation === "string") {
311
+ const attenuation = SoundAttenuationFunction[json.attenuation];
312
+
313
+ if (attenuation === undefined) {
314
+ throw new Error(`Unknown attenuation type '${json.attenuation}', valid types are: ${Object.keys(SoundAttenuationFunction)}`);
315
+ }
316
+
317
+ this.attenuation = attenuation;
318
+ } else {
319
+ this.attenuation = SoundAttenuationFunction.Linear;
320
+ }
321
+
322
+ //tracks
323
+ if (json.tracks !== undefined) {
324
+ this.tracks.fromJSON(json.tracks, SoundTrack);
325
+ }
326
+
327
+ if (json.panningModel === undefined) {
328
+ this.panningModel = SoundPanningModelType.HRTF;
329
+ } else {
330
+ const model = SoundPanningModelType[json.panningModel];
331
+
332
+ if (model === undefined) {
333
+ throw new Error(`Unknown panning model '${json.panningModel}', valid types are: ${Object.keys(SoundPanningModelType)}`);
334
+ }
335
+
336
+ this.panningModel = model;
337
+ }
338
+ }
339
+
340
+
341
+ /**
342
+ *
343
+ * @param json
344
+ * @returns {SoundEmitter}
345
+ */
346
+ static fromJSON(json) {
347
+ const result = new SoundEmitter();
348
+
349
+ result.fromJSON(json);
350
+
351
+ return result;
352
+ }
353
+ }
354
+
355
+ SoundEmitter.typeName = "SoundEmitter";
356
+
357
+