x_ite 16.1.3 → 16.2.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 (56) hide show
  1. package/README.md +6 -6
  2. package/dist/assets/components/AnnotationComponent.js +17 -38
  3. package/dist/assets/components/AnnotationComponent.min.js +2 -2
  4. package/dist/assets/components/CADGeometryComponent.js +17 -38
  5. package/dist/assets/components/CADGeometryComponent.min.js +2 -2
  6. package/dist/assets/components/CubeMapTexturingComponent.js +17 -38
  7. package/dist/assets/components/CubeMapTexturingComponent.min.js +2 -2
  8. package/dist/assets/components/DISComponent.js +17 -38
  9. package/dist/assets/components/DISComponent.min.js +2 -2
  10. package/dist/assets/components/EventUtilitiesComponent.js +17 -38
  11. package/dist/assets/components/EventUtilitiesComponent.min.js +2 -2
  12. package/dist/assets/components/GaussianSplatsComponent.js +17 -38
  13. package/dist/assets/components/GaussianSplatsComponent.min.js +2 -2
  14. package/dist/assets/components/Geometry2DComponent.js +17 -38
  15. package/dist/assets/components/Geometry2DComponent.min.js +2 -2
  16. package/dist/assets/components/Geometry3DComponent.js +17 -38
  17. package/dist/assets/components/Geometry3DComponent.min.js +2 -2
  18. package/dist/assets/components/GeospatialComponent.js +17 -38
  19. package/dist/assets/components/GeospatialComponent.min.js +2 -2
  20. package/dist/assets/components/HAnimComponent.js +17 -38
  21. package/dist/assets/components/HAnimComponent.min.js +2 -2
  22. package/dist/assets/components/KeyDeviceSensorComponent.js +17 -38
  23. package/dist/assets/components/KeyDeviceSensorComponent.min.js +2 -2
  24. package/dist/assets/components/LayoutComponent.js +17 -38
  25. package/dist/assets/components/LayoutComponent.min.js +2 -2
  26. package/dist/assets/components/NURBSComponent.js +18 -39
  27. package/dist/assets/components/NURBSComponent.min.js +2 -2
  28. package/dist/assets/components/ParticleSystemsComponent.js +17 -38
  29. package/dist/assets/components/ParticleSystemsComponent.min.js +2 -2
  30. package/dist/assets/components/PickingComponent.js +17 -38
  31. package/dist/assets/components/PickingComponent.min.js +2 -2
  32. package/dist/assets/components/RigidBodyPhysicsComponent.js +28 -39
  33. package/dist/assets/components/RigidBodyPhysicsComponent.min.js +2 -2
  34. package/dist/assets/components/ScriptingComponent.js +17 -38
  35. package/dist/assets/components/ScriptingComponent.min.js +2 -2
  36. package/dist/assets/components/TextComponent.js +17 -38
  37. package/dist/assets/components/TextComponent.min.js +2 -2
  38. package/dist/assets/components/TextureProjectionComponent.js +17 -38
  39. package/dist/assets/components/TextureProjectionComponent.min.js +2 -2
  40. package/dist/assets/components/Texturing3DComponent.js +27 -46
  41. package/dist/assets/components/Texturing3DComponent.min.js +2 -2
  42. package/dist/assets/components/VolumeRenderingComponent.js +17 -38
  43. package/dist/assets/components/VolumeRenderingComponent.min.js +2 -2
  44. package/dist/assets/components/WebXRComponent.js +17 -38
  45. package/dist/assets/components/WebXRComponent.min.js +2 -2
  46. package/dist/assets/components/X_ITEComponent.js +22 -39
  47. package/dist/assets/components/X_ITEComponent.min.js +2 -2
  48. package/dist/example.html +1 -1
  49. package/dist/x_ite.css +1 -1
  50. package/dist/x_ite.d.ts +3 -0
  51. package/dist/x_ite.js +232 -191
  52. package/dist/x_ite.min.js +2 -2
  53. package/dist/x_ite.min.mjs +2 -2
  54. package/dist/x_ite.mjs +232 -191
  55. package/dist/x_ite.zip +0 -0
  56. package/package.json +6 -6
package/dist/x_ite.mjs CHANGED
@@ -1,7 +1,7 @@
1
- /* X_ITE v16.1.3 */
1
+ /* X_ITE v16.2.0 */
2
2
  var __webpack_modules__ = ({
3
3
 
4
- /***/ 143
4
+ /***/ 627
5
5
  (module, exports) {
6
6
 
7
7
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
@@ -1006,7 +1006,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
1006
1006
 
1007
1007
  /***/ },
1008
1008
 
1009
- /***/ 701
1009
+ /***/ 249
1010
1010
  (module) {
1011
1011
 
1012
1012
  (function webpackUniversalModuleDefinition(root, factory) {
@@ -2002,7 +2002,7 @@ return /******/ (function(modules) { // webpackBootstrap
2002
2002
 
2003
2003
  /***/ },
2004
2004
 
2005
- /***/ 877
2005
+ /***/ 289
2006
2006
  (module) {
2007
2007
 
2008
2008
  /**
@@ -6809,48 +6809,27 @@ if (true) {
6809
6809
  /******/
6810
6810
  /************************************************************************/
6811
6811
  /******/ /* webpack/runtime/define property getters */
6812
- /******/ (() => {
6813
- /******/ // define getter/value functions for harmony exports
6814
- /******/ __webpack_require__.d = (exports, definition) => {
6815
- /******/ if(Array.isArray(definition)) {
6816
- /******/ var i = 0;
6817
- /******/ while(i < definition.length) {
6818
- /******/ var key = definition[i++];
6819
- /******/ var binding = definition[i++];
6820
- /******/ if(!__webpack_require__.o(exports, key)) {
6821
- /******/ if(binding === 0) {
6822
- /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
6823
- /******/ } else {
6824
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
6825
- /******/ }
6826
- /******/ } else if(binding === 0) { i++; }
6827
- /******/ }
6828
- /******/ } else {
6829
- /******/ for(var key in definition) {
6830
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
6831
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
6832
- /******/ }
6833
- /******/ }
6812
+ /******/ // define getter/value functions for harmony exports
6813
+ /******/ __webpack_require__.d = (exports, definition) => {
6814
+ /******/ for(var key in definition) {
6815
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
6816
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
6834
6817
  /******/ }
6835
- /******/ };
6836
- /******/ })();
6818
+ /******/ }
6819
+ /******/ };
6837
6820
  /******/
6838
6821
  /******/ /* webpack/runtime/global */
6839
- /******/ (() => {
6840
- /******/ __webpack_require__.g = (function() {
6841
- /******/ if (typeof globalThis === 'object') return globalThis;
6842
- /******/ try {
6843
- /******/ return this || new Function('return this')();
6844
- /******/ } catch (e) {
6845
- /******/ if (typeof window === 'object') return window;
6846
- /******/ }
6847
- /******/ })();
6822
+ /******/ __webpack_require__.g = (function() {
6823
+ /******/ if (typeof globalThis === 'object') return globalThis;
6824
+ /******/ try {
6825
+ /******/ return this || new Function('return this')();
6826
+ /******/ } catch (e) {
6827
+ /******/ if (typeof window === 'object') return window;
6828
+ /******/ }
6848
6829
  /******/ })();
6849
6830
  /******/
6850
6831
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
6851
- /******/ (() => {
6852
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
6853
- /******/ })();
6832
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
6854
6833
  /******/
6855
6834
  /************************************************************************/
6856
6835
 
@@ -6861,7 +6840,7 @@ Object .defineProperty (Namespace, "add",
6861
6840
  {
6862
6841
  value (name, module)
6863
6842
  {
6864
- if (Namespace .hasOwnProperty (name))
6843
+ if (Object .hasOwn (Namespace, name))
6865
6844
  {
6866
6845
  console .error (new Error (`Namespace: "${name}" already exists.`));
6867
6846
  return module;
@@ -6891,18 +6870,22 @@ Object .defineProperty (X3DConstants, "addConstant",
6891
6870
  {
6892
6871
  value (name, value)
6893
6872
  {
6894
- if (this .hasOwnProperty (name) || this .hasOwnProperty (value))
6873
+ if (Object .hasOwn (this, name) || Object .hasOwn (this, value))
6895
6874
  return;
6896
6875
 
6897
- Object .defineProperty (this, name,
6898
- {
6899
- value: value ?? ++ CONSTANT_VALUE,
6900
- enumerable: true,
6901
- });
6876
+ value ??= ++ CONSTANT_VALUE;
6902
6877
 
6903
- Object .defineProperty (this, this [name],
6878
+ Object .defineProperties (this,
6904
6879
  {
6905
- value: name,
6880
+ [name]:
6881
+ {
6882
+ value: value,
6883
+ enumerable: true,
6884
+ },
6885
+ [value]:
6886
+ {
6887
+ value: name,
6888
+ },
6906
6889
  });
6907
6890
  },
6908
6891
  });
@@ -18882,7 +18865,7 @@ const Legacy_default_ = Legacy;
18882
18865
 
18883
18866
  /* harmony default export */ const Browser_Legacy = (x_ite_Namespace .add ("Legacy", Legacy_default_));
18884
18867
  ;// ./src/x_ite/BROWSER_VERSION.js
18885
- const BROWSER_VERSION_default_ = "16.1.3";
18868
+ const BROWSER_VERSION_default_ = "16.2.0";
18886
18869
  ;
18887
18870
 
18888
18871
  /* harmony default export */ const BROWSER_VERSION = (x_ite_Namespace .add ("BROWSER_VERSION", BROWSER_VERSION_default_));
@@ -18992,37 +18975,28 @@ const dictionary_default_ = [
18992
18975
  {
18993
18976
  en: "fps",
18994
18977
  de: "BpS",
18995
- fr: "",
18996
18978
  },
18997
18979
  {
18998
18980
  en: "Speed",
18999
18981
  de: "Geschwindigkeit",
19000
- fr: "Vélocité",
18982
+ fr: "Vitesse",
19001
18983
  },
19002
18984
  {
19003
18985
  en: "m/s",
19004
- de: "",
19005
- fr: "",
19006
18986
  },
19007
18987
  {
19008
18988
  en: "km/h",
19009
- de: "",
19010
- fr: "",
19011
18989
  },
19012
18990
  {
19013
18991
  en: "Browser",
19014
- de: "",
19015
18992
  fr: "Navigateur",
19016
18993
  },
19017
18994
  {
19018
18995
  en: "ms",
19019
- de: "",
19020
- fr: "",
19021
18996
  },
19022
18997
  {
19023
18998
  en: "X3D total",
19024
18999
  de: "X3D gesamt",
19025
- fr: "X3D total",
19026
19000
  },
19027
19001
  {
19028
19002
  en: "Event Processing",
@@ -19047,12 +19021,12 @@ const dictionary_default_ = [
19047
19021
  {
19048
19022
  en: "Rendering",
19049
19023
  de: "Rendering",
19050
- fr: "Rendement",
19024
+ fr: "Rendu",
19051
19025
  },
19052
19026
  {
19053
19027
  en: "Number of Primitives",
19054
19028
  de: "Anzahl der Grundobjekte",
19055
- fr: "Nombre d'Objets de Base",
19029
+ fr: "Nombre de Primitives",
19056
19030
  },
19057
19031
  {
19058
19032
  en: "Number of Shapes",
@@ -19062,12 +19036,12 @@ const dictionary_default_ = [
19062
19036
  {
19063
19037
  en: "Number of Sensors",
19064
19038
  de: "Anzahl der Sensoren",
19065
- fr: "Nombre de Senseurs",
19039
+ fr: "Nombre de Capteurs",
19066
19040
  },
19067
19041
  {
19068
19042
  en: "Browser Timings",
19069
19043
  de: "Zeitberechnung",
19070
- fr: "Calcul du Temps",
19044
+ fr: "Temps du Navigateur",
19071
19045
  },
19072
19046
  {
19073
19047
  en: "Viewpoints",
@@ -19077,7 +19051,7 @@ const dictionary_default_ = [
19077
19051
  {
19078
19052
  en: "Available Viewers",
19079
19053
  de: "Verfügbare Betrachter",
19080
- fr: "Visionneurs disponibles",
19054
+ fr: "Visionneurs disponibles",
19081
19055
  },
19082
19056
  {
19083
19057
  en: "Straighten Horizon",
@@ -19087,17 +19061,17 @@ const dictionary_default_ = [
19087
19061
  {
19088
19062
  en: "Primitive Quality",
19089
19063
  de: "Qualität der Grundobjekte",
19090
- fr: "Qualité des Objets simples",
19064
+ fr: "Qualité des Primitives",
19091
19065
  },
19092
19066
  {
19093
19067
  en: "High",
19094
19068
  de: "Hoch",
19095
- fr: "Haut",
19069
+ fr: "Élevée",
19096
19070
  },
19097
19071
  {
19098
19072
  en: "high",
19099
19073
  de: "hoch",
19100
- fr: "haut",
19074
+ fr: "élevée",
19101
19075
  },
19102
19076
  {
19103
19077
  en: "Medium",
@@ -19121,18 +19095,18 @@ const dictionary_default_ = [
19121
19095
  },
19122
19096
  {
19123
19097
  en: "Texture Quality",
19124
- de: "Textur Qualität",
19098
+ de: "Texturqualität",
19125
19099
  fr: "Qualité des Textures",
19126
19100
  },
19127
19101
  {
19128
19102
  en: "Display Rubberband",
19129
19103
  de: "Gummiband anzeigen",
19130
- fr: "Présenter le Bande élastique",
19104
+ fr: "Afficher la Sélection élastique",
19131
19105
  },
19132
19106
  {
19133
19107
  en: "Rubberband",
19134
19108
  de: "Gummiband",
19135
- fr: "Bande élastique",
19109
+ fr: "Sélection élastique",
19136
19110
  },
19137
19111
  {
19138
19112
  en: "on",
@@ -19147,22 +19121,22 @@ const dictionary_default_ = [
19147
19121
  {
19148
19122
  en: "Mute Browser",
19149
19123
  de: "Browser stumm schalten",
19150
- fr: "Rendre Navigateur muet",
19124
+ fr: "Couper le Son du Navigateur",
19151
19125
  },
19152
19126
  {
19153
19127
  en: "Browser muted",
19154
- de: "Browser stumm geschalten",
19155
- fr: "Navigateur muet",
19128
+ de: "Browser stummgeschaltet",
19129
+ fr: "Son du Navigateur coupé",
19156
19130
  },
19157
19131
  {
19158
19132
  en: "Browser unmuted",
19159
- de: "Browser Ton an",
19160
- fr: "Son de Navigateur réactivé",
19133
+ de: "Browserton eingeschaltet",
19134
+ fr: "Son du Navigateur rétabli",
19161
19135
  },
19162
19136
  {
19163
19137
  en: "Leave Fullscreen",
19164
19138
  de: "Vollbild verlassen",
19165
- fr: "Laisser le plein Écran",
19139
+ fr: "Quitter le Plein Écran",
19166
19140
  },
19167
19141
  {
19168
19142
  en: "Fullscreen",
@@ -19207,7 +19181,6 @@ const dictionary_default_ = [
19207
19181
  {
19208
19182
  en: "Points",
19209
19183
  de: "Punkte",
19210
- fr: "",
19211
19184
  },
19212
19185
  {
19213
19186
  en: "Flat",
@@ -19216,7 +19189,7 @@ const dictionary_default_ = [
19216
19189
  },
19217
19190
  {
19218
19191
  en: "Wireframe",
19219
- de: "Drahtgittermodel",
19192
+ de: "Drahtgittermodell",
19220
19193
  fr: "Image filaire",
19221
19194
  },
19222
19195
  {
@@ -19237,7 +19210,7 @@ const dictionary_default_ = [
19237
19210
  {
19238
19211
  en: "Failed loading world.",
19239
19212
  de: "Laden der Dateien fehlgeschlagen.",
19240
- fr: "Le chargement des Fichiers a échoué.",
19213
+ fr: "Le chargement des fichiers a échoué.",
19241
19214
  },
19242
19215
  {
19243
19216
  en: "Show World Info",
@@ -19247,12 +19220,11 @@ const dictionary_default_ = [
19247
19220
  {
19248
19221
  en: "Viewpoint is copied to clipboard.",
19249
19222
  de: "Ansichtspunkt wurde in die Zwischenablage kopiert.",
19250
- fr: "Le point de Vue est copié dans le Presse-Papiers.",
19223
+ fr: "Le point de vue a été copié dans le presse-papiers.",
19251
19224
  },
19252
19225
  {
19253
19226
  en: "Animations",
19254
- de: "Animationen",
19255
- fr: "",
19227
+ fr: "Séquences animées",
19256
19228
  },
19257
19229
  {
19258
19230
  en: "All",
@@ -19266,18 +19238,18 @@ const dictionary_default_ = [
19266
19238
  },
19267
19239
  {
19268
19240
  en: "Start WebXR session.",
19269
- de: "Starte eine WebXR Session.",
19270
- fr: "Démarrez une session WebXR.",
19241
+ de: "WebXR-Sitzung starten.",
19242
+ fr: "Démarrer une session WebXR.",
19271
19243
  },
19272
19244
  {
19273
19245
  en: "Stop WebXR session.",
19274
- de: "Beende die WebXR Session.",
19275
- fr: "Terminez la session WebXR.",
19246
+ de: "WebXR-Sitzung beenden.",
19247
+ fr: "Terminer la session WebXR.",
19276
19248
  },
19277
19249
  {
19278
19250
  en: "Activate sound.",
19279
- de: "Activiere den Ton.",
19280
- fr: "Activez le son.",
19251
+ de: "Ton aktivieren.",
19252
+ fr: "Activer le son.",
19281
19253
  },
19282
19254
  {
19283
19255
  en: "Points; Lines; Triangles",
@@ -19286,7 +19258,7 @@ const dictionary_default_ = [
19286
19258
  },
19287
19259
  {
19288
19260
  en: "Opaque Shapes + Transparent Shapes",
19289
- de: "opaque Formen + transparente Formen",
19261
+ de: "Undurchsichtige Formen + Transparente Formen",
19290
19262
  fr: "Formes opaques + Formes transparentes",
19291
19263
  },
19292
19264
  ];
@@ -19821,13 +19793,15 @@ Object .assign (Object .setPrototypeOf (BrowserOptions .prototype, Base_X3DBaseN
19821
19793
  this ._Exposure .addInterest ("set_Exposure__", this);
19822
19794
  this ._LogarithmicDepthBuffer .addInterest ("set_LogarithmicDepthBuffer__", this);
19823
19795
  this ._Multisampling .addInterest ("set_Multisampling__", this);
19824
- this ._Mute .addInterest ("set_Mute__", this);
19796
+ this ._Mute .addInterest ("set_SoundIntensity__", this);
19825
19797
  this ._OrderIndependentTransparency .addInterest ("set_OrderIndependentTransparency__", this);
19798
+ this ._SoundIntensity .addInterest ("set_SoundIntensity__", this);
19826
19799
  this ._Timings .addInterest ("set_Timings__", this);
19827
19800
  this ._XRSessionMode .addInterest ("set_XRSessionMode__", this);
19828
19801
 
19829
19802
  this .set_Antialiased__ (this ._Antialiased);
19830
19803
  this .set_Shading__ (this ._Shading);
19804
+ this .set_SoundIntensity__ ();
19831
19805
  this .set_AutoUpdate__ (this ._AutoUpdate);
19832
19806
  this .set_ContentScale__ (this ._ContentScale);
19833
19807
  this .set_DisplayColorSpace (this ._DisplayColorSpace);
@@ -19996,13 +19970,6 @@ Object .assign (Object .setPrototypeOf (BrowserOptions .prototype, Base_X3DBaseN
19996
19970
  browser .setShading (this .shading);
19997
19971
  };
19998
19972
  })(),
19999
- set_StraightenHorizon__ (straightenHorizon)
20000
- {
20001
- this .localStorage .StraightenHorizon = straightenHorizon .getValue ();
20002
-
20003
- if (straightenHorizon .getValue ())
20004
- this .getBrowser () .getActiveLayer () ?.straightenView ();
20005
- },
20006
19973
  set_AutoUpdate__ (autoUpdate)
20007
19974
  {
20008
19975
  document .removeEventListener ("visibilitychange", this .checkUpdateListener);
@@ -20139,20 +20106,25 @@ Object .assign (Object .setPrototypeOf (BrowserOptions .prototype, Base_X3DBaseN
20139
20106
 
20140
20107
  browser .reshape ();
20141
20108
  },
20142
- set_Mute__ (mute)
20109
+ set_OrderIndependentTransparency__ ()
20110
+ {
20111
+ this .getBrowser () .reshape ();
20112
+ },
20113
+ set_SoundIntensity__ ()
20143
20114
  {
20144
20115
  const
20145
- browser = this .getBrowser (),
20146
- audioContext = browser .getAudioContext ();
20116
+ unmute = !this ._Mute .getValue (),
20117
+ gain = unmute * Math_Algorithm .clamp (this ._SoundIntensity .getValue (), 0, 1);
20147
20118
 
20148
- if (mute .getValue ())
20149
- browser .stopAudioElement (audioContext, "suspend");
20150
- else
20151
- browser .startAudioElement (audioContext, "resume");
20119
+ for (const soundNode of this .getBrowser () .getSoundDestinations ())
20120
+ soundNode .getSoundDestination () .gain .value = gain;
20152
20121
  },
20153
- set_OrderIndependentTransparency__ ()
20122
+ set_StraightenHorizon__ (straightenHorizon)
20154
20123
  {
20155
- this .getBrowser () .reshape ();
20124
+ this .localStorage .StraightenHorizon = straightenHorizon .getValue ();
20125
+
20126
+ if (straightenHorizon .getValue ())
20127
+ this .getBrowser () .getActiveLayer () ?.straightenView ();
20156
20128
  },
20157
20129
  set_Timings__ (timings)
20158
20130
  {
@@ -20205,6 +20177,7 @@ Object .defineProperties (BrowserOptions,
20205
20177
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "Mute", new x_ite_Fields .SFBool ()),
20206
20178
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "Notifications", new x_ite_Fields .SFBool (true)),
20207
20179
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "OrderIndependentTransparency", new x_ite_Fields .SFBool ()),
20180
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "SoundIntensity", new x_ite_Fields .SFFloat (1)),
20208
20181
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "StraightenHorizon", new x_ite_Fields .SFBool (true)),
20209
20182
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "TextCompression", new x_ite_Fields .SFString ("CHAR_SPACING")),
20210
20183
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "Timings", new x_ite_Fields .SFBool ()),
@@ -20338,6 +20311,7 @@ Object .defineProperties (RenderingProperties,
20338
20311
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "MaxSamples", new x_ite_Fields .SFInt32 (0)),
20339
20312
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "Multisampling", new x_ite_Fields .SFInt32 (4)),
20340
20313
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "PixelsPerPoint", new x_ite_Fields .SFDouble (1)),
20314
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "SoundDestinations", new x_ite_Fields .SFInt32 ()),
20341
20315
  new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "XRSession", new x_ite_Fields .SFBool ()),
20342
20316
  ]),
20343
20317
  enumerable: true,
@@ -21581,7 +21555,7 @@ Object .assign (Object .setPrototypeOf (X3DNode .prototype, Base_X3DBaseNode .pr
21581
21555
  {
21582
21556
  destinationField .addReference (instance .getField (originalReference .getName ()));
21583
21557
  }
21584
- catch (error)
21558
+ catch
21585
21559
  {
21586
21560
  console .error (`No reference '${originalReference .getName ()}' inside execution context ${instance .getTypeName ()} '${instance .getName ()}'.`);
21587
21561
  }
@@ -22010,7 +21984,7 @@ Object .assign (Object .setPrototypeOf (X3DNode .prototype, Base_X3DBaseNode .pr
22010
21984
  [_metaDataCallbacks]: new Map (),
22011
21985
  addMetaDataCallback (key, path, callback)
22012
21986
  {
22013
- if (!this .hasOwnProperty (_metaDataCallbacks))
21987
+ if (!Object .hasOwn (this, _metaDataCallbacks))
22014
21988
  this [_metaDataCallbacks] = new Map ();
22015
21989
 
22016
21990
  let map = this [_metaDataCallbacks] .get (path);
@@ -31218,7 +31192,7 @@ const Plane3_default_ = Plane3;
31218
31192
 
31219
31193
  /* harmony default export */ const Geometry_Plane3 = (x_ite_Namespace .add ("Plane3", Plane3_default_));
31220
31194
  ;// ./src/standard/Math/Geometry/Triangle3.js
31221
- /* provided dependency */ var libtess = __webpack_require__(877);
31195
+ /* provided dependency */ var libtess = __webpack_require__(289);
31222
31196
 
31223
31197
 
31224
31198
  const Triangle3 =
@@ -47918,7 +47892,7 @@ const Bezier_default_ = Bezier;
47918
47892
 
47919
47893
  /* harmony default export */ const Algorithms_Bezier = (x_ite_Namespace .add ("Bezier", Bezier_default_));
47920
47894
  ;// ./src/x_ite/Parser/SVGParser.js
47921
- /* provided dependency */ var SVGParser_libtess = __webpack_require__(877);
47895
+ /* provided dependency */ var SVGParser_libtess = __webpack_require__(289);
47922
47896
 
47923
47897
 
47924
47898
 
@@ -54664,7 +54638,7 @@ function X3DCoreContext (element)
54664
54638
  {
54665
54639
  const link = document .createElement ("link");
54666
54640
 
54667
- link .integrity = "sha384-F+mssNuFiQHol3RT7fLg6krIVxgAio+0HtxiqkBJSZIYtVM6Z51XLEsu66xkirs/";
54641
+ link .integrity = "sha384-OncRzbLtLD5Caw7AMriMRlhuhJ/fW3gh5dFvrdeifrhlqF+YTzx/lbZh5l6JjYau";
54668
54642
  link .rel = "stylesheet";
54669
54643
  link .crossOrigin = "anonymous";
54670
54644
  link .onload = resolve;
@@ -64060,6 +64034,7 @@ const
64060
64034
  _loadingTotal = Symbol (),
64061
64035
  X3DNetworkingContext_loadingObjects = Symbol (),
64062
64036
  _browserLoading = Symbol (),
64037
+ _browserTime = Symbol (),
64063
64038
  _set_loadCount = Symbol (),
64064
64039
  _loadFractions = Symbol (),
64065
64040
  _defaultScene = Symbol ();
@@ -64120,6 +64095,7 @@ Object .assign (X3DNetworkingContext .prototype,
64120
64095
  setBrowserLoading (value)
64121
64096
  {
64122
64097
  this [_browserLoading] = value;
64098
+ this [_browserTime] = Date .now ();
64123
64099
 
64124
64100
  if (value)
64125
64101
  {
@@ -64182,12 +64158,16 @@ Object .assign (X3DNetworkingContext .prototype,
64182
64158
  this [X3DNetworkingContext_loadingObjects] .add (object);
64183
64159
 
64184
64160
  this ._loadCount = this [X3DNetworkingContext_loadingObjects] .size;
64161
+
64162
+ this [_browserTime] = Date .now ();
64185
64163
  },
64186
64164
  removeLoadingObject (object)
64187
64165
  {
64188
64166
  this [X3DNetworkingContext_loadingObjects] .delete (object);
64189
64167
 
64190
64168
  this ._loadCount = this [X3DNetworkingContext_loadingObjects] .size;
64169
+
64170
+ this [_browserTime] = Date .now ();
64191
64171
  },
64192
64172
  getDisplayLoadCount ()
64193
64173
  {
@@ -64241,8 +64221,14 @@ Object .assign (X3DNetworkingContext .prototype,
64241
64221
  const fractions = 1 - (this ._loadCount .getValue () + loadFractions)
64242
64222
  / (this [_loadingTotal] + this [_loadFractions] .size);
64243
64223
 
64224
+ const percent = fractions * 100;
64225
+
64226
+ // Show progress in % if loading takes too long.
64227
+ if (Date .now () - this [_browserTime] > 8_000)
64228
+ string += ` (${percent .toFixed (2)} %)`;
64229
+
64244
64230
  this .getSplashScreen () .querySelector (".x_ite-private-spinner-text") .textContent = string;
64245
- this .getSplashScreen () .querySelector (".x_ite-private-progressbar div") .style .width = `${100 * fractions}%`;
64231
+ this .getSplashScreen () .querySelector (".x_ite-private-progressbar div") .style .width = `${percent}%`;
64246
64232
  }
64247
64233
  else
64248
64234
  {
@@ -71847,10 +71833,9 @@ const PeriodicWave_default_ = PeriodicWave;
71847
71833
 
71848
71834
 
71849
71835
 
71850
-
71851
71836
  const
71852
71837
  _audioContext = Symbol (),
71853
- _audioNodes = Symbol (),
71838
+ _soundDestinationNodes = Symbol (),
71854
71839
  _audioElements = Symbol (),
71855
71840
  _defaultPeriodicWave = Symbol (),
71856
71841
  _noSoundButton = Symbol (),
@@ -71858,9 +71843,7 @@ const
71858
71843
 
71859
71844
  function X3DSoundContext ()
71860
71845
  {
71861
- this .addChildObjects (Base_X3DConstants .outputOnly, "audio", new x_ite_Fields .SFBool ());
71862
-
71863
- this [_audioNodes] = new Set ();
71846
+ this [_soundDestinationNodes] = new Set ();
71864
71847
  this [_audioElements] = new Map ();
71865
71848
  }
71866
71849
 
@@ -71898,17 +71881,25 @@ Object .assign (X3DSoundContext .prototype,
71898
71881
  return audioContext;
71899
71882
  })();
71900
71883
  },
71901
- addAudioNode (element)
71884
+ addSoundDestination (soundDestinationNode)
71902
71885
  {
71903
- this [_audioNodes] .add (element);
71886
+ const gain = !this .getBrowserOption ("Mute") * Math_Algorithm .clamp (this .getBrowserOption ("SoundIntensity"), 0, 1);
71887
+
71888
+ soundDestinationNode .getSoundDestination () .gain .value = gain;
71904
71889
 
71905
- this ._audio = this [_audioNodes] .size;
71890
+ this [_soundDestinationNodes] .add (soundDestinationNode);
71891
+
71892
+ this .getRenderingProperties () ._SoundDestinations = this [_soundDestinationNodes] .size;
71906
71893
  },
71907
- removeAudioNode (element)
71894
+ removeSoundDestination (soundDestinationNode)
71908
71895
  {
71909
- this [_audioNodes] .delete (element);
71896
+ this [_soundDestinationNodes] .delete (soundDestinationNode);
71910
71897
 
71911
- this ._audio = this [_audioNodes] .size;
71898
+ this .getRenderingProperties () ._SoundDestinations = this [_soundDestinationNodes] .size;
71899
+ },
71900
+ getSoundDestinations ()
71901
+ {
71902
+ return this [_soundDestinationNodes];
71912
71903
  },
71913
71904
  startAudioElement (audioElement, functionName = "play")
71914
71905
  {
@@ -72887,7 +72878,7 @@ const
72887
72878
  _animFrame = Symbol (),
72888
72879
  _previousTime = Symbol (),
72889
72880
  _systemTime = Symbol (),
72890
- _browserTime = Symbol (),
72881
+ X3DBrowserContext_browserTime = Symbol (),
72891
72882
  _cameraTime = Symbol (),
72892
72883
  _collisionTime = Symbol (),
72893
72884
  _displayTime = Symbol (),
@@ -72939,7 +72930,7 @@ function X3DBrowserContext (element)
72939
72930
  this [_previousTime] = 0;
72940
72931
  this [_renderCallback] = this [_traverse] .bind (this);
72941
72932
  this [_systemTime] = new Time_StopWatch ();
72942
- this [_browserTime] = new Time_StopWatch ();
72933
+ this [X3DBrowserContext_browserTime] = new Time_StopWatch ();
72943
72934
  this [_cameraTime] = new Time_StopWatch ();
72944
72935
  this [_collisionTime] = new Time_StopWatch ();
72945
72936
  this [_displayTime] = new Time_StopWatch ();
@@ -73059,7 +73050,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73059
73050
  // Start
73060
73051
 
73061
73052
  this [_systemTime] .stop ();
73062
- this [_browserTime] .start ();
73053
+ this [X3DBrowserContext_browserTime] .start ();
73063
73054
 
73064
73055
  // Time
73065
73056
 
@@ -73120,7 +73111,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73120
73111
 
73121
73112
  // Finish
73122
73113
 
73123
- this [_browserTime] .stop ();
73114
+ this [X3DBrowserContext_browserTime] .stop ();
73124
73115
  this [_systemTime] .start ();
73125
73116
  },
73126
73117
  getSystemTime ()
@@ -73129,7 +73120,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73129
73120
  },
73130
73121
  getBrowserTime ()
73131
73122
  {
73132
- return this [_browserTime];
73123
+ return this [X3DBrowserContext_browserTime];
73133
73124
  },
73134
73125
  getCameraTime ()
73135
73126
  {
@@ -87739,6 +87730,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Sound
87739
87730
  const channelCountModes = new Map ([
87740
87731
  ["MAX", "max"],
87741
87732
  ["CLAMPED-MAX", "clamped-max"],
87733
+ ["CLAMPED_MAX", "clamped-max"],
87742
87734
  ["EXPLICIT", "explicit"],
87743
87735
  ]);
87744
87736
 
@@ -88317,10 +88309,12 @@ Object .assign (Object .setPrototypeOf (AudioClip .prototype, Sound_X3DSoundSour
88317
88309
  unloadData ()
88318
88310
  {
88319
88311
  this .setMediaElement (null);
88312
+
88313
+ this ._duration_changed = -1;
88320
88314
  },
88321
88315
  loadData ()
88322
88316
  {
88323
- this .unloadData ();
88317
+ this .setMediaElement (null);
88324
88318
 
88325
88319
  new InputOutput_FileLoader (this, { dataAsString: false }) .loadDocument (this ._url, async (data, fileURL) =>
88326
88320
  {
@@ -88413,10 +88407,13 @@ function X3DSoundDestinationNode (executionContext)
88413
88407
 
88414
88408
  this .addType (Base_X3DConstants .X3DSoundDestinationNode);
88415
88409
 
88410
+ // Private properties
88411
+
88416
88412
  const audioContext = this .getBrowser () .getAudioContext ();
88417
88413
 
88418
88414
  this .childNodes = [ ];
88419
88415
  this .audioDestination = new GainNode (audioContext, { gain: 0 });
88416
+ this .soundDestination = new GainNode (audioContext, { gain: 0 });
88420
88417
  }
88421
88418
 
88422
88419
  Object .assign (Object .setPrototypeOf (X3DSoundDestinationNode .prototype, Sound_X3DSoundNode .prototype),
@@ -88441,6 +88438,10 @@ Object .assign (Object .setPrototypeOf (X3DSoundDestinationNode .prototype, Soun
88441
88438
  this .set_channelInterpretation__ ();
88442
88439
  this .set_children__ ();
88443
88440
  },
88441
+ getSoundDestination ()
88442
+ {
88443
+ return this .soundDestination;
88444
+ },
88444
88445
  getAudioDestination ()
88445
88446
  {
88446
88447
  return this .audioDestination;
@@ -88451,17 +88452,17 @@ Object .assign (Object .setPrototypeOf (X3DSoundDestinationNode .prototype, Soun
88451
88452
 
88452
88453
  const
88453
88454
  browser = this .getBrowser (),
88454
- active = this ._enabled .getValue () && this .getLive () .getValue ();
88455
+ active = this .getLive () .getValue () && this ._enabled .getValue ();
88455
88456
 
88456
88457
  if (active)
88457
88458
  {
88458
- this .audioDestination .connect (this .getSoundDestination ());
88459
- browser .addAudioNode (this);
88459
+ browser .addSoundDestination (this);
88460
+ this .audioDestination .connect (this .soundDestination);
88460
88461
  }
88461
88462
  else
88462
88463
  {
88464
+ browser .removeSoundDestination (this);
88463
88465
  this .audioDestination .disconnect ();
88464
- browser .removeAudioNode (this);
88465
88466
  }
88466
88467
 
88467
88468
  this ._isActive = this ._enabled;
@@ -88479,6 +88480,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundDestinationNode .prototype, Soun
88479
88480
  const channelCountModes = new Map ([
88480
88481
  ["MAX", "max"],
88481
88482
  ["CLAMPED-MAX", "clamped-max"],
88483
+ ["CLAMPED_MAX", "clamped-max"],
88482
88484
  ["EXPLICIT", "explicit"],
88483
88485
  ]);
88484
88486
 
@@ -88562,6 +88564,8 @@ function AudioDestination (executionContext)
88562
88564
  this .audioElement = new Audio ();
88563
88565
  this .mediaStreamAudioDestinationNode = new MediaStreamAudioDestinationNode (audioContext);
88564
88566
  this .audioElement .srcObject = this .mediaStreamAudioDestinationNode .stream;
88567
+
88568
+ this .getSoundDestination () .connect (this .mediaStreamAudioDestinationNode);
88565
88569
  }
88566
88570
 
88567
88571
  Object .assign (Object .setPrototypeOf (AudioDestination .prototype, Sound_X3DSoundDestinationNode .prototype),
@@ -88578,17 +88582,13 @@ Object .assign (Object .setPrototypeOf (AudioDestination .prototype, Sound_X3DSo
88578
88582
 
88579
88583
  this .set_mediaDeviceID__ ();
88580
88584
  },
88581
- getSoundDestination ()
88582
- {
88583
- return this .mediaStreamAudioDestinationNode;
88584
- },
88585
88585
  set_enabled__ ()
88586
88586
  {
88587
88587
  Sound_X3DSoundDestinationNode .prototype .set_enabled__ .call (this);
88588
88588
 
88589
88589
  const
88590
88590
  browser = this .getBrowser (),
88591
- active = this ._enabled .getValue () && this .getLive () .getValue ();
88591
+ active = this .getLive () .getValue () && this ._enabled .getValue ();
88592
88592
 
88593
88593
  if (active)
88594
88594
  browser .startAudioElement (this .audioElement);
@@ -88832,7 +88832,7 @@ Object .assign (Object .setPrototypeOf (BufferAudioSource .prototype, Sound_X3DS
88832
88832
  }
88833
88833
  else
88834
88834
  {
88835
- this ._bufferDuration = 0;
88835
+ this ._bufferDuration = -1;
88836
88836
 
88837
88837
  this .setMediaElement (null);
88838
88838
  }
@@ -89070,6 +89070,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundChannelNode .prototype, Sound_X3
89070
89070
  const channelCountModes = new Map ([
89071
89071
  ["MAX", "max"],
89072
89072
  ["CLAMPED-MAX", "clamped-max"],
89073
+ ["CLAMPED_MAX", "clamped-max"],
89073
89074
  ["EXPLICIT", "explicit"],
89074
89075
  ]);
89075
89076
 
@@ -89134,7 +89135,7 @@ Object .assign (Object .setPrototypeOf (X3DSoundChannelNode .prototype, Sound_X3
89134
89135
  for (const [i, childNode] of this .childNodes .entries ())
89135
89136
  this .connectChildNode (i, childNode);
89136
89137
  },
89137
- setChildNodes (childNodes)
89138
+ setChildNodes ()
89138
89139
  { },
89139
89140
  connectChildNode (i, childNode)
89140
89141
  {
@@ -90303,18 +90304,20 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90303
90304
  const
90304
90305
  audioContext = this .getBrowser () .getAudioContext (),
90305
90306
  gainNode = new GainNode (audioContext, { gain: 0 }),
90307
+ gainStereoNode = new GainNode (audioContext, { gain: 0 }),
90306
90308
  splitterNode = new ChannelSplitterNode (audioContext, { numberOfOutputs: 2 }),
90307
- mergerNode = new ChannelMergerNode (audioContext, { numberOfInputs: 2 }),
90308
90309
  gainFrontLeftNode = new GainNode (audioContext, { gain: 0 }),
90309
90310
  gainFrontRightNode = new GainNode (audioContext, { gain: 0 }),
90310
90311
  gainBackLeftNode = new GainNode (audioContext, { gain: 0 }),
90311
- gainBackRightNode = new GainNode (audioContext, { gain: 0 });
90312
+ gainBackRightNode = new GainNode (audioContext, { gain: 0 }),
90313
+ mergerNode = new ChannelMergerNode (audioContext, { numberOfInputs: 2 }),
90314
+ soundDestination = new GainNode (audioContext, { gain: 0 });
90312
90315
 
90313
90316
  gainNode .channelCount = 2;
90314
90317
  gainNode .channelCountMode = "explicit";
90315
90318
  gainNode .channelInterpretation = "speakers";
90316
90319
 
90317
- gainNode .connect (splitterNode);
90320
+ gainStereoNode .connect (soundDestination);
90318
90321
  splitterNode .connect (gainFrontLeftNode, 0);
90319
90322
  splitterNode .connect (gainFrontRightNode, 1);
90320
90323
  splitterNode .connect (gainBackRightNode, 0);
@@ -90323,27 +90326,37 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90323
90326
  gainFrontRightNode .connect (mergerNode, 0, 1);
90324
90327
  gainBackLeftNode .connect (mergerNode, 0, 0);
90325
90328
  gainBackRightNode .connect (mergerNode, 0, 1);
90326
- mergerNode .connect (audioContext .destination);
90329
+ mergerNode .connect (soundDestination);
90330
+ soundDestination .connect (audioContext .destination);
90327
90331
 
90328
90332
  this .gainNode = gainNode;
90333
+ this .gainStereoNode = gainStereoNode;
90329
90334
  this .splitterNode = splitterNode;
90330
90335
  this .gainFrontLeftNode = gainFrontLeftNode;
90331
90336
  this .gainFrontRightNode = gainFrontRightNode;
90332
90337
  this .gainBackLeftNode = gainBackLeftNode;
90333
90338
  this .gainBackRightNode = gainBackRightNode;
90334
90339
  this .mergerNode = mergerNode;
90340
+ this .soundDestination = soundDestination;
90335
90341
 
90336
- this .getLive () .addInterest ("set_live__", this);
90337
- this ._traversed .addInterest ("set_live__", this);
90342
+ this .getLive () .addInterest ("set_enabled__", this);
90343
+ this ._traversed .addInterest ("set_enabled__", this);
90344
+ this ._enabled .addInterest ("set_enabled__", this);
90338
90345
 
90339
- this ._intensity .addInterest ("set_intensity__", this);
90340
- this ._source .addInterest ("set_children__", this);
90341
- this ._children .addInterest ("set_children__", this);
90346
+ this ._spatialize .addInterest ("set_spatialize__", this);
90347
+ this ._intensity .addInterest ("set_intensity__", this);
90348
+ this ._source .addInterest ("set_children__", this);
90349
+ this ._children .addInterest ("set_children__", this);
90342
90350
 
90343
- this .set_live__ ();
90351
+ this .set_enabled__ ();
90352
+ this .set_spatialize__ ();
90344
90353
  this .set_intensity__ ();
90345
90354
  this .set_children__ ();
90346
90355
  },
90356
+ getSoundDestination ()
90357
+ {
90358
+ return this .soundDestination;
90359
+ },
90347
90360
  setTraversed (value)
90348
90361
  {
90349
90362
  if (value)
@@ -90371,32 +90384,44 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90371
90384
  rotationFront = 1 - rotation,
90372
90385
  rotationBack = rotation;
90373
90386
 
90387
+ this .gainStereoNode .gain .value = gain;
90374
90388
  this .gainFrontLeftNode .gain .value = gain * rotationFront * panLeft;
90375
90389
  this .gainFrontRightNode .gain .value = gain * rotationFront * panRight;
90376
90390
  this .gainBackLeftNode .gain .value = gain * rotationBack * panLeft;
90377
90391
  this .gainBackRightNode .gain .value = gain * rotationBack * panRight;
90378
90392
  },
90379
- set_live__ ()
90393
+ set_enabled__ ()
90380
90394
  {
90381
- const browser = this .getBrowser ();
90382
-
90383
- this .mergerNode .disconnect ();
90395
+ const
90396
+ browser = this .getBrowser (),
90397
+ active = this .getLive () .getValue () && this ._traversed .getValue () && this ._enabled .getValue ();
90384
90398
 
90385
- if (this .getLive () .getValue () && this ._traversed .getValue ())
90399
+ if (active)
90386
90400
  {
90387
90401
  const audioContext = this .getBrowser () .getAudioContext ();
90388
90402
 
90389
- this .mergerNode .connect (audioContext .destination);
90403
+ this .soundDestination .connect (audioContext .destination);
90390
90404
 
90391
- browser .addAudioNode (this);
90405
+ browser .addSoundDestination (this);
90392
90406
  browser .sensorEvents () .addInterest ("update", this);
90393
90407
  }
90394
90408
  else
90395
90409
  {
90396
- browser .removeAudioNode (this);
90410
+ this .soundDestination .disconnect ();
90411
+
90412
+ browser .removeSoundDestination (this);
90397
90413
  browser .sensorEvents () .removeInterest ("update", this);
90398
90414
  }
90399
90415
  },
90416
+ set_spatialize__ ()
90417
+ {
90418
+ this .gainNode .disconnect ();
90419
+
90420
+ if (this ._spatialize .getValue ())
90421
+ this .gainNode .connect (this .splitterNode);
90422
+ else
90423
+ this .gainNode .connect (this .gainStereoNode);
90424
+ },
90400
90425
  set_intensity__ ()
90401
90426
  {
90402
90427
  this .gainNode .gain .value = Math_Algorithm .clamp (this ._intensity .getValue (), 0, 1);
@@ -90415,7 +90440,7 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90415
90440
 
90416
90441
  for (const child of this ._children)
90417
90442
  {
90418
- const childNode = Base_X3DCast (Base_X3DConstants .X3DChildNode, child);
90443
+ const childNode = Base_X3DCast (Base_X3DConstants .X3DNode, child);
90419
90444
 
90420
90445
  if (!childNode)
90421
90446
  continue;
@@ -90660,22 +90685,26 @@ Object .assign (Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundN
90660
90685
  Sound_X3DSoundNode .prototype .initialize .call (this);
90661
90686
 
90662
90687
  const
90663
- audioContext = this .getBrowser () .getAudioContext (),
90664
- gainNode = new GainNode (audioContext, { gain: 0 }),
90665
- pannerNode = new PannerNode (audioContext);
90688
+ audioContext = this .getBrowser () .getAudioContext (),
90689
+ gainNode = new GainNode (audioContext, { gain: 0 }),
90690
+ pannerNode = new PannerNode (audioContext),
90691
+ soundDestination = new GainNode (audioContext, { gain: 0 });
90666
90692
 
90667
90693
  gainNode .channelCount = 2;
90668
90694
  gainNode .channelCountMode = "explicit";
90669
90695
  gainNode .channelInterpretation = "speakers";
90670
90696
 
90671
- gainNode .connect (pannerNode);
90672
- pannerNode .connect (audioContext .destination);
90697
+ gainNode .connect (pannerNode);
90698
+ pannerNode .connect (soundDestination);
90699
+ soundDestination .connect (audioContext .destination);
90673
90700
 
90674
- this .gainNode = gainNode;
90675
- this .pannerNode = pannerNode;
90701
+ this .gainNode = gainNode;
90702
+ this .pannerNode = pannerNode;
90703
+ this .soundDestination = soundDestination;
90676
90704
 
90677
- this .getLive () .addInterest ("set_live__", this);
90678
- this ._traversed .addInterest ("set_live__", this);
90705
+ this .getLive () .addInterest ("set_enabled__", this);
90706
+ this ._traversed .addInterest ("set_enabled__", this);
90707
+ this ._enabled .addInterest ("set_enabled__", this);
90679
90708
 
90680
90709
  this ._spatialize .addInterest ("set_spatialize__", this);
90681
90710
  this ._intensity .addInterest ("set_intensity__", this);
@@ -90691,7 +90720,7 @@ Object .assign (Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundN
90691
90720
  this ._rolloffFactor .addInterest ("set_distanceModel__", this);
90692
90721
  this ._children .addInterest ("set_children__", this);
90693
90722
 
90694
- this .set_live__ ();
90723
+ this .set_enabled__ ();
90695
90724
  this .set_spatialize__ ();
90696
90725
  this .set_intensity__ ();
90697
90726
  this .set_coneOuterGain__ ();
@@ -90704,6 +90733,10 @@ Object .assign (Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundN
90704
90733
  this .set_dopplerEnabled__ ();
90705
90734
  this .set_children__ ();
90706
90735
  },
90736
+ getSoundDestination ()
90737
+ {
90738
+ return this .soundDestination;
90739
+ },
90707
90740
  setTraversed (value)
90708
90741
  {
90709
90742
  if (value)
@@ -90723,24 +90756,26 @@ Object .assign (Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundN
90723
90756
  {
90724
90757
  return this .currentTraversed;
90725
90758
  },
90726
- set_live__ ()
90759
+ set_enabled__ ()
90727
90760
  {
90728
- const browser = this .getBrowser ();
90729
-
90730
- this .pannerNode .disconnect ();
90761
+ const
90762
+ browser = this .getBrowser (),
90763
+ active = this .getLive () .getValue () && this ._traversed .getValue () && this ._enabled .getValue ();
90731
90764
 
90732
- if (this .getLive () .getValue () && this ._traversed .getValue ())
90765
+ if (active)
90733
90766
  {
90734
90767
  const audioContext = this .getBrowser () .getAudioContext ();
90735
90768
 
90736
- this .pannerNode .connect (audioContext .destination);
90769
+ this .soundDestination .connect (audioContext .destination);
90737
90770
 
90738
- browser .addAudioNode (this);
90771
+ browser .addSoundDestination (this);
90739
90772
  browser .sensorEvents () .addInterest ("update", this);
90740
90773
  }
90741
90774
  else
90742
90775
  {
90743
- browser .removeAudioNode (this);
90776
+ this .soundDestination .disconnect ();
90777
+
90778
+ browser .removeSoundDestination (this);
90744
90779
  browser .sensorEvents () .removeInterest ("update", this);
90745
90780
  }
90746
90781
  },
@@ -90819,7 +90854,7 @@ Object .assign (Object .setPrototypeOf (SpatialSound .prototype, Sound_X3DSoundN
90819
90854
 
90820
90855
  for (const child of this ._children)
90821
90856
  {
90822
- const childNode = Base_X3DCast (Base_X3DConstants .X3DChildNode, child);
90857
+ const childNode = Base_X3DCast (Base_X3DConstants .X3DNode, child);
90823
90858
 
90824
90859
  if (!childNode)
90825
90860
  continue;
@@ -90932,9 +90967,13 @@ function StreamAudioDestination (executionContext)
90932
90967
 
90933
90968
  this .addType (Base_X3DConstants .StreamAudioDestination);
90934
90969
 
90970
+ // Private properties
90971
+
90935
90972
  const audioContext = this .getBrowser () .getAudioContext ();
90936
90973
 
90937
90974
  this .mediaStreamAudioDestinationNode = new MediaStreamAudioDestinationNode (audioContext);
90975
+
90976
+ this .getSoundDestination () .connect (this .mediaStreamAudioDestinationNode);
90938
90977
  }
90939
90978
 
90940
90979
  Object .assign (Object .setPrototypeOf (StreamAudioDestination .prototype, Sound_X3DSoundDestinationNode .prototype),
@@ -90947,10 +90986,6 @@ Object .assign (Object .setPrototypeOf (StreamAudioDestination .prototype, Sound
90947
90986
 
90948
90987
  this .set_mediaDeviceID__ ();
90949
90988
  },
90950
- getSoundDestination ()
90951
- {
90952
- return this .mediaStreamAudioDestinationNode;
90953
- },
90954
90989
  set_enabled__ ()
90955
90990
  { },
90956
90991
  set_mediaDeviceID__ ()
@@ -91387,8 +91422,8 @@ const PNGMedia_default_ = PNGMedia;
91387
91422
 
91388
91423
  /* harmony default export */ const Texturing_PNGMedia = (x_ite_Namespace .add ("PNGMedia", PNGMedia_default_));
91389
91424
  ;// ./src/x_ite/Components/Texturing/MovieTexture.js
91390
- /* provided dependency */ var SuperGif = __webpack_require__(143);
91391
- /* provided dependency */ var APNG = __webpack_require__(701);
91425
+ /* provided dependency */ var SuperGif = __webpack_require__(627);
91426
+ /* provided dependency */ var APNG = __webpack_require__(249);
91392
91427
 
91393
91428
 
91394
91429
 
@@ -91449,6 +91484,7 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
91449
91484
  {
91450
91485
  this .clearTexture ();
91451
91486
  this .setMediaElement (null);
91487
+ this .updateOutputs (0, 0, 0, false, -1);
91452
91488
  },
91453
91489
  async loadData ()
91454
91490
  {
@@ -91523,7 +91559,7 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
91523
91559
 
91524
91560
  this .setMediaElement (null);
91525
91561
  this .clearTexture ();
91526
- this .updateOutputs (0, 0, 0, -1);
91562
+ this .updateOutputs (0, 0, 0, false, -1);
91527
91563
  this .setLoadState (Base_X3DConstants .FAILED_STATE);
91528
91564
  },
91529
91565
  loadDocument (fileURL)
@@ -91564,7 +91600,7 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
91564
91600
 
91565
91601
  this .setMediaElement (gif);
91566
91602
  this .setTextureData (width, height, true, false, gif .get_frames () [0] .data);
91567
- this .updateOutputs (width, height, 4, gif .duration);
91603
+ this .updateOutputs (width, height, 4, false, gif .duration);
91568
91604
  this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
91569
91605
 
91570
91606
  this .set_speed__ ();
@@ -91577,7 +91613,7 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
91577
91613
 
91578
91614
  this .setMediaElement (apng);
91579
91615
  this .setTextureData (width, height, true, false, currentFrame);
91580
- this .updateOutputs (width, height, 4, duration);
91616
+ this .updateOutputs (width, height, 4, false, duration);
91581
91617
  this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
91582
91618
 
91583
91619
  this .set_speed__ ();
@@ -91598,16 +91634,21 @@ Object .assign (Object .setPrototypeOf (MovieTexture .prototype, Texturing_X3DTe
91598
91634
 
91599
91635
  this .setMediaElement (video);
91600
91636
  this .setTextureData (width, height, true, false, video);
91601
- this .updateOutputs (width, height, 3, video .duration);
91637
+ this .updateOutputs (width, height, 3, this .hasAudioTracks (video), video .duration);
91602
91638
  this .setLoadState (Base_X3DConstants .COMPLETE_STATE);
91603
91639
 
91604
91640
  this .set_speed__ ();
91605
91641
  },
91606
- updateOutputs (width, height, colorDepth, duration)
91642
+ hasAudioTracks (video)
91643
+ {
91644
+ return !! (video .mozHasAudio || video .webkitAudioDecodedByteCount || video .audioTracks ?.length);
91645
+ },
91646
+ updateOutputs (width, height, colorDepth, hasSound, duration)
91607
91647
  {
91608
91648
  this ._width = width;
91609
91649
  this ._height = height;
91610
91650
  this ._colorDepth = colorDepth;
91651
+ this ._hasSound = hasSound;
91611
91652
  this ._duration_changed = duration;
91612
91653
  },
91613
91654
  set_speed__ ()
@@ -94026,7 +94067,7 @@ const QuickSort_default_ = QuickSort;
94026
94067
 
94027
94068
  /* harmony default export */ const Algorithms_QuickSort = (x_ite_Namespace .add ("QuickSort", QuickSort_default_));
94028
94069
  ;// ./src/lib/libtess.js
94029
- /* provided dependency */ var libtess_libtess = __webpack_require__(877);
94070
+ /* provided dependency */ var libtess_libtess = __webpack_require__(289);
94030
94071
  const libtess_default_ = libtess_libtess;
94031
94072
  ;
94032
94073