x_ite 16.2.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 +2 -2
  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 +107 -1
  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.js +303 -180
  51. package/dist/x_ite.min.js +2 -2
  52. package/dist/x_ite.min.mjs +2 -2
  53. package/dist/x_ite.mjs +303 -180
  54. package/dist/x_ite.zip +0 -0
  55. package/package.json +7 -6
package/dist/x_ite.js CHANGED
@@ -1,4 +1,4 @@
1
- /* X_ITE v16.2.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
- /***/ 627
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
- /***/ 249
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
- /***/ 289
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.2.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__(289);
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 ();
39103
+
39104
+ if (time - this .cycle < this .interval)
39105
+ return;
39074
39106
 
39075
- this .fraction = fraction;
39076
- this ._fraction_changed = fraction;
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,25 +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 ._cycleTime = time;
39096
-
39097
- this .set_fraction (time);
39126
+ this ._cycleTime = time;
39127
+ this ._fraction_changed = this .fraction = this .getFraction (time);
39098
39128
  }
39099
39129
  }
39100
39130
  else
39101
39131
  {
39102
- this ._elapsedTime = this .getElapsedTime ();
39103
- this ._fraction_changed = this .fraction = this .last;
39104
-
39105
39132
  this .stop ();
39106
39133
  }
39107
39134
  }
39108
39135
  else
39109
39136
  {
39110
- this ._elapsedTime = this .getElapsedTime ();
39111
-
39112
- this .set_fraction (time);
39137
+ this ._fraction_changed = this .fraction = this .getFraction (time);
39113
39138
  }
39114
39139
  },
39115
39140
  dispose ()
@@ -39125,21 +39150,24 @@ Object .defineProperties (TimeSensor,
39125
39150
  fieldDefinitions:
39126
39151
  {
39127
39152
  value: new Base_FieldDefinitionArray ([
39128
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
39129
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
39130
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
39131
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "cycleInterval", new x_ite_Fields .SFTime (1)),
39132
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
39133
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
39134
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
39135
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "pauseTime", new x_ite_Fields .SFTime (0)),
39136
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "stopTime", new x_ite_Fields .SFTime (0)),
39137
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isPaused", new x_ite_Fields .SFBool ()),
39138
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
39139
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleTime", new x_ite_Fields .SFTime ()),
39140
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "elapsedTime", new x_ite_Fields .SFTime ()),
39141
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "fraction_changed", new x_ite_Fields .SFFloat ()),
39142
- 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 ()),
39143
39171
  ]),
39144
39172
  enumerable: true,
39145
39173
  },
@@ -40683,6 +40711,7 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
40683
40711
  case "KHR_materials_ior":
40684
40712
  case "KHR_materials_iridescence":
40685
40713
  case "KHR_materials_pbrSpecularGlossiness":
40714
+ case "KHR_materials_retroreflection":
40686
40715
  case "KHR_materials_sheen":
40687
40716
  case "KHR_materials_specular":
40688
40717
  case "KHR_materials_transmission":
@@ -41751,6 +41780,9 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
41751
41780
  case "KHR_materials_iridescence":
41752
41781
  this .khrMaterialsIridescenceObject (value, materialNode);
41753
41782
  break;
41783
+ case "KHR_materials_retroreflection":
41784
+ this .khrMaterialsRetroreflectionObject (value, materialNode);
41785
+ break;
41754
41786
  case "KHR_materials_sheen":
41755
41787
  this .khrMaterialsSheenObject (value, materialNode);
41756
41788
  break;
@@ -41898,6 +41930,23 @@ Object .assign (Object .setPrototypeOf (GLTF2Parser .prototype, Parser_X3DParser
41898
41930
 
41899
41931
  materialNode ._extensions .push (extension);
41900
41932
  },
41933
+ khrMaterialsRetroreflectionObject (KHR_materials_retroreflection, materialNode)
41934
+ {
41935
+ if (!(KHR_materials_retroreflection instanceof Object))
41936
+ return;
41937
+
41938
+ const extension = this .getScene () .createNode ("RetroreflectionMaterialExtension", false);
41939
+
41940
+ extension ._retroreflection = this .numberValue (KHR_materials_retroreflection .retroreflectionFactor, 0);
41941
+ extension ._retroreflectionTexture = this .textureInfo (KHR_materials_retroreflection .retroreflectionTexture);
41942
+ extension ._retroreflectionTextureMapping = this .textureMapping (KHR_materials_retroreflection .retroreflectionTexture);
41943
+
41944
+ extension .setup ();
41945
+
41946
+ KHR_materials_retroreflection .pointers = [extension];
41947
+
41948
+ materialNode ._extensions .push (extension);
41949
+ },
41901
41950
  khrMaterialsSheenObject (KHR_materials_sheen, materialNode)
41902
41951
  {
41903
41952
  if (!(KHR_materials_sheen instanceof Object))
@@ -46516,7 +46565,7 @@ Object .assign (Object .setPrototypeOf (STLBParser .prototype, Parser_X3DParser
46516
46565
  },
46517
46566
  header ()
46518
46567
  {
46519
- const header = helper.decodeText (this .arrayBuffer .slice (0, 80)) .trim ();
46568
+ const header = helper.decodeText (this .arrayBuffer .slice (0, 80)) .replace (/\u0000.*$/, "") .trim ();
46520
46569
 
46521
46570
  if (!header)
46522
46571
  return;
@@ -46700,7 +46749,8 @@ Object .assign (Object .setPrototypeOf (PLYAParser .prototype, Parser_X3DParser
46700
46749
  {
46701
46750
  const value = this .result [0] .trim ();
46702
46751
 
46703
- this .comments .push (value);
46752
+ if (value)
46753
+ this .comments .push (value);
46704
46754
 
46705
46755
  this .mustRotateAxes ||= !! value .match (/\b(?:Blender|Artec|Polycam)\b/i);
46706
46756
 
@@ -47912,7 +47962,7 @@ const Bezier_default_ = Bezier;
47912
47962
 
47913
47963
  /* harmony default export */ const Algorithms_Bezier = (x_ite_Namespace .add ("Bezier", Bezier_default_));
47914
47964
  ;// ./src/x_ite/Parser/SVGParser.js
47915
- /* provided dependency */ var SVGParser_libtess = __webpack_require__(289);
47965
+ /* provided dependency */ var SVGParser_libtess = __webpack_require__(775);
47916
47966
 
47917
47967
 
47918
47968
 
@@ -52034,7 +52084,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52034
52084
  if (this [_disposed])
52035
52085
  return;
52036
52086
 
52037
- let firstError, secondError;
52087
+ const errors = [ ];
52038
52088
 
52039
52089
  try
52040
52090
  {
@@ -52046,7 +52096,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52046
52096
  }
52047
52097
  catch (error)
52048
52098
  {
52049
- firstError = error;
52099
+ errors .push (error);
52050
52100
  }
52051
52101
 
52052
52102
  try
@@ -52059,19 +52109,12 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52059
52109
  }
52060
52110
  catch (error)
52061
52111
  {
52062
- secondError = error;
52112
+ errors .push (error);
52063
52113
  }
52064
52114
 
52065
52115
  if (this [_sourceField] && this [_destinationField])
52066
52116
  {
52067
- if (this [_sourceField] .getType () !== this [_destinationField] .getType ())
52068
- throw new Error (`Bad ROUTE statement: Source field type must match destination field type of fields named "${this [_sourceField] .getName ()}" and "${this [_destinationField] .getName ()}".`);
52069
-
52070
- if (!this [_sourceField] .isOutput ())
52071
- throw new Error (`Bad ROUTE statement: Source field "${this [_sourceField] .getName ()}" must be an output.`);
52072
-
52073
- if (!this [_destinationField] .isInput ())
52074
- throw new Error (`Bad ROUTE statement: Destination field "${this [_destinationField] .getName ()}" must be an input.`);
52117
+ X3DRoute .checkFields (this [_sourceField], this [_destinationField]);
52075
52118
 
52076
52119
  this [_sourceField] .addOutputRoute (this);
52077
52120
  this [_destinationField] .addInputRoute (this);
@@ -52079,7 +52122,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52079
52122
  }
52080
52123
  else
52081
52124
  {
52082
- throw firstError ?? secondError;
52125
+ throw new AggregateError (errors, "Couldn't connect route.");
52083
52126
  }
52084
52127
  },
52085
52128
  disconnect ()
@@ -52087,8 +52130,8 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52087
52130
  this [_sourceField] ?.removeOutputRoute (this);
52088
52131
  this [_destinationField] ?.removeInputRoute (this);
52089
52132
 
52090
- if (this [_sourceField] && this [_destinationField])
52091
- this [_sourceField] .removeFieldInterest (this [_destinationField]);
52133
+ if (this [_destinationField])
52134
+ this [_sourceField] ?.removeFieldInterest (this [_destinationField]);
52092
52135
 
52093
52136
  this [_sourceField] = null;
52094
52137
  this [_destinationField] = null;
@@ -52249,6 +52292,8 @@ Object .assign (X3DRoute,
52249
52292
  ? destinationNode .getField (destinationFieldName)
52250
52293
  : helper.try (() => destinationNode .getExportedNode () .getField (destinationFieldName));
52251
52294
 
52295
+ X3DRoute .checkFields (sourceField, destinationField);
52296
+
52252
52297
  if (sourceField)
52253
52298
  {
52254
52299
  sourceFieldName = sourceField .getName ();
@@ -52267,6 +52312,26 @@ Object .assign (X3DRoute,
52267
52312
 
52268
52313
  return `${sourceNode .getId ()}.${sourceFieldName}.${destinationNode .getId ()}.${destinationFieldName}`;
52269
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
+ },
52270
52335
  });
52271
52336
 
52272
52337
  const X3DRoute_default_ = X3DRoute;
@@ -52915,54 +52980,47 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
52915
52980
  },
52916
52981
  addRoute (sourceNode, sourceField, destinationNode, destinationField)
52917
52982
  {
52918
- try
52919
- {
52920
- // Normalize arguments.
52921
-
52922
- const
52923
- importedSourceNode = sourceNode instanceof Execution_X3DImportedNode ? sourceNode : null,
52924
- importedDestinationNode = destinationNode instanceof Execution_X3DImportedNode ? destinationNode : null;
52925
-
52926
- sourceNode = Base_X3DCast (Base_X3DConstants .X3DNode, sourceNode, false) ?? importedSourceNode;
52927
- sourceField = String (sourceField);
52928
- destinationNode = Base_X3DCast (Base_X3DConstants .X3DNode, destinationNode, false) ?? importedDestinationNode;
52929
- destinationField = String (destinationField);
52983
+ // Normalize arguments.
52930
52984
 
52931
- // Check nodes.
52985
+ const
52986
+ importedSourceNode = sourceNode instanceof Execution_X3DImportedNode ? sourceNode : null,
52987
+ importedDestinationNode = destinationNode instanceof Execution_X3DImportedNode ? destinationNode : null;
52932
52988
 
52933
- if (!sourceNode)
52934
- 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);
52935
52993
 
52936
- if (!destinationNode)
52937
- throw new Error ("destination node must be of type X3DNode.");
52994
+ // Check nodes.
52938
52995
 
52939
- // Resolve imported source and destination node.
52996
+ if (!sourceNode)
52997
+ throw new Error ("Bad ROUTE specification: source node must be of type X3DNode.");
52940
52998
 
52941
- sourceNode = this .getLocalizedNode (sourceNode);
52942
- destinationNode = this .getLocalizedNode (destinationNode);
52999
+ if (!destinationNode)
53000
+ throw new Error ("Bad ROUTE specification: destination node must be of type X3DNode.");
52943
53001
 
52944
- // Add route.
53002
+ // Resolve imported source and destination node.
52945
53003
 
52946
- const
52947
- id = Routing_X3DRoute .getRouteId (sourceNode, sourceField, destinationNode, destinationField),
52948
- route = this [_routes] .get (id);
53004
+ sourceNode = this .getLocalizedNode (sourceNode);
53005
+ destinationNode = this .getLocalizedNode (destinationNode);
52949
53006
 
52950
- if (route)
52951
- {
52952
- return route;
52953
- }
52954
- else
52955
- {
52956
- const route = new Routing_X3DRoute (this, sourceNode, sourceField, destinationNode, destinationField);
53007
+ // Add route.
52957
53008
 
52958
- this [_routes] .add (id, route);
53009
+ const
53010
+ id = Routing_X3DRoute .getRouteId (sourceNode, sourceField, destinationNode, destinationField),
53011
+ route = this [_routes] .get (id);
52959
53012
 
52960
- return route;
52961
- }
53013
+ if (route)
53014
+ {
53015
+ return route;
52962
53016
  }
52963
- catch (error)
53017
+ else
52964
53018
  {
52965
- 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;
52966
53024
  }
52967
53025
  },
52968
53026
  deleteRoute (route)
@@ -54658,7 +54716,7 @@ function X3DCoreContext (element)
54658
54716
  {
54659
54717
  const link = document .createElement ("link");
54660
54718
 
54661
- link .integrity = "sha384-OncRzbLtLD5Caw7AMriMRlhuhJ/fW3gh5dFvrdeifrhlqF+YTzx/lbZh5l6JjYau";
54719
+ link .integrity = "sha384-x6y/hxdrQVgxMyDh++oW/v2xiaW7k1Rmjai5PMfLQ+DLzcx2odeW89DVDfzQkGs9";
54662
54720
  link .rel = "stylesheet";
54663
54721
  link .crossOrigin = "anonymous";
54664
54722
  link .onload = resolve;
@@ -64054,11 +64112,13 @@ const
64054
64112
  _loadingTotal = Symbol (),
64055
64113
  X3DNetworkingContext_loadingObjects = Symbol (),
64056
64114
  _browserLoading = Symbol (),
64057
- _browserTime = Symbol (),
64115
+ _percentTime = Symbol (),
64058
64116
  _set_loadCount = Symbol (),
64059
64117
  _loadFractions = Symbol (),
64060
64118
  _defaultScene = Symbol ();
64061
64119
 
64120
+ const PERCENT_TIME = 8_000; // in ms
64121
+
64062
64122
  function getBaseURI (element)
64063
64123
  {
64064
64124
  const { baseURI } = element;
@@ -64115,7 +64175,7 @@ Object .assign (X3DNetworkingContext .prototype,
64115
64175
  setBrowserLoading (value)
64116
64176
  {
64117
64177
  this [_browserLoading] = value;
64118
- this [_browserTime] = Date .now ();
64178
+ this [_percentTime] = Date .now ();
64119
64179
 
64120
64180
  if (value)
64121
64181
  {
@@ -64179,7 +64239,8 @@ Object .assign (X3DNetworkingContext .prototype,
64179
64239
 
64180
64240
  this ._loadCount = this [X3DNetworkingContext_loadingObjects] .size;
64181
64241
 
64182
- this [_browserTime] = Date .now ();
64242
+ if (Date .now () - this [_percentTime] < PERCENT_TIME)
64243
+ this [_percentTime] = Date .now ();
64183
64244
  },
64184
64245
  removeLoadingObject (object)
64185
64246
  {
@@ -64187,7 +64248,8 @@ Object .assign (X3DNetworkingContext .prototype,
64187
64248
 
64188
64249
  this ._loadCount = this [X3DNetworkingContext_loadingObjects] .size;
64189
64250
 
64190
- this [_browserTime] = Date .now ();
64251
+ if (Date .now () - this [_percentTime] < PERCENT_TIME)
64252
+ this [_percentTime] = Date .now ();
64191
64253
  },
64192
64254
  getDisplayLoadCount ()
64193
64255
  {
@@ -64223,8 +64285,8 @@ Object .assign (X3DNetworkingContext .prototype,
64223
64285
  if (this ._loadCount .getValue () || this [_browserLoading])
64224
64286
  {
64225
64287
  string = ((loadingDisplay || 1) === 1
64226
- ? gettext ("Loading %1 file")
64227
- : gettext ("Loading %1 files")) .replace ("%1", loadingDisplay || 1);
64288
+ ? gettext("Loading %1 file")
64289
+ : gettext("Loading %1 files")) .replace ("%1", loadingDisplay || 1);
64228
64290
  }
64229
64291
  else
64230
64292
  {
@@ -64244,8 +64306,8 @@ Object .assign (X3DNetworkingContext .prototype,
64244
64306
  const percent = fractions * 100;
64245
64307
 
64246
64308
  // Show progress in % if loading takes too long.
64247
- if (Date .now () - this [_browserTime] > 8_000)
64248
- string += ` (${percent .toFixed (2)} %)`;
64309
+ if (Date .now () - this [_percentTime] > PERCENT_TIME)
64310
+ string += ` (${percent .toFixed (2)}\u202F%)`;
64249
64311
 
64250
64312
  this .getSplashScreen () .querySelector (".x_ite-private-spinner-text") .textContent = string;
64251
64313
  this .getSplashScreen () .querySelector (".x_ite-private-progressbar div") .style .width = `${percent}%`;
@@ -64388,12 +64450,11 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64388
64450
  {
64389
64451
  const surface = this .getBrowser () .getSurface ();
64390
64452
 
64391
- helper.on (this, surface, "mousedown", event => this .mousedown (event));
64392
- helper.on (this, surface, "mouseup", event => this .mouseup (event));
64393
- helper.on (this, surface, "dblclick", event => this .dblclick (event));
64394
- helper.on (this, surface, "mousemove", event => this .mousemove (event));
64395
- helper.on (this, surface, "mouseenter", event => this .onmouseenter (event));
64396
- 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));
64397
64458
 
64398
64459
  helper.on (this, surface, "touchstart", event => this .touchstart (event));
64399
64460
  helper.on (this, surface, "touchend", event => this .touchend (event));
@@ -64404,6 +64465,8 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64404
64465
  browser = this .getBrowser (),
64405
64466
  surface = browser .getSurface ();
64406
64467
 
64468
+ browser .getElement () .focus ({ preventScroll: true });
64469
+
64407
64470
  if (browser .getShiftKey () && (browser .getControlKey () || browser .getCommandKey ()))
64408
64471
  return;
64409
64472
 
@@ -64584,10 +64647,6 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64584
64647
  else
64585
64648
  browser .setCursor (this .grabbing && move ? "GRABBING" : "DEFAULT");
64586
64649
  },
64587
- onmouseenter ()
64588
- {
64589
- this .getBrowser () .getElement () .focus ({ preventScroll: true });
64590
- },
64591
64650
  onmouseout ()
64592
64651
  {
64593
64652
  this .getBrowser () .leaveNotifyEvent ();
@@ -67096,7 +67155,7 @@ vec3 getIBLRadianceCharlie(const in vec3 n,const in vec3 v,const in float sheenR
67096
67155
 
67097
67156
 
67098
67157
  const MaterialInfo2_glsl_default_ = () => /* glsl */ `
67099
- struct MaterialInfo{float ior;float perceptualRoughness;vec3 f0_dielectric;float alphaRoughness;float fresnel_w;vec3 f90;vec3 f90_dielectric;float metallic;vec3 baseColor;float sheenRoughnessFactor;vec3 sheenColorFactor;vec3 clearcoatF0;vec3 clearcoatF90;float clearcoatFactor;vec3 clearcoatNormal;float clearcoatRoughness;float specularWeight;float transmissionFactor;float thickness;vec3 attenuationColor;float attenuationDistance;float iridescenceFactor;float iridescenceIor;float iridescenceThickness;float diffuseTransmissionFactor;vec3 diffuseTransmissionColorFactor;vec3 anisotropicT;vec3 anisotropicB;float anisotropyStrength;float dispersion;vec3 multiscatterColor;};
67158
+ struct MaterialInfo{float ior;float perceptualRoughness;vec3 f0_dielectric;float alphaRoughness;float fresnel_w;vec3 f90;vec3 f90_dielectric;float metallic;vec3 baseColor;float sheenRoughnessFactor;vec3 sheenColorFactor;vec3 clearcoatF0;vec3 clearcoatF90;float clearcoatFactor;vec3 clearcoatNormal;float clearcoatRoughness;float specularWeight;float transmissionFactor;float thickness;vec3 attenuationColor;float attenuationDistance;float iridescenceFactor;float iridescenceIor;float iridescenceThickness;float diffuseTransmissionFactor;vec3 diffuseTransmissionColorFactor;vec3 anisotropicT;vec3 anisotropicB;float anisotropyStrength;float dispersion;vec3 multiscatterColor;float retroreflectionFactor;};
67100
67159
  #if defined(X3D_MATERIAL_METALLIC_ROUGHNESS)
67101
67160
  ${MaterialTextures .texture ("x3d_BaseTexture", "rgba", "linear")}
67102
67161
  vec4 getBaseColor(){float alpha=1.-x3d_Material.transparency;vec4 baseColor=vec4(x3d_Material.baseColor,alpha);
@@ -67261,6 +67320,14 @@ vec3 anisotropySample=getAnisotropyTextureEXT();direction=anisotropySample.xy*2.
67261
67320
  #endif
67262
67321
  vec2 directionRotation=x3d_AnisotropyEXT.xy;mat2 rotationMatrix=mat2(directionRotation.xy,-directionRotation.y,directionRotation.x);direction=rotationMatrix*direction;info.anisotropicT=mat3(normalInfo.t,normalInfo.b,normalInfo.n)*normalize(vec3(direction,0.));info.anisotropicB=cross(normalInfo.ng,info.anisotropicT);info.anisotropyStrength=clamp(x3d_AnisotropyEXT.z*strengthFactor,0.,1.);return info;}
67263
67322
  #endif
67323
+ #if defined(X3D_RETROREFLECTION_MATERIAL_EXT)
67324
+ ${MaterialTextures .texture ("x3d_RetroreflectionTextureEXT", "r")}
67325
+ uniform float x3d_RetroreflectionEXT;MaterialInfo getRetroreflectionInfo(in MaterialInfo info){float retroreflectionFactor=x3d_RetroreflectionEXT;
67326
+ #if defined(X3D_RETROREFLECTION_TEXTURE_EXT)
67327
+ retroreflectionFactor*=getRetroreflectionTextureEXT();
67328
+ #endif
67329
+ info.retroreflectionFactor=retroreflectionFactor;return info;}
67330
+ #endif
67264
67331
  `
67265
67332
  ;
67266
67333
 
@@ -67303,6 +67370,9 @@ baseColor.rgb*=getTextureProjectorColor();
67303
67370
  vec3 color=vec3(0);vec3 v=normalize(-vertex);
67304
67371
  #if defined(X3D_USE_IBL)||defined(X3D_LIGHTING)
67305
67372
  NormalInfo normalInfo=getNormalInfo(x3d_Material.normalScale);vec3 n=normalInfo.n;float NdotV=clamp(dot(n,v),0.,1.);
67373
+ #if defined(X3D_RETROREFLECTION_MATERIAL_EXT)
67374
+ vec3 v_retro=reflect(-v,n);float NdotV_retro=clamp(dot(n,v_retro),0.,1.);
67375
+ #endif
67306
67376
  #endif
67307
67377
  MaterialInfo materialInfo;materialInfo.baseColor=baseColor.rgb;materialInfo.ior=1.5;materialInfo.f0_dielectric=vec3(.04);materialInfo.specularWeight=1.;materialInfo.f90=vec3(1);materialInfo.f90_dielectric=materialInfo.f90;
67308
67378
  #if defined(X3D_IOR_MATERIAL_EXT)
@@ -67338,10 +67408,17 @@ materialInfo=getVolumeScatterInfo(materialInfo);
67338
67408
  #if defined(X3D_ANISOTROPY_MATERIAL_EXT)
67339
67409
  materialInfo=getAnisotropyInfo(materialInfo,normalInfo);
67340
67410
  #endif
67411
+ #if defined(X3D_RETROREFLECTION_MATERIAL_EXT)
67412
+ materialInfo=getRetroreflectionInfo(materialInfo);
67413
+ #endif
67341
67414
  materialInfo.perceptualRoughness=clamp(materialInfo.perceptualRoughness,0.,1.);materialInfo.metallic=clamp(materialInfo.metallic,0.,1.);materialInfo.alphaRoughness=materialInfo.perceptualRoughness*materialInfo.perceptualRoughness;vec3 f_specular_dielectric=vec3(0);vec3 f_specular_metal=vec3(0);vec3 f_diffuse=vec3(0);vec3 f_dielectric_brdf_ibl=vec3(0);vec3 f_metal_brdf_ibl=vec3(0);vec3 f_emissive=vec3(0);vec3 clearcoat_brdf=vec3(0);vec3 f_sheen=vec3(0);vec3 f_specular_transmission=vec3(0);vec3 f_diffuse_transmission=vec3(0);float clearcoatFactor=0.;vec3 clearcoatFresnel=vec3(0);float albedoSheenScaling=1.;float diffuseTransmissionThickness=1.;vec3 diffuseTransmissionIBL=vec3(0);
67342
67415
  #if defined(X3D_USE_IBL)||defined(X3D_LIGHTING)
67343
67416
  #if defined(X3D_IRIDESCENCE_MATERIAL_EXT)
67344
- vec3 iridescenceFresnel_dielectric=evalIridescence(1.,materialInfo.iridescenceIor,NdotV,materialInfo.iridescenceThickness,materialInfo.f0_dielectric);vec3 iridescenceFresnel_metallic=evalIridescence(1.,materialInfo.iridescenceIor,NdotV,materialInfo.iridescenceThickness,baseColor.rgb);if(materialInfo.iridescenceThickness==0.)materialInfo.iridescenceFactor=0.;
67417
+ vec3 iridescenceFresnel_dielectric=evalIridescence(1.,materialInfo.iridescenceIor,NdotV,materialInfo.iridescenceThickness,materialInfo.f0_dielectric);vec3 iridescenceFresnel_metallic=evalIridescence(1.,materialInfo.iridescenceIor,NdotV,materialInfo.iridescenceThickness,baseColor.rgb);
67418
+ #if defined(X3D_RETROREFLECTION_MATERIAL_EXT)
67419
+ vec3 iridescenceFresnel_dielectric_retro=evalIridescence(1.,materialInfo.iridescenceIor,NdotV_retro,materialInfo.iridescenceThickness,materialInfo.f0_dielectric);vec3 iridescenceFresnel_metallic_retro=evalIridescence(1.,materialInfo.iridescenceIor,NdotV_retro,materialInfo.iridescenceThickness,baseColor.rgb);
67420
+ #endif
67421
+ if(materialInfo.iridescenceThickness==0.)materialInfo.iridescenceFactor=0.;
67345
67422
  #endif
67346
67423
  #endif
67347
67424
  #if defined(X3D_DIFFUSE_TRANSMISSION_MATERIAL_EXT)
@@ -67420,6 +67497,19 @@ l_metal_brdf=metal_fresnel*l_specular_metal;l_dielectric_brdf=mix(l_diffuse,l_sp
67420
67497
  #if defined(X3D_IRIDESCENCE_MATERIAL_EXT)
67421
67498
  l_metal_brdf=mix(l_metal_brdf,l_specular_metal*iridescenceFresnel_metallic,materialInfo.iridescenceFactor);l_dielectric_brdf=mix(l_dielectric_brdf,rgb_mix(l_diffuse,l_specular_dielectric,iridescenceFresnel_dielectric),materialInfo.iridescenceFactor);
67422
67499
  #endif
67500
+ #if defined(X3D_RETROREFLECTION_MATERIAL_EXT)
67501
+ vec3 h_retro=normalize(l+v_retro);float NdotH_retro=clamp(dot(n,h_retro),0.,1.);float VdotH_retro=clamp(dot(v_retro,h_retro),0.,1.);vec3 dielectric_fresnel_retro=F_Schlick(materialInfo.f0_dielectric*materialInfo.specularWeight,materialInfo.f90_dielectric,abs(VdotH_retro));vec3 metal_fresnel_retro=F_Schlick(baseColor.rgb,vec3(1),abs(VdotH_retro));vec3 l_specular_metal_retro;
67502
+ #if defined(X3D_ANISOTROPY_MATERIAL_EXT)
67503
+ l_specular_metal_retro=intensity*NdotL*BRDF_specularGGXAnisotropy(materialInfo.alphaRoughness,materialInfo.anisotropyStrength,n,v_retro,l,h_retro,materialInfo.anisotropicT,materialInfo.anisotropicB);
67504
+ #else
67505
+ l_specular_metal_retro=intensity*NdotL*BRDF_specularGGX(materialInfo.alphaRoughness,NdotL,NdotV_retro,NdotH_retro);
67506
+ #endif
67507
+ vec3 l_specular_dielectric_retro=l_specular_metal_retro;vec3 l_metal_brdf_retro=metal_fresnel_retro*l_specular_metal_retro;vec3 l_dielectric_brdf_retro=mix(l_diffuse,l_specular_dielectric_retro,dielectric_fresnel_retro);
67508
+ #if defined(X3D_IRIDESCENCE_MATERIAL_EXT)
67509
+ l_metal_brdf_retro=mix(l_metal_brdf_retro,l_specular_metal*iridescenceFresnel_metallic_retro,materialInfo.iridescenceFactor);l_dielectric_brdf_retro=mix(l_dielectric_brdf_retro,rgb_mix(l_diffuse,l_specular_dielectric,iridescenceFresnel_dielectric_retro),materialInfo.iridescenceFactor);
67510
+ #endif
67511
+ l_metal_brdf=mix(l_metal_brdf,l_metal_brdf_retro,materialInfo.retroreflectionFactor);l_dielectric_brdf=mix(l_dielectric_brdf,l_dielectric_brdf_retro,materialInfo.retroreflectionFactor);
67512
+ #endif
67423
67513
  #if defined(X3D_CLEARCOAT_MATERIAL_EXT)
67424
67514
  l_clearcoat_brdf=intensity*getPunctualRadianceClearCoat(materialInfo.clearcoatNormal,v,l,h,VdotH,materialInfo.clearcoatF0,materialInfo.clearcoatF90,materialInfo.clearcoatRoughness);
67425
67515
  #endif
@@ -72898,7 +72988,7 @@ const
72898
72988
  _animFrame = Symbol (),
72899
72989
  _previousTime = Symbol (),
72900
72990
  _systemTime = Symbol (),
72901
- X3DBrowserContext_browserTime = Symbol (),
72991
+ _browserTime = Symbol (),
72902
72992
  _cameraTime = Symbol (),
72903
72993
  _collisionTime = Symbol (),
72904
72994
  _displayTime = Symbol (),
@@ -72936,21 +73026,22 @@ function X3DBrowserContext (element)
72936
73026
  for (const browserContext of browserContexts)
72937
73027
  browserContext .call (this, element);
72938
73028
 
72939
- this .addChildObjects (Base_X3DConstants .outputOnly, "initialized", new x_ite_Fields .SFTime (),
72940
- Base_X3DConstants .outputOnly, "shutdown", new x_ite_Fields .SFTime (),
72941
- Base_X3DConstants .outputOnly, "prepareEvents", new x_ite_Fields .SFTime (),
72942
- Base_X3DConstants .outputOnly, "timeEvents", new x_ite_Fields .SFTime (),
72943
- Base_X3DConstants .outputOnly, "cameraEvents", new x_ite_Fields .SFTime (),
72944
- Base_X3DConstants .outputOnly, "sensorEvents", new x_ite_Fields .SFTime (),
72945
- Base_X3DConstants .outputOnly, "displayEvents", new x_ite_Fields .SFTime (),
72946
- Base_X3DConstants .outputOnly, "finishedEvents", new x_ite_Fields .SFTime (),
72947
- 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 ());
72948
73039
 
72949
73040
  this [X3DBrowserContext_tainted] = false;
72950
73041
  this [_previousTime] = 0;
72951
73042
  this [_renderCallback] = this [_traverse] .bind (this);
72952
73043
  this [_systemTime] = new Time_StopWatch ();
72953
- this [X3DBrowserContext_browserTime] = new Time_StopWatch ();
73044
+ this [_browserTime] = new Time_StopWatch ();
72954
73045
  this [_cameraTime] = new Time_StopWatch ();
72955
73046
  this [_collisionTime] = new Time_StopWatch ();
72956
73047
  this [_displayTime] = new Time_StopWatch ();
@@ -72978,6 +73069,10 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
72978
73069
  {
72979
73070
  return this ._prepareEvents;
72980
73071
  },
73072
+ timePrepareEvents ()
73073
+ {
73074
+ return this ._timePrepareEvents;
73075
+ },
72981
73076
  timeEvents ()
72982
73077
  {
72983
73078
  return this ._timeEvents;
@@ -73070,7 +73165,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73070
73165
  // Start
73071
73166
 
73072
73167
  this [_systemTime] .stop ();
73073
- this [X3DBrowserContext_browserTime] .start ();
73168
+ this [_browserTime] .start ();
73074
73169
 
73075
73170
  // Time
73076
73171
 
@@ -73081,6 +73176,9 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73081
73176
  this .addTaintedField (this ._prepareEvents);
73082
73177
  this [X3DBrowserContext_processEvents] ();
73083
73178
 
73179
+ this .addTaintedField (this ._timePrepareEvents);
73180
+ this [X3DBrowserContext_processEvents] ();
73181
+
73084
73182
  this .addTaintedField (this ._timeEvents);
73085
73183
  this [X3DBrowserContext_processEvents] ();
73086
73184
 
@@ -73131,7 +73229,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73131
73229
 
73132
73230
  // Finish
73133
73231
 
73134
- this [X3DBrowserContext_browserTime] .stop ();
73232
+ this [_browserTime] .stop ();
73135
73233
  this [_systemTime] .start ();
73136
73234
  },
73137
73235
  getSystemTime ()
@@ -73140,7 +73238,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73140
73238
  },
73141
73239
  getBrowserTime ()
73142
73240
  {
73143
- return this [X3DBrowserContext_browserTime];
73241
+ return this [_browserTime];
73144
73242
  },
73145
73243
  getCameraTime ()
73146
73244
  {
@@ -87281,7 +87379,7 @@ Object .assign (Object .setPrototypeOf (PhysicalMaterial .prototype, Shape_X3DOn
87281
87379
 
87282
87380
  this .setTransmission (extensionNodes .some (extensionNode => extensionNode .getType () .includes (Base_X3DConstants .TransmissionMaterialExtension)));
87283
87381
 
87284
- this .setVolumeScatter (extensionNodes .some (extensionNode => extensionNode .getType () .includes (Base_X3DConstants .VolumeScatterMaterialExtension)) && extensionNodes .some (extensionNode => extensionNode .getType () .includes (Base_X3DConstants .VolumeMaterialExtension)));
87382
+ this .setVolumeScatter (extensionNodes .some (extensionNode => extensionNode .getType () .includes (Base_X3DConstants .VolumeScatterMaterialExtension)));
87285
87383
 
87286
87384
  this .set_extensionsKey__ ();
87287
87385
  this .set_renderedTextures__ ();
@@ -87813,6 +87911,10 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Sound
87813
87911
  for (const childNode of this .childNodes)
87814
87912
  childNode .getAudioSource () .connect (this .audioDestination);
87815
87913
  },
87914
+ set_start ()
87915
+ {
87916
+ this ._elapsedTime = 0;
87917
+ },
87816
87918
  set_time ()
87817
87919
  {
87818
87920
  this ._elapsedTime = this .getElapsedTime ();
@@ -88066,6 +88168,8 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Sound_X3D
88066
88168
  if (!this .mediaElement)
88067
88169
  return;
88068
88170
 
88171
+ this ._elapsedTime = 0;
88172
+
88069
88173
  this .mediaElement .currentTime = 0;
88070
88174
 
88071
88175
  this .getBrowser () .startAudioElement (this .mediaElement);
@@ -88969,12 +89073,12 @@ Object .defineProperties (BufferAudioSource,
88969
89073
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
88970
89074
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat ()),
88971
89075
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "playbackRate", new x_ite_Fields .SFFloat (1)),
88972
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopStart", new x_ite_Fields .SFTime (0)),
88973
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopEnd", new x_ite_Fields .SFTime (0)),
88974
89076
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
88975
89077
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
88976
89078
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelInterpretation", new x_ite_Fields .SFString ("SPEAKERS")),
88977
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)),
88978
89082
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
88979
89083
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
88980
89084
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
@@ -90012,6 +90116,8 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
90012
90116
 
90013
90117
  this .mediaStreamAudioSourceNode = new MediaStreamAudioSourceNode (audioContext, { mediaStream });
90014
90118
 
90119
+ this ._elapsedTime = 0;
90120
+
90015
90121
  if (this ._isActive .getValue ())
90016
90122
  {
90017
90123
  if (this ._isPaused .getValue () || !this .getLive () .getValue ())
@@ -90083,6 +90189,9 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
90083
90189
  },
90084
90190
  set_time ()
90085
90191
  {
90192
+ if (!this .mediaStreamAudioSourceNode)
90193
+ return;
90194
+
90086
90195
  this ._elapsedTime = this .getElapsedTime ();
90087
90196
  },
90088
90197
  });
@@ -90151,7 +90260,7 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90151
90260
  if (!this .oscillatorNode)
90152
90261
  return;
90153
90262
 
90154
- this .oscillatorNode .detune .value = Math .max (this ._detune .getValue (), 0);
90263
+ this .oscillatorNode .detune .value = this ._detune .getValue ();
90155
90264
  },
90156
90265
  set_frequency__ ()
90157
90266
  {
@@ -90219,12 +90328,15 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90219
90328
 
90220
90329
  this .oscillatorNode = new OscillatorNode (audioContext);
90221
90330
 
90331
+ this .set_gain__ ();
90222
90332
  this .set_detune__ ();
90223
90333
  this .set_frequency__ ();
90224
90334
  this .set_type__ ();
90225
90335
 
90226
90336
  this .oscillatorNode .connect (this .getAudioSource ());
90227
90337
  this .oscillatorNode .start ();
90338
+
90339
+ this ._elapsedTime = 0;
90228
90340
  },
90229
90341
  set_pause ()
90230
90342
  {
@@ -90236,8 +90348,16 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90236
90348
  },
90237
90349
  set_stop ()
90238
90350
  {
90239
- this .oscillatorNode .stop ();
90240
- 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);
90241
90361
  },
90242
90362
  set_time ()
90243
90363
  {
@@ -90398,6 +90518,9 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90398
90518
  },
90399
90519
  setGain (gain, pan = 0.5, rotation = 0)
90400
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
+
90401
90524
  const
90402
90525
  panLeft = 1 - pan ** 2,
90403
90526
  panRight = 1 - (1 - pan) ** 2,
@@ -91276,7 +91399,7 @@ function GifMedia (gif, movieTexture)
91276
91399
  if (!loop && cycle < this .cycle)
91277
91400
  return this .duration;
91278
91401
 
91279
- return (movieTexture ._elapsedTime * playbackRate) % this .duration;
91402
+ return (movieTexture ._elapsedTime .getValue () * playbackRate) % this .duration;
91280
91403
  },
91281
91404
  set: Function .prototype,
91282
91405
  },
@@ -91303,7 +91426,7 @@ function GifMedia (gif, movieTexture)
91303
91426
  {
91304
91427
  get ()
91305
91428
  {
91306
- return Math .floor (movieTexture ._elapsedTime / this .duration);
91429
+ return Math .floor (movieTexture ._elapsedTime .getValue () / this .duration);
91307
91430
  },
91308
91431
  },
91309
91432
  currentFrame:
@@ -91397,7 +91520,7 @@ async function PNGMedia (apng, movieTexture)
91397
91520
  {
91398
91521
  get ()
91399
91522
  {
91400
- return Math .floor (movieTexture ._elapsedTime / this .duration);
91523
+ return Math .floor (movieTexture ._elapsedTime .getValue () / this .duration);
91401
91524
  },
91402
91525
  },
91403
91526
  currentFrame:
@@ -91442,8 +91565,8 @@ const PNGMedia_default_ = PNGMedia;
91442
91565
 
91443
91566
  /* harmony default export */ const Texturing_PNGMedia = (x_ite_Namespace .add ("PNGMedia", PNGMedia_default_));
91444
91567
  ;// ./src/x_ite/Components/Texturing/MovieTexture.js
91445
- /* provided dependency */ var SuperGif = __webpack_require__(627);
91446
- /* provided dependency */ var APNG = __webpack_require__(249);
91568
+ /* provided dependency */ var SuperGif = __webpack_require__(617);
91569
+ /* provided dependency */ var APNG = __webpack_require__(851);
91447
91570
 
91448
91571
 
91449
91572
 
@@ -93394,7 +93517,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93394
93517
  {
93395
93518
  const spinnerText = this .getSplashScreen () .querySelector (".x_ite-private-spinner-text");
93396
93519
 
93397
- spinnerText .textContent = gettext ("Failed loading world.");
93520
+ spinnerText .textContent = gettext("Failed loading world.");
93398
93521
  });
93399
93522
 
93400
93523
  reject (new Error ("Couldn't load X3D file."));
@@ -93710,7 +93833,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93710
93833
  },
93711
93834
  print (... args)
93712
93835
  {
93713
- const string = args .map (String) .join (" ");
93836
+ const string = args .join (" ");
93714
93837
 
93715
93838
  console .log (string);
93716
93839
 
@@ -93719,7 +93842,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93719
93842
  },
93720
93843
  println (... args)
93721
93844
  {
93722
- const string = args .map (String) .join (" ");
93845
+ const string = args .join (" ");
93723
93846
 
93724
93847
  console .log (string);
93725
93848
 
@@ -94087,7 +94210,7 @@ const QuickSort_default_ = QuickSort;
94087
94210
 
94088
94211
  /* harmony default export */ const Algorithms_QuickSort = (x_ite_Namespace .add ("QuickSort", QuickSort_default_));
94089
94212
  ;// ./src/lib/libtess.js
94090
- /* provided dependency */ var libtess_libtess = __webpack_require__(289);
94213
+ /* provided dependency */ var libtess_libtess = __webpack_require__(775);
94091
94214
  const libtess_default_ = libtess_libtess;
94092
94215
  ;
94093
94216