@galacean/engine-xr-webxr 0.0.0-experimental-1.2-xr.0 → 0.0.0-experimental-1.3-xr.2

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.
package/dist/browser.js CHANGED
@@ -574,6 +574,7 @@
574
574
  this._engine = _engine;
575
575
  this._mode = XRSessionMode.None;
576
576
  this._state = XRSessionState.None;
577
+ this._listeners = [];
577
578
  // @ts-ignore
578
579
  this._rhi = _engine._hardwareRenderer;
579
580
  this._raf = requestAnimationFrame.bind(window);
@@ -596,13 +597,12 @@
596
597
  throw new Error("Without session to run.");
597
598
  }
598
599
  platformSession.start();
599
- this._state = XRSessionState.Running;
600
+ this.state = XRSessionState.Running;
600
601
  this._xrManager._onSessionStart();
601
602
  if (!engine.isPaused) {
602
603
  engine.pause();
603
604
  engine.resume();
604
605
  }
605
- engine.dispatch("XRSessionStart");
606
606
  };
607
607
  /**
608
608
  * Stop the session.
@@ -617,13 +617,28 @@
617
617
  rhi._mainFrameBuffer = null;
618
618
  rhi._mainFrameWidth = rhi._mainFrameHeight = 0;
619
619
  platformSession.stop();
620
- this._state = XRSessionState.Paused;
620
+ this.state = XRSessionState.Paused;
621
621
  this._xrManager._onSessionStop();
622
622
  if (!engine.isPaused) {
623
623
  engine.pause();
624
624
  engine.resume();
625
625
  }
626
- engine.dispatch("XRSessionStop");
626
+ };
627
+ /**
628
+ * Add a listening function for session state changes.
629
+ * @param listener - The listening function
630
+ */ _proto.addChangedListener = function addChangedListener(listener) {
631
+ this._listeners.push(listener);
632
+ };
633
+ /**
634
+ * Remove a listening function of session state changes.
635
+ * @param listener - The listening function
636
+ */ _proto.removeChangedListener = function removeChangedListener(listener) {
637
+ var _this = this, listeners = _this._listeners;
638
+ var index = listeners.indexOf(listener);
639
+ if (index >= 0) {
640
+ listeners.splice(index, 1);
641
+ }
627
642
  };
628
643
  /**
629
644
  * @internal
@@ -640,12 +655,11 @@
640
655
  xrManager._platformDevice.requestSession(_this._rhi, mode, platformFeatures).then(function(platformSession) {
641
656
  _this._mode = mode;
642
657
  _this._platformSession = platformSession;
643
- _this._state = XRSessionState.Initialized;
658
+ _this.state = XRSessionState.Initialized;
644
659
  platformSession.setSessionExitCallBack(_this._onSessionExit);
645
660
  platformSession.addEventListener();
646
661
  xrManager._onSessionInit();
647
662
  resolve();
648
- _this._engine.dispatch("XRSessionInit");
649
663
  }, reject);
650
664
  });
651
665
  };
@@ -678,14 +692,11 @@
678
692
  /**
679
693
  * @internal
680
694
  */ _proto._exit = function _exit() {
681
- var _this = this;
682
- var _this1 = this, platformSession = _this1._platformSession;
695
+ var _this = this, platformSession = _this._platformSession;
683
696
  if (!platformSession) {
684
697
  return Promise.reject("Without session to stop.");
685
698
  }
686
- return platformSession.end().then(function() {
687
- _this._engine.dispatch("XRSessionExit");
688
- });
699
+ return platformSession.end();
689
700
  };
690
701
  _proto._onSessionExit = function _onSessionExit() {
691
702
  var _this = this, rhi = _this._rhi, platformSession = _this._platformSession, engine = _this._engine;
@@ -693,7 +704,7 @@
693
704
  rhi._mainFrameWidth = rhi._mainFrameHeight = 0;
694
705
  platformSession.removeEventListener();
695
706
  this._platformSession = null;
696
- this._state = XRSessionState.None;
707
+ this.state = XRSessionState.None;
697
708
  this._xrManager._onSessionExit();
698
709
  if (!engine.isPaused) {
699
710
  engine.pause();
@@ -718,6 +729,15 @@
718
729
  * Return the current session state.
719
730
  */ function get() {
720
731
  return this._state;
732
+ },
733
+ set: /**
734
+ * @internal
735
+ */ function set(value) {
736
+ this._state = value;
737
+ var listeners = this._listeners;
738
+ for(var i = 0, n = listeners.length; i < n; i++){
739
+ listeners[i](value);
740
+ }
721
741
  }
722
742
  },
723
743
  {
@@ -766,16 +786,15 @@
766
786
  if (this.sessionManager._platformSession) {
767
787
  throw new Error("Cannot add feature when the session is initialized.");
768
788
  }
769
- var _this = this, features = _this._features;
770
- _this._platformDevice;
771
789
  if (!this._platformDevice.isSupportedFeature(XRManagerExtended._featureMap.get(type))) {
772
790
  throw new Error("The feature is not supported");
773
791
  }
792
+ var features = this.features;
774
793
  for(var i = 0, n = features.length; i < n; i++){
775
794
  if (_instanceof1(features[i], type)) throw new Error("The feature has been added");
776
795
  }
777
796
  var feature = _construct$1(type, [].concat(this, args));
778
- this._features.push(feature);
797
+ features.push(feature);
779
798
  return feature;
780
799
  };
781
800
  /**
@@ -783,7 +802,7 @@
783
802
  * @param type - The type of the feature
784
803
  * @returns The feature which match type
785
804
  */ _proto.getFeature = function getFeature(type) {
786
- var _this = this, features = _this._features;
805
+ var features = this.features;
787
806
  for(var i = 0, n = features.length; i < n; i++){
788
807
  var feature = features[i];
789
808
  if (_instanceof1(feature, type)) {
@@ -791,19 +810,6 @@
791
810
  }
792
811
  }
793
812
  };
794
- _proto.getFeatures = function getFeatures(out) {
795
- var _this = this, features = _this._features;
796
- var length = features.length;
797
- if (out) {
798
- out.length = length;
799
- } else {
800
- out = new Array(length);
801
- }
802
- for(var i = 0; i < length; i--){
803
- out[i] = features[i];
804
- }
805
- return out;
806
- };
807
813
  /**
808
814
  * Enter XR immersive mode, when you call this method, it will initialize and display the XR virtual world.
809
815
  * @param sessionMode - The mode of the session
@@ -823,7 +829,7 @@
823
829
  // 1. Check if this xr mode is supported
824
830
  sessionManager.isSupportedMode(sessionMode).then(function() {
825
831
  // 2. Initialize session
826
- sessionManager._initialize(sessionMode, _this._features).then(function() {
832
+ sessionManager._initialize(sessionMode, _this.features).then(function() {
827
833
  autoRun && sessionManager.run();
828
834
  resolve();
829
835
  }, reject);
@@ -844,7 +850,7 @@
844
850
  /**
845
851
  * @internal
846
852
  */ _proto._initialize = function _initialize(engine, xrDevice) {
847
- this._features = [];
853
+ this.features.length = 0;
848
854
  this._platformDevice = xrDevice;
849
855
  this.sessionManager = new XRSessionManager(this, engine);
850
856
  this.inputManager = new XRInputManager(this, engine);
@@ -858,7 +864,7 @@
858
864
  sessionManager._onUpdate();
859
865
  this.inputManager._onUpdate();
860
866
  this.cameraManager._onUpdate();
861
- var _this = this, features = _this._features;
867
+ var features = this.features;
862
868
  for(var i = 0, n = features.length; i < n; i++){
863
869
  var feature = features[i];
864
870
  feature.enabled && feature._onUpdate();
@@ -898,7 +904,7 @@
898
904
  /**
899
905
  * @internal
900
906
  */ _proto._onSessionStop = function _onSessionStop() {
901
- var _this = this, features = _this._features;
907
+ var features = this.features;
902
908
  for(var i = 0, n = features.length; i < n; i++){
903
909
  var feature = features[i];
904
910
  feature.enabled && feature._onSessionStop();
@@ -907,7 +913,7 @@
907
913
  /**
908
914
  * @internal
909
915
  */ _proto._onSessionInit = function _onSessionInit() {
910
- var _this = this, features = _this._features;
916
+ var features = this.features;
911
917
  for(var i = 0, n = features.length; i < n; i++){
912
918
  var feature = features[i];
913
919
  feature.enabled && feature._onSessionInit();
@@ -917,7 +923,7 @@
917
923
  * @internal
918
924
  */ _proto._onSessionStart = function _onSessionStart() {
919
925
  this.cameraManager._onSessionStart();
920
- var _this = this, features = _this._features;
926
+ var features = this.features;
921
927
  for(var i = 0, n = features.length; i < n; i++){
922
928
  var feature = features[i];
923
929
  feature.enabled && feature._onSessionStart();
@@ -927,7 +933,7 @@
927
933
  * @internal
928
934
  */ _proto._onSessionExit = function _onSessionExit() {
929
935
  this.cameraManager._onSessionExit();
930
- var _this = this, features = _this._features;
936
+ var features = this.features;
931
937
  for(var i = 0, n = features.length; i < n; i++){
932
938
  var feature = features[i];
933
939
  feature.enabled && feature._onSessionExit();
@@ -1033,10 +1039,137 @@
1033
1039
  return XRFeature;
1034
1040
  }();
1035
1041
  /**
1036
- * The base class of XR tracked object.
1037
- */ var XRTracked = function XRTracked() {
1038
- /** The pose of the trackable in XR space. */ this.pose = new XRPose();
1039
- /** The tracking state of the trackable. */ this.state = XRTrackingState.NotTracking;
1042
+ * Enum for the types of hit test that can be performed.
1043
+ * Note: currently only supports plane.
1044
+ */ var TrackableType;
1045
+ (function(TrackableType) {
1046
+ TrackableType[TrackableType[/** Tracked plane. */ "Plane"] = 0x1] = "Plane";
1047
+ TrackableType[TrackableType[/** All tracked objects. */ "All"] = 0x1] = "All";
1048
+ })(TrackableType || (TrackableType = {}));
1049
+ /**
1050
+ * XR hit result.
1051
+ * It is the detection result returned by using XR HitTest feature.
1052
+ */ var XRHitResult = function XRHitResult() {
1053
+ /** The position of the hit point. */ this.point = new engine.Vector3();
1054
+ /** The normal of the hit point. */ this.normal = new engine.Vector3();
1055
+ };
1056
+ /******************************************************************************
1057
+ Copyright (c) Microsoft Corporation.
1058
+
1059
+ Permission to use, copy, modify, and/or distribute this software for any
1060
+ purpose with or without fee is hereby granted.
1061
+
1062
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
1063
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1064
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1065
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1066
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1067
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1068
+ PERFORMANCE OF THIS SOFTWARE.
1069
+ ***************************************************************************** */ function __decorate(decorators, target, key, desc) {
1070
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1071
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1072
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1073
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1074
+ }
1075
+ function __generator(thisArg, body) {
1076
+ var verb = function verb(n) {
1077
+ return function(v) {
1078
+ return step([
1079
+ n,
1080
+ v
1081
+ ]);
1082
+ };
1083
+ };
1084
+ var step = function step(op) {
1085
+ if (f) throw new TypeError("Generator is already executing.");
1086
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
1087
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
1088
+ if (y = 0, t) op = [
1089
+ op[0] & 2,
1090
+ t.value
1091
+ ];
1092
+ switch(op[0]){
1093
+ case 0:
1094
+ case 1:
1095
+ t = op;
1096
+ break;
1097
+ case 4:
1098
+ _.label++;
1099
+ return {
1100
+ value: op[1],
1101
+ done: false
1102
+ };
1103
+ case 5:
1104
+ _.label++;
1105
+ y = op[1];
1106
+ op = [
1107
+ 0
1108
+ ];
1109
+ continue;
1110
+ case 7:
1111
+ op = _.ops.pop();
1112
+ _.trys.pop();
1113
+ continue;
1114
+ default:
1115
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
1116
+ _ = 0;
1117
+ continue;
1118
+ }
1119
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
1120
+ _.label = op[1];
1121
+ break;
1122
+ }
1123
+ if (op[0] === 6 && _.label < t[1]) {
1124
+ _.label = t[1];
1125
+ t = op;
1126
+ break;
1127
+ }
1128
+ if (t && _.label < t[2]) {
1129
+ _.label = t[2];
1130
+ _.ops.push(op);
1131
+ break;
1132
+ }
1133
+ if (t[2]) _.ops.pop();
1134
+ _.trys.pop();
1135
+ continue;
1136
+ }
1137
+ op = body.call(thisArg, _);
1138
+ } catch (e) {
1139
+ op = [
1140
+ 6,
1141
+ e
1142
+ ];
1143
+ y = 0;
1144
+ } finally{
1145
+ f = t = 0;
1146
+ }
1147
+ if (op[0] & 5) throw op[1];
1148
+ return {
1149
+ value: op[0] ? op[1] : void 0,
1150
+ done: true
1151
+ };
1152
+ };
1153
+ var _ = {
1154
+ label: 0,
1155
+ sent: function sent() {
1156
+ if (t[0] & 1) throw t[1];
1157
+ return t[1];
1158
+ },
1159
+ trys: [],
1160
+ ops: []
1161
+ }, f, y, t, g;
1162
+ return g = {
1163
+ next: verb(0),
1164
+ "throw": verb(1),
1165
+ "return": verb(2)
1166
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
1167
+ return this;
1168
+ }), g;
1169
+ }
1170
+ typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
1171
+ var e = new Error(message);
1172
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
1040
1173
  };
1041
1174
  var XRFeatureType;
1042
1175
  (function(XRFeatureType) {
@@ -1188,44 +1321,6 @@
1188
1321
  (function() {
1189
1322
  XRTrackableFeature._uuid = 0;
1190
1323
  })();
1191
- /**
1192
- * Enum for the types of hit test that can be performed.
1193
- * Note: currently only supports plane.
1194
- */ var TrackableType;
1195
- (function(TrackableType) {
1196
- TrackableType[TrackableType[/** Tracked plane. */ "Plane"] = 0x1] = "Plane";
1197
- TrackableType[TrackableType[/** All tracked objects. */ "All"] = 0x1] = "All";
1198
- })(TrackableType || (TrackableType = {}));
1199
- /**
1200
- * XR hit result.
1201
- * It is the detection result returned by using XR HitTest feature.
1202
- */ var XRHitResult = function XRHitResult() {
1203
- /** The position of the hit point. */ this.point = new engine.Vector3();
1204
- /** The normal of the hit point. */ this.normal = new engine.Vector3();
1205
- };
1206
- /******************************************************************************
1207
- Copyright (c) Microsoft Corporation.
1208
-
1209
- Permission to use, copy, modify, and/or distribute this software for any
1210
- purpose with or without fee is hereby granted.
1211
-
1212
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
1213
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1214
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1215
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1216
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1217
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1218
- PERFORMANCE OF THIS SOFTWARE.
1219
- ***************************************************************************** */ function __decorate(decorators, target, key, desc) {
1220
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1221
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1222
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1223
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1224
- }
1225
- typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
1226
- var e = new Error(message);
1227
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
1228
- };
1229
1324
  /**
1230
1325
  * Enumerates modes of plane in XR.
1231
1326
  */ var XRPlaneMode;
@@ -1253,6 +1348,12 @@
1253
1348
  _inherits(XRRequestPlane, XRRequestTracking1);
1254
1349
  return XRRequestPlane;
1255
1350
  }(XRRequestTracking);
1351
+ /**
1352
+ * The base class of XR tracked object.
1353
+ */ var XRTracked = function XRTracked() {
1354
+ /** The pose of the trackable in XR space. */ this.pose = new XRPose();
1355
+ /** The tracking state of the trackable. */ this.state = XRTrackingState.NotTracking;
1356
+ };
1256
1357
  /**
1257
1358
  * The tracked plane in XR space.
1258
1359
  */ var XRTrackedPlane = /*#__PURE__*/ function(XRTracked1) {
@@ -1420,7 +1521,7 @@
1420
1521
  ], XRHitTest);
1421
1522
  /**
1422
1523
  * The anchor in XR space.
1423
- */ var XRAnchor = /*#__PURE__*/ function(XRTracked1) {
1524
+ */ var XRAnchor$1 = /*#__PURE__*/ function(XRTracked1) {
1424
1525
  var XRAnchor = function XRAnchor() {
1425
1526
  return XRTracked1.apply(this, arguments);
1426
1527
  };
@@ -1490,7 +1591,7 @@
1490
1591
  this._removeAllRequestTrackings();
1491
1592
  };
1492
1593
  _proto._generateTracked = function _generateTracked() {
1493
- var anchor = new XRAnchor();
1594
+ var anchor = new XRAnchor$1();
1494
1595
  anchor.id = XRTrackableFeature._uuid++;
1495
1596
  return anchor;
1496
1597
  };
@@ -1583,6 +1684,256 @@
1583
1684
  XRImageTracking = __decorate([
1584
1685
  registerXRFeature(XRFeatureType.ImageTracking)
1585
1686
  ], XRImageTracking);
1687
+ /**
1688
+ * A reference image is an image to look for in the physical environment.
1689
+ */ var XRReferenceImage = function XRReferenceImage(name, imageSource, physicalWidth) {
1690
+ this.name = name;
1691
+ this.imageSource = imageSource;
1692
+ this.physicalWidth = physicalWidth;
1693
+ };
1694
+ var XRReferenceImageDecoder = /*#__PURE__*/ function() {
1695
+ var XRReferenceImageDecoder = function XRReferenceImageDecoder() {};
1696
+ XRReferenceImageDecoder.decode = function decode(engine, bufferReader) {
1697
+ return new Promise(function(resolve, reject) {
1698
+ var physicalWidth = bufferReader.nextFloat32();
1699
+ bufferReader.nextUint8();
1700
+ var img = new Image();
1701
+ img.onload = function() {
1702
+ resolve(new XRReferenceImage("", img, physicalWidth));
1703
+ };
1704
+ img.src = URL.createObjectURL(new window.Blob([
1705
+ bufferReader.nextImagesData(1)[0]
1706
+ ]));
1707
+ });
1708
+ };
1709
+ return XRReferenceImageDecoder;
1710
+ }();
1711
+ XRReferenceImageDecoder = __decorate([
1712
+ engine.decoder("XRReferenceImage")
1713
+ ], XRReferenceImageDecoder);
1714
+ function _extends() {
1715
+ _extends = Object.assign || function assign(target) {
1716
+ for(var i = 1; i < arguments.length; i++){
1717
+ var source = arguments[i];
1718
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
1719
+ }
1720
+ return target;
1721
+ };
1722
+ return _extends.apply(this, arguments);
1723
+ }
1724
+ var XRReferenceImageLoader = /*#__PURE__*/ function(Loader1) {
1725
+ var XRReferenceImageLoader = function XRReferenceImageLoader() {
1726
+ return Loader1.apply(this, arguments);
1727
+ };
1728
+ _inherits(XRReferenceImageLoader, Loader1);
1729
+ var _proto = XRReferenceImageLoader.prototype;
1730
+ _proto.load = function load(item, resourceManager) {
1731
+ var _this = this;
1732
+ return new engine.AssetPromise(function(resolve, reject) {
1733
+ _this.request(item.url, _extends({}, item, {
1734
+ type: "arraybuffer"
1735
+ })).then(function(data) {
1736
+ engine.decode(data, resourceManager.engine).then(function(referenceImage) {
1737
+ resolve(referenceImage);
1738
+ });
1739
+ }).catch(reject);
1740
+ });
1741
+ };
1742
+ return XRReferenceImageLoader;
1743
+ }(engine.Loader);
1744
+ XRReferenceImageLoader = __decorate([
1745
+ engine.resourceLoader("XRReferenceImage", [])
1746
+ ], XRReferenceImageLoader);
1747
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
1748
+ try {
1749
+ var info = gen[key](arg);
1750
+ var value = info.value;
1751
+ } catch (error) {
1752
+ reject(error);
1753
+ return;
1754
+ }
1755
+ if (info.done) resolve(value);
1756
+ else Promise.resolve(value).then(_next, _throw);
1757
+ }
1758
+ function _async_to_generator(fn) {
1759
+ return function() {
1760
+ var self = this, args = arguments;
1761
+ return new Promise(function(resolve, reject) {
1762
+ var gen = fn.apply(self, args);
1763
+ function _next(value) {
1764
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
1765
+ }
1766
+ function _throw(err) {
1767
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
1768
+ }
1769
+ _next(undefined);
1770
+ });
1771
+ };
1772
+ }
1773
+ var XRSceneExtendParser = /*#__PURE__*/ function() {
1774
+ var XRSceneExtendParser = function XRSceneExtendParser() {};
1775
+ XRSceneExtendParser.parse = function parse(engine$1, context, data) {
1776
+ return _async_to_generator(function() {
1777
+ var xrManager, xr, origin, camera, leftCamera, rightCamera, features, entityMap, cameraManager, i, n, feature, _;
1778
+ return __generator(this, function(_state) {
1779
+ switch(_state.label){
1780
+ case 0:
1781
+ xrManager = engine$1.xrManager;
1782
+ if (!xrManager) {
1783
+ engine.Logger.error("XRManager is not found in the engine.");
1784
+ return [
1785
+ 2
1786
+ ];
1787
+ }
1788
+ xr = data.scene.xr;
1789
+ origin = xr.origin, camera = xr.camera, leftCamera = xr.leftCamera, rightCamera = xr.rightCamera, features = xr.features;
1790
+ entityMap = context.entityMap;
1791
+ origin && (xrManager.origin = entityMap.get(origin));
1792
+ cameraManager = xrManager.cameraManager;
1793
+ setCamera(cameraManager, XRTrackedInputDevice.Camera, entityMap.get(camera));
1794
+ setCamera(cameraManager, XRTrackedInputDevice.LeftCamera, entityMap.get(leftCamera));
1795
+ setCamera(cameraManager, XRTrackedInputDevice.RightCamera, entityMap.get(rightCamera));
1796
+ i = 0, n = features.length;
1797
+ _state.label = 1;
1798
+ case 1:
1799
+ if (!(i < n)) return [
1800
+ 3,
1801
+ 9
1802
+ ];
1803
+ feature = features[i];
1804
+ if (!feature.enable) return [
1805
+ 3,
1806
+ 8
1807
+ ];
1808
+ _ = feature.type;
1809
+ switch(_){
1810
+ case XRFeatureType.ImageTracking:
1811
+ return [
1812
+ 3,
1813
+ 2
1814
+ ];
1815
+ case XRFeatureType.PlaneTracking:
1816
+ return [
1817
+ 3,
1818
+ 4
1819
+ ];
1820
+ case XRFeatureType.AnchorTracking:
1821
+ return [
1822
+ 3,
1823
+ 5
1824
+ ];
1825
+ case XRFeatureType.HitTest:
1826
+ return [
1827
+ 3,
1828
+ 6
1829
+ ];
1830
+ }
1831
+ return [
1832
+ 3,
1833
+ 7
1834
+ ];
1835
+ case 2:
1836
+ return [
1837
+ 4,
1838
+ addImageTracking(engine$1, xrManager, feature)
1839
+ ];
1840
+ case 3:
1841
+ _state.sent();
1842
+ return [
1843
+ 3,
1844
+ 8
1845
+ ];
1846
+ case 4:
1847
+ addPlaneTracking(xrManager, feature);
1848
+ return [
1849
+ 3,
1850
+ 8
1851
+ ];
1852
+ case 5:
1853
+ addAnchorTracking(xrManager, feature);
1854
+ return [
1855
+ 3,
1856
+ 8
1857
+ ];
1858
+ case 6:
1859
+ addHitTest(xrManager);
1860
+ return [
1861
+ 3,
1862
+ 8
1863
+ ];
1864
+ case 7:
1865
+ return [
1866
+ 3,
1867
+ 8
1868
+ ];
1869
+ case 8:
1870
+ i++;
1871
+ return [
1872
+ 3,
1873
+ 1
1874
+ ];
1875
+ case 9:
1876
+ return [
1877
+ 2
1878
+ ];
1879
+ }
1880
+ });
1881
+ })();
1882
+ };
1883
+ return XRSceneExtendParser;
1884
+ }();
1885
+ XRSceneExtendParser = __decorate([
1886
+ engine.registerSceneExtendParser("XR")
1887
+ ], XRSceneExtendParser);
1888
+ function addImageTracking(engine$1, xrManager, schema) {
1889
+ if (!xrManager.isSupportedFeature(XRImageTracking)) {
1890
+ engine.Logger.error("Image Tracking is not supported.");
1891
+ return;
1892
+ }
1893
+ var promises = [];
1894
+ var images = schema.images;
1895
+ var resourceManager = engine$1.resourceManager;
1896
+ for(var i = 0, n = images.length; i < n; i++){
1897
+ // @ts-ignore
1898
+ promises.push(resourceManager.getResourceByRef(images[i]));
1899
+ }
1900
+ return Promise.all(promises).then(function(xrReferenceImages) {
1901
+ xrManager.addFeature(XRImageTracking, xrReferenceImages);
1902
+ });
1903
+ }
1904
+ function addPlaneTracking(xrManager, schema) {
1905
+ if (!xrManager.isSupportedFeature(XRPlaneTracking)) {
1906
+ engine.Logger.error("Plane Tracking is not supported.");
1907
+ return;
1908
+ }
1909
+ xrManager.addFeature(XRPlaneTracking, schema.detectionMode);
1910
+ }
1911
+ function addAnchorTracking(xrManager, schema) {
1912
+ if (!xrManager.isSupportedFeature(XRAnchorTracking)) {
1913
+ engine.Logger.error("Anchor Tracking is not supported.");
1914
+ return;
1915
+ }
1916
+ var anchorTracking = xrManager.addFeature(XRAnchorTracking);
1917
+ var anchors = schema.anchors;
1918
+ for(var i = 0, n = anchors.length; i < n; i++){
1919
+ var anchor = anchors[i];
1920
+ var position = new engine.Vector3().copyFrom(anchor.position);
1921
+ var rotation = new engine.Quaternion().copyFrom(anchor.rotation);
1922
+ anchorTracking.addAnchor(position, rotation);
1923
+ }
1924
+ }
1925
+ function addHitTest(xrManager, schema) {
1926
+ if (!xrManager.isSupportedFeature(XRHitTest)) {
1927
+ engine.Logger.error("Hit Test is not supported.");
1928
+ return;
1929
+ }
1930
+ xrManager.addFeature(XRHitTest);
1931
+ }
1932
+ function setCamera(cameraManager, device, entity) {
1933
+ var _entity;
1934
+ var camera = (_entity = entity) == null ? void 0 : _entity.getComponent(engine.Camera);
1935
+ camera && cameraManager.attachCamera(device, camera);
1936
+ }
1586
1937
 
1587
1938
  function _is_native_reflect_construct() {
1588
1939
  if (typeof Reflect === "undefined" || !Reflect.construct) return false;
@@ -1748,6 +2099,15 @@
1748
2099
  */ MathUtil.degreeToRadian = function degreeToRadian(d) {
1749
2100
  return d * MathUtil.degreeToRadFactor;
1750
2101
  };
2102
+ /**
2103
+ * Linearly interpolate between two values
2104
+ * @param start - Specify the start of the range in which to interpolate
2105
+ * @param end - Specify the end of the range in which to interpolate
2106
+ * @param t - The blend amount where 0 returns start and 1 end
2107
+ * @returns The result of linear blending between start and end
2108
+ */ MathUtil.lerp = function lerp(start, end, t) {
2109
+ return start + (end - start) * t;
2110
+ };
1751
2111
  return MathUtil;
1752
2112
  }();
1753
2113
  (function() {
@@ -6128,14 +6488,12 @@
6128
6488
  switch(type){
6129
6489
  case XRFeatureType.HitTest:
6130
6490
  case XRFeatureType.PlaneTracking:
6131
- // @ts-ignore
6132
- return !!window.XRPlane;
6491
+ return typeof XRPlane !== "undefined";
6133
6492
  case XRFeatureType.AnchorTracking:
6134
- // @ts-ignore
6135
- return !!window.XRAnchor;
6493
+ return typeof XRAnchor !== "undefined";
6136
6494
  case XRFeatureType.ImageTracking:
6137
6495
  // @ts-ignore
6138
- return !!window.XRImageTrackingResult;
6496
+ return typeof XRImageTrackingResult !== "undefined";
6139
6497
  }
6140
6498
  };
6141
6499
  _proto.createPlatformFeature = function createPlatformFeature(type) {