UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.94 kB
import{EventHandler as e}from"../../core/event-handler.js";import{platform as t}from"../../core/platform.js";import{XrTrackedImage as s}from"./xr-tracked-image.js";class i extends e{constructor(e){super(),this._manager=void 0,this._supported=t.browser&&!!window.XRImageTrackingResult,this._available=!1,this._images=[],this._manager=e,this._supported&&(this._manager.on("start",this._onSessionStart,this),this._manager.on("end",this._onSessionEnd,this))}add(e,t){if(!this._supported||this._manager.active)return null;const i=new s(e,t);return this._images.push(i),i}remove(e){if(this._manager.active)return;const t=this._images.indexOf(e);-1!==t&&(e.destroy(),this._images.splice(t,1))}_onSessionStart(){this._manager.session.getTrackedImageScores().then((e=>{this._available=!0;for(let t=0;t<e.length;t++)this._images[t]._trackable="trackable"===e[t]})).catch((e=>{this._available=!1,this.fire("error",e)}))}_onSessionEnd(){this._available=!1;for(let e=0;e<this._images.length;e++){const t=this._images[e];t._pose=null,t._measuredWidth=0,t._tracking&&(t._tracking=!1,t.fire("untracked"))}}prepareImages(e){this._images.length?Promise.all(this._images.map((e=>e.prepare()))).then((t=>{e(null,t)})).catch((t=>{e(t,null)})):e(null,null)}update(e){if(!this._available)return;const t=e.getImageTrackingResults(),s={};for(let i=0;i<t.length;i++){s[t[i].index]=t[i];const a=this._images[t[i].index];a._emulated="emulated"===t[i].trackingState,a._measuredWidth=t[i].measuredWidthInMeters,a._pose=e.getPose(t[i].imageSpace,this._manager._referenceSpace)}for(let e=0;e<this._images.length;e++)this._images[e]._tracking&&!s[e]?(this._images[e]._tracking=!1,this._images[e].fire("untracked")):!this._images[e]._tracking&&s[e]&&(this._images[e]._tracking=!0,this._images[e].fire("tracked"))}get supported(){return this._supported}get available(){return this._available}get images(){return this._images}}i.EVENT_ERROR="error";export{i as XrImageTracking};