x_ite 16.3.0 → 16.3.1

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 (55) hide show
  1. package/README.md +6 -6
  2. package/dist/assets/components/AnnotationComponent.js +1 -1
  3. package/dist/assets/components/AnnotationComponent.min.js +1 -1
  4. package/dist/assets/components/CADGeometryComponent.js +1 -1
  5. package/dist/assets/components/CADGeometryComponent.min.js +1 -1
  6. package/dist/assets/components/CubeMapTexturingComponent.js +1 -1
  7. package/dist/assets/components/CubeMapTexturingComponent.min.js +1 -1
  8. package/dist/assets/components/DISComponent.js +1 -1
  9. package/dist/assets/components/DISComponent.min.js +1 -1
  10. package/dist/assets/components/EventUtilitiesComponent.js +4 -2
  11. package/dist/assets/components/EventUtilitiesComponent.min.js +2 -2
  12. package/dist/assets/components/GaussianSplatsComponent.js +1 -1
  13. package/dist/assets/components/GaussianSplatsComponent.min.js +1 -1
  14. package/dist/assets/components/Geometry2DComponent.js +1 -1
  15. package/dist/assets/components/Geometry2DComponent.min.js +1 -1
  16. package/dist/assets/components/Geometry3DComponent.js +1 -1
  17. package/dist/assets/components/Geometry3DComponent.min.js +1 -1
  18. package/dist/assets/components/GeospatialComponent.js +1 -1
  19. package/dist/assets/components/GeospatialComponent.min.js +1 -1
  20. package/dist/assets/components/HAnimComponent.js +1 -1
  21. package/dist/assets/components/HAnimComponent.min.js +1 -1
  22. package/dist/assets/components/KeyDeviceSensorComponent.js +1 -1
  23. package/dist/assets/components/KeyDeviceSensorComponent.min.js +1 -1
  24. package/dist/assets/components/LayoutComponent.js +1 -1
  25. package/dist/assets/components/LayoutComponent.min.js +1 -1
  26. package/dist/assets/components/NURBSComponent.js +1 -1
  27. package/dist/assets/components/NURBSComponent.min.js +1 -1
  28. package/dist/assets/components/ParticleSystemsComponent.js +1 -1
  29. package/dist/assets/components/ParticleSystemsComponent.min.js +1 -1
  30. package/dist/assets/components/PickingComponent.js +1 -1
  31. package/dist/assets/components/PickingComponent.min.js +1 -1
  32. package/dist/assets/components/RigidBodyPhysicsComponent.js +1 -1
  33. package/dist/assets/components/RigidBodyPhysicsComponent.min.js +1 -1
  34. package/dist/assets/components/ScriptingComponent.js +1 -1
  35. package/dist/assets/components/ScriptingComponent.min.js +1 -1
  36. package/dist/assets/components/TextComponent.js +1 -1
  37. package/dist/assets/components/TextComponent.min.js +1 -1
  38. package/dist/assets/components/TextureProjectionComponent.js +1 -1
  39. package/dist/assets/components/TextureProjectionComponent.min.js +1 -1
  40. package/dist/assets/components/Texturing3DComponent.js +9 -9
  41. package/dist/assets/components/Texturing3DComponent.min.js +2 -2
  42. package/dist/assets/components/VolumeRenderingComponent.js +1 -1
  43. package/dist/assets/components/VolumeRenderingComponent.min.js +1 -1
  44. package/dist/assets/components/WebXRComponent.js +1 -1
  45. package/dist/assets/components/WebXRComponent.min.js +1 -1
  46. package/dist/assets/components/X_ITEComponent.js +1 -1
  47. package/dist/assets/components/X_ITEComponent.min.js +1 -1
  48. package/dist/example.html +1 -1
  49. package/dist/x_ite.css +1 -1
  50. package/dist/x_ite.js +230 -166
  51. package/dist/x_ite.min.js +2 -2
  52. package/dist/x_ite.min.mjs +2 -2
  53. package/dist/x_ite.mjs +230 -166
  54. package/dist/x_ite.zip +0 -0
  55. package/package.json +3 -2
package/dist/x_ite.js CHANGED
@@ -1,4 +1,4 @@
1
- /* X_ITE v16.3.0 */
1
+ /* X_ITE v16.3.1 */
2
2
  (function webpackUniversalModuleDefinition(root, factory) {
3
3
  if(typeof exports === 'object' && typeof module === 'object')
4
4
  module.exports = factory();
@@ -12,7 +12,7 @@
12
12
  return /******/ (() => { // webpackBootstrap
13
13
  /******/ var __webpack_modules__ = ({
14
14
 
15
- /***/ 133
15
+ /***/ 617
16
16
  (module, exports) {
17
17
 
18
18
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
@@ -1017,7 +1017,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
1017
1017
 
1018
1018
  /***/ },
1019
1019
 
1020
- /***/ 991
1020
+ /***/ 851
1021
1021
  (module) {
1022
1022
 
1023
1023
  (function webpackUniversalModuleDefinition(root, factory) {
@@ -2013,7 +2013,7 @@ return /******/ (function(modules) { // webpackBootstrap
2013
2013
 
2014
2014
  /***/ },
2015
2015
 
2016
- /***/ 643
2016
+ /***/ 775
2017
2017
  (module) {
2018
2018
 
2019
2019
  /**
@@ -14572,12 +14572,11 @@ Object .assign (Object .setPrototypeOf (SFNode .prototype, Base_X3DField .protot
14572
14572
  },
14573
14573
  getFieldDefinition (name)
14574
14574
  {
14575
- const fieldDefinition = this .getFieldDefinitions () .get (name);
14576
-
14577
- if (fieldDefinition)
14578
- return fieldDefinition;
14575
+ const
14576
+ target = this [_target],
14577
+ node = target .getValue ();
14579
14578
 
14580
- throw new Error (`Unknown field '${name}' in node class ${this .getNodeTypeName ()}.`);
14579
+ return node .getFieldDefinition (name);
14581
14580
  },
14582
14581
  getFieldDefinitions ()
14583
14582
  {
@@ -14607,7 +14606,7 @@ Object .assign (Object .setPrototypeOf (SFNode .prototype, Base_X3DField .protot
14607
14606
 
14608
14607
  Error .captureStackTrace (target, this .getField);
14609
14608
 
14610
- console .warn ("The use of sfnode.getField(name) is deprecated. Future versions of X_ITE may remove this feature. Instead, use the sfnode.{fieldName} syntax or sfnode.addFieldCallback(key, fieldName, callback).", target .stack);
14609
+ console .warn ("The use of sfnode.getField(name) is deprecated. Future versions of X_ITE may remove this feature. Instead, use the sfnode.{fieldName} property syntax or sfnode.addFieldCallback(key, fieldName, callback).", target .stack);
14611
14610
  }
14612
14611
 
14613
14612
  const
@@ -18450,7 +18449,12 @@ Object .assign (Object .setPrototypeOf (X3DBaseNode .prototype, Base_X3DChildObj
18450
18449
  },
18451
18450
  getFieldDefinition (name)
18452
18451
  {
18453
- return this [_fieldDefinitions] .get (name);
18452
+ const fieldDefinition = this [_fieldDefinitions] .get (name);
18453
+
18454
+ if (fieldDefinition)
18455
+ return fieldDefinition;
18456
+
18457
+ throw new Error (`Unknown field '${name}' in node class ${this .getTypeName ()}.`);
18454
18458
  },
18455
18459
  getFieldDefinitions ()
18456
18460
  {
@@ -18885,7 +18889,7 @@ const Legacy_default_ = Legacy;
18885
18889
 
18886
18890
  /* harmony default export */ const Browser_Legacy = (x_ite_Namespace .add ("Legacy", Legacy_default_));
18887
18891
  ;// ./src/x_ite/BROWSER_VERSION.js
18888
- const BROWSER_VERSION_default_ = "16.3.0";
18892
+ const BROWSER_VERSION_default_ = "16.3.1";
18889
18893
  ;
18890
18894
 
18891
18895
  /* harmony default export */ const BROWSER_VERSION = (x_ite_Namespace .add ("BROWSER_VERSION", BROWSER_VERSION_default_));
@@ -27467,9 +27471,7 @@ Object .assign (Object .setPrototypeOf (VRMLParser .prototype, Parser_X3DParser
27467
27471
  {
27468
27472
  if (this .nodeNameId ())
27469
27473
  {
27470
- const
27471
- fromNodeId = this .result [0],
27472
- fromNode = this .getExecutionContext () .getLocalNode (fromNodeId);
27474
+ const fromNodeId = this .result [0];
27473
27475
 
27474
27476
  this .comments ();
27475
27477
 
@@ -27485,9 +27487,7 @@ Object .assign (Object .setPrototypeOf (VRMLParser .prototype, Parser_X3DParser
27485
27487
  {
27486
27488
  if (this .nodeNameId ())
27487
27489
  {
27488
- const
27489
- toNodeId = this .result [0],
27490
- toNode = this .getExecutionContext () .getLocalNode (toNodeId);
27490
+ const toNodeId = this .result [0];
27491
27491
 
27492
27492
  this .comments ();
27493
27493
 
@@ -27497,7 +27497,10 @@ Object .assign (Object .setPrototypeOf (VRMLParser .prototype, Parser_X3DParser
27497
27497
  {
27498
27498
  try
27499
27499
  {
27500
- const eventInId = this .result [0];
27500
+ const
27501
+ eventInId = this .result [0],
27502
+ fromNode = this .getExecutionContext () .getLocalNode (fromNodeId),
27503
+ toNode = this .getExecutionContext () .getLocalNode (toNodeId);
27501
27504
 
27502
27505
  this .getExecutionContext () .addRoute (fromNode, eventOutId, toNode, eventInId);
27503
27506
  return true;
@@ -29782,16 +29785,16 @@ Object .assign (Object .setPrototypeOf (XMLParser .prototype, Parser_X3DParser .
29782
29785
  destinationField = xmlElement .getAttribute ("toField");
29783
29786
 
29784
29787
  if (sourceNodeName === null)
29785
- throw new Error ("Bad ROUTE statement: Expected fromNode attribute.");
29788
+ throw new Error ("Bad ROUTE specification: Expected fromNode attribute.");
29786
29789
 
29787
29790
  if (sourceField === null)
29788
- throw new Error ("Bad ROUTE statement: Expected fromField attribute.");
29791
+ throw new Error ("Bad ROUTE specification: Expected fromField attribute.");
29789
29792
 
29790
29793
  if (destinationNodeName === null)
29791
- throw new Error ("Bad ROUTE statement: Expected toNode attribute.");
29794
+ throw new Error ("Bad ROUTE specification: Expected toNode attribute.");
29792
29795
 
29793
29796
  if (destinationField === null)
29794
- throw new Error ("Bad ROUTE statement: Expected toField attribute.");
29797
+ throw new Error ("Bad ROUTE specification: Expected toField attribute.");
29795
29798
 
29796
29799
  const
29797
29800
  executionContext = this .getExecutionContext (),
@@ -31212,7 +31215,7 @@ const Plane3_default_ = Plane3;
31212
31215
 
31213
31216
  /* harmony default export */ const Geometry_Plane3 = (x_ite_Namespace .add ("Plane3", Plane3_default_));
31214
31217
  ;// ./src/standard/Math/Geometry/Triangle3.js
31215
- /* provided dependency */ var libtess = __webpack_require__(643);
31218
+ /* provided dependency */ var libtess = __webpack_require__(775);
31216
31219
 
31217
31220
 
31218
31221
  const Triangle3 =
@@ -38681,7 +38684,7 @@ const X3DSensorNode_default_ = X3DSensorNode;
38681
38684
 
38682
38685
 
38683
38686
 
38684
- function X3DTimeDependentNode (executionContext)
38687
+ function X3DTimeDependentNode (/* executionContext */)
38685
38688
  {
38686
38689
  this .addType (Base_X3DConstants .X3DTimeDependentNode);
38687
38690
 
@@ -38733,8 +38736,10 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38733
38736
  },
38734
38737
  resetElapsedTime ()
38735
38738
  {
38736
- this .start = this .getBrowser () .getCurrentTime ();
38737
- this .pause = this .getBrowser () .getCurrentTime ();
38739
+ const time = this .getBrowser () .getCurrentTime ();
38740
+
38741
+ this .start = time;
38742
+ this .pause = time;
38738
38743
  this .pauseInterval = 0;
38739
38744
  },
38740
38745
  set_live__ ()
@@ -38860,14 +38865,14 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38860
38865
 
38861
38866
  // The event order below is very important.
38862
38867
 
38863
- this ._isActive = true;
38864
- this ._elapsedTime = 0;
38868
+ this ._isActive = true;
38865
38869
 
38866
38870
  this .set_start ();
38867
38871
 
38868
38872
  if (this .getLive () .getValue ())
38869
38873
  {
38870
- this .getBrowser () .timeEvents () .addInterest ("set_time" ,this);
38874
+ this .getBrowser () .timeEvents () .addInterest ("set_time", this);
38875
+ this .getBrowser () .addBrowserEvent ();
38871
38876
  }
38872
38877
  else
38873
38878
  {
@@ -38892,7 +38897,7 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38892
38897
 
38893
38898
  this .set_pause ();
38894
38899
 
38895
- this .getBrowser () .timeEvents () .removeInterest ("set_time" ,this);
38900
+ this .getBrowser () .timeEvents () .removeInterest ("set_time", this);
38896
38901
  },
38897
38902
  do_resume ()
38898
38903
  {
@@ -38927,14 +38932,12 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38927
38932
 
38928
38933
  this .set_stop ();
38929
38934
 
38930
- this ._elapsedTime = this .getElapsedTime ();
38931
-
38932
38935
  if (this ._isPaused .getValue ())
38933
38936
  this ._isPaused = false;
38934
38937
 
38935
38938
  this ._isActive = false;
38936
38939
 
38937
- this .getBrowser () .timeEvents () .removeInterest ("set_time" ,this);
38940
+ this .getBrowser () .timeEvents () .removeInterest ("set_time", this);
38938
38941
  }
38939
38942
  },
38940
38943
  addTimeout (name, callback, startTime)
@@ -38956,19 +38959,16 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38956
38959
  if (!this ._enabled .getValue ())
38957
38960
  return;
38958
38961
 
38959
- if (!(this .getLive () .getValue ()))
38960
- return;
38961
-
38962
38962
  this .getBrowser () .advanceOnlyTime ();
38963
38963
 
38964
38964
  this [callback] ();
38965
38965
  },
38966
- set_loop: Function .prototype,
38967
- set_start: Function .prototype,
38968
- set_pause: Function .prototype,
38969
- set_resume: Function .prototype,
38970
- set_stop: Function .prototype,
38971
- set_time: Function .prototype,
38966
+ set_loop () { },
38967
+ set_start () { },
38968
+ set_pause () { },
38969
+ set_resume () { },
38970
+ set_stop () { },
38971
+ set_time () { },
38972
38972
  dispose ()
38973
38973
  {
38974
38974
  for (const name of [... this .timeouts .keys ()])
@@ -38999,7 +38999,9 @@ function TimeSensor (executionContext)
38999
38999
 
39000
39000
  this .addType (Base_X3DConstants .TimeSensor);
39001
39001
 
39002
- this .addChildObjects (Base_X3DConstants .inputOutput, "range", new x_ite_Fields .MFFloat (0, 0, 1)); // current, first, last (in fractions) - play range starting at current
39002
+ // Special non-public field:
39003
+ // rangeFraction, rangeStart, rangeEnd (in fractions) - play range starting at rangeFraction
39004
+ this .addChildObjects (Base_X3DConstants .inputOutput, "range", new x_ite_Fields .MFFloat (0, 0, 1));
39003
39005
 
39004
39006
  this .cycle = 0;
39005
39007
  this .interval = 0;
@@ -39035,6 +39037,10 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39035
39037
  this .fraction = Math_Algorithm .fract (fraction + this .offset);
39036
39038
  this .cycle = currentTime - (this .fraction - this .first) * cycleInterval;
39037
39039
  },
39040
+ getFraction (time)
39041
+ {
39042
+ return this .first + (this .interval ? Math_Algorithm .fract ((time - this .cycle) / this .interval) : 0) * this .scale;
39043
+ },
39038
39044
  set_cycleInterval__ ()
39039
39045
  {
39040
39046
  if (!this ._isActive .getValue ())
@@ -39052,28 +39058,56 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39052
39058
  if (this ._isPaused .getValue ())
39053
39059
  return;
39054
39060
 
39055
- this .set_fraction (this .getBrowser () .getCurrentTime ());
39061
+ this ._fraction_changed = this .fraction = this .getFraction (this .getBrowser () .getCurrentTime ());
39056
39062
  },
39057
39063
  set_start ()
39058
39064
  {
39065
+ const browser = this .getBrowser ();
39066
+
39067
+ browser .timePrepareEvents () .addInterest ("set_prepare", this);
39068
+ browser .addBrowserEvent ();
39069
+
39059
39070
  this .setRange (this ._range [0], this ._range [1], this ._range [2], true);
39060
39071
 
39061
- const time = this .getBrowser () .getCurrentTime ();
39072
+ const time = browser .getCurrentTime ();
39062
39073
 
39063
39074
  this ._time = time;
39075
+ this ._elapsedTime = 0;
39064
39076
  this ._cycleTime = time;
39065
39077
  this ._fraction_changed = this .fraction;
39078
+ this ._cycleCount = 0;
39079
+ },
39080
+ set_pause ()
39081
+ {
39082
+ this .getBrowser () .timePrepareEvents () .removeInterest ("set_prepare", this);
39066
39083
  },
39067
39084
  set_resume (/* pauseInterval */)
39068
39085
  {
39086
+ const browser = this .getBrowser ();
39087
+
39088
+ browser .timePrepareEvents () .addInterest ("set_prepare", this);
39089
+ browser .addBrowserEvent ();
39090
+
39069
39091
  this .setRange (this .fraction, this ._range [1], this ._range [2], false);
39070
39092
  },
39071
- set_fraction (time)
39093
+ set_stop ()
39094
+ {
39095
+ this .getBrowser () .timePrepareEvents () .removeInterest ("set_prepare", this);
39096
+ },
39097
+ set_prepare ()
39072
39098
  {
39073
- const fraction = this .first + (this .interval ? Math_Algorithm .fract ((time - this .cycle) / this .interval) : 0) * this .scale;
39099
+ const time = this .getBrowser () .getCurrentTime ();
39100
+
39101
+ this ._time = time;
39102
+ this ._elapsedTime = this .getElapsedTime ();
39074
39103
 
39075
- this .fraction = fraction;
39076
- this ._fraction_changed = fraction;
39104
+ if (time - this .cycle < this .interval)
39105
+ return;
39106
+
39107
+ this ._fraction_changed = this .last;
39108
+ this ._cycleCount = this ._cycleCount .getValue () + 1;
39109
+ this ._cycleComplete = true;
39110
+ this ._cycleCompleteTime = time;
39077
39111
  },
39078
39112
  set_time ()
39079
39113
  {
@@ -39081,8 +39115,6 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39081
39115
 
39082
39116
  const time = this .getBrowser () .getCurrentTime ();
39083
39117
 
39084
- this ._time = time;
39085
-
39086
39118
  if (time - this .cycle >= this .interval)
39087
39119
  {
39088
39120
  if (this ._loop .getValue ())
@@ -39091,27 +39123,18 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39091
39123
  {
39092
39124
  this .cycle += this .interval * Math .floor ((time - this .cycle) / this .interval);
39093
39125
 
39094
- this ._elapsedTime = this .getElapsedTime ();
39095
- this ._cycleComplete = time;
39096
- this ._cycleTime = time;
39097
-
39098
- this .set_fraction (time);
39126
+ this ._cycleTime = time;
39127
+ this ._fraction_changed = this .fraction = this .getFraction (time);
39099
39128
  }
39100
39129
  }
39101
39130
  else
39102
39131
  {
39103
- this ._elapsedTime = this .getElapsedTime ();
39104
- this ._cycleComplete = time;
39105
- this ._fraction_changed = this .fraction = this .last;
39106
-
39107
39132
  this .stop ();
39108
39133
  }
39109
39134
  }
39110
39135
  else
39111
39136
  {
39112
- this ._elapsedTime = this .getElapsedTime ();
39113
-
39114
- this .set_fraction (time);
39137
+ this ._fraction_changed = this .fraction = this .getFraction (time);
39115
39138
  }
39116
39139
  },
39117
39140
  dispose ()
@@ -39127,22 +39150,24 @@ Object .defineProperties (TimeSensor,
39127
39150
  fieldDefinitions:
39128
39151
  {
39129
39152
  value: new Base_FieldDefinitionArray ([
39130
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
39131
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
39132
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
39133
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "cycleInterval", new x_ite_Fields .SFTime (1)),
39134
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
39135
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
39136
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
39137
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "pauseTime", new x_ite_Fields .SFTime (0)),
39138
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "stopTime", new x_ite_Fields .SFTime (0)),
39139
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isPaused", new x_ite_Fields .SFBool ()),
39140
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
39141
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleTime", new x_ite_Fields .SFTime ()),
39142
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleComplete", new x_ite_Fields .SFTime ()),
39143
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "elapsedTime", new x_ite_Fields .SFTime ()),
39144
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "fraction_changed", new x_ite_Fields .SFFloat ()),
39145
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "time", new x_ite_Fields .SFTime ()),
39153
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
39154
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
39155
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
39156
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "cycleInterval", new x_ite_Fields .SFTime (1)),
39157
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
39158
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
39159
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
39160
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "pauseTime", new x_ite_Fields .SFTime (0)),
39161
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "stopTime", new x_ite_Fields .SFTime (0)),
39162
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isPaused", new x_ite_Fields .SFBool ()),
39163
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
39164
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleTime", new x_ite_Fields .SFTime ()),
39165
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleComplete", new x_ite_Fields .SFBool ()), // experimental
39166
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleCompleteTime", new x_ite_Fields .SFTime ()), // experimental
39167
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleCount", new x_ite_Fields .SFInt32 ()), // experimental
39168
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "fraction_changed", new x_ite_Fields .SFFloat ()),
39169
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "elapsedTime", new x_ite_Fields .SFTime ()),
39170
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "time", new x_ite_Fields .SFTime ()),
39146
39171
  ]),
39147
39172
  enumerable: true,
39148
39173
  },
@@ -46540,7 +46565,7 @@ Object .assign (Object .setPrototypeOf (STLBParser .prototype, Parser_X3DParser
46540
46565
  },
46541
46566
  header ()
46542
46567
  {
46543
- const header = helper.decodeText (this .arrayBuffer .slice (0, 80)) .trim ();
46568
+ const header = helper.decodeText (this .arrayBuffer .slice (0, 80)) .replace (/\u0000.*$/, "") .trim ();
46544
46569
 
46545
46570
  if (!header)
46546
46571
  return;
@@ -46724,7 +46749,8 @@ Object .assign (Object .setPrototypeOf (PLYAParser .prototype, Parser_X3DParser
46724
46749
  {
46725
46750
  const value = this .result [0] .trim ();
46726
46751
 
46727
- this .comments .push (value);
46752
+ if (value)
46753
+ this .comments .push (value);
46728
46754
 
46729
46755
  this .mustRotateAxes ||= !! value .match (/\b(?:Blender|Artec|Polycam)\b/i);
46730
46756
 
@@ -47936,7 +47962,7 @@ const Bezier_default_ = Bezier;
47936
47962
 
47937
47963
  /* harmony default export */ const Algorithms_Bezier = (x_ite_Namespace .add ("Bezier", Bezier_default_));
47938
47964
  ;// ./src/x_ite/Parser/SVGParser.js
47939
- /* provided dependency */ var SVGParser_libtess = __webpack_require__(643);
47965
+ /* provided dependency */ var SVGParser_libtess = __webpack_require__(775);
47940
47966
 
47941
47967
 
47942
47968
 
@@ -52058,7 +52084,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52058
52084
  if (this [_disposed])
52059
52085
  return;
52060
52086
 
52061
- let firstError, secondError;
52087
+ const errors = [ ];
52062
52088
 
52063
52089
  try
52064
52090
  {
@@ -52070,7 +52096,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52070
52096
  }
52071
52097
  catch (error)
52072
52098
  {
52073
- firstError = error;
52099
+ errors .push (error);
52074
52100
  }
52075
52101
 
52076
52102
  try
@@ -52083,19 +52109,12 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52083
52109
  }
52084
52110
  catch (error)
52085
52111
  {
52086
- secondError = error;
52112
+ errors .push (error);
52087
52113
  }
52088
52114
 
52089
52115
  if (this [_sourceField] && this [_destinationField])
52090
52116
  {
52091
- if (this [_sourceField] .getType () !== this [_destinationField] .getType ())
52092
- throw new Error (`Bad ROUTE statement: Source field type must match destination field type of fields named "${this [_sourceField] .getName ()}" and "${this [_destinationField] .getName ()}".`);
52093
-
52094
- if (!this [_sourceField] .isOutput ())
52095
- throw new Error (`Bad ROUTE statement: Source field "${this [_sourceField] .getName ()}" must be an output.`);
52096
-
52097
- if (!this [_destinationField] .isInput ())
52098
- throw new Error (`Bad ROUTE statement: Destination field "${this [_destinationField] .getName ()}" must be an input.`);
52117
+ X3DRoute .checkFields (this [_sourceField], this [_destinationField]);
52099
52118
 
52100
52119
  this [_sourceField] .addOutputRoute (this);
52101
52120
  this [_destinationField] .addInputRoute (this);
@@ -52103,7 +52122,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52103
52122
  }
52104
52123
  else
52105
52124
  {
52106
- throw firstError ?? secondError;
52125
+ throw new AggregateError (errors, "Couldn't connect route.");
52107
52126
  }
52108
52127
  },
52109
52128
  disconnect ()
@@ -52111,8 +52130,8 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52111
52130
  this [_sourceField] ?.removeOutputRoute (this);
52112
52131
  this [_destinationField] ?.removeInputRoute (this);
52113
52132
 
52114
- if (this [_sourceField] && this [_destinationField])
52115
- this [_sourceField] .removeFieldInterest (this [_destinationField]);
52133
+ if (this [_destinationField])
52134
+ this [_sourceField] ?.removeFieldInterest (this [_destinationField]);
52116
52135
 
52117
52136
  this [_sourceField] = null;
52118
52137
  this [_destinationField] = null;
@@ -52273,6 +52292,8 @@ Object .assign (X3DRoute,
52273
52292
  ? destinationNode .getField (destinationFieldName)
52274
52293
  : helper.try (() => destinationNode .getExportedNode () .getField (destinationFieldName));
52275
52294
 
52295
+ X3DRoute .checkFields (sourceField, destinationField);
52296
+
52276
52297
  if (sourceField)
52277
52298
  {
52278
52299
  sourceFieldName = sourceField .getName ();
@@ -52291,6 +52312,26 @@ Object .assign (X3DRoute,
52291
52312
 
52292
52313
  return `${sourceNode .getId ()}.${sourceFieldName}.${destinationNode .getId ()}.${destinationFieldName}`;
52293
52314
  },
52315
+ checkFields (sourceField, destinationField)
52316
+ {
52317
+ if (sourceField && destinationField)
52318
+ {
52319
+ if (sourceField .getType () !== destinationField .getType ())
52320
+ throw new Error (`Bad ROUTE specification: source field type must match destination field type of fields named "${sourceField .getName ()}" and "${destinationField .getName ()}".`);
52321
+ }
52322
+
52323
+ if (sourceField)
52324
+ {
52325
+ if (!sourceField .isOutput ())
52326
+ throw new Error (`Bad ROUTE specification: source field "${sourceField .getName ()}" must be an output.`);
52327
+ }
52328
+
52329
+ if (destinationField)
52330
+ {
52331
+ if (!destinationField .isInput ())
52332
+ throw new Error (`Bad ROUTE specification: destination field "${destinationField .getName ()}" must be an input.`);
52333
+ }
52334
+ },
52294
52335
  });
52295
52336
 
52296
52337
  const X3DRoute_default_ = X3DRoute;
@@ -52939,54 +52980,47 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
52939
52980
  },
52940
52981
  addRoute (sourceNode, sourceField, destinationNode, destinationField)
52941
52982
  {
52942
- try
52943
- {
52944
- // Normalize arguments.
52945
-
52946
- const
52947
- importedSourceNode = sourceNode instanceof Execution_X3DImportedNode ? sourceNode : null,
52948
- importedDestinationNode = destinationNode instanceof Execution_X3DImportedNode ? destinationNode : null;
52949
-
52950
- sourceNode = Base_X3DCast (Base_X3DConstants .X3DNode, sourceNode, false) ?? importedSourceNode;
52951
- sourceField = String (sourceField);
52952
- destinationNode = Base_X3DCast (Base_X3DConstants .X3DNode, destinationNode, false) ?? importedDestinationNode;
52953
- destinationField = String (destinationField);
52983
+ // Normalize arguments.
52954
52984
 
52955
- // Check nodes.
52985
+ const
52986
+ importedSourceNode = sourceNode instanceof Execution_X3DImportedNode ? sourceNode : null,
52987
+ importedDestinationNode = destinationNode instanceof Execution_X3DImportedNode ? destinationNode : null;
52956
52988
 
52957
- if (!sourceNode)
52958
- throw new Error ("source node must be of type X3DNode.");
52989
+ sourceNode = Base_X3DCast (Base_X3DConstants .X3DNode, sourceNode, false) ?? importedSourceNode;
52990
+ sourceField = String (sourceField);
52991
+ destinationNode = Base_X3DCast (Base_X3DConstants .X3DNode, destinationNode, false) ?? importedDestinationNode;
52992
+ destinationField = String (destinationField);
52959
52993
 
52960
- if (!destinationNode)
52961
- throw new Error ("destination node must be of type X3DNode.");
52994
+ // Check nodes.
52962
52995
 
52963
- // Resolve imported source and destination node.
52996
+ if (!sourceNode)
52997
+ throw new Error ("Bad ROUTE specification: source node must be of type X3DNode.");
52964
52998
 
52965
- sourceNode = this .getLocalizedNode (sourceNode);
52966
- destinationNode = this .getLocalizedNode (destinationNode);
52999
+ if (!destinationNode)
53000
+ throw new Error ("Bad ROUTE specification: destination node must be of type X3DNode.");
52967
53001
 
52968
- // Add route.
53002
+ // Resolve imported source and destination node.
52969
53003
 
52970
- const
52971
- id = Routing_X3DRoute .getRouteId (sourceNode, sourceField, destinationNode, destinationField),
52972
- route = this [_routes] .get (id);
53004
+ sourceNode = this .getLocalizedNode (sourceNode);
53005
+ destinationNode = this .getLocalizedNode (destinationNode);
52973
53006
 
52974
- if (route)
52975
- {
52976
- return route;
52977
- }
52978
- else
52979
- {
52980
- const route = new Routing_X3DRoute (this, sourceNode, sourceField, destinationNode, destinationField);
53007
+ // Add route.
52981
53008
 
52982
- this [_routes] .add (id, route);
53009
+ const
53010
+ id = Routing_X3DRoute .getRouteId (sourceNode, sourceField, destinationNode, destinationField),
53011
+ route = this [_routes] .get (id);
52983
53012
 
52984
- return route;
52985
- }
53013
+ if (route)
53014
+ {
53015
+ return route;
52986
53016
  }
52987
- catch (error)
53017
+ else
52988
53018
  {
52989
- throw new Error (`Bad ROUTE specification.`, { cause: error });
53019
+ const route = new Routing_X3DRoute (this, sourceNode, sourceField, destinationNode, destinationField);
53020
+
53021
+ this [_routes] .add (id, route);
53022
+
53023
+ return route;
52990
53024
  }
52991
53025
  },
52992
53026
  deleteRoute (route)
@@ -54682,7 +54716,7 @@ function X3DCoreContext (element)
54682
54716
  {
54683
54717
  const link = document .createElement ("link");
54684
54718
 
54685
- link .integrity = "sha384-dhnoOI+clBqqFYGBrUCL7KhjerG/JEhXRHWvaNS1qEwbCU/f0MWYgFRQj2esJwbi";
54719
+ link .integrity = "sha384-x6y/hxdrQVgxMyDh++oW/v2xiaW7k1Rmjai5PMfLQ+DLzcx2odeW89DVDfzQkGs9";
54686
54720
  link .rel = "stylesheet";
54687
54721
  link .crossOrigin = "anonymous";
54688
54722
  link .onload = resolve;
@@ -64416,12 +64450,11 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64416
64450
  {
64417
64451
  const surface = this .getBrowser () .getSurface ();
64418
64452
 
64419
- helper.on (this, surface, "mousedown", event => this .mousedown (event));
64420
- helper.on (this, surface, "mouseup", event => this .mouseup (event));
64421
- helper.on (this, surface, "dblclick", event => this .dblclick (event));
64422
- helper.on (this, surface, "mousemove", event => this .mousemove (event));
64423
- helper.on (this, surface, "mouseenter", event => this .onmouseenter (event));
64424
- helper.on (this, surface, "mouseout", event => this .onmouseout (event));
64453
+ helper.on (this, surface, "mousedown", event => this .mousedown (event));
64454
+ helper.on (this, surface, "mouseup", event => this .mouseup (event));
64455
+ helper.on (this, surface, "dblclick", event => this .dblclick (event));
64456
+ helper.on (this, surface, "mousemove", event => this .mousemove (event));
64457
+ helper.on (this, surface, "mouseout", event => this .onmouseout (event));
64425
64458
 
64426
64459
  helper.on (this, surface, "touchstart", event => this .touchstart (event));
64427
64460
  helper.on (this, surface, "touchend", event => this .touchend (event));
@@ -64432,6 +64465,8 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64432
64465
  browser = this .getBrowser (),
64433
64466
  surface = browser .getSurface ();
64434
64467
 
64468
+ browser .getElement () .focus ({ preventScroll: true });
64469
+
64435
64470
  if (browser .getShiftKey () && (browser .getControlKey () || browser .getCommandKey ()))
64436
64471
  return;
64437
64472
 
@@ -64612,10 +64647,6 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64612
64647
  else
64613
64648
  browser .setCursor (this .grabbing && move ? "GRABBING" : "DEFAULT");
64614
64649
  },
64615
- onmouseenter ()
64616
- {
64617
- this .getBrowser () .getElement () .focus ({ preventScroll: true });
64618
- },
64619
64650
  onmouseout ()
64620
64651
  {
64621
64652
  this .getBrowser () .leaveNotifyEvent ();
@@ -72995,15 +73026,16 @@ function X3DBrowserContext (element)
72995
73026
  for (const browserContext of browserContexts)
72996
73027
  browserContext .call (this, element);
72997
73028
 
72998
- this .addChildObjects (Base_X3DConstants .outputOnly, "initialized", new x_ite_Fields .SFTime (),
72999
- Base_X3DConstants .outputOnly, "shutdown", new x_ite_Fields .SFTime (),
73000
- Base_X3DConstants .outputOnly, "prepareEvents", new x_ite_Fields .SFTime (),
73001
- Base_X3DConstants .outputOnly, "timeEvents", new x_ite_Fields .SFTime (),
73002
- Base_X3DConstants .outputOnly, "cameraEvents", new x_ite_Fields .SFTime (),
73003
- Base_X3DConstants .outputOnly, "sensorEvents", new x_ite_Fields .SFTime (),
73004
- Base_X3DConstants .outputOnly, "displayEvents", new x_ite_Fields .SFTime (),
73005
- Base_X3DConstants .outputOnly, "finishedEvents", new x_ite_Fields .SFTime (),
73006
- Base_X3DConstants .outputOnly, "endEvents", new x_ite_Fields .SFTime ());
73029
+ this .addChildObjects (Base_X3DConstants .outputOnly, "initialized", new x_ite_Fields .SFTime (),
73030
+ Base_X3DConstants .outputOnly, "shutdown", new x_ite_Fields .SFTime (),
73031
+ Base_X3DConstants .outputOnly, "prepareEvents", new x_ite_Fields .SFTime (),
73032
+ Base_X3DConstants .outputOnly, "timePrepareEvents", new x_ite_Fields .SFTime (),
73033
+ Base_X3DConstants .outputOnly, "timeEvents", new x_ite_Fields .SFTime (),
73034
+ Base_X3DConstants .outputOnly, "cameraEvents", new x_ite_Fields .SFTime (),
73035
+ Base_X3DConstants .outputOnly, "sensorEvents", new x_ite_Fields .SFTime (),
73036
+ Base_X3DConstants .outputOnly, "displayEvents", new x_ite_Fields .SFTime (),
73037
+ Base_X3DConstants .outputOnly, "finishedEvents", new x_ite_Fields .SFTime (),
73038
+ Base_X3DConstants .outputOnly, "endEvents", new x_ite_Fields .SFTime ());
73007
73039
 
73008
73040
  this [X3DBrowserContext_tainted] = false;
73009
73041
  this [_previousTime] = 0;
@@ -73037,6 +73069,10 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73037
73069
  {
73038
73070
  return this ._prepareEvents;
73039
73071
  },
73072
+ timePrepareEvents ()
73073
+ {
73074
+ return this ._timePrepareEvents;
73075
+ },
73040
73076
  timeEvents ()
73041
73077
  {
73042
73078
  return this ._timeEvents;
@@ -73140,6 +73176,9 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73140
73176
  this .addTaintedField (this ._prepareEvents);
73141
73177
  this [X3DBrowserContext_processEvents] ();
73142
73178
 
73179
+ this .addTaintedField (this ._timePrepareEvents);
73180
+ this [X3DBrowserContext_processEvents] ();
73181
+
73143
73182
  this .addTaintedField (this ._timeEvents);
73144
73183
  this [X3DBrowserContext_processEvents] ();
73145
73184
 
@@ -87872,6 +87911,10 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Sound
87872
87911
  for (const childNode of this .childNodes)
87873
87912
  childNode .getAudioSource () .connect (this .audioDestination);
87874
87913
  },
87914
+ set_start ()
87915
+ {
87916
+ this ._elapsedTime = 0;
87917
+ },
87875
87918
  set_time ()
87876
87919
  {
87877
87920
  this ._elapsedTime = this .getElapsedTime ();
@@ -88125,6 +88168,8 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Sound_X3D
88125
88168
  if (!this .mediaElement)
88126
88169
  return;
88127
88170
 
88171
+ this ._elapsedTime = 0;
88172
+
88128
88173
  this .mediaElement .currentTime = 0;
88129
88174
 
88130
88175
  this .getBrowser () .startAudioElement (this .mediaElement);
@@ -89028,12 +89073,12 @@ Object .defineProperties (BufferAudioSource,
89028
89073
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
89029
89074
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat ()),
89030
89075
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "playbackRate", new x_ite_Fields .SFFloat (1)),
89031
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopStart", new x_ite_Fields .SFTime (0)),
89032
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopEnd", new x_ite_Fields .SFTime (0)),
89033
89076
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
89034
89077
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
89035
89078
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelInterpretation", new x_ite_Fields .SFString ("SPEAKERS")),
89036
89079
 
89080
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopStart", new x_ite_Fields .SFTime (0)),
89081
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopEnd", new x_ite_Fields .SFTime (0)),
89037
89082
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
89038
89083
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
89039
89084
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
@@ -90071,6 +90116,8 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
90071
90116
 
90072
90117
  this .mediaStreamAudioSourceNode = new MediaStreamAudioSourceNode (audioContext, { mediaStream });
90073
90118
 
90119
+ this ._elapsedTime = 0;
90120
+
90074
90121
  if (this ._isActive .getValue ())
90075
90122
  {
90076
90123
  if (this ._isPaused .getValue () || !this .getLive () .getValue ())
@@ -90142,6 +90189,9 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
90142
90189
  },
90143
90190
  set_time ()
90144
90191
  {
90192
+ if (!this .mediaStreamAudioSourceNode)
90193
+ return;
90194
+
90145
90195
  this ._elapsedTime = this .getElapsedTime ();
90146
90196
  },
90147
90197
  });
@@ -90210,7 +90260,7 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90210
90260
  if (!this .oscillatorNode)
90211
90261
  return;
90212
90262
 
90213
- this .oscillatorNode .detune .value = Math .max (this ._detune .getValue (), 0);
90263
+ this .oscillatorNode .detune .value = this ._detune .getValue ();
90214
90264
  },
90215
90265
  set_frequency__ ()
90216
90266
  {
@@ -90278,12 +90328,15 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90278
90328
 
90279
90329
  this .oscillatorNode = new OscillatorNode (audioContext);
90280
90330
 
90331
+ this .set_gain__ ();
90281
90332
  this .set_detune__ ();
90282
90333
  this .set_frequency__ ();
90283
90334
  this .set_type__ ();
90284
90335
 
90285
90336
  this .oscillatorNode .connect (this .getAudioSource ());
90286
90337
  this .oscillatorNode .start ();
90338
+
90339
+ this ._elapsedTime = 0;
90287
90340
  },
90288
90341
  set_pause ()
90289
90342
  {
@@ -90295,8 +90348,16 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90295
90348
  },
90296
90349
  set_stop ()
90297
90350
  {
90298
- this .oscillatorNode .stop ();
90299
- this .oscillatorNode .disconnect ();
90351
+ const
90352
+ audioContext = this .getBrowser () .getAudioContext (),
90353
+ gainNode = this .getAudioSource (),
90354
+ now = audioContext .currentTime,
90355
+ fadeDuration = 0.03;
90356
+
90357
+ gainNode .gain .setValueAtTime (gainNode .gain .value, now);
90358
+ gainNode .gain .exponentialRampToValueAtTime (1e-3, now + fadeDuration);
90359
+
90360
+ this .oscillatorNode .stop (now + fadeDuration);
90300
90361
  },
90301
90362
  set_time ()
90302
90363
  {
@@ -90457,6 +90518,9 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90457
90518
  },
90458
90519
  setGain (gain, pan = 0.5, rotation = 0)
90459
90520
  {
90521
+ // Given a pan value, left and right channel levels can be obtained using the equations from:
90522
+ // https://www.web3d.org/documents/specifications/19775-1/V4.0/index.html
90523
+
90460
90524
  const
90461
90525
  panLeft = 1 - pan ** 2,
90462
90526
  panRight = 1 - (1 - pan) ** 2,
@@ -91335,7 +91399,7 @@ function GifMedia (gif, movieTexture)
91335
91399
  if (!loop && cycle < this .cycle)
91336
91400
  return this .duration;
91337
91401
 
91338
- return (movieTexture ._elapsedTime * playbackRate) % this .duration;
91402
+ return (movieTexture ._elapsedTime .getValue () * playbackRate) % this .duration;
91339
91403
  },
91340
91404
  set: Function .prototype,
91341
91405
  },
@@ -91362,7 +91426,7 @@ function GifMedia (gif, movieTexture)
91362
91426
  {
91363
91427
  get ()
91364
91428
  {
91365
- return Math .floor (movieTexture ._elapsedTime / this .duration);
91429
+ return Math .floor (movieTexture ._elapsedTime .getValue () / this .duration);
91366
91430
  },
91367
91431
  },
91368
91432
  currentFrame:
@@ -91456,7 +91520,7 @@ async function PNGMedia (apng, movieTexture)
91456
91520
  {
91457
91521
  get ()
91458
91522
  {
91459
- return Math .floor (movieTexture ._elapsedTime / this .duration);
91523
+ return Math .floor (movieTexture ._elapsedTime .getValue () / this .duration);
91460
91524
  },
91461
91525
  },
91462
91526
  currentFrame:
@@ -91501,8 +91565,8 @@ const PNGMedia_default_ = PNGMedia;
91501
91565
 
91502
91566
  /* harmony default export */ const Texturing_PNGMedia = (x_ite_Namespace .add ("PNGMedia", PNGMedia_default_));
91503
91567
  ;// ./src/x_ite/Components/Texturing/MovieTexture.js
91504
- /* provided dependency */ var SuperGif = __webpack_require__(133);
91505
- /* provided dependency */ var APNG = __webpack_require__(991);
91568
+ /* provided dependency */ var SuperGif = __webpack_require__(617);
91569
+ /* provided dependency */ var APNG = __webpack_require__(851);
91506
91570
 
91507
91571
 
91508
91572
 
@@ -93769,7 +93833,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93769
93833
  },
93770
93834
  print (... args)
93771
93835
  {
93772
- const string = args .map (String) .join (" ");
93836
+ const string = args .join (" ");
93773
93837
 
93774
93838
  console .log (string);
93775
93839
 
@@ -93778,7 +93842,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93778
93842
  },
93779
93843
  println (... args)
93780
93844
  {
93781
- const string = args .map (String) .join (" ");
93845
+ const string = args .join (" ");
93782
93846
 
93783
93847
  console .log (string);
93784
93848
 
@@ -94146,7 +94210,7 @@ const QuickSort_default_ = QuickSort;
94146
94210
 
94147
94211
  /* harmony default export */ const Algorithms_QuickSort = (x_ite_Namespace .add ("QuickSort", QuickSort_default_));
94148
94212
  ;// ./src/lib/libtess.js
94149
- /* provided dependency */ var libtess_libtess = __webpack_require__(643);
94213
+ /* provided dependency */ var libtess_libtess = __webpack_require__(775);
94150
94214
  const libtess_default_ = libtess_libtess;
94151
94215
  ;
94152
94216