@galacean/engine-xr 1.3.25 → 1.3.27

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.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@galacean/engine")):"function"==typeof define&&define.amd?define(["exports","@galacean/engine"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Galacean=e.Galacean||{},e.Galacean.XR={}),e.Galacean)}(this,function(e,t){"use strict";function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function r(e,t,a){return(r=!function(){if("undefined"==typeof Reflect||!Reflect.construct||Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}()?function(e,t,r){var a=[null];a.push.apply(a,t);var i=new(Function.bind.apply(e,a));return r&&n(i,r.prototype),i}:Reflect.construct).apply(null,arguments)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e}function o(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}function s(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}e.XRTrackedInputDevice=void 0,(c=e.XRTrackedInputDevice||(e.XRTrackedInputDevice={}))[c.Controller=0]="Controller",c[c.LeftController=1]="LeftController",c[c.RightController=2]="RightController",c[c.Camera=3]="Camera",c[c.LeftCamera=4]="LeftCamera",c[c.RightCamera=5]="RightCamera",c[c.LeftHand=6]="LeftHand",c[c.RightHand=7]="RightHand",e.XRSessionState=void 0,(u=e.XRSessionState||(e.XRSessionState={}))[u.None=0]="None",u[u.Initializing=1]="Initializing",u[u.Initialized=2]="Initialized",u[u.Running=3]="Running",u[u.Paused=4]="Paused";var c,u,h,f,p,l,d,g,_,m,v,R=function(){function n(e){this._xrManager=e}var r=n.prototype;return r.attachCamera=function(n,r){var a=this._xrManager.inputManager.getTrackedDevice(n),i=a._camera;if(i!==r){switch(i&&(i._cameraType=t.CameraType.Normal),n){case e.XRTrackedInputDevice.Camera:r._cameraType=t.CameraType.XRCenterCamera;break;case e.XRTrackedInputDevice.LeftCamera:r._cameraType=t.CameraType.XRLeftCamera;break;case e.XRTrackedInputDevice.RightCamera:r._cameraType=t.CameraType.XRRightCamera}a._camera=r}},r.detachCamera=function(e){var n=this._xrManager.inputManager.getTrackedDevice(e),r=n._camera;return r&&(r._cameraType=t.CameraType.Normal),n._camera=null,r},r._onSessionStart=function(){},r._onUpdate=function(){for(var e=this._xrManager.inputManager._cameras,n=0,r=e.length;n<r;n++){var a=e[n],i=a._camera;if(i){var o=i.entity.transform,s=a.pose;o.position=s.position,o.rotationQuaternion=s.rotation;var c=i.viewport,u=a.viewport,h=u.x,f=u.y,p=u.width,l=u.height;h===c.x&&f===c.y&&p===c.z&&l===c.w||(i.viewport=c.set(h,f,p,l)),t.Matrix.equals(i.projectionMatrix,a.projectionMatrix)||(i.projectionMatrix=a.projectionMatrix)}}},r._onSessionExit=function(){},r._getIgnoreClearFlags=function(n){return n!==t.CameraType.XRCenterCamera?t.CameraClearFlags.None:this._xrManager.sessionManager.state===e.XRSessionState.Running?t.CameraClearFlags.Color:t.CameraClearFlags.None},r._onDestroy=function(){},i(n,[{key:"fixedFoveation",get:function(){var e=this._xrManager.sessionManager._platformSession;if(e)return e.getFixedFoveation();throw Error("XR session is not available.")},set:function(e){var t=this._xrManager.sessionManager._platformSession;if(t)t.setFixedFoveation(e);else throw Error("XR session is not available.")}}]),n}(),S=function(){this.position=new t.Vector3,this.rotation=new t.Quaternion,this.matrix=new t.Matrix,this.inverseMatrix=new t.Matrix};e.XRTrackingState=void 0,(h=e.XRTrackingState||(e.XRTrackingState={}))[h.NotTracking=0]="NotTracking",h[h.Tracking=1]="Tracking",h[h.TrackingLost=2]="TrackingLost";var T=function(t){this.type=t,this.trackingState=e.XRTrackingState.NotTracking},y=function(e){function n(){var n;return n=e.apply(this,arguments)||this,n.pose=new S,n.viewport=new t.Rect,n.projectionMatrix=new t.Matrix,n}return o(n,e),n}(T);e.XRInputButton=void 0,(f=e.XRInputButton||(e.XRInputButton={}))[f.None=0]="None",f[f.Select=1]="Select",f[f.Trigger=1]="Trigger",f[f.Squeeze=2]="Squeeze",f[f.TouchPad=4]="TouchPad",f[f.AButton=8]="AButton",f[f.BButton=16]="BButton";var k=function(t){function n(){var n;return n=t.apply(this,arguments)||this,n.gripPose=new S,n.targetRayPose=new S,n.pressedButtons=e.XRInputButton.None,n.down=e.XRInputButton.None,n.up=e.XRInputButton.None,n}o(n,t);var r=n.prototype;return r.isButtonDown=function(e){return(this.down&e)!=0},r.isButtonUp=function(e){return(this.up&e)!=0},r.isButtonHeldDown=function(e){return(this.pressedButtons&e)!=0},n}(T);e.XRInputEventType=void 0,(p=e.XRInputEventType||(e.XRInputEventType={}))[p.SelectStart=0]="SelectStart",p[p.Select=1]="Select",p[p.SelectEnd=2]="SelectEnd",p[p.SqueezeStart=3]="SqueezeStart",p[p.Squeeze=4]="Squeeze",p[p.SqueezeEnd=5]="SqueezeEnd",e.XRTargetRayMode=void 0,(l=e.XRTargetRayMode||(e.XRTargetRayMode={}))[l.Gaze=0]="Gaze",l[l.TrackedPointer=1]="TrackedPointer",l[l.Screen=2]="Screen";var X=function(){function n(n,r){this._xrManager=n,this._engine=r,this._cameras=[],this._controllers=[],this._added=[],this._removed=[],this._trackedDevices=[],this._statusSnapshot=[],this._listeners=new t.SafeLoopArray;for(var a=this._trackedDevices,i=this._controllers,o=this._cameras,s=0;s<6;s++)switch(s){case e.XRTrackedInputDevice.Camera:case e.XRTrackedInputDevice.LeftCamera:case e.XRTrackedInputDevice.RightCamera:o.push(a[s]=new y(s));break;case e.XRTrackedInputDevice.Controller:case e.XRTrackedInputDevice.LeftController:case e.XRTrackedInputDevice.RightController:i.push(a[s]=new k(s))}this._statusSnapshot.fill(e.XRTrackingState.NotTracking,0,a.length)}var r=n.prototype;return r.getTrackedDevice=function(e){return this._trackedDevices[e]},r.addTrackedDeviceChangedListener=function(e){this._listeners.push({fn:e})},r.removeTrackedDeviceChangedListener=function(e){this._listeners.findAndRemove(function(t){return t.fn===e&&(t.destroyed=!0)})},r._onUpdate=function(){var t=this._added,n=this._removed,r=this._statusSnapshot,a=this._trackedDevices,i=this._controllers;t.length=n.length=0;for(var o=0,s=i.length;o<s;o++){var c=i[o];c.down=c.up=0}for(var u=this._xrManager.sessionManager._platformSession,h=u.events,f=0,p=h.length;f<p;f++)this._handleEvent(h[f]);u.resetEvents(),u.frame.updateInputs(a);for(var l=0,d=a.length;l<d;l++){var g=a[l];if(g){var _=g.trackingState;r[l]===e.XRTrackingState.Tracking?_!==e.XRTrackingState.Tracking&&n.push(g):_===e.XRTrackingState.Tracking&&t.push(g),r[l]=_}}if(t.length>0||n.length>0)for(var m=this._listeners.getLoopArray(),v=0,R=m.length;v<R;v++){var S=m[v];S.destroyed||S.fn(t,n)}},r._onDestroy=function(){this._listeners.findAndRemove(function(e){return e.destroyed=!0})},r._handleEvent=function(t){var n=this._trackedDevices[t.input];switch(t.targetRayMode){case e.XRTargetRayMode.TrackedPointer:switch(t.type){case e.XRInputEventType.SelectStart:n.down|=e.XRInputButton.Select,n.pressedButtons|=e.XRInputButton.Select;break;case e.XRInputEventType.SelectEnd:n.up|=e.XRInputButton.Select,n.pressedButtons&=~e.XRInputButton.Select;break;case e.XRInputEventType.SqueezeStart:n.down|=e.XRInputButton.Squeeze,n.pressedButtons|=e.XRInputButton.Squeeze;break;case e.XRInputEventType.SqueezeEnd:n.up|=e.XRInputButton.Squeeze,n.pressedButtons&=~e.XRInputButton.Squeeze}break;case e.XRTargetRayMode.Screen:var r=this._engine,a=r.inputManager._pointerManager._target,i=r.canvas._webCanvas,o=i.clientWidth,s=i.clientHeight,c=o*(t.x+1)*.5,u=s*(t.y+1)*.5;switch(t.type){case e.XRInputEventType.SelectStart:a.dispatchEvent(this._makeUpPointerEvent("pointerdown",t.id,c,u));break;case e.XRInputEventType.Select:a.dispatchEvent(this._makeUpPointerEvent("pointermove",t.id,c,u));break;case e.XRInputEventType.SelectEnd:a.dispatchEvent(this._makeUpPointerEvent("pointerup",t.id,c,u)),a.dispatchEvent(this._makeUpPointerEvent("pointerleave",t.id,c,u))}}},r._makeUpPointerEvent=function(e,t,n,r){var a={pointerId:t,clientX:n,clientY:r};switch(e){case"pointerdown":a.button=0,a.buttons=1;break;case"pointermove":a.button=-1,a.buttons=1;break;case"pointerup":case"pointerleave":a.button=0,a.buttons=0}return new PointerEvent(e,a)},n}();e.XRSessionMode=void 0,(d=e.XRSessionMode||(e.XRSessionMode={}))[d.None=0]="None",d[d.AR=1]="AR",d[d.VR=2]="VR";var w=function(){function n(n,r){this._xrManager=n,this._engine=r,this._mode=e.XRSessionMode.None,this._state=e.XRSessionState.None,this._listeners=new t.SafeLoopArray,this._rhi=r._hardwareRenderer,this._raf=requestAnimationFrame.bind(window),this._caf=cancelAnimationFrame.bind(window),this._onSessionExit=this._onSessionExit.bind(this)}var r=n.prototype;return r.isSupportedMode=function(e){return this._xrManager._platformDevice.isSupportedSessionMode(e)},r.run=function(){var t=this._platformSession,n=this._engine;if(!t)throw Error("Without session to run.");t.start(),this._setState(e.XRSessionState.Running),this._xrManager._onSessionStart(),n.isPaused||(n.pause(),n.resume())},r.stop=function(){var t=this._platformSession,n=this._engine,r=this._rhi;if(!t)throw Error("Without session to stop.");if(this._state!==e.XRSessionState.Running)throw Error("Session is not running.");r._mainFrameBuffer=null,r._mainFrameWidth=r._mainFrameHeight=0,t.stop(),this._setState(e.XRSessionState.Paused),this._xrManager._onSessionStop(),n.isPaused||(n.pause(),n.resume())},r.addStateChangedListener=function(e){this._listeners.push({fn:e})},r.removeStateChangedListener=function(e){this._listeners.findAndRemove(function(t){return t.fn===e&&(t.destroyed=!0)})},r._setState=function(e){this._state=e;for(var t=this._listeners.getLoopArray(),n=0,r=t.length;n<r;n++){var a=t[n];a.destroyed||a.fn(e)}},r._initialize=function(t,n){var r=this;return new Promise(function(a,i){for(var o=r._xrManager,s=[],c=0,u=n.length;c<u;c++){var h=n[c]._platformFeature;h&&s.push(h)}o._platformDevice.requestSession(r._rhi,t,s).then(function(n){r._mode=t,r._platformSession=n,r._setState(e.XRSessionState.Initialized),n.setSessionExitCallBack(r._onSessionExit),n.addEventListener(),o._onSessionInit(),a()},i)})},r._onUpdate=function(){var e=this._rhi,t=this._platformSession;e._mainFrameBuffer=t.framebuffer,e._mainFrameWidth=t.framebufferWidth,e._mainFrameHeight=t.framebufferHeight},r._getRequestAnimationFrame=function(){return this._state===e.XRSessionState.Running?this._platformSession.requestAnimationFrame:this._raf},r._getCancelAnimationFrame=function(){return this._state===e.XRSessionState.Running?this._platformSession.cancelAnimationFrame:this._caf},r._exit=function(){var e=this._platformSession;return e?e.end():Promise.reject("Without session to stop.")},r._onSessionExit=function(){var t=this._rhi,n=this._platformSession,r=this._engine;t._mainFrameBuffer=null,t._mainFrameWidth=t._mainFrameHeight=0,n.removeEventListener(),this._platformSession=null,this._setState(e.XRSessionState.None),this._xrManager._onSessionExit(),r.isPaused||(r.pause(),r.resume())},r._onDestroy=function(){this._listeners.findAndRemove(function(e){return e.destroyed=!0}),this._raf=this._caf=null},i(n,[{key:"mode",get:function(){return this._mode}},{key:"state",get:function(){return this._state}},{key:"supportedFrameRate",get:function(){return this._platformSession.supportedFrameRates}},{key:"frameRate",get:function(){return this._platformSession.frameRate}}]),n}(),M=function(t){function n(){return t.apply(this,arguments)}o(n,t);var a=n.prototype;return a.isSupportedFeature=function(e){return this._platformDevice.isSupportedFeature(n._featureMap.get(e))},a.addFeature=function(e){for(var t=arguments.length,a=Array(t>1?t-1:0),i=1;i<t;i++)a[i-1]=arguments[i];if(this.sessionManager._platformSession)throw Error("Cannot add feature when the session is initialized.");if(!this._platformDevice.isSupportedFeature(n._featureMap.get(e)))throw Error("The feature is not supported");for(var o=this.features,c=0,u=o.length;c<u;c++)if(s(o[c],e))throw Error("The feature has been added");var h=r(e,[].concat(this,a));return o.push(h),h},a.getFeature=function(e){for(var t=this.features,n=0,r=t.length;n<r;n++){var a=t[n];if(s(a,e))return a}},a.enterXR=function(t,n){void 0===n&&(n=!0);var r=this,a=this.sessionManager;if(a._platformSession)throw Error("Please exit XR immersive mode first.");if(!this._origin)throw Error("Please set origin before enter XR.");return new Promise(function(i,o){a.isSupportedMode(t).then(function(){a._setState(e.XRSessionState.Initializing),a._initialize(t,r.features).then(function(){n&&a.run(),i()},o)},o)})},a.exitXR=function(){var e=this;return new Promise(function(t,n){e.sessionManager._exit().then(function(){t()},n)})},a._initialize=function(e,t){this._features=[],this._platformDevice=t,this.sessionManager=new w(this,e),this.inputManager=new X(this,e),this.cameraManager=new R(this)},a._update=function(){var t=this.sessionManager;if(t.state===e.XRSessionState.Running){t._onUpdate(),this.inputManager._onUpdate(),this.cameraManager._onUpdate();for(var n=this.features,r=0,a=n.length;r<a;r++){var i=n[r];i.enabled&&i._onUpdate()}}},a._destroy=function(){var e=this;this.sessionManager._platformSession?this.exitXR().then(function(){e.sessionManager._onDestroy(),e.inputManager._onDestroy(),e.cameraManager._onDestroy()}):(this.sessionManager._onDestroy(),this.inputManager._onDestroy(),this.cameraManager._onDestroy())},a._getRequestAnimationFrame=function(){return this.sessionManager._getRequestAnimationFrame()},a._getCancelAnimationFrame=function(){return this.sessionManager._getCancelAnimationFrame()},a._getCameraIgnoreClearFlags=function(e){return this.cameraManager._getIgnoreClearFlags(e)},a._onSessionStop=function(){for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionStop()}},a._onSessionInit=function(){for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionInit()}},a._onSessionStart=function(){this.cameraManager._onSessionStart();for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionStart()}},a._onSessionExit=function(){this.cameraManager._onSessionExit();for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionExit(),r._onDestroy()}e.length=0},i(n,[{key:"features",get:function(){return this._features}},{key:"origin",get:function(){return this._origin},set:function(e){if(this.sessionManager._platformSession)throw Error("Cannot set origin when the session is initialized.");this._origin=e}}]),n}(t.XRManager);function b(e){return function(t){M._featureMap.set(t,e)}}M._featureMap=new Map,function(e,t){t.forEach(function(t){Object.getOwnPropertyNames(t.prototype).forEach(function(n){Object.defineProperty(e.prototype,n,Object.getOwnPropertyDescriptor(t.prototype,n)||Object.create(null))})})}(t.XRManager,[M]);var I=function(){function e(e,t){for(var n,r=arguments.length,a=Array(r>2?r-2:0),i=2;i<r;i++)a[i-2]=arguments[i];this._xrManager=e,this._type=t,this._enabled=!0,this._platformFeature=(n=e._platformDevice).createPlatformFeature.apply(n,[].concat(t,a)),this._onEnable()}var t=e.prototype;return t._onEnable=function(){},t._onDisable=function(){},t._onUpdate=function(){},t._onSessionInit=function(){},t._onSessionStart=function(){},t._onSessionStop=function(){},t._onSessionExit=function(){},t._onDestroy=function(){},i(e,[{key:"enabled",get:function(){return this._enabled},set:function(e){this.enabled!==e&&(this._enabled=e,e?this._onEnable():this._onDisable())}}]),e}();e.XRFeatureType=void 0,(g=e.XRFeatureType||(e.XRFeatureType={}))[g.AnchorTracking=0]="AnchorTracking",g[g.ImageTracking=1]="ImageTracking",g[g.PlaneTracking=2]="PlaneTracking",g[g.HitTest=3]="HitTest",e.XRRequestTrackingState=void 0,(_=e.XRRequestTrackingState||(e.XRRequestTrackingState={}))[_.None=0]="None",_[_.Submitted=1]="Submitted",_[_.Resolved=2]="Resolved",_[_.Rejected=3]="Rejected",_[_.Destroyed=4]="Destroyed",_[_.WaitingDestroy=5]="WaitingDestroy";var E=function(n){function r(){var e;return e=n.apply(this,arguments)||this,e._requestTrackings=[],e._tracked=[],e._added=[],e._updated=[],e._removed=[],e._statusSnapshot={},e._listeners=new t.SafeLoopArray,e}o(r,n);var a=r.prototype;return a.addChangedListener=function(e){this._listeners.push({fn:e})},a.removeChangedListener=function(e){this._listeners.findAndRemove(function(t){return t.fn===e&&(t.destroyed=!0)})},a._onUpdate=function(){var t=this._xrManager.sessionManager._platformSession,n=t.frame,r=this._platformFeature,a=this._requestTrackings,i=this._statusSnapshot,o=this._tracked,s=this._added,c=this._updated,u=this._removed;if(n&&a.length&&r.checkAvailable(t,n,a)){s.length=c.length=u.length=0,r.getTrackedResult(t,n,a,this._generateTracked);for(var h=0,f=a.length;h<f;h++){var p=a[h];switch(p.state){case e.XRRequestTrackingState.Destroyed:for(var l=p.tracked,d=0,g=l.length;d<g;d++){var _=l[d],m=_.id;i[m]===e.XRTrackingState.Tracking&&(u.push(_),o.splice(o.indexOf(_),1)),i[m]=e.XRTrackingState.NotTracking}break;case e.XRRequestTrackingState.Resolved:for(var v=p.tracked,R=0,S=v.length;R<S;R++){var T=v[R],y=T.id;T.state===e.XRTrackingState.Tracking?i[y]===e.XRTrackingState.Tracking?c.push(T):(s.push(T),i[y]=e.XRTrackingState.Tracking,o.push(T)):(i[y]===e.XRTrackingState.Tracking&&(u.push(T),o.splice(o.indexOf(T),1)),i[y]=T.state)}}}for(var k=a.length-1;k>=0;k--)a[k].state===e.XRRequestTrackingState.Destroyed&&a.splice(k,1);if(s.length>0||c.length>0||u.length>0)for(var X=this._listeners.getLoopArray(),w=0,M=X.length;w<M;w++){var b=X[w];b.destroyed||b.fn(s,c,u)}}},a._onSessionStop=function(){this._added.length=this._updated.length=this._removed.length=0},a._onSessionExit=function(){this._requestTrackings.length=this._tracked.length=this._added.length=this._updated.length=this._removed.length=0,this._listeners.findAndRemove(function(e){return e.destroyed=!0})},a._addRequestTracking=function(t){var n=this._platformFeature;if(this._xrManager.sessionManager._platformSession&&!n.canModifyRequestTrackingAfterInit)throw Error(e.XRFeatureType[this._type]+" request tracking cannot be modified after initialization.");this._requestTrackings.push(t),n.onAddRequestTracking(t)},a._removeRequestTracking=function(t){var n=this._platformFeature;if(this._xrManager.sessionManager._platformSession&&!n.canModifyRequestTrackingAfterInit)throw Error(e.XRFeatureType[this._type]+" request tracking cannot be modified after initialization.");n.onDelRequestTracking(t)},a._removeAllRequestTrackings=function(){var t=this._platformFeature;if(this._xrManager.sessionManager._platformSession&&!t.canModifyRequestTrackingAfterInit)throw Error(e.XRFeatureType[this._type]+" request tracking cannot be modified after initialization.");for(var n=this._requestTrackings,r=0,a=n.length;r<a;r++)t.onDelRequestTracking(n[r])},r}(I);E._uuid=0;var P=function(){this.pose=new S,this.state=e.XRTrackingState.NotTracking};e.TrackableType=void 0,(m=e.TrackableType||(e.TrackableType={}))[m.Plane=1]="Plane",m[m.All=1]="All";var x=function(){this.point=new t.Vector3,this.normal=new t.Vector3};function C(e,t,n,r){var a,i=arguments.length,o=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(o=(i<3?a(o):i>3?a(t,n,o):a(t,n))||o);return i>3&&o&&Object.defineProperty(t,n,o),o}"function"==typeof SuppressedError&&SuppressedError,e.XRPlaneMode=void 0,(v=e.XRPlaneMode||(e.XRPlaneMode={}))[v.None=0]="None",v[v.Horizontal=1]="Horizontal",v[v.Vertical=2]="Vertical",v[v.EveryThing=3]="EveryThing";var F=function(){this.state=e.XRRequestTrackingState.None,this.tracked=[]},D=function(e){function t(t){var n;return(n=e.call(this)||this).detectionMode=t,n}return o(t,e),t}(F),q=function(e){function t(){var t;return t=e.apply(this,arguments)||this,t.polygon=[],t.attributesDirty=!1,t}return o(t,e),t}(P);e.XRPlaneTracking=function(t){function n(n,r){var a;return void 0===r&&(r=e.XRPlaneMode.EveryThing),(a=t.call(this,n,e.XRFeatureType.PlaneTracking,r)||this)._addRequestTracking(new D(r)),a}return o(n,t),n.prototype._generateTracked=function(){var e=new q;return e.id=E._uuid++,e},i(n,[{key:"detectionMode",get:function(){return this._requestTrackings[0].detectionMode}},{key:"trackedPlanes",get:function(){return this._tracked}}]),n}(E),e.XRPlaneTracking=C([b(e.XRFeatureType.PlaneTracking)],e.XRPlaneTracking),e.XRHitTest=function(n){function r(r){var a;return(a=n.call(this,r,e.XRFeatureType.HitTest)||this)._tempRay=new t.Ray,a._tempPlane=new t.Plane,a._tempVec2=new t.Vector2,a._tempVec30=new t.Vector3,a._tempVec31=new t.Vector3,a._tempVec32=new t.Vector3,a._tempVec33=new t.Vector3,a._tempVec34=new t.Vector3,a._tempVec35=new t.Vector3,a}o(r,n);var a=r.prototype;return a.hitTest=function(t,n){var r=[];return n&e.TrackableType.Plane&&this._hitTestPlane(t,r),r},a.screenHitTest=function(t,n,r){var a=this._xrManager;if(a.sessionManager.mode!==e.XRSessionMode.AR)throw Error("Only AR mode supports using screen ray hit test.");var i=a.inputManager.getTrackedDevice(e.XRTrackedInputDevice.Camera)._camera;if(!i)throw Error("No camera available.");var o=i.screenPointToRay(this._tempVec2.set(t,n),this._tempRay);return this.hitTest(o,r)},a._hitTestPlane=function(n,r){var a=this._xrManager.getFeature(e.XRPlaneTracking);if(!a||!a.enabled)throw Error("The plane estimation function needs to be turned on for plane hit test.");for(var i=this._tempPlane,o=this._tempVec30,s=this._tempVec31,c=this._tempVec32,u=a.trackedPlanes,h=0,f=u.length;h<f;h++){var p=u[h];o.set(0,1,0).transformNormal(p.pose.matrix),i.normal.copyFrom(o),i.distance=-t.Vector3.dot(o,p.pose.position);var l=n.intersectPlane(i);if(l>=0&&(n.getPoint(l,s),t.Vector3.transformToVec3(s,p.pose.inverseMatrix,c),this._checkPointerWithinPlane(c,p))){var d=new x;d.point.copyFrom(s),d.normal.copyFrom(o),d.distance=l,d.trackedObject=p,d.trackableType=e.TrackableType.Plane,r.push(d)}}},a._checkPointerWithinPlane=function(e,n){for(var r=this._tempVec33,a=this._tempVec34,i=this._tempVec35,o=n.polygon,s=o.length,c=o[s-1],u=0,h=0;h<s;h++){var f=o[h];t.Vector3.subtract(f,c,r),t.Vector3.subtract(e,c,a),t.Vector3.cross(r,a,i);var p=i.y;if(0===u)p>0?u=1:p<0&&(u=-1);else if(p>0&&u<0||p<0&&u>0)return!1;c=f}return!0},r}(I),e.XRHitTest=C([b(e.XRFeatureType.HitTest)],e.XRHitTest);var A=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(P),B=function(e){function t(t,n){var r;return(r=e.call(this)||this).position=t,r.rotation=n,r}return o(t,e),t}(F);e.XRAnchorTracking=function(t){function n(n){var r;return(r=t.call(this,n,e.XRFeatureType.AnchorTracking)||this)._anchors=[],r}o(n,t);var r=n.prototype;return r.addAnchor=function(e,t){if(!this._enabled)throw Error("Cannot add an anchor from a disabled anchor manager.");var n=this._anchors,r=new B(e,t),a=this._generateTracked();return r.tracked[0]=a,this._addRequestTracking(r),n.push(a),a},r.removeAnchor=function(e){if(!this._enabled)throw Error("Cannot remove an anchor from a disabled anchor manager.");for(var t=this._requestTrackings,n=this._anchors,r=0,a=t.length;r<a;r++){var i=t[r];if(i.tracked[0]===e){this._removeRequestTracking(i);break}}n.splice(n.indexOf(e),1)},r.clearAnchors=function(){if(!this._enabled)throw Error("Cannot remove anchors from a disabled anchor manager.");this._removeAllRequestTrackings()},r._generateTracked=function(){var e=new A;return e.id=E._uuid++,e},i(n,[{key:"trackingAnchors",get:function(){return this._anchors}},{key:"trackedAnchors",get:function(){return this._tracked}}]),n}(E),e.XRAnchorTracking=C([b(e.XRFeatureType.AnchorTracking)],e.XRAnchorTracking);var V=function(e){function t(t){var n;return(n=e.call(this)||this).image=t,n}return o(t,e),t}(F),z=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(P);e.XRImageTracking=function(t){function n(n,r){var a;if((a=t.call(this,n,e.XRFeatureType.ImageTracking,r)||this)._trackingImages=r,(r?r.length:0)>0)for(var i=0,o=r.length;i<o;i++)a._addRequestTracking(new V(r[i]));else console.warn("No image to be tracked.");return a}return o(n,t),n.prototype._generateTracked=function(){var e=new z;return e.id=E._uuid++,e},i(n,[{key:"trackingImages",get:function(){return this._trackingImages}},{key:"trackedImages",get:function(){return this._tracked}}]),n}(E),e.XRImageTracking=C([b(e.XRFeatureType.ImageTracking)],e.XRImageTracking);var L=function(e,t,n){this.name=e,this.imageSource=t,this.physicalWidth=n};function N(){return(N=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}e.XRReferenceImageDecoder=function(){function e(){}return e.decode=function(e,t){return new Promise(function(e,n){var r=t.nextFloat32();t.nextUint8();var a=new Image;a.onload=function(){e(new L("",a,r))},a.src=URL.createObjectURL(new window.Blob([t.nextImagesData(1)[0]]))})},e}(),e.XRReferenceImageDecoder=C([t.decoder("XRReferenceImage")],e.XRReferenceImageDecoder),e.XRReferenceImageLoader=function(e){function n(){return e.apply(this,arguments)}return o(n,e),n.prototype.load=function(e,n){return new t.AssetPromise(function(r,a){n._request(e.url,N({},e,{type:"arraybuffer"})).then(function(e){t.decode(e,n.engine).then(function(e){r(e)})}).catch(a)})},n}(t.Loader),e.XRReferenceImageLoader=C([t.resourceLoader("XRReferenceImage",[])],e.XRReferenceImageLoader),e.XRAnchor=A,e.XRCamera=y,e.XRCameraManager=R,e.XRController=k,e.XRFeature=I,e.XRHitResult=x,e.XRInputManager=X,e.XRPose=S,e.XRReferenceImage=L,e.XRSessionManager=w,e.XRTrackableFeature=E,e.XRTracked=P,e.XRTrackedImage=z,e.XRTrackedPlane=q,Object.defineProperty(e,"__esModule",{value:!0})});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@galacean/engine")):"function"==typeof define&&define.amd?define(["exports","@galacean/engine"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).Galacean=e.Galacean||{},e.Galacean.XR={}),e.Galacean)}(this,function(e,t){"use strict";function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function r(e,t,a){return(r=!function(){if("undefined"==typeof Reflect||!Reflect.construct||Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}()?function(e,t,r){var a=[null];a.push.apply(a,t);var i=new(Function.bind.apply(e,a));return r&&n(i,r.prototype),i}:Reflect.construct).apply(null,arguments)}function a(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,n){return t&&a(e.prototype,t),n&&a(e,n),e}function o(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&n(e,t)}function s(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}e.XRTrackedInputDevice=void 0,(c=e.XRTrackedInputDevice||(e.XRTrackedInputDevice={}))[c.Controller=0]="Controller",c[c.LeftController=1]="LeftController",c[c.RightController=2]="RightController",c[c.Camera=3]="Camera",c[c.LeftCamera=4]="LeftCamera",c[c.RightCamera=5]="RightCamera",c[c.LeftHand=6]="LeftHand",c[c.RightHand=7]="RightHand",e.XRSessionState=void 0,(u=e.XRSessionState||(e.XRSessionState={}))[u.None=0]="None",u[u.Initializing=1]="Initializing",u[u.Initialized=2]="Initialized",u[u.Running=3]="Running",u[u.Paused=4]="Paused";var c,u,h,f,p,l,d,g,_,m,v,R=function(){function n(e){this._xrManager=e}var r=n.prototype;return r.attachCamera=function(n,r){var a=this._xrManager.inputManager.getTrackedDevice(n),i=a._camera;if(i!==r){switch(i&&(i._cameraType=t.CameraType.Normal),n){case e.XRTrackedInputDevice.Camera:r._cameraType=t.CameraType.XRCenterCamera;break;case e.XRTrackedInputDevice.LeftCamera:r._cameraType=t.CameraType.XRLeftCamera;break;case e.XRTrackedInputDevice.RightCamera:r._cameraType=t.CameraType.XRRightCamera}a._camera=r}},r.detachCamera=function(e){var n=this._xrManager.inputManager.getTrackedDevice(e),r=n._camera;return r&&(r._cameraType=t.CameraType.Normal),n._camera=null,r},r._onSessionStart=function(){},r._onUpdate=function(){for(var e=this._xrManager.inputManager._cameras,n=0,r=e.length;n<r;n++){var a=e[n],i=a._camera;if(i){var o=i.entity.transform,s=a.pose;o.position=s.position,o.rotationQuaternion=s.rotation;var c=i.viewport,u=a.viewport,h=u.x,f=u.y,p=u.width,l=u.height;h===c.x&&f===c.y&&p===c.z&&l===c.w||(i.viewport=c.set(h,f,p,l)),t.Matrix.equals(i.projectionMatrix,a.projectionMatrix)||(i.projectionMatrix=a.projectionMatrix)}}},r._onSessionExit=function(){},r._getIgnoreClearFlags=function(n){return n!==t.CameraType.XRCenterCamera?t.CameraClearFlags.None:this._xrManager.sessionManager.state===e.XRSessionState.Running?t.CameraClearFlags.Color:t.CameraClearFlags.None},r._onDestroy=function(){},i(n,[{key:"fixedFoveation",get:function(){var e=this._xrManager.sessionManager._platformSession;if(e)return e.getFixedFoveation();throw Error("XR session is not available.")},set:function(e){var t=this._xrManager.sessionManager._platformSession;if(t)t.setFixedFoveation(e);else throw Error("XR session is not available.")}}]),n}(),S=function(){this.position=new t.Vector3,this.rotation=new t.Quaternion,this.matrix=new t.Matrix,this.inverseMatrix=new t.Matrix};e.XRTrackingState=void 0,(h=e.XRTrackingState||(e.XRTrackingState={}))[h.NotTracking=0]="NotTracking",h[h.Tracking=1]="Tracking",h[h.TrackingLost=2]="TrackingLost";var T=function(t){this.type=t,this.trackingState=e.XRTrackingState.NotTracking},y=function(e){function n(){var n;return n=e.apply(this,arguments)||this,n.pose=new S,n.viewport=new t.Rect,n.projectionMatrix=new t.Matrix,n}return o(n,e),n}(T);e.XRInputButton=void 0,(f=e.XRInputButton||(e.XRInputButton={}))[f.None=0]="None",f[f.Select=1]="Select",f[f.Trigger=1]="Trigger",f[f.Squeeze=2]="Squeeze",f[f.TouchPad=4]="TouchPad",f[f.AButton=8]="AButton",f[f.BButton=16]="BButton";var k=function(t){function n(){var n;return n=t.apply(this,arguments)||this,n.gripPose=new S,n.targetRayPose=new S,n.pressedButtons=e.XRInputButton.None,n.down=e.XRInputButton.None,n.up=e.XRInputButton.None,n}o(n,t);var r=n.prototype;return r.isButtonDown=function(e){return(this.down&e)!=0},r.isButtonUp=function(e){return(this.up&e)!=0},r.isButtonHeldDown=function(e){return(this.pressedButtons&e)!=0},n}(T);e.XRInputEventType=void 0,(p=e.XRInputEventType||(e.XRInputEventType={}))[p.SelectStart=0]="SelectStart",p[p.Select=1]="Select",p[p.SelectEnd=2]="SelectEnd",p[p.SqueezeStart=3]="SqueezeStart",p[p.Squeeze=4]="Squeeze",p[p.SqueezeEnd=5]="SqueezeEnd",e.XRTargetRayMode=void 0,(l=e.XRTargetRayMode||(e.XRTargetRayMode={}))[l.Gaze=0]="Gaze",l[l.TrackedPointer=1]="TrackedPointer",l[l.Screen=2]="Screen";var X=function(){function n(n,r){this._xrManager=n,this._engine=r,this._cameras=[],this._controllers=[],this._added=[],this._removed=[],this._trackedDevices=[],this._statusSnapshot=[],this._listeners=new t.SafeLoopArray;for(var a=this._trackedDevices,i=this._controllers,o=this._cameras,s=0;s<6;s++)switch(s){case e.XRTrackedInputDevice.Camera:case e.XRTrackedInputDevice.LeftCamera:case e.XRTrackedInputDevice.RightCamera:o.push(a[s]=new y(s));break;case e.XRTrackedInputDevice.Controller:case e.XRTrackedInputDevice.LeftController:case e.XRTrackedInputDevice.RightController:i.push(a[s]=new k(s))}this._statusSnapshot.fill(e.XRTrackingState.NotTracking,0,a.length)}var r=n.prototype;return r.getTrackedDevice=function(e){return this._trackedDevices[e]},r.addTrackedDeviceChangedListener=function(e){this._listeners.push({fn:e})},r.removeTrackedDeviceChangedListener=function(e){this._listeners.findAndRemove(function(t){return t.fn===e&&(t.destroyed=!0)})},r._onUpdate=function(){var t=this._added,n=this._removed,r=this._statusSnapshot,a=this._trackedDevices,i=this._controllers;t.length=n.length=0;for(var o=0,s=i.length;o<s;o++){var c=i[o];c.down=c.up=0}for(var u=this._xrManager.sessionManager._platformSession,h=u.events,f=0,p=h.length;f<p;f++)this._handleEvent(h[f]);u.resetEvents(),u.frame.updateInputs(a);for(var l=0,d=a.length;l<d;l++){var g=a[l];if(g){var _=g.trackingState;r[l]===e.XRTrackingState.Tracking?_!==e.XRTrackingState.Tracking&&n.push(g):_===e.XRTrackingState.Tracking&&t.push(g),r[l]=_}}if(t.length>0||n.length>0)for(var m=this._listeners.getLoopArray(),v=0,R=m.length;v<R;v++){var S=m[v];S.destroyed||S.fn(t,n)}},r._onDestroy=function(){this._listeners.findAndRemove(function(e){return e.destroyed=!0})},r._handleEvent=function(t){var n=this._trackedDevices[t.input];switch(t.targetRayMode){case e.XRTargetRayMode.TrackedPointer:switch(t.type){case e.XRInputEventType.SelectStart:n.down|=e.XRInputButton.Select,n.pressedButtons|=e.XRInputButton.Select;break;case e.XRInputEventType.SelectEnd:n.up|=e.XRInputButton.Select,n.pressedButtons&=~e.XRInputButton.Select;break;case e.XRInputEventType.SqueezeStart:n.down|=e.XRInputButton.Squeeze,n.pressedButtons|=e.XRInputButton.Squeeze;break;case e.XRInputEventType.SqueezeEnd:n.up|=e.XRInputButton.Squeeze,n.pressedButtons&=~e.XRInputButton.Squeeze}break;case e.XRTargetRayMode.Screen:var r=this._engine,a=r.inputManager._pointerManager._target,i=r.canvas._webCanvas,o=i.clientWidth,s=i.clientHeight,c=o*(t.x+1)*.5,u=s*(t.y+1)*.5;switch(t.type){case e.XRInputEventType.SelectStart:a.dispatchEvent(this._makeUpPointerEvent("pointerdown",t.id,c,u));break;case e.XRInputEventType.Select:a.dispatchEvent(this._makeUpPointerEvent("pointermove",t.id,c,u));break;case e.XRInputEventType.SelectEnd:a.dispatchEvent(this._makeUpPointerEvent("pointerup",t.id,c,u)),a.dispatchEvent(this._makeUpPointerEvent("pointerleave",t.id,c,u))}}},r._makeUpPointerEvent=function(e,t,n,r){var a={pointerId:t,clientX:n,clientY:r};switch(e){case"pointerdown":a.button=0,a.buttons=1;break;case"pointermove":a.button=-1,a.buttons=1;break;case"pointerup":case"pointerleave":a.button=0,a.buttons=0}return new PointerEvent(e,a)},n}();e.XRSessionMode=void 0,(d=e.XRSessionMode||(e.XRSessionMode={}))[d.None=0]="None",d[d.AR=1]="AR",d[d.VR=2]="VR";var w=function(){function n(n,r){this._xrManager=n,this._engine=r,this._mode=e.XRSessionMode.None,this._state=e.XRSessionState.None,this._listeners=new t.SafeLoopArray,this._rhi=r._hardwareRenderer,this._raf=requestAnimationFrame.bind(window),this._caf=cancelAnimationFrame.bind(window),this._onSessionExit=this._onSessionExit.bind(this)}var r=n.prototype;return r.isSupportedMode=function(e){return this._xrManager._platformDevice.isSupportedSessionMode(e)},r.run=function(){var t=this._platformSession,n=this._engine;if(!t)throw Error("Without session to run.");t.start(),this._setState(e.XRSessionState.Running),this._xrManager._onSessionStart(),n.isPaused||(n.pause(),n.resume())},r.stop=function(){var t=this._platformSession,n=this._engine,r=this._rhi;if(!t)throw Error("Without session to stop.");if(this._state!==e.XRSessionState.Running)throw Error("Session is not running.");r._mainFrameBuffer=null,r._mainFrameWidth=r._mainFrameHeight=0,t.stop(),this._setState(e.XRSessionState.Paused),this._xrManager._onSessionStop(),n.isPaused||(n.pause(),n.resume())},r.addStateChangedListener=function(e){this._listeners.push({fn:e})},r.removeStateChangedListener=function(e){this._listeners.findAndRemove(function(t){return t.fn===e&&(t.destroyed=!0)})},r._setState=function(e){this._state=e;for(var t=this._listeners.getLoopArray(),n=0,r=t.length;n<r;n++){var a=t[n];a.destroyed||a.fn(e)}},r._initialize=function(t,n){var r=this;return new Promise(function(a,i){for(var o=r._xrManager,s=[],c=0,u=n.length;c<u;c++){var h=n[c]._platformFeature;h&&s.push(h)}o._platformDevice.requestSession(r._rhi,t,s).then(function(n){r._mode=t,r._platformSession=n,r._setState(e.XRSessionState.Initialized),n.setSessionExitCallBack(r._onSessionExit),n.addEventListener(),o._onSessionInit(),a()},i)})},r._onUpdate=function(){var e=this._rhi,t=this._platformSession;e._mainFrameBuffer=t.framebuffer,e._mainFrameWidth=t.framebufferWidth,e._mainFrameHeight=t.framebufferHeight},r._getRequestAnimationFrame=function(){return this._state===e.XRSessionState.Running?this._platformSession.requestAnimationFrame:this._raf},r._getCancelAnimationFrame=function(){return this._state===e.XRSessionState.Running?this._platformSession.cancelAnimationFrame:this._caf},r._exit=function(){var e=this._platformSession;return e?e.end():Promise.reject("Without session to stop.")},r._onSessionExit=function(){var t=this._rhi,n=this._platformSession,r=this._engine;t._mainFrameBuffer=null,t._mainFrameWidth=t._mainFrameHeight=0,n.removeEventListener(),this._platformSession=null,this._setState(e.XRSessionState.None),this._xrManager._onSessionExit(),r.isPaused||(r.pause(),r.resume())},r._onDestroy=function(){this._listeners.findAndRemove(function(e){return e.destroyed=!0}),this._raf=this._caf=null},i(n,[{key:"mode",get:function(){return this._mode}},{key:"state",get:function(){return this._state}},{key:"supportedFrameRate",get:function(){return this._platformSession.supportedFrameRates}},{key:"frameRate",get:function(){return this._platformSession.frameRate}}]),n}(),M=function(t){function n(){return t.apply(this,arguments)}o(n,t);var a=n.prototype;return a.isSupportedFeature=function(e){return this._platformDevice.isSupportedFeature(n._featureMap.get(e))},a.addFeature=function(e){for(var t=arguments.length,a=Array(t>1?t-1:0),i=1;i<t;i++)a[i-1]=arguments[i];if(this.sessionManager._platformSession)throw Error("Cannot add feature when the session is initialized.");if(!this._platformDevice.isSupportedFeature(n._featureMap.get(e)))throw Error("The feature is not supported");for(var o=this.features,c=0,u=o.length;c<u;c++)if(s(o[c],e))throw Error("The feature has been added");var h=r(e,[].concat(this,a));return o.push(h),h},a.getFeature=function(e){for(var t=this.features,n=0,r=t.length;n<r;n++){var a=t[n];if(s(a,e))return a}},a.enterXR=function(t,n){void 0===n&&(n=!0);var r=this,a=this.sessionManager;if(a._platformSession)throw Error("Please exit XR immersive mode first.");if(!this._origin)throw Error("Please set origin before enter XR.");return new Promise(function(i,o){a.isSupportedMode(t).then(function(){a._setState(e.XRSessionState.Initializing),a._initialize(t,r.features).then(function(){n&&a.run(),i()},o)},o)})},a.exitXR=function(){var e=this;return new Promise(function(t,n){e.sessionManager._exit().then(function(){t()},n)})},a._initialize=function(e,t){this._features=[],this._platformDevice=t,this.sessionManager=new w(this,e),this.inputManager=new X(this,e),this.cameraManager=new R(this)},a._update=function(){var t=this.sessionManager;if(t.state===e.XRSessionState.Running){t._onUpdate(),this.inputManager._onUpdate(),this.cameraManager._onUpdate();for(var n=this.features,r=0,a=n.length;r<a;r++){var i=n[r];i.enabled&&i._onUpdate()}}},a._destroy=function(){var e=this;this.sessionManager._platformSession?this.exitXR().then(function(){e.sessionManager._onDestroy(),e.inputManager._onDestroy(),e.cameraManager._onDestroy()}):(this.sessionManager._onDestroy(),this.inputManager._onDestroy(),this.cameraManager._onDestroy())},a._getRequestAnimationFrame=function(){return this.sessionManager._getRequestAnimationFrame()},a._getCancelAnimationFrame=function(){return this.sessionManager._getCancelAnimationFrame()},a._getCameraIgnoreClearFlags=function(e){return this.cameraManager._getIgnoreClearFlags(e)},a._onSessionStop=function(){for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionStop()}},a._onSessionInit=function(){for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionInit()}},a._onSessionStart=function(){this.cameraManager._onSessionStart();for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionStart()}},a._onSessionExit=function(){this.cameraManager._onSessionExit();for(var e=this.features,t=0,n=e.length;t<n;t++){var r=e[t];r.enabled&&r._onSessionExit(),r._onDestroy()}e.length=0},i(n,[{key:"features",get:function(){return this._features}},{key:"origin",get:function(){return this._origin},set:function(e){if(this.sessionManager._platformSession)throw Error("Cannot set origin when the session is initialized.");this._origin=e}}]),n}(t.XRManager);function b(e){return function(t){M._featureMap.set(t,e)}}M._featureMap=new Map,function(e,t){t.forEach(function(t){Object.getOwnPropertyNames(t.prototype).forEach(function(n){Object.defineProperty(e.prototype,n,Object.getOwnPropertyDescriptor(t.prototype,n)||Object.create(null))})})}(t.XRManager,[M]);var I=function(){function e(e,t){for(var n,r=arguments.length,a=Array(r>2?r-2:0),i=2;i<r;i++)a[i-2]=arguments[i];this._xrManager=e,this._type=t,this._enabled=!0,this._platformFeature=(n=e._platformDevice).createPlatformFeature.apply(n,[].concat(t,a)),this._onEnable()}var t=e.prototype;return t._onEnable=function(){},t._onDisable=function(){},t._onUpdate=function(){},t._onSessionInit=function(){},t._onSessionStart=function(){},t._onSessionStop=function(){},t._onSessionExit=function(){},t._onDestroy=function(){},i(e,[{key:"enabled",get:function(){return this._enabled},set:function(e){this.enabled!==e&&(this._enabled=e,e?this._onEnable():this._onDisable())}}]),e}();e.XRFeatureType=void 0,(g=e.XRFeatureType||(e.XRFeatureType={}))[g.AnchorTracking=0]="AnchorTracking",g[g.ImageTracking=1]="ImageTracking",g[g.PlaneTracking=2]="PlaneTracking",g[g.HitTest=3]="HitTest",e.XRRequestTrackingState=void 0,(_=e.XRRequestTrackingState||(e.XRRequestTrackingState={}))[_.None=0]="None",_[_.Submitted=1]="Submitted",_[_.Resolved=2]="Resolved",_[_.Rejected=3]="Rejected",_[_.Destroyed=4]="Destroyed",_[_.WaitingDestroy=5]="WaitingDestroy";var E=function(n){function r(){var e;return e=n.apply(this,arguments)||this,e._requestTrackings=[],e._tracked=[],e._added=[],e._updated=[],e._removed=[],e._statusSnapshot={},e._listeners=new t.SafeLoopArray,e}o(r,n);var a=r.prototype;return a.addChangedListener=function(e){this._listeners.push({fn:e})},a.removeChangedListener=function(e){this._listeners.findAndRemove(function(t){return t.fn===e&&(t.destroyed=!0)})},a._onUpdate=function(){var t=this._xrManager.sessionManager._platformSession,n=t.frame,r=this._platformFeature,a=this._requestTrackings,i=this._statusSnapshot,o=this._tracked,s=this._added,c=this._updated,u=this._removed;if(n&&a.length&&r.checkAvailable(t,n,a)){s.length=c.length=u.length=0,r.getTrackedResult(t,n,a,this._generateTracked);for(var h=0,f=a.length;h<f;h++){var p=a[h];switch(p.state){case e.XRRequestTrackingState.Destroyed:for(var l=p.tracked,d=0,g=l.length;d<g;d++){var _=l[d],m=_.id;i[m]===e.XRTrackingState.Tracking&&(u.push(_),o.splice(o.indexOf(_),1)),i[m]=e.XRTrackingState.NotTracking}break;case e.XRRequestTrackingState.Resolved:for(var v=p.tracked,R=0,S=v.length;R<S;R++){var T=v[R],y=T.id;T.state===e.XRTrackingState.Tracking?i[y]===e.XRTrackingState.Tracking?c.push(T):(s.push(T),i[y]=e.XRTrackingState.Tracking,o.push(T)):(i[y]===e.XRTrackingState.Tracking&&(u.push(T),o.splice(o.indexOf(T),1)),i[y]=T.state)}}}for(var k=a.length-1;k>=0;k--)a[k].state===e.XRRequestTrackingState.Destroyed&&a.splice(k,1);if(s.length>0||c.length>0||u.length>0)for(var X=this._listeners.getLoopArray(),w=0,M=X.length;w<M;w++){var b=X[w];b.destroyed||b.fn(s,c,u)}}},a._onSessionStop=function(){this._added.length=this._updated.length=this._removed.length=0},a._onSessionExit=function(){this._requestTrackings.length=this._tracked.length=this._added.length=this._updated.length=this._removed.length=0,this._listeners.findAndRemove(function(e){return e.destroyed=!0})},a._addRequestTracking=function(t){var n=this._platformFeature;if(this._xrManager.sessionManager._platformSession&&!n.canModifyRequestTrackingAfterInit)throw Error(e.XRFeatureType[this._type]+" request tracking cannot be modified after initialization.");this._requestTrackings.push(t),n.onAddRequestTracking(t)},a._removeRequestTracking=function(t){var n=this._platformFeature;if(this._xrManager.sessionManager._platformSession&&!n.canModifyRequestTrackingAfterInit)throw Error(e.XRFeatureType[this._type]+" request tracking cannot be modified after initialization.");n.onDelRequestTracking(t)},a._removeAllRequestTrackings=function(){var t=this._platformFeature;if(this._xrManager.sessionManager._platformSession&&!t.canModifyRequestTrackingAfterInit)throw Error(e.XRFeatureType[this._type]+" request tracking cannot be modified after initialization.");for(var n=this._requestTrackings,r=0,a=n.length;r<a;r++)t.onDelRequestTracking(n[r])},r}(I);E._uuid=0;var P=function(){this.pose=new S,this.state=e.XRTrackingState.NotTracking};e.TrackableType=void 0,(m=e.TrackableType||(e.TrackableType={}))[m.Plane=1]="Plane",m[m.All=1]="All";var x=function(){this.point=new t.Vector3,this.normal=new t.Vector3};function C(e,t,n,r){var a,i=arguments.length,o=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(o=(i<3?a(o):i>3?a(t,n,o):a(t,n))||o);return i>3&&o&&Object.defineProperty(t,n,o),o}"function"==typeof SuppressedError&&SuppressedError,e.XRPlaneMode=void 0,(v=e.XRPlaneMode||(e.XRPlaneMode={}))[v.None=0]="None",v[v.Horizontal=1]="Horizontal",v[v.Vertical=2]="Vertical",v[v.EveryThing=3]="EveryThing";var F=function(){this.state=e.XRRequestTrackingState.None,this.tracked=[]},D=function(e){function t(t){var n;return(n=e.call(this)||this).detectionMode=t,n}return o(t,e),t}(F),q=function(e){function t(){var t;return t=e.apply(this,arguments)||this,t.polygon=[],t.attributesDirty=!1,t}return o(t,e),t}(P);e.XRPlaneTracking=function(t){function n(n,r){var a;return void 0===r&&(r=e.XRPlaneMode.EveryThing),(a=t.call(this,n,e.XRFeatureType.PlaneTracking,r)||this)._addRequestTracking(new D(r)),a}return o(n,t),n.prototype._generateTracked=function(){var e=new q;return e.id=E._uuid++,e},i(n,[{key:"detectionMode",get:function(){return this._requestTrackings[0].detectionMode}},{key:"trackedPlanes",get:function(){return this._tracked}}]),n}(E),e.XRPlaneTracking=C([b(e.XRFeatureType.PlaneTracking)],e.XRPlaneTracking),e.XRHitTest=function(n){function r(r){var a;return(a=n.call(this,r,e.XRFeatureType.HitTest)||this)._tempRay=new t.Ray,a._tempPlane=new t.Plane,a._tempVec2=new t.Vector2,a._tempVec30=new t.Vector3,a._tempVec31=new t.Vector3,a._tempVec32=new t.Vector3,a._tempVec33=new t.Vector3,a._tempVec34=new t.Vector3,a._tempVec35=new t.Vector3,a}o(r,n);var a=r.prototype;return a.hitTest=function(t,n){var r=[];return n&e.TrackableType.Plane&&this._hitTestPlane(t,r),r},a.screenHitTest=function(t,n,r){var a=this._xrManager;if(a.sessionManager.mode!==e.XRSessionMode.AR)throw Error("Only AR mode supports using screen ray hit test.");var i=a.inputManager.getTrackedDevice(e.XRTrackedInputDevice.Camera)._camera;if(!i)throw Error("No camera available.");var o=i.screenPointToRay(this._tempVec2.set(t,n),this._tempRay);return this.hitTest(o,r)},a._hitTestPlane=function(n,r){var a=this._xrManager.getFeature(e.XRPlaneTracking);if(!a||!a.enabled)throw Error("The plane estimation function needs to be turned on for plane hit test.");for(var i=this._tempPlane,o=this._tempVec30,s=this._tempVec31,c=this._tempVec32,u=a.trackedPlanes,h=0,f=u.length;h<f;h++){var p=u[h];o.set(0,1,0).transformNormal(p.pose.matrix),i.normal.copyFrom(o),i.distance=-t.Vector3.dot(o,p.pose.position);var l=n.intersectPlane(i);if(l>=0&&(n.getPoint(l,s),t.Vector3.transformToVec3(s,p.pose.inverseMatrix,c),this._checkPointerWithinPlane(c,p))){var d=new x;d.point.copyFrom(s),d.normal.copyFrom(o),d.distance=l,d.trackedObject=p,d.trackableType=e.TrackableType.Plane,r.push(d)}}},a._checkPointerWithinPlane=function(e,n){for(var r=this._tempVec33,a=this._tempVec34,i=this._tempVec35,o=n.polygon,s=o.length,c=o[s-1],u=0,h=0;h<s;h++){var f=o[h];t.Vector3.subtract(f,c,r),t.Vector3.subtract(e,c,a),t.Vector3.cross(r,a,i);var p=i.y;if(0===u)p>0?u=1:p<0&&(u=-1);else if(p>0&&u<0||p<0&&u>0)return!1;c=f}return!0},r}(I),e.XRHitTest=C([b(e.XRFeatureType.HitTest)],e.XRHitTest);var A=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(P),B=function(e){function t(t,n){var r;return(r=e.call(this)||this).position=t,r.rotation=n,r}return o(t,e),t}(F);e.XRAnchorTracking=function(t){function n(n){var r;return(r=t.call(this,n,e.XRFeatureType.AnchorTracking)||this)._anchors=[],r}o(n,t);var r=n.prototype;return r.addAnchor=function(e,t){if(!this._enabled)throw Error("Cannot add an anchor from a disabled anchor manager.");var n=this._anchors,r=new B(e,t),a=this._generateTracked();return r.tracked[0]=a,this._addRequestTracking(r),n.push(a),a},r.removeAnchor=function(e){if(!this._enabled)throw Error("Cannot remove an anchor from a disabled anchor manager.");for(var t=this._requestTrackings,n=this._anchors,r=0,a=t.length;r<a;r++){var i=t[r];if(i.tracked[0]===e){this._removeRequestTracking(i);break}}n.splice(n.indexOf(e),1)},r.clearAnchors=function(){if(!this._enabled)throw Error("Cannot remove anchors from a disabled anchor manager.");this._removeAllRequestTrackings()},r._generateTracked=function(){var e=new A;return e.id=E._uuid++,e},i(n,[{key:"trackingAnchors",get:function(){return this._anchors}},{key:"trackedAnchors",get:function(){return this._tracked}}]),n}(E),e.XRAnchorTracking=C([b(e.XRFeatureType.AnchorTracking)],e.XRAnchorTracking);var V=function(e){function t(t){var n;return(n=e.call(this)||this).image=t,n}return o(t,e),t}(F),z=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(P);e.XRImageTracking=function(t){function n(n,r){var a;if((a=t.call(this,n,e.XRFeatureType.ImageTracking,r)||this)._trackingImages=r,(r?r.length:0)>0)for(var i=0,o=r.length;i<o;i++)a._addRequestTracking(new V(r[i]));else console.warn("No image to be tracked.");return a}return o(n,t),n.prototype._generateTracked=function(){var e=new z;return e.id=E._uuid++,e},i(n,[{key:"trackingImages",get:function(){return this._trackingImages}},{key:"trackedImages",get:function(){return this._tracked}}]),n}(E),e.XRImageTracking=C([b(e.XRFeatureType.ImageTracking)],e.XRImageTracking);var L=function(e,t,n){this.name=e,this.imageSource=t,this.physicalWidth=n};function N(){return(N=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}e.XRReferenceImageDecoder=function(){function e(){}return e.decode=function(e,n){return new t.AssetPromise(function(e,t){var r=n.nextFloat32();n.nextUint8();var a=new Image;a.onload=function(){e(new L("",a,r))},a.src=URL.createObjectURL(new window.Blob([n.nextImagesData(1)[0]]))})},e}(),e.XRReferenceImageDecoder=C([t.decoder("XRReferenceImage")],e.XRReferenceImageDecoder),e.XRReferenceImageLoader=function(e){function n(){return e.apply(this,arguments)}return o(n,e),n.prototype.load=function(e,n){return new t.AssetPromise(function(r,a){n._request(e.url,N({},e,{type:"arraybuffer"})).then(function(e){t.decode(e,n.engine).then(function(e){r(e)})}).catch(a)})},n}(t.Loader),e.XRReferenceImageLoader=C([t.resourceLoader("XRReferenceImage",[])],e.XRReferenceImageLoader),e.XRAnchor=A,e.XRCamera=y,e.XRCameraManager=R,e.XRController=k,e.XRFeature=I,e.XRHitResult=x,e.XRInputManager=X,e.XRPose=S,e.XRReferenceImage=L,e.XRSessionManager=w,e.XRTrackableFeature=E,e.XRTracked=P,e.XRTrackedImage=z,e.XRTrackedPlane=q,Object.defineProperty(e,"__esModule",{value:!0})});
2
2
  //# sourceMappingURL=browser.min.js.map