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