@iwsdk/core 0.1.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 (326) hide show
  1. package/LICENSE +21 -0
  2. package/dist/asset/asset-manager.d.ts +72 -0
  3. package/dist/asset/asset-manager.d.ts.map +1 -0
  4. package/dist/asset/asset-manager.js +138 -0
  5. package/dist/asset/asset-manager.js.map +1 -0
  6. package/dist/asset/cache-manager.d.ts +44 -0
  7. package/dist/asset/cache-manager.d.ts.map +1 -0
  8. package/dist/asset/cache-manager.js +80 -0
  9. package/dist/asset/cache-manager.js.map +1 -0
  10. package/dist/asset/index.d.ts +9 -0
  11. package/dist/asset/index.d.ts.map +1 -0
  12. package/dist/asset/loaders/audio-loader.d.ts +21 -0
  13. package/dist/asset/loaders/audio-loader.d.ts.map +1 -0
  14. package/dist/asset/loaders/audio-loader.js +57 -0
  15. package/dist/asset/loaders/audio-loader.js.map +1 -0
  16. package/dist/asset/loaders/gltf-loader.d.ts +33 -0
  17. package/dist/asset/loaders/gltf-loader.d.ts.map +1 -0
  18. package/dist/asset/loaders/gltf-loader.js +79 -0
  19. package/dist/asset/loaders/gltf-loader.js.map +1 -0
  20. package/dist/asset/loaders/hdr-texture-loader.d.ts +18 -0
  21. package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -0
  22. package/dist/asset/loaders/hdr-texture-loader.js +65 -0
  23. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -0
  24. package/dist/asset/loaders/texture-loader.d.ts +21 -0
  25. package/dist/asset/loaders/texture-loader.d.ts.map +1 -0
  26. package/dist/asset/loaders/texture-loader.js +57 -0
  27. package/dist/asset/loaders/texture-loader.js.map +1 -0
  28. package/dist/audio/audio-pool.d.ts +59 -0
  29. package/dist/audio/audio-pool.d.ts.map +1 -0
  30. package/dist/audio/audio-pool.js +105 -0
  31. package/dist/audio/audio-pool.js.map +1 -0
  32. package/dist/audio/audio-system.d.ts +326 -0
  33. package/dist/audio/audio-system.d.ts.map +1 -0
  34. package/dist/audio/audio-system.js +478 -0
  35. package/dist/audio/audio-system.js.map +1 -0
  36. package/dist/audio/audio-utils.d.ts +71 -0
  37. package/dist/audio/audio-utils.d.ts.map +1 -0
  38. package/dist/audio/audio-utils.js +145 -0
  39. package/dist/audio/audio-utils.js.map +1 -0
  40. package/dist/audio/audio.d.ts +178 -0
  41. package/dist/audio/audio.d.ts.map +1 -0
  42. package/dist/audio/audio.js +104 -0
  43. package/dist/audio/audio.js.map +1 -0
  44. package/dist/audio/index.d.ts +11 -0
  45. package/dist/audio/index.d.ts.map +1 -0
  46. package/dist/ecs/component-registry.d.ts +54 -0
  47. package/dist/ecs/component-registry.d.ts.map +1 -0
  48. package/dist/ecs/component-registry.js +86 -0
  49. package/dist/ecs/component-registry.js.map +1 -0
  50. package/dist/ecs/component.d.ts +12 -0
  51. package/dist/ecs/component.d.ts.map +1 -0
  52. package/dist/ecs/entity.d.ts +17 -0
  53. package/dist/ecs/entity.d.ts.map +1 -0
  54. package/dist/ecs/entity.js +13 -0
  55. package/dist/ecs/entity.js.map +1 -0
  56. package/dist/ecs/index.d.ts +12 -0
  57. package/dist/ecs/index.d.ts.map +1 -0
  58. package/dist/ecs/system.d.ts +70 -0
  59. package/dist/ecs/system.d.ts.map +1 -0
  60. package/dist/ecs/system.js +79 -0
  61. package/dist/ecs/system.js.map +1 -0
  62. package/dist/ecs/world.d.ts +101 -0
  63. package/dist/ecs/world.d.ts.map +1 -0
  64. package/dist/ecs/world.js +165 -0
  65. package/dist/ecs/world.js.map +1 -0
  66. package/dist/environment/dome-gradient.d.ts +39 -0
  67. package/dist/environment/dome-gradient.d.ts.map +1 -0
  68. package/dist/environment/dome-gradient.js +30 -0
  69. package/dist/environment/dome-gradient.js.map +1 -0
  70. package/dist/environment/dome-texture.d.ts +39 -0
  71. package/dist/environment/dome-texture.d.ts.map +1 -0
  72. package/dist/environment/dome-texture.js +30 -0
  73. package/dist/environment/dome-texture.js.map +1 -0
  74. package/dist/environment/environment-system.d.ts +82 -0
  75. package/dist/environment/environment-system.d.ts.map +1 -0
  76. package/dist/environment/environment-system.js +389 -0
  77. package/dist/environment/environment-system.js.map +1 -0
  78. package/dist/environment/gradient-environment.d.ts +37 -0
  79. package/dist/environment/gradient-environment.d.ts.map +1 -0
  80. package/dist/environment/gradient-environment.js +99 -0
  81. package/dist/environment/gradient-environment.js.map +1 -0
  82. package/dist/environment/ibl-gradient.d.ts +38 -0
  83. package/dist/environment/ibl-gradient.d.ts.map +1 -0
  84. package/dist/environment/ibl-gradient.js +29 -0
  85. package/dist/environment/ibl-gradient.js.map +1 -0
  86. package/dist/environment/ibl-texture.d.ts +36 -0
  87. package/dist/environment/ibl-texture.d.ts.map +1 -0
  88. package/dist/environment/ibl-texture.js +30 -0
  89. package/dist/environment/ibl-texture.js.map +1 -0
  90. package/dist/environment/index.d.ts +12 -0
  91. package/dist/environment/index.d.ts.map +1 -0
  92. package/dist/grab/distance-grabbable.d.ts +115 -0
  93. package/dist/grab/distance-grabbable.d.ts.map +1 -0
  94. package/dist/grab/distance-grabbable.js +102 -0
  95. package/dist/grab/distance-grabbable.js.map +1 -0
  96. package/dist/grab/grab-system.d.ts +320 -0
  97. package/dist/grab/grab-system.d.ts.map +1 -0
  98. package/dist/grab/grab-system.js +239 -0
  99. package/dist/grab/grab-system.js.map +1 -0
  100. package/dist/grab/handles.d.ts +43 -0
  101. package/dist/grab/handles.d.ts.map +1 -0
  102. package/dist/grab/handles.js +132 -0
  103. package/dist/grab/handles.js.map +1 -0
  104. package/dist/grab/index.d.ts +13 -0
  105. package/dist/grab/index.d.ts.map +1 -0
  106. package/dist/grab/index.js +23 -0
  107. package/dist/grab/index.js.map +1 -0
  108. package/dist/grab/one-hand-grabbable.d.ts +80 -0
  109. package/dist/grab/one-hand-grabbable.d.ts.map +1 -0
  110. package/dist/grab/one-hand-grabbable.js +80 -0
  111. package/dist/grab/one-hand-grabbable.js.map +1 -0
  112. package/dist/grab/pointer-events-patch.d.ts +16 -0
  113. package/dist/grab/pointer-events-patch.d.ts.map +1 -0
  114. package/dist/grab/pointer-events-patch.js +223 -0
  115. package/dist/grab/pointer-events-patch.js.map +1 -0
  116. package/dist/grab/two-hands-grabbable.d.ts +103 -0
  117. package/dist/grab/two-hands-grabbable.d.ts.map +1 -0
  118. package/dist/grab/two-hands-grabbable.js +100 -0
  119. package/dist/grab/two-hands-grabbable.js.map +1 -0
  120. package/dist/index.d.ts +27 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +82 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/init/index.d.ts +9 -0
  125. package/dist/init/index.d.ts.map +1 -0
  126. package/dist/init/world-initializer.d.ts +76 -0
  127. package/dist/init/world-initializer.d.ts.map +1 -0
  128. package/dist/init/world-initializer.js +403 -0
  129. package/dist/init/world-initializer.js.map +1 -0
  130. package/dist/init/xr.d.ts +87 -0
  131. package/dist/init/xr.d.ts.map +1 -0
  132. package/dist/init/xr.js +193 -0
  133. package/dist/init/xr.js.map +1 -0
  134. package/dist/input/index.d.ts +9 -0
  135. package/dist/input/index.d.ts.map +1 -0
  136. package/dist/input/input-system.d.ts +52 -0
  137. package/dist/input/input-system.d.ts.map +1 -0
  138. package/dist/input/input-system.js +176 -0
  139. package/dist/input/input-system.js.map +1 -0
  140. package/dist/input/state-tags.d.ts +56 -0
  141. package/dist/input/state-tags.d.ts.map +1 -0
  142. package/dist/input/state-tags.js +63 -0
  143. package/dist/input/state-tags.js.map +1 -0
  144. package/dist/level/index.d.ts +12 -0
  145. package/dist/level/index.d.ts.map +1 -0
  146. package/dist/level/level-entity-creator.d.ts +27 -0
  147. package/dist/level/level-entity-creator.d.ts.map +1 -0
  148. package/dist/level/level-entity-creator.js +110 -0
  149. package/dist/level/level-entity-creator.js.map +1 -0
  150. package/dist/level/level-glxf-importer.d.ts +22 -0
  151. package/dist/level/level-glxf-importer.d.ts.map +1 -0
  152. package/dist/level/level-glxf-importer.js +40 -0
  153. package/dist/level/level-glxf-importer.js.map +1 -0
  154. package/dist/level/level-root.d.ts +18 -0
  155. package/dist/level/level-root.d.ts.map +1 -0
  156. package/dist/level/level-root.js +25 -0
  157. package/dist/level/level-root.js.map +1 -0
  158. package/dist/level/level-system.d.ts +54 -0
  159. package/dist/level/level-system.d.ts.map +1 -0
  160. package/dist/level/level-system.js +134 -0
  161. package/dist/level/level-system.js.map +1 -0
  162. package/dist/level/level-tag.d.ts +25 -0
  163. package/dist/level/level-tag.d.ts.map +1 -0
  164. package/dist/level/level-tag.js +28 -0
  165. package/dist/level/level-tag.js.map +1 -0
  166. package/dist/locomotion/geometries/beveled-cylinder.d.ts +12 -0
  167. package/dist/locomotion/geometries/beveled-cylinder.d.ts.map +1 -0
  168. package/dist/locomotion/geometries/beveled-cylinder.js +64 -0
  169. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -0
  170. package/dist/locomotion/index.d.ts +11 -0
  171. package/dist/locomotion/index.d.ts.map +1 -0
  172. package/dist/locomotion/locomotion.d.ts +239 -0
  173. package/dist/locomotion/locomotion.d.ts.map +1 -0
  174. package/dist/locomotion/locomotion.js +256 -0
  175. package/dist/locomotion/locomotion.js.map +1 -0
  176. package/dist/locomotion/materials/line.d.ts +24 -0
  177. package/dist/locomotion/materials/line.d.ts.map +1 -0
  178. package/dist/locomotion/materials/line.js +307 -0
  179. package/dist/locomotion/materials/line.js.map +1 -0
  180. package/dist/locomotion/slide.d.ts +76 -0
  181. package/dist/locomotion/slide.d.ts.map +1 -0
  182. package/dist/locomotion/slide.js +131 -0
  183. package/dist/locomotion/slide.js.map +1 -0
  184. package/dist/locomotion/teleport.d.ts +68 -0
  185. package/dist/locomotion/teleport.d.ts.map +1 -0
  186. package/dist/locomotion/teleport.js +150 -0
  187. package/dist/locomotion/teleport.js.map +1 -0
  188. package/dist/locomotion/turn.d.ts +77 -0
  189. package/dist/locomotion/turn.d.ts.map +1 -0
  190. package/dist/locomotion/turn.js +126 -0
  191. package/dist/locomotion/turn.js.map +1 -0
  192. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js +13 -0
  193. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/index.js.map +1 -0
  194. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +154 -0
  195. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.0.10_@pmndrs_uikit@1.0.32_super-three@0.177.0_/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +1 -0
  196. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +66 -0
  197. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +1 -0
  198. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +162 -0
  199. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +1 -0
  200. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +519 -0
  201. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +1 -0
  202. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +15 -0
  203. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +1 -0
  204. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +32 -0
  205. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +1 -0
  206. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +10 -0
  207. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +1 -0
  208. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +41 -0
  209. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +1 -0
  210. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +35 -0
  211. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +1 -0
  212. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +24 -0
  213. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +1 -0
  214. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +92 -0
  215. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +1 -0
  216. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +382 -0
  217. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +1 -0
  218. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +2587 -0
  219. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +1 -0
  220. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +477 -0
  221. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +1 -0
  222. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +17 -0
  223. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +1 -0
  224. package/dist/physics/index.d.ts +11 -0
  225. package/dist/physics/index.d.ts.map +1 -0
  226. package/dist/physics/physics-system.d.ts +314 -0
  227. package/dist/physics/physics-system.d.ts.map +1 -0
  228. package/dist/physics/physics-system.js +419 -0
  229. package/dist/physics/physics-system.js.map +1 -0
  230. package/dist/physics/physicsBody.d.ts +83 -0
  231. package/dist/physics/physicsBody.d.ts.map +1 -0
  232. package/dist/physics/physicsBody.js +60 -0
  233. package/dist/physics/physicsBody.js.map +1 -0
  234. package/dist/physics/physicsManipulation.d.ts +51 -0
  235. package/dist/physics/physicsManipulation.d.ts.map +1 -0
  236. package/dist/physics/physicsManipulation.js +46 -0
  237. package/dist/physics/physicsManipulation.js.map +1 -0
  238. package/dist/physics/physicsShape.d.ts +133 -0
  239. package/dist/physics/physicsShape.d.ts.map +1 -0
  240. package/dist/physics/physicsShape.js +97 -0
  241. package/dist/physics/physicsShape.js.map +1 -0
  242. package/dist/physics/utils.d.ts +21 -0
  243. package/dist/physics/utils.d.ts.map +1 -0
  244. package/dist/physics/utils.js +130 -0
  245. package/dist/physics/utils.js.map +1 -0
  246. package/dist/runtime/index.d.ts +8 -0
  247. package/dist/runtime/index.d.ts.map +1 -0
  248. package/dist/runtime/three.d.ts +8 -0
  249. package/dist/runtime/three.d.ts.map +1 -0
  250. package/dist/runtime/three.js +18 -0
  251. package/dist/runtime/three.js.map +1 -0
  252. package/dist/scene-understanding/anchor.d.ts +42 -0
  253. package/dist/scene-understanding/anchor.d.ts.map +1 -0
  254. package/dist/scene-understanding/anchor.js +45 -0
  255. package/dist/scene-understanding/anchor.js.map +1 -0
  256. package/dist/scene-understanding/index.d.ts +11 -0
  257. package/dist/scene-understanding/index.d.ts.map +1 -0
  258. package/dist/scene-understanding/mesh.d.ts +67 -0
  259. package/dist/scene-understanding/mesh.d.ts.map +1 -0
  260. package/dist/scene-understanding/mesh.js +55 -0
  261. package/dist/scene-understanding/mesh.js.map +1 -0
  262. package/dist/scene-understanding/plane.d.ts +39 -0
  263. package/dist/scene-understanding/plane.d.ts.map +1 -0
  264. package/dist/scene-understanding/plane.js +42 -0
  265. package/dist/scene-understanding/plane.js.map +1 -0
  266. package/dist/scene-understanding/scene-understanding-system.d.ts +180 -0
  267. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -0
  268. package/dist/scene-understanding/scene-understanding-system.js +342 -0
  269. package/dist/scene-understanding/scene-understanding-system.js.map +1 -0
  270. package/dist/transform/index.d.ts +10 -0
  271. package/dist/transform/index.d.ts.map +1 -0
  272. package/dist/transform/synced-quaternion.d.ts +35 -0
  273. package/dist/transform/synced-quaternion.d.ts.map +1 -0
  274. package/dist/transform/synced-quaternion.js +128 -0
  275. package/dist/transform/synced-quaternion.js.map +1 -0
  276. package/dist/transform/synced-vector3.d.ts +34 -0
  277. package/dist/transform/synced-vector3.d.ts.map +1 -0
  278. package/dist/transform/synced-vector3.js +106 -0
  279. package/dist/transform/synced-vector3.js.map +1 -0
  280. package/dist/transform/transform.d.ts +100 -0
  281. package/dist/transform/transform.d.ts.map +1 -0
  282. package/dist/transform/transform.js +194 -0
  283. package/dist/transform/transform.js.map +1 -0
  284. package/dist/types/webxr-augmentations.d.ts +23 -0
  285. package/dist/types/webxr-augmentations.d.ts.map +1 -0
  286. package/dist/ui/document.d.ts +112 -0
  287. package/dist/ui/document.d.ts.map +1 -0
  288. package/dist/ui/document.js +298 -0
  289. package/dist/ui/document.js.map +1 -0
  290. package/dist/ui/follow.d.ts +197 -0
  291. package/dist/ui/follow.d.ts.map +1 -0
  292. package/dist/ui/follow.js +143 -0
  293. package/dist/ui/follow.js.map +1 -0
  294. package/dist/ui/index.d.ts +18 -0
  295. package/dist/ui/index.d.ts.map +1 -0
  296. package/dist/ui/screenspace.d.ts +219 -0
  297. package/dist/ui/screenspace.d.ts.map +1 -0
  298. package/dist/ui/screenspace.js +215 -0
  299. package/dist/ui/screenspace.js.map +1 -0
  300. package/dist/ui/ui.d.ts +209 -0
  301. package/dist/ui/ui.d.ts.map +1 -0
  302. package/dist/ui/ui.js +185 -0
  303. package/dist/ui/ui.js.map +1 -0
  304. package/dist/vendor/basis/README.md +46 -0
  305. package/dist/vendor/basis/basis_transcoder.js +19 -0
  306. package/dist/vendor/basis/basis_transcoder.wasm +0 -0
  307. package/dist/vendor/draco/README.md +32 -0
  308. package/dist/vendor/draco/draco_decoder.js +34 -0
  309. package/dist/vendor/draco/draco_decoder.wasm +0 -0
  310. package/dist/vendor/draco/draco_encoder.js +33 -0
  311. package/dist/vendor/draco/draco_wasm_wrapper.js +117 -0
  312. package/dist/vendor/draco/gltf/draco_decoder.js +33 -0
  313. package/dist/vendor/draco/gltf/draco_decoder.wasm +0 -0
  314. package/dist/vendor/draco/gltf/draco_encoder.js +33 -0
  315. package/dist/vendor/draco/gltf/draco_wasm_wrapper.js +116 -0
  316. package/dist/version.d.ts +2 -0
  317. package/dist/version.d.ts.map +1 -0
  318. package/dist/version.js +4 -0
  319. package/dist/version.js.map +1 -0
  320. package/dist/visibility/index.d.ts +8 -0
  321. package/dist/visibility/index.d.ts.map +1 -0
  322. package/dist/visibility/visibility.d.ts +37 -0
  323. package/dist/visibility/visibility.d.ts.map +1 -0
  324. package/dist/visibility/visibility.js +52 -0
  325. package/dist/visibility/visibility.js.map +1 -0
  326. package/package.json +46 -0
@@ -0,0 +1,478 @@
1
+ import { AudioListener, PositionalAudio } from 'three';
2
+ import { AssetManager } from '../asset/asset-manager.js';
3
+ import '../asset/cache-manager.js';
4
+ import { createSystem } from '../ecs/system.js';
5
+ import '../ecs/world.js';
6
+ import { Types } from 'elics';
7
+ import '../ecs/component-registry.js';
8
+ import { AudioPool } from './audio-pool.js';
9
+ import { AudioSource, PlaybackMode, InstanceStealPolicy } from './audio.js';
10
+
11
+ /**
12
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
13
+ *
14
+ * This source code is licensed under the MIT license found in the
15
+ * LICENSE file in the root directory of this source tree.
16
+ */
17
+ /**
18
+ * Runtime audio manager that loads sources, pools players, and applies XR-aware behavior.
19
+ *
20
+ * @remarks
21
+ * - Creates an `AudioListener` on the player head and resumes/suspends the
22
+ * audio context when XR sessions start/end.
23
+ * - Pools `Audio`/`PositionalAudio` instances per entity to minimize allocations
24
+ * and implements play/overlap/fade-restart behaviors.
25
+ * - Optionally culls distant positional audio by a distance multiplier.
26
+ *
27
+ * @category Audio
28
+ */
29
+ class AudioSystem extends createSystem({
30
+ audioEntities: { required: [AudioSource] },
31
+ }, {
32
+ /** Enable distance-based culling for positional audio instances. */
33
+ enableDistanceCulling: { type: Types.Boolean, default: true },
34
+ /** Multiplier applied to `maxDistance` for culling threshold. */
35
+ cullingDistanceMultiplier: { type: Types.Float32, default: 1.5 },
36
+ }) {
37
+ constructor() {
38
+ super(...arguments);
39
+ this.activeInstances = new Map();
40
+ this.onXRSessionStart = () => {
41
+ // Resume audio context when entering XR
42
+ const context = this.listener.context;
43
+ if (context.state === 'suspended') {
44
+ context.resume();
45
+ }
46
+ // Resume audio that was paused by session end
47
+ for (const [, instances] of this.activeInstances) {
48
+ instances.forEach((instance) => {
49
+ if (instance.pausedBySessionEnd) {
50
+ instance.audio.play();
51
+ instance.pausedBySessionEnd = false;
52
+ }
53
+ });
54
+ }
55
+ };
56
+ this.onXRSessionEnd = () => {
57
+ // Pause all active audio when exiting XR
58
+ for (const [, instances] of this.activeInstances) {
59
+ instances.forEach((instance) => {
60
+ if (instance.audio.isPlaying) {
61
+ instance.audio.pause();
62
+ instance.pausedBySessionEnd = true;
63
+ }
64
+ });
65
+ }
66
+ // Suspend audio context to save resources
67
+ const context = this.listener.context;
68
+ if (context.state === 'running') {
69
+ context.suspend();
70
+ }
71
+ };
72
+ }
73
+ init() {
74
+ // Create and attach AudioListener to camera
75
+ this.listener = new AudioListener();
76
+ this.player.head.add(this.listener);
77
+ // Handle XR session changes
78
+ this.renderer.xr.addEventListener('sessionstart', this.onXRSessionStart);
79
+ this.renderer.xr.addEventListener('sessionend', this.onXRSessionEnd);
80
+ // Handle entity lifecycle
81
+ this.queries.audioEntities.subscribe('disqualify', (entity) => {
82
+ this.cleanupEntity(entity);
83
+ });
84
+ }
85
+ update(_delta, _time) {
86
+ const time = _time;
87
+ const entities = this.queries.audioEntities.entities;
88
+ // Early exit if no audio entities
89
+ if (entities.size === 0) {
90
+ return;
91
+ }
92
+ entities.forEach((entity) => {
93
+ const index = entity.index;
94
+ // Handle audio loading
95
+ if (!AudioSource.data._loaded[index] &&
96
+ !AudioSource.data._loading[index]) {
97
+ const src = AudioSource.data.src[index];
98
+ if (src) {
99
+ this.loadAudio(entity, src);
100
+ }
101
+ return; // Skip further processing until loaded
102
+ }
103
+ // Skip if not loaded yet
104
+ if (!AudioSource.data._loaded[index]) {
105
+ return;
106
+ }
107
+ // Create pool if needed
108
+ if (!AudioSource.data._pool[index]) {
109
+ this.createPool(entity);
110
+ }
111
+ // Handle playback requests
112
+ this.handlePlaybackRequests(entity, time);
113
+ // Update active instances
114
+ this.updateActiveInstances(entity, time);
115
+ // Handle autoplay (only trigger once, not loop)
116
+ if (AudioSource.data.autoplay[index] &&
117
+ !AudioSource.data._isPlaying[index] &&
118
+ AudioSource.data._playRequested[index] === 0 // Only if not already requested
119
+ ) {
120
+ AudioSource.data._playRequested[index] = 1;
121
+ // Disable autoplay after first trigger to prevent looping
122
+ AudioSource.data.autoplay[index] = 0;
123
+ }
124
+ });
125
+ }
126
+ async loadAudio(entity, src) {
127
+ const index = entity.index;
128
+ AudioSource.data._loading[index] = 1;
129
+ try {
130
+ // Try to get from AssetManager cache first (fast path)
131
+ let buffer = AssetManager.getAudio(src);
132
+ if (!buffer) {
133
+ // Load if not in cache (handles caching automatically)
134
+ buffer = await AssetManager.loadAudio(src);
135
+ }
136
+ // TODO: Add AssetManager.retain(src) when memory management is implemented
137
+ AudioSource.data._buffer[index] = buffer;
138
+ AudioSource.data._loaded[index] = 1;
139
+ }
140
+ catch (error) {
141
+ console.error(`Failed to load audio: ${src}`, error);
142
+ }
143
+ finally {
144
+ AudioSource.data._loading[index] = 0;
145
+ }
146
+ }
147
+ createPool(entity) {
148
+ const index = entity.index;
149
+ const maxInstances = AudioSource.data.maxInstances[index];
150
+ const positional = AudioSource.data.positional[index];
151
+ // Get entity's Object3D
152
+ const parent = entity.object3D || this.scene;
153
+ // Auto-calculate pool size from maxInstances (no need for separate poolSize config)
154
+ const poolSize = maxInstances;
155
+ const pool = positional === 1
156
+ ? new AudioPool(this.listener, poolSize, true, parent)
157
+ : new AudioPool(this.listener, poolSize, false, parent);
158
+ AudioSource.data._pool[index] = pool;
159
+ // Configure spatial properties for all instances
160
+ if (positional) {
161
+ const positionalPool = pool;
162
+ const instances = positionalPool.getAllInstances();
163
+ instances.forEach((audio) => {
164
+ audio.setRefDistance(AudioSource.data.refDistance[index]);
165
+ audio.setRolloffFactor(AudioSource.data.rolloffFactor[index]);
166
+ audio.setMaxDistance(AudioSource.data.maxDistance[index]);
167
+ audio.setDistanceModel(AudioSource.data.distanceModel[index]);
168
+ audio.setDirectionalCone(AudioSource.data.coneInnerAngle[index], AudioSource.data.coneOuterAngle[index], AudioSource.data.coneOuterGain[index]);
169
+ });
170
+ }
171
+ }
172
+ handlePlaybackRequests(entity, time) {
173
+ const index = entity.index;
174
+ // Handle stop request first
175
+ if (AudioSource.data._stopRequested[index]) {
176
+ this.stopAllInstances(entity);
177
+ AudioSource.data._stopRequested[index] = 0;
178
+ AudioSource.data._playRequested[index] = 0;
179
+ AudioSource.data._pauseRequested[index] = 0;
180
+ return;
181
+ }
182
+ // Handle pause request
183
+ if (AudioSource.data._pauseRequested[index]) {
184
+ const fadeOut = AudioSource.data._fadeOut[index];
185
+ this.pauseAllInstances(entity, fadeOut, time);
186
+ AudioSource.data._pauseRequested[index] = 0;
187
+ return;
188
+ }
189
+ // Handle play request
190
+ if (AudioSource.data._playRequested[index] &&
191
+ AudioSource.data._loaded[index]) {
192
+ const playbackMode = AudioSource.data.playbackMode[index];
193
+ const fadeIn = AudioSource.data._fadeIn[index];
194
+ switch (playbackMode) {
195
+ case PlaybackMode.Restart:
196
+ this.playRestart(entity, fadeIn, time);
197
+ break;
198
+ case PlaybackMode.Overlap:
199
+ this.playOverlap(entity, fadeIn, time);
200
+ break;
201
+ case PlaybackMode.Ignore:
202
+ this.playIgnore(entity, fadeIn, time);
203
+ break;
204
+ case PlaybackMode.FadeRestart:
205
+ this.playFadeRestart(entity, time);
206
+ break;
207
+ }
208
+ AudioSource.data._playRequested[index] = 0;
209
+ }
210
+ }
211
+ playRestart(entity, fadeIn, time) {
212
+ this.stopAllInstances(entity);
213
+ this.createAndPlayInstance(entity, fadeIn, time);
214
+ }
215
+ playOverlap(entity, fadeIn, time) {
216
+ const index = entity.index;
217
+ const instances = this.activeInstances.get(entity) || [];
218
+ const maxInstances = AudioSource.data.maxInstances[index];
219
+ if (instances.length < maxInstances) {
220
+ this.createAndPlayInstance(entity, fadeIn, time);
221
+ }
222
+ else {
223
+ // Apply steal policy
224
+ const policy = AudioSource.data.instanceStealPolicy[index];
225
+ this.stealInstance(entity, instances, policy, time);
226
+ this.createAndPlayInstance(entity, fadeIn, time);
227
+ }
228
+ }
229
+ playIgnore(entity, fadeIn, time) {
230
+ const instances = this.activeInstances.get(entity) || [];
231
+ if (instances.length === 0) {
232
+ this.createAndPlayInstance(entity, fadeIn, time);
233
+ }
234
+ }
235
+ playFadeRestart(entity, time) {
236
+ const index = entity.index;
237
+ const crossfadeDuration = AudioSource.data.crossfadeDuration[index];
238
+ const instances = this.activeInstances.get(entity) || [];
239
+ // Fade out existing instances
240
+ instances.forEach((instance) => {
241
+ instance.isFadingOut = true;
242
+ instance.fadeStartTime = time;
243
+ instance.fadeStartVolume = instance.audio.getVolume();
244
+ instance.fadeDuration = crossfadeDuration;
245
+ });
246
+ // Start new instance with fade in
247
+ this.createAndPlayInstance(entity, crossfadeDuration, time);
248
+ }
249
+ createAndPlayInstance(entity, fadeIn, time) {
250
+ const index = entity.index;
251
+ const pool = AudioSource.data._pool[index];
252
+ const buffer = AudioSource.data._buffer[index];
253
+ if (!pool || !buffer) {
254
+ return;
255
+ }
256
+ const audio = pool.acquire();
257
+ if (!audio) {
258
+ return;
259
+ }
260
+ // Set buffer and properties
261
+ audio.setBuffer(buffer);
262
+ const shouldLoop = AudioSource.data.loop[index] === 1;
263
+ audio.setLoop(shouldLoop);
264
+ audio.setVolume(fadeIn > 0 ? 0 : AudioSource.data.volume[index]);
265
+ // Create instance tracking
266
+ const instance = {
267
+ audio,
268
+ startTime: time,
269
+ };
270
+ if (fadeIn > 0) {
271
+ instance.isFadingIn = true;
272
+ instance.fadeStartTime = instance.startTime;
273
+ instance.fadeStartVolume = 0;
274
+ instance.fadeDuration = fadeIn;
275
+ }
276
+ // Add to active instances
277
+ const instances = this.activeInstances.get(entity) || [];
278
+ instances.push(instance);
279
+ this.activeInstances.set(entity, instances);
280
+ // Start playback
281
+ audio.play();
282
+ AudioSource.data._isPlaying[index] = 1;
283
+ // Handle onEnded - use audio.source.onended (the only method that works reliably)
284
+ if (audio.source) {
285
+ audio.source.onended = () => {
286
+ this.onInstanceEnded(entity, instance);
287
+ };
288
+ }
289
+ else {
290
+ // If source not available immediately, try after a short delay
291
+ setTimeout(() => {
292
+ if (audio.source) {
293
+ audio.source.onended = () => {
294
+ this.onInstanceEnded(entity, instance);
295
+ };
296
+ }
297
+ }, 10);
298
+ }
299
+ }
300
+ updateActiveInstances(entity, time) {
301
+ const instances = this.activeInstances.get(entity);
302
+ if (!instances || instances.length === 0) {
303
+ return;
304
+ }
305
+ const index = entity.index;
306
+ const currentTime = time;
307
+ const targetVolume = AudioSource.data.volume[index];
308
+ // Update each instance
309
+ for (let i = instances.length - 1; i >= 0; i--) {
310
+ const instance = instances[i];
311
+ // Handle fade in
312
+ if (instance.isFadingIn &&
313
+ instance.fadeStartTime &&
314
+ instance.fadeDuration) {
315
+ const fadeProgress = (currentTime - instance.fadeStartTime) / instance.fadeDuration;
316
+ if (fadeProgress >= 1) {
317
+ instance.audio.setVolume(targetVolume);
318
+ instance.isFadingIn = false;
319
+ }
320
+ else {
321
+ const currentVolume = targetVolume * fadeProgress;
322
+ instance.audio.setVolume(currentVolume);
323
+ }
324
+ }
325
+ // Handle fade out
326
+ if (instance.isFadingOut &&
327
+ instance.fadeStartTime &&
328
+ instance.fadeDuration) {
329
+ const fadeProgress = (currentTime - instance.fadeStartTime) / instance.fadeDuration;
330
+ if (fadeProgress >= 1) {
331
+ this.releaseInstance(entity, instance, i);
332
+ }
333
+ else {
334
+ const startVolume = instance.fadeStartVolume || targetVolume;
335
+ const currentVolume = startVolume * (1 - fadeProgress);
336
+ instance.audio.setVolume(currentVolume);
337
+ }
338
+ }
339
+ // Update volume if it changed (and not currently fading)
340
+ if (!instance.isFadingIn && !instance.isFadingOut) {
341
+ const currentVolume = instance.audio.getVolume();
342
+ if (Math.abs(currentVolume - targetVolume) > 0.01) {
343
+ instance.audio.setVolume(targetVolume);
344
+ }
345
+ }
346
+ // Update spatial properties if they changed
347
+ if (AudioSource.data.positional[index] &&
348
+ instance.audio instanceof PositionalAudio) {
349
+ if (instance.audio.getRefDistance() !==
350
+ AudioSource.data.refDistance[index]) {
351
+ instance.audio.setRefDistance(AudioSource.data.refDistance[index]);
352
+ }
353
+ instance.audio.setRolloffFactor(AudioSource.data.rolloffFactor[index]);
354
+ instance.audio.setMaxDistance(AudioSource.data.maxDistance[index]);
355
+ }
356
+ }
357
+ // Update playing state
358
+ AudioSource.data._isPlaying[index] = instances.length > 0 ? 1 : 0;
359
+ }
360
+ onInstanceEnded(entity, instance) {
361
+ const instances = this.activeInstances.get(entity);
362
+ if (!instances) {
363
+ return;
364
+ }
365
+ const instanceIndex = instances.indexOf(instance);
366
+ if (instanceIndex !== -1) {
367
+ this.releaseInstance(entity, instance, instanceIndex);
368
+ }
369
+ }
370
+ releaseInstance(entity, instance, instanceIndex) {
371
+ const index = entity.index;
372
+ const pool = AudioSource.data._pool[index];
373
+ const instances = this.activeInstances.get(entity);
374
+ // Release back to pool
375
+ pool.release(instance.audio);
376
+ // Remove from active instances
377
+ instances.splice(instanceIndex, 1);
378
+ if (instances.length === 0) {
379
+ this.activeInstances.delete(entity);
380
+ AudioSource.data._isPlaying[index] = 0;
381
+ }
382
+ }
383
+ stopAllInstances(entity) {
384
+ const instances = this.activeInstances.get(entity);
385
+ if (!instances) {
386
+ return;
387
+ }
388
+ const index = entity.index;
389
+ const pool = AudioSource.data._pool[index];
390
+ instances.forEach((instance) => {
391
+ pool.release(instance.audio);
392
+ });
393
+ this.activeInstances.delete(entity);
394
+ AudioSource.data._isPlaying[index] = 0;
395
+ }
396
+ pauseAllInstances(entity, fadeOut, time) {
397
+ const instances = this.activeInstances.get(entity);
398
+ if (!instances) {
399
+ return;
400
+ }
401
+ if (fadeOut > 0) {
402
+ instances.forEach((instance) => {
403
+ instance.isFadingOut = true;
404
+ instance.fadeStartTime = time;
405
+ instance.fadeStartVolume = instance.audio.getVolume();
406
+ instance.fadeDuration = fadeOut;
407
+ });
408
+ }
409
+ else {
410
+ instances.forEach((instance) => {
411
+ instance.audio.pause();
412
+ });
413
+ }
414
+ }
415
+ stealInstance(entity, instances, policy, _time) {
416
+ if (instances.length === 0) {
417
+ return;
418
+ }
419
+ let instanceToSteal;
420
+ switch (policy) {
421
+ case InstanceStealPolicy.Oldest:
422
+ instanceToSteal = instances[0];
423
+ break;
424
+ case InstanceStealPolicy.Quietest:
425
+ instanceToSteal = instances.reduce((quietest, current) => current.audio.getVolume() < quietest.audio.getVolume()
426
+ ? current
427
+ : quietest);
428
+ break;
429
+ case InstanceStealPolicy.Furthest:
430
+ // Implement distance-based stealing using camera position
431
+ const cameraPosition = this.player.head.position;
432
+ instanceToSteal = instances.reduce((furthest, current) => {
433
+ const furthestDistance = furthest.audio.position
434
+ ? cameraPosition.distanceTo(furthest.audio.position)
435
+ : 0;
436
+ const currentDistance = current.audio.position
437
+ ? cameraPosition.distanceTo(current.audio.position)
438
+ : 0;
439
+ return currentDistance > furthestDistance ? current : furthest;
440
+ });
441
+ break;
442
+ default:
443
+ instanceToSteal = instances[0];
444
+ }
445
+ const instanceIndex = instances.indexOf(instanceToSteal);
446
+ this.releaseInstance(entity, instanceToSteal, instanceIndex);
447
+ }
448
+ cleanupEntity(entity) {
449
+ const instances = this.activeInstances.get(entity);
450
+ if (!instances) {
451
+ return;
452
+ }
453
+ const index = entity.index;
454
+ const pool = AudioSource.data._pool[index];
455
+ if (pool) {
456
+ instances.forEach((instance) => {
457
+ pool.release(instance.audio);
458
+ });
459
+ pool.dispose();
460
+ }
461
+ // TODO: Add AssetManager.release(src) when memory management is implemented
462
+ // const src = AudioSource.data.src[index];
463
+ // if (src) AssetManager.release(src);
464
+ this.activeInstances.delete(entity);
465
+ }
466
+ destroy() {
467
+ // Clean up all entities
468
+ for (const [entity] of this.activeInstances) {
469
+ this.cleanupEntity(entity);
470
+ }
471
+ // Remove event listeners
472
+ this.renderer.xr.removeEventListener('sessionstart', this.onXRSessionStart);
473
+ this.renderer.xr.removeEventListener('sessionend', this.onXRSessionEnd);
474
+ }
475
+ }
476
+
477
+ export { AudioSystem };
478
+ //# sourceMappingURL=audio-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-system.js","sources":["../../src/audio/audio-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Entity } from '../ecs/index.js';
8
+ import type { World } from '../ecs/index.js';
9
+ /** Utility helpers to control {@link AudioSource} without touching Three audio.
10
+ * @category Audio
11
+ */
12
+ export declare class AudioUtils {
13
+ /**
14
+ * Play audio on an entity
15
+ * @param entity - Entity with Audio component
16
+ * @param fadeIn - Fade in duration in seconds
17
+ */
18
+ static play(entity: Entity, fadeIn?: number): void;
19
+ /**
20
+ * Pause audio on an entity
21
+ * @param entity - Entity with Audio component
22
+ * @param fadeOut - Fade out duration in seconds
23
+ */
24
+ static pause(entity: Entity, fadeOut?: number): void;
25
+ /**
26
+ * Stop audio on an entity
27
+ * @param entity - Entity with Audio component
28
+ */
29
+ static stop(entity: Entity): void;
30
+ /**
31
+ * Check if audio is playing on an entity
32
+ * @param entity - Entity with Audio component
33
+ * @returns True if audio is playing
34
+ */
35
+ static isPlaying(entity: Entity): boolean;
36
+ /**
37
+ * Set volume on an entity's audio
38
+ * @param entity - Entity with Audio component
39
+ * @param volume - Volume level (0.0 to 1.0)
40
+ */
41
+ static setVolume(entity: Entity, volume: number): void;
42
+ /**
43
+ * Get volume from an entity's audio
44
+ * @param entity - Entity with Audio component
45
+ * @returns Current volume level
46
+ */
47
+ static getVolume(entity: Entity): number;
48
+ /**
49
+ * Preload audio for an entity
50
+ * @param entity - Entity with Audio component
51
+ * @returns Promise that resolves when audio is loaded
52
+ */
53
+ static preload(entity: Entity): Promise<void>;
54
+ /**
55
+ * Create a one-shot audio entity that auto-removes after playing
56
+ * @param world - World instance
57
+ * @param src - Audio source path
58
+ * @param options - Additional audio options
59
+ * @returns Created entity
60
+ */
61
+ static createOneShot(world: World, src: string, options?: {
62
+ volume?: number;
63
+ positional?: boolean;
64
+ position?: {
65
+ x: number;
66
+ y: number;
67
+ z: number;
68
+ };
69
+ }): Entity;
70
+ }
71
+ //# sourceMappingURL=audio-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-utils.d.ts","sourceRoot":"","sources":["../../src/audio/audio-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;GAEG;AACH,qBAAa,UAAU;IACrB;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,IAAI;IAY7C;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI;IAW/C;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUjC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASzC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUtD;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IASxC;;;;OAIG;WACU,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnD;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3C,GACL,MAAM;CAqBV"}