@galacean/engine-xr 1.2.0-alpha.0 → 1.2.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -456,21 +456,25 @@
456
456
  }
457
457
  break;
458
458
  case exports.XRTargetRayMode.Screen:
459
+ var _this = this, engine = _this._engine;
459
460
  // @ts-ignore
460
- var canvas = this._engine.canvas._webCanvas;
461
+ var target = engine.inputManager._pointerManager._target;
462
+ // @ts-ignore
463
+ var canvas = engine.canvas._webCanvas;
461
464
  var clientWidth = canvas.clientWidth, clientHeight = canvas.clientHeight;
462
465
  var clientX = clientWidth * (event.x + 1) * 0.5;
463
466
  var clientY = clientHeight * (event.y + 1) * 0.5;
467
+ // @ts-ignore
464
468
  switch(event.type){
465
469
  case exports.XRInputEventType.SelectStart:
466
- canvas.dispatchEvent(this._makeUpPointerEvent("pointerdown", event.id, clientX, clientY));
470
+ target.dispatchEvent(this._makeUpPointerEvent("pointerdown", event.id, clientX, clientY));
467
471
  break;
468
472
  case exports.XRInputEventType.Select:
469
- canvas.dispatchEvent(this._makeUpPointerEvent("pointermove", event.id, clientX, clientY));
473
+ target.dispatchEvent(this._makeUpPointerEvent("pointermove", event.id, clientX, clientY));
470
474
  break;
471
475
  case exports.XRInputEventType.SelectEnd:
472
- canvas.dispatchEvent(this._makeUpPointerEvent("pointerup", event.id, clientX, clientY));
473
- canvas.dispatchEvent(this._makeUpPointerEvent("pointerleave", event.id, clientX, clientY));
476
+ target.dispatchEvent(this._makeUpPointerEvent("pointerup", event.id, clientX, clientY));
477
+ target.dispatchEvent(this._makeUpPointerEvent("pointerleave", event.id, clientX, clientY));
474
478
  break;
475
479
  }
476
480
  break;
@@ -1 +1 @@
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.Initialized=1]="Initialized",u[u.Running=2]="Running",u[u.Paused=3]="Paused";var c,u,h,l,p,f,g,d,_,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,l=u.y,p=u.width,f=u.height;h===c.x&&l===c.y&&p===c.z&&f===c.w||(i.viewport=c.set(h,l,p,f)),t.Matrix.equals(i.projectionMatrix,a.projectionMatrix)||(i.projectionMatrix=a.projectionMatrix)}}},r._onSessionExit=function(){},r._getCameraClearFlagsMask=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}(),k=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},S=function(e){function n(){var n;return n=e.apply(this,arguments)||this,n.pose=new k,n.viewport=new t.Rect,n.projectionMatrix=new t.Matrix,n}return o(n,e),n}(T);e.XRInputButton=void 0,(l=e.XRInputButton||(e.XRInputButton={}))[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";var y=function(t){function n(){var n;return n=t.apply(this,arguments)||this,n.gripPose=new k,n.targetRayPose=new k,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,(f=e.XRTargetRayMode||(e.XRTargetRayMode={}))[f.Gaze=0]="Gaze",f[f.TrackedPointer=1]="TrackedPointer",f[f.Screen=2]="Screen";var X=function(){function t(t,n){this._xrManager=t,this._engine=n,this._cameras=[],this._controllers=[],this._added=[],this._removed=[],this._trackedDevices=[],this._statusSnapshot=[],this._listeners=[];for(var r=this._trackedDevices,a=this._controllers,i=this._cameras,o=0;o<6;o++)switch(o){case e.XRTrackedInputDevice.Camera:case e.XRTrackedInputDevice.LeftCamera:case e.XRTrackedInputDevice.RightCamera:i.push(r[o]=new S(o));break;case e.XRTrackedInputDevice.Controller:case e.XRTrackedInputDevice.LeftController:case e.XRTrackedInputDevice.RightController:a.push(r[o]=new y(o))}this._statusSnapshot.fill(e.XRTrackingState.NotTracking,0,r.length)}var n=t.prototype;return n.getTrackedDevice=function(e){return this._trackedDevices[e]},n.addTrackedDeviceChangedListener=function(e){this._listeners.push(e)},n.removeTrackedDeviceChangedListener=function(e){var t=this._listeners,n=t.indexOf(e);n>=0&&t.splice(n,1)},n._onUpdate=function(){var t=this._added,n=this._removed,r=this._listeners,a=this._statusSnapshot,i=this._trackedDevices,o=this._controllers;t.length=n.length=0;for(var s=0,c=o.length;s<c;s++){var u=o[s];u.down=u.up=0}for(var h=this._xrManager.sessionManager._platformSession,l=h.events,p=0,f=l.length;p<f;p++)this._handleEvent(l[p]);h.resetEvents(),h.frame.updateInputs(i);for(var g=0,d=i.length;g<d;g++){var _=i[g];if(_){var m=_.trackingState;a[g]===e.XRTrackingState.Tracking?m!==e.XRTrackingState.Tracking&&n.push(_):m===e.XRTrackingState.Tracking&&t.push(_),a[g]=m}}if(t.length>0||n.length>0)for(var v=0,R=r.length;v<R;v++)r[v](t,n)},n._onDestroy=function(){this._listeners.length=0},n._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.canvas._webCanvas,a=r.clientWidth,i=r.clientHeight,o=a*(t.x+1)*.5,s=i*(t.y+1)*.5;switch(t.type){case e.XRInputEventType.SelectStart:r.dispatchEvent(this._makeUpPointerEvent("pointerdown",t.id,o,s));break;case e.XRInputEventType.Select:r.dispatchEvent(this._makeUpPointerEvent("pointermove",t.id,o,s));break;case e.XRInputEventType.SelectEnd:r.dispatchEvent(this._makeUpPointerEvent("pointerup",t.id,o,s)),r.dispatchEvent(this._makeUpPointerEvent("pointerleave",t.id,o,s))}}},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)},t}();e.XRSessionMode=void 0,(g=e.XRSessionMode||(e.XRSessionMode={}))[g.None=0]="None",g[g.AR=1]="AR",g[g.VR=2]="VR";var M=function(){function t(t,n){this._xrManager=t,this._engine=n,this._mode=e.XRSessionMode.None,this._state=e.XRSessionState.None,this._rhi=n._hardwareRenderer,this._raf=requestAnimationFrame.bind(window),this._caf=cancelAnimationFrame.bind(window),this._onSessionExit=this._onSessionExit.bind(this)}var n=t.prototype;return n.isSupportedMode=function(e){return this._xrManager._platformDevice.isSupportedSessionMode(e)},n.run=function(){var t=this._platformSession,n=this._engine;if(!t)throw Error("Without session to run.");t.start(),this._state=e.XRSessionState.Running,this._xrManager._onSessionStart(),n.isPaused||(n.pause(),n.resume())},n.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._state=e.XRSessionState.Paused,this._xrManager._onSessionStop(),n.isPaused||(n.pause(),n.resume())},n._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._state=e.XRSessionState.Initialized,n.setSessionExitCallBack(r._onSessionExit),n.addEventListener(),o._onSessionInit(),a()},i)})},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===e.XRSessionState.Running?this._platformSession.requestAnimationFrame:this._raf},n._getCancelAnimationFrame=function(){return this._state===e.XRSessionState.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 t=this._rhi,n=this._platformSession,r=this._engine;t._mainFrameBuffer=null,t._mainFrameWidth=t._mainFrameHeight=0,n.removeEventListener(),this._platformSession=null,this._state=e.XRSessionState.None,this._xrManager._onSessionExit(),r.isPaused||(r.pause(),r.resume())},n._onDestroy=function(){},i(t,[{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}}]),t}(),b=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,n=Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];if(this.sessionManager._platformSession)throw Error("Cannot add feature when the session is initialized.");for(var i=this._features,o=0,c=i.length;o<c;o++)if(s(i[o],e))throw Error("The feature has been added");var u=r(e,[].concat(this,n));return this._features.push(u),u},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.getFeatures=function(e,t){t?t.length=0:t=[];for(var n=this._features,r=0,a=n.length;r<a;r--){var i=n[r];s(i,e)&&t.push(i)}return t},a.enterXR=function(e,t){void 0===t&&(t=!0);var n=this,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._initialize(e,n._features).then(function(){t&&r.run(),a()},i)},i)})},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 M(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._getCameraClearFlagsMask=function(e){return this.cameraManager._getCameraClearFlagsMask(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:"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 w(e){return function(t){b._featureMap.set(t,e)}}b._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,[b]);var E=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.TrackableType=void 0,(d=e.TrackableType||(e.TrackableType={}))[d.Plane=1]="Plane",d[d.All=1]="All";var x=function(){this.point=new t.Vector3,this.normal=new t.Vector3};function P(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.XRFeatureType=void 0,(_=e.XRFeatureType||(e.XRFeatureType={}))[_.AnchorTracking=0]="AnchorTracking",_[_.ImageTracking=1]="ImageTracking",_[_.PlaneTracking=2]="PlaneTracking",_[_.HitTest=3]="HitTest",e.XRRequestTrackingState=void 0,(m=e.XRRequestTrackingState||(e.XRRequestTrackingState={}))[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";var C=function(t){function n(){var e;return e=t.apply(this,arguments)||this,e._requestTrackings=[],e._tracked=[],e._added=[],e._updated=[],e._removed=[],e._statusSnapshot={},e._listeners=[],e}o(n,t);var r=n.prototype;return r.addChangedListener=function(e){this._listeners.push(e)},r.removeChangedListener=function(e){var t=this._listeners,n=t.indexOf(e);n>=0&&t.splice(n,1)},r._onUpdate=function(){var t=this._xrManager.sessionManager._platformSession,n=t.frame,r=this._platformFeature,a=this._listeners,i=this._requestTrackings,o=this._statusSnapshot,s=this._tracked,c=this._added,u=this._updated,h=this._removed;if(n&&i.length&&r.checkAvailable(t,n,i)){c.length=u.length=h.length=0,r.getTrackedResult(t,n,i,this._generateTracked);for(var l=0,p=i.length;l<p;l++){var f=i[l];switch(f.state){case e.XRRequestTrackingState.Destroyed:for(var g=f.tracked,d=0,_=g.length;d<_;d++){var m=g[d],v=m.id;o[v]===e.XRTrackingState.Tracking&&(h.push(m),s.splice(s.indexOf(m),1)),o[v]=e.XRTrackingState.NotTracking}break;case e.XRRequestTrackingState.Resolved:for(var R=f.tracked,k=0,T=R.length;k<T;k++){var S=R[k],y=S.id;S.state===e.XRTrackingState.Tracking?o[y]===e.XRTrackingState.Tracking?u.push(S):(c.push(S),o[y]=e.XRTrackingState.Tracking,s.push(S)):(o[y]===e.XRTrackingState.Tracking&&(h.push(S),s.splice(s.indexOf(S),1)),o[y]=S.state)}}}for(var X=i.length-1;X>=0;X--)i[X].state===e.XRRequestTrackingState.Destroyed&&i.splice(X,1);if(c.length>0||u.length>0||h.length>0)for(var M=0,b=a.length;M<b;M++)a[M](c,u,h)}},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},r._onDestroy=function(){this._requestTrackings.length=this._tracked.length=this._added.length=this._updated.length=this._removed.length=0},r._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)},r._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)},r._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])},n}(E);C._uuid=0,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 I=function(){this.state=e.XRRequestTrackingState.None,this.tracked=[]},F=function(e){function t(t){var n;return(n=e.call(this)||this).detectionMode=t,n}return o(t,e),t}(I),D=function(){this.pose=new k,this.state=e.XRTrackingState.NotTracking},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}(D);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 F(r)),a}return o(n,t),n.prototype._generateTracked=function(){var e=new q;return e.id=C._uuid++,e},i(n,[{key:"detectionMode",get:function(){return this._requestTrackings[0].detectionMode}},{key:"trackedPlanes",get:function(){return this._tracked}}]),n}(C),e.XRPlaneTracking=P([w(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,l=u.length;h<l;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 f=n.intersectPlane(i);if(f>=0&&(n.getPoint(f,s),t.Vector3.transformToVec3(s,p.pose.inverseMatrix,c),this._checkPointerWithinPlane(c,p))){var g=new x;g.point.copyFrom(s),g.normal.copyFrom(o),g.distance=f,g.trackedObject=p,g.trackableType=e.TrackableType.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 l=o[h];t.Vector3.subtract(l,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=l}return!0},r}(E),e.XRHitTest=P([w(e.XRFeatureType.HitTest)],e.XRHitTest);var A=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(D),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}(I);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=C._uuid++,e},i(n,[{key:"trackingAnchors",get:function(){return this._anchors}},{key:"trackedAnchors",get:function(){return this._tracked}}]),n}(C),e.XRAnchorTracking=P([w(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}(I),N=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(D);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 N;return e.id=C._uuid++,e},i(n,[{key:"trackingImages",get:function(){return this._trackingImages}},{key:"trackedImages",get:function(){return this._tracked}}]),n}(C),e.XRImageTracking=P([w(e.XRFeatureType.ImageTracking)],e.XRImageTracking),e.XRAnchor=A,e.XRCamera=S,e.XRCameraManager=R,e.XRController=y,e.XRFeature=E,e.XRHitResult=x,e.XRInputManager=X,e.XRPose=k,e.XRReferenceImage=function(e,t,n){this.name=e,this.imageSource=t,this.physicalWidth=n},e.XRSessionManager=M,e.XRTrackedImage=N,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.Initialized=1]="Initialized",u[u.Running=2]="Running",u[u.Paused=3]="Paused";var c,u,h,p,l,f,g,d,_,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,p=u.y,l=u.width,f=u.height;h===c.x&&p===c.y&&l===c.z&&f===c.w||(i.viewport=c.set(h,p,l,f)),t.Matrix.equals(i.projectionMatrix,a.projectionMatrix)||(i.projectionMatrix=a.projectionMatrix)}}},r._onSessionExit=function(){},r._getCameraClearFlagsMask=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}(),k=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},S=function(e){function n(){var n;return n=e.apply(this,arguments)||this,n.pose=new k,n.viewport=new t.Rect,n.projectionMatrix=new t.Matrix,n}return o(n,e),n}(T);e.XRInputButton=void 0,(p=e.XRInputButton||(e.XRInputButton={}))[p.None=0]="None",p[p.Select=1]="Select",p[p.Trigger=1]="Trigger",p[p.Squeeze=2]="Squeeze",p[p.TouchPad=4]="TouchPad",p[p.AButton=8]="AButton",p[p.BButton=16]="BButton";var y=function(t){function n(){var n;return n=t.apply(this,arguments)||this,n.gripPose=new k,n.targetRayPose=new k,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,(l=e.XRInputEventType||(e.XRInputEventType={}))[l.SelectStart=0]="SelectStart",l[l.Select=1]="Select",l[l.SelectEnd=2]="SelectEnd",l[l.SqueezeStart=3]="SqueezeStart",l[l.Squeeze=4]="Squeeze",l[l.SqueezeEnd=5]="SqueezeEnd",e.XRTargetRayMode=void 0,(f=e.XRTargetRayMode||(e.XRTargetRayMode={}))[f.Gaze=0]="Gaze",f[f.TrackedPointer=1]="TrackedPointer",f[f.Screen=2]="Screen";var X=function(){function t(t,n){this._xrManager=t,this._engine=n,this._cameras=[],this._controllers=[],this._added=[],this._removed=[],this._trackedDevices=[],this._statusSnapshot=[],this._listeners=[];for(var r=this._trackedDevices,a=this._controllers,i=this._cameras,o=0;o<6;o++)switch(o){case e.XRTrackedInputDevice.Camera:case e.XRTrackedInputDevice.LeftCamera:case e.XRTrackedInputDevice.RightCamera:i.push(r[o]=new S(o));break;case e.XRTrackedInputDevice.Controller:case e.XRTrackedInputDevice.LeftController:case e.XRTrackedInputDevice.RightController:a.push(r[o]=new y(o))}this._statusSnapshot.fill(e.XRTrackingState.NotTracking,0,r.length)}var n=t.prototype;return n.getTrackedDevice=function(e){return this._trackedDevices[e]},n.addTrackedDeviceChangedListener=function(e){this._listeners.push(e)},n.removeTrackedDeviceChangedListener=function(e){var t=this._listeners,n=t.indexOf(e);n>=0&&t.splice(n,1)},n._onUpdate=function(){var t=this._added,n=this._removed,r=this._listeners,a=this._statusSnapshot,i=this._trackedDevices,o=this._controllers;t.length=n.length=0;for(var s=0,c=o.length;s<c;s++){var u=o[s];u.down=u.up=0}for(var h=this._xrManager.sessionManager._platformSession,p=h.events,l=0,f=p.length;l<f;l++)this._handleEvent(p[l]);h.resetEvents(),h.frame.updateInputs(i);for(var g=0,d=i.length;g<d;g++){var _=i[g];if(_){var m=_.trackingState;a[g]===e.XRTrackingState.Tracking?m!==e.XRTrackingState.Tracking&&n.push(_):m===e.XRTrackingState.Tracking&&t.push(_),a[g]=m}}if(t.length>0||n.length>0)for(var v=0,R=r.length;v<R;v++)r[v](t,n)},n._onDestroy=function(){this._listeners.length=0},n._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))}}},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)},t}();e.XRSessionMode=void 0,(g=e.XRSessionMode||(e.XRSessionMode={}))[g.None=0]="None",g[g.AR=1]="AR",g[g.VR=2]="VR";var M=function(){function t(t,n){this._xrManager=t,this._engine=n,this._mode=e.XRSessionMode.None,this._state=e.XRSessionState.None,this._rhi=n._hardwareRenderer,this._raf=requestAnimationFrame.bind(window),this._caf=cancelAnimationFrame.bind(window),this._onSessionExit=this._onSessionExit.bind(this)}var n=t.prototype;return n.isSupportedMode=function(e){return this._xrManager._platformDevice.isSupportedSessionMode(e)},n.run=function(){var t=this._platformSession,n=this._engine;if(!t)throw Error("Without session to run.");t.start(),this._state=e.XRSessionState.Running,this._xrManager._onSessionStart(),n.isPaused||(n.pause(),n.resume())},n.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._state=e.XRSessionState.Paused,this._xrManager._onSessionStop(),n.isPaused||(n.pause(),n.resume())},n._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._state=e.XRSessionState.Initialized,n.setSessionExitCallBack(r._onSessionExit),n.addEventListener(),o._onSessionInit(),a()},i)})},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===e.XRSessionState.Running?this._platformSession.requestAnimationFrame:this._raf},n._getCancelAnimationFrame=function(){return this._state===e.XRSessionState.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 t=this._rhi,n=this._platformSession,r=this._engine;t._mainFrameBuffer=null,t._mainFrameWidth=t._mainFrameHeight=0,n.removeEventListener(),this._platformSession=null,this._state=e.XRSessionState.None,this._xrManager._onSessionExit(),r.isPaused||(r.pause(),r.resume())},n._onDestroy=function(){},i(t,[{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}}]),t}(),b=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,n=Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];if(this.sessionManager._platformSession)throw Error("Cannot add feature when the session is initialized.");for(var i=this._features,o=0,c=i.length;o<c;o++)if(s(i[o],e))throw Error("The feature has been added");var u=r(e,[].concat(this,n));return this._features.push(u),u},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.getFeatures=function(e,t){t?t.length=0:t=[];for(var n=this._features,r=0,a=n.length;r<a;r--){var i=n[r];s(i,e)&&t.push(i)}return t},a.enterXR=function(e,t){void 0===t&&(t=!0);var n=this,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._initialize(e,n._features).then(function(){t&&r.run(),a()},i)},i)})},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 M(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._getCameraClearFlagsMask=function(e){return this.cameraManager._getCameraClearFlagsMask(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:"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 w(e){return function(t){b._featureMap.set(t,e)}}b._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,[b]);var E=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.TrackableType=void 0,(d=e.TrackableType||(e.TrackableType={}))[d.Plane=1]="Plane",d[d.All=1]="All";var x=function(){this.point=new t.Vector3,this.normal=new t.Vector3};function P(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.XRFeatureType=void 0,(_=e.XRFeatureType||(e.XRFeatureType={}))[_.AnchorTracking=0]="AnchorTracking",_[_.ImageTracking=1]="ImageTracking",_[_.PlaneTracking=2]="PlaneTracking",_[_.HitTest=3]="HitTest",e.XRRequestTrackingState=void 0,(m=e.XRRequestTrackingState||(e.XRRequestTrackingState={}))[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";var C=function(t){function n(){var e;return e=t.apply(this,arguments)||this,e._requestTrackings=[],e._tracked=[],e._added=[],e._updated=[],e._removed=[],e._statusSnapshot={},e._listeners=[],e}o(n,t);var r=n.prototype;return r.addChangedListener=function(e){this._listeners.push(e)},r.removeChangedListener=function(e){var t=this._listeners,n=t.indexOf(e);n>=0&&t.splice(n,1)},r._onUpdate=function(){var t=this._xrManager.sessionManager._platformSession,n=t.frame,r=this._platformFeature,a=this._listeners,i=this._requestTrackings,o=this._statusSnapshot,s=this._tracked,c=this._added,u=this._updated,h=this._removed;if(n&&i.length&&r.checkAvailable(t,n,i)){c.length=u.length=h.length=0,r.getTrackedResult(t,n,i,this._generateTracked);for(var p=0,l=i.length;p<l;p++){var f=i[p];switch(f.state){case e.XRRequestTrackingState.Destroyed:for(var g=f.tracked,d=0,_=g.length;d<_;d++){var m=g[d],v=m.id;o[v]===e.XRTrackingState.Tracking&&(h.push(m),s.splice(s.indexOf(m),1)),o[v]=e.XRTrackingState.NotTracking}break;case e.XRRequestTrackingState.Resolved:for(var R=f.tracked,k=0,T=R.length;k<T;k++){var S=R[k],y=S.id;S.state===e.XRTrackingState.Tracking?o[y]===e.XRTrackingState.Tracking?u.push(S):(c.push(S),o[y]=e.XRTrackingState.Tracking,s.push(S)):(o[y]===e.XRTrackingState.Tracking&&(h.push(S),s.splice(s.indexOf(S),1)),o[y]=S.state)}}}for(var X=i.length-1;X>=0;X--)i[X].state===e.XRRequestTrackingState.Destroyed&&i.splice(X,1);if(c.length>0||u.length>0||h.length>0)for(var M=0,b=a.length;M<b;M++)a[M](c,u,h)}},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},r._onDestroy=function(){this._requestTrackings.length=this._tracked.length=this._added.length=this._updated.length=this._removed.length=0},r._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)},r._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)},r._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])},n}(E);C._uuid=0,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 I=function(){this.state=e.XRRequestTrackingState.None,this.tracked=[]},F=function(e){function t(t){var n;return(n=e.call(this)||this).detectionMode=t,n}return o(t,e),t}(I),D=function(){this.pose=new k,this.state=e.XRTrackingState.NotTracking},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}(D);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 F(r)),a}return o(n,t),n.prototype._generateTracked=function(){var e=new q;return e.id=C._uuid++,e},i(n,[{key:"detectionMode",get:function(){return this._requestTrackings[0].detectionMode}},{key:"trackedPlanes",get:function(){return this._tracked}}]),n}(C),e.XRPlaneTracking=P([w(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,p=u.length;h<p;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 f=n.intersectPlane(i);if(f>=0&&(n.getPoint(f,s),t.Vector3.transformToVec3(s,l.pose.inverseMatrix,c),this._checkPointerWithinPlane(c,l))){var g=new x;g.point.copyFrom(s),g.normal.copyFrom(o),g.distance=f,g.trackedObject=l,g.trackableType=e.TrackableType.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 p=o[h];t.Vector3.subtract(p,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=p}return!0},r}(E),e.XRHitTest=P([w(e.XRFeatureType.HitTest)],e.XRHitTest);var A=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(D),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}(I);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=C._uuid++,e},i(n,[{key:"trackingAnchors",get:function(){return this._anchors}},{key:"trackedAnchors",get:function(){return this._tracked}}]),n}(C),e.XRAnchorTracking=P([w(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}(I),N=function(e){function t(){return e.apply(this,arguments)}return o(t,e),t}(D);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 N;return e.id=C._uuid++,e},i(n,[{key:"trackingImages",get:function(){return this._trackingImages}},{key:"trackedImages",get:function(){return this._tracked}}]),n}(C),e.XRImageTracking=P([w(e.XRFeatureType.ImageTracking)],e.XRImageTracking),e.XRAnchor=A,e.XRCamera=S,e.XRCameraManager=R,e.XRController=y,e.XRFeature=E,e.XRHitResult=x,e.XRInputManager=X,e.XRPose=k,e.XRReferenceImage=function(e,t,n){this.name=e,this.imageSource=t,this.physicalWidth=n},e.XRSessionManager=M,e.XRTrackedImage=N,e.XRTrackedPlane=q,Object.defineProperty(e,"__esModule",{value:!0})});
package/dist/main.js CHANGED
@@ -456,21 +456,25 @@ exports.XRTargetRayMode = void 0;
456
456
  }
457
457
  break;
458
458
  case exports.XRTargetRayMode.Screen:
459
+ var _this = this, engine = _this._engine;
459
460
  // @ts-ignore
460
- var canvas = this._engine.canvas._webCanvas;
461
+ var target = engine.inputManager._pointerManager._target;
462
+ // @ts-ignore
463
+ var canvas = engine.canvas._webCanvas;
461
464
  var clientWidth = canvas.clientWidth, clientHeight = canvas.clientHeight;
462
465
  var clientX = clientWidth * (event.x + 1) * 0.5;
463
466
  var clientY = clientHeight * (event.y + 1) * 0.5;
467
+ // @ts-ignore
464
468
  switch(event.type){
465
469
  case exports.XRInputEventType.SelectStart:
466
- canvas.dispatchEvent(this._makeUpPointerEvent("pointerdown", event.id, clientX, clientY));
470
+ target.dispatchEvent(this._makeUpPointerEvent("pointerdown", event.id, clientX, clientY));
467
471
  break;
468
472
  case exports.XRInputEventType.Select:
469
- canvas.dispatchEvent(this._makeUpPointerEvent("pointermove", event.id, clientX, clientY));
473
+ target.dispatchEvent(this._makeUpPointerEvent("pointermove", event.id, clientX, clientY));
470
474
  break;
471
475
  case exports.XRInputEventType.SelectEnd:
472
- canvas.dispatchEvent(this._makeUpPointerEvent("pointerup", event.id, clientX, clientY));
473
- canvas.dispatchEvent(this._makeUpPointerEvent("pointerleave", event.id, clientX, clientY));
476
+ target.dispatchEvent(this._makeUpPointerEvent("pointerup", event.id, clientX, clientY));
477
+ target.dispatchEvent(this._makeUpPointerEvent("pointerleave", event.id, clientX, clientY));
474
478
  break;
475
479
  }
476
480
  break;