@galacean/engine-xr 0.0.0-experimental-1.2-xr.0 → 0.0.0-experimental-1.3-xr.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.
package/dist/browser.js CHANGED
@@ -526,6 +526,7 @@
526
526
  this._engine = _engine;
527
527
  this._mode = exports.XRSessionMode.None;
528
528
  this._state = exports.XRSessionState.None;
529
+ this._listeners = [];
529
530
  // @ts-ignore
530
531
  this._rhi = _engine._hardwareRenderer;
531
532
  this._raf = requestAnimationFrame.bind(window);
@@ -548,13 +549,12 @@
548
549
  throw new Error("Without session to run.");
549
550
  }
550
551
  platformSession.start();
551
- this._state = exports.XRSessionState.Running;
552
+ this.state = exports.XRSessionState.Running;
552
553
  this._xrManager._onSessionStart();
553
554
  if (!engine.isPaused) {
554
555
  engine.pause();
555
556
  engine.resume();
556
557
  }
557
- engine.dispatch("XRSessionStart");
558
558
  };
559
559
  /**
560
560
  * Stop the session.
@@ -569,13 +569,28 @@
569
569
  rhi._mainFrameBuffer = null;
570
570
  rhi._mainFrameWidth = rhi._mainFrameHeight = 0;
571
571
  platformSession.stop();
572
- this._state = exports.XRSessionState.Paused;
572
+ this.state = exports.XRSessionState.Paused;
573
573
  this._xrManager._onSessionStop();
574
574
  if (!engine.isPaused) {
575
575
  engine.pause();
576
576
  engine.resume();
577
577
  }
578
- engine.dispatch("XRSessionStop");
578
+ };
579
+ /**
580
+ * Add a listening function for session state changes.
581
+ * @param listener - The listening function
582
+ */ _proto.addChangedListener = function addChangedListener(listener) {
583
+ this._listeners.push(listener);
584
+ };
585
+ /**
586
+ * Remove a listening function of session state changes.
587
+ * @param listener - The listening function
588
+ */ _proto.removeChangedListener = function removeChangedListener(listener) {
589
+ var _this = this, listeners = _this._listeners;
590
+ var index = listeners.indexOf(listener);
591
+ if (index >= 0) {
592
+ listeners.splice(index, 1);
593
+ }
579
594
  };
580
595
  /**
581
596
  * @internal
@@ -592,12 +607,11 @@
592
607
  xrManager._platformDevice.requestSession(_this._rhi, mode, platformFeatures).then(function(platformSession) {
593
608
  _this._mode = mode;
594
609
  _this._platformSession = platformSession;
595
- _this._state = exports.XRSessionState.Initialized;
610
+ _this.state = exports.XRSessionState.Initialized;
596
611
  platformSession.setSessionExitCallBack(_this._onSessionExit);
597
612
  platformSession.addEventListener();
598
613
  xrManager._onSessionInit();
599
614
  resolve();
600
- _this._engine.dispatch("XRSessionInit");
601
615
  }, reject);
602
616
  });
603
617
  };
@@ -630,14 +644,11 @@
630
644
  /**
631
645
  * @internal
632
646
  */ _proto._exit = function _exit() {
633
- var _this = this;
634
- var _this1 = this, platformSession = _this1._platformSession;
647
+ var _this = this, platformSession = _this._platformSession;
635
648
  if (!platformSession) {
636
649
  return Promise.reject("Without session to stop.");
637
650
  }
638
- return platformSession.end().then(function() {
639
- _this._engine.dispatch("XRSessionExit");
640
- });
651
+ return platformSession.end();
641
652
  };
642
653
  _proto._onSessionExit = function _onSessionExit() {
643
654
  var _this = this, rhi = _this._rhi, platformSession = _this._platformSession, engine = _this._engine;
@@ -645,7 +656,7 @@
645
656
  rhi._mainFrameWidth = rhi._mainFrameHeight = 0;
646
657
  platformSession.removeEventListener();
647
658
  this._platformSession = null;
648
- this._state = exports.XRSessionState.None;
659
+ this.state = exports.XRSessionState.None;
649
660
  this._xrManager._onSessionExit();
650
661
  if (!engine.isPaused) {
651
662
  engine.pause();
@@ -670,6 +681,15 @@
670
681
  * Return the current session state.
671
682
  */ function get() {
672
683
  return this._state;
684
+ },
685
+ set: /**
686
+ * @internal
687
+ */ function set(value) {
688
+ this._state = value;
689
+ var listeners = this._listeners;
690
+ for(var i = 0, n = listeners.length; i < n; i++){
691
+ listeners[i](value);
692
+ }
673
693
  }
674
694
  },
675
695
  {
@@ -719,15 +739,15 @@
719
739
  if (this.sessionManager._platformSession) {
720
740
  throw new Error("Cannot add feature when the session is initialized.");
721
741
  }
722
- var _this = this, features = _this._features; _this._platformDevice;
723
742
  if (!this._platformDevice.isSupportedFeature(XRManagerExtended._featureMap.get(type))) {
724
743
  throw new Error("The feature is not supported");
725
744
  }
745
+ var features = this.features;
726
746
  for(var i = 0, n = features.length; i < n; i++){
727
747
  if (_instanceof(features[i], type)) throw new Error("The feature has been added");
728
748
  }
729
749
  var feature = _construct(type, [].concat(this, args));
730
- this._features.push(feature);
750
+ features.push(feature);
731
751
  return feature;
732
752
  };
733
753
  /**
@@ -735,7 +755,7 @@
735
755
  * @param type - The type of the feature
736
756
  * @returns The feature which match type
737
757
  */ _proto.getFeature = function getFeature(type) {
738
- var _this = this, features = _this._features;
758
+ var features = this.features;
739
759
  for(var i = 0, n = features.length; i < n; i++){
740
760
  var feature = features[i];
741
761
  if (_instanceof(feature, type)) {
@@ -743,19 +763,6 @@
743
763
  }
744
764
  }
745
765
  };
746
- _proto.getFeatures = function getFeatures(out) {
747
- var _this = this, features = _this._features;
748
- var length = features.length;
749
- if (out) {
750
- out.length = length;
751
- } else {
752
- out = new Array(length);
753
- }
754
- for(var i = 0; i < length; i--){
755
- out[i] = features[i];
756
- }
757
- return out;
758
- };
759
766
  /**
760
767
  * Enter XR immersive mode, when you call this method, it will initialize and display the XR virtual world.
761
768
  * @param sessionMode - The mode of the session
@@ -775,7 +782,7 @@
775
782
  // 1. Check if this xr mode is supported
776
783
  sessionManager.isSupportedMode(sessionMode).then(function() {
777
784
  // 2. Initialize session
778
- sessionManager._initialize(sessionMode, _this._features).then(function() {
785
+ sessionManager._initialize(sessionMode, _this.features).then(function() {
779
786
  autoRun && sessionManager.run();
780
787
  resolve();
781
788
  }, reject);
@@ -796,7 +803,7 @@
796
803
  /**
797
804
  * @internal
798
805
  */ _proto._initialize = function _initialize(engine, xrDevice) {
799
- this._features = [];
806
+ this.features.length = 0;
800
807
  this._platformDevice = xrDevice;
801
808
  this.sessionManager = new XRSessionManager(this, engine);
802
809
  this.inputManager = new XRInputManager(this, engine);
@@ -810,7 +817,7 @@
810
817
  sessionManager._onUpdate();
811
818
  this.inputManager._onUpdate();
812
819
  this.cameraManager._onUpdate();
813
- var _this = this, features = _this._features;
820
+ var features = this.features;
814
821
  for(var i = 0, n = features.length; i < n; i++){
815
822
  var feature = features[i];
816
823
  feature.enabled && feature._onUpdate();
@@ -850,7 +857,7 @@
850
857
  /**
851
858
  * @internal
852
859
  */ _proto._onSessionStop = function _onSessionStop() {
853
- var _this = this, features = _this._features;
860
+ var features = this.features;
854
861
  for(var i = 0, n = features.length; i < n; i++){
855
862
  var feature = features[i];
856
863
  feature.enabled && feature._onSessionStop();
@@ -859,7 +866,7 @@
859
866
  /**
860
867
  * @internal
861
868
  */ _proto._onSessionInit = function _onSessionInit() {
862
- var _this = this, features = _this._features;
869
+ var features = this.features;
863
870
  for(var i = 0, n = features.length; i < n; i++){
864
871
  var feature = features[i];
865
872
  feature.enabled && feature._onSessionInit();
@@ -869,7 +876,7 @@
869
876
  * @internal
870
877
  */ _proto._onSessionStart = function _onSessionStart() {
871
878
  this.cameraManager._onSessionStart();
872
- var _this = this, features = _this._features;
879
+ var features = this.features;
873
880
  for(var i = 0, n = features.length; i < n; i++){
874
881
  var feature = features[i];
875
882
  feature.enabled && feature._onSessionStart();
@@ -879,7 +886,7 @@
879
886
  * @internal
880
887
  */ _proto._onSessionExit = function _onSessionExit() {
881
888
  this.cameraManager._onSessionExit();
882
- var _this = this, features = _this._features;
889
+ var features = this.features;
883
890
  for(var i = 0, n = features.length; i < n; i++){
884
891
  var feature = features[i];
885
892
  feature.enabled && feature._onSessionExit();
@@ -987,10 +994,75 @@
987
994
  }();
988
995
 
989
996
  /**
990
- * The base class of XR tracked object.
991
- */ var XRTracked = function XRTracked() {
992
- /** The pose of the trackable in XR space. */ this.pose = new XRPose();
993
- /** The tracking state of the trackable. */ this.state = exports.XRTrackingState.NotTracking;
997
+ * Enum for the types of hit test that can be performed.
998
+ * Note: currently only supports plane.
999
+ */ exports.TrackableType = void 0;
1000
+ (function(TrackableType) {
1001
+ TrackableType[TrackableType[/** Tracked plane. */ "Plane"] = 0x1] = "Plane";
1002
+ TrackableType[TrackableType[/** All tracked objects. */ "All"] = 0x1] = "All";
1003
+ })(exports.TrackableType || (exports.TrackableType = {}));
1004
+
1005
+ /**
1006
+ * XR hit result.
1007
+ * It is the detection result returned by using XR HitTest feature.
1008
+ */ var XRHitResult = function XRHitResult() {
1009
+ /** The position of the hit point. */ this.point = new engine.Vector3();
1010
+ /** The normal of the hit point. */ this.normal = new engine.Vector3();
1011
+ };
1012
+
1013
+ /******************************************************************************
1014
+ Copyright (c) Microsoft Corporation.
1015
+
1016
+ Permission to use, copy, modify, and/or distribute this software for any
1017
+ purpose with or without fee is hereby granted.
1018
+
1019
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
1020
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1021
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1022
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1023
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1024
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1025
+ PERFORMANCE OF THIS SOFTWARE.
1026
+ ***************************************************************************** */
1027
+
1028
+ function __decorate(decorators, target, key, desc) {
1029
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1030
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1031
+ 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;
1032
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1033
+ }
1034
+
1035
+ function __generator(thisArg, body) {
1036
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
1037
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
1038
+ function verb(n) { return function (v) { return step([n, v]); }; }
1039
+ function step(op) {
1040
+ if (f) throw new TypeError("Generator is already executing.");
1041
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
1042
+ 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;
1043
+ if (y = 0, t) op = [op[0] & 2, t.value];
1044
+ switch (op[0]) {
1045
+ case 0: case 1: t = op; break;
1046
+ case 4: _.label++; return { value: op[1], done: false };
1047
+ case 5: _.label++; y = op[1]; op = [0]; continue;
1048
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
1049
+ default:
1050
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
1051
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
1052
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
1053
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
1054
+ if (t[2]) _.ops.pop();
1055
+ _.trys.pop(); continue;
1056
+ }
1057
+ op = body.call(thisArg, _);
1058
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
1059
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
1060
+ }
1061
+ }
1062
+
1063
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
1064
+ var e = new Error(message);
1065
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
994
1066
  };
995
1067
 
996
1068
  exports.XRFeatureType = void 0;
@@ -1146,50 +1218,6 @@
1146
1218
  XRTrackableFeature._uuid = 0;
1147
1219
  })();
1148
1220
 
1149
- /**
1150
- * Enum for the types of hit test that can be performed.
1151
- * Note: currently only supports plane.
1152
- */ exports.TrackableType = void 0;
1153
- (function(TrackableType) {
1154
- TrackableType[TrackableType[/** Tracked plane. */ "Plane"] = 0x1] = "Plane";
1155
- TrackableType[TrackableType[/** All tracked objects. */ "All"] = 0x1] = "All";
1156
- })(exports.TrackableType || (exports.TrackableType = {}));
1157
-
1158
- /**
1159
- * XR hit result.
1160
- * It is the detection result returned by using XR HitTest feature.
1161
- */ var XRHitResult = function XRHitResult() {
1162
- /** The position of the hit point. */ this.point = new engine.Vector3();
1163
- /** The normal of the hit point. */ this.normal = new engine.Vector3();
1164
- };
1165
-
1166
- /******************************************************************************
1167
- Copyright (c) Microsoft Corporation.
1168
-
1169
- Permission to use, copy, modify, and/or distribute this software for any
1170
- purpose with or without fee is hereby granted.
1171
-
1172
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
1173
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
1174
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
1175
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
1176
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1177
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1178
- PERFORMANCE OF THIS SOFTWARE.
1179
- ***************************************************************************** */
1180
-
1181
- function __decorate(decorators, target, key, desc) {
1182
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1183
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1184
- 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;
1185
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1186
- }
1187
-
1188
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
1189
- var e = new Error(message);
1190
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
1191
- };
1192
-
1193
1221
  /**
1194
1222
  * Enumerates modes of plane in XR.
1195
1223
  */ exports.XRPlaneMode = void 0;
@@ -1220,6 +1248,13 @@
1220
1248
  return XRRequestPlane;
1221
1249
  }(XRRequestTracking);
1222
1250
 
1251
+ /**
1252
+ * The base class of XR tracked object.
1253
+ */ var XRTracked = function XRTracked() {
1254
+ /** The pose of the trackable in XR space. */ this.pose = new XRPose();
1255
+ /** The tracking state of the trackable. */ this.state = exports.XRTrackingState.NotTracking;
1256
+ };
1257
+
1223
1258
  /**
1224
1259
  * The tracked plane in XR space.
1225
1260
  */ var XRTrackedPlane = /*#__PURE__*/ function(XRTracked1) {
@@ -1567,6 +1602,260 @@
1567
1602
  this.physicalWidth = physicalWidth;
1568
1603
  };
1569
1604
 
1605
+ exports.XRReferenceImageDecoder = /*#__PURE__*/ function() {
1606
+ function XRReferenceImageDecoder() {}
1607
+ XRReferenceImageDecoder.decode = function decode(engine, bufferReader) {
1608
+ return new Promise(function(resolve, reject) {
1609
+ var physicalWidth = bufferReader.nextFloat32();
1610
+ bufferReader.nextUint8();
1611
+ var img = new Image();
1612
+ img.onload = function() {
1613
+ resolve(new XRReferenceImage("", img, physicalWidth));
1614
+ };
1615
+ img.src = URL.createObjectURL(new window.Blob([
1616
+ bufferReader.nextImagesData(1)[0]
1617
+ ]));
1618
+ });
1619
+ };
1620
+ return XRReferenceImageDecoder;
1621
+ }();
1622
+ exports.XRReferenceImageDecoder = __decorate([
1623
+ engine.decoder("XRReferenceImage")
1624
+ ], exports.XRReferenceImageDecoder);
1625
+
1626
+ function _extends() {
1627
+ _extends = Object.assign || function assign(target) {
1628
+ for (var i = 1; i < arguments.length; i++) {
1629
+ var source = arguments[i];
1630
+ for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
1631
+ }
1632
+
1633
+ return target;
1634
+ };
1635
+
1636
+ return _extends.apply(this, arguments);
1637
+ }
1638
+
1639
+ exports.XRReferenceImageLoader = /*#__PURE__*/ function(Loader1) {
1640
+ _inherits(XRReferenceImageLoader, Loader1);
1641
+ function XRReferenceImageLoader() {
1642
+ return Loader1.apply(this, arguments);
1643
+ }
1644
+ var _proto = XRReferenceImageLoader.prototype;
1645
+ _proto.load = function load(item, resourceManager) {
1646
+ var _this = this;
1647
+ return new engine.AssetPromise(function(resolve, reject) {
1648
+ _this.request(item.url, _extends({}, item, {
1649
+ type: "arraybuffer"
1650
+ })).then(function(data) {
1651
+ engine.decode(data, resourceManager.engine).then(function(referenceImage) {
1652
+ resolve(referenceImage);
1653
+ });
1654
+ }).catch(reject);
1655
+ });
1656
+ };
1657
+ return XRReferenceImageLoader;
1658
+ }(engine.Loader);
1659
+ exports.XRReferenceImageLoader = __decorate([
1660
+ engine.resourceLoader("XRReferenceImage", [])
1661
+ ], exports.XRReferenceImageLoader);
1662
+
1663
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
1664
+ try {
1665
+ var info = gen[key](arg);
1666
+ var value = info.value;
1667
+ } catch (error) {
1668
+ reject(error);
1669
+ return;
1670
+ }
1671
+ if (info.done) resolve(value);
1672
+ else Promise.resolve(value).then(_next, _throw);
1673
+ }
1674
+ function _async_to_generator(fn) {
1675
+ return function() {
1676
+ var self = this, args = arguments;
1677
+
1678
+ return new Promise(function(resolve, reject) {
1679
+ var gen = fn.apply(self, args);
1680
+
1681
+ function _next(value) {
1682
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
1683
+ }
1684
+
1685
+ function _throw(err) {
1686
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
1687
+ }
1688
+
1689
+ _next(undefined);
1690
+ });
1691
+ };
1692
+ }
1693
+
1694
+ exports.XRSceneExtendParser = /*#__PURE__*/ function() {
1695
+ function XRSceneExtendParser() {}
1696
+ XRSceneExtendParser.parse = function parse(engine$1, context, data) {
1697
+ return _async_to_generator(function() {
1698
+ var xrManager, xr, origin, camera, leftCamera, rightCamera, features, entityMap, cameraManager, i, n, feature, _;
1699
+ return __generator(this, function(_state) {
1700
+ switch(_state.label){
1701
+ case 0:
1702
+ xrManager = engine$1.xrManager;
1703
+ if (!xrManager) {
1704
+ engine.Logger.error("XRManager is not found in the engine.");
1705
+ return [
1706
+ 2
1707
+ ];
1708
+ }
1709
+ xr = data.scene.xr;
1710
+ origin = xr.origin, camera = xr.camera, leftCamera = xr.leftCamera, rightCamera = xr.rightCamera, features = xr.features;
1711
+ entityMap = context.entityMap;
1712
+ origin && (xrManager.origin = entityMap.get(origin));
1713
+ cameraManager = xrManager.cameraManager;
1714
+ setCamera(cameraManager, exports.XRTrackedInputDevice.Camera, entityMap.get(camera));
1715
+ setCamera(cameraManager, exports.XRTrackedInputDevice.LeftCamera, entityMap.get(leftCamera));
1716
+ setCamera(cameraManager, exports.XRTrackedInputDevice.RightCamera, entityMap.get(rightCamera));
1717
+ i = 0, n = features.length;
1718
+ _state.label = 1;
1719
+ case 1:
1720
+ if (!(i < n)) return [
1721
+ 3,
1722
+ 9
1723
+ ];
1724
+ feature = features[i];
1725
+ if (!feature.enable) return [
1726
+ 3,
1727
+ 8
1728
+ ];
1729
+ _ = feature.type;
1730
+ switch(_){
1731
+ case exports.XRFeatureType.ImageTracking:
1732
+ return [
1733
+ 3,
1734
+ 2
1735
+ ];
1736
+ case exports.XRFeatureType.PlaneTracking:
1737
+ return [
1738
+ 3,
1739
+ 4
1740
+ ];
1741
+ case exports.XRFeatureType.AnchorTracking:
1742
+ return [
1743
+ 3,
1744
+ 5
1745
+ ];
1746
+ case exports.XRFeatureType.HitTest:
1747
+ return [
1748
+ 3,
1749
+ 6
1750
+ ];
1751
+ }
1752
+ return [
1753
+ 3,
1754
+ 7
1755
+ ];
1756
+ case 2:
1757
+ return [
1758
+ 4,
1759
+ addImageTracking(engine$1, xrManager, feature)
1760
+ ];
1761
+ case 3:
1762
+ _state.sent();
1763
+ return [
1764
+ 3,
1765
+ 8
1766
+ ];
1767
+ case 4:
1768
+ addPlaneTracking(xrManager, feature);
1769
+ return [
1770
+ 3,
1771
+ 8
1772
+ ];
1773
+ case 5:
1774
+ addAnchorTracking(xrManager, feature);
1775
+ return [
1776
+ 3,
1777
+ 8
1778
+ ];
1779
+ case 6:
1780
+ addHitTest(xrManager);
1781
+ return [
1782
+ 3,
1783
+ 8
1784
+ ];
1785
+ case 7:
1786
+ return [
1787
+ 3,
1788
+ 8
1789
+ ];
1790
+ case 8:
1791
+ i++;
1792
+ return [
1793
+ 3,
1794
+ 1
1795
+ ];
1796
+ case 9:
1797
+ return [
1798
+ 2
1799
+ ];
1800
+ }
1801
+ });
1802
+ })();
1803
+ };
1804
+ return XRSceneExtendParser;
1805
+ }();
1806
+ exports.XRSceneExtendParser = __decorate([
1807
+ engine.registerSceneExtendParser("XR")
1808
+ ], exports.XRSceneExtendParser);
1809
+ function addImageTracking(engine$1, xrManager, schema) {
1810
+ if (!xrManager.isSupportedFeature(exports.XRImageTracking)) {
1811
+ engine.Logger.error("Image Tracking is not supported.");
1812
+ return;
1813
+ }
1814
+ var promises = [];
1815
+ var images = schema.images;
1816
+ var resourceManager = engine$1.resourceManager;
1817
+ for(var i = 0, n = images.length; i < n; i++){
1818
+ // @ts-ignore
1819
+ promises.push(resourceManager.getResourceByRef(images[i]));
1820
+ }
1821
+ return Promise.all(promises).then(function(xrReferenceImages) {
1822
+ xrManager.addFeature(exports.XRImageTracking, xrReferenceImages);
1823
+ });
1824
+ }
1825
+ function addPlaneTracking(xrManager, schema) {
1826
+ if (!xrManager.isSupportedFeature(exports.XRPlaneTracking)) {
1827
+ engine.Logger.error("Plane Tracking is not supported.");
1828
+ return;
1829
+ }
1830
+ xrManager.addFeature(exports.XRPlaneTracking, schema.detectionMode);
1831
+ }
1832
+ function addAnchorTracking(xrManager, schema) {
1833
+ if (!xrManager.isSupportedFeature(exports.XRAnchorTracking)) {
1834
+ engine.Logger.error("Anchor Tracking is not supported.");
1835
+ return;
1836
+ }
1837
+ var anchorTracking = xrManager.addFeature(exports.XRAnchorTracking);
1838
+ var anchors = schema.anchors;
1839
+ for(var i = 0, n = anchors.length; i < n; i++){
1840
+ var anchor = anchors[i];
1841
+ var position = new engine.Vector3().copyFrom(anchor.position);
1842
+ var rotation = new engine.Quaternion().copyFrom(anchor.rotation);
1843
+ anchorTracking.addAnchor(position, rotation);
1844
+ }
1845
+ }
1846
+ function addHitTest(xrManager, schema) {
1847
+ if (!xrManager.isSupportedFeature(exports.XRHitTest)) {
1848
+ engine.Logger.error("Hit Test is not supported.");
1849
+ return;
1850
+ }
1851
+ xrManager.addFeature(exports.XRHitTest);
1852
+ }
1853
+ function setCamera(cameraManager, device, entity) {
1854
+ var _entity;
1855
+ var camera = (_entity = entity) == null ? void 0 : _entity.getComponent(engine.Camera);
1856
+ camera && cameraManager.attachCamera(device, camera);
1857
+ }
1858
+
1570
1859
  exports.XRAnchor = XRAnchor;
1571
1860
  exports.XRCamera = XRCamera;
1572
1861
  exports.XRCameraManager = XRCameraManager;
@@ -1577,8 +1866,6 @@
1577
1866
  exports.XRPose = XRPose;
1578
1867
  exports.XRReferenceImage = XRReferenceImage;
1579
1868
  exports.XRSessionManager = XRSessionManager;
1580
- exports.XRTrackableFeature = XRTrackableFeature;
1581
- exports.XRTracked = XRTracked;
1582
1869
  exports.XRTrackedImage = XRTrackedImage;
1583
1870
  exports.XRTrackedPlane = XRTrackedPlane;
1584
1871