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