DeviceOrientationControls=function(e){var t=this;this.object=e,this.object.rotation.reorder("YXZ"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;var o,n,i,a,r=function(e){t.deviceOrientation=e},s=function(){t.screenOrientation=window.orientation||0},l=(o=new THREE.Vector3(0,0,1),n=new THREE.Euler,i=new THREE.Quaternion,a=new THREE.Quaternion(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(e,t,r,s,l){n.set(r,t,-s,"YXZ"),e.setFromEuler(n),e.multiply(a),e.multiply(i.setFromAxisAngle(o,-l))});this.connect=function(){s(),window.addEventListener("orientationchange",s,!1),window.addEventListener("deviceorientation",r,!1),t.enabled=!0},this.disconnect=function(){window.removeEventListener("orientationchange",s,!1),window.removeEventListener("deviceorientation",r,!1),t.enabled=!1},this.update=function(){if(!1!==t.enabled){var e=t.deviceOrientation;if(e){var o=e.alpha?THREE.MathUtils.degToRad(e.alpha)+t.alphaOffset:0,n=e.beta?THREE.MathUtils.degToRad(e.beta):0,i=e.gamma?THREE.MathUtils.degToRad(e.gamma):0,a=t.screenOrientation?THREE.MathUtils.degToRad(t.screenOrientation):0;l(t.object.quaternion,o,n,i,a)}}},this.dispose=function(){t.disconnect()},this.connect()};class videoStream{constructor(e){var t=this;void 0===e.canvas&&(e.canvas=null),void 0===e.domID&&(e.domID="bgVideo"),void 0===e.distance&&(e.distance=0),void 0===e.useSceneBackground&&(e.useSceneBackground=!0),void 0===e.usePlaneVideo&&(e.useSceneBackground?e.usePlaneVideo=!1:e.usePlaneVideo=!0),void 0===e.keepStreamRatio&&(e.keepStreamRatio=!1),void 0===e.facingMode&&(e.facingMode="environment"),t.notOnDocument=e.notOnDocument,t.isSlam=e.isSlam,t.domID=e.domID,t.canvas=e.canvas,t.parent=e.parent,t.distance=e.distance,t.idealWidth=e.width,t.idealHeight=e.height,t.camera=e.camera,t.noVideoTexture=e.noVideoTexture,t.useSceneBackground=e.useSceneBackground,t.usePlaneVideo=e.usePlaneVideo,t.keepStreamRatio=e.keepStreamRatio,t.callBackSuccess=e.callBackSuccess,t.callBackFail=e.callBackFail,t.facingMode=e.facingMode,t.planeVideo=null,t.videoMat=null,t.stream=null,t.streamW=0,t.streamH=0,t.streamRatio=1,t.videoTex=null,t.isOnHold=!1,t.isReady=!1,t.stopped=!1,t.timerStreamResized=null,t.useCanvasBlit=e.useCanvasBlit,t.canvasBlit=null,t.ctxBlit=null,t.getStreamFromIframe=!1,t.usingSelfieCamera=!1,t.notOnDocument?(console.log("--- not on document ---"),removeElementByID("bgVideo"),t.domVideo=document.createElement("video"),t.domVideo.setAttribute("autoplay","autoplay"),t.domVideo.setAttribute("playsinline","playsinline"),t.domVideo.setAttribute("webkit-playsinline","webkit-playsinline"),t.domVideo.id="wawa"):(t.domVideo=document.getElementById(t.domID),t.domVideo||console.log("ERROR : no video id "+t.domID+" found")),t.domVideo.onpause=function(){console.log("WARNING: BG _video has been paused")},t.getStream(t.callBackSuccess,t.callBackFail)}getStream(e,t){var o=this;addToLog("=> videostream : get stream");var n=o.domVideo;n.autoplay=!0,n.playsInline=!0,n.muted=!0,n.style.zIndex="-1";var i={audio:!1,video:{facingMode:{exact:o.facingMode}}};if(_browser.computer){i={};var a=navigator.mediaDevices.getSupportedConstraints(),r=!0;a.facingMode&&(r={width:{ideal:o.idealWidth},height:{ideal:o.idealHeight},facingMode:{ideal:o.facingMode}}),i.video=r,a.audio&&(i.audio=!1)}else o.idealWidth&&o.idealHeight&&(i.video.width={min:640,ideal:o.idealWidth,max:1280},i.video.height={min:480,ideal:o.idealHeight,max:720});var s=function(e){addToLog("==> video fail"),console.log(e),t.call(this,e)};if(o.getStreamFromIframe)window.addEventListener("message",(function(e){if("camera"==e.data.failed)return console.log("got a camera fail"),void s({name:e.data.error});e.data.stream&&(null==o.stream?o.successFromParent(e.data.w,e.data.h):o.updateCanvasBlit(e.data.image[0]))}),!1),_app.common.postMessage({request:"camera",version:_browser.version,browserName:_browser.name,constraints:i});else{if(_browser.insideIframe&&_app.compEngine.isPaused&&"floating"==_app.compEngine.trackingMode)return console.log("------ put on hold, floating compEngine is paused ------"),void(o.isOnHold=!0);o.isOnHold=!1,navigator.mediaDevices.getUserMedia(i).then((function(n){_config.isDebug&&console.log("-> success getUserMedia: ok");var i=o.domVideo;if(i.srcObject=n,o.stream=n,_config.isDebug&&!_browser.computer){let{width:e,height:t}=n.getTracks()[0].getSettings();(e<720||t<720)&&alert("error resolution "+e+"x"+t)}const a=setTimeout((function(){console.log("timer... wait play timeout"),openModal({h2:"The camera is already used in another tab",p:"Close all browser tabs using the camera",callbackYes:function(){location.reload()}})}),2e3);i.play().then((function(){clearTimeout(a),i.paused&&(console.log("video stream is paused"),"samsungbrowser"==_browser.name)?t.call(this,err):o.gotStream(e)})).catch((function(e){console.log("-> domVideo play: fail"),console.log(e),t.call(this,e)}))})).catch(s)}window.addEventListener("beforeunload",(function(e){o.stop()}))}successFromParent(e,t){var o=this;addToLog("-> got stream from parent"),o.stream=!0,o.domVideo={videoWidth:e,videoHeight:t},o.useCanvasBlit=!0,o.gotStream(callBackSuccess)}createCanvasBlit(){var e=this;e.canvasBlit=document.createElement("canvas"),e.canvasBlit.width=e.streamW,e.canvasBlit.height=e.streamH,e.isSlam&&(e.canvasBlit.width=_slamCanvasSize.width,e.canvasBlit.height=_slamCanvasSize.height),e.ctxBlit=e.canvasBlit.getContext("2d")}updateCanvasBlit(e){var t=this;if(t.ctxBlit){var o=t.canvasBlit.width,n=t.canvasBlit.height;t.ctxBlit.drawImage(e,0,0,o,n)}else console.log("WARNING: no c.ctxBlit")}swapCamera(){var e=this;e.getStreamFromIframe||e.stream.getTracks()[0].stop();"environment"==e.facingMode?(e.facingMode="user",e.usingSelfieCamera=!0):(e.facingMode="environment",e.usingSelfieCamera=!1),e.getStream(e.callBackSuccess,e.callBackFail)}gotStream(e){var t=this;t.streamW=t.domVideo.videoWidth,t.streamH=t.domVideo.videoHeight,t.streamRatio=t.streamW/t.streamH,t.useCanvasBlit?(t.createCanvasBlit(),t.noVideoTexture?t.notOnDocument||t.addVideoToDom():(t.videoTex=new THREE.CanvasTexture(t.canvasBlit),t.videoTex.colorSpace=THREE.SRGBColorSpace,t.setAsSceneBackground())):(t.videoTex=new THREE.VideoTexture(t.domVideo),t.videoTex.colorSpace=THREE.SRGBColorSpace,t.usePlaneVideo&&t.setAsPlane(),t.useSceneBackground&&t.setAsSceneBackground()),t.isReady=!0,e.call(this)}addCanvasToDom(){addToLog("add canvasBlit to dom");var e=this.canvasBlit,t=document.getElementById("mainScreen");e.id="canvasBlit",e.style.position="absolute",e.style.display="block",e.style.top="0",e.style.left="0",e.style.touchAction="none",e.style.pointerEvents="none",e.style.width=_canvas.width/2+"px",e.style.height=_canvas.height/2+"px",t.appendChild(e)}addVideoToDom(){var e=this.domVideo,t=document.getElementById("mainScreen");e.style.position="absolute",e.style.display="block",e.style.top="0",e.style.left="0",e.style.zIndex="-1",e.style.touchAction="none",e.style.pointerEvents="none",e.style.transform="none";var o=_canvas.width/_canvas.height;e.style.width=_canvas.width/2+"px",e.style.height=_canvas.height/2+"px",o>16/9?e.style.width="auto":e.style.height="auto",t.appendChild(e)}setAsPlane(){var e=this;e.videoMat=new THREE.MeshBasicMaterial({map:e.videoTex});var t=new THREE.PlaneGeometry(1,1);e.planeVideo=new THREE.Mesh(t,e.videoMat),e.planeVideo.name="planeVideo",e.parent.add(e.planeVideo),e.planeVideo.position.set(0,0,-1*e.distance),e.fitToScreen(),e.timerStreamResized=setInterval((function(){e.checkSizes(e)}),500)}setAsSceneBackground(){var e=this;if(e.videoTex){if(e.videoTex.offset.set(0,0),e.videoTex.center.set(.5,.5),e.keepStreamRatio)console.log("warning: keepStreamRatio");else{var t=window.innerWidth/window.innerHeight;e.canvas&&(t=e.canvas.width/e.canvas.height),e.streamW=e.domVideo.videoWidth,e.streamH=e.domVideo.videoHeight,e.streamRatio=e.streamW/e.streamH;var o=1;e.usingSelfieCamera&&(o=-1),tn&&(n=o),n*=1.01;var i=e.domVideo.videoWidth/e.domVideo.videoHeight,a=n,r=n/i;i>=e.camera.aspect&&(r=n,a=n*i),e.planeVideo.scale.set(a,r,1)}}checkSizes(e){e.streamW!=e.domVideo.videoWidth&&(e.streamW=e.domVideo.videoWidth,e.streamH=e.domVideo.videoHeight,e.domVideo.width=e.streamW,e.domVideo.height=e.streamH),e.fitToScreen()}}function getLanguageCode(){var e=_browser.la;const t=new URLSearchParams(window.location.search);return t.get("la")&&2==t.get("la").length&&(e=t.get("la")),e}function setText(e,t){var o;for(o=0;o=e.length)}function excerpt(e,t){return e.length>t&&(e=e.substr(0,e.lastIndexOf(" ",t))+"..."),e}function removeElementByID(e){var t=document.getElementById(e);t&&t.parentElement.removeChild(t)}function cleanString(e){var t=document.createElement("div");t.innerHTML=e;var o=t.innerText;return t=null,o}function validateURL(e){return e=cleanString(e),!!/^(f|ht)tps?:\/\//i.test(e)&&(-1!=e.indexOf(".")&&!(e.split(".").pop().length<2))}function getDistance(e,t){var o=t.x-e.x,n=t.y-e.y,i=t.z-e.z;return Math.sqrt(o*o+n*n+i*i)}function get3PointsAngle(e,t,o){return Math.atan2(t.y-e.y,t.x-e.x)-Math.atan2(o.y-e.y,o.x-e.x)}function addToLog(e){if(_config.isDebug){console.log(e);var t=document.getElementById("mainLog");t&&(t.textContent=e+"\n"+t.textContent)}}function setToLog(e){if(_config.isDebug){var t=document.getElementById("mainLog");t&&(t.textContent=e)}}function addToLogAngle(e){var t={x:THREE.MathUtils.radToDeg(e.x),y:THREE.MathUtils.radToDeg(e.y),z:THREE.MathUtils.radToDeg(e.z)};t.x=parseInt(t.x),t.y=parseInt(t.y),t.z=parseInt(t.z),addToLog("_ "+t.x+" _ "+t.y+" _ "+t.z)}function logScene(e=!1,t=!1,o=!1){var n=_app.compEngine.scene3,i=" <"+n.type+"> "+n.name;console.group(i),n.children.forEach(n=>function n(i){var a=" <"+i.type+"> "+i.name;e&&(a+=" P "+JSON.stringify(i.position).replaceAll('"',"")),t&&(a+=" R "+JSON.stringify(i.rotation).replaceAll('"',"")),o&&(a+=" S "+i.scale.x),i.visible||(a+=" hidden"),i.isMesh?(i.geometry&&i.geometry.groups&&i.geometry.groups.length>1&&(a+=" geo groups x "+i.geometry.groups.length),console.group("%c"+a,"color: green;")):console.group(a),"dotsGrid"!=i.name&&"transformControls"!=i.name&&i.children.forEach(e=>n(e)),console.groupEnd()}(n)),console.groupEnd()}function openModalError(e,t,o){t&&testLoggedOut(t.error)||(e||(e="Something went wrong"),t&&(t.message&&(e+="\n\n"+t.message),!t.message&&t.error&&(e+="\n(error: "+t.error+")")),openModal({h2:"Error",p:e,callbackYes:o}))}function openModal(e){var t=null,o=null;void 0!==e.callbackYes&&(t=e.callbackYes),void 0!==e.callbackNo&&(o=e.callbackNo),(e.yesButton||e.noButton)&&(e.buttons=!0),void 0===e.buttons&&(e.buttons=!0),void 0===e.closeButton&&(e.closeButton=!1);var n=document.createElement("div");n.id="bgModal";var i=document.createElement("div");i.id="alertModal",e.class&&i.classList.add(e.class);var a=document.createElement("div");a.className="text",i.appendChild(a);var r,s,l=e.h2,c=e.p,d=e.image,u=e.video;l&&""!=l&&((s=document.createElement("h2")).innerText=l,a.appendChild(s),i.classList.add("h2"));d&&(r=(r=(r=d.url).replace(/script/gi,"")).replace(/fromCharCode/gi,""),(s=document.createElement("img")).src=r,a.appendChild(s));u&&(r=(r=(r=u.url).replace(/script/gi,"")).replace(/fromCharCode/gi,""),(s=document.createElement("video")).src=r,s.autoplay=!0,s.controls=!0,a.appendChild(s));c&&""!=c&&((s=document.createElement("p")).innerText=c,"left"==e.textalign&&(s.style.textAlign="left"),a.appendChild(s),i.classList.add("p"));e.buttons&&((s=document.createElement("div")).className="buttons",i.appendChild(s));n.appendChild(i),document.body.appendChild(n);var m=function(e){var t=document.getElementById("bgModal");t&&t.parentElement.removeChild(t),null!=e&&null!=e&&e.call(this)},p=null;if(e.closeButton&&((p=document.createElement("div")).className="b_close",i.appendChild(p),$("#alertModal .b_close").on("click",(function(){m(o)}))),e.buttons){var g="";e.yesButton&&(e.yesButton=e.yesButton.replace(/script/gi,"")),e.yesButton&&(e.yesButton=e.yesButton.replace(/fromCharCode/gi,"")),e.noButton&&(e.noButton=e.noButton.replace(/script/gi,"")),e.noButton&&(e.noButton=e.noButton.replace(/fromCharCode/gi,"")),e.OKButton&&(e.OKButton=e.OKButton.replace(/script/gi,"")),e.OKButton&&(e.OKButton=e.OKButton.replace(/fromCharCode/gi,"")),void 0===e.OKButton&&(e.OKButton="OK"),e.yesButton&&e.noButton?(g+=''+e.yesButton+"",g+=''+e.noButton+""):g+=''+e.OKButton+"",i.querySelector(".buttons").innerHTML=g,$("#alertModal .button.ok, #alertModal .button.yes").on("click",(function(){m(t)})),$("#alertModal .button.no").on("click",(function(){m(o)}))}else i.classList.add("noButtons");if(e.titleColor&&i.querySelector("h2")&&(i.querySelector("h2").style.color=e.titleColor),e.textColor&&i.querySelector("p")&&(i.querySelector("p").style.color=e.textColor),e.bgColor){i.style.backgroundColor=e.bgColor;var h=e.bgColor.substring(1),f=parseInt(h,16);.21*(f>>16&255)+.71*(f>>8&255)+.07*(f>>0&255)<100&&p&&(p.className+=" white")}i.setAttribute("tabindex","0"),i.focus(),i.addEventListener("keydown",e=>{13==e.keyCode&&m(t)})}function removeModal(){removeElementByID("bgModal")}function isModalOpen(){return!!document.getElementById("bgModal")}class libraryItem{constructor(e,t){var o=this;o.library=e,o.compEngine=e.compEngine,o.checkUsageUtils=new checkUsageUtils(o.compEngine.data);for(const e in t)o[e]=t[e];o.scenesUsed=[],o.status=null,o.fileSize||(o.fileSize=0);var n,i,a=o.compEngine.data.composition;for(n=0;no.maxBackgroundFileSize)return}var r=!1;if(o.assetsLoadingQueue.forEach((function(e){e.uid==a.uid&&(r=!0)})),!r){var s,l=!1;for(s=0;s library q completed"),e.isLoaded=!0,e.updateLoader(100),e.onLoadedCallback&&(e.onLoadedCallback.call(e),e.onLoadedCallback=null)}needStartScreen(){this.compEngine.needStartScreen()}getItemByUid(e){var t,o=this.libItems;for(t=0;te&&(o=e/2),2*o>t&&(o=t/2);const n=o,i=16,a=e/2-n,r=t/2-n,s=e/2,l=t/2,c=n/e,d=(e-n)/e,u=n/t,m=(t-n)/t;let p,g,h,f,v,y=[-a,-l,0,a,-l,0,a,l,0,-a,-l,0,a,l,0,-a,l,0,-s,-r,0,-a,-r,0,-a,r,0,-s,-r,0,-a,r,0,-s,r,0,a,-r,0,s,-r,0,s,r,0,a,-r,0,s,r,0,a,r,0],b=[c,0,d,0,d,1,c,0,d,1,c,1,0,u,c,u,c,m,0,u,c,m,0,m,d,u,1,u,1,m,d,u,1,m,d,m],E=0;for(let e=0;e<64;e++)p=2*Math.PI*(e+1)/64,g=e=48?a:-a,h=e<32?r:-r,y.push(g,h,0,g+n*Math.cos(E),h+n*Math.sin(E),0,g+n*Math.cos(p),h+n*Math.sin(p),0),f=g=e=48?d:c,v=e<32?m:u,b.push(f,v,f+c*Math.cos(E),v+u*Math.sin(E),f+c*Math.cos(p),v+u*Math.sin(p)),E=p;const w=new THREE.BufferGeometry;return w.setAttribute("position",new THREE.BufferAttribute(new Float32Array(y),3)),w.setAttribute("uv",new THREE.BufferAttribute(new Float32Array(b),2)),w}}class textItem{constructor(e,t){this.item=e,this.fonts=t}getMeshes(){var e=this.item,t=this.getFont(e.font);const o=cleanString(e.text).split("\n");var n=!1,i=!1,a=e.lineHeight/10,r=[];o.forEach((function(s,l){1==o.length&&s.length&&(32===s.charCodeAt(0)&&(n=!0),32===s.charCodeAt(s.length-1)&&(i=!0));var c=new THREE.TextGeometry(s,{font:t,size:.2,height:0,curveSegments:4,bevelEnabled:!1});if("center"==e.align&&c.center(),"right"==e.align){c.computeBoundingBox();const e=c.boundingBox;var d=e.max.x-e.min.x;c.translate(-1*d,0,0)}c.translate(0,-1*a*l,0),r.push(c)}));var s=THREE.BufferGeometryUtils.mergeGeometries(r,!0);s.center(),s.rotateX(Math.PI/-2);var l=new THREE.Mesh(s,null);l.name="meshText",l.userData.isTextChild=!0;var c=null;s.computeBoundingBox();var d=s.boundingBox,u=0;n&&(d.min.x-=.1,u+=-.05),i&&(d.max.x+=.1,u+=.05);var m=d.max.x-d.min.x+.025,p=d.max.z-d.min.z,g=0;if(e.background.enabled){g=e.background.corner;var h=.025*e.background.padding,f=new RoundedPlaneGeometry(m+2*h,p+2*h,g/20);f.rotateX(Math.PI/-2),f.translate(u,-.005,0),(c=new THREE.Mesh(f,null)).name="meshBack",c.userData.isTextChild=!0}var v=new RoundedPlaneGeometry(m+2*(h=0),p+2*h,g/20);v.rotateX(Math.PI/-2),v.translate(u,-.005,0);var y=new THREE.Mesh(v,null);return y.add(l),c&&y.add(c),y.name=e.name,y.uid=e.uid,y.isMedia=!0,y}getFont(e){var t,o=this.fonts;for(t=0;t1&&(o=1),(t=new THREE.RingGeometry(1*o/2,.5,e.segments)).rotateX(Math.PI/-2),t.scale(e.width/10,1,e.height/10)}var n=new THREE.Mesh(t,null);return n.name=e.name,n.isMedia=!0,n}getMaterial(e){var t=e.mat,o=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,color:t.color});return 1*t.opacity!=1&&(o.transparent=!0,o.opacity=1*t.opacity),e.mask&&(o=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,colorWrite:!1})),o}}class prim3DItem{constructor(e){this.item=e}getMesh(){var e=this.item,t=null;"cube"==e.shape&&(t=this.facetedBox(e.width/10,e.height/10,e.depth/10,e.bevel/10)).rotateX(Math.PI/-2),"sphere"==e.shape&&(t=new THREE.SphereGeometry(e.radius/10,64,32)).rotateX(Math.PI/-2),"cylinder"==e.shape&&(t=new THREE.CylinderGeometry(e.radius/10,e.radius/10,e.height/10,64));var o=new THREE.Mesh(t,null);return o.name=e.name,o}facetedBox(e,t,o,n){let i=.5*e,a=.5*t,r=.5*o,s=[i,a-n,-r+n,i,-a+n,-r+n,i,-a+n,r-n,i,a-n,r-n,i-n,a-n,r,i-n,-a+n,r,-i+n,-a+n,r,-i+n,a-n,r,-i,a-n,r-n,-i,-a+n,r-n,-i,-a+n,-r+n,-i,a-n,-r+n,-i+n,a-n,-r,-i+n,-a+n,-r,i-n,-a+n,-r,i-n,a-n,-r,i-n,a,-r+n,i-n,a,r-n,-i+n,a,r-n,-i+n,a,-r+n,i-n,-a,-r+n,i-n,-a,r-n,-i+n,-a,r-n,-i+n,-a,-r+n],l=new THREE.BufferGeometry;return l.setAttribute("position",new THREE.BufferAttribute(new Float32Array(s),3)),l.setIndex([0,2,1,3,2,0,4,6,5,7,6,4,8,10,9,11,10,8,12,14,13,15,14,12,16,18,17,19,18,16,20,21,22,23,20,22,3,5,2,4,5,3,7,9,6,8,9,7,11,13,10,12,13,11,15,1,14,0,1,15,16,3,0,17,3,16,17,7,4,18,7,17,18,11,8,19,11,18,19,15,12,16,15,19,1,21,20,2,21,1,5,22,21,6,22,5,9,23,22,10,23,9,13,20,23,14,20,13,3,17,4,7,18,8,11,19,12,15,16,0,2,5,21,6,9,22,10,13,23,14,1,20]),l.computeVertexNormals(),l}getMaterial(e){var t=e.mat,o=new THREE.MeshPhongMaterial({side:THREE.DoubleSide,color:t.color,specular:2236962,shininess:0,reflectivity:0});return 1*t.opacity!=1&&(o.transparent=!0,o.opacity=1*t.opacity),o}}class audioItem{constructor(e,t){if(this.item=e,this.compUid=e.compUid,this.compEngine=t,this.audio=null,this.mesh=null,this.itemMaxDistance=this.item.audio.distance,this.currentSoundMaxDistance=0,this.scaleFactor=.05,"headset"==_browser.device&&("floating"==_app.compEngine.trackingMode||"slam"==_app.compEngine.trackingMode)){var o=_app.trackingEngine.trackingSettings.headset.scale.xyz/100;addToLog("VR user scale ratio "+o),this.scaleFactor=this.scaleFactor/o,addToLog("VR scaleFactor "+this.scaleFactor)}this.color=16777120,this.colorFocus=16728128,this.maxDistanceSphere=null,this.focusSphere=null,this.isInCameraView=!1,this.worldScale=1,this.audio_wp=new THREE.Vector3,this.frustum=new THREE.Frustum}createAudio(){var e=this,t=e.compEngine,o=t.getLibraryItemByUid(e.item.uid),n=t.sounds.length;if("positional"==e.item.audio.type){var i=e.itemMaxDistance*e.scaleFactor*e.worldScale;e.item.audio.focused&&(i=e.itemMaxDistance*e.scaleFactor*e.worldScale/10),e.currentSoundMaxDistance=i,t.sounds[n]=new THREE.PositionalAudio(t.audioListener),t.sounds[n].setMaxDistance(i),t.sounds[n].setRefDistance(i/5),t.sounds[n].setDistanceModel("linear")}else t.sounds[n]=new THREE.Audio(t.audioListener);e.audio=t.sounds[n],e.audio.uid=o.uid,e.audio.setBuffer(o.buffer)}getMesh(){var e=this,t=e.item;if("positional"!=t.audio.type)return null;var o=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,color:"#ff0000"});_config.simulator||(o.visible=!1);var n=new THREE.RingGeometry(.9,1,32);return n.rotateX(Math.PI/-2),n.scale(.1,1,.1),e.mesh=new THREE.Mesh(n,o),e.mesh.name=t.name,e.mesh.userData.isGizmo=!0,e.mesh.add(e.audio),(_config.simulator||_config.isDebug)&&(e.addDistanceSphere(),t.audio.focused&&e.addFocusSphere()),e.mesh}getMeshGizmo(){var e=this,t=new THREE.RingGeometry(.9,1,32);t.rotateX(Math.PI/-2),t.scale(.1,1,.1);var o=[new THREE.MeshBasicMaterial({side:THREE.DoubleSide,color:e.color}),new THREE.MeshBasicMaterial({side:THREE.DoubleSide,opacity:0,transparent:!0})],n=new THREE.CircleGeometry(.1,32);n.translate(0,0,-.005),n.rotateX(Math.PI/-2);var i=[n,t],a=THREE.BufferGeometryUtils.mergeGeometries(i,!0);(a=a.toNonIndexed()).deleteAttribute("uv");var r=new THREE.Mesh(t,o);r.name=e.item.name;var s=new THREE.OBJLoader,l=window.EmberENV.assets_folder;return s.load(l+"models/gizmo-speaker.obj",(function(e){var t=e.children[0].geometry,o=.05;t.scale(o,o,o),r.geometry=r.geometry.toNonIndexed(),r.geometry.deleteAttribute("uv");var i=[r.geometry,t],a=THREE.BufferGeometryUtils.mergeGeometries(i,!1);(n=n.toNonIndexed()).deleteAttribute("uv");var s=[a,n],l=THREE.BufferGeometryUtils.mergeGeometries(s,!0);r.geometry=l})),e.mesh=r,r}getSphereGeometry(e){let t=(new THREE.Path).absarc(0,0,e,0,2*Math.PI).getPoints(128);const o=(new THREE.BufferGeometry).setFromPoints(t),n=(new THREE.BufferGeometry).setFromPoints(t),i=(new THREE.BufferGeometry).setFromPoints(t);return n.rotateX(Math.PI/2),i.rotateY(Math.PI/2),THREE.BufferGeometryUtils.mergeGeometries([o,n,i],!0)}addDistanceSphere(){var e=this,t=e.item.audio.distance*e.scaleFactor,o=e.getSphereGeometry(t),n=new THREE.LineBasicMaterial({color:e.color});e.maxDistanceSphere=new THREE.LineSegments(o,n),e.maxDistanceSphere.name="maxDistanceSphere",e.maxDistanceSphere.userData.isGizmo=!0,e.maxDistanceSphere.userData.hideInCover=!0,e.mesh.add(e.maxDistanceSphere)}addFocusSphere(){var e=this,t=e.item.audio.distance*e.scaleFactor/10,o=e.getSphereGeometry(t),n=new THREE.LineBasicMaterial({color:e.colorFocus});e.focusSphere=new THREE.LineSegments(o,n),e.focusSphere.name="focusSphere",e.focusSphere.userData.isGizmo=!0,e.focusSphere.userData.hideInCover=!0,e.mesh.add(e.focusSphere)}updateGizmoSpheres(){var e=this,t=e.item.audio.distance*e.scaleFactor;if(e.maxDistanceSphere.geometry=e.getSphereGeometry(t),e.focusSphere){t=e.item.audio.distance*e.scaleFactor/10;e.focusSphere.geometry=e.getSphereGeometry(t)}}removeMesh(){this.mesh.parent.remove(this.mesh)}update(e=.02){var t=this;if("positional"==t.item.audio.type&&t.item.audio.focused){var o=t.compEngine.p_trackingEngine.camera;t.frustum.setFromProjectionMatrix((new THREE.Matrix4).multiplyMatrices(o.projectionMatrix,o.matrixWorldInverse)),t.mesh.getWorldPosition(t.audio_wp);var n=!1,i=t.item.audio.distance*t.scaleFactor*t.worldScale/10,a=new THREE.Sphere(t.audio_wp,i);t.frustum.intersectsSphere(a)&&(n=!0),t.isInCameraView=n;var r=t.item.audio.distance*t.scaleFactor*t.worldScale,s=(.01+e)*r/2;t.isInCameraView||(r/=10),t.currentSoundMaxDistance!=r&&(t.currentSoundMaxDistancer&&(t.currentSoundMaxDistance=r)),t.currentSoundMaxDistance>r&&(t.currentSoundMaxDistance=t.currentSoundMaxDistance-s,t.currentSoundMaxDistance compEngine setup"),e.needStartScreen(),e.projectFolder=_rootDirectory+"s/"+t.folder+"/"+t.url+"/",_config.externalHost&&_config.projectFolder&&(e.projectFolder=_config.projectFolder),e.videosUtils.createCompVideos(),e.rootXR=new THREE.Group,e.rootXR.name="rootXR",e.rootComposition=new THREE.Group,e.rootComposition.name="rootComposition",e.rootXR.add(e.rootComposition),e.rootNoMarker=new THREE.Group,e.rootNoMarker.name="rootNoMarker",e.rootSmoothing=new THREE.Group,e.rootSmoothing.name="rootSmoothing",e.modules=t.modules,e.settings=t.settings,e.materials=t.materials,e.library=new library(e,t.library),e.modules.frontJsApi&&e.modules.frontJsApi.enabled&&_apiParams.rayCastEventType&&(_browser.mobile?_apiParams.rayCastEventType.mobile&&(e.rayCastEventType=_apiParams.rayCastEventType.mobile):_apiParams.rayCastEventType.computer&&(e.rayCastEventType=_apiParams.rayCastEventType.computer)),e.settings.pagination&&e.settings.pagination.startScene&&(e.startSceneIndex=e.settings.pagination.startScene);const o=new URLSearchParams(window.location.search);if(o.get("scene")){var n=1*o.get("scene");isNaN(n)||(e.startSceneIndex=n-1)}t.composition[e.startSceneIndex]||(e.startSceneIndex=0),e.startSceneUid=t.composition[e.startSceneIndex].uid,e.addOverlaysFonts()}addOverlaysFonts(){var e=this,t=[];e.data.overlays.forEach((function(o){e.getters.getOverlayItems(o.uid).forEach((function(e){"text"!=e.type&&"button"!=e.type||e.font&&t.push(e.font)}))}));var o,n=[...new Set(t)];n.includes("cardo")&&((o=document.createElement("style")).innerHTML="@import url('https://fonts.googleapis.com/css2?family=Cardo&display=swap');",document.getElementsByTagName("head")[0].appendChild(o));n.includes("oswald")&&((o=document.createElement("style")).innerHTML="@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@400&display=swap');",document.getElementsByTagName("head")[0].appendChild(o));n.includes("smilicious")&&((o=document.createElement("style")).innerHTML="@import url('/v3/fonts/smilicious.css');",document.getElementsByTagName("head")[0].appendChild(o))}defineCameraUse(){var e=this;e.usingCamera=!1;var t=e.p_trackingEngine.trackingSettings;_browser.mobile&&t.mobile.useCamera&&(e.usingCamera=!0),_browser.computer&&t.computer.useCamera&&(e.usingCamera=!0),"image"==e.trackingMode&&(e.usingCamera=!0),"face"==e.trackingMode&&(e.usingCamera=!0),_browser.mobileVR&&(e.usingCamera=!1),e.usingCamera&&_screens.error.checkPermission("camera",!0)}createThreejsScene(e=null){return e&&(this.scene3=e),this.scene3||(this.scene3=new THREE.Scene),this.scene3}createCameraTarget(){var e=this;console.log("create camera hook"),e.cameraTargetHook=new THREE.Group,e.cameraTargetHook.name="cameraTargetHook",e.scene3.add(e.cameraTargetHook),e.cameraTargetHook.position.copy(_app.trackingEngine.camera.position);const t=new THREE.BoxGeometry(.2,.2,.2),o=new THREE.MeshNormalMaterial;var n=new THREE.Mesh(t,o);n.name="debug root",e.cameraTargetHook.add(n),_config.isDebug||(n.visible=!1);const i=new THREE.BoxGeometry(4,4,4),a=new THREE.MeshNormalMaterial({opacity:.6,transparent:!0});e.cameraTarget=new THREE.Mesh(i,a),e.cameraTarget.name="cameraTarget",e.cameraTargetHook.add(e.cameraTarget),e.cameraTarget.position.set(0,0,-100),_config.isDebug||(e.cameraTarget.visible=!1)}needStartScreen(){_screens.start.isRequired=!0}load(){var e=this;addToLog("-> compEngine load"),removePreloader(),simLog({what:"project",action:"load assets",name:null,uid:null});var t=null;(_config.isLoadingPerScene||e.settings.loadScenesOnDemand)&&(t=e.startSceneUid,console.log("only load starting scene",t)),e.library.buildLoadingQueue(t);e.library.startLoadingAssets((function(){e.onAllLibraryLoaded()}))}closeStartScreen(){var e=this;(addToLog("** close start screen **"),e.stopAllVideos(),_video)&&(_browser.android&&_video.paused&&(addToLog("force play"),_video.play()),_browser.ios&&_video.play().catch(e=>{}).then(()=>{}));if(e.videosUtils.fakePlayCompVideos(),_config.simulator)return _browser.ios&&"image"==e.trackingMode&&e.fakeStartAllVideos(),void e.startExperience();var t=e.p_trackingEngine;"slam"==e.trackingMode&&(t.usingWebXR||e.startExperience(),_browser.mobileVR&&e.startExperience()),"floating"==e.trackingMode&&e.startExperience(),"fixed"==e.trackingMode&&e.startExperience(),"face"==e.trackingMode&&e.startExperience(),"image"==e.trackingMode&&(_browser.ios&&e.fakeStartAllVideos(),_config.fiducial?e.startExperience():(_config.simulator||e.isInline||e.startExperience(),_config.simulator&&e.startExperience(),e.isInline&&e.startExperience()))}startExperience(){_config.isDebug?addToLog("**** START EXP ****"):console.log("%c - start experience -","color: #33aa33");var e=this;if(e.resumeAudioContext(),_screens.loading.hideScreen(),simLog({what:"project",action:"** start **",name:null,uid:null}),_$body.addClass("started"),e.started=!0,_screens.intro.visible||(addToLog("**** START TRACKING ****"),e.p_trackingEngine.start()),_app.common.APIEvent("API_startExperience"),e.isInline&&e.addCloseARButton(),_browser.mobileVR&&(!e.data.settings.devices.headset||!e.data.settings.devices.headset.enabled))return $(_canvas).hide(),void openModal({h2:"This project is not available on VR headsets",buttons:!1});if(!_config.simulator&&e.data.settings.devices.headset&&e.data.settings.devices.headset.enabled){var t=!1;_browser.vr&&(t=!0),"mobile"!=_browser.device||_browser.mobileVR||(t=!1),t&&(_app.vrEngine=new vrEngine,_app.vrEngine.setPointers(),_app.vrEngine.addVRButtons(),_app.vrEngine.setupVRDisplay(null),_browser.mobileVR&&_app.vrEngine.startSession())}e.library.loadTexturesInBackground()}setActive(e=!1,t=!1,o=!1){var n=this;addToLog("---\x3e setActive | st "+e+" mv "+t+" vi "+o),n.scenesNavigation&&n.scenesNavigation.show();var i=!1;if("image"==n.trackingMode&&(i=!0,n.markerRoot&&(i=!1,n.markerRoot.visible&&(i=!0),n.settings.keepVisible&&!n.markerNeverFound&&(i=!0))),(t||o||i)&&(addToLog("---\x3e set comp active -> play videos + audio"),n.currentCompScene.playSceneVideos(),n.currentCompScene.playSceneAudios()),!n.isInline&&"image"==n.trackingMode&&t){n.foundMarker(0,0)}if(t){console.log("timeline zero on set active");var a=n.currentScene;n.timeline.changeScene(a)}e&&n.applyDefaultState()}activateScene(e=!0){var t=this;if(addToLog("---\x3e COMP ENGINE activate Scene "+e),t.scenesNavigation&&t.scenesNavigation.show(),!t.isInline&&"image"==t.trackingMode&&e){t.foundMarker(0,0)}if(e){var o=t.currentScene;t.timeline.changeScene(o),t.applyDefaultState()}}addCloseARButton(){}resumeAudioContext(){this.audioListener.context.resume().then((function(){}))}foundMarker(e,t,o=!0){var n=this;if(!_config.simulator){if(addToLog("- - - FOUND marker "+t),n.markerNeverFound){var i=n.currentScene;n.timeline.changeScene(i),o&&n.applyDefaultState()}else if(e&&o){var a=n.modulesEngine.modulesData.states;a&&a.enabled&&a.revertTime&&a.revertTime2)&&_app.ga.gaEvent({event:"scan marker",event_category:"scene",event_label:"scan marker"}),n.markerNeverFound=!1,n.modules.frontJsApi&&n.modules.frontJsApi.enabled){const e=new CustomEvent("API_markerFound",{detail:{index:t}});document.dispatchEvent(e)}}}lostMarker(){_app.common.APIEvent("API_markerLost")}clearRootComposition(){var e=this,t=e.rootComposition,o=e.scene3.getObjectByName("rootLighting");for(o&&e.scene3.attach(o),t.traverse((function(e){if(e!=t){if(e.material){var o=e.material;Array.isArray(o)?o.forEach((function(e){e.map&&e.map.uuid&&e.map.dispose(),e.dispose()})):(o.map&&o.map.uuid&&o.map.dispose(),o.dispose()),e.material=null}e.geometry&&(e.geometry.dispose(),e.geometry=null)}}));t.children.length>0;)t.remove(t.children[0]);o&&e.rootComposition.attach(o)}buildComposition(e=!0){var t=this;addToLog("==> build comp "+t.currentSceneIndex+" ==> can start timeline"),t.clearRootComposition();var o,n,i,a=t.currentScene;if(a.useCubeMap&&a.cubeMap){var r,s=a.cubeMap,l=[];for(r=0;r<6;r++){var c=t.modulesEngine.virtualTourModule.getTextureByUidAndIndex(s,r);c||console.log("error cubemap texture"),l[r]=new THREE.MeshBasicMaterial({map:c,side:THREE.BackSide})}const e=new THREE.BoxGeometry(100,100,100),o=new THREE.Mesh(e,l);t.rootComposition.add(o),o.rotateY(Math.PI/2),o.name="cubemap"}for(t.sounds=[],t.p_trackingEngine.camera&&t.p_trackingEngine.camera.add(t.audioListener),r=0;r compEngine ready"),e.isReady=!0;var t=e.p_trackingEngine;if(e.materialsManager=new materialsManager(e),e.materialsManager.buildMaterials(),_$body.removeClass("loading"),t.usingUSDZ)t.allSceneDataLoaded();else{if(e.threejsCanvas=document.getElementById("threejs"),e.setupRayCast(),_keepComposition)return console.log("KEEP embed COMP - ----- BAD"),e.modulesEngine||(console.log("new mod engine"),e.modulesEngine=new modules(e),e.modulesEngine.setupModules()),alert("error 112233"),void t.allSceneDataLoaded();e.currentSceneIndex=e.startSceneIndex;new controlsShare(e);e.data.composition.length>1&&e.settings.pagination&&e.settings.pagination.enabled&&(e.scenesNavigation=new scenesNavigation(e)),e.modulesEngine.setupModules(),e.timeline=new c_timeline,_config.isDebug&&console.log("change scene - first time"),e.changeScene(e.currentSceneIndex,null,{firstTime:!0}),e.scene3.add(e.rootXR),t.allSceneDataLoaded()}}setupRayCast(){var e=this;function t(t){if("touchstart"==e.rayCastEventType&&(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),e.modules.frontJsApi&&e.modules.frontJsApi.enabled){const e=new CustomEvent("API_canvasTouch",{detail:{x:t.clientX,y:t.clientY}});document.dispatchEvent(e)}isModalOpen()||e.rayCast(t)}e.raycaster=new THREE.Raycaster;var o=!0,n=e.modules.gazeInput;if(n&&n.enabled&&n.disableTouchActions&&(o=!1),o){var i=e.rayCastEventType;_browser.computer?(e.threejsCanvas.addEventListener("mousedown",(function(t){e.startTimeMouseDown=(new Date).getTime()}),!1),e.threejsCanvas.addEventListener("mouseup",(function(o){(new Date).getTime()-e.startTimeMouseDown<300&&t(o)}),!1)):e.threejsCanvas.addEventListener(i,t,!1)}}applyDefaultState(){var e=this.modules.states;e&&e.enabled&&this.modulesEngine.statesModule.applyDefaultState()}fakeStartAllVideos(){var e=this;addToLog("** FAKE start all lib videos"),0!=e.data.materials.length?_domVideos.forEach((function(e){e.fakeStart()})):addToLog("SKIP fake start lib videos - no mats")}pauseAllVideos(){_domVideos.forEach((function(e){e.pause()}))}stopAllVideos(){_domVideos.forEach((function(e){e.stop()})),this.videosUtils.stopAllVideos()}playVideoByCompUid(e,t=!1){this.videosUtils.playVideoByCompUid(e,t)}pauseVideoByCompUid(e){this.videosUtils.pauseVideoByCompUid(e)}stopVideoByCompUid(e){this.videosUtils.stopVideoByCompUid(e)}playVideoByUid(e,t=!1,o=!1,n=!1){e&&this.started&&_domVideos.forEach((function(i){i.uid==e&&(i.play(t,o),n&&(i.domElement.muted=!1))}))}stopVideoByUid(e){e&&_domVideos.forEach((function(t){t.uid==e&&t.stop()}))}pauseVideoByUid(e){e&&_domVideos.forEach((function(t){t.uid==e&&t.pause()}))}isVideoPlaying(e){var t=document.querySelector('.videoLibrary[data-uid="'+e+'"]');return!!t&&!t.paused}playCompositionVideos(e=!1){console.log("OBS - MOVED - playCompositionVideos"),this.currentCompScene.playSceneVideos(e)}pauseCompositionVideos(){var e=this;e.getters.getAllSceneItems(e.currentScene,"video").forEach((function(t){e.pauseVideoByCompUid(t.compUid)})),_app.common.pauseAllVideoTextures()}playCompositionMaterialsVideos(e=!1){var t,o,n,i,a=this,r=a.getters.getAllSceneItems(a.currentScene,"model"),s=document.querySelectorAll(".videoLibrary");if(s)for(t=0;t mesh is missing normals :",t.name),console.log("==> fixing normals"),t.geometry.deleteAttribute("normal"),t.geometry.computeVertexNormals()),e.setupModelMeshMaterial(t,i,o.compUid),i++),t.isLine&&(t.visible=!1)}))}}(t)})),e.setupEnvMap(),e.countVideoMaterials()}countVideoMaterials(){var e=0;this.data.materials.forEach((function(t){"VideoMaterial"==t.type&&e++})),this.nbVideoMaterials=e}setupMediaMaterial(e){var t=this,o=t.getters.getCompItemByCompUid(e.compUid);if(o){var n,i=o.mat,a=!1;if("text"==o.type){if((n=[])[0]=new THREE.MeshBasicMaterial({color:i.color}),1!=i.opacity&&(n[0].transparent=!0,n[0].opacity=1*i.opacity),o.background.enabled){var r=o.background.mat;n[1]=new THREE.MeshBasicMaterial({color:r.color,side:THREE.DoubleSide}),1!=r.opacity&&(n[1].transparent=!0,n[1].opacity=1*r.opacity)}else n[1]=new THREE.MeshBasicMaterial({side:THREE.DoubleSide}),n[1].transparent=!0,n[1].opacity=0,n[1].alphaTest=.02;return n[2]=new THREE.MeshBasicMaterial({side:THREE.DoubleSide}),n[2].transparent=!0,n[2].opacity=0,n[2].alphaTest=.02,e.material=n[2],e.children[0].material=n[0],void(e.children[1]&&(e.children[1].material=n[1]))}if("shape"!=o.type){var s=t.getLibraryItemByUid(o.uid),l=null;if("video"!=s.type?l=t.get3jsTextureByUid(o.uid):(l=t.videosUtils.getTextureByCompUid(o.compUid),i.chroma||(l.colorSpace=THREE.SRGBColorSpace)),l||(console.log("ERROR - - - missing texture for media"),console.log(s),console.log(t.textures)),i.chroma||((n=new THREE.MeshBasicMaterial({side:THREE.DoubleSide})).opacity=1*i.opacity,n.opacity<1&&(a=!0)),i.chroma){l.colorSpace=THREE.NoColorSpace;var c=new THREE.Color(i.chromaColor);c.convertLinearToSRGB();var d=i.range,u=i.chromaSmoothness;null==d&&(d=.5),null==u&&(u=7);var m=""+i.opacity;"1"===m&&(m="1.0");const e="\n out mediump vec2 vUv;\n\n void main(void) {\n vUv = uv;\n mediump vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * mvPosition;\n }",t="\n uniform mediump sampler2D in_texture;\n uniform mediump vec3 color;\n uniform mediump float tolerance;\n uniform mediump float smoothness;\n uniform mediump float opacity;\n in mediump vec2 vUv;\n\n void main(void)\n {\n mediump vec3 tColor = vec3(0);\n\n tColor = texture(in_texture, vUv ).rgb;\n\n mediump float a = min((length(tColor - color) - tolerance) * smoothness, 1.0);\n a *= opacity;\n if(a < 0.05) discard;//new 2021 01 13 to avoid alpha issues\n\n pc_fragColor = vec4(tColor, a);\n }";n=new THREE.ShaderMaterial({uniforms:{in_texture:{value:l},color:{value:c},tolerance:{value:d},smoothness:{value:u},opacity:{value:m}},vertexShader:e,fragmentShader:t,side:THREE.DoubleSide}),a=!0}if(n.alphaTest=.02,n.transparent=a,l){n.map=t.setupMaterialMap(e,n,l,s,{repeatTextures:!1})}e.material=n}else{if(n=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,color:i.color}),1*i.opacity!=1&&(n.transparent=!0,n.opacity=1*i.opacity),o.mask){n=new THREE.MeshBasicMaterial({colorWrite:!1,side:THREE.DoubleSide});i={maskEverything:o.maskEverything,maskedItems:o.maskedItems};t.doMasking(e,i)}e.material=n}}}setupModelMeshMaterial(e,t,o){var n=this,i=n.getters.findCompMeshByCompUidAndIdMesh(o,t);if(i){var a=n.getters.getIdMeshByCompUidAndMeshName(o,e.name);if(null!==a&&a!=t){if(console.warn("error .idm on",e.name),!(i=n.getters.findCompMeshByCompUidAndIdMesh(o,a)))return void console.log("error: setupModelMeshMaterial - no mesh B");_config.isDebug&&(console.log("corrected:",e.name),console.log(t,"=>",a))}var r=[];i.mats.forEach((function(e){n.data.materials.forEach((function(t,o){t.uid==e&&r.push(o)}))})),n.setupMaterialsOnMesh(e,r,t,o)}else console.log("error: setupModelMeshMaterial - no mesh A")}setupMaterialsOnMesh(e,t,o,n){var i,a,r,s=this,l=[],c=s.getters.getLibItemByCompUid(n),d=1;e.geometry.groups&&(d=e.geometry.groups.length);var u=t.length;d>u&&(u=d);var m=!1;for(d>1&&(m=!0),i=0;i=s.data.materials.length&&(addToLog("matIndex is too high, using 0 :"+a+" : "+s.data.materials.length),a=0),r=s.data.materials[a]){var p=s.materialsManager.getMaterialObjByUid(r.uid);if(p){var g=p.material,h={flipTextures:c.flipTextures,repeatTextures:r.repeatTextures};s.materialsManager.assignTextures(p.data,p.type,g),s.materialsManager.setupEmbedTextures(r.uid,n,e,o),s.materialsManager.updateTextureSettings(g.map,h),s.materialsManager.updateTextureSettings(g.normalMap,h),"MaskMaterial"==r.type&&s.doMasking(e,r),l[i]=g,l[i].needsUpdate=!0}else console.log("BAD -------- mat not found :",e.name,r.type),"LineBasicMaterial"==r.type&&(console.log("warning : LineBasicMaterial => MeshBasicMaterial"),l[i]=new THREE.MeshBasicMaterial({opacity:0,transparent:!0})),l[i]||(l[i]=new THREE.MeshBasicMaterial({}))}m&&t.length>1?e.material=l:null==l[0]?console.log("---\x3e material undef"):e.material=l[0]}doMasking(e,t){var o=this;e.renderOrder=100,t.maskEverything?o.rootComposition.traverse((function(t){if(e!=t&&t.isMesh){var o=!1;t.material&&!t.material.colorWrite&&(o=!0),o||(t.renderOrder=101)}})):t.maskedItems&&t.maskedItems.forEach((function(t){var n=o.getters.getThreejsItemByCompUid(o.rootComposition,t);n&&n.traverse((function(t){e!=t&&t.isMesh&&(t.renderOrder=101)}))}))}get3jsTextureByUid(e){var t,o=this;for(t=0;t0;)e.rootLighting.remove(e.rootLighting.children[0]);e.light=[],e.lightHelpers.forEach((function(e){e.parent.remove(e),e=null})),e.lightHelpers=[],e.rootComposition.remove(e.rootLighting),e.rootLighting=null}var t=e.mainLighting;if(t.enabled){e.rootLighting=new THREE.Group,e.rootLighting.name="rootLighting",e.rootComposition.add(e.rootLighting);var o=t.ambient.int;1*THREE.REVISION>=156&&(o*=Math.PI),e.ambientLight=new THREE.AmbientLight(t.ambient.color,o),e.rootLighting.add(e.ambientLight);var n,i,a=e.p_trackingEngine.globalScale;console.log("lights scaled to ",a);for(n=0;n<3;n++)o=(i=t.lights[n]).int,1*THREE.REVISION>=156&&(o*=Math.PI),e.light[n]=new THREE.PointLight(i.color,o,i.dis*a),e.light[n].position.set(i.transform.pos.x,i.transform.pos.y,i.transform.pos.z),e.rootLighting.add(e.light[n]),(_config.isDebug||_config.simulator)&&(e.lightHelpers[n]=new THREE.PointLightHelper(e.light[n],.1),e.scene3.add(e.lightHelpers[n]))}}removeLights(){var e=this;if(e.rootLighting){for(console.log("clear lights");e.rootLighting.children.length>0;)e.rootLighting.remove(e.rootLighting.children[0]);e.rootXR.remove(e.rootLighting)}e.rootLighting=null}setupEnvMap(){var e=this;if(console.log("setup env map"),null!=e.settings.envMap){var t=1*e.settings.envMap.index;if(0!=t){if(e.p_trackingEngine.renderer){var o=e.genericAssetsFolder+"envmaps/envmap"+t+".jpg";e.envMap=(new THREE.TextureLoader).load(o,(function(t){var o=null;e.envMap=new THREE.WebGLCubeRenderTarget(t.image.height).fromEquirectangularTexture(e.p_trackingEngine.renderer,t).texture,e.rootComposition.children.forEach((function(e){e.traverse((function(e){e.isMesh&&(o=e.material,Array.isArray(o)?o.forEach((function(e){n(e)})):n(o))}))}))}))}}else e.envMap=null}function n(t){var o=t.type;t.envMap="MeshBasicMaterial"==o||"VideoMaterial"==o||"MeshToonMaterial"==o?null:e.envMap,t.needsUpdate=!0}}playModelDefaultAnimation(e){e.animation&&this.playModelAnimation({compUid:e.compUid,index:e.animation.index,animationLoop:e.animation.loop,animationReverse:e.animation.reverse})}playModelAnimation(e){var t=e.index;if(void 0!==t&&-1!=t){var o=e.animationReverse;this.animationsUtils.playAnimation(e.compUid,t,e.animationLoop,e.stopOther,!0,o)}}onLoopAction(e){var t=_app.compEngine;if(t.modulesEngine){var o=e.action;t.modulesEngine.animationEndEvent(o)}}onFinishedAction(e){var t=_app.compEngine;if(t.modulesEngine){var o=e.action;t.modulesEngine.animationEndEvent(o)}}pauseModelAnimations(e){this.animationsUtils.pause(e.compUid,!0)}setFocus(e){var t=this;if(t.isPaused||!e){var o=t.p_trackingEngine;if(t.isPaused=!e,t.isPaused&&(t.pauseAudios(),t.videosUtils.pauseAllVideos(),o.pause(),"headset"==_browser.device&&void 0!==_currentVRSession&&_currentVRSession&&_currentVRSession.end()),!t.isPaused){if(o.resume(),!t.started)return;var n=!0;if("image"==t.trackingMode){n=!1;var i=!1;o.multipleTracking,t.markerRoot&&t.markerRoot.visible&&(i=!0),i&&(n=!0),t.trackingSettings.image.keepVisible&&!t.markerNeverFound&&(n=!0)}n&&(t.videosUtils.focus(),t.resumeAudios())}!t.isPaused&&_browser.ios&&setTimeout((function(){_video&&_video.paused&&_video.play().catch(e=>{addToLog("focus: ios auto play prevented"),console.log(e)}).then(()=>{addToLog("focus: ios auto play ->then")})}),1e3)}}loop(e){var t=this;t.isPaused||(t.timeline.isPaused||(t.tweenTime+=1e3*e),t.timeline.isPaused||TWEEN.update(),t.animationsUtils&&t.animationsUtils.update(e),t.getters.getAllSceneItems(t.currentScene,"audio").forEach((function(t){t.audioItem.update(e)})),t.modulesEngine.loop(),t.timeline&&t.timeline.update(e),t.modules.frontJsApi&&t.modules.frontJsApi.enabled&&_apiParams.onBeforeRender&&_apiParams.onBeforeRender.call(t),_app.vrEngine&&_app.vrEngine.update())}rayCast(e){var t=this,o=t.p_trackingEngine,n=o.camera,i=new THREE.Vector2,a=!1,r=t.threejsCanvas;o.usingWebXR&&o.isInARSession&&(a=!0),_config.simulator||"image"==t.trackingMode&&(n||(n=_arScene.camera));var s=!1;_body.classList.contains("p")&&_body.classList.contains("fid")&&(s=!0);var l=e.clientX,c=e.clientY,d=null,u=null,m={x:parseInt(100*(l/window.innerWidth*2-1))/100,y:-1*parseInt(100*(c/window.innerHeight*2-1))/100};if(a){var p=r.clientWidth/r.clientHeight/(9/16);d=r.clientWidth/window.innerWidth,u=r.clientHeight/window.innerHeight,d=p,i.x=l*d,i.y=c*u}if(s&&(i.x=m.y,i.y=-1*m.x,d=r.clientHeight/window.innerWidth,i.x*=1.15,i.y/=d),!s&&!a){var g=r.getBoundingClientRect().width/r.offsetWidth,h=r.getBoundingClientRect().height/r.offsetHeight;d=r.clientWidth*g/window.innerWidth,u=r.clientHeight*h/window.innerHeight,i.x=m.x/d,i.y=m.y/u}if("image"!=t.trackingMode||_body.classList.contains("m")||_body.classList.contains("keep")){var f=t.getMeshOnRaycast(n,i);f&&t.doActionOnMeshOrCompItem(f)}}getMeshOnRaycast(e,t,o=!1){var n=this,i=n.p_trackingEngine;n.raycaster.setFromCamera(t,e);var a=[],r=!0;"slam"==n.trackingMode&&(n.rootXR.visible||(r=!1)),r&&n.rootComposition.traverseVisible((function(e){e.isMesh&&a.push(e)})),i.reticleObj&&i.reticleObj.visible&&a.push(i.reticleObj);var s=n.raycaster.intersectObjects(a);if(s.length>0){var l,c,d=s[0].object;if(_config.isDebug){var u=s[0].point;if(!n.debugCube){const e=new THREE.BoxGeometry(.01,.01,.01),t=new THREE.MeshNormalMaterial;n.debugCube=new THREE.Mesh(e,t),n.debugCube.name="raycast cube"}console.log("R P ",u),n.scene3.add(n.debugCube),n.debugCube.position.set(u.x,u.y,u.z)}if(s.length>1)if(!d.visible||d.userData.isGizmo)for(l=1;l{!s&&e.compUid&&(s=e)}),s){i=s.compUid;if((o=t.getters.getCompItemByCompUid(i)).meshes){var l=t.getters.getLibItemByUid(o.uid),c=!1;r=null;if("gltf"==l.format&&o.meshes.forEach((function(t){if(!c&&t.name==e.name&&t.actions&&t.actions[0]&&t.actions[0].type)return r=t.actions[0],void(c=!0)})),!c){var d=0,u=!1,m=0;s.traverse((function(t){!u&&t.isMesh&&(t==e&&(d=m,u=!0),m++)}));var p=t.getters.findCompMeshByCompUidAndIdMesh(i,d);p.actions&&p.actions[0]&&(r=p.actions[0])}r&&(t.doAction(r,!0),r.vFeedback&&"0"!==r.vFeedback&&t.doVisualFeedBack(e))}}}}isActionOnMeshOrCompItem(e){if(e.userData.isTextChild&&(e=e.parent),e.compUid){var t=this.getters.getCompItemByCompUid(e.compUid).actions;return!!(t&&t[0]&&t[0].type)}if(e.userData.isVideoControl)return"play"==e.name||"pause"==e.name||("mute"==e.name||"unmute"==e.name);var o=null;if(e.traverseAncestors(e=>{!o&&e.compUid&&(o=e)}),!o)return!1;var n=o.compUid,i=0,a=!1,r=0;o.traverse((function(t){!a&&t.isMesh&&(t==e&&(i=r,a=!0),r++)}));var s=!1,l=this.getters.findCompMeshByCompUidAndIdMesh(n,i);return l.actions&&l.actions[0]&&(s=!0),s}doVisualFeedBack(e){e.originalScale||(e.originalScale={x:e.scale.x,y:e.scale.y,z:e.scale.z});var t=e.originalScale.x,o=e.originalScale.y,n=e.originalScale.z;e.scale.set(.9*t,.9*o,.9*n),new TWEEN.Tween(e.scale).to({x:t,y:o,z:n},300).start()}doAction(e,t=!1){new c_action(this,e,t)}setOverlay(e,t,o=1){var n=this;if(void 0===e||0!=e){var i=t.innerHTML;if(n.domOverlay=t,n.domOverlay.innerHTML="",n.domOverlay.style.zIndex=o,n.overlay=null,void 0!==e&&-1!=e){var a=n.getters.getOverlayByUid(e);a&&(simLog({what:"overlay",action:"change overlay",name:a.name,uid:a.uid}),n.overlay=new c_overlay(a,n.domOverlay))}else""!=i&&simLog({what:"overlay",action:"remove overlay",name:null,uid:null})}}hideSceneBackground(){this.sceneSkybox&&(this.sceneSkybox.visible=!1)}startLoading(){removeElementByID("sceneLoader");var e=document.createElement("div");e.id="sceneLoader",e.innerHTML='
',document.body.appendChild(e)}stopLoading(){removeElementByID("sceneLoader")}}class controlsShare{constructor(e){var t=this;t.compEngine=e,t.playerData=_mainData.skin,t.scriptURL=_config.libsFolder+"qr-code-styling150.js",t.qrCode=null,t.canvasQRParent=null,t.size=240,t.assetsFolder=t.compEngine.genericAssetsFolder,t.addControls()}addControls(){var e=this;if(!_config.isPlayer&&!_config.simulator){var t=e.playerData.mainScreen,o=document.querySelector("#topRightButtons .shareBtns");if(t){if(removeElementByID("b_share"),removeElementByID("b_qrCode"),_browser.share&&t.shareButton&&t.shareButton.enabled){var n=document.createElement("span");n.id="b_share",(i=document.createElement("img")).src=e.assetsFolder+"icons/icon-share.svg",n.appendChild(i),o.appendChild(n),$(n).on("click",(function(){shareProject()}))}if(t.QRButton&&t.QRButton.enabled){var i,a=document.createElement("span");a.id="b_qrCode",(i=document.createElement("img")).src=e.assetsFolder+"icons/icon-qr-code.svg",a.appendChild(i),o.appendChild(a),$(a).on("click",(function(){e.showQrCode()}))}}}}showQrCode(){var e=this;if(void 0===window.QRCodeStyling){var t=document.createElement("script");return t.onload=function(){e.showQrCode()},t.src=e.scriptURL,void document.head.appendChild(t)}var o=new URL(_shareURL);o.searchParams.delete("simulator"),o.searchParams.set("QRShare","true");var n=o.href;openModal({buttons:!1,closeButton:!0}),e.canvasQRParent=document.createElement("div");var i=document.querySelector("#alertModal .text");i.appendChild(e.canvasQRParent);var a=document.createElement("p");a.innerText=getText("QRShare"),a.style.fontSize="18px",a.style.margin="10px",i.appendChild(a),e.qrCode=new QRCodeStyling({width:e.size,height:e.size,margin:0,type:"canvas",data:n,qrOptions:{typeNumber:"0",mode:"Byte",errorCorrectionLevel:"M"}}),e.qrCode.append(e.canvasQRParent)}}class scenesNavigation{constructor(e){var t=this;t.compEngine=e,t.nbScenes=e.data.composition.length,t.addDomElements()}addDomElements(){var e=this,t=e.nbScenes;if(1!=t){var o,n,i=document.getElementById("pagination");for(i.innerHTML="",o=0;o=5&&n.classList.add("small"),n.setAttribute("data-index",o),n.textContent=e.compEngine.data.composition[o].name,i.appendChild(n),n.addEventListener(_clickOrTouch,(function(){var t=1*this.getAttribute("data-index");e.compEngine.changeScene(t)}))}}show(){1!=this.nbScenes&&$("#pagination").css("display","block")}setClasses(e){var t=$("#pagination .button");t.removeClass("active"),t.eq(e).addClass("active")}}class c_action{constructor(e,t,o=!1,n=null){this.actionData=t,this.compEngine=e,this.callback=n,this.doAction(o)}doAction(e=!1){var t=this,o=t.actionData,n=t.compEngine,i=n.getters,a=o.type;if(""==o.eventLabel&&(o.eventLabel=null),a&&""!=a){var r=!1;e&&(r=!0);var s="action: "+a;if("changeScene"==a){r=!0;var l=i.getSceneIndexByUid(o.sceneUid);if(null!==l){if(n.currentSceneIndex==l)return void(t.callback&&t.callback.call(t));var c=null;n.modulesEngine.virtualTourModule&&(c=o.angles),n.changeScene(l,t.callback,{angles:c})}}if("previousScene"==a){r=!0;var d=n.data.composition.length;(u=n.currentSceneIndex-1)<0&&(u=d-1),d>1&&n.changeScene(u,t.callback)}if("nextScene"==a){r=!0;var u;d=n.data.composition.length;(u=n.currentSceneIndex+1)==d&&(u=0),d>1&&n.changeScene(u,t.callback)}if("changeOverlay"==a&&(r=!0,n.setOverlay(o.overlayUid,document.querySelector("#sceneOverlay"))),"switchState"==a){r=!0;var m=n.modulesEngine.statesModule;if(!m)return;var p=i.getStateByUid(o.stateUid);if(!p)return;s="state: "+p.name,m.applyStateByUid(o.stateUid)}if("stopAllAudios"==a&&n.stopAudios(),"setVolume"==a){if(!(A=i.getCompItemByCompUid(o.compUid)))return;if("audio"==A.type&&A.audioItem.setVolume(o.volume),"video"==A.type){var g=n.videosUtils.getVideoNodeByCompUid(o.compUid);g&&(g.volume=o.volume/100)}}if("textBox"==a){s="media popup";var h={h2:o.textBoxTitle,p:o.textBoxText};if(o.translations&&o.translations.enabled&&n.modulesEngine.languagesModule&&(h.h2=n.modulesEngine.languagesModule.getText(o,"textBoxTitle",o.textBoxTitle),h.p=n.modulesEngine.languagesModule.getText(o,"textBoxText",o.textBoxText)),o.media){var f=o.media.uid;o.translations&&o.translations.enabled&&n.modulesEngine.languagesModule&&(f=n.modulesEngine.languagesModule.getImageUid(o,o.media.uid));var v=n.library.getItemByUid(f);if(v&&"image"==v.type){var y=n.library.getImageSrcByUid(f);h.image={url:y,width:v.width,height:v.height}}v&&"video"==v.type&&(h.video={url:n.projectFolder+v.url,width:v.width,height:v.height})}var b={content:h,colors:{textColor:o.textColor,titleColor:o.titleColor,bgColor:o.bgColor},useButton:o.useButton,stateUid:o.stateUid};t.openTextBox(b)}if("www"==a){r=!0;var E=o.wwwUrl;!E&&o.www&&(E=o.www),o.eventLabel&&(s=s+" "+o.eventLabel),t.openLink(o,E)}if("email"==a&&(r=!0,setTimeout((function(){t.openLink(o,o.email)}),100)),"call"==a)r=!0,M="tel:"+(M=(M=cleanString(o.callNumber)).replace(/[a-z]/gi,"")),setTimeout((function(){t.openLink(o,M)}),100);if("playVideo"==a&&(o.itemsCompUid&&o.itemsCompUid.forEach((function(e){n.playVideoByCompUid(e)})),o.matsUid&&o.matsUid.forEach((function(e){var t=i.getMaterialByUid(e);t&&"VideoMaterial"==t.type&&t.colorMap&&n.playVideoByUid(t.colorMap.uid)}))),"pauseVideo"==a&&(o.itemsCompUid&&o.itemsCompUid.forEach((function(e){n.pauseVideoByCompUid(e)})),o.matsUid&&o.matsUid.forEach((function(e){var t=i.getMaterialByUid(e);t&&"VideoMaterial"==t.type&&t.colorMap&&n.pauseVideoByUid(t.colorMap.uid)}))),"stopVideo"==a&&(o.itemsCompUid&&o.itemsCompUid.forEach((function(e){n.stopVideoByCompUid(e)})),o.matsUid&&o.matsUid.forEach((function(e){var t=i.getMaterialByUid(e);t&&"VideoMaterial"==t.type&&t.colorMap&&n.stopVideoByUid(t.colorMap.uid)}))),"restartTimeline"==a&&(n.timeline.isPaused&&n.timeline.resume(),n.changeScene(n.currentSceneIndex)),"pauseTimeline"==a&&n.timeline.pause(),"resumeTimeline"==a&&n.timeline.resume(),"embedVideo"==a){var w=o.embedVideoRatio,_=window.innerWidth/window.innerHeight;if(!(S=o.embedVideoID))return;S.length>11&&(S=S.substr(0,11));var S=cleanString(S);t.openEmbedPopUp("video");var T=document.querySelector("#embedContent .content");n.setAudioVolume(0),w>=_?(C=window.innerWidth-10-4,k=parseInt(C/w)):(k=window.innerHeight-10-4,C=parseInt(k*w)),T.innerHTML='';y="https://www.youtube.com/embed/"+S;o.embedVideoStartTime&&(y+="?start="+1*o.embedVideoStartTime),T.querySelector("iframe").src=y}if("embedWebsite"==a&&t.openEmbedWebsite(o),"iframe"==a){var M,x=validateURL(M=cleanString(o.iframeCode));if(!x){if(!(x=validateURL(M=o.iframeCode.match(/(http|ftp|https):\/\/([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/)[0])))return}t.openEmbedPopUp("website");var C;T=document.querySelector("#embedContent .content");(C=window.innerWidth-20)<360&&(C=360),C>1500&&(C=1500);var k=window.innerHeight-100;T.innerHTML='',T.querySelector("iframe").src=M}if("setMaterial"==a){if(!o.target)return;var A,R=o.target[0];if(!(A=i.getCompItemByCompUid(R.compUid)))return;var B=i.findCompMeshByCompUidAndIdMesh(R.compUid,R.idm),L=o.newMaterialUid;B.mats[R.indexMat]=L,n.data.materials.forEach((function(e,t){e.uid==L&&n.updateMaterial(A,t)}))}if("share"==a&&(r=!0,shareProject()),"eShop"==a&&n.modulesEngine.openEShopModule(o.eShopCode),"cameraTarget"==a){console.log("look at camera target -----------");var I=1*o.cameraTarget,D=1*o.duration,U=t.compEngine.rootComposition,P=i.getThreejsItemByCompUid(U,I);if(!P)return void console.log("item not found");(R=_app.compEngine.cameraTargetHook).position.copy(_app.trackingEngine.camera.position);var H=new THREE.Vector3;P.getWorldPosition(H),H.x*=-1,H.y*=-1,H.z*=-1,console.log(P),console.log(H);var O=(new THREE.Euler).copy(R.rotation);R.lookAt(H);var V=(new THREE.Euler).copy(R.rotation);R.rotation.copy(O);var z=_app.compEngine.tweenCameraPosition;z&&z.stop(),_app.compEngine.tweenCameraPosition=new TWEEN.Tween(O).to(V,D),_app.compEngine.tweenCameraPosition.start(),_app.compEngine.tweenCameraPosition.onUpdate((function(e){R.rotation.set(e.x,e.y,e.z);var t=new THREE.Vector3;_app.compEngine.cameraTarget.getWorldPosition(t),_app.trackingEngine.camera.lookAt(t)})),_app.compEngine.tweenCameraPosition.onComplete((function(e){console.log("e cam p"),console.log(R.rotation)}))}if("vcf"==a&&t.doVCF(o),"recenter3dof"==a&&"floating"==n.data.tracking.trackingMode&&_app.trackingEngine.recenter3Dof(),"resetUserTransform"==a&&"slam"==n.data.tracking.trackingMode&&_app.trackingEngine.resetUserTransform(),"resetGesturesModule"==a&&n.modulesEngine.gesturesModule&&n.modulesEngine.gesturesModule.reset(o),"playModelAnimation"==a){if(!o.compUid)return;var $=o.animationIndex;null!=$&&$>=0&&(o.index=$,n.playModelAnimation(o))}if("pauseModelAnimations"==a&&n.pauseModelAnimations(o),"playSimpleAnimation"==a&&t.playBasicAnimation(o),"stopSimpleAnimation"==a&&t.stopBasicAnimation(o),"mapMessage"==a&&setTimeout((function(){_app.common.postMessage({mapAction:o})}),1*o.delay),"jsAPIAction"==a&&(o.eventLabel?s="action: "+o.eventLabel:r=!1,n.data.modules.frontJsApi&&n.data.modules.frontJsApi.enabled)){var N={},j=null;o.params&&(o.params.forEach((function(e){N[e.key]=e.value})),o.params[0]&&(j=o.params[0].key)),simLog({what:"api",action:"API action",name:j,uid:null});const e=new CustomEvent("API_actionEvent",{detail:N});document.dispatchEvent(e)}var F=n.modulesEngine.gamingModule;if(F&&("gamingEvent"==a&&(r=!1,F.triggerEvent(1*o.gamingEventUid)),"gamingStartTimer"==a&&(r=!0,F.startTimer(1*o.gamingTimerUid)),"gamingStopTimer"==a&&(r=!0,F.stopTimer(1*o.gamingTimerUid))),null!=o.uidAudio){var W=1*o.uidAudio;W&&(o.volume=100,n.playActionAudio(W,o,!1))}r&&_app.ga.gaEvent({event:"button action",event_category:"scene",event_label:s})}}openLink(e,t,o){if(console.log("openlink",t,e.wwwModal),o=!0,!isModalOpen()){var n=validateURL(t=cleanString(t)),i=!1,a=validateEmail(t),r=!1;if("tel:"==t.substring(0,4)&&(i=!0),n&&(r=!0),i&&(r=!0),a&&(r=!0),r||console.log("url not valid"),r)if(null===e&&(e={}),void 0===e.wwwModal&&(e.wwwModal=!0),void 0===e.wwwSameTab&&(e.wwwSameTab=!1),e.wwwModal){var s=null,l=null,c=t;n&&(s="Visit this page?",l=""+(c=(c=c.replace("https://","").replace("http://","")).replace(/\/$/,""))),i&&(o=!1,e.wwwSameTab=!1,c=c.replace("tel:",""),t=t.replace(/\s+/g,""),s="Call this number?",e.title&&(s=e.title),l=""+c),a&&(o=!1,e.wwwSameTab=!1,t="mailto:"+(t=t.replace(/\s+/g,"")),e.emailTitle&&(t+="?subject="+cleanString(e.emailTitle)),s="Write a message to this email?",e.title&&(s=e.title),l=""+c),e.wwwText&&""!=e.wwwText&&(s=null,l=e.wwwText),s&&(s=cleanString(s)),l&&(l=cleanString(l));var d={h2:s,p:l,buttons:!0,yesButton:getText("yes"),noButton:getText("cancel"),closeButton:!1,callbackYes:function(){e.wwwSameTab?(window.location=t,_body.innerHTML="",_body.style.background="#a0a0a0"):_config.isDebug||_config.simulator||_config.noViews?window.open(t,"_blank","noopener, noreferrer"):window.open(t,"_blank","noopener")},callbackNo:function(){}};if(setTimeout((function(){openModal(d)}),100),o){var u=new XMLHttpRequest;u.open("GET","/og/?url="+t),u.onload=function(){if(u.status>=200&&u.status<400){var e=JSON.parse(u.responseText);_config.isDebug&&console.log(e);var t=document.createElement("div");t.className="og";var o=e["og:title"],n=e["og:image"];if(!document.getElementById("alertModal"))return;var i,a=document.querySelector("#alertModal .text");if(!a)return;if(n)(i=document.createElement("img")).src=""+n,t.appendChild(i);if(o)(i=document.createElement("p")).innerText=""+o,t.appendChild(i);(o||n)&&a.appendChild(t)}else console.log("error a")},u.onerror=function(){console.log("error b")},u.send()}}else e.wwwSameTab?(window.location=t,_body.innerHTML="",_body.style.background="#a0a0a0"):_config.isDebug||_config.simulator||_config.noViews?window.open(t,"_blank","noopener, noreferrer"):window.open(t,"_blank","noopener")}}openEmbedWebsite(e){var t=cleanString(e.embedWebsiteURL);if(validateURL(t)){this.openEmbedPopUp("website");var o=document.querySelector("#embedContent .content"),n=window.innerWidth-20;n<350&&(n=350),n>1500&&(n=1500);var i=window.innerHeight-100,a=t.split(".").pop();if("jpg"==a||"jpeg"==a||"png"==a||"webp"==a){o.innerHTML='';var r=o.querySelector("img");return r.src=t,r.style.maxWidth=n+"px",void(r.style.maxHeight=i+"px")}o.innerHTML='';var s=o.querySelector("iframe");s.onload=e=>{addToLog("iframe on load")},s.src=t}}openTextBox(e){var t=this.compEngine,o=e.colors,n=e.useButton,i={h2:e.content.h2,p:e.content.p,image:e.content.image,video:e.content.video,buttons:!1,closeButton:!0};o&&(i.titleColor=o.titleColor,i.textColor=o.textColor,i.bgColor=o.bgColor),n&&(i.buttons=!0,i.OKButton="ok",i.closeButton=!1),i.callbackYes=function(){t.setFocus(!0),t.setAudioVolume(1),e.stateUid&&t.doAction({type:"switchState",stateUid:e.stateUid})},i.callbackNo=function(){t.setFocus(!0),t.setAudioVolume(1)},t.setFocus(!1),openModal(i)}openEmbedPopUp(e=null){var t=this.compEngine;t.setFocus(!1),removeElementByID("embedContent");var o=document.createElement("div");o.id="embedContent",e&&(o.className=e),o.innerHTML='
',document.body.appendChild(o),$("#embedContent").css("display","block"),document.querySelector("#embedContent .b_close").addEventListener("click",(function(){t.setFocus(!0),t.setAudioVolume(1),removeElementByID("embedContent")}))}doVCF(e){e.firstName||e.lastName||console.log("vcf: missing first and last name");var t=this.compEngine,o="";o+="BEGIN:VCARD\n",o+="VERSION:3.0\n",e.lastName&&(o+="N:"+e.lastName+";"+e.firstName+"\n"),e.firstName&&(o+="FN:"+e.firstName+" "+e.lastName+"\n"),e.phone&&(o+="TEL;TYPE=WORK;VOICE:"+e.phone+"\n"),e.phoneHome&&(o+="TEL;TYPE=HOME;VOICE:"+e.phoneHome+"\n"),e.companyAddress&&(o+="ADR;TYPE=WORK:;;"+e.companyAddress+"\n");var n=e.companyName;if(n&&(o+="ORG:"+n+"\n"),e.email&&(o+="EMAIL;TYPE=PREF,INTERNET:"+e.email+"\n"),e.www&&(o+="URL:"+e.www+"\n"),e.note&&(o+="NOTE:"+e.note+"\n"),e.role&&(o+="ROLE:"+e.role+"\n"),e.media&&e.media.uid){var i=t.library.getItemByUid(e.media.uid);if(i){var a=t.projectFolder+i.url;var r=document.createElement("img");r.addEventListener("load",(function(e){var t=function(e){const t=document.createElement("canvas"),o=t.getContext("2d");var n=300*e.height/e.width;return t.width=300,t.height=n,o.drawImage(e,0,0,300,n),t.toDataURL("image/jpeg")}(e.currentTarget);t=t.replace("data:image/jpeg;base64,",""),r=null,o+="PHOTO;TYPE=JPEG;ENCODING=b:"+t+"\n",s()})),r.onerror=function(){console.log("ERROR load vcf image"),s()},r.src=""+a}else s()}else s();function s(){o+="END:VCARD";const t=encodeURIComponent(o);var n="";e.firstName&&(n+=e.firstName+" "),e.lastName&&(n+=e.lastName+"\n"),n+="\n",e.role&&(n+=e.role+"\n"),e.companyName&&(n+=e.companyName+"\n"),n+="\n",e.phone&&(n+=e.phone+"\n"),e.email&&(n+=e.email+"\n"),e.www&&(n+=e.www+"\n"),openModal({h2:"Save new contact?",p:n,buttons:!0,yesButton:"yes",noButton:"cancel",closeButton:!1,callbackYes:function(){window.open("data:text/vcard;charset=utf-8;urlencoded,"+t)}})}}playBasicAnimation(e){var t=this,o=null;if(e.onCompItem){if(e.itemsCompUid&&e.itemsCompUid.length){var n=e.itemsCompUid[0],i=t.compEngine.getters.getCompItemByCompUid(n);if(i){var a={type:e.animationType,speed:e.animationSpeed,axis:e.animationAxis,loop:e.animationLoop};t.compEngine.currentCompScene.startBasicAnimation(i,a)}}}else{if(e.target&&e.target[0]){var r=e.target[0];if(!r)return;var s=t.compEngine.rootComposition;o=t.compEngine.getters.getCompMeshByCompUidAndIdMesh(s,r.compUid,r.idm)}if(o){var l,c,d,u,m=e.animationType,p=1*e.animationSpeed,g=e.animationAxis,h=e.animationLoop,f=o;t.stopBasicAnimation(e,m),p=11-p;var v=f.rotation.x,y=f.rotation.y,b=f.rotation.z;if(null==f.originalScale&&(f.originalScale={x:f.scale.x,y:f.scale.y,z:f.scale.z}),f.basicAnimationTweenArray||(f.basicAnimationTweenArray=[]),"scale_up_down"==m){f.scale.set(f.originalScale.x,f.originalScale.y,f.originalScale.z);var E=1.1*(M=f.scale.x),w=1.1*(x=f.scale.y),_=1.1*(C=f.scale.z);l=250*p,c=parseInt(60*l/100),d=parseInt(40*l/100);var S=new TWEEN.Tween(f.scale).to({x:E,y:w,z:_},c),T=new TWEEN.Tween(f.scale).to({x:M,y:x,z:C},d);S.chain(T),h&&T.chain(S),S.start(),S.animationType=m,T.animationType=m,f.basicAnimationTweenArray.push(S),f.basicAnimationTweenArray.push(T)}if("pulse"==m){f.scale.set(f.originalScale.x,f.originalScale.y,f.originalScale.z);var M,x,C;E=1.1*(M=f.scale.x),w=1.1*(x=f.scale.y),_=1.1*(C=f.scale.z);l=250*p,c=parseInt(30*l/100),d=parseInt(10*l/100),u=parseInt(60*l/100);S=new TWEEN.Tween(f.scale).to({x:E,y:w,z:_},c),T=new TWEEN.Tween(f.scale).to({x:M,y:x,z:C},d);var k=new TWEEN.Tween(null).to(null,u);S.chain(T),T.chain(k),h&&k.chain(S),S.start(),S.animationType=m,T.animationType=m,k.animationType=m,f.basicAnimationTweenArray.push(S),f.basicAnimationTweenArray.push(T),f.basicAnimationTweenArray.push(k)}if("rot_clockwise"==m){c=2500*p;var A={v:0},R={v:-2*Math.PI};S=new TWEEN.Tween(A).to(R,c).onUpdate((function(){f.rotation.set(v,y,b),"x"==g&&f.rotateX(A.v),"y"==g&&f.rotateY(A.v),"z"==g&&f.rotateZ(A.v)})).onComplete((function(){f.rotation.set(v,y,b),f.rotateY(1*R.v)})).start();h&&S.repeat(1/0),S.animationType=m,f.basicAnimationTweenArray.push(S)}if("rot_anticlockwise"==m){c=2500*p;A={v:0},R={v:2*Math.PI},S=new TWEEN.Tween(A).to(R,c).onUpdate((function(){f.rotation.set(v,y,b),"x"==g&&f.rotateX(A.v),"y"==g&&f.rotateY(A.v),"z"==g&&f.rotateZ(A.v)})).onComplete((function(){f.rotation.set(v,y,b),f.rotateY(1*R.v)})).start();h&&S.repeat(1/0),S.animationType=m,f.basicAnimationTweenArray.push(S)}}}}stopBasicAnimation(e,t=null){var o=this;if(e.onCompItem){if(e.itemsCompUid&&e.itemsCompUid.length){var n=e.itemsCompUid[0],i=o.compEngine.getters.getCompItemByCompUid(n);i&&o.compEngine.currentCompScene.stopBasicAnimation(i)}}else{var a=null;if(e.target&&e.target[0]){var r=e.target[0],s=o.compEngine.rootComposition;a=o.compEngine.getters.getCompMeshByCompUidAndIdMesh(s,r.compUid,r.idm)}if(a){var l=a;if(l.basicAnimationTweenArray)if(t){for(c=0;c8e3&&(u=8e3);var m=(l+=u)+2e3+800*c;function p(){t.loaded||(t.loaded=!0,_config.isDebug&&console.log("%cvideo ready "+i,"background: #222; color: #bada55"),e.call(t))}o.addEventListener("canplaythrough",(function(e){t.loaded||(_config.isDebug&&console.log("%ccan play through "+i,"background: #333; color: #bada55"),setTimeout((function(){p()}),500))}),!1),o.addEventListener("loadedmetadata",(function(e){t.loaded||(o.play().catch(e=>{console.log("failed promise preload "+i),console.log(e)}).then(()=>{}),t.updateLoader(25),setTimeout((function(){t.updateLoader(50)}),parseInt(2*l/4)),setTimeout((function(){p()}),parseInt(4*l/4)))}),!1),o.addEventListener("error",e=>{if(console.log("%cERROR loading video A "+i,"background: #aa2222; color: #cccccc"),addToLog("vvv error loading video A"),_config.isDebug&&e.path&&e.path[0]){var t=e.path[0].error;console.log(t)}p()}),setTimeout((function(){t.loaded||(console.log("%cvideo cheat "+i,"background: #222; color: #bada55"),p())}),m),o.src=t.url,o.load()}updateLoader(e){this.library.updateAssetLoader_incomplete(this.libraryItem,e)}blur(){var e=this.domElement;e.pause(),e.setAttribute("data-paused","true")}focus(){var e=this;"play"==e.lastOrder&&(console.log("vvv focus => play",e.uid,e.lastOrder),e.play())}fakeStart(){var e=this,t=e.domElement,o=e.uid;t.volume=0,addToLog("vvv fake start libVideo no vol "+o),t.play().then((function(){addToLog("vvv fake libVideo: promised then "+o),e.stop(),t.volume=e.volumeLevel})).catch((function(e){addToLog("vvv ERROR fake play libVideo promise "+o)}))}stop(){this.lastOrder="stop";var e=this.domElement;e.paused||e.pause(),e.currentTime=0}pause(){this.lastOrder="pause";var e=this.domElement;e.pause(),e.setAttribute("data-paused","true")}play(e=!1,t=!1){var o=this,n=o.uid;console.log("vvv play",o.uid,"| last",o.lastOrder),o.lastOrder="play";var i=o.domElement;if(i.paused)if(_browser.ios&&o.underPromise)console.log("under promise => ABORT play",o.uid);else{var a=!0;o.libraryItem.audio&&(a=!1),0==o.compEngine.audioVolume&&(a=!0),i.muted=a,t&&(i.currentTime=0);var r=i.play();o.underPromise=!0,r.then((function(){if(o.underPromise=!1,"play"!=o.lastOrder)return console.log("vvv ERROR play promise",n,"| last",o.lastOrder),console.log("vvv => back to pause"),void o.pause();console.log("vvv play promise ok "+n+" paused: "+i.paused),i.setAttribute("data-paused","false"),i.paused&&_browser.ios&&setTimeout((function(){console.log("vvv PAUSED "+n+" => try again with restart"),o.play(!1,!0)}),80)})).catch((function(e){o.underPromise=!1,console.log("ERROR: vvv play prevented "+n),console.log(e)}))}else console.log("video data-paused ",i.getAttribute("data-paused"))}}class c_compScene{constructor(e,t,o){this.compEngine=e,this.getters=e.getters,this.name=o.name,this.uid=o.uid,this.index=t,this.sceneData=o,this.useTransition=!1,this.transitionType=this.compEngine.data.settings.pagination.transition.type,this.isInTransition=!1,this.dimmer=null,this.savedCameraPosition=null,this.transitionType&&(this.useTransition=!0),"slam"==e.trackingMode&&(this.useTransition=!1)}setActive(e=!1){var t=this;console.log("*** SCENE - set active:",t.name),simLog({what:"scene",action:"change scene",name:t.name,uid:t.uid});var o=t.compEngine;o.modulesEngine.gesturesModule&&o.modulesEngine.gesturesModule.resetOnSceneChange();var n=!1;o.usingCamera||(n=!0),"mobile"!=_browser.device||"slam"!=o.trackingMode||_config.isPlayer||(n=!1),n&&t.setupSceneBackground(),o.setOverlay(t.sceneData.overlay,document.querySelector("#sceneOverlay")),e||t.intro()}doTimeline(){console.log("----- do timeline -----");var e=this.compEngine,t=!1;(_config.simulator||"image"!=e.trackingMode)&&(t=!0),"image"==e.trackingMode&&_nft&&e.p_trackingEngine.getCompositionVisibility()&&(t=!0),t&&e.started&&e.timeline.changeScene(this.sceneData)}setAngles(e){console.log("scene, set angle to",e.y);var t=THREE.MathUtils.degToRad(e.y),o=this.compEngine.rootComposition;o.rotation.set(0,0,0),o.updateMatrixWorld(),o.rotateY(t)}resetAngles(){var e=this.compEngine.rootComposition;console.log("scene, reset angles to 0 0 0"),e.rotation.set(0,0,0)}setupSceneBackground(){var e=this,t=e.compEngine;if(_config.simulator&&_config.simulator.mobile&&t.p_trackingEngine.trackingSettings.mobile.useCamera)return;if(_config.simulator&&_config.simulator.mobile&&t.usingCamera)return;var o=!t.usingCamera;if(_app.isInPlayerMode&&(o=!0),!o&&!t.sceneSkybox)return;var n=e.sceneData.bg,i={topColor:{type:"c",value:new THREE.Color(n.colors.top)},bottomColor:{type:"c",value:new THREE.Color(n.colors.bottom)},offset:{type:"f",value:0},exponent:{type:"f",value:.9}},a=new THREE.Color(n.colors.top);a.convertLinearToSRGB();var r=new THREE.Color(n.colors.bottom);r.convertLinearToSRGB(),i.topColor={type:"c",value:a},i.bottomColor={type:"c",value:r};var s=new THREE.ShaderMaterial({uniforms:i,vertexShader:"\n\t\tvarying vec3 vWorldPosition;\n void main() {\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}",fragmentShader:"\n\t\tuniform vec3 topColor;\n uniform vec3 bottomColor;\n uniform float offset;\n uniform float exponent;\n varying vec3 vWorldPosition;\n void main() {\n float h = normalize( vWorldPosition + offset ).y;\n gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max( h, 0.0 ), exponent ), 0.0 ) ), 1.0 );\n\t\t}",side:THREE.BackSide});if(e.sceneSkybox)t.sceneSkybox.material=s;else{var l=new THREE.SphereGeometry(1450,32,16);t.sceneSkybox=new THREE.Mesh(l,s),t.sceneSkybox.name="scene background",t.scene3.add(t.sceneSkybox)}t.sceneSkybox.visible=o}playSceneVideos(e=!1){var t=this;t.getSceneItems("video").forEach((function(o){var n=o.compUid;t.getters.getThreejsItemByCompUid(t.compEngine.rootComposition,n).visible&&t.compEngine.videosUtils.playVideoByCompUid(n,e)})),t.compEngine.playCompositionMaterialsVideos()}playSceneAudios(){this.sceneData.timeline.enabled||this.getSceneItems("audio").forEach((function(e){e.audioItem.update(),e.audioItem.play(e.audio.loop)}))}startAnimations(){var e=this;e.getSceneItems().forEach((function(t){e.startBasicAnimation(t,t.basicAnim)}))}startBasicAnimation(e,t){var o=this;if(t){var n=o.getters.getThreejsItemByCompUid(o.compEngine.rootComposition,e.compUid);if(n){void 0===t.speed&&(t.speed=1);var i,a,r,s,l,c,d,u,m,p,g,h=t.type,f=1*t.speed,v=t.loop,y=t.axis;if(void 0===y&&(y="y"),void 0===v&&(v=!0),f=11-f,i=n.scale.x,a=n.scale.y,r=n.scale.z,n.originalScale||(n.originalScale={x:i,y:a,z:r}),o.stopBasicAnimation(e),n.basicAnimationTweenArray||(n.basicAnimationTweenArray=[]),"scale_up_down"==h){s=i*(p=1.1),l=a*p,c=r*p,g=250*f,d=parseInt(60*g/100),u=parseInt(40*g/100);var b=new TWEEN.Tween(n.scale).to({x:s,y:l,z:c},d),E=new TWEEN.Tween(n.scale).to({x:i,y:a,z:r},u);b.chain(E),v&&E.chain(b),b.start(),n.basicAnimationTweenArray.push(b),n.basicAnimationTweenArray.push(E)}if("pulse"==h){s=i*(p=1.1),l=a*p,c=r*p,g=250*f,d=parseInt(30*g/100),u=parseInt(10*g/100),m=parseInt(60*g/100);b=new TWEEN.Tween(n.scale).to({x:s,y:l,z:c},d),E=new TWEEN.Tween(n.scale).to({x:i,y:a,z:r},u);var w=new TWEEN.Tween(null).to(null,m);b.chain(E),E.chain(w),v&&w.chain(b),b.start(),b.animationType=h,E.animationType=h,w.animationType=h,n.basicAnimationTweenArray.push(b),n.basicAnimationTweenArray.push(E),n.basicAnimationTweenArray.push(w)}if("rot_clockwise"==h){d=2500*f;b=new TWEEN.Tween(n.rotation).to({[y]:"-"+2*Math.PI},d).onComplete((function(){Math.abs(n.rotation.y)<=-2*Math.PI&&(n.rotation.y=n.rotation.y%(-2*Math.PI))})).start();v&&b.repeat(1/0),n.basicAnimationTweenArray.push(b)}if("rot_anticlockwise"==h){d=2500*f;b=new TWEEN.Tween(n.rotation).to({[y]:"+"+2*Math.PI},d).onComplete((function(){Math.abs(n.rotation.y)>=2*Math.PI&&(n.rotation.y=n.rotation.y%(2*Math.PI))})).start();v&&b.repeat(1/0),n.basicAnimationTweenArray.push(b)}}}}stopBasicAnimation(e){var t=this.getters.getThreejsItemByCompUid(this.compEngine.rootComposition,e.compUid);if(t&&t.basicAnimationTweenArray){var o;for(o=0;o{t.dimmer.material.opacity=e.opacity}),n.start()}if(2==t.transitionType){var i={x:(r=_app.trackingEngine.camera).position.x,y:r.position.y,z:r.position.z},a={x:r.position.x,y:r.position.y,z:r.position.z-.5};t.savedCameraPosition={x:r.position.x,y:r.position.y,z:r.position.z},(s=new TWEEN.Tween(i).to(a,o)).easing(TWEEN.Easing.Quadratic.In),s.onUpdate(e=>{r.position.set(e.x,e.y,e.z)}),s.onComplete(e=>{}),s.start()}if(3==t.transitionType){var r,s;i={x:(r=_app.trackingEngine.camera).position.x,y:r.position.y,z:r.position.z},a={x:r.position.x-.5,y:r.position.y,z:r.position.z};t.savedCameraPosition={x:r.position.x,y:r.position.y,z:r.position.z},(s=new TWEEN.Tween(i).to(a,o)).easing(TWEEN.Easing.Quadratic.In),s.onUpdate(e=>{r.position.set(e.x,e.y,e.z)}),s.onComplete(e=>{}),s.start()}setTimeout((function(){t.isInTransition=!1,$("#sceneOverlay, #pagination, #topRightButtons").css({visibility:"visible"}),t.revertCameraPosition(),t.dimmer&&t.dimmer.parent&&t.dimmer.parent.remove(t.dimmer),e.call(t)}),o)}intro(){var e=this;if(e.useTransition){if(e.isInTransition)return console.log("intro - alreasdy in stranstion"),void e.revertCameraPosition();e.isInTransition=!0;var t=Math.floor(e.compEngine.data.settings.pagination.transition.duration/2);if(console.log("*** SCENE - intro",e.name,"t",e.transitionType,t),1==e.transitionType){e.addDimmer(1);var o=new TWEEN.Tween({opacity:1}).to({opacity:.1},t);o.onUpdate(t=>{e.dimmer.material.opacity=t.opacity}),o.start()}if(2==e.transitionType){var n={x:(a=_app.trackingEngine.camera).position.x,y:a.position.y,z:a.position.z+.5},i={x:a.position.x,y:a.position.y,z:a.position.z};e.savedCameraPosition={x:a.position.x,y:a.position.y,z:a.position.z},(r=new TWEEN.Tween(n).to(i,t)).easing(TWEEN.Easing.Quadratic.Out),r.onUpdate(e=>{a.position.set(e.x,e.y,e.z)}),r.onComplete(e=>{}),r.start()}if(3==e.transitionType){var a,r;n={x:(a=_app.trackingEngine.camera).position.x+.5,y:a.position.y,z:a.position.z},i={x:a.position.x,y:a.position.y,z:a.position.z};e.savedCameraPosition={x:a.position.x,y:a.position.y,z:a.position.z},(r=new TWEEN.Tween(n).to(i,t)).easing(TWEEN.Easing.Quadratic.Out),r.onUpdate(e=>{a.position.set(e.x,e.y,e.z)}),r.onComplete(e=>{}),r.start()}setTimeout((function(){e.isInTransition=!1,e.revertCameraPosition(),e.dimmer&&e.dimmer.parent&&e.dimmer.parent.remove(e.dimmer)}),t)}}revertCameraPosition(){var e=this;e.savedCameraPosition&&_app.trackingEngine.camera.position.set(e.savedCameraPosition.x,e.savedCameraPosition.y,e.savedCameraPosition.z)}getSceneItems(e=null){return this.getters.getAllSceneItems(this.sceneData,e)}}class c_timeline{constructor(){var e=this;e.compEngine=_app.compEngine,e.compositionData=null,e.settings=null,e.simulatorBar=null,e.simulatorCursor=null,e.started=!1,e.isActive=!0,e.isPaused=!1,e.currentTime=0,e.getters=new getters(e.compEngine),e.previousVisibility=[],_config.simulator&&e.addTimelineSimulatorBar()}addTimelineSimulatorBar(){var e=this;e.simulatorBar=document.createElement("div"),e.simulatorBar.id="timelineBar";var t=document.getElementById("mainScreen");e.simulatorCursor=document.createElement("div"),e.simulatorCursor.id="simulatorCursor",e.simulatorBar.appendChild(e.simulatorCursor),t.appendChild(e.simulatorBar)}changeScene(e){var t=this;if(console.log("TIMELINE change scene"),t.compositionData=e,t.settings=t.compositionData.timeline,t.compEngine.stopAllVideos(),!t.settings.enabled)return t.started=!1,t.simulatorBar&&(t.simulatorBar.style.display="none"),void setTimeout((function(){t.compEngine.currentCompScene.playSceneVideos(!0),t.compEngine.currentCompScene.playSceneAudios()}),50);t.compEngine.playCompositionMaterialsVideos(!0),t.simulatorBar&&(t.simulatorBar.style.display="block"),t.hideAll(),t.start(),t.previousVisibility=[],t.currentTime=0,t.update(0)}hideAll(){var e=this;e.getters.getAllSceneItems(e.compositionData).forEach((function(t,o){t.timeline&&t.timeline[0]&&(e.previousVisibility[o]=!1,e.setItemVisibility(t,!1))}))}updateVisibilities(){var e=this,t=e.currentTime;e.getters.getAllSceneItems(e.compositionData).forEach((function(o,n){o.timeline&&o.timeline[0]&&function(o,n){var i=!0,a=o.timeline[0];a.in>t&&(i=!1),a.in<=t&&a.out>=t&&(i=!0),a.outt.settings.duration&&(t.settings.loop?t.currentTime-=t.settings.duration:t.currentTime=t.settings.duration),t.updateVisibilities(),_config.simulator)){var o=parseInt(t.currentTime/t.settings.duration*100);t.simulatorCursor.style.left=o+"%"}}}class playerControlsBar{constructor(){var e=this;e.compEngine=_app.compEngine,e.common=_app.common,e.playerInline=null,e.domControls=null,e.assetsFolder=e.compEngine.genericAssetsFolder,e.playerInline=_mainData.skin.inline,e.addControlsBar(),"computer"==_browser.device&&e.addArrowsIcon()}addControlsBar(){var e=this;if(!$("#controlsBar").length){var t=e.playerInline.controls;e.domControls=document.createElement("div"),e.domControls.id="controlsBar";var o=t.bgColor+""+parseInt(255*t.bgAlpha).toString(16);if(e.domControls.style.background=o,document.querySelector("footer").appendChild(e.domControls),_browser.share&&t.buttons.share.enabled){var n;(n=document.createElement("span")).className="b_share";var i=document.createElement("img");i.src=e.assetsFolder+"icons/icon-share.svg",n.appendChild(i),e.domControls.appendChild(n)}_needVolumeButton&&e.addVolumeButton(),(n=document.createElement("span")).className="b_fullScreen";var a=document.createElement("img");a.src=e.assetsFolder+"icons/icon-fullscreen.svg",n.appendChild(a),e.domControls.appendChild(n),$("#controlsBar .b_fullScreen").on("click",(function(){togglePlayerFullSCreen()})),$("#controlsBar .b_share").on("click",(function(){shareProject()}))}}addArrowsIcon(){var e=document.createElement("img");e.className="arrows",e.src=this.assetsFolder+"icons/keyboard-arrows.svg?123",this.domControls.appendChild(e)}addVolumeButton(){var e=this,t=document.createElement("span");t.className="b_volume";var o=document.createElement("img");o.className="on",o.src=e.assetsFolder+"icons/icon-audio-on.svg";var n=document.createElement("img");n.src=e.assetsFolder+"icons/icon-audio-off.svg",n.className="off",t.appendChild(o),t.appendChild(n),e.domControls.appendChild(t),setVolume(null),$(".b_volume").on("click",(function(){setVolume(1-e.compEngine.audioVolume)}))}}class c_overlay{constructor(e,t,o=0){this.data=e,this.dom=t,this.level=o,this.dom.className="overlay",this.compEngine=_app.compEngine,this.assetsFolder=_rootDirectory+"assets/",_config.externalHost&&(this.assetsFolder="assets/");var n=this;window.addEventListener("resize",(function(){n.resizeOverlay()})),n.resizeOverlay(),setTimeout((function(){n.resizeOverlay()}),500),n.data.items&&n.populateOverlay()}populateOverlay(){var e,t,o=this,n=o.dom;for(n.innerHTML="",e=o.data.items.length-1;e>=0;e--)t=o.data.items[e],o.addItem(t,n)}getText(e){var t=e.text,o=this.compEngine.modulesEngine.languagesModule;o&&(t=o.getText(e,"text",e.text));var n=this.compEngine.modulesEngine.gamingModule;return n&&(t=n.setDynamicValues(t)),t}updateDynamicTexts(){var e,t=this,o=t.dom,n=t.compEngine.getters;n.getOverlayItems(t.data.uid).forEach((function(i){("text"==i.type&&(e=o.querySelector('[data-uid="'+1*i.uid+'"] p'))&&(e.textContent=t.getText(i)),"overlay"==i.type)&&n.getOverlayItems(i.overlayUid).forEach((function(n){"text"==n.type&&(e=o.querySelector('[data-uid="'+1*n.uid+'"] p'))&&(e.textContent=t.getText(n))}))}))}resizeOverlay(){if(this.dom){var e=window.innerHeight;_body.classList.contains("webXRSession")&&(e-=40),this.dom.style.width=window.innerWidth+"px",this.dom.style.height=e+"px"}}setCSSTransform(e,t){var o=`translate(${"-"+1*e.center.left+"%, -"+1*e.center.top+"%"})`;e.rotation&&(o+=` rotate(${1*e.rotation}deg)`),t.style.transform=o;var n="";e.center.left-50==0&&(n="center"),e.center.left-50<0&&(n="left"),e.center.left-50>0&&(n="right"),e.center.top-50==0&&(n+=" center"),e.center.top-50<0&&(n+=" top"),e.center.top-50>0&&(n+=" bottom"),t.style.transformOrigin=n}addItem(e,t){var o=this,n=_browser.device;if(_config.simulator&&_config.simulator.mobile&&(n="mobile"),("mobile"!=n||e.devices.mobile)&&("computer"!=n||e.devices.computer)&&("headset"!=n||e.devices.headset)&&("rectangle"==e.type&&o.addRectangle(e,t),"image"==e.type&&o.addImage(e,t),"video"==e.type&&o.addVideo(e,t),"text"==e.type&&o.addText(e,t),"button"==e.type&&o.addButton(e,t),"group"==e.type&&o.addGroup(e,t),"overlay"==e.type&&o.addSubOverlay(e,t),o.compEngine.data.modules.photo&&o.compEngine.data.modules.photo.enabled)){if("slam"==o.compEngine.trackingMode&&!_config.isDebug)return;"photoButton"==e.type&&o.addPhotoModuleButton(e,t),"videoButton"==e.type&&o.addPhotoModuleButton(e,t),"cameraButton"==e.type&&_browser.mobile&&"slam"!=o.compEngine.trackingMode&&o.addPhotoModuleButton(e,t)}}addRectangle(e,t){var o=this,n=e.unit,i=document.createElement("div");i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,i.style.left=1*e.left+n,i.style.top=1*e.top+n,i.style.width=1*e.width+n,i.style.height=1*e.height+n,e.corner&&(i.style.borderRadius=1*e.corner+"px"),o.addShadow(e,i),o.setCSSTransform(e,i),i.style.backgroundColor=o.hexToRGBA(e.backgroundColor,e.opacity),o.addItemAction(e,i),t.appendChild(i)}addImage(e,t){var o=this,n=e.unit,i=document.createElement("div");i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,i.style.left=1*e.left+n,i.style.top=1*e.top+n,e.corner&&(i.style.borderRadius=1*e.corner+"px");var a=1*e.opacity;if(1!=a&&(i.style.opacity=a),e.sizeByHeight?i.style.height=1*e.height+n:i.style.width=1*e.width+n,e.image&&"circle"==e.image.shape&&(i.style.borderRadius="50%"),o.setCSSTransform(e,i),e.image&&e.image.url){var r=_config.assetsFolder+e.image.url;(u=document.createElement("img")).src=r,i.appendChild(u)}if(e.image&&e.image.uid){var s=o.compEngine,l=e.image.uid;o.compEngine.modulesEngine.languagesModule&&(l=o.compEngine.modulesEngine.languagesModule.getImageUid(e,l));var c=s.getters.getLibItemByUid(l);if(c){var d=c.url;c.webp&&(d=c.webp);var u,m=s.projectFolder+d;(u=document.createElement("img")).src=m,e.sizeByHeight&&u.classList.add("sizeByHeight"),i.appendChild(u),o.addShadow(e,u)}}e.id&&(i.id=e.id),o.addItemAction(e,i),t.appendChild(i)}addVideo(e,t){var o=this,n=e.unit,i=document.createElement("div");if(i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,i.style.left=1*e.left+n,i.style.top=1*e.top+n,i.style.width=1*e.width+n,o.setCSSTransform(e,i),e.video&&e.video.uid){var a=o.compEngine,r=a.getters.getLibItemByUid(e.video.uid);if(r){var s=r.url,l=a.projectFolder+s,c=document.createElement("video");c.src=l,c.playsInline=!0,c.autoplay=!0,c.muted=!0,c.loop=!0,i.appendChild(c)}}e.id&&(i.id=e.id),o.addItemAction(e,i),t.appendChild(i)}addText(e,t){var o=this,n=e.unit,i=document.createElement("div");i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,i.style.left=1*e.left+n,i.style.top=1*e.top+n,i.style.width=1*e.width+n,o.setCSSTransform(e,i);var a=o.getText(e),r=document.createElement("p");r.className=e.textAlign,r.textContent=a,r.style.fontSize=e.fontSize+"px",r.style.color=e.color,"cardo"==e.font&&(r.style.fontFamily="'Cardo', serif"),"oswald"==e.font&&(r.style.fontFamily="'Oswald', sans-serif"),"smilicious"==e.font&&(r.style.fontFamily="'smilicious', sans-serif"),i.appendChild(r),o.addItemAction(e,i),t.appendChild(i)}addButton(e,t){var o=this,n=e.unit,i=document.createElement("div");if(i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,i.style.left=1*e.left+n,i.style.top=1*e.top+n,o.setCSSTransform(e,i),e.useImage){if(i.style.width=1*e.width+"%",e.image&&e.image.url){var a=_config.assetsFolder+e.image.url,r=document.createElement("img");r.src=a,i.appendChild(r)}}else{var s=o.getText(e),l=document.createElement("span");l.className="buttonContent",l.textContent=s,l.style.textAlign=e.textAlign,l.style.fontSize=e.fontSize+"px",l.style.padding=1*e.paddingV+"px "+1*e.paddingH+"px",l.style.borderRadius="4px",l.style.minWidth=1*e.minWidth+"px",l.style.backgroundColor=e.backgroundColor,l.style.color=e.color,"cardo"==e.font&&(l.style.fontFamily="'Cardo', serif"),"oswald"==e.font&&(l.style.fontFamily="'Oswald', sans-serif"),"smilicious"==e.font&&(p.style.fontFamily="'smilicious', sans-serif"),i.appendChild(l)}o.addItemAction(e,i),t.appendChild(i)}addGroup(e,t){var o,n=e.unit,i=document.createElement("div");if(i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,i.style.left=1*e.left+n,i.style.top=1*e.top+n,this.setCSSTransform(e,i),_config.isDebug){var a=document.createElement("span");a.style.display="inline-block",a.style.width="10px",a.style.height="10px",a.style.position="absolute",a.style.transform="translate(-50%, -50%)",a.style.backgroundColor="#ff0000",i.appendChild(a)}for(o=e.items.length-1;o>=0;o--){var r=e.items[o];this.addItem(r,i)}t.appendChild(i)}addSubOverlay(e,t){if(this.level>0)return console.log("error: sub overlay inside sub overlay"),void simLog({what:"overlay",error:"sub inside sub"});var o=e.overlayUid,n=this.compEngine.getters.getOverlayByUid(o);if(n){var i=document.createElement("div");i.setAttribute("data-uid",1*e.uid),i.className="item type_"+e.type,t.appendChild(i);var a=document.createElement("div");a.className="subOverlay",i.appendChild(a);new c_overlay(n,a,1)}}addPhotoModuleButton(e,t){var o=this,n=e.unit,i=document.createElement("div");if(i.className="item type_"+e.type,i.classList.add(e.type),i.style.left=1*e.left+n,i.style.top=1*e.top+n,e.sizeByHeight?i.style.height=1*e.height+n:i.style.width=1*e.width+n,e.image&&"circle"==e.image.shape&&(i.style.borderRadius="50%"),o.setCSSTransform(e,i),e.image&&e.image.uid){var a=o.compEngine,r=a.getters.getLibItemByUid(e.image.uid);if(r){var s=r.url;r.webp&&(s=r.webp);var l=a.projectFolder+s;(c=document.createElement("img")).src=l,e.sizeByHeight&&c.classList.add("sizeByHeight"),i.appendChild(c)}}else{var c=document.createElement("img");"photoButton"==e.type&&(c.src=o.assetsFolder+"icons/icon-camera.svg"),"videoButton"==e.type&&(c.src=o.assetsFolder+"icons/icon-video-camera.svg"),"cameraButton"==e.type&&(c.src=o.assetsFolder+"icons/icon-switch-camera.png"),e.sizeByHeight&&c.classList.add("sizeByHeight"),i.classList.add("defaultIcon"),i.appendChild(c)}o.addItemAction(e,i),t.appendChild(i)}addShadow(e,t){if(e.shadow&&e.shadow.enabled){var o=e.shadow,n=this.hexToRGBA(o.color,1*o.opacity);"rectangle"==e.type||"button"==e.type?t.style.boxShadow=`${1*o.x}px ${1*o.y}px ${1*o.size}px ${n}`:t.style.setProperty("-webkit-filter",`drop-shadow(${1*o.x}px ${1*o.y}px ${1*o.size}px ${n})`)}}addItemAction(e,t){var o=this;e.actions&&e.actions[0]&&(t.classList.add("pointerEvents"),t.addEventListener("click",(function(){o.doItemAction(e)})))}doItemAction(e){var t=e.actions[0],o=this.compEngine;if("takePhoto"!=t.type)if("recordVideo"!=t.type)if("switchCamera"!=t.type)new c_action(o,t,!0);else o.modulesEngine.photoModule.switchCamera();else o.modulesEngine.photoModule.recordVideoOrStop();else o.modulesEngine.photoModule.takePhoto()}hexToRGBA(e,t){return"rgba("+parseInt(e.slice(1,3),16)+", "+parseInt(e.slice(3,5),16)+", "+parseInt(e.slice(5,7),16)+", "+t+")"}}class orientationPermission{constructor(e,t,o){this.common=e,this.controls=t,this.callback=o;var n=this;if(addToLog("--\x3e ASK Orientation Perm"),_browser.insideIframe){var i=!1,a=!0;try{parent.window.location.hostname===window.location.hostname&&(a=!1)}catch(e){}if(_browser.iOSVersion<15&&a&&(i=!0),"chrome"==_browser.name&&_browser.webgl2&&(i=!1),i)return addToLog("iframe motion request iOS "+_browser.iOSVersion),n.common.postMessage({request:"motion",version:_browser.version,browserName:_browser.name}),void window.addEventListener("message",n.gotMessage,!1)}"undefined"!=typeof DeviceOrientationEvent&&("function"==typeof DeviceOrientationEvent.requestPermission?DeviceOrientationEvent.requestPermission().then((function(e){n.gotPermissionState(e)})).catch((function(e){_screens.error.showScreen({text:getText("deviceOrientationRequired"),errorName:"orientation permission"}),console.log("orientation: fail"),console.log(e),console.log(e.name)})):(console.log("no device orientation"),_screens.start.closeScreen(!1,!0)))}gotPermissionState(e){addToLog("motion perm state: "+e),"denied"!=e?(_screens.start.closeScreen(!1,!0),this.callback.call(this)):_screens.error.showScreen({text:getText("deviceOrientationRequired"),errorName:"orientation denied"})}gotMessage(e){if(e.data.permission){var t=e.data.permission;this.gotPermissionState(t)}else{var o=this.controls;if(o){var n=o.deviceOrientation;o.deviceOrientation=e.data.deviceOrientation,n.alpha=e.data.deviceOrientation.alpha,n.beta=e.data.deviceOrientation.beta,n.gamma=e.data.deviceOrientation.gamma,o.enabled=!0}}}}var _xrSession=null,xrRefSpace=null,xrHitTestSource=null,xrViewerSpace=null,_counterDiamonds=0,_disableWebXR=!1;const _slamCanvasSize={width:360,height:640};class slamEngine{constructor(){this.compEngine=null,this.common=null,this.needDeviceOrientationPermission=!1,this.streamSize={},this.loopIsPaused=!1,this.clock=null,this.camera=null,this.controls=null,this.scene3=null,this.renderer=null,this.globalScale=1,this.windowSize=null,this.fingers=[],this.lastTouch={x:0,y:0},this.videoStream=null,this.compositionHasBeenAdded=!1,this.gizmoViewer=null,this.usingWebXR=!1,this.useReticle=!1,this.reticleObj=null,this.isInARSession=!1,this.allowFloors=!1,this.allowWalls=!1,this.inOnFloor=!0,this.xrViewerPose=null,this.reticleGroupLookAt=null,this.gridHelper=null,this.diamonds=[],this.dropDiamonds=!1,this.maxDiamonds=500,this.didDropOnce=!1,this.okToDrop=!1,this.$tapReticle=null,this.usingUSDZ=!1,this.useGeneratedUsdz=!1,this.usdzLoader=null,this.trackingSettings=null,this.slamTracking=null,this.walkingSpeed=10,this.disableSlamWasm=!1,_apiParams.disableSlamWasm&&(console.log("%c == disableSlamWasm ==","color: #ff33cc"),this.disableSlamWasm=!0)}setNewData(){var e=this;_config.isDebug;var t=e.trackingSettings.ios;_browser.ios&&t&&e.trackingSettings.usdz.enabled&&((t.useGeneratedUSDZ||t.useLibraryUSDZ)&&addToLog("using USDZ"),t.useGeneratedUSDZ&&(e.useGeneratedUsdz=!0,e.usingUSDZ=!0),t.useLibraryUSDZ&&(e.compEngine.library.getUSDZItem()?e.usingUSDZ=!0:(console.log("warning: missing usdz file in lib"),t.useFallback=!0))),e.usingUSDZ?e.compEngine.settings.loadScenesOnDemand=!1:e.checkDeviceOrientationPermission()}setPointers(){var e=this;e.compEngine=_app.compEngine,e.common=_app.common,e.trackingSettings=e.compEngine.data.tracking.slam}keepComposition(e){var t=this;console.log("////////////// SLAM"),console.log("KEEP COMP INSTANCE"),t.checkDeviceOrientationPermission(),t.compEngine=e,t.trackingSettings=t.compEngine.data.tracking.slam,t.compEngine.rootXR.rotation.set(THREE.MathUtils.degToRad(90),0,0)}checkDeviceOrientationPermission(){_browser.ios&&(this.useGeneratedUsdz||(this.needDeviceOrientationPermission=!0))}askDeviceOrientationPermission(){var e=this;new orientationPermission(e.common,e.controls,(function(){e.placeComposition()}))}selectScene(){var e=this;addToLog("- - slam select Scene"),e.usingWebXR||e.placeComposition();var t=!0;"mobile"==_browser.device&&e.useReticle&&(addToLog("DONT activate Scene because using reticle"),t=!1),t&&e.compEngine.activateScene()}initUSDZLoader(){var e=this;e.usdzLoader=new usdzLoader(e,e.compEngine,e.trackingSettings)}initScene3(){var e=this;if(console.log("%c INIT SCENE3 SLAM","color: #ff33cc"),e.useReticle=e.trackingSettings.reticle.enabled,e.allowFloors=e.trackingSettings.allowFloors,e.allowWalls=e.trackingSettings.allowWalls,_config.isDebug&&console.log("allowFloors",e.allowFloors,"allowWalls",e.allowWalls),_browser.computer&&(e.useReticle=!1),e.useReticle||addToLog("No reticle"),e.scene3=e.compEngine.createThreejsScene(),e.usingUSDZ){if(e.useGeneratedUsdz)return addToLog("gen usdz"),void e.compEngine.load();if(e.trackingSettings.ios.useLibraryUSDZ)return void _screens.start.showScreen(!1,e.usingUSDZ)}e.checkARSessionSupport().then((function(t){if(addToLog("AR session support : "+t),_browser.mobile)if(t)e.initWebXRAPI(),e.initScene3B();else{if(e.disableSlamWasm)return e.useReticle=!1,void e.initScene3B();e.loadSlamJS()}else e.initScene3B()}))}loadSlamJS(){var e=this;addToLog("canvas "+_slamCanvasSize.width+" x "+_slamCanvasSize.height);var t="https://xr.plus/v3/js/slam/slam-wasm.min.js";_config.isDebug&&(t="https://xr.plus/v3dev/js/slam/slam-wasm.js"),_config.externalHost&&(t="./slam/slam-wasm.min.js"),import(t).then(t=>{console.log("SLAM JS LOADED"),e.initScene3B(),e.useReticle&&e.createReticleAndHelp()}).catch(e=>{console.log("error loading slam js"),console.log(e.message)})}initScene3B(){var e=this;addToLog("-> init Scene3B | webXR: "+e.usingWebXR);var t=1;_browser.mobile&&e.usingWebXR&&(t=50*.0046),_browser.mobile&&!e.usingWebXR&&(t=4),_browser.computer&&(t=1*t/5*100/e.trackingSettings.computer.scale.xyz),e.globalScale=t,console.log("globalScale",e.globalScale),e.useReticle&&!_browser.computer&&e.addReticleButton();var o=e.compEngine,n=window.innerWidth,i=window.innerHeight;if(null==e.camera){e.common.addWindowEvents();var a=2e3,r=60;if(_browser.mobile&&e.usingWebXR&&(r=70),_browser.computer||e.usingWebXR||(r=75,a=1e3),addToLog("camera fov "+r),e.camera=new THREE.PerspectiveCamera(r,n/i,.1,a),e.camera.name="slam camera",e.scene3.add(e.camera),e.usingWebXR||(e.camera.rotation.reorder("YXZ"),e.camera.updateProjectionMatrix(),e.camera.rotation.set(0,0,0)),e.compEngine.createCameraTarget(),!e.renderer){var s=!1;1==_apiParams.rendererAlpha&&(s=!0),e.usingWebXR&&(s=!0),"headset"==_browser.device&&_browser.ar&&(s=!0),_browser.mobile&&!e.usingWebXR&&(s=!0);var l=!1;_browser.computer&&(l=!0),_browser.mobileVR&&(l=!0);var c={antialias:l,preserveDrawingBuffer:!1,canvas:_canvas,alpha:s};e.renderer=new THREE.WebGLRenderer(c);var d=2;_browser.computer&&(d=1),e.renderer.setPixelRatio(d),e.renderer.setSize(n,i),e.usingWebXR&&(e.renderer.xr.enabled=!0,_canvas.style.width=2*n+"px",_canvas.style.height=2*i+"px"),window.addEventListener("resize",(function(){e.resizeCanvas()}))}}_keepComposition?e.allSceneDataLoaded():o.load()}allSceneDataLoaded(){var e=this;if(e.useGeneratedUsdz){var t=!1;_screens.start.showScreen(t,e.usingUSDZ)}else{if(_browser.computer){e.compEngine.rootXR.position.y=-1.5;var o=e.trackingSettings.computer.position,n=e.trackingSettings.computer.scale.xyz/100;e.compEngine.rootXR.position.y-=o.y/100/n,e.compEngine.rootXR.position.z=-1*o.z/100/n,e.camera.position.set(0,0,.1);var i=_canvas;e.controls=new OrbitControlsXRPlus(e.camera,i),e.controls.screenSpacePanning=!1,e.controls.keyPanSpeed=20,i.addEventListener("pointerdown",e=>{0===e.button&&(i.style.cursor="grab")}),document.addEventListener("pointerup",e=>{i.style.cursor="default"})}if(_screens.start.isRequired||e.needDeviceOrientationPermission){t=e.usingWebXR;_screens.start.showScreen(t,!1)}else if(!e.usingWebXR){_screens.intro.visible||e.start(),console.log("fake start experience"),_$body.addClass("started");const t=new Event("API_startExperience");document.dispatchEvent(t)}var a=!1;"mobile"==_browser.device&&(a=!0),"computer"==_browser.device&&(a=!1),"headset"==_browser.device&&(a=!1),e.usingWebXR&&(a=!1),_apiParams.skipCameraRequest&&(a=!1),a?e.getVideoStream():console.log("not using camera")}}start(){var e=this;console.log("SLAM START usingWebXR:",e.usingWebXR," useReticle",e.useReticle);var t=e.compEngine,o=e.globalScale;if(t.rootXR.scale.set(o,o,o),e.usingWebXR)"mobile"!=_browser.device||e.useReticle||(console.log("mobile + no reticle ==> activate scene"),t.activateScene());else if(e.selectScene(),"mobile"==_browser.device)if(e.disableSlamWasm)t.rootXR.visible=!0;else{t.rootXR.visible=!1;const e=new Event("SLAM_startExperience");document.dispatchEvent(e)}var n=!1;_browser.mobileVR&&(n=!0),_browser.computer&&_browser.vr&&(n=!0),addToLog("using VR "+n),n&&t.activateScene(),e.startLoop()}getVideoStream(){var e=this;if(null==e.videoStream){e.videoStream=new videoStream({canvas:_canvas,useCanvasBlit:!0,noVideoTexture:!0,isSlam:!0,camera:e.camera,callBackSuccess:function(){addToLog("-> getStreamSuccess"),removeElementByID("cameraAccessDimmer"),_video=e.videoStream.domVideo,e.common.streamResized()},callBackFail:function(e){addToLog("getStreamFail"),removeElementByID("cameraAccessDimmer"),console.log("slam error 1254");var t=!1;_browser.ios&&(t=!0),_screens.error.showScreen({text:getText("pleaseAllowAccessToTheCamera"),infos:"3dof stream",errorName:e.name,showTryAgain:t})},width:1280,height:720})}else addToLog("-> already has stream")}addGridHelper(e){var t=this;t.gridHelper=new THREE.GridHelper(5,20,16777215),t.gridHelper.name="gridHelper",e.add(t.gridHelper),_browser.mobile&&t.usingWebXR&&(console.log("add slam js grid helper blue"),t.gridHelper2=new THREE.GridHelper(5,20,16728128,4210943),t.gridHelper2.name="gridHelper2 Blue",t.scene3.add(t.gridHelper2))}placeComposition(){var e=this;addToLog("-> placeComposition added: "+e.compositionHasBeenAdded),_config.isDebug&&(e.gridHelper||e.addGridHelper(e.compEngine.rootComposition)),e.usingWebXR?e.compEngine.rootXR.rotation.set(0,0,0):e.compositionHasBeenAdded=!0}resizeCanvas(){var e=this;addToLog(">> SLAM resizeCanvas "+e.loopIsPaused+" "+window.innerWidth+" "+window.innerHeight);var t=window.innerWidth,o=window.innerHeight,n=t/o,i="landscape";e.streamSize.w no resize"):(e.renderer.setSize(t,o,!1),_canvas.style.width=t+"px",_canvas.style.height=o+"px",e.camera.aspect=n,e.camera.updateProjectionMatrix(),_browser.computer&&e.videoStream&&e.videoStream.setAsSceneBackground()))}addKeyboardEvents(){var e=this,t=function(e){switch(e.preventDefault(),e.keyCode){case 38:case 87:_moveForward=!0;break;case 37:case 65:_moveLeft=!0;break;case 40:case 83:_moveBackward=!0;break;case 39:case 68:_moveRight=!0}},o=function(t){switch(t.preventDefault(),t.keyCode){case 38:case 87:_moveForward=!1;break;case 37:case 65:_moveLeft=!1;break;case 40:case 83:_moveBackward=!1;break;case 39:case 68:_moveRight=!1;break;case 221:e.rootXR.translateY(.1);break;case 219:e.rootXR.translateY(-.1)}};document.removeEventListener("keydown",t),document.removeEventListener("keyup",o),document.addEventListener("keydown",t,!1),document.addEventListener("keyup",o,!1)}doKeyboardEvents(e){var t=this;const o=new THREE.Vector3;var n=t.controls;const i=new THREE.Vector3;t.controls.XR_panOffset.set(0,0,0);var a=1e3*e;function r(e,t){const a=new THREE.Vector3,r=n.domElement,s=n.object.position;a.copy(s).sub(n.target);let l=a.length();var c,d;l*=Math.tan(n.object.fov/2*Math.PI/180),c=2*e*l/r.clientHeight,d=n.object.matrix,o.setFromMatrixColumn(d,0),o.multiplyScalar(-c),i.add(o),function(e,t){!0===n.screenSpacePanning?o.setFromMatrixColumn(t,1):(o.setFromMatrixColumn(t,0),o.crossVectors(n.object.up,o)),o.multiplyScalar(e),i.add(o)}(2*t*l/r.clientHeight,n.object.matrix)}a*=t.walkingSpeed,_moveForward&&r(0,a),_moveBackward&&r(0,-1*a),_moveLeft&&r(a,0),_moveRight&&r(-1*a,0),t.controls.XR_panOffset.set(i.x,i.y,i.z),t.controls&&t.controls.update(),i.set(0,0,0)}startLoop(){var e=this;if(console.log("slam - start loop"),null==e.clock){e.clock=new THREE.Clock;setInterval((function(){e.common.streamResized()}),1e3);_browser.computer&&e.addKeyboardEvents(),e.controls&&e.controls.update();e.renderer.setAnimationLoop((function(){if(stats&&stats.begin(),!e.loopIsPaused){var t=e.clock.getDelta();if(e.videoStream&&e.videoStream.useCanvasBlit&&e.videoStream.updateCanvasBlit(_video),_browser.computer&&e.doKeyboardEvents(t),e.compEngine.loop(t),_app.slamWasm){var o=_slamCanvasSize,n=e.videoStream.ctxBlit.getImageData(0,0,o.width,o.height);_app.slamWasm.loop(n)}e.compEngine.modulesEngine.skyboxModule&&e.compEngine.modulesEngine.skyboxModule.renderScene(),e.renderer.render(e.scene3,e.camera)}stats&&stats.end()}))}}pause(){this.loopIsPaused=!0}resume(){var e=this;e.loopIsPaused=!1,e.videoStream&&e.videoStream.resume()}stop(){var e=this;e.loopIsPaused=!0,e.compEngine.isPaused=!0,e.videoStream&&e.videoStream.stop()}async checkARSessionSupport(){if(_disableWebXR)return!1;if(_browser.computer)return!1;if(!_browser.webXR)return!1;const e=await navigator.xr.isSessionSupported("immersive-ar");return addToLog("support for : immersive-ar : "+e),!!e}initWebXRAPI(){addToLog("-> init webXR API + set .usingWebXR flag"),this.usingWebXR=!0,this.compEngine.needStartScreen()}addReticleButton(){var e=this,t=document.createElement("span");t.id="b_reticle";var o=document.querySelector("#aboveFooter .right");document.querySelector("#aboveFooter").style.display="grid",o.prepend(t),t.addEventListener("click",(function(){e.usingWebXR?e.reticleObj&&(e.reticleObj.visible=!e.reticleObj.visible):_app.slamWasm&&_app.slamWasm.tapReticleButton()}))}async immersiveAR(){var e=this,t=document.querySelector("#sessionLoader");t||((t=document.createElement("div")).id="sessionLoader",_body.appendChild(t)),$("#sessionLoader").css("display","block");if(_xrSession)return addToLog("session not null -> will close it"),void e.closeSession();if(_config.isDebug&&(e.gridHelper||e.addGridHelper(e.scene3)),!e.gizmoViewer){const t=new THREE.BoxGeometry(.05,.05,.05),o=new THREE.MeshBasicMaterial({color:16724016});e.gizmoViewer=new THREE.Mesh(t,o),e.gizmoViewer.name="gizmoViewer",e.scene3.add(e.gizmoViewer),_config.isDebug||(e.gizmoViewer.visible=!1)}e.useReticle&&e.createReticleAndHelp();var o=["local-floor","hit-test"];_config.isDebug&&_app.compEngine.modulesEngine.photoModule&&"chrome"==_browser.name&&_browser.version>=107&&(o.push("camera-access"),addToLog("camera-access"));var n={requiredFeatures:o,optionalFeatures:["bounded-floor"]},i=!1;if("chrome"==_browser.name&&(i=!0),"samsungbrowser"==_browser.name&&_browser.fullVersion>=14.2&&(i=!0),i){var a=document.body;a.style.background="none",_canvas.style.visibility="hidden",n={requiredFeatures:o,optionalFeatures:["bounded-floor","dom-overlay"],domOverlay:{root:a}}}navigator.xr.requestSession("immersive-ar",n).then(t=>{_xrSession=t,t.addEventListener("end",(function(t){e.onSessionEnded(e,t)})),t.addEventListener("select",(function(t){e.onSelect(e,t)})),t.addEventListener("selectend",(function(t){e.onSelectEnd(e,t)})),e.onSessionStarted(_xrSession)},(function(e){addToLog("error request session"),console.log("-> error request session");var t=null;e&&e.name&&(t=e.name+" (not accurate?)"),_screens.error.showScreen({h:getText("almostThere"),text:getText("toContinueAllowARWebsite"),errorName:"webXR permission",infos:t})}))}createReticleAndHelp(){addToLog("--- create reticleObj");var e=this,t=e.trackingSettings.reticle,o=1*t.opacity,n=t.scale/100*.1;e.usingWebXR||(n*=10);var i=!0,a=null,r=null;if(t.uid&&(a=e.compEngine.library.getItemByUid(t.uid),(r=e.compEngine.library.getImageSrcByUid(t.uid))&&(i=!1)),!i){var s=a.height/a.width;const t=new THREE.PlaneGeometry(n,n*s,1);t.rotateX(-Math.PI/2);const i=new THREE.MeshBasicMaterial({opacity:o,transparent:!0});i.map=(new THREE.TextureLoader).load(r),e.reticleObj=new THREE.Mesh(t,i)}if(i){n/=2.8;var l=new THREE.RingGeometry(.8*n,n,64);l.rotateX(-Math.PI/2);var c=new THREE.CircleGeometry(.2*n,32);c.rotateX(-Math.PI/2);var d,u=new THREE.CircleGeometry(1.5*n,6);u.rotateX(-Math.PI/2),u.translate(0,-.01,0);var m=new THREE.MeshBasicMaterial({color:16777215,side:THREE.DoubleSide,opacity:o,transparent:!0}),p=new THREE.MeshBasicMaterial({opacity:0,transparent:!0,alphaTest:0,depthWrite:!1,depthTest:!1});const t=[l.toNonIndexed(),c.toNonIndexed(),u.toNonIndexed()];(d=THREE.BufferGeometryUtils.mergeGeometries(t,!0)).groupsNeedUpdate=!0;const i=[m,m,p];e.reticleObj=new THREE.Mesh(d,i)}e.reticleObj.renderOrder=-1,e.reticleObj.name="reticleObj",e.scene3.add(e.reticleObj),e.reticleGroupLookAt=new THREE.Group,e.reticleGroupLookAt.name="reticle LookAt",e.reticleObj.add(e.reticleGroupLookAt),e.reticleGroupLookAt.position.set(0,.1,0),removeElementByID("scanAround"),removeElementByID("tapReticle");var g,h=document.querySelector("#mainScreen");(g=document.createElement("p")).id="scanAround",g.textContent=e.trackingSettings.textScan,h.appendChild(g),(g=document.createElement("p")).id="tapReticle",g.textContent=e.trackingSettings.textTap,h.appendChild(g),$("#tapReticle").css("display","none")}onSelect(e,t){var o={clientX:t.inputSource.gamepad.axes[0],clientY:-1*t.inputSource.gamepad.axes[1]};e.compEngine.rayCast(o)}onSelectEnd(e,t){}tapReticleObj(){var e=this,t=e.compEngine,o=e.reticleObj,n=t.rootComposition;if(!e.usingWebXR)return _app.slamWasm&&_app.slamWasm.tapReticleObj(),t.rootXR.visible=!0,o.visible=!1,t.activateScene(),void(e.didDropOnce=!0);if(e.xrViewerPose){if(t.rootXR.position.copy(o.position),t.rootXR.visible=!0,e.inOnFloor){var i=new THREE.Vector3;o.getWorldPosition(i);var a=e.xrViewerPose.transform.position,r=new THREE.Vector3(a.x,i.y,a.z);n.lookAt(r.x,r.y,r.z)}else{i=new THREE.Vector3;e.reticleGroupLookAt.getWorldPosition(i),n.rotation.set(0,0,0),n.lookAt(i.x,i.y,i.z),n.rotateX(Math.PI/2)}t.startExperience(),t.activateScene();o.scale.set(1.2,1.2,1.2),new TWEEN.Tween(o.scale).to({x:1/4,y:1/4,z:1/4},300).start(),setTimeout((function(){o.visible=!1}),300),e.didDropOnce=!0,$("#scanAround").css("display","none")}}clearDiamonds(){for(var e=this;e.diamonds.length;){var t=e.diamonds[e.diamonds.length-1];e.scene3.remove(t),e.diamonds.pop()}}onSessionStarted(e){var t=this;t.compEngine.setFocus(!0),addToLog("==> xr session started"),t.renderer.xr.setSession(e),1*THREE.REVISION>=156||t.renderer.xr.setUserCamera(t.camera),_$body.addClass("webXRSession"),t.$tapReticle=$("#tapReticle"),t.addTopBar();new controlsShare(t.compEngine);t.compEngine.overlay&&t.compEngine.overlay.resizeOverlay(),t.camera.fov=46,t.camera.updateProjectionMatrix(),t.clearDiamonds(),t.didDropOnce=!1,t.isInARSession=!0;var o=new THREE.Vector3;function n(e,i){if(i.session.requestAnimationFrame(n),t.xrViewerPose=i.getViewerPose(xrRefSpace),_app.mustTakePhoto){console.log("====> must take photo"),_app.mustTakePhoto=!1;var a=t.renderer.getContext();t.glBinding=new XRWebGLBinding(_xrSession,a);t.xrViewerPose.views[0];var r=t.xrViewerPose.views[0].camera;console.log(t.renderer.xr),console.log(t.renderer.xr.getCamera());const e=t.glBinding.getCameraImage(r);t.takePhoto(a,e,r)}var s=t.reticleObj;if(t.okToDrop=!1,xrHitTestSource&&t.xrViewerPose){let e=i.getHitTestResults(xrHitTestSource);if(0==e.length&&t.$tapReticle.css("display","none"),e.length>0){s.scale.set(1,1,1);let n=e[0].getPose(xrRefSpace);var l=n.transform.position,c=n.transform.orientation;t.gizmoViewer.position.set(t.xrViewerPose.transform.position.x,l.y,t.xrViewerPose.transform.position.z),s.position.copy(l),s.quaternion.set(c.x,c.y,c.z,c.w);var d=!1;if(t.reticleGroupLookAt.getWorldPosition(o),Math.abs(s.position.y-o.y)<.05&&(d=!0),t.inOnFloor=!d,!d&&t.allowFloors&&(t.okToDrop=!0),d&&t.allowWalls&&(t.okToDrop=!0),d&&t.okToDrop&&(s.rotation.set(0,0,0),s.lookAt(o.x,o.y,o.z),s.rotateX(Math.PI/2)),t.compEngine.rootXR.visible?t.$tapReticle.css("display","none"):($("#scanAround").css("display","none"),t.$tapReticle.css("display","block")),_config.isDebug){d||t.gridHelper.position.set(t.gridHelper.position.x,l.y,t.gridHelper.position.z);var u={x:THREE.MathUtils.radToDeg(s.rotation.x),z:THREE.MathUtils.radToDeg(s.rotation.z)};t.$tapReticle.text(parseInt(u.x)+" "+parseInt(u.z)+" Wall "+d),t.dropADiamond()}}}t.okToDrop?t.didDropOnce&&$("#b_reticle").css("visibility","visible"):(s.scale.set(.01,.01,.01),$("#b_reticle").css("visibility","hidden"))}setTimeout((function(){$("#sessionLoader").css("display","none")}),500),t.useReticle?(t.selectScene(),t.startLoop(),e.requestReferenceSpace("viewer").then(t=>{xrViewerSpace=t,e.requestHitTestSource({space:xrViewerSpace}).then(e=>{xrHitTestSource=e})}),e.requestReferenceSpace("local-floor").then(t=>{xrRefSpace=t,e.requestAnimationFrame(n)}),t.compEngine.rootXR.visible=!1,$("#scanAround").css("display","block"),t.$tapReticle.css("display","none")):t.compEngine.startExperience()}onSessionEnded(e,t){addToLog("- - - xr session ended - - -"),_$body.removeClass("webXRSession"),e.isInARSession=!1,_app.common.APIEvent("API_webXRSessionEnded"),e.scene3.remove(e.reticleObj),e.reticleObj=null,e.compEngine.stopAudios(),e.compEngine.pauseAllVideos(),_xrSession=null,_config.isPlayer?(e.gridHelper&&e.gridHelper.parent.remove(e.gridHelper),e.gridHelper2&&e.gridHelper2.parent.remove(e.gridHelper2),_app.common.switchTo3D()):_screens.start.showScreen(!0,!1)}async closeSession(){_xrSession&&await _xrSession.end()}addTopBar(){var e=this;if(!document.getElementById("sessionTopBar")){var t=document.createElement("div");t.id="sessionTopBar";var o=document.createElement("span");o.id="b_closeARSession",o.className="b_close",o.addEventListener("click",(function(t){e.closeSession()})),t.appendChild(o),_body.appendChild(t)}}takePhoto(e,t,o){var n=createImageFromTexture(e,t,o.width,o.height),i=_app.compEngine.modulesEngine.photoModule;i.setPhotoDataAndsSource(n),i.openMediaPreview()}dropADiamond(){var e=this;if(e.dropDiamonds&&++_counterDiamonds>=10){_counterDiamonds=0;var t=new THREE.PlaneGeometry(.05,.05);t.rotateX(-Math.PI/2);var n=new THREE.MeshBasicMaterial({color:13402240});isWall||(n.color=8440960);var i=new THREE.Mesh(t,n);i.name="diamond",e.diamonds.push(i),e.scene3.add(i),i.position.copy(p),i.quaternion.set(o.x,o.y,o.z,o.w),e.diamonds.length>e.maxDiamonds&&(e.scene3.remove(e.diamonds[0]),e.diamonds.shift())}}resetUserTransform(){var e=this;if(addToLog("reset user transform 6DOF"),_browser.computer||_browser.mobileVR)e.controls&&e.controls.reset();else if(_browser.mobile){var t=e.camera,o=e.compEngine.rootXR,n=new THREE.Group;if(n.name="tmpObject",t.updateMatrixWorld(),t.add(n),e.usingWebXR){o.position.set(t.position.x,o.position.y,t.position.z),o.updateMatrixWorld(),o.attach(n),n.updateMatrixWorld(),n.position.y=0;var i={x:n.position.x,y:n.position.z},a={x:n.position.x,y:n.position.z+5};n.translateZ(-2);var r=get3PointsAngle(i,{x:n.position.x,y:n.position.z},a);r-=Math.PI,r*=-1,addToLog("angle "+parseInt(THREE.MathUtils.radToDeg(r))),o.rotateY(r)}if(_app.slamWasm&&!_app.slamWasm.disabled){o.updateMatrixWorld(),o.attach(n),n.updateMatrixWorld();var s=o.scale.x,l=n.position.x*s,c=n.position.z*s;n.position.y=0;i={x:n.position.x,y:n.position.z},a={x:n.position.x,y:n.position.z+5};n.translateZ(-2);r=get3PointsAngle(i,{x:n.position.x,y:n.position.z},a);r-=Math.PI,r*=-1;var d=THREE.MathUtils.radToDeg(r);_app.slamWasm.angleOffsetY+=d,_app.slamWasm.angleOffsetY>360&&(_app.slamWasm.angleOffsetY-=360),_app.slamWasm.angleOffsetY<-360&&(_app.slamWasm.angleOffsetY+=360),o.translateX(l),o.translateZ(c)}n.parent.remove(n),n=null}}}function createImageFromTexture(e,t,o,n){const i=e.getParameter(e.FRAMEBUFFER_BINDING),a=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,a),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0);const r=new Uint8Array(o*n*4);e.readPixels(0,0,o,n,e.RGBA,e.UNSIGNED_BYTE,r),e.deleteFramebuffer(a),e.bindFramebuffer(e.FRAMEBUFFER,i);const s=document.createElement("canvas");s.width=o,s.height=n;const l=s.getContext("2d"),c=l.createImageData(o,n);c.data.set(r);const d=new ImageData(s.width,s.height),u=c.data.length/4;for(let e=0;e modal open -> do nothing"):document.getElementById("embedContent")||e.setFocus(!0)}),!1)}}showVolumeButton(){_needVolumeButton=!0,_config.isInline&&(console.log("show Volume Button (embed player only)"),$(".b_volume").css("display","block"))}gotMessage(e){var t=e.data;t&&"toggleAudio"==t.what&&(console.log("toggle master audio"),_app.compEngine.setAudioVolume(1-_app.compEngine.audioVolume))}postMessage(e){e.projectURL=_app.compEngine.url;try{window.parent.gotMessage({data:e})}catch(t){window.parent.postMessage(e,"*")}}APIEvent(e,t={}){if(_app.compEngine.modules.frontJsApi&&_app.compEngine.modules.frontJsApi.enabled){console.log("---\x3e API event",e);const o=new CustomEvent(e,{detail:t});document.dispatchEvent(o)}}gaEvent(e){console.log("OBS - ga - gaEvent"),_app.ga.gaEvent(e)}}function simLog(e){if(_config.simulator){var t="LOG "+e.what;e.action&&(t+=" : "+e.action),e.name&&(t+=" - "+e.name),e.error&&(t+=" - error: "+e.error),console.log("%c"+t,"color: #ff33cc");var o={simLog:!0,what:e.what,action:e.action,name:e.name,error:e.error};try{window.parent.gotMessage({data:o})}catch(e){window.parent.postMessage(o,"*")}}}var _pubnub=null;class xrpubnub{constructor(e){var t=this;t.theChannel=e.channel,t.pubnub=null,t.messageCallback=null,t.configuratorModule=e.configuratorModule,console.log("channel "+t.theChannel),t.loadScript()}loadScript(){var e=this,t=document.createElement("script");t.onload=function(){e.start()},t.src="https://cdn.pubnub.com/sdk/javascript/pubnub.4.27.4.min.js",document.head.appendChild(t)}start(){var e=this;e.pubnub=new PubNub({publishKey:"pub-c-d6e88a4c-aa5b-4e4e-bcab-cfba600f8ac8",subscribeKey:"sub-c-90b7794a-eb6c-11ea-a3a0-967d27250efa",uuid:"theClientUUID"}),e.pubnub.addListener({message:function(t){e.displayMessage("[MESSAGE: received]",t.message)},presence:function(t){_config.isDebug&&e.displayMessage("[PRESENCE: "+t.action+"]",{tmp:"uuid: "+t.uuid+", channel: "+t.channel})},status:function(t){_config.isDebug&&e.displayMessage("[STATUS: "+t.category+"]",{tmp:"connected to channels: "+t.affectedChannels}),console.log("say hello");e.submitUpdate({hello:!0,isConfig:!0})}}),e.pubnub.subscribe({channels:[e.theChannel],withPresence:!0})}submitUpdate(e){var t=this;if(t.pubnub){var o="mobile";_browser.desktop&&(o="desktop"),e.from=o,t.pubnub.publish({channel:t.theChannel,message:e},(function(e,t){e.error&&console.log(e)}))}else console.log("pubnub not ready")}displayMessage(e,t){var o=this;if(("desktop"!=t.from||!_browser.desktop)&&("mobile"!=t.from||_browser.desktop)&&(t.from||console.log("from UNDEF"),_config.isDebug&&(console.log("display message "+t.from+" "+_browser.desktop),console.log(e),console.log(t)),t.isConfig&&!t.fullConfig&&o.messageCallback&&o.messageCallback(o.configuratorModule,t),t.isConfig&&t.fullConfig&&(console.log("got FULL config from "+t.from),o.configuratorModule.setFullConfig(t.fullConfig)),t.isConfig&&t.hello&&(console.log("got HELLO from "+t.from),_browser.desktop))){_config.isPlayer&&(_app.trackingEngine.hideQRCode(),_app.common.postMessage({action:"hideQrCode"}));var n={fullConfig:!0,data:o.configuratorModule.configData};o.submitUpdate(n)}}}class modules{constructor(e){this.compEngine=e,this.canvas=_canvas,this.modulesData=e.modules,this.gesturesModule=null,this.statesModule=null,this.configuratorModule=null,this.skyboxModule=null,this.qrReaderModule=null,this.barcodeReaderModule=null,this.gazeInputModule=null,this.gamingModule=null,this.languagesModule=null,this.virtualTourModule=null;var t=this;if("floating"==t.compEngine.trackingMode){var o=t.modulesData;o.virtualTour&&o.virtualTour.enabled&&(t.virtualTourModule=new virtualTourModule(t,e))}}setupModules(){var e=this,t=document.createElement("div");t.id="loadingTools",t.innerHTML="

Please wait...

",_body.appendChild(t);var o=e.compEngine.trackingMode,n=e.compEngine.usingCamera,i=e.modulesData;if(i.states&&1==i.states.enabled&&(e.statesModule=new statesModule(e)),i.photo&&1==i.photo.enabled){var a=!0;"slam"!=o||_config.isDebug||(a=!1),a&&(e.photoModule=new photoModule(e))}i.gestures&&1==i.gestures.enabled&&(_config.simulator||_browser.mobileVR||"face"==o||(e.gesturesModule=new gesturesModule(e))),i.qrReader&&1==i.qrReader.enabled&&n&&("slam"!=o?e.qrReaderModule=new qrReaderModule(e):(addToLog("SLAM => no qrReader Module"),i.qrReader.enabled=!1)),i.barcodeReader&&1==i.barcodeReader.enabled&&n&&("slam"!=o?e.barcodeReaderModule=new barcodeReaderModule(e):(addToLog("SLAM => no barcodeReader Module"),i.barcodeReader.enabled=!1)),i.eShop&&1==i.eShop.enabled&&n&&e.eShopModule(),i.configurator&&1==i.configurator.enabled&&(e.configuratorModule=new configuratorModule(e)),i.skybox&&1==i.skybox.enabled&&(e.skyboxModule=new skyboxModule(e)),i.gazeInput&&1==i.gazeInput.enabled&&(e.gazeInputModule=new gazeInputModule(e)),i.gaming&&1==i.gaming.enabled&&(e.gamingModule=new gamingModule(e)),i.languages&&i.languages.enabled&&(e.languagesModule=new languagesModule(i.languages))}loop(e){this.gesturesModule&&this.gesturesModule.loop()}animationEndEvent(e){this.statesModule&&this.statesModule.animationEndEvent(e)}}function getDistance2D(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}class gesturesModule{constructor(e){var t=this;t.gesturesHookPan=null,t.gesturesHook=null,t.distanceStart=null,t.newDistance=null,t.oldDistance=null,t.touches=[],t.fingers=[],t.compEngine=e.compEngine,t.canvas=e.canvas,t.moduleData=e.modulesData.gestures;var o=t.compEngine.trackingMode;_app.trackingEngine?t.trackingEngine=_app.trackingEngine:t.trackingEngine=_app.embedPlayer;var n=t.moduleData;function i(e){t.isMouseDown=!0,t.touchStart(e)}n.rotationX=0,n.rotationY=0,n.rotationZ=0,n.lastTouch={x:0,y:0},n.lastTouchCenter={x:0,y:0},n.isMouseDown=!1,n.skipRotation=!1,n.currentScale=1,n.baseScale=1,t.deltaRotation={x:0,y:0,x:0},t.gesturesHookPan=new THREE.Group,t.gesturesHookPan.name="gesturesHookPan",t.gesturesHook=new THREE.Group,t.gesturesHook.name="gesturesHook",t.compEngine.rootXR.add(t.gesturesHookPan),t.gesturesHookPan.add(t.gesturesHook),t.gesturesHook.add(t.compEngine.rootComposition),t.originalFov=t.trackingEngine.camera.fov,t.currentFov=t.originalFov,_browser.isTouch?(document.addEventListener("touchstart",(function(e){e.clientX=e.touches[0].clientX,e.clientY=e.touches[0].clientY,i(e)}),!1),document.addEventListener("touchmove",(function(e){t.touchMove(e)}),!1),document.addEventListener("touchend",(function(e){t.isMouseDown=!1,t.touchStop(e)}),!1)):(document.addEventListener("mousedown",i,!1),document.addEventListener("mouseup",(function(e){t.isMouseDown=!1}),!1),document.addEventListener("mousemove",(function(e){t.isMouseDown&&(e.preventDefault(),t.touchMove(e))}),!1)),"floating"==o&&n.zoom.enabled&&_browser.computer&&window.addEventListener("wheel",e=>{var o=-1*Math.sign(e.deltaY)/20;t.doZoom(o)})}touchStart(e){var t=this,o=t.moduleData,n=1;isTouch&&(n=e.touches.length),n>1&&(t.skipRotation=!0);var i=t.canvas.getBoundingClientRect(),a=i.top+document.body.scrollTop,r=i.left+document.body.scrollLeft,s=window.innerWidth,l=window.innerHeight,c=new THREE.Vector2;c.x=(e.clientX-r)/s*2-1,c.y=-(e.clientY-a)/l*2+1,o.lastTouch={x:e.clientX,y:e.clientY};var d={x:e.clientX,y:e.clientY};if(t.touches.push(d),_browser.isTouch){if(t.fingers[0]={x:e.touches[0].screenX,y:e.touches[0].screenY},t.touches.length>1&&n>1&&(t.fingers[1]={x:e.touches[1].screenX,y:e.touches[1].screenY}),1==t.touches.length&&(o.lastTouchCenter.x=t.fingers[0].x,o.lastTouchCenter.y=t.fingers[0].y),2==e.touches){var u={x:t.fingers[1].screenX,y:t.fingers[1].screenY};t.touches.push(u)}if(2==t.touches.length&&n>1){t.fingers[1]||console.log("gestures error fingers 1 A",t.touches.length,n);var m=getDistance2D(t.fingers[0],t.fingers[1]);t.distanceStart=m,t.oldDistance=null,t.newDistance=m,o.lastTouchCenter.x=(t.fingers[0].x+t.fingers[1].x)/2,o.lastTouchCenter.y=(t.fingers[0].y+t.fingers[1].y)/2}}t.touches.length>2&&t.touches.pop()}touchMove(e){var t=this,o=t.moduleData,n=t.trackingEngine,i=t.compEngine.trackingMode,a=!1;if(n&&n.isInARSession&&(a=!0),e.target==t.canvas||!_app||a){var r,s,l=window.innerWidth;if(_browser.isTouch?(r=e.changedTouches[0].clientX,s=e.changedTouches[0].clientY):(r=e.clientX,s=e.clientY),o.rotation.enabled&&!t.skipRotation){var c=1*o.rotation.sensibility;if(o.rotation.xAxis){var d=(s-o.lastTouch.y)/l;this.deltaRotation.x+=90*d*c,a||(o.rotationX+=90*d*c),a&&n.inOnFloor&&(o.rotationX+=90*d*c),a&&!n.inOnFloor&&(o.rotationX+=90*d*c)}if(o.rotation.yAxis){var u=(r-o.lastTouch.x)/l;this.deltaRotation.y+=90*u*c,a||(o.rotationY+=90*u*c),a&&n.inOnFloor&&(n.useReticle,o.rotationY+=90*u*c),a&&!n.inOnFloor&&(o.rotationY+=90*u*c)}}if(o.lastTouch={x:r,y:s},o.pan.enabled&&!o.rotation.enabled&&o.pan.oneFinger&&e.touches&&1==e.touches.length){t.fingers[0]={x:e.touches[0].screenX,y:e.touches[0].screenY};var m={x:(f={x:t.fingers[0].x,y:t.fingers[0].y}).x-o.lastTouchCenter.x,y:f.y-o.lastTouchCenter.y};if(Math.abs(m.x)>3||Math.abs(m.y)>3){var p=420-40*o.pan.sensibility;a&&(p/=3);var g=!0,h=1;"image"==i&&(t.compEngine.markerOrientationIsVertical||(g=!1,h=-1)),"fixed"==i&&(g=!1,h=-1),o.pan.xAxis&&t.gesturesHookPan.translateX(m.x/p),o.pan.yAxis&&(g?t.gesturesHookPan.translateY(m.y/p*-1*h):t.gesturesHookPan.translateZ(m.y/p*-1*h)),o.lastTouchCenter={x:f.x,y:f.y}}}if(e.touches&&2==e.touches.length&&(t.fingers[0]={x:e.touches[0].screenX,y:e.touches[0].screenY},t.fingers[1]={x:e.touches[1].screenX,y:e.touches[1].screenY},o.zoom.enabled&&t.doFingersZoom(),o.pan.enabled)){if(!o.rotation.enabled&&o.pan.oneFinger)return;var f;m={x:(f={x:(t.fingers[0].x+t.fingers[1].x)/2,y:(t.fingers[0].y+t.fingers[1].y)/2}).x-o.lastTouchCenter.x,y:f.y-o.lastTouchCenter.y};if(Math.abs(m.x)>3||Math.abs(m.y)>3){p=420-40*o.pan.sensibility;a&&(p/=3);g=!0,h=1;"image"==i&&(t.compEngine.markerOrientationIsVertical||(g=!1,h=-1)),"fixed"==i&&(g=!1,h=-1),"slam"==i&&(g=!1,h=-1),o.pan.xAxis&&t.gesturesHookPan.translateX(m.x/p),o.pan.yAxis&&(g?t.gesturesHookPan.translateY(m.y/p*-1*h):t.gesturesHookPan.translateZ(m.y/p*-1*h)),o.lastTouchCenter={x:f.x,y:f.y}}}}}touchStop(e){var t=this,o=0;e.touches&&(o=e.touches.length),0==o&&(t.skipRotation=!1),t.touches=[],t.oldDistance=null}doFingersZoom(){var e=this,t=getDistance2D(e.fingers[0],e.fingers[1]);null!=e.oldDistance?(e.oldDistance=e.newDistance,e.newDistance=t):(e.oldDistance=t,e.newDistance=t);var o=(e.newDistance-e.oldDistance)/10/(window.screen.width/8)*(e.moduleData.zoom.sensibility/3);e.doZoom(o)}doZoom(e){var t=this,o=t.moduleData;if(o.zoom.fovZoom&&o.zoom.fovZoom.enabled){t.currentFov-=50*e;var n=t.originalFov/(o.zoom.max/100),i=t.originalFov/(o.zoom.min/100);t.currentFovi&&(t.currentFov=i);var a=t.trackingEngine.camera;return a.fov=t.currentFov,void a.updateProjectionMatrix()}o.currentScale+=e;var r=o.baseScale*o.zoom.min/100,s=o.baseScale*o.zoom.max/100;o.currentScales&&(o.currentScale=s)}reset(e){var t=this,o=t.moduleData,n=t.trackingEngine.camera;e.zoom&&(t.gesturesHook.scale.set(1,1,1),o.currentScale=1,o.zoom.fovZoom&&o.zoom.fovZoom.enabled&&(t.currentFov=t.originalFov,n.fov=t.currentFov,n.updateProjectionMatrix())),e.pan&&t.gesturesHookPan.position.set(0,0,0),e.rotation&&(t.gesturesHook.rotation.set(0,0,0),o.rotationX=0,o.rotationY=0,o.rotationZ=0,_browser.computer&&t.trackingEngine.controls&&t.trackingEngine.controls.reset())}resetOnSceneChange(){var e=this.moduleData,t={};e.zoom.enabled&&e.zoom.resetOnSceneChange&&(t.zoom=!0),e.pan.enabled&&e.zoom.resetOnSceneChange&&(t.pan=!0),e.rotation.enabled&&e.rotation.resetOnSceneChange&&(t.rotation=!0),this.reset(t)}loop(){var e=this;if(!_app.isInPlayerMode){var t=e.gesturesHook;if(t){var o=e.moduleData;if(o.zoom.enabled){var n=o.currentScale;t.scale.x!=n&&t.scale.set(n,n,n)}if(o.rotation.enabled){if("floating"==e.compEngine.trackingMode&&_browser.computer,"floating"==e.compEngine.trackingMode&&_browser.computer){t=e.compEngine.cameraTargetHook;var i=!1;if(e.deltaRotation.x&&(i=!0,t.rotateX(THREE.MathUtils.degToRad(-1*e.deltaRotation.x))),e.deltaRotation.y&&(i=!0,t.rotateY(THREE.MathUtils.degToRad(-1*e.deltaRotation.y))),i){var a=new THREE.Vector3;e.compEngine.cameraTarget.getWorldPosition(a),_app.trackingEngine.camera.lookAt(a)}return void(this.deltaRotation={x:0,y:0,z:0})}var r=new THREE.Euler(THREE.MathUtils.degToRad(o.rotationX),THREE.MathUtils.degToRad(o.rotationY),THREE.MathUtils.degToRad(o.rotationZ),"XYZ");if("fixed"==e.compEngine.trackingMode)r=new THREE.Euler(THREE.MathUtils.degToRad(o.rotationX),THREE.MathUtils.degToRad(o.rotationZ),THREE.MathUtils.degToRad(-1*o.rotationY),"XYZ");t.setRotationFromEuler(r)}}}}}class statesModule{constructor(e){var t=this;t.currentStateIndex=0,t.timerSwitchState=null,t.modulesClass=e,t.compEngine=e.compEngine,t.moduleData=e.modulesData.states}findObjectByIndex(e,t=!0){var o=this.compEngine.object;if(!o)return null;var n=[];return o.traverse((function(e){!e.isMesh&&t||n.push(e)})),n[e]}applyDefaultState(){var e=this.moduleData;e&&e.enabled&&this.applyStateByUid(e.defaultStateUid)}applyStateByUid(e){var t=this;t.moduleData.states.forEach((function(o,n){o.uid==e&&t.applyState(n)}))}applyState(e){var t=this,o=t.moduleData.states;if(""===e||isNaN(e)||e<0||e>=o.length)console.log("invalid state index:",e);else{t.currentStateIndex=e;var n=o[e];simLog({what:"states",action:"change state",name:n.name,uid:n.uid}),n.actions&&t.doNextStateAction(e,-1),window.jscolor&&window.jscolor.installByClassName("jscolor")}}doNextStateAction(e,t){var o=this,n=o.moduleData.states[e];if(!(++t>=n.actions.length)){var i=n.actions[t];o.doStateAction(i,e,t)||o.doNextStateAction(e,t)}}doStateAction(e,t,o){var n=this,i=e.type,a=n.compEngine,r=a.getters,s=null;if("changeScene"==i||"previousScene"==i||"nextScene"==i)return s=function(){n.doNextStateAction(t,o)},n.doAction(e,s),!0;if("changeOverlay"==i&&(e.uidAudio&&(console.log("hot fix state action: remove .uidAudio"),e.uidAudio=null),n.doAction(e)),"restartTimeline"==i&&n.doAction(e),"pauseTimeline"==i&&n.doAction(e),"resumeTimeline"==i&&n.doAction(e),"showMesh"==i&&e.target&&e.target.forEach((function(t){if(t){var o=r.getCompMeshByCompUidAndIdMesh(a.rootComposition,t.compUid,t.idm);o&&(e.delay||(o.visible=!0),e.delay&&setTimeout((function(){o.visible=!0}),1*e.delay))}})),"hideMesh"==i&&e.target&&e.target.forEach((function(t){if(t){var o=r.getCompMeshByCompUidAndIdMesh(a.rootComposition,t.compUid,t.idm);o&&(e.delay||(o.visible=!1),e.delay&&setTimeout((function(){o.visible=!1}),1*e.delay))}})),"showItem"==i)if(e.everything){var l=a.currentScene;r.getAllSceneItems(l).forEach((function(e){var t=r.getThreejsItemByCompUid(a.rootComposition,e.compUid);t&&(t.visible=!0)}))}else void 0!==e.itemsCompUid&&e.itemsCompUid.forEach((function(e){if(e){var t=r.getThreejsItemByCompUid(a.rootComposition,e);t&&(t.visible=!0)}}));if("hideItem"==i){function c(e){if(e){var t=r.getThreejsItemByCompUid(a.rootComposition,e.compUid);if(t&&(t.visible=!1),e&&"video"==e.type){var o=e.uid,n=a.currentScene,i=r.getAllSceneItems(n),s=!1;i.forEach((function(e){if(e.uid==o){var t=r.getThreejsItemByCompUid(a.rootComposition,e.compUid);t&&t.visible&&(s=!0)}})),s||(console.log("video not visible ",o," => stop it"),a.stopVideoByUid(o))}}}if(e.everything){l=a.currentScene;r.getAllSceneItems(l).forEach((function(e){c(e)}))}else void 0!==e.itemsCompUid&&e.itemsCompUid.forEach((function(e){if(e){var t=r.getCompItemByCompUid(e);c(t)}}))}if("showOverlayItems"==i){function d(e){$('.item[data-uid="'+e.uid+'"]').removeClass("hidden")}if(e.everything){var u=a.overlay.data.uid;r.getOverlayItems(u).forEach((function(e){d(e)}))}else void 0!==e.itemsUid&&e.itemsUid.forEach((function(e){var t=r.getOverlayItemByCompUid(e);t&&d(t)}))}if("hideOverlayItems"==i){function c(e){$('.item[data-uid="'+e.uid+'"]').addClass("hidden")}if(e.everything){u=a.overlay.data.uid;r.getOverlayItems(u).forEach((function(e){c(e)}))}else void 0!==e.itemsUid&&e.itemsUid.forEach((function(e){var t=r.getOverlayItemByCompUid(e);t&&c(t)}))}if("playModelAnimation"==i&&n.doAction(e),"pauseModelAnimations"==i&&n.doAction(e),"playSimpleAnimation"==i&&n.doAction(e),"stopSimpleAnimation"==i&&n.doAction(e),"playAudio"==i){var m=e.uidAudio;m&&(e.loop=e.audioLoop,void 0===e.volume&&(e.volume=100),a.playActionAudio(m,e,!0))}if("stopAllAudios"==i&&n.doAction(e),"setVolume"==i&&n.doAction(e),"playVideo"==i&&n.doAction(e),"pauseVideo"==i&&n.doAction(e),"stopVideo"==i&&n.doAction(e),"timer"==i){var p=n.currentStateIndex,g=e.timerEnd,h=e.timer;0==h&&(h=10),n.timerSwitchState&&clearTimeout(n.timerSwitchState),n.timerSwitchState=setTimeout((function(){return n.currentStateIndex==p&&(g&&void 0!==g.stateUid?(n.applyStateByUid(g.stateUid),!1):void 0)}),h)}if("setMaterial"==i&&n.doAction(e),"property"==i){void 0!==e.indexMaterial&&a.data.materials[e.indexMaterial]&&(e.matUid=a.data.materials[e.indexMaterial].uid);var f=a.materialsManager.getMaterialObjByUid(e.matUid);if(!f)return;var v=f.material,y=1*e.duration,b=new THREE.Color(e.propertyValue);if(y>10)new TWEEN.Tween(v.color).to(b,y).start();else v.color=b}return"www"==i&&(e.wwwSameTab=!0,e.wwwModal=!1,n.doAction(e)),"embedVideo"==i&&n.doAction(e),"recenter3dof"==i&&n.doAction(e),"resetUserTransform"==i&&n.doAction(e),"resetGesturesModule"==i&&n.doAction(e),"mapMessage"==i&&n.doAction(e),"jsAPIAction"==i&&n.doAction(e),"gamingEvent"==i&&n.doAction(e),"gamingStartTimer"==i&&n.doAction(e),!1}doAction(e,t=null){new c_action(this.compEngine,e,!1,t)}getNextState(e){var t,o=this,n=e.index,i=e.compUid,a=o.moduleData.states[o.currentStateIndex].actions;for(t=0;te.width&&(o=e.width);var i=document.createElement("canvas"),a=i.getContext("2d");i.width=o,i.height=n;var r=0;e.width>o&&(r=parseInt((e.width-o)/2));return a.drawImage(e,r,0,o,n,0,0,o,n),i.toDataURL("image/jpeg",.8)}setPhotoDataAndsSource(e){document.getElementById("photoPreview").src=e,this.photobase64=e}saveMedia(){var e,t=this,o=cleanString(_config.projectURL),n=new Date,i=n.getHours(),a=n.getMinutes(),r=n.getSeconds(),s=document.createElement("a");if("video"==t.mediaType&&(_app.ga.gaEvent({event:"save video",event_category:"scene",event_label:"save video"}),e="video-"+o+"-"+i+"-"+a+"-"+r+"."+t.mediaFormat,s.href=t.videoUrl),"photo"==t.mediaType){if(_app.ga.gaEvent({event:"save photo",event_category:"scene",event_label:"save photo"}),e="photo-"+o+"-"+i+"-"+a+"-"+r+".jpg",_browser.android){var l="photo-"+o+"-"+i+"-"+a+"-"+r+".png";let e=document.createElement("a");return e.setAttribute("download",l),void document.getElementById("threejs").toBlob((function(t){let o=URL.createObjectURL(t);e.setAttribute("href",o),e.click(),addToLog("clicked"),openModal({h2:getText("thePhotoHasBeenSaved")})}))}var c=document.getElementById("photoPreview").src;c=c.replace(/^data:image\/[^;]/,"data:application/octet-stream"),s.href=c}s.download=e,s.click()}switchCamera(){_app.trackingEngine.videoStream.canvas=_canvas,_app.trackingEngine.videoStream.swapCamera(),$("#swapCamera").css("visibility","hidden"),setTimeout((function(){$("#swapCamera").css("visibility","visible")}),1e3)}shareMedia(){var e=this,t=_config.shareTitle;if("video"==e.mediaType){if(addToLog("share video file"),!e.blobVideoData)return console.error("Can't share video: Blob data was null or undefined!"),void alert("could not share video");var o=e.GetSupportedMediaType();if(addToLog(o.format+" | "+o.type),_browser.android||_browser.computer)return void e.convertVideo(e.blobVideoData);const n=new File(this.mediaRecorderChunks,"video."+o.format,{type:o.type});return void e.shareFile(n,t,t)}addToLog("share photo file");const n=e.photobase64;fetch(n).then((function(e){return e.blob()})).then((function(o){const n=new File([o],"picture.jpg",{type:o.type});var i={files:[n],title:t,text:t};_browser.ios&&(i={files:[n]}),navigator.share(i).then((function(t){console.log(t),e.shareCompleted()})).catch((function(e){addToLog("catch share error"),console.log(e)}))}))}shareFile(e,t,o){addToLog("share file");var n=this,i={files:[e],title:t,text:o};_browser.ios&&(i={files:[e]}),navigator.share(i).then((function(e){n.shareCompleted()})).catch((function(e){addToLog("catch share error"),console.log(e)}))}shareCompleted(){console.log("shared completed"),_app.ga.gaEvent({event:"share photo/video",event_category:"scene",event_label:"share photo/video"})}openMediaPreview(){var e=this;$(".photoModule div.save").css("display","inline-block"),e.compEngine.setFocus(!1);var t=null;"video"==e.mediaType?(t=document.querySelector(".photoModule .video-container video"),$("#photoPreviewWrapper").css("display","none"),$(".photoModule .mainContainer").css("display","block"),e.canSaveWithButton||$(".photoModule div.save").css("display","none"),t.style.visibility="hidden",setTimeout((function(){t.style.visibility="visible"}),100),setTimeout((function(){t.play().catch(e=>{addToLog("auto play record prevented"),console.log(e)}).then(()=>{addToLog("auto play record ->then")})}),500)):($("#photoPreviewWrapper").css("display","block"),$(".photoModule .mainContainer").css("display","none")),e.photoModuleDom.classList.add("open"),$(".photoModule .button").css("visibility","hidden"),setTimeout((function(){$(".photoModule .button").css("visibility","visible")}),500);var o={type:e.mediaType};"photo"==e.mediaType&&(o.base64ImageData=e.photobase64,o.type="image"),"video"==e.mediaType&&(o.videoBlob=e.blobVideoData);const n=new CustomEvent("API_mediaCaptured",{detail:o});document.dispatchEvent(n)}recordVideoOrStop(){var e=this;if(e.mediaRecorder&&"recording"===e.mediaRecorder.state)return console.log("STOP record video"),e.mediaRecorder.stop(),clearInterval(e.tickInterval),e.timeCounter=0,void setTimeout((function(){_$body.removeClass("recording")}),100);console.log("START record video");var t=null;if(!e.moduleData.recordAudio&&!e.moduleData.recordMicrophone)return console.log("record no audio"),t=_canvas.captureStream(),void e.startMediaRecorder(t);function o(e,t){console.log("+ add audio items to stream");var o=0;return _app.compEngine.sounds.forEach((function(t){console.log("==> one audio item"),t.isPlaying?(t.listener.getInput().connect(e),t.gain.connect(e),o++):console.log("dont add")})),o}if(e.moduleData.recordMicrophone)return console.log("record Microphone"),void navigator.mediaDevices.getUserMedia({audio:!0}).then((function(n){var i=_canvas.captureStream();t=new MediaStream;var a=_app.compEngine.audioListener.context,r=a.createMediaStreamDestination();a.createMediaStreamSource(n).connect(r),i.getVideoTracks().forEach((function(e){t.addTrack(e)}));var s=0;e.moduleData.recordAudio&&(s=o(r)),console.log("nbSoundsAdded "+s),s>0?t.addTrack(r.stream.getAudioTracks()[0]):n.getAudioTracks().forEach((function(e){t.addTrack(e)})),e.startMediaRecorder(t)})).catch((function(e){console.log(e);var t="";_browser.android&&(t="Tap the lock icon to edit permissions"),_browser.ios&&(t="Try again"),openModal({h2:"Please allow microphone request access",p:t})}));if(e.moduleData.recordAudio&&!e.moduleData.recordMicrophone){console.log("record Audio no micro"),t=new MediaStream;var n=_app.compEngine.audioListener.context.createMediaStreamDestination();return _canvas.captureStream().getVideoTracks().forEach((function(e){t.addTrack(e)})),o(n),void e.startMediaRecorder(t)}}getSupportedMimeTypes(){const e=["vp9","vp9.0","vp8","vp8.0","avc1","av1","h265","h.265","h264","h.264","opus"],t=[];return["webm","mp4"].forEach(o=>{const n="video/"+o;e.forEach(e=>{[`${n};codecs=${e}`,`${n};codecs:${e}`,""+n].forEach(e=>{MediaRecorder.isTypeSupported(e)&&t.push(e)})})}),t}startMediaRecorder(e){var t=this;t.tickInterval=setInterval(()=>t.tickVideoRecording(),1e3),t.tickVideoRecording(),t.uiRecordTime.removeAttribute("hidden");t.getSupportedMimeTypes();t.mediaRecorder=new MediaRecorder(e),t.mediaRecorder.ondataavailable=e=>t.OnMediaRecorderDataAvailable(e),t.mediaRecorder.onstop=e=>t.OnMediaRecorderStop(e),t.mediaRecorder.start(),_$body.addClass("recording"),t.mediaType="video",_app.ga.gaEvent({event:"record video",event_category:"scene",event_label:"record video"})}ParseHTML(e){return(new DOMParser).parseFromString(e,"text/html")}tickVideoRecording(){var e=this;const t=e.timeCounter%60,o=Math.floor(e.timeCounter/60);e.uiRecordTime.textContent=`${e.FormatTime(o)}:${e.FormatTime(t)}`,e.timeCounter++,e.timeCounter>e.maxVideoDuration&&e.recordVideoOrStop()}seekInVideo(e){var t=this.video_element.duration*(e/100);Number.isNaN(t)&&(t=0),this.video_element.currentTime=t}UpdateProgress(){this.is_seeker_maintained}OnVideoPlayPause(e){this.video_element.paused||this.video_element.ended?this.video_element_indicator.hasAttribute("hidden")&&this.video_element_indicator.removeAttribute("hidden"):this.video_element_indicator.setAttribute("hidden","")}FormatTime(e){return e<10?"0"+e:""+e}FormatTimeMS(e){const t=Math.floor(e%60),o=Math.floor(e/60);return`${this.FormatTime(o)}:${this.FormatTime(t)}`}buildVideoPlayer(){var e=this;e.mainContainer=document.createElement("div");const t=document.createElement("div"),o=document.createElement("div");o.className="btnContainer",e.mainContainer.setAttribute("hidden",""),e.mainContainer.setAttribute("class","mediaPreview video mainContainer"),t.className="previewContainer",this.video_html=this.ParseHTML('\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t'),this.video_element=this.video_html.querySelector("video"),this.video_element_src=this.video_html.querySelector("video source"),this.video_element_indicator=this.video_html.querySelector(".indicator"),this.video_element_timeline=this.video_html.querySelector(".timeline"),this.video_element_timeline_container=this.video_html.querySelector(".timeline-container"),this.video_element.addEventListener("click",e=>this.OnVideoClick(e)),this.video_element.addEventListener("play",e=>this.OnVideoPlayPause(e)),this.video_element.addEventListener("pause",e=>this.OnVideoPlayPause(e)),t.appendChild(this.video_html.body.firstChild),t.appendChild(o),this.mainContainer.appendChild(t),this.video_element.addEventListener("timeupdate",()=>this.UpdateProgress()),e.photoModuleDom.appendChild(e.mainContainer)}OnMediaRecorderDataAvailable(e){this.mediaRecorderChunks.push(e.data)}GetSupportedMediaType(){let e=null;return e=MediaRecorder.isTypeSupported?{type:"video/webm",format:"webm"}:{type:"video/mp4",format:"mp4"},_browser.ios&&(e={type:"video/mp4",format:"mp4"}),addToLog("mediaType "+e.type),e}OnMediaRecorderStop(e){var t=this;addToLog("stop");let o=t.GetSupportedMediaType();t.mediaFormat=o.format,t.video_element_src.setAttribute("type",o.type);const n=new Blob(t.mediaRecorderChunks,{type:o.type});t.blobVideoData=n,t.videoUrl=URL.createObjectURL(n),t.video_element_src.setAttribute("src",t.videoUrl),t.video_element.load(),t.video_element.addEventListener("loadeddata",e=>{t.seekInVideo(0)}),t.mainContainer.removeAttribute("hidden"),t.uiRecordTime.setAttribute("hidden",""),t.openMediaPreview()}OnVideoClick(e){this.video_element.paused||this.video_element.ended?this.video_element.play():this.video_element.pause()}convertVideo(e){console.log("convert video");var t=this;(e=>{const t=new FileReader;return t.readAsDataURL(e),new Promise(e=>{t.onloadend=()=>{e(t.result)}})})(e).then(e=>{t.base64VideoData=e;var o=new FormData;o.append("mediaType","video"),o.append("base64VideoData",t.base64VideoData),t.startLoading();var n=new XMLHttpRequest;n.open("POST","https://tools.xr.plus/sharing/convert-video.php",!0),n.onload=function(){if(n.status>=200&&n.status<400){t.stopLoading();try{var e=JSON.parse(n.response)}catch(e){return console.error(e),void openModal({h2:"something went wrong..."})}if(!e.ok)return void openModal({h2:"Something went wrong"});!async function(){addToLog("do the share");var o=e.mediaURL;const n=await fetch(o),i=await n.arrayBuffer(),a="video-"+e.w+"x"+e.h+".mp4",r=new File([i],a,{type:"video/mp4"});var s=_config.shareTitle;openModal({h2:"Ready to share",callbackYes:function(){t.shareFile(r,s,s)},yesButton:"ok",noButton:getText("cancel")})}()}else console.log("error a"),t.stopLoading(),openModal({p:"something went wrong..."})},n.onerror=function(){console.log("error b"),t.stopLoading(),openModal({p:"something went wrong..."})},n.upload.onprogress=function(e){var t=parseInt(100*e.loaded/e.total);t<99?$("#loadingTools p").text(t+"%"):$("#loadingTools p").text("converting...")},n.send(o)})}startLoading(){$("#loadingTools p").text("Please wait..."),$("#loadingTools").css("display","block")}stopLoading(){$("#loadingTools").css("display","none")}}class qrReaderModule{constructor(e){var t=this;t.compEngine=e.compEngine,t.moduleData=e.modulesData.qrReader,t.scriptURL=_config.libsFolder+"nimiq-qr-scanner/qr-scanner.min.js",t.barcodeDetector=null,t.usingNativeAPI=!1,t.canvas=null;var o=t.moduleData;if(!o.started&&(o.started=!0,o.isPaused=!1,this.qrScanner=null,this.intervalDecoder=1e3,this.isCoolingdown=!1,this.lastQRValue=null,!_config.simulator))if(_browser.android&&"BarcodeDetector"in window){var n=setInterval(()=>{_video&&(addToLog("QR : video ready"),clearInterval(n),t.initNativeAPI())},2e3)}else t.loadScript()}loadScript(){var e=this;import(e.scriptURL).then(t=>{var o=function(){_video?e.initQrScanner(t):setTimeout(o,1e3)};o()})}initQrScanner(e){var t=this;const o=e.default;var n=o.createQrEngine(o.WORKER_PATH),i=document.createElement("canvas");function a(e){e&&(isModalOpen()||t.readQR(e.data))}setInterval(()=>{t.isPaused||_app.trackingEngine.loopIsPaused||o.scanImage(_video,{qrEngine:n,canvas:i,returnDetailedScanResult:!0}).then(e=>a(e)).catch(e=>a(null))},1e3)}readQR(e){addToLog("QR : "+e);var t=this,o=t.moduleData;if(!isModalOpen()){if(e.includes("xr.plus/"+t.compEngine.url)){if(e.slice(-3)==t.compEngine.url)return;if(e.slice(-4)==t.compEngine.url+"/")return}var n=document.location.href;try{n=window.location!=window.parent.location?document.referrer:document.location.href}catch(e){console.error("catch QR = currentURL")}if(e!=t.lastQRValue||o.allowSuccessiveScans){if(t.lastQRValue=e,!e.includes("http")&&e.includes("www.")&&(e="http://"+e),!t.findInQRReaderArray(e))if(e.split("#")[0]!=n&&o.openAllValidUrls){var i=!1;if(validateURL(e)&&(i=!0),_config.isDebug&&console.log("other ",e),i){_app.common.gaEvent({event:"scan QR code",event_category:"scene",event_label:"scan QR code"});var a=cleanString(e);if(o.embedContent){var r={type:"embedWebsite",embedWebsiteURL:a};t.compEngine.doAction(r)}else r={type:"www",wwwUrl:a,wwwModal:!0,wwwSameTab:!0,wwwText:null},new c_action(t.compEngine,r)}}}else addToLog("same QR -> skipped")}}findInQRReaderArray(e){var t=this,o=t.moduleData;if(!o.codes)return!1;var n,i,a=""+e;a=a.replace(/\s/g,"");for(n=0;n480&&(n=50),e.canvas.setAttribute("width",i-2*n),e.canvas.setAttribute("height",i-2*n);var a=i-2*n;setInterval(()=>{e.isPaused||function(){if(!_app.trackingEngine.loopIsPaused){var i=t.videoWidth,r=t.videoHeight,s=0,l=0;i>=r&&(s=(i-r)/-2),i{t.length&&t.forEach(t=>{isModalOpen()||e.isPaused||e.readQR(t.rawValue)})}).catch(e=>{addToLog("error api barcode"),console.error("BarcodeDetection failed: "),console.log(e)})}}()},400)}}class barcodeReaderModule{constructor(e){var t=this;if(t.modulesClass=e,t.compEngine=e.compEngine,t.moduleData=e.modulesData.barcodeReader,t.scriptURL=_config.libsFolder+"quagga.min.js",!t.started){t.started=!0,t.canvas=document.createElement("canvas"),t.barcodeDetector=null,t.usingNativeAPI=!1,t.resume();var o=0;if(!_config.simulator){_browser.android&&"BarcodeDetector"in window&&(t.usingNativeAPI=!0);var n=function(){if(_video)r();else{console.log("no video for barcode reader");var e=setInterval(()=>{_video&&(console.log("barcode got video ready"),clearInterval(e),r())},2e3)}};if(t.usingNativeAPI)n();else{var i=document.createElement("script");i.onload=function(){n()},i.src=t.scriptURL,document.head.appendChild(i)}var a=function(e,n){setInterval(()=>{t.isPaused||function(){if(!_app.trackingEngine.loopIsPaused){var i=e.videoWidth,a=e.videoHeight,r=0,s=0;i>=a&&(r=(i-a)/-2),i480&&(o=100),addToLog("ean margin "+o),t.canvas.setAttribute("width",e-2*o),t.canvas.setAttribute("height",e-2*o),a(_video,t.canvas.getContext("2d")),Quagga.onDetected((function(e){isModalOpen()||t.isPaused||t.readBarcode(e.codeResult.code)}))}}}readBarcode(e){var t=this,o=t.moduleData;t.findInBarCodeReaderArray(e)||o.ignoreOthers||(13==e.length&&(e=e.charAt(0)+" "+e.charAt(1)+e.charAt(2)+e.charAt(3)+e.charAt(4)+e.charAt(5)+e.charAt(6)+" "+e.charAt(7)+e.charAt(8)+e.charAt(9)+e.charAt(10)+e.charAt(11)+e.charAt(12)),openModal({h2:"EAN detected ",p:""+e,callbackYes:t.startCoolDown}))}findInBarCodeReaderArray(e){var t=this.moduleData;if(!t.codes)return!1;var o,n,i=""+e;for(i=i.replace(/\s/g,""),o=0;o480&&(n=50),addToLog("ean API margin "+n),e.canvas.setAttribute("width",i-2*n),e.canvas.setAttribute("height",i-2*n);var a=i-2*n;setInterval(()=>{e.isPaused||function(){if(!_app.trackingEngine.loopIsPaused){var i=t.videoWidth,r=t.videoHeight,s=0,l=0;i>=r&&(s=(i-r)/-2),i{t.length&&t.forEach(t=>{isModalOpen()||e.isPaused||e.readBarcode(t.rawValue)})}).catch(e=>{addToLog("error api barcode"),console.error("BarcodeDetection failed: "+e)})}}()},400)}}var _controller1,_controller2,modulesClass=modules.prototype;modulesClass.eShopModule=function(){var e=this,t=e.modulesData.eShop;if(!t.started){var o;t.started=!0,t.isOpen=!1,t.item=null,t.wishList=[],t.cart=[],document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeend",''),t.divDimmer=document.createElement("div"),t.divDimmer.id="eShop",_body.appendChild(t.divDimmer),t.divFlash=document.createElement("div"),t.divFlash.id="eShopFlash",t.divDimmer.appendChild(t.divFlash),t.header=document.createElement("header"),"pk3"==_config.projectURL&&(t.header.innerHTML='logo'),"c1b"==_config.projectURL&&(t.header.innerHTML='logo'),t.divDimmer.appendChild(t.header),t.headerButtonMenu=document.createElement("i"),t.headerButtonMenu.classList.add("fa","fa-bars"),t.header.appendChild(t.headerButtonMenu),t.q_cart=document.createElement("span"),t.q_cart.classList.add("q"),(o=t.q_cart.style).float="right",o.marginLeft="-8px",o.color="#1D1718",o.fontSize="18px",o.lineHeight="50px",o.display="inline-block",o.minWidth="15px",t.header.appendChild(t.q_cart),t.headerButtonCart=document.createElement("i"),t.headerButtonCart.classList.add("cart","fa","fa-shopping-cart"),t.header.appendChild(t.headerButtonCart),t.q_wishList=document.createElement("span"),t.q_wishList.classList.add("q"),(o=t.q_wishList.style).float="right",o.marginLeft="-8px",o.color="#1D1718",o.fontSize="18px",o.lineHeight="50px",o.display="inline-block",o.minWidth="15px",t.header.appendChild(t.q_wishList),t.headerButtonWishList=document.createElement("i"),t.headerButtonWishList.classList.add("wishList","fa","fa-star"),t.header.appendChild(t.headerButtonWishList),t.divContent=document.createElement("div"),t.divContent.id="eShopContent",t.divDimmer.appendChild(t.divContent),t.divPrice=document.createElement("div"),t.divPrice.id="eShopPrice",t.divContent.appendChild(t.divPrice),t.divImage=document.createElement("div"),t.divImage.id="eShopImageDiv",t.divContent.appendChild(t.divImage),t.image=document.createElement("img"),t.image.id="eShopImage",t.image.src="",t.divImage.appendChild(t.image),t.divTitle=document.createElement("div"),t.divTitle.id="eShopTitle",t.divContent.appendChild(t.divTitle),t.divButtons=document.createElement("div"),t.divButtons.classList.add("buttons"),t.divContent.appendChild(t.divButtons),t.button=[];var n=-1;n++,t.button[n]=document.createElement("span"),t.button[n].classList.add("eShopButton"),t.button[n].innerHTML='',t.divButtons.appendChild(t.button[n]),n++,t.button[n]=document.createElement("span"),t.button[n].classList.add("eShopButton"),t.button[n].innerHTML='',t.divButtons.appendChild(t.button[n]),n++,t.button[n]=document.createElement("span"),t.button[n].classList.add("eShopButton"),t.button[n].innerHTML='',t.divButtons.appendChild(t.button[n]);var i=document.createElement("span");i.className="b_close white",t.divDimmer.appendChild(i),i.addEventListener("click",(function(){e.closeEShopModule()})),t.headerButtonWishList.addEventListener("click",(function(){e.openWishList()})),t.headerButtonCart.addEventListener("click",(function(){e.openCart()})),t.button[0].addEventListener("click",(function(){e.openCheckOut()})),t.button[1].addEventListener("click",(function(){e.addToWishList(t.item)&&openModal({h2:"Product added to wish list"})})),t.button[2].addEventListener("click",(function(){openModal({h2:"Product added to cart"}),e.addToCart(t.item)}))}},modulesClass.openCheckOut=function(){var e={type:"embedWebsite",embedWebsiteURL:this.modulesData.eShop.item.productURL};$("#embedContent").css("z-index:110"),this.compEngine.doAction(e)},modulesClass.openEShopModule=function(e){if((l=this.modulesData.eShop).articles){l.isOpen=!0,e=e.replace(/\s/g,"");var t,o,n=null,i=l.articles;for(t=0;t=0;i--){var a=n[i];"color"==a.type&&(a.palette&&a.palette.length||n.splice(i,1)),"texture"==a.type&&(a.medias&&a.medias.length||n.splice(i,1)),"material"==a.type&&(a.materials&&a.materials.length||n.splice(i,1))}if(n.length){if(n.forEach((function(e,t){e.configIndex=t})),t.configData=JSON.parse(JSON.stringify(n)),t.configuratorModuleDom=document.createElement("div"),t.configuratorModuleDom.className=" module configuratorModule brandingBg",t.insertModuleDom(t.configuratorModuleDom),t.configuratorModuleDom.style.display="block",o.name){var r=document.createElement("p");r.className="brandingColor",r.innerText=o.name,t.configuratorModuleDom.appendChild(r)}if(_sessionID||setSessionID(),void 0!==_pubnub){if(null==_pubnub&&o.useSync){var s="xrplus_"+t.compEngine.url+"_"+_sessionID;_config.isDebug&&console.log("pubnub CHANNEL "+s),(_pubnub=new xrpubnub({channel:s,configuratorModule:t})).messageCallback=t.messageCallback}}else console.log("NO pubnub a");t.addConfigs()}}}insertModuleDom(e){document.querySelector("footer .modules").prepend(e)}addConfigs(){var e=this;e.moduleData.configs.forEach((function(t){"color"==t.type&&e.addConfigColor(t),"texture"==t.type&&e.addConfigTexture(t),"material"==t.type&&e.addConfigMaterial(t)}))}addConfigColor(e){var t=this,o=e.palette,n=document.createElement("div");if(n.className="config color",e.name){n.classList.add("name");var i=document.createElement("p");i.className="brandingColor",i.innerText=e.name,n.appendChild(i)}e.materials;var a,r,s=document.createElement("div");for(n.appendChild(s),a=0;a set FULL config"),t=0;t{e.classList.remove("active")}),s.classList.add("active"),i.configData[a].valueIndex=o,n){var d={configData:e,value:o};i.sendConfigMessage(d)}}setConfigTexture(e,t,o,n=!0){var i=this,a=i.compEngine,r=e.configIndex,s=t.querySelector('.media[data-index="'+o+'"]'),l=s.getAttribute("data-uid"),c=s.getAttribute("data-indexMat"),d=a.getLibraryItemByUid(l);console.log("v3 configurator : load image texture");var u=new projectTexture(d,a);if(a.textures.push(u),u.load((function(){var e=a.materials[c];void 0===e.colorMap&&(console.log("NO color map for configurator mat"),e.colorMap={}),e.colorMap.uid=l,a.setupMaterials()})),t.querySelectorAll(".media").forEach(e=>{e.classList.remove("active")}),s.classList.add("active"),i.configData[r].valueIndex=o,n){var m={configData:e,value:o};i.sendConfigMessage(m)}}setConfigMaterial(e,t,o,n=!0){var i=this,a=e.configIndex,r=i.compEngine,s=r.getters.findCompItemByCompUid(e.compUid),l=r.getters.findCompMeshByCompUidAndIdMesh(e.compUid,e.idMesh),c=e.materials[o].uid;l.mats[e.indexMat]=c,r.data.materials.forEach((function(e,t){e.uid==c&&r.updateMaterial(s,t)}));var d=t.querySelector('.mat[data-index="'+o+'"]');if(t.querySelectorAll(".mat").forEach(e=>{e.classList.remove("active")}),d.classList.add("active"),i.configData[a].valueIndex=o,n){var u={configData:e,value:o};i.sendConfigMessage(u)}}sendConfigMessage(e){console.log("=> sendConfigMessage"),this.moduleData.useSync&&(void 0!==_pubnub?(e.isConfig=!0,_pubnub.submitUpdate(e)):console.log("NO pubnub b"))}messageCallback(e,t){if(t.hello&&_browser.desktop){console.log("SEND FULL config");t={isConfig:!0,fullConfig:e.configData};_pubnub.submitUpdate(t)}else e.applyMessageConfig(t)}applyMessageConfig(e){var t=this;console.log("=> applyMessageConfig");var o=e.configData,n=o.configIndex,i=document.querySelectorAll(".config")[n];"color"==o.type&&t.setConfigColor(o,i,e.value,!1),"texture"==o.type&&t.setConfigTexture(o,i,e.value,!1),"material"==o.type&&t.setConfigMaterial(o,i,e.value,!1)}}class skyboxModule{constructor(e){var t=this;t.compEngine=e.compEngine,t.trackingEngine=t.compEngine.p_trackingEngine,t.moduleData=e.modulesData.skybox,t.scene=new THREE.Scene,t.renderer=t.trackingEngine.renderer,t.camera=t.trackingEngine.camera;var o=t.compEngine,n=t.moduleData;t.trackingEngine.simulatorSkyBox&&t.scene.attach(t.trackingEngine.simulatorSkyBox);var i={topColor:{type:"c",value:new THREE.Color(n.top)},bottomColor:{type:"c",value:new THREE.Color(n.bottom)},topAlpha:{type:"f",value:n.topOpacity},bottomAlpha:{type:"f",value:n.bottomOpacity},offset:{type:"f",value:40},exponent:{type:"f",value:.9}},a=new THREE.ShaderMaterial({uniforms:i,vertexShader:"\n\t\tvarying vec3 vWorldPosition;\n\t\tvoid main() {\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvWorldPosition = worldPosition.xyz;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}",fragmentShader:"\n\t\tuniform vec3 topColor;\n\t\tuniform vec3 bottomColor;\n\t\tuniform float topAlpha;\n\t\tuniform float bottomAlpha;\n\t\tuniform float offset;\n\t\tuniform float exponent;\n\t\tvarying vec3 vWorldPosition;\n\t\tvoid main() {\n\t\t\tfloat h = normalize( vWorldPosition + offset ).y;\n\t\t\tfloat alpha = mix( bottomAlpha, topAlpha, max( pow( max( h, 0.0 ), exponent ), 0.0 ) );\n\t\t\tgl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max( h, 0.0 ), exponent ), 0.0 ) ), alpha );\n\t\t}",side:THREE.BackSide,transparent:!0}),r=1400;"slam"==o.trackingMode&&t.trackingEngine.xr&&(r=100),"face"==o.trackingMode&&(r=100);var s=new THREE.SphereGeometry(r,32,15);o.skyBox=new THREE.Mesh(s,a),o.skyBox.renderOrder=-1,o.skyBox.name="module skyBox",t.scene.add(o.skyBox)}renderScene(){var e=this,t=e.trackingEngine,o=e.compEngine.scene3;o.background&&(console.log("destroy scene3 background"),o.background=null),!e.scene.background&&t.videoStream&&(e.scene.background=t.videoStream.videoTex),e.renderer.autoClear=!1,e.renderer.clear(),e.renderer.render(e.scene,e.camera),e.renderer.clearDepth()}}class gazeInputModule{constructor(e){var t=this;t.moduleData=e.modulesData.gazeInput,t.compEngine=_app.compEngine,t.camera=_app.trackingEngine.camera,t.crosshairDom=null,t.rootDom=document.getElementById("mainScreen"),t.totalTime=t.moduleData.fillDuration,t.coolDownDuration=t.moduleData.coolDownDuration,t.intervalValue=100,t.maxSteps=t.totalTime/t.intervalValue,t.totalTimeCSS=t.totalTime/1e3,t.pointerValues={times:0,mesh:null,isCooldown:!1},t.createCrosshair(),t.startInterval()}startInterval(){var e=this,t={x:0,y:0};setInterval((function(){if(e.compEngine.isPaused)e.pointerValues.times=0;else if(!e.pointerValues.isCooldown){var o=e.compEngine.getMeshOnRaycast(e.camera,t,!0);if(o){var n=e.compEngine.isActionOnMeshOrCompItem(o);o==e.pointerValues.mesh&&n?(e.pointerValues.times++,1==e.pointerValues.times&&e.createRing(),e.pointerValues.timesn&&(t=n),e.crosshairDom.style.opacity=t,e.crosshairDom.style.transform="translate(-50%,-50%) scale("+o+")",o<1&&setTimeout(i,50)};i()}}class gamingModule{constructor(e){var t=this;t.modulesClass=e,t.compEngine=e.compEngine,t.moduleData=e.modulesData.gaming,t.vars=null,t.timers=[],t.vars=JSON.parse(JSON.stringify(t.moduleData.vars)),t.moduleData.timers.forEach((function(e){var o=new gamingTimer(t,e);t.timers.push(o)}))}updateDynamicTexts(){var e=this.compEngine.overlay;e&&e.updateDynamicTexts()}setDynamicValues(e){if(!e)return e;return this.vars.forEach((function(t){e=e.replace("{"+t.key+"}",""+t.value)})),this.timers.forEach((function(t){e=e.replace("{"+t.name+"}",""+t.currentValue)})),e}triggerEvent(e){var t=this,o=null;if(t.moduleData.events.forEach((function(t){t.uid==e&&(o=t)})),o&&(simLog({what:"gaming",action:"gaming event",name:o.name,uid:o.uid}),o.actions.forEach((function(e){t.doEventAction(e)})),o.eventLabel&&""!=o.eventLabel)){var n="gamingEvent: "+o.eventLabel;_app.ga.gaEvent({event:"button action",event_category:"scene",event_label:n})}}doEventAction(e){var t=this,o=t.compEngine,n=e.type,i=t.getVarByUid(e.varUid);if("switchState"==n&&e.stateUid){var a=o.modulesEngine.statesModule;if(!a)return;var r=1*e.stateUid;a.applyStateByUid(r)}if("increaseVar"==n){if(!i)return;i.value=1*i.value+1*e.value,simLog({what:"gaming",action:i.key+" => "+i.value,name:null,uid:i.uid}),t.updateDynamicTexts()}if("decreaseVar"==n){if(!i)return;i.value=1*i.value-1*e.value,simLog({what:"gaming",action:i.key+" => "+i.value,name:null,uid:i.uid}),t.updateDynamicTexts()}if("setVarValue"==n){if(!i)return;i.value=1*e.value,simLog({what:"gaming",action:i.key+" => "+i.value,name:null,uid:i.uid}),t.updateDynamicTexts()}if("setVarRandomValue"==n){if(!i)return;var s=1*e.maxValue-1*e.minValue+1;if(isNaN(s)||s<2)return console.log("gaming error - set random var"),void simLog({what:"gaming",action:"error set random value",name:null,uid:i.uid});var l=1*e.minValue+Math.floor(Math.random()*s);i.value=1*l,simLog({what:"gaming",action:i.key+" => "+i.value,name:null,uid:i.uid}),t.updateDynamicTexts()}if("copyVarValue"==n){if(!i)return;var c=t.getVarByUid(e.fromVarUid);if(!c)return;i.value=1*c.value,simLog({what:"gaming",action:i.key+" => "+i.value,name:null,uid:i.uid}),t.updateDynamicTexts()}if("toggleVarValue"==n){if(!i)return;if("boolean"!=i.type)return console.log("wrong var type, must be true/false"),void simLog({what:"gaming",action:"wrong var type, must be true/false"});i.value=!i.value,simLog({what:"gaming",action:i.key+" => "+i.value,name:null,uid:i.uid}),t.updateDynamicTexts()}if("ifThen"==n){if(!(i=t.getVarByUid(e.varUid)))return;var d=1*i.value,u=e.condition.type,m=1*e.condition.compareUid,p=null;if(m){var g=t.getVarByUid(m);if(!g)return;p=1*g.value}else p=1*e.condition.compareValue;var h=!1;"lt"==u&&dp&&(h=!0),"not"==u&&d!=p&&(h=!0),_config.isDebug&&console.log("if",d,u,p),h&&(_config.isDebug&&console.log("do then action",e.then.action.type),t.doEventAction(e.then.action))}if("gamingStartTimer"==n)new c_action(o,e,!1);if("gamingStopTimer"==n)new c_action(o,e,!1)}startTimer(e){var t=this.getTimerByUid(e);t&&t.start()}stopTimer(e){var t=this.getTimerByUid(e);t&&t.stop()}getVarByUid(e){var t=null;return this.vars.forEach((function(o){o.uid==e&&(t=o)})),t}getTimerByUid(e){var t=null;return this.timers.forEach((function(o){o.uid==e&&(t=o)})),t}setVarByUid(e,t){var o=this.getVarByUid(e);return!!o&&(o.value=t,this.updateDynamicTexts(),!0)}}class gamingTimer{constructor(e,t){var o=this;o.gamingModule=e,o.timerData=t,o.compEngine=e.compEngine,o.uid=o.timerData.uid,o.name=o.timerData.name,o.isCountdown=o.timerData.isCountdown,o.interval=null,o.currentValue=1*o.timerData.start}start(){var e=this,t=e.timerData;if(console.log("start timer",t.uid),e.isCountdown&&1*t.start<=1*t.end)return simLog({what:"gaming",error:"start <= end"}),void console.log("error: start <= end");if(!e.isCountdown&&1*t.start>=1*t.end)return simLog({what:"gaming",error:"start >= end"}),void console.log("error: start >= end");simLog({what:"gaming",action:"start timer",name:t.name,uid:t.uid}),e.interval&&e.stop(),e.currentValue=1*t.start,e.gamingModule.updateDynamicTexts();var o=1*t.step.time;o<100&&(o=100),e.interval=setInterval((function(){e.stepFunction(e)}),o)}stepFunction(e){if(document.hasFocus()){var t=1*e.timerData.step.value;e.isCountdown&&(t*=-1),e.currentValue+=t,e.gamingModule.updateDynamicTexts(),e.isCountdown&&e.currentValue<=1*e.timerData.end&&(e.stop(),e.onEnd()),!e.isCountdown&&e.currentValue>=1*e.timerData.end&&(e.stop(),e.onEnd())}}stop(){var e=this;console.log("stop timer",e.uid,e.currentValue),clearInterval(e.interval),e.interval=null}onEnd(){var e=this.timerData;if(simLog({what:"gaming",action:"timer ends",name:e.name,uid:e.uid}),e.then.action)new c_action(this.compEngine,e.then.action,!1)}}class languagesModule{constructor(e){var t=this;console.log("/////// languages Module ////////"),t.moduleData=e,t.browserLanguageCode=t.getLanguageCode(),t.defaultLanguageCode=null,t.currentLanguageCode=null,t.moduleData.languages.forEach((function(e){e.uid==t.moduleData.defaultLanguage&&(t.defaultLanguageCode=e.code)}));var o=!1;t.moduleData.languages.forEach((function(e){e.code==t.browserLanguageCode&&(console.log("browser language exits",t.browserLanguageCode),t.currentLanguageCode=t.browserLanguageCode,o=!0)})),o||(console.log("browser language NOT found",t.browserLanguageCode),t.currentLanguageCode=t.defaultLanguageCode),console.log("browser",t.browserLanguageCode),console.log("default",t.defaultLanguageCode),console.log("using",t.currentLanguageCode),_app&&_app.compEngine&&t.applyLanguage(t.currentLanguageCode)}getLanguageCode(){var e=_browser.la;const t=new URLSearchParams(window.location.search);return t.get("la")&&2==t.get("la").length&&(e=t.get("la")),e}getText(e,t,o){var n=o;if(!e.translations||!e.translations.enabled)return n;var i=this.currentLanguageCode,a=this.defaultLanguageCode,r=e.translations.la;if(void 0!==r[i])console.log("use ideal",i),n=r[i][t];else{if(console.log("use default",a),void 0===r[a])return console.log("BAD: warning: default translation not set"),n;n=r[a][t]}return n}getImageUid(e,t){if(!e.translation)return t;var o=t,n=this.currentLanguageCode,i=this.defaultLanguageCode,a=e.translations.la;if(void 0!==a[n])console.log("use ideal",n),o=a[n].uid;else{if(console.log("use default",i),void 0===a[i])return console.log("BAD: warning: default translation not set"),o;o=a[i].uid}return o}applyLanguage(e){var t=this;t.currentLanguageCode=e,simLog({what:"languages",action:"set language",name:t.currentLanguageCode});var o=_app.compEngine;_app.compEngine.data.composition.forEach((function(e){e.translations&&e.translations.enabled&&e.translations.la[t.currentLanguageCode]&&(e.name=e.translations.la[t.currentLanguageCode].name)})),o.scenesNavigation&&o.scenesNavigation.addDomElements()}applySkin(){console.log("** apply translation skin **");var e=_mainData.skin,t=_browser.device,o="https://xr.plus"+e.assetsFolder,n="",i=e.loadingScreen;console.log(i);var a=o+i.background[t].webp;$("#loadingScreen").css({"background-color":i.background.color}),$("#loadingScreen").css({"background-size":i.background[t].fit}),a&&$("#loadingScreen").css({"background-image":'url("'+a+'")'});i=e.startScreen;console.log(i);a=o+i.background[t].webp;$("#startScreen").css({"background-color":i.background.color}),$("#startScreen").css({"background-size":i.background[t].fit}),a&&$("#startScreen").css({"background-image":'url("'+a+'")'});var r=i.startButton;n+="#startScreen .startButton{background:"+r.colors.bg+";color:"+r.colors.text+";top:"+r.top+"%;}";var s=document.createElement("style");s.innerHTML=n,document.getElementsByTagName("head")[0].appendChild(s)}}class embedPlayer{constructor(){this.compEngine=null,this.renderer=null,this.globalScale=1,this.controls=null,this.clock=null,this.loopIsPaused=!1,this.needResize=!1,this.camera=null,this.scene3=null,this.gridHelper=null,this.tweenGroupSwing=null,this.isTurntableOn=!1,this.isTurntableClockwise=!1,this.skinInline=null,this.controlsBar=null,this.mode=null}checkIfOnlyQR(e){return!!window.location.href.includes("mode=qr")&&(console.log("ONLY QR - -"),_app.compEngine={url:e.url},this.compEngine=_app.compEngine,this.skinInline=_mainData.skin.inline,!0)}init(){var e=this;e.skinInline=_mainData.skin.inline,_$body.addClass("ddd"),e.renderer||e.createRenderer(),e.compEngine.isInline=!0,e.addMessageListener(),document.onkeydown=function(t){"Escape"!==(t=t||window.event).key&&"Esc"!==t.key||e.common.postMessage({action:"toggleFullPage",value:!1})}}setPointers(){this.compEngine=_app.compEngine,this.common=_app.common}addOrbitControls(){var e=this;e.controls||(addToLog("ADD orbit controls for embed player"),e.controls=new OrbitControlsXRPlus(e.camera,e.renderer.domElement),e.controls.maxDistance=15,e.controls.screenSpacePanning=!0,e.controls.maxPolarAngle=65*Math.PI/100)}createRenderer(){var e=this,t={antialias:!0,canvas:_canvas,toneMappingExposure:1,toneMapping:THREE.NoToneMapping};e.renderer=new THREE.WebGLRenderer(t);var o=2;_browser.computer&&(o=1),e.renderer.setPixelRatio(o),e.renderer.setClearColor(4210752,1),e.renderer.setSize(window.innerWidth,window.innerHeight)}keepComposition(e){var t=this;console.log("////////////////// EMBED"),t.compEngine=e,t.renderer||t.createRenderer(),removeElementByID("fail"),$("#startScreen").css("display","none"),_$body.addClass("ddd"),t.skinInline=_mainData.skin.inline,e.rootXR.parent&&e.rootXR.parent==e.scene3||e.scene3.add(e.rootXR),e.rootXR.visible=!0,e.rootXR.rotation.set(0,0,0),e.rootXR.position.set(0,0,0),e.rootComposition.rotation.set(0,0,0),e.rootXR.scale.set(1,1,1),console.log("set active after coming back to ddd");e.setActive(!1,!0),e.setupSceneBackground(),e.modulesEngine.gesturesModule&&e.modulesEngine.gesturesModule.reset({zoom:!0,rotation:!0,pan:!0})}initScene3(){var e=this,t=e.compEngine;if("qr"==e.mode)return console.log("qr mode + hide"),removePreloader(),_screens.loading.hideScreen(),$("#b_share").css("display","none"),void $("#b_closeQR").css("display","none");console.log("%c INIT SCENE3 EMBED ------- ","color: #ff33cc"),_$body.addClass("embed"),_$body.removeClass(t.trackingMode);var o="Please udpate the project skin in XR+ studio\n"+t.url;if(_mainData.skin.inline||alert(o),_mainData.skin.inline.controls||alert(o),$("body.embed>#logo").css("display","none"),e.skinInline.logo&&e.skinInline.logo.enabled&&$("body.embed>#logo").css("display","block"),e.scene3=t.createThreejsScene(),e.camera=new THREE.PerspectiveCamera,e.camera.name="embed player camera",e.scene3.add(e.camera),_config.isDebug){e.gridHelper=new THREE.GridHelper(10,20,16777215,10526880),e.gridHelper.name="gridHelper",t.rootXR.add(e.gridHelper),e.gridHelper.position.set(0,-.02,0),e.gridHelper.rotation.set(0,THREE.MathUtils.degToRad(-90),0)}_keepComposition?e.start(!1):(t.load(),_app.ga.gaEvent({event:"start 3D",event_category:"player",event_label:"start 3D"})),e.addOrbitControls(),e.common.addWindowEvents()}addARModeButton(){var e=this;removeElementByID("b_viewInAR");var t=document.createElement("span");t.id="b_viewInAR";var o=_mainData.skin;if(o.arButtonPng){var n=document.createElement("img");n.src=o.arButtonPng,t.appendChild(n)}else t.innerText=e.skinInline.texts.viewInAR,t.className="button",t.style.background=e.skinInline.controls.buttons.viewInAR.bgColor,t.style.color=e.skinInline.controls.buttons.viewInAR.color;document.getElementById("controlsBar").appendChild(t),$("#b_viewInAR").on("click",(function(){e.setMode("ar")}))}addCloseFullPageButton(){if(!document.getElementById("b_closeFullPage")){var e=document.createElement("span");e.id="b_closeFullPage",e.className="b_close",e.addEventListener("click",(function(e){_app.isInPlayerMode?togglePlayerFullSCreen():_app.common.switchTo3D()})),_body.appendChild(e)}}addControlsBar(){this.controlsBar=new playerControlsBar}allSceneDataLoaded(){var e=this;e.addControlsBar(),e.addCloseFullPageButton(),_screens.loading.hideScreen(),_screens.start.isRequired?_screens.start.showScreen():e.start()}start(e=!0){var t=this;if(!_screens.intro.visible){var o=t.compEngine;if("fixed"==o.trackingMode){var n=o.trackingSettings.fixed.scale/100;o.rootComposition.scale.set(n,n,n)}o.setActive(e,!0),t.setupCameraPosition(),o.data.settings.devices.mobile.enabled&&t.addARModeButton(),t.startLoop()}}getScreenPosition(e){var t=this;t.controls.update(),t.renderer.render(t.scene3,t.camera);var o=new THREE.Vector3;return(o=o.setFromMatrixPosition(e.matrixWorld)).project(t.camera),o.x=o.x.toFixed(2),o.y=o.y.toFixed(2),o.z=0,o}setupCameraPosition(){var e=this;console.log("EMBED set camera position");var t=e.compEngine,o=t.rootXR,n=e.camera,i=-2.5;e.controls||(console.log("adding orbit in setup CameraPosition"),e.addOrbitControls()),e.controls||console.log("WARNING inline setup CameraPosition --- no orbit controls"),e.controls&&e.controls.update(),e.renderer.render(e.scene3,n);var a=new THREE.BoxHelper(t.rootComposition,16755200);_config.isDebug&&o.add(a),a.geometry.computeBoundingBox();const r=new THREE.Box3;r.copy(a.geometry.boundingBox).applyMatrix4(a.matrixWorld);var s=new THREE.BoxGeometry(.05,.05,.05),l=new THREE.MeshNormalMaterial,c=new THREE.Mesh(s,l);c.position.set(r.min.x,r.max.y,r.max.z),o.add(c);var d=new THREE.Mesh(s,l);d.position.set(r.max.x,r.max.y,r.max.z),o.add(d);var u=new THREE.Mesh(s,l);u.position.set(r.min.x,r.min.y,r.max.z),o.add(u);var m=new THREE.Mesh(s,l);m.position.set(r.max.x,r.min.y,r.max.z),o.add(m);var p=new THREE.Mesh(s,l);p.position.set((r.min.x+r.max.x)/2,(r.min.y+r.max.y)/2,r.max.z),o.add(p),_config.isDebug||(c.visible=!1,d.visible=!1,u.visible=!1,m.visible=!1,p.visible=!1);o.position.set(0,i,0),n.position.set(0,2,7),e.controls.update(),e.renderer.render(e.compEngine.scene3,n);var g=e.getScreenPosition(c),h=e.getScreenPosition(u),f=g.y-h.y;var v=e.getScreenPosition(d).x-g.x;var y,b=e.getScreenPosition(p);var E=0;f>.01&&v>3*f&&(console.log("flat composition"),E=-.4);for(y=0;y<12;y++){if(f<1.6&&v<1.6){0,n.translateZ(-1),y<3&&n.translateZ(-1);g=e.getScreenPosition(c),h=e.getScreenPosition(u),v=e.getScreenPosition(d).x-g.x;f=(f=g.y-h.y).toFixed(2),v=v.toFixed(2)}if(f>1.8||v>1.9){0,n.translateZ(1),y<3&&n.translateZ(1);g=e.getScreenPosition(c),h=e.getScreenPosition(u),v=e.getScreenPosition(d).x-g.x;f=(f=g.y-h.y).toFixed(2),v=v.toFixed(2)}b.yE+.1&&(i-=.2,y<3&&(i-=.2),o.position.set(0,i,0),b=e.getScreenPosition(p))}if("swing"==e.skinInline.animation.type){o.rotation.set(0,0,0);var w=1*e.skinInline.animation.angle,_=500*(5-1*e.skinInline.animation.speed),S={x:0,y:THREE.MathUtils.degToRad(-1*w),z:0},T={x:0,y:THREE.MathUtils.degToRad(w),z:0};e.tweenGroupSwing=new TWEEN.Group;var M=new TWEEN.Tween(o.rotation,e.tweenGroupSwing).to(S,_).easing(TWEEN.Easing.Quadratic.InOut),x=new TWEEN.Tween(o.rotation,e.tweenGroupSwing).to(T,_).easing(TWEEN.Easing.Quadratic.InOut);M.chain(x),x.chain(M),M.start()}}startLoop(){var e=this;if(addToLog("EMBED start loop"),e.common.postMessage({status:"ready"}),null==e.clock){window.addEventListener("resize",(function(){e.onWindowResize(e)}),!1),e.onWindowResize(e),"turntableClockwise"==e.skinInline.animation.type&&e.toggleTurnTable(!0,!0),"turntableAnticlockwise"==e.skinInline.animation.type&&e.toggleTurnTable(!0,!1),e.clock=new THREE.Clock;e.renderer.setAnimationLoop((function(){var t=e.clock.getDelta();if(!e.loopIsPaused){if(e.compEngine.loop(t),e.controls.update(t),e.tweenGroupSwing&&e.tweenGroupSwing.update(),e.isTurntableOn){var o=e.skinInline.animation.speed;e.isTurntableClockwise&&(o*=-1),e.compEngine.rootComposition.rotateY(t/3*o)}e.renderer.render(e.scene3,e.camera),e.needResize&&(e.onWindowResize(e),e.needResize=!1)}}))}}pause(){this.loopIsPaused=!0}resume(){this.loopIsPaused=!1}onWindowResize(e){if(!e.loopIsPaused){var t=window.innerWidth,o=window.innerHeight;e.camera.aspect=t/o,e.camera.updateProjectionMatrix(),e.renderer.setSize(t,o)}}addMessageListener(e){e=this;window.addEventListener("message",(function(t){var o=t.data;if(!o)return;o.setMode&&e.setMode(o.setMode)}),!1)}setMode(e){var t=this;"ar"==e&&_browser.computer&&(e="qr"),t.mode=e,"qr"==e&&t.showQRCode(),"ar"==e&&(t.common.postMessage({action:"startAR"}),t.switchToAR()),"ddd"==e&&(t.hideQRCode(),console.log("EMBED asked to set mode ddd"))}showQRCode(){var e=this,t=document.createElement("div");t.id="qrCodeEmbed",_body.appendChild(t);var o=document.createElement("p");o.innerText=e.skinInline.texts.scan,t.appendChild(o);var n=document.createElement("span");n.id="b_closeQR",n.className="b_close",t.appendChild(n),$("#b_closeQR").on("click",(function(){e.setMode("ddd")})),_$body.addClass("inlineQR");var i=_shareURL;if(i+="#xrp"+e.compEngine.url,_sessionID&&(i+="xrid"+_sessionID),displayQRCode(i,t,190),"image"==e.compEngine.trackingMode){var a=document.createElement("img"),r=_rootDirectory+"p/default/nft/512.jpg",s=e.compEngine.data.pattern;s&&s.id&&(r=_rootDirectory+"p/"+s.folder+"/"+s.id+"/"+s.url),a.src=r,a.className="marker",a.title="",t.appendChild(a),$("#qrCodeEmbed .marker").on("click",(function(){$("#qrCodeEmbed").toggleClass("bigMarker")}))}$("#threejs, #sceneOverlay").css("filter","blur(3px)"),e.common.postMessage({action:"showQRCode"})}hideQRCode(){removeElementByID("qrCodeEmbed"),_$body.removeClass("inlineQR"),$("#threejs, #sceneOverlay").css("filter","none")}switchToAR(){var e=this;console.log("%c x x x SWITCH TO AR x x x","color: #ff33cc"),_app.ga.gaEvent({event:"switch to AR",event_category:"player",event_label:"switch to AR"}),togglePlayerFullSCreen(!0),_$body.removeClass("ddd"),_$body.addClass(e.compEngine.trackingMode),e.controls&&(e.controls.dispose(),e.controls=null),e.gridHelper&&(e.gridHelper.parent.remove(e.gridHelper),e.gridHelper=null),e.loopIsPaused=!0,e.renderer&&(e.renderer.dispose(),e.renderer=null),e.camera.parent&&e.camera.parent.remove(e.camera),e.camera=null,e.compEngine.hideSceneBackground(),_keepComposition=!0,startApp(_mainData,!1)}switchToInline_trash(){}toggleTurnTable(e,t){this.isTurntableClockwise=t}stopSwing(){var e=this;$("#bgModal").length>0||e.tweenGroupSwing&&(e.compEngine.rootXR.rotation.set(0,0,0),e.tweenGroupSwing.removeAll(),e.tweenGroupSwing=null)}}var _currentVRSession=null;class vrEngine{constructor(){this.compEngine=null,this.common=null,this.isVRReady=!0,this.renderer=null,this.scene3=null,this.skyBox=null,this.rootXRY=-1.3,this.immersiveMode=null}setPointers(){var e=this;e.compEngine=_app.compEngine,e.common=_app.common,e.renderer=_app.trackingEngine.renderer,e.scene3=_app.compEngine.scene3}addVRButtons(){addToLog("add VR buttons");var e=this,t=document.querySelector("#mainScreen footer"),o=document.createElement("span");o.id="b_webvr",o.className="button",o.innerHTML='XR+ webVR',t.appendChild(o);var n=document.createElement("span");n.id="b_exit_webvr",n.className="button",n.innerHTML="exit VR mode",t.appendChild(n),$("#b_webvr").on("click",(function(){null===_currentVRSession?e.startSession():_currentVRSession.end()})),$("#b_webvr").css("display","inline-block")}addControllers(){var e=this;function t(){this.userData.isSelecting=!0}function o(){this.userData.isSelecting=!1}addToLog("add controllers"),(_controller1=e.renderer.xr.getController(0)).addEventListener("selectstart",t),_controller1.addEventListener("selectend",o),e.scene3.add(_controller1),(_controller2=e.renderer.xr.getController(1)).addEventListener("selectstart",t),_controller2.addEventListener("selectend",o),e.scene3.add(_controller2);var n=new THREE.BufferGeometry;n.setAttribute("position",new THREE.Float32BufferAttribute([0,0,0,0,0,-1],3));var i=new THREE.LineBasicMaterial({color:16777215,opacity:.5,transparent:!0});_controller1.add(new THREE.Line(n,i)),_controller2.add(new THREE.Line(n,i)),n=new THREE.BoxGeometry(.02,.02,.02),i=new THREE.MeshBasicMaterial;var a=new THREE.Mesh(n,i);_controller1.children[0].add(a),a.position.set(0,0,-4),a.visible=!1;var r=new THREE.Mesh(n,i);_controller2.children[0].add(r),r.position.set(0,0,-4),r.visible=!1}update(){var e=this;function t(t){if(t)if(t.userData.isSelecting){if(t.startedSelection)return;t.startedSelection=!0;var o=t.children[0],n=o.children[0],i=new THREE.Raycaster,a=new THREE.Vector3,r=new THREE.Vector3,s=e.compEngine,l=[];s.rootComposition.traverseVisible((function(e){e.isMesh&&!e.userData.audioItem&&l.push(e)}));var c=new THREE.Vector3;o.getWorldPosition(c);var d=new THREE.Vector3;n.getWorldPosition(d),i.set(c,a.subVectors(d,c).normalize()),i.far=r.subVectors(d,c).length();var u=i.intersectObjects(l);if(0==u.length)return;var m=u[0].object;s.doActionOnMeshOrCompItem(m)}else t.startedSelection=!1}t(_controller1),t(_controller2)}setupVRDisplay(e){addToLog("-> setupVRDisplay"),e&&e.referenceSpaceType&&this.renderer.xr.setReferenceSpaceType(e.referenceSpaceType)}startSession(){var e=this;addToLog("start VR session");var t=e.compEngine.rootXR,o=_app.trackingEngine,n=o.trackingSettings;function i(i){"vr"==e.immersiveMode&&addToLog("VR session started"),"ar"==e.immersiveMode&&addToLog("AR session started"),e.compEngine.setFocus(!0),_app.ga.gaEvent({event:"start VR session",event_category:"scene",event_label:"start VR session"}),i.addEventListener("end",r),e.renderer.xr.setSession(i),e.renderer.xr.setUserCamera(_app.trackingEngine.camera),_$body.addClass("webXRSession"),_currentVRSession=i,e.addControllers();var a=0,s=n.headset.position,l=n.headset.scale.xyz/100;if("floating"==e.compEngine.trackingMode){t.position.z=-1*s.z/100/l,a=-1*s.y/100/l,o.rootOrientation.rotation.set(0,0,0);var c=.2/l;t.scale.set(c,c,c)}if("slam"==e.compEngine.trackingMode){t.position.z=-1*s.z/100/l,a=-1*s.y/100/l;c=.2/l;t.scale.set(c,c,c)}"fixed"==e.compEngine.trackingMode&&(o.camera.add(t),t.position.x=0,t.position.y=0,t.position.z=-2,t.rotation.set(THREE.MathUtils.degToRad(90),0,0)),t.position.set(t.position.x,a,t.position.z)}function a(t){console.log("onSessionFailed"),console.log(t),addToLog("failed to enter VR mode"),openModal({h2:"Failed to enter VR mode"}),"ar"==e.immersiveMode&&(addToLog("failed to enter AR mode"),openModal({h2:"Failed to enter AR mode"})),"vr"==e.immersiveMode&&(addToLog("failed to enter VR mode"),openModal({h2:"Failed to enter VR mode"})),e.immersiveMode=null}function r(){addToLog("- - - xr session ended - - -"),_$body.removeClass("webXRSession"),_currentVRSession.removeEventListener("end",r),_currentVRSession=null,e.immersiveMode=null,o.camera.position.set(0,0,1),t.position.set(0,e.rootXRY,0)}e.renderer.setPixelRatio(2),e.renderer.xr.enabled=!0,$("#b_exit_webvr").on("click",(function(){addToLog("xr session ended by button"),_currentVRSession.removeEventListener("end",r),_currentVRSession=null,o.camera.position.set(0,0,1),t.position.set(0,e.rootXRY,0)}));var s=!1;if(n.headset.passthrough&&n.headset.passthrough.enabled&&_browser.ar&&(s=!0),console.log("usePassthrough",s),s){e.compEngine.sceneSkybox.visible=!1,e.immersiveMode="ar";l={requiredFeatures:["local-floor"]};navigator.xr.requestSession("immersive-ar",l).then(i).catch(a)}else{e.immersiveMode="vr";var l={optionalFeatures:["local-floor","bounded-floor"]};navigator.xr.requestSession("immersive-vr",l).then(i).catch(a)}}disableVR(e){if(console.log("disableVR"),e){var t=document.createElement("div");t.id="VRNoHeadset",t.innerHTML="Plug a VR headset to enable VR mode",_body.appendChild(t)}this.isVRReady=!1,this.renderer.xr.enabled=!1}}class desktopScreen{constructor(){}populateScreen(){var e=this;removePreloader(),_config.desktopEnabled||_config.isDebug||$("#b_continueOnDesktop").css("display","none"),$("#b_continueOnDesktop").on("click",(function(){e.hideScreen(),loadProjectData()})),displayQRCode(_shareURL,document.getElementById("qrCode"))}showScreen(){this.populateScreen(),$("#desktop").css("display","block")}hideScreen(){$("#desktop").css("display","none")}}class introScreen{constructor(e){var t=this;t.playerData=e,t.screenData=t.playerData.introScreen,t.playerAssetsFolder=t.playerData.assetsFolder,t.visible=!1,t.screenData&&t.screenData.enabled&&(t.buildScreen(),t.showScreen())}buildScreen(){var e=this,t=e.screenData,o=document.createElement("span");if(t.introButton.useImage&&t.introButton.png){o.className="introButton image";var n=document.createElement("img");n.src=e.playerAssetsFolder,_browser.webp?n.src+=t.introButton.webp:n.src+=t.introButton.png,n.alt="",n.title="",o.appendChild(n)}else o.className="introButton",o.innerText=t.introButton.label;document.getElementById("introScreen").appendChild(o),$("#introScreen .introButton").on(_clickOrTouch,(function(){setTimeout((function(){e.buttonAction()}),100)}))}buttonAction(){this.hideScreen(),_app.compEngine.isReady&&(_screens.start.isRequired||_app.compEngine.startExperience())}showScreen(){this.visible=!0,$("#introScreen").css("display","block")}hideScreen(){this.visible=!1,$("#introScreen").css("display","none")}}class loadingScreen{constructor(){this.percent=0}updateLoader(e){e100&&(e=100),this.percent=e,$("#fill").css("width",1*e+"%"))}setTexts(e){var t=$("[data-text='loadingBar']");if(e.projectData.branding.id){var o=e.skin.loadingScreen;if(o){var n=o.texts;(n.loading||""===n.loading)&&t.text(n.loading)}}else t.text(getText("loading"))}showScreen(){$("#loadingScreen").css("display","block")}hideScreen(){$("#loadingScreen").css("display","none")}}class startScreen{constructor(e){var t=this;t.isRequired=!1,t.visible=!1,t.usingUSDZ=!1}openStartPanel(e=!1){var t=this,o=_app.trackingEngine;o||(o=_app.embedPlayer),o.needDeviceOrientationPermission&&addToLog("need Ori Permission"),_app.ga.needCookieContent&&$("#startScreen .cookieInfo").css("display","block"),$("#startScreen").css("display","block"),$("#startScreen .startButton").css("display","block;");var n=document.getElementById("startScreen");(a=n.querySelector(".startButton"))&&a.parentElement.removeChild(a);var i=_mainData.skin,a=document.createElement("span"),r=i.assetsFolder;if(_config.externalHost&&(r="skin-assets/"),i.v>=2)if(i.startScreen.startButton.useImage&&i.startScreen.startButton.webp){a.className="startButton image";var s=document.createElement("img");s.alt="",s.title="",s.src=r+i.startScreen.startButton.webp,a.appendChild(s)}else a.className="startButton flash",a.innerText=i.startScreen.startButton.label;1==i.v&&(a.className="startButton flash",a.innerText="Start"),n.insertBefore(a,n.firstChild),$("#startScreen .startButton").on("click",(function(){$("#startScreen .startButton").css("display","none"),t.clickStartButton(e)}));const l=new Event("API_showStartScreen");document.dispatchEvent(l)}clickStartButton(e){var t=_app.compEngine,o=_app.trackingEngine;o||(o=_app.embedPlayer),_app.ga.startGA(),this.usingUSDZ?o.initUSDZLoader():o.needDeviceOrientationPermission?(t.fakeStartAllVideos(),o.askDeviceOrientationPermission()):this.closeScreen(e,!0)}closeScreen(e=!1,t=!0){this.hideScreen();var o=_app.compEngine;t&&o.closeStartScreen(),e&&"slam"==o.trackingMode&&(_screens.loading.hideScreen(),"mobile"==_browser.device&&_app.trackingEngine.immersiveAR())}showScreen(e=!1,t=!1){if(this.usingUSDZ=t,_apiParams.disableStartScreen)return console.log("API: no start screen"),void _app.compEngine.startExperience();this.visible=!0,$("#startScreen").css("display","block"),this.openStartPanel(e)}hideScreen(){this.visible=!1,$("#startScreen").css("display","none"),this.isRequired=!1}}class errorScreen{constructor(){this.visible=!1,this.options={}}checkPermission(e,t=!1){var o=this;console.log("checkPermission "+e);var n=!1;_browser.ios||("chrome"==_browser.name&&_browser.version>=64&&(n=!0),"samsungbrowser"==_browser.name&&(n=!0),"edge"==_browser.name&&(n=!0)),n&&navigator.permissions&&navigator.permissions.query({name:e}).then(n=>{if(addToLog("perm "+e+" "+n.state),t&&"denied"==n.state){var i="";"samsungbrowser"==_browser.name?(i="To continue, allow the camera in the settings:",i+="\n\n1. tap the ☰ icon",i+="\n2. Open Settings",i+="\n3. Select Privacy and security",i+="\n4. Select Delete browsing data",i+="\n5. Make sure Location access data is selected and tap on Delete",i+="\n\nYay!"):i=getText("toContinueAllowCameraWebsite"),o.showScreen({text:i,errorName:n.state,infos:"permission api camera"})}n.onchange=t=>{if("change"===t.type){if("camera"==e&&"granted"==n.state)return;var o=window.location.href;document.location=o}}}).catch((function(e){console.log("->perm api error"),console.log(e)}))}showScreen(e){_config.isDebug&&(console.log("display error screen"),console.log(e));var t=this;if(!t.visible){if(t.visible=!0,t.options=e,_config.isDebug)var o=document.getElementById("mainLog").textContent;if(_body.innerHTML="",_config.isDebug){var n=document.createElement("div");n.id="mainLog",n.innerHTML=o,_body.appendChild(n),addToLog("fb: "+_browser.isFacebook)}var i=document.createElement("div");i.id="errorScreen",_body.appendChild(i);var a="",r=e.errorName,s=e.h?e.h:"Oops!",l="";if("old browser"==r&&(r=null),"NotFoundError"==r&&(a="No camera detected"),"NotAllowedError"==r&&(a="(Access to camera has been denied)",l="Access to camera has been denied"),"AbortError"==r&&(a="\nCould not access camera.\n Already used in another tab or by another app?"),"NotReadableError"==r&&(a="\nCould not access camera.\n Already used by another app?"),"NotAllowedError"==e.errorName&&_browser.android&&_browser.inApp&&(a="This app does not allow camera access\n",e.showHelp=!0),e.text){var c=e.text;if(c==getText("pleaseAllowAccessToTheCamera")){var d=!0;_browser.ios&&(d=!1),"firefox"==_browser.name&&(d=!1),_browser.android&&"firefox"==_browser.name&&(d=!0),d&&"NotAllowedError"==e.errorName&&(c+="\n\n"+getText("toContinueAllowCameraWebsite"))}a=c}e.showHelp&&(a+="\n\nTo continue, \nfollow instructions in the red box."),"samsungbrowser"==_browser.name&&(a+="\n\nMake sure 'video autoplay' is enabled\n\n(settings -> useful features)"),r&&(a+='\n\n'+r+"");var u=document.createElement("div");u.id="message";var m=document.createElement("h2");m.textContent=s;var p=document.createElement("p");if(p.innerHTML=a,u.appendChild(m),u.appendChild(p),i.appendChild(u),e.showHelp){var g=document.createElement("span");_browser.android&&(g.id="helpOpenBrowser"),_browser.ios&&(g.id="helpOpenSafari"),_browser.ios&&"facebook"==_browser.app&&g.classList.add("bottom"),g.textContent="Tap here and choose \n 'Open in ...'",i.appendChild(g)}if(e.showTryAgain){var h=document.createElement("span");h.className="button",h.textContent=getText("tryAgain"),u.appendChild(h),h.onclick=function(e){e.preventDefault(),_browser.insideIframe&&_app.common.postMessage({what:"reload"}),document.location=window.location.href}}var f=document.createElement("p");f.id="systemDetails";var v="";l&&(v=l+"\n\n"),v+=_browser.os+" | ",_browser.ios&&_browser.iOSVersion&&(v+="iOS "+_browser.iOSVersion+" | "),v+=_browser.name+" "+_browser.version,_browser.inApp&&(v+=" (inside app)"),v+=" | "+_config.projectURL,f.innerText=v,i.appendChild(f),t.sendReport(r,e),"orientation denied"==e.errorName&&_app.common.postMessage({error:"permission",errorName:e.errorName})}}async sendReport(e,t){var o=new FormData;if(o.append("browser",JSON.stringify(_browser)),o.append("userAgent",navigator.userAgent),o.append("projectURL",_config.projectURL),o.append("webURL",window.location.href),o.append("errorName",e),o.append("referrer",document.referrer),t.infos&&o.append("infos",t.infos),_config.isDebug)console.log("don't send report");else{var n=atob("aHR0cHM6Ly94ci5wbHVzL2dldC1wcm9qZWN0L3JlcG9ydC8="),i=new XMLHttpRequest;i.open("POST",n,!0),i.onload=function(){i.status>=200&&i.status<400||console.log("error report")},i.onerror=function(){console.log("error report b")},i.send(o)}}}class compositionUtils{constructor(e,t){var o=this;o.ec=e,o.data=t,o.currentPageComposition=null,o.scene3=null,o.rootComposition=null,o.ambientLight=null,o.rootLighting=null,o.light=[]}pauseAllVideoTextures(){var e=document.querySelectorAll(".videoLibrary");e&&e.forEach((function(e){e.pause()}))}buildCurrentComposition(){this.buildComposition(this.ec.currentPageComposition)}buildComposition(){var e=this,t=_app.compEngine,o=e.ec.activeCompositionIndex;console.log("Build composition / scene "+o),t.currentSceneIndex=o,t.currentScene=e.data.composition[o],t.currentCompScene=t.compScenes[o],t.buildComposition(!1,!1),e.rootComposition=t.rootComposition}goToCompositionScene(e){var t=this;t.ec.activeCompositionIndex=e,t.ec.currentPageComposition=t.data.composition[e],t.pauseAllVideoTextures(),t.buildCurrentComposition()}}class usdzUtils{constructor(e){var t=this;t.ec=e.ec,t.projectData=e.projectData,t.getters=e.getters,t.animations=e.animations,t.compositionUtils=t.ec.compositionUtils,t.libItem=null,t.audiosToLoad=[],t.audioBlobs=[],t.fileName=t.projectData.url+".usdz",t.position={x:0,y:0,z:0},t.isStudio=!1}addLibraryItem(e=null){e||(e={}),e.uid||(e.uid=this.generateMediaUID()),_config.isDebug&&(console.log("new lib item:"),console.log(e)),this.projectData.library.pushObject(e)}generateMediaUID(){for(var e,t,o=this.projectData.library,n=!1;!n;)for(e=Math.floor(99*Math.random())+100,n=!0,t=0;t0;)i.children[0].geometry&&i.children[0].geometry.dispose(),i.children[0].material&&i.children[0].material.dispose(),i.remove(i.children[0]);a.updateMatrix(),a.updateMatrixWorld(!0),a.traverse((function(t){if(t.isMesh){var o=null;if(t.userData.compUid){var n=e.getters.getLibItemByUid(t.userData.uid);n&&(o=n.format)}var i=t.material;if(Array.isArray(i)){console.log("error: material is array | "+t.name);var a=t.material[0];t.material=a,t.material.needsUpdate=!0,i=t.material}var r=-1;if("gltf"==o&&(r=1),r*=-1,"MeshStandardMaterial"!=i.type){console.log("convert to standard mat",t.name,i.name);a=new THREE.MeshStandardMaterial({name:i.name,color:i.color,side:i.side,opacity:i.opacity,transparent:i.transparent,roughness:i.roughness,metalness:i.metalness,side:i.side,map:i.map,normalMap:i.normalMap});if("MeshBasicMaterial"==i.type&&(i.map?a.emissiveMap=i.map:a.emissive=new THREE.Color(.2*i.color.r,.2*i.color.g,.2*i.color.b)),a.map){if(a.map.image){var s=null;a.map.image.tagName?s=a.map.image.tagName.toLowerCase():console.log("texture tagname is undef"),"video"==s&&(console.log("error: texture is video"),a.map=null)}a.map&&(a.map.wrapS=THREE.RepeatWrapping)}a.normalMap&&(a.normalMap.wrapS=THREE.RepeatWrapping),a.metalnessMap&&(a.metalnessMap.wrapS=THREE.RepeatWrapping),t.material=a,t.material.needsUpdate=!0,i=t.material}i.map&&(i.map.repeat.y=r),i.normalMap&&(i.normalMap.repeat.y=r),i.metalnessMap&&(i.metalnessMap.repeat.y=r),void 0===i.color&&(console.log("missing mat color"),i.color=16777215)}})),t.push(a)})),t}async generateBlobUsdz(){var e=this;addToLog("gen blob");var t=e.buildCompositionsArray(),o={ec:_app,projectData:_app.compEngine.data,getters:_app.compEngine.getters,fullComposition:t,audioBlobs:e.audioBlobs,position:{x:0,y:0,z:0}},n={ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:"horizontal"}},animations:e.animations};const i=new THREE.USDZExporter(o,n);i.doHeader();var a=null;try{const e=await i.parse();a=new Blob([e],{type:"application/octet-stream"})}catch(e){return console.error("error while converting to usdz"),console.error(e),alert("error while converting to usdz"),null}return console.log("DONE"),a}async exportUsdz(){var e=this;startLoading(),e.addLibraryItem(null);var t=e.projectData.library.length-1;e.libItem=e.projectData.library[t],e.libItem.name="usdz model",e.libItem.type="usdz",e.libItem.format="usdz";var o=e.buildCompositionsArray(),n="horizontal";e.projectData.tracking.slam.allowWalls&&(n="vertical");var i={ec:e.ec,projectData:e.projectData,getters:e.getters,fullComposition:o,audioBlobs:e.audioBlobs,position:e.position},a={ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:n}},animations:e.animations};const r=new THREE.USDZExporter(i,a);r.doHeader();var s=null;try{const e=await r.parse();_config.isDebug&&(console.log("- - - - - - "),console.log(r.output),alert("usdz ok"),o.visible=!1),s=new Blob([e],{type:"application/octet-stream"})}catch(e){return console.error(e),stopLoading(),void alert("error while converting to usdz")}e.uploadAsBlob(s)}uploadAsBlob(e){var t=this,o=t.ec;startLoading();var n=t.libItem.uid,i=_apiCalls.uploadUSDZ,a=window.EmberENV.f_folder+i+"?id="+o.id+"&userS="+_user.s+"&uid="+n+"&asBlob",r=new FileReader;r.onload=function(e){var o=new FormData;o.append("data",e.target.result),$.ajax({type:"POST",url:a,data:o,processData:!1,contentType:!1,cache:!1,dataType:"json",xhr:function(){var e=new window.XMLHttpRequest;return e.upload.addEventListener("progress",(function(e){if(e.lengthComputable){var t=parseInt(100*e.loaded/e.total);$("#loading .percent").html(t+"%")}}),!1),e}}).done((function(e){if(stopLoading(),console.log(e),e.error)openModalError(null,e);else{console.log("usdz upload ok"),t.libItem.fileSize=e.fileSize,t.libItem.url=e.url,t.libItem.date=e.date,delete t.libItem.shape;t.ec.save((function(){startLoading(),location.reload()}))}})).fail((function(){console.log("error"),alert("could not upload usdz"),location.reload()}))},r.readAsDataURL(e)}}class usdzLoader{constructor(e,t,o){this.trackingEngine=e,this.compEngine=t,this.trackingSettings=o,this.usdzUtils=null,this.usdzFile=null,this.doChecks()&&this.init()}doChecks(){var e=this.trackingSettings.ios;if("instagram"==_browser.app)return _screens.error.showScreen({h:"Almost there!",text:"Instagram web browser cannot display this AR experience",what:"browser",errorName:"inapp usdz",showHelp:!0}),!1;if(e.useGeneratedUSDZ){if(_browser.iOSVersion<15&&"chrome"==_browser.name)return void _screens.error.showScreen({h:"Almost there!",text:"Please open this page in Safari",infos:"usdz on Chrome < iOS 15",errorName:"usdz"});if(_browser.iOSVersion>=15&&"chrome"==_browser.name&&_browser.version<102)return void _screens.error.showScreen({h:"Almost there!",text:"Chrome needs to be updated.\n\nPlease update Chrome and try again",infos:"usdz on Chrome < v102",errorName:"usdz"});if("edge"==_browser.name)return void _screens.error.showScreen({h:"Almost there!",text:"Please open this page in Safari",infos:"usdz on Edge",errorName:"usdz"})}return!0}init(){var e=this,t=e.trackingEngine,o=e.compEngine,n=e.trackingSettings.ios,i=o.projectFolder,a=!1;if(_browser.iOSVersion>=15&&(a=!0),n.useGeneratedUSDZ){addToLog("Generate USDZ"),e.hideStartButton(),t.compositionUtils=new compositionUtils(t,o.data),t.projectFolder=i;var r={ec:t,projectData:o.data,getters:o.getters,animations:a};e.usdzUtils=new usdzUtils(r);e.usdzUtils.loadAudioFiles((async function(){var t=new Date;const o=await e.usdzUtils.generateBlobUsdz();var n=new Date-t;addToLog(n+" ms USDZ"),_config.isDebug||console.log(n+" ms USDZ");var a=URL.createObjectURL(o);a+=e.getExtraCode();var r=document.createElement("a");r.href=a,r.setAttribute("rel","ar"),r.setAttribute("download","asset.usdz"),r.style.visibility="hidden",document.body.appendChild(r),e.addBannerClick(r);var s=document.createElement("img");s.src=i+"p256.jpg",r.appendChild(s),addToLog("launched ar quick look"),r.click()}))}else if(n.useLibraryUSDZ){addToLog("use Library USDZ");var s=o.library.getUSDZItem();return s?(e.usdzFile=s.url,e.hideStartButton(),e.openUSDZFromLibrary(),void(_config.isInline&&setTimeout((function(){t.switchTo3D()}),1e3))):void alert("Missing usdz file")}}hideStartButton(){var e=$("#startScreen .startButton");e.css("visibility:hidden;"),setTimeout((function(){e.css("visibility:visible;")}),8e3)}openUSDZFromLibrary(){var e=this;addToLog("open USDZ from library");var t=e.compEngine.projectFolder,o=t+e.usdzFile;o+=e.getExtraCode();var n=document.createElement("a");n.href=o,n.setAttribute("rel","ar"),n.style.visibility="hidden",document.body.appendChild(n);var i=document.createElement("img");i.src=t+"p256.jpg",n.appendChild(i),e.addBannerClick(n),n.click()}getExtraCode(){var e=this,t="",o=0,n=e.compEngine.data.modules.gestures;n&&n.enabled&&n.zoom.enabled&&(o=1),t+="#allowsContentScaling="+o+"&canonicalWebPageURL="+_shareURL;var i=e.trackingSettings.usdz;return i&&(console.log("usdz extras - - -"),i.banner.enabled&&(t+="&custom=https://xr.plus/"+e.compEngine.url+"?usdzbanner&customHeight=medium")),t}addBannerClick(e){var t=this.trackingSettings.usdz;t.banner.enabled&&e.addEventListener("message",(function(e){if("_apple_ar_quicklook_button_tapped"==e.data){if(!t.callToActionUrl||""===t.callToActionUrl)return;t.openLinkInNewTab?window.open(t.callToActionUrl,"_blank"):window.location=t.callToActionUrl}}),!1)}}!function(e){"undefined"!=typeof module&&"object"==typeof exports?module.exports=e():"undefined"!=typeof define&&define.amd?define(["fflate",e]):("undefined"!=typeof self?self:this).fflate=e()}((function(){var e={},t=("undefined"!=typeof module&&"object"==typeof exports?function(e){"use strict";var t;try{t=require("worker_threads").Worker}catch(t){}return exports.default=t?function(e,o,n,i,a){var r=!1,s=new t(e+";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global",{eval:!0}).on("error",(function(e){return a(e,null)})).on("message",(function(e){return a(null,e)})).on("exit",(function(e){e&&!r&&a(Error("exited with code "+e),null)}));return s.postMessage(n,i),s.terminate=function(){return r=!0,t.prototype.terminate.call(s)},s}:function(e,t,o,n,i){setImmediate((function(){return i(Error("async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)"),null)}));var a=function(){};return{terminate:a,postMessage:a}},e}:function(e){"use strict";var t={};return e.default=function(e,o,n,i,a){var r=t[o]||(t[o]=URL.createObjectURL(new Blob([e],{type:"text/javascript"}))),s=new Worker(r);return s.onerror=function(e){return a(e.error,null)},s.onmessage=function(e){return a(null,e.data)},s.postMessage(n,i),s},e})({}),o=Uint8Array,n=Uint16Array,i=Uint32Array,a=new o([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),r=new o([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new o([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),l=function(e,t){for(var o=new n(31),a=0;a<31;++a)o[a]=t+=1<>>1|(21845&f)<<1;h[f]=((65280&(v=(61680&(v=(52428&v)>>>2|(13107&v)<<2))>>>4|(3855&v)<<4))>>>8|(255&v)<<8)>>>1}var y=function(e,t,o){for(var i=e.length,a=0,r=new n(t);a>>c]=d}else for(s=new n(i),a=0;a>>15-e[a]);return s},b=new o(288);for(f=0;f<144;++f)b[f]=8;for(f=144;f<256;++f)b[f]=9;for(f=256;f<280;++f)b[f]=7;for(f=280;f<288;++f)b[f]=8;var E=new o(32);for(f=0;f<32;++f)E[f]=5;var w=y(b,9,0),_=y(b,9,1),S=y(E,5,0),T=y(E,5,1),M=function(e){for(var t=e[0],o=1;ot&&(t=e[o]);return t},x=function(e,t,o){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(7&t)&o},C=function(e,t){var o=t/8|0;return(e[o]|e[o+1]<<8|e[o+2]<<16)>>(7&t)},k=function(e){return(e/8|0)+(7&e&&1)},A=function(e,t,a){(null==t||t<0)&&(t=0),(null==a||a>e.length)&&(a=e.length);var r=new(e instanceof n?n:e instanceof i?i:o)(a-t);return r.set(e.subarray(t,a)),r},R=function(e,t,n){var i=e.length;if(!i||n&&!n.l&&i<5)return t||new o(0);var l=!t||n,c=!n||n.i;n||(n={}),t||(t=new o(3*i));var u=function(e){var n=t.length;if(e>n){var i=new o(Math.max(2*n,e));i.set(t),t=i}},m=n.f||0,g=n.p||0,h=n.b||0,f=n.l,v=n.d,b=n.m,E=n.n,w=8*i;do{if(!f){n.f=m=x(e,g,1);var S=x(e,g+1,3);if(g+=3,!S){var R=e[($=k(g)+4)-4]|e[$-3]<<8,B=$+R;if(B>i){if(c)throw"unexpected EOF";break}l&&u(h+R),t.set(e.subarray($,B),h),n.b=h+=R,n.p=g=8*B;continue}if(1==S)f=_,v=T,b=9,E=5;else{if(2!=S)throw"invalid block type";var L=x(e,g,31)+257,I=x(e,g+10,15)+4,D=L+x(e,g+5,31)+1;g+=14;for(var U=new o(D),P=new o(19),H=0;H>>4)<16)U[H++]=$;else{var j=0,F=0;for(16==$?(F=3+x(e,g,3),g+=2,j=U[H-1]):17==$?(F=3+x(e,g,7),g+=3):18==$&&(F=11+x(e,g,127),g+=7);F--;)U[H++]=j}}var W=U.subarray(0,L),G=U.subarray(L);b=M(W),E=M(G),f=y(W,b,1),v=y(G,E,1)}if(g>w){if(c)throw"unexpected EOF";break}}l&&u(h+131072);for(var q=(1<>>4;if((g+=15&j)>w){if(c)throw"unexpected EOF";break}if(!j)throw"invalid length/literal";if(Z<256)t[h++]=Z;else{if(256==Z){Q=g,f=null;break}var Y=Z-254;Z>264&&(Y=x(e,g,(1<<(ee=a[H=Z-257]))-1)+d[H],g+=ee);var J=v[C(e,g)&X],K=J>>>4;if(!J)throw"invalid distance";if(g+=15&J,G=p[K],K>3){var ee=r[K];G+=C(e,g)&(1<w){if(c)throw"unexpected EOF";break}l&&u(h+131072);for(var te=h+Y;h>>8},L=function(e,t,o){var n=t/8|0;e[n]|=o<<=7&t,e[n+1]|=o>>>8,e[n+2]|=o>>>16},I=function(e,t){for(var i=[],a=0;ag&&(g=s[a].s);var h=new n(g+1),f=D(i[m-1],h,0);if(f>t){a=0;var v=0,y=f-t,b=1<t))break;v+=b-(1<>>=y;v>0;){var w=s[a].s;h[w]=0&&v;--a){var _=s[a].s;h[_]==t&&(--h[_],++v)}f=t}return[new o(h),f]},D=function(e,t,o){return-1==e.s?Math.max(D(e.l,t,o+1),D(e.r,t,o+1)):t[e.s]=o},U=function(e){for(var t=e.length;t&&!e[--t];);for(var o=new n(++t),i=0,a=e[0],r=1,s=function(e){o[i++]=e},l=1;l<=t;++l)if(e[l]==a&&l!=t)++r;else{if(!a&&r>2){for(;r>138;r-=138)s(32754);r>2&&(s(r>10?r-11<<5|28690:r-3<<5|12305),r=0)}else if(r>3){for(s(a),--r;r>6;r-=6)s(8304);r>2&&(s(r-3<<5|8208),r=0)}for(;r--;)s(a);r=1,a=e[l]}return[o.subarray(0,i),t]},P=function(e,t){for(var o=0,n=0;n>>8,e[i+2]=255^e[i],e[i+3]=255^e[i+1];for(var a=0;a4&&!$[s[j-1]];--j);var F,W,G,q,X=p+5<<3,Q=P(l,b)+P(c,E)+d,Z=P(l,f)+P(c,T)+d+14+3*j+P(O,$)+(2*O[16]+3*O[17]+7*O[18]);if(X<=Q&&X<=Z)return H(t,g,e.subarray(m,m+p));if(B(t,g,1+(Z15&&(B(t,g,ee[V]>>>5&127),g+=ee[V]>>>12)}}else F=w,W=b,G=S,q=E;for(V=0;V255){var te;L(t,g,F[257+(te=i[V]>>>18&31)]),g+=W[te+257],te>7&&(B(t,g,i[V]>>>23&31),g+=a[te]);var oe=31&i[V];L(t,g,G[oe]),g+=q[oe],oe>3&&(L(t,g,i[V]>>>5&8191),g+=r[oe])}else L(t,g,F[i[V]]),g+=W[i[V]];return L(t,g,F[256]),g+W[256]},V=new i([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),z=new o(0),$=function(e,t,s,l,c,d){var m=e.length,p=new o(l+m+5*(1+Math.ceil(m/7e3))+c),h=p.subarray(l,p.length-c),f=0;if(!t||m<8)for(var v=0;v<=m;v+=65535){var y=v+65535;y>>13,w=8191&b,_=(1<7e3||U>24576)&&W>423){f=O(e,h,0,R,B,L,D,U,$,v-$,f),U=I=D=0,$=v;for(var G=0;G<286;++G)B[G]=0;for(G=0;G<30;++G)L[G]=0}var q=2,X=0,Q=w,Z=j-F&32767;if(W>2&&N==C(v-Z))for(var Y=Math.min(E,W)-1,J=Math.min(32767,v),K=Math.min(258,W);Z<=J&&--Q&&j!=F;){if(e[v+q]==e[v+q-Z]){for(var ee=0;eeq){if(q=ee,X=Z,ee>Y)break;var te=Math.min(Z,ee-2),oe=0;for(G=0;Goe&&(oe=ie,F=ne)}}}Z+=(j=F)-(F=S[j])+32768&32767}if(X){R[U++]=268435456|u[q]<<18|g[X];var ae=31&u[q],re=31&g[X];D+=a[ae]+r[re],++B[257+ae],++L[re],P=v+q,++I}else R[U++]=e[v],++B[e[v]]}}f=O(e,h,d,R,B,L,D,U,$,v-$,f),!d&&7&f&&(f=H(h,f+1,z))}return A(p,0,l+k(f)+c)},N=function(){for(var e=new i(256),t=0;t<256;++t){for(var o=t,n=9;--n;)o=(1&o&&3988292384)^o>>>1;e[t]=o}return e}(),j=function(){var e=-1;return{p:function(t){for(var o=e,n=0;n>>8;e=o},d:function(){return~e}}},F=function(){var e=1,t=0;return{p:function(o){for(var n=e,i=t,a=o.length,r=0;r!=a;){for(var s=Math.min(r+2655,a);r>16),i=(65535&i)+15*(i>>16)}e=n,t=i},d:function(){return(255&(e%=65521))<<24|e>>>8<<16|(255&(t%=65521))<<8|t>>>8}}},W=function(e,t,o,n,i){return $(e,null==t.level?6:t.level,null==t.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(e.length)))):12+t.mem,o,n,!i)},G=function(e,t){var o={};for(var n in e)o[n]=e[n];for(var n in t)o[n]=t[n];return o},q=function(e,t,o){for(var n=e(),i=""+e,a=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/ /g,"").split(","),r=0;r>>0},de=function(e,t){return ce(e,t)+4294967296*ce(e,t+4)},ue=function(e,t,o){for(;o;++t)e[t]=o,o>>>=8},me=function(e,t){var o=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:9==t.level?2:0,e[9]=3,0!=t.mtime&&ue(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),o){e[3]=8;for(var n=0;n<=o.length;++n)e[n+10]=o.charCodeAt(n)}},pe=function(e){if(31!=e[0]||139!=e[1]||8!=e[2])throw"invalid gzip data";var t=e[3],o=10;4&t&&(o+=e[10]|2+(e[11]<<8));for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[o++]);return o+(2&t)},ge=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0},he=function(e){return 10+(e.filename&&e.filename.length+1||0)},fe=function(e,t){var o=t.level,n=0==o?0:o<6?1:9==o?3:2;e[0]=120,e[1]=n<<6|(n?32-2*n:1)},ve=function(e){if(8!=(15&e[0])||e[0]>>>4>7||(e[0]<<8|e[1])%31)throw"invalid zlib data";if(32&e[1])throw"invalid zlib data: preset dictionaries not supported"};function ye(e,t){return t||"function"!=typeof e||(t=e,e={}),this.ondata=t,e}var be=function(){function e(e,t){t||"function"!=typeof e||(t=e,e={}),this.ondata=t,this.o=e||{}}return e.prototype.p=function(e,t){this.ondata(W(e,this.o,0,0,!t),t)},e.prototype.push=function(e,t){if(this.d)throw"stream finished";if(!this.ondata)throw"no stream handler";this.d=t,this.p(e,t||!1)},e}();e.Deflate=be;var Ee=function(e,t){se([J,function(){return[re,be]}],this,ye.call(this,e,t),(function(e){var t=new be(e.data);onmessage=re(t)}),6)};function we(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return ae(e,t,[J],(function(e){return ne(_e(e.data[0],e.data[1]))}),0,o)}function _e(e,t){return W(e,t||{},0,0)}e.AsyncDeflate=Ee,e.deflate=we,e.deflateSync=_e;var Se=function(){function e(e){this.s={},this.p=new o(0),this.ondata=e}return e.prototype.e=function(e){if(this.d)throw"stream finished";if(!this.ondata)throw"no stream handler";var t=this.p.length,n=new o(t+e.length);n.set(this.p),n.set(e,t),this.p=n},e.prototype.c=function(e){this.d=this.s.i=e||!1;var t=this.s.b,o=R(this.p,this.o,this.s);this.ondata(A(o,t,this.s.b),this.d),this.o=A(o,this.s.b-32768),this.s.b=this.o.length,this.p=A(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}();e.Inflate=Se;var Te=function(e){this.ondata=e,se([Y,function(){return[re,Se]}],this,0,(function(){var e=new Se;onmessage=re(e)}),7)};function Me(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return ae(e,t,[Y],(function(e){return ne(xe(e.data[0],ie(e.data[1])))}),1,o)}function xe(e,t){return R(e,t)}e.AsyncInflate=Te,e.inflate=Me,e.inflateSync=xe;var Ce=function(){function e(e,t){this.c=j(),this.l=0,this.v=1,be.call(this,e,t)}return e.prototype.push=function(e,t){be.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e),this.l+=e.length;var o=W(e,this.o,this.v&&he(this.o),t&&8,!t);this.v&&(me(o,this.o),this.v=0),t&&(ue(o,o.length-8,this.c.d()),ue(o,o.length-4,this.l)),this.ondata(o,t)},e}();e.Gzip=Ce,e.Compress=Ce;var ke=function(e,t){se([J,K,function(){return[re,be,Ce]}],this,ye.call(this,e,t),(function(e){var t=new Ce(e.data);onmessage=re(t)}),8)};function Ae(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return ae(e,t,[J,K,function(){return[Re]}],(function(e){return ne(Re(e.data[0],e.data[1]))}),2,o)}function Re(e,t){t||(t={});var o=j(),n=e.length;o.p(e);var i=W(e,t,he(t),8),a=i.length;return me(i,t),ue(i,a-8,o.d()),ue(i,a-4,n),i}e.AsyncGzip=ke,e.AsyncCompress=ke,e.gzip=Ae,e.compress=Ae,e.gzipSync=Re,e.compressSync=Re;var Be=function(){function e(e){this.v=1,Se.call(this,e)}return e.prototype.push=function(e,t){if(Se.prototype.e.call(this,e),this.v){var o=this.p.length>3?pe(this.p):4;if(o>=this.p.length&&!t)return;this.p=this.p.subarray(o),this.v=0}if(t){if(this.p.length<8)throw"invalid gzip stream";this.p=this.p.subarray(0,-8)}Se.prototype.c.call(this,t)},e}();e.Gunzip=Be;var Le=function(e){this.ondata=e,se([Y,ee,function(){return[re,Se,Be]}],this,0,(function(){var e=new Be;onmessage=re(e)}),9)};function Ie(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return ae(e,t,[Y,ee,function(){return[De]}],(function(e){return ne(De(e.data[0]))}),3,o)}function De(e,t){return R(e.subarray(pe(e),-8),t||new o(ge(e)))}e.AsyncGunzip=Le,e.gunzip=Ie,e.gunzipSync=De;var Ue=function(){function e(e,t){this.c=F(),this.v=1,be.call(this,e,t)}return e.prototype.push=function(e,t){be.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e);var o=W(e,this.o,this.v&&2,t&&4,!t);this.v&&(fe(o,this.o),this.v=0),t&&ue(o,o.length-4,this.c.d()),this.ondata(o,t)},e}();e.Zlib=Ue;var Pe=function(e,t){se([J,te,function(){return[re,be,Ue]}],this,ye.call(this,e,t),(function(e){var t=new Ue(e.data);onmessage=re(t)}),10)};function He(e,t){t||(t={});var o=F();o.p(e);var n=W(e,t,2,4);return fe(n,t),ue(n,n.length-4,o.d()),n}e.AsyncZlib=Pe,e.zlib=function(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return ae(e,t,[J,te,function(){return[He]}],(function(e){return ne(He(e.data[0],e.data[1]))}),4,o)},e.zlibSync=He;var Oe=function(){function e(e){this.v=1,Se.call(this,e)}return e.prototype.push=function(e,t){if(Se.prototype.e.call(this,e),this.v){if(this.p.length<2&&!t)return;this.p=this.p.subarray(2),this.v=0}if(t){if(this.p.length<4)throw"invalid zlib stream";this.p=this.p.subarray(0,-4)}Se.prototype.c.call(this,t)},e}();e.Unzlib=Oe;var Ve=function(e){this.ondata=e,se([Y,oe,function(){return[re,Se,Oe]}],this,0,(function(){var e=new Oe;onmessage=re(e)}),11)};function ze(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return ae(e,t,[Y,oe,function(){return[$e]}],(function(e){return ne($e(e.data[0],ie(e.data[1])))}),5,o)}function $e(e,t){return R((ve(e),e.subarray(2,-4)),t)}e.AsyncUnzlib=Ve,e.unzlib=ze,e.unzlibSync=$e;var Ne=function(){function e(e){this.G=Be,this.I=Se,this.Z=Oe,this.ondata=e}return e.prototype.push=function(e,t){if(!this.ondata)throw"no stream handler";if(this.s)this.s.push(e,t);else{if(this.p&&this.p.length){var n=new o(this.p.length+e.length);n.set(this.p),n.set(e,this.p.length)}else this.p=e;if(this.p.length>2){var i=this,a=function(){i.ondata.apply(i,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(a):8!=(15&this.p[0])||this.p[0]>>4>7||(this.p[0]<<8|this.p[1])%31?new this.I(a):new this.Z(a),this.s.push(this.p,t),this.p=null}}},e}();e.Decompress=Ne;var je=function(){function e(e){this.G=Le,this.I=Te,this.Z=Ve,this.ondata=e}return e.prototype.push=function(e,t){Ne.prototype.push.call(this,e,t)},e}();e.AsyncDecompress=je,e.decompress=function(e,t,o){if(o||(o=t,t={}),"function"!=typeof o)throw"no callback";return 31==e[0]&&139==e[1]&&8==e[2]?Ie(e,t,o):8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31?Me(e,t,o):ze(e,t,o)},e.decompressSync=function(e,t){return 31==e[0]&&139==e[1]&&8==e[2]?De(e,t):8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31?xe(e,t):$e(e,t)};var Fe=function(e,t,n,i){for(var a in e){var r=e[a],s=t+a;r instanceof o?n[s]=[r,i]:Array.isArray(r)?n[s]=[r[0],G(i,r[1])]:Fe(r,s+"/",n,i)}},We="undefined"!=typeof TextEncoder&&new TextEncoder,Ge="undefined"!=typeof TextDecoder&&new TextDecoder,qe=0;try{Ge.decode(z,{stream:!0}),qe=1}catch(t){}var Xe=function(e){for(var t="",o=0;;){var n=e[o++],i=(n>127)+(n>223)+(n>239);if(o+i>e.length)return[t,A(e,o-1)];i?3==i?(n=((15&n)<<18|(63&e[o++])<<12|(63&e[o++])<<6|63&e[o++])-65536,t+=String.fromCharCode(55296|n>>10,56320|1023&n)):t+=String.fromCharCode(1&i?(31&n)<<6|63&e[o++]:(15&n)<<12|(63&e[o++])<<6|63&e[o++]):t+=String.fromCharCode(n)}},Qe=function(){function e(e){this.ondata=e,qe?this.t=new TextDecoder:this.p=z}return e.prototype.push=function(e,t){if(!this.ondata)throw"no callback";if(t=!!t,this.t){if(this.ondata(this.t.decode(e,{stream:!0}),t),t){if(this.t.decode().length)throw"invalid utf-8 data";this.t=null}}else{if(!this.p)throw"stream finished";var n=new o(this.p.length+e.length);n.set(this.p),n.set(e,this.p.length);var i=Xe(n),a=i[0],r=i[1];if(t){if(r.length)throw"invalid utf-8 data";this.p=null}else this.p=r;this.ondata(a,t)}},e}();e.DecodeUTF8=Qe;var Ze=function(){function e(e){this.ondata=e}return e.prototype.push=function(e,t){if(!this.ondata)throw"no callback";if(this.d)throw"stream finished";this.ondata(Ye(e),this.d=t||!1)},e}();function Ye(e,t){if(t){for(var n=new o(e.length),i=0;i>1)),s=0,l=function(e){r[s++]=e};for(i=0;ir.length){var c=new o(s+8+(a-i<<1));c.set(r),r=c}var d=e.charCodeAt(i);d<128||t?l(d):d<2048?(l(192|d>>6),l(128|63&d)):d>55295&&d<57344?(l(240|(d=65536+(1047552&d)|1023&e.charCodeAt(++i))>>18),l(128|d>>12&63),l(128|d>>6&63),l(128|63&d)):(l(224|d>>12),l(128|d>>6&63),l(128|63&d))}return A(r,0,s)}function Je(e,t){if(t){for(var o="",n=0;n65535)throw"extra field too long";t+=n+4}return t},it=function(e,t,o,n,i,a,r,s){var l=n.length,c=o.extra,d=s&&s.length,u=nt(c);ue(e,t,null!=r?33639248:67324752),t+=4,null!=r&&(e[t++]=20,e[t++]=o.os),e[t]=20,t+=2,e[t++]=o.flag<<1|(null==a&&8),e[t++]=i&&8,e[t++]=255&o.compression,e[t++]=o.compression>>8;var m=new Date(null==o.mtime?Date.now():o.mtime),p=m.getFullYear()-1980;if(p<0||p>119)throw"date not in range 1980-2099";if(ue(e,t,p<<25|m.getMonth()+1<<21|m.getDate()<<16|m.getHours()<<11|m.getMinutes()<<5|m.getSeconds()>>>1),t+=4,null!=a&&(ue(e,t,o.crc),ue(e,t+4,a),ue(e,t+8,o.size)),ue(e,t+12,l),ue(e,t+14,u),t+=16,null!=r&&(ue(e,t,d),ue(e,t+6,o.attrs),ue(e,t+10,r),t+=14),e.set(n,t),t+=l,u)for(var g in c){var h=c[g],f=h.length;ue(e,t,+g),ue(e,t+2,f),e.set(h,t+4),t+=4+f}return d&&(e.set(s,t),t+=d),t},at=function(e,t,o,n,i){ue(e,t,101010256),ue(e,t+8,o),ue(e,t+10,o),ue(e,t+12,n),ue(e,t+16,i)},rt=function(){function e(e){this.filename=e,this.c=j(),this.size=0,this.compression=0}return e.prototype.process=function(e,t){this.ondata(null,e,t)},e.prototype.push=function(e,t){if(!this.ondata)throw"no callback - add to ZIP archive before pushing";this.c.p(e),this.size+=e.length,t&&(this.crc=this.c.d()),this.process(e,t||!1)},e}();e.ZipPassThrough=rt;var st=function(){function e(e,t){var o=this;t||(t={}),rt.call(this,e),this.d=new be(t,(function(e,t){o.ondata(null,e,t)})),this.compression=8,this.flag=Ke(t.level)}return e.prototype.process=function(e,t){try{this.d.push(e,t)}catch(e){this.ondata(e,null,t)}},e.prototype.push=function(e,t){rt.prototype.push.call(this,e,t)},e}();e.ZipDeflate=st;var lt=function(){function e(e,t){var o=this;t||(t={}),rt.call(this,e),this.d=new Ee(t,(function(e,t,n){o.ondata(e,t,n)})),this.compression=8,this.flag=Ke(t.level),this.terminate=this.d.terminate}return e.prototype.process=function(e,t){this.d.push(e,t)},e.prototype.push=function(e,t){rt.prototype.push.call(this,e,t)},e}();e.AsyncZipDeflate=lt;var ct=function(){function e(e){this.ondata=e,this.u=[],this.d=1}return e.prototype.add=function(e){var t=this;if(2&this.d)throw"stream finished";var n=Ye(e.filename),i=n.length,a=e.comment,r=a&&Ye(a),s=i!=e.filename.length||r&&a.length!=r.length,l=i+nt(e.extra)+30;if(i>65535)throw"filename too long";var c=new o(l);it(c,0,e,n,s);var d=[c],u=function(){for(var e=0,o=d;e65535&&T("filename too long",null),S)if(f<16e4)try{T(null,_e(c,g))}catch(e){T(e,null)}else u.push(we(c,g,T));else T(null,c)},h=0;h65535)throw"filename too long";var v=u?_e(c,d):c,y=v.length,b=j();b.p(c),i.push(G(d,{size:c.length,crc:b.d(),c:v,f:T,m:g,u:m!=s.length||g&&p.length!=h,o:a,compression:u})),a+=30+m+f+y,r+=76+2*(m+f)+(h||0)+y}for(var E=new o(r+22),w=a,_=r-a,S=0;S0){var i=Math.min(this.c,e.length),a=e.subarray(0,i);if(this.c-=i,this.d?this.d.push(a,!this.c):this.k[0].push(a),(e=e.subarray(i)).length)return this.push(e,t)}else{var r=0,s=0,l=void 0,c=void 0;this.p.length?e.length?((c=new o(this.p.length+e.length)).set(this.p),c.set(e,this.p.length)):c=this.p:c=e;for(var d=c.length,u=this.c,m=u&&this.d,p=function(){var e,t=ce(c,s);if(67324752==t){r=1,l=s,g.d=null,g.c=0;var o=le(c,s+6),i=le(c,s+8),a=2048&o,m=8&o,p=le(c,s+26),h=le(c,s+28);if(d>s+30+p+h){var f=[];g.k.unshift(f),r=2;var v=ce(c,s+18),y=ce(c,s+22),b=Je(c.subarray(s+30,s+=30+p),!a);4294967295==v?(e=m?[-2]:ot(c,s),v=e[0],y=e[1]):m&&(v=-1),s+=h,g.c=v;var E={name:b,compression:i,start:function(){if(!E.ondata)throw"no callback";if(v){var e=n.o[i];if(!e)throw"unknown compression type "+i;var t=v<0?new e(b):new e(b,v,y);t.ondata=function(e,t,o){E.ondata(e,t,o)};for(var o=0,a=f;o=0&&(E.size=v,E.originalSize=y),g.onfile(E)}return"break"}if(u){if(134695760==t)return l=s+=12+(-2==u&&8),r=3,g.c=0,"break";if(33639248==t)return l=s-=4,r=3,g.c=0,"break"}},g=this;s65558)return void t("invalid zip file",null);var s=le(e,r+8);s||t(null,{});var l=s,c=ce(e,r+16),d=4294967295==c;if(d){if(r=ce(e,r-12),101075792!=ce(e,r))return void t("invalid zip file",null);l=s=ce(e,r+32),c=ce(e,r+48)}for(var u=function(r){var l=tt(e,c,d),u=l[0],m=l[1],p=l[2],g=l[3],h=l[4],f=et(e,l[5]);c=h;var v=function(e,o){e?(i(),t(e,null)):(a[g]=o,--s||t(null,a))};if(u)if(8==u){var y=e.subarray(f,f+m);if(m<32e4)try{v(null,xe(y,new o(p)))}catch(e){v(e,null)}else n.push(Me(y,{size:p},v))}else v("unknown compression type "+u,null);else v(null,A(e,f,f+m))},m=0;m65558)throw"invalid zip file";var i=le(e,n+8);if(!i)return{};var a=ce(e,n+16),r=4294967295==a;if(r){if(n=ce(e,n-12),101075792!=ce(e,n))throw"invalid zip file";i=ce(e,n+32),a=ce(e,n+48)}for(var s=0;s{if(e.isMesh&&e.material.isMeshStandardMaterial){var t=e.userData.compUid;e.userData.isTextChild&&(t=e.parent.userData.compUid);var o=s.getters.getCompItemByCompUid(t);if(!o)return;var n="Object_"+e.id,i=`/Root/Scenes/Scene_${a}/${n}`;s.addToCompItemsArray({path:i,compUid:o.compUid})}});var c=this.projectData.settings.pagination.startScene,d=0,u=this.projectData.modules.states;u&&u.enabled&&(d=this.getStateIndexByUid(u.defaultStateUid)),a==c&&(this.output+="#default scene"),this.output+=`\n\n\n\n#scene ${a} | ${this.projectData.composition[a].name} -------------------\n\ndef Xform "Scene_${a}" (\n\t\t\t)\n\t\t\t{\n\t\t\t`,a==c&&(this.output+=`\n\t\t\t\t#default scene behavior\n\n\t\t\t\tdef Preliminary_Behavior "BehaviorDefault"\n\t\t\t\t{\n\t\t\t\t\trel triggers = \n\t\t\t\t\trel actions = \n\t\t\t\t\tuniform bool exclusive = false\n\n\t\t\t\t\tdef Preliminary_Action "ActionRoot"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = [\n\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t,#only runs once because triggered by SceneTransition\n\t\t\t\t\t\t]\n\n\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\ttoken type = "parallel"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Trigger "Trigger_transition"\n\t\t\t\t\t{\n\t\t\t\t\t\ttoken info:id = "SceneTransition"\n\t\t\t\t\t\ttoken type = "enter"\n\t\t\t\t\t}\n\t\t\t\t\t`,this.output+="\n\t\t\t\t}\n\t\t\t\t\t"),this.output+=this.addGoToScene(a,`/Root/Scenes/Scene_${a}/`);const m=this.materials;this.textures;var p=!1;l.traverseVisible(t=>{if(p)return null;if(t.isMesh&&t.material.isMeshStandardMaterial){var r=t.userData.compUid,l=t.userData.idMesh;t.userData.isTextChild&&(r=t.parent.userData.compUid);var c=s.getters.getCompItemByCompUid(r);if(!c)return;var d="Object_"+t.id;const u=t.geometry,g=t.material,h="geometries/Geometry_"+u.id+".usd";try{if(!(h in e)){const t=function(e){return`\ndef "Geometry"\n{\n ${function(e){const t=e.attributes,o=t.position.count;return`\n def Mesh "Geometry"\n {\n\t\tuniform bool doubleSided = 1\n int[] faceVertexCounts = [${function(e){const t=null!==e.index?e.index.array.length:e.attributes.position.count;return Array(t/3).fill(3).join(",")}(e)}]\n int[] faceVertexIndices = [${function(e){if(null!==e.index)return e.index.array.join(",");const t=[],o=e.attributes.position.count;for(let e=0;e\n\t)\n\t{\n\t\trel material:binding = `;return l+="\n\t}# / object\n"}(t,d,u,g,c),s.output+='\n\t\t\t\t\tdef Scope "Behaviors"\n\t\t\t\t\t{\n\t\t\t\t\t',_doUSDZSimpleAnimations&&c.animationType&&""!=c.animationType&&(s.output+=s.addSimpleAnimation(a,c,d)),void 0!==r&&s.findMediaAction(a,c,d),void 0!==l&&s.findMeshAction(a,c,l,d),s.output+="\n}\n\t\t\t\t\t",this.output+=`\n\t\t\t\t#close object ${t.id}\n\t\t\t\t}\n\t\t\t\t\t`}}),this.output+=`\n\t#end of scene ${a}\n\t}\n\t\t\t`}addSimpleAnimation(e,t,o){console.log("add simple anim",t.animationType);var n=`/Root/Scenes/Scene_${e}/${o}`,i="#"+t.animationType;if("rot_y_clockwise"==t.animationType||"rot_y_anticlockwise"==t.animationType){if(i+=`\n\n\t\t\t\tdef Preliminary_Behavior "BehaviorSA"\n\t\t\t\t{\n\t\t\t\t\trel actions = <${n}/Behaviors/BehaviorSA/ActionRoot>\n\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\trel triggers = <${n}/Behaviors/BehaviorSA/Trigger_1>\n\n\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t{\n\t\t\t\t\t\ttoken info:id = "SceneTransition"\n\t\t\t\t\t\ttoken type = "enter"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "ActionRoot"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = <${n}/Behaviors/BehaviorSA/ActionRoot/Action_1>\n\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\tbool loops = true\n\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\ttoken type = "serial"\n\n\t\t\t\t\t\tdef Preliminary_Action "Action_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = <${n}/Object/Geometry>\n\t\t\t\t\t\t\t`,"rot_y_clockwise"==t.animationType){var a=6;"medium"==t.animationSpeed&&(a=4),"fast"==t.animationSpeed&&(a=2),i+=`\n\t\t\t\t\t\t\tdouble3 axis = (0, 1, 0)\n\t\t\t\t\t\t\tdouble duration = ${a}\n\t\t\t\t\t\t\ttoken info:id = "Spin"\n\t\t\t\t\t\t\tdouble revolutions = 1`}if("rot_y_anticlockwise"==t.animationType){a=6;"medium"==t.animationSpeed&&(a=4),"fast"==t.animationSpeed&&(a=2),i+=`\n\t\t\t\t\t\t\tdouble3 axis = (0, -1, 0)\n\t\t\t\t\t\t\tdouble duration = ${a}\n\t\t\t\t\t\t\ttoken info:id = "Spin"\n\t\t\t\t\t\t\tdouble revolutions = 1`}i+="\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t"}if("pulse"==t.animationType){a=6;"medium"==t.animationSpeed&&(a=4),"fast"==t.animationSpeed&&(a=2),i+=`\n\n\t\t\t\tdef Preliminary_Behavior "BehaviorSA"\n\t\t\t\t{\n\t\t\t\t\trel actions = <${n}/Behaviors/BehaviorSA/ActionRoot>\n\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\trel triggers = <${n}/Behaviors/BehaviorSA/Trigger_1>\n\n\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t{\n\t\t\t\t\t\ttoken info:id = "SceneTransition"\n\t\t\t\t\t\ttoken type = "enter"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "ActionRoot"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = [\n\t\t\t\t\t\t\t<${n}/Behaviors/BehaviorSA/ActionRoot/Action_1>,\n\t\t\t\t\t\t\t<${n}/Behaviors/BehaviorSA/ActionRoot/Action_2>,\n\t\t\t\t\t\t\t<${n}/Behaviors/BehaviorSA/ActionRoot/Action_3>,\n\t\t\t\t\t\t\t#<${n}/Behaviors/BehaviorSA/ActionRoot/Action_123>,\n\t\t\t\t\t\t]\n\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\tbool loops = true\n\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\ttoken type = "serial"\n\n\t\t\t\t\t\t#Stops the current action. buggy\n\t\t\t\t\t\t#token multiplePerformOperation = "stop"\n\n\t\t\t\t\t\tdef Preliminary_Action "Action_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = <${n}/Object/Geometry>\n\t\t\t\t\t\t\tdouble duration = 0.5\n\t\t\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\t\t\ttoken info:id = "Transform"\n\t\t\t\t\t\t\t#token type = "absolute"\n\t\t\t\t\t\t\ttoken type = "relative"\n\t\t\t\t\t\t\trel xformTarget = <${n}/Behaviors/BehaviorSA/ScaleUp>\n\t\t\t\t\t\t}\n\n def Preliminary_Action "Action_2"\n {\n rel affectedObjects = <${n}/Object/Geometry>\n double duration = 0.5\n token easeType = "inout"\n token info:id = "Transform"\n\t\t\t\t\t\t\t#token type = "absolute"\n\t\t\t\t\t\t\ttoken type = "relative"\n rel xformTarget = <${n}/Behaviors/BehaviorSA/ScaleDown>\n }\n\n\t\t\t\t\t\tdef Preliminary_Action "Action_3"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = <${n}/Object/Geometry>\n\t\t\t\t\t\t\tdouble duration = 1\n\t\t\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\t\t\ttoken info:id = "Transform"\n\t\t\t\t\t\t\t#token type = "absolute"\n\t\t\t\t\t\t\ttoken type = "relative"\n\t\t\t\t\t\t\trel xformTarget = <${n}/Behaviors/BehaviorSA/Idle>\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdef Preliminary_Action "Action_123"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = <${n}/Object/Geometry>\n\t\t\t\t\t\t\tdouble duration = 1\n\t\t\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\t\t\ttoken info:id = "Transform"\n\t\t\t\t\t\t\t#token type = "absolute"\n\t\t\t\t\t\t\ttoken type = "relative"\n\t\t\t\t\t\t\trel xformTarget = <${n}/Behaviors/BehaviorSA/Pulse123>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Xform "ScaleUp"\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble3 xformOp:scale = (1.1, 1.1, 1.1)\n\t\t\t\t\t\tuniform token[] xformOpOrder = ["xformOp:scale"]\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Xform "ScaleDown"\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble3 xformOp:scale = (0.909, 0.909, 0.909)\n\t\t\t\t\t\tuniform token[] xformOpOrder = ["xformOp:scale"]\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Xform "Idle"\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble3 xformOp:scale = (1.0, 1.0, 1.0)\n\t\t\t\t\t\tuniform token[] xformOpOrder = ["xformOp:scale"]\n\t\t\t\t\t\t#double3 xformOp:translate:offset = (0, 0, 0)\n\t\t\t\t\t\t#uniform token[] xformOpOrder = ["xformOp:translate:offset", "xformOp:scale"]\n\t\t\t\t\t}\n\n\t\t\t\t\t#not used\n\t\t\t\t\tdef Xform "Pulse123"\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble3 xformOp:scaleA = (1.1, 1.1, 1.1)\n\t\t\t\t\t\tdouble3 xformOp:scaleB = (0.909, 0.909, 0.909)\n\t\t\t\t\t\tdouble3 xformOp:scaleC = (1.0, 1.0, 1.0)\n\t\t\t\t\t\t#double3 xformOp:translate = (0, 0, 0)\n\t\t\t\t\t\tuniform token[] xformOpOrder = ["xformOp:scaleA"]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t`}if("scale_up_down"==t.animationType){a=6;"medium"==t.animationSpeed&&(a=4),"fast"==t.animationSpeed&&(a=2),i+=`\n\n\t\t\t\tdef Preliminary_Behavior "BehaviorSA"\n\t\t\t\t{\n\t\t\t\t\trel actions = <${n}/Behaviors/BehaviorSA/ActionRoot>\n\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\trel triggers = <${n}/Behaviors/BehaviorSA/Trigger_1>\n\n\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t{\n\t\t\t\t\t\ttoken info:id = "SceneTransition"\n\t\t\t\t\t\ttoken type = "enter"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "ActionRoot"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = [\n\t\t\t\t\t\t\t<${n}/Behaviors/BehaviorSA/ActionRoot/Action_1>,\n\t\t\t\t\t\t\t<${n}/Behaviors/BehaviorSA/ActionRoot/Action_2>,\n\t\t\t\t\t\t]\n\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\tbool loops = true\n\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\ttoken type = "serial"\n\n\t\t\t\t\t\tdef Preliminary_Action "Action_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = <${n}/Object/Geometry>\n\t\t\t\t\t\t\tdouble duration = 1\n\t\t\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\t\t\ttoken info:id = "Transform"\n\t\t\t\t\t\t\t#token type = "absolute"\n\t\t\t\t\t\t\ttoken type = "relative"\n\t\t\t\t\t\t\trel xformTarget = <${n}/Behaviors/BehaviorSA/ScaleUp>\n\t\t\t\t\t\t}\n\n def Preliminary_Action "Action_2"\n {\n rel affectedObjects = <${n}/Object/Geometry>\n double duration = 1\n token easeType = "inout"\n token info:id = "Transform"\n\t\t\t\t\t\t\t#token type = "absolute"\n\t\t\t\t\t\t\ttoken type = "relative"\n rel xformTarget = <${n}/Behaviors/BehaviorSA/ScaleDown>\n }\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Xform "ScaleUp"\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble3 xformOp:scale = (1.1, 1.1, 1.1)\n\t\t\t\t\t\t#double3 xformOp:translate:offset = (0, 0, 0)\n\t\t\t\t\t\t#uniform token[] xformOpOrder = ["xformOp:translate:offset", "xformOp:scale"]\n\t\t\t\t\t\tuniform token[] xformOpOrder = ["xformOp:scale"]\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Xform "ScaleDown"\n\t\t\t\t\t{\n\t\t\t\t\t\tdouble3 xformOp:scale = (0.909, 0.909, 0.909)\n\t\t\t\t\t\t#double3 xformOp:translate:offset = (0, 0, 0)\n\t\t\t\t\t\t#uniform token[] xformOpOrder = ["xformOp:translate:offset", "xformOp:scale"]\n\t\t\t\t\t\tuniform token[] xformOpOrder = ["xformOp:scale"]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t`}return i}findMediaAction(e,t,o){if(t.actions&&t.actions[0]){var n=t.actions[0];this.output+=this.addAction(n,e,o)}}findMeshAction(e,t,o,n){var i=this;t.meshes.forEach((function(t){if(t.idMesh==o&&t.actions){var a=t.actions[0];i.output+=i.addAction(a,e,n)}}))}addToCompItemsArray(e){this.compItems.push(e)}getPathsByCompUid(e){var t="";return this.compItems.forEach((function(o){o.compUid==e&&(t+="<"+o.path+"/Object/Geometry>,")})),t}addGoToScene(e,t){var o=this,n=null,i=o.projectData.composition[e],a=o.getters.getAllcompositionItems(i);a.forEach((function(e){n||"audio"!=e.type||(n=e.uid)}));var r="",s=!1;i.timeline&&i.timeline.enabled&&(console.log("yes timeline on scene",e),s=!0),r+=`\n\t\t\tdef Preliminary_Action "ActionGoToScene"\n\t\t\t{\n\t\t\t\trel actions = [\n\t\t\t\t\t<${t}ActionGoToScene/Action_hide>,#hide all other scenes\n\t\t\t\t\t<${t}ActionGoToScene/Action_show>,#show this one\n\t\t\t\t\t`,s||(r+=`\t<${t}ActionGoToScene/Action_showItems>,#show all items of this scene\n\t\t\t\t\t`),r+=`<${t}ActionTimeline>,#seems to be ok to have it here even is do not exists\n\t\t\t\t`,n&&(r+=`<${t}ActionGoToScene/Action_Audio>,`),r+='\n\t\t\t\t]\n\n\t\t\t\ttoken info:id = "Group"\n\t\t\t\tbool loops = 0\n\t\t\t\tint performCount = 1\n\t\t\t\ttoken type = "parallel"\n\n\t\t\t\t#Restarts the action by playing it over again.\n\t\t\t\ttoken multiplePerformOperation = "allow"\n\n\t\t\t\t#hide all other scenes\n\t\t\t\tdef Preliminary_Action "Action_hide"\n\t\t\t\t{\n\t\t\t\t\trel affectedObjects = [',o.projectData.composition.forEach((function(t,o){o!=e&&(r+=`,`)})),r+=`]\n\t\t\t\t\tdouble duration = 0\n\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\tdouble moveDistance = 1\n\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\ttoken type = "hide"\n\t\t\t\t}\n\n\t\t\t\t#show new scene\n\t\t\t\tdef Preliminary_Action "Action_show"\n\t\t\t\t{\n\t\t\t\t\trel affectedObjects = \n\t\t\t\t\tdouble duration = 0\n\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\tdouble moveDistance = 1\n\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\ttoken type = "show"\n\t\t\t\t}\n\t\t\t\t`,r+='#show new scene items\n\t\t\t\tdef Preliminary_Action "Action_showItems"\n\t\t\t\t{\n\t\t\t\t\trel affectedObjects = [';var l="";return a&&a.forEach((function(e,t){l+=o.getPathsByCompUid(e.compUid)})),r+=l,r+=']\n\t\t\t\t\tdouble duration = 0\n\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\tdouble moveDistance = 1\n\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\ttoken type = "show"\n\t\t\t\t}\n\t\t\t\t',n&&(r+=`\n\t\t\t\t#play scene composition audio\n\t\t\t\tdef Preliminary_Action "Action_Audio"\n\t\t\t\t{\n\t\t\t\t\trel affectedObjects = \n\t\t\t\t\t#rel affectedObjects = \n\t\t\t\t\tasset audio = @audios/Audio_${n}.mp3@\n\n\t\t\t\t\ttoken auralMode = "spatial"\n\t\t\t\t\tdouble gain = 0.5\n\t\t\t\t\ttoken info:id = "Audio"\n\t\t\t\t\t#Continues running the current action, ignoring the additional invocation.\n\t\t\t\t\t#token multiplePerformOperation = "ignore"\n\t\t\t\t\t#Restarts the action by playing it over again.\n\t\t\t\t\ttoken multiplePerformOperation = "allow"\n\t\t\t\t\ttoken type = "play"\n\t\t\t\t}\n\t\t\t\t\t`),r+="\n\t\t\t}\n\t\t\t",r+=o.doTimeLine(e,t)}doTimeLine(e,t){var o=this,n=o.projectData.composition[e];if(!n.timeline||!n.timeline.enabled)return console.log("no timeline on scene",e),"";console.log("do timeline on scene",e);var i=n.timeline.duration/1e3,a=0,r=1,s=1;n.timeline.loop&&(a=1,r=0,s=5,i<=2&&(s=10),i>=30&&(s=2));var l=`\n\t\t\t#scene #${e} timeline\n\t\t\tdef Preliminary_Action "ActionTimeline"\n\t\t\t{\n\t\t\t\ttoken info:id = "Group"\n\n\t\t\t\t#bool loops = 0\n\t\t\t\t#int performCount = ${s} #should be infinite\n\t\t\t\t#token type = "parallel"\n\n\t\t\t\t#buggy when coming back to scene\n\t\t\t\tbool loops = ${a}\n\t\t\t\tint performCount = ${r} #must be zero for loop true\n\t\t\t\ttoken type = "parallel"\n\n\t\t\t\t#Restarts the action by playing it over again.\n\t\t\t\t#token multiplePerformOperation = "allow"\n\t\t\t\t#Stops the current action.\n\t\t\t\ttoken multiplePerformOperation = "stop"\n\n\t\t\t\trel actions = [\n\t\t\t\t\t<${t}ActionTimeline/ActionTimelineWait>,\n`;return o.getters.getAllcompositionItems(n).forEach((function(e,o){l+=`<${t}ActionTimeline/item${o}>,\n`})),l+=`\t\t]\n\n\t\t\t\t#full timeline duration\n\t\t\t\tdef Preliminary_Action "ActionTimelineWait"\n\t\t\t\t{\n\t\t\t\t\trel affectedObjects = [,]#is it needed ?\n\t\t\t\t\t#rel affectedObjects = [,]\n\t\t\t\t\tdouble duration = ${i}\n\t\t\t\t\ttoken info:id = "Wait"\n\t\t\t\t}\n\t\t\t\t`,o.getters.getAllcompositionItems(n).forEach((function(i,a){var r=i.timeline[0].in/1e3,s=(i.timeline[0].out-i.timeline[0].in)/1e3,c=!1;0==i.timeline[0].in&&(c=!0);var d=!1;i.timeline[0].out>=n.timeline.duration&&(d=!0),console.log("timeline item",i.name,c,d);var u=o.getPathsByCompUid(i.compUid);l+=`\n\n\t\t\t\t#timeline scene ${e} / item ${a} : ${i.name}\n\t\t\t\tdef Preliminary_Action "item${a}"\n\t\t\t\t{\n\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\tbool loops = 0\n\t\t\t\t\tint performCount = 1\n\t\t\t\t\ttoken type = "serial"\n\n\t\t\t\t\trel actions = [`,c||(l+=`\n\t\t\t\t\t\t<${t}ActionTimeline/item${a}/Action_1>,#hide\n\t\t\t\t\t\t<${t}ActionTimeline/item${a}/Action_2>,#wait`),l+=`\n\t\t\t\t\t\t<${t}ActionTimeline/item${a}/Action_3>,#show\n\t\t\t\t\t\t`,d||(l+=`\n\t\t\t\t\t\t<${t}ActionTimeline/item${a}/Action_4>,#wait\n\t\t\t\t\t\t<${t}ActionTimeline/item${a}/Action_5>,#hide`),l+=`\n\t\t\t\t\t]\n\n\t\t\t\t\tdef Preliminary_Action "Action_1"\n\t\t\t\t\t{\n\t\t\t\t\t\trel affectedObjects = [${u}]\n\t\t\t\t\t\tdouble duration = 0\n\t\t\t\t\t\ttoken easeType = "none"\n\t\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\t\tdouble moveDistance = 0\n\t\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\t\ttoken type = "hide"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "Action_2"\n\t\t\t\t\t{\n\t\t\t\t\t\trel affectedObjects = [${u}]\n\t\t\t\t\t\tdouble duration = ${r}\n\t\t\t\t\t\ttoken info:id = "Wait"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "Action_3"\n\t\t\t\t\t{\n\t\t\t\t\t\trel affectedObjects = [${u}]\n\t\t\t\t\t\tdouble duration = 0\n\t\t\t\t\t\ttoken easeType = "none"\n\t\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\t\tdouble moveDistance = 0\n\t\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\t\ttoken type = "show"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "Action_4"\n\t\t\t\t\t{\n\t\t\t\t\t\trel affectedObjects = [${u}]\n\t\t\t\t\t\tdouble duration = ${s}\n\t\t\t\t\t\ttoken info:id = "Wait"\n\t\t\t\t\t}\n\n\t\t\t\t\tdef Preliminary_Action "Action_5"\n\t\t\t\t\t{\n\t\t\t\t\t\trel affectedObjects = [${u}]\n\t\t\t\t\t\tdouble duration = 0\n\t\t\t\t\t\ttoken easeType = "none"\n\t\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\t\tdouble moveDistance = 0\n\t\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\t\ttoken type = "hide"\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t`})),l+="} # / ActionTimeline\n\t\t\t"}addAction(e,t,o){var n=this;if(!e)return"";var i=e.type,a="";a+=`\n\t\t\t\t#action ${i}\n\t\t\t`;var r=n.projectData,s=n.projectData.composition.length;if("playAudio"==i&&(a+=`\n\t\t\t\t\tdef Preliminary_Behavior "Behavior_1"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = \n\t\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\t\trel triggers = \n\n\t\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = \n\t\t\t\t\t\t\ttoken info:id = "TapGesture"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t`),"switchState"==i&&r.modules.states&&r.modules.states.enabled){var l=e.stateUid;a+=`\n\t\t\t\t\tdef Preliminary_Behavior "Behavior_1"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = \n\t\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\t\trel triggers = \n\n\t\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = \n\t\t\t\t\t\t\ttoken info:id = "TapGesture"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t`}if("changeScene"==i||"nextScene"==i||"previousScene"==i){var c=0;"changeScene"==i&&(c=n.getSceneIndexByUid(1*e.sceneUid)),"nextScene"==i&&(c=t+1),"previousScene"==i&&(c=t-1),c>=s&&(c=0),c<0&&(c=s-1),a+=`\n\t\t\t\t\tdef Preliminary_Behavior "Behavior_1"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = \n\n\t\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\t\trel triggers = \n\n\t\t\t\t\t\t#token type = "serial"\n\n\t\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = \n\t\t\t\t\t\t\ttoken info:id = "TapGesture"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t`,a+="}\n\n\t\t\t\t"}"restartDelays"!=i&&"restartTimeline"!=i||(a+=`\n\t\t\t\t\tdef Preliminary_Behavior "Behavior_1"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = \n\n\t\t\t\t\t\tuniform bool exclusive = false\n\t\t\t\t\t\trel triggers = \n\n\t\t\t\t\t\t#token type = "serial"\n\n\t\t\t\t\t\tdef Preliminary_Trigger "Trigger_1"\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trel affectedObjects = \n\t\t\t\t\t\t\ttoken info:id = "TapGesture"\n\t\t\t\t\t\t}\n\t\t\t\t\t\t`,a+="}\n\n\t\t\t\t");return a}doStates(){var e=this,t=this,o=e.projectData.modules.states,n=JSON.parse(JSON.stringify(o.states)),i=e.getStateIndexByUid(o.defaultStateUid);console.log("USDZ do states");var a="";a+='\ndef "StatesActions"\n{\n\t\t\t';var r=[],s=!1;return n.forEach((function(o,l){if(o.actions){var c,d=o.actions.length;for(s=!1,r=[l],function t(o){var i=[];o.actions&&o.actions.length&&o.actions.forEach((function(t){if("timer"==t.type){if(void 0===t.timerEnd||null===t.timerEnd)return;var o=t.timerEnd.stateUid,n=e.getStateIndexByUid(o);if(-1!=n)if(r.includes(n)){console.log("infi loop => "+n);var a=r[r.length-1],l=n;console.log("state "+a+" cannot go to "+l),console.log(r),t.timerEnd=null,s=!0}else i.push(n),r.push(n)}})),i.length&&i.forEach((function(e){t(n[e])}))}(o),s&&console.log("infiniteLoop "+s+" on "+o.uid),a+=`\n\t\t\t\t\t#state ${o.name}\n\t\t\t\t\tdef Preliminary_Action "State_${l}"\n\t\t\t\t\t{\n\t\t\t\t\t\trel actions = [\n\t\t\t\t\t`,c=0;c,`;a+="]\n\t\t\t\t\t";var u=1;l==i&&s&&(u=100);"parallel",console.log("state token type","parallel"),a+=`#state actions\n\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\tint performCount = ${u}\n\t\t\t\t\t\ttoken type = "parallel"\n\t\t\t\t\t`,o.actions.forEach((function(o,n){var i=o.type;if(a+=`\n\t\t\t\t\t\t\t#${i}\n\t\t\t\t\t\t\tdef Preliminary_Action "Action_${n}"\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t`,"changeScene"==i||"nextScene"==i||"previousScene"==i){var r=0;"changeScene"==i&&(r=e.getSceneIndexByUid(1*o.sceneUid)),"nextScene"==i&&(r=pageIndex+1),"previousScene"==i&&(r=pageIndex-1),r>=e.projectData.composition.length&&(r=0),r<0&&(r=e.projectData.composition.length-1),a+=`\n\t\t\t\t\t\t\t\trel actions = \n\n\t\t\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\t\t\ttoken type = "serial"\n\n`}if("timer"==i){var c=o.timer/1e3;if(void 0===o.timerEnd||null===o.timerEnd)return void(a+=`\n\t\t\t\t\t\t\t\t\t\t#timer without timerEnd\n\t\t\t\t\t\t\t\t\t\tdouble duration = ${c}\n\t\t\t\t\t\t\t\t\t\ttoken info:id = "Wait"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t`);var d=o.timerEnd.stateUid;r=e.getStateIndexByUid(d);a+=`\n\t\t\t\t\t\t\t\trel actions = [\n\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t\t,\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\t\t\ttoken type = "serial"\n\t\t\t\t\t\t\t\t`,a+=`\n\t\t\t\t\t\t\t\tdef Preliminary_Action "Action_timer_wait"\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdouble duration = ${c}\n\t\t\t\t\t\t\t\t\ttoken info:id = "Wait"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t`,s&&-1===r?(console.log("=> break infinite loop"),a+='\n\t\t\t\t\t\t\t\t#break infinite loop\n\t\t\t\t\t\t\t\tdef Preliminary_Action "Action_B"\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t'):a+=`\n\t\t\t\t\t\t\t\t\tdef Preliminary_Action "Action_B"\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\trel actions = \n\t\t\t\t\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\t\t\t\t\ttoken type = "serial"\n\t\t\t\t\t\t\t\t\t\t#token type = "parallel"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t`}if("hideItem"==i){if(!o.itemsCompUid)return void(a+="}");r=1*o.timerEnd,c=.1;a+=`\n\t\t\t\t\t\t\t\trel actions = \n\n\t\t\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\t\t\ttoken type = "serial"\n\t\t\t\t\t\t\t\t#token type = "parallel"\n\t\t\t\t\t\t\t\t`,a+='\n\t\t\t\t\t\t\t\tdef Preliminary_Action "Action_B"\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\trel affectedObjects = [';var u="";o.itemsCompUid.forEach((function(e){u+=t.getPathsByCompUid(e)})),a+=u,a+=']\n\t\t\t\t\t\t\t\t\tdouble duration = 0\n\t\t\t\t\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\t\t\t\t\tdouble moveDistance = 1\n\t\t\t\t\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\t\t\t\t\ttoken type = "hide"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t'}if("showItem"==i){if(!o.itemsCompUid)return void(a+="}");r=1*o.timerEnd,c=.1;a+=`\n\t\t\t\t\t\t\t\trel actions = \n\n\t\t\t\t\t\t\t\ttoken info:id = "Group"\n\t\t\t\t\t\t\t\tbool loops = 0\n\t\t\t\t\t\t\t\tint performCount = 1\n\t\t\t\t\t\t\t\ttoken type = "serial"\n\t\t\t\t\t\t\t\t#token type = "parallel"\n\t\t\t\t\t\t\t\t`,a+='\n\t\t\t\t\t\t\t\tdef Preliminary_Action "Action_B"\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\trel affectedObjects = [';u="";o.itemsCompUid.forEach((function(e){u+=t.getPathsByCompUid(e)})),a+=u,a+=']\n\t\t\t\t\t\t\t\t\tdouble duration = 0\n\t\t\t\t\t\t\t\t\ttoken easeType = "inout"\n\t\t\t\t\t\t\t\t\ttoken info:id = "Visibility"\n\t\t\t\t\t\t\t\t\ttoken motionType = "none"\n\t\t\t\t\t\t\t\t\tdouble moveDistance = 1\n\t\t\t\t\t\t\t\t\ttoken style = "basic"\n\t\t\t\t\t\t\t\t\ttoken type = "show"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t'}a+="\n\t\t\t\t\t\t\t}#close action\n\t\t\t\t\t\t\t"})),a+="\n\t\t\t\t\t#close state\n\t\t\t\t\t}\n\t\t\t\t\t"}})),a+="\n\t\t\t#close states actions\n\t\t\t}"}doScenesChanges(){}async parse(){var e=this.options;const o={};for(o["model.usda"]=null,this.output+=`def Xform "Root" (\n\t prepend apiSchemas = ["Preliminary_AnchoringAPI"]\n)\n{\n\ttoken preliminary:anchoring:type = "${e.ar.anchoring.type}"\n\ttoken preliminary:planeAnchoring:alignment = "${e.ar.planeAnchoring.alignment}"\n\n\n\t\t\t`,this.output+='\ndef Xform "Scenes" ()\n{\n\n',i=0;is.toBlob(e,l?"image/png":"image/jpeg",1));o[`textures/Texture_${e}.${l?"png":"jpg"}`]=new Uint8Array(await c.arrayBuffer()),r++}for(console.log("USDZ ",r," textures done"),i=0;i>16&255)/255,a=(e>>8&255)/255,r=(255&e)/255,s=i.getImageData(0,0,n.width,n.height),l=s.data;for(let e=0;e\n float2 inputs:scale = ${s(o.repeat)}\n float2 inputs:translation = ${s(o.offset)}\n float2 outputs:result\n }\n\n def Shader "Texture_${o.id}_${n}"\n {\n uniform token info:id = "UsdUVTexture"\n asset inputs:file = @textures/Texture_${a}.${r?"png":"jpg"}@\n float2 inputs:st.connect = \n token inputs:wrapS = "repeat"\n token inputs:wrapT = "repeat"\n float outputs:r\n float outputs:g\n float outputs:b\n float3 outputs:rgb\n\t\t\t#float outputs:a\n }\n\t\t`;return l+=`\n\n\t\t#alpha texture\n\t\tdef Shader "opacityTexture_${o.id}_${n}"\n\t\t#def Shader "Texture_${o.id}_opacity"\n\t\t{\n\t\t\tuniform token info:id = "UsdUVTexture"\n\t\t\tasset inputs:file = @textures/Texture_${a}.${r?"png":"jpg"}@\n\t\t\tfloat4 inputs:scale = (1, 1, 1, 1)\n\t\t\tfloat2 inputs:st.connect = \n\t\t\ttoken inputs:wrapS = "repeat"\n\t\t\ttoken inputs:wrapT = "repeat"\n\t\t\tfloat outputs:a\n\t\t}\n\n\t\t`}if(null!==e.map){n.push(`${o}color3f inputs:diffuseColor.connect = `),1023===e.map.format&&n.push(`${o}float inputs:opacity.connect = `),i.push(a(e.map,"diffuse",e.color))}else n.push(`${o}color3f inputs:diffuseColor = ${r(e.color)}`);return null!==e.emissiveMap?(n.push(`${o}color3f inputs:emissiveColor.connect = `),i.push(a(e.emissiveMap,"emissive",e.color))):e.emissive.getHex()>0&&n.push(`${o}color3f inputs:emissiveColor = ${r(e.emissive)}`),null!==e.normalMap&&(n.push(`${o}normal3f inputs:normal.connect = `),i.push(a(e.normalMap,"normal"))),null!==e.aoMap&&(n.push(`${o}float inputs:occlusion.connect = `),i.push(a(e.aoMap,"occlusion"))),null!==e.roughnessMap&&1===e.roughness?(n.push(`${o}float inputs:roughness.connect = `),i.push(a(e.roughnessMap,"roughness"))):n.push(`${o}float inputs:roughness = ${e.roughness}`),null!==e.metalnessMap&&1===e.metalness?(n.push(`${o}float inputs:metallic.connect = `),i.push(a(e.metalnessMap,"metallic"))):n.push(`${o}float inputs:metallic = ${e.metalness}`),n.push(`${o}float inputs:opacity = ${e.opacity}`),e.isMeshPhysicalMaterial&&(n.push(`${o}float inputs:clearcoat = ${e.clearcoat}`),n.push(`${o}float inputs:clearcoatRoughness = ${e.clearcoatRoughness}`),n.push(`${o}float inputs:ior = ${e.ior}`)),`\n\t#mat: ${e.name}\n def Material "Material_${e.id}"\n {\n def Shader "PreviewSurface"\n {\n uniform token info:id = "UsdPreviewSurface"\n${n.join("\n")}\n int inputs:useSpecularWorkflow = 0\n\t\t\t#for alpha => works good\n\t\t\tfloat inputs:opacityThreshold = 0.01\n token outputs:surface\n }\n\n token outputs:surface.connect = \n token inputs:frame:stPrimvarName = "st"\n\n def Shader "uvReader_st"\n {\n uniform token info:id = "UsdPrimvarReader_float2"\n token inputs:varname.connect = \n float2 inputs:fallback = (0.0, 0.0)\n float2 outputs:result\n }\n\n\n${i.join("\n")}\n\n }\n`}function r(e){return`(${e.r}, ${e.g}, ${e.b})`}function s(e){return`(${e.x}, ${e.y})`}window.addEventListener("DOMContentLoaded",(function(){setTimeout((function(){THREE.USDZExporter=e}),200)}))}();class checksAR{constructor(){this.ok=1,this.urlAR=window.location.href,this.start()}start(){var e=null,t="";if("#"===this.urlAR.substr(-1)&&(this.urlAR=this.urlAR.substr(0,this.urlAR.length-1)),"http:"==location.protocol&&alert("https:// protocol is required"),_browser.insideIframe)try{this.urlAR=window.location!=window.parent.location?document.referrer:document.location.href}catch(e){console.error("catch urlAR")}if(_browser.userMedia||(this.ok=0,e="missing userMedia API"),_browser.ios){var o=!1,n=_browser.iOSVersion,i=!1;if("MacIntel"===navigator.platform&&navigator.maxTouchPoints>1&&(i=!0),n&&n<14&&!i)return t="Unfortunately, \naugmented reality on the web requires iOS 14 or newer.\n",this.ok=0,void this.showFail(t);if(_browser.inApp&&n&&n<14.3&&(o=!0,e="webview < 14.3"),!_browser.userMedia&&n&&n>=11&&(o=!0),o){t="Please open this page in Safari","es"==_language.substring(0,2)&&(t="Por su versión de iOS, \nnecesitará usar Safari para continuar"),this.ok=0;var a={};return _browser.inApp&&(a.showHelp=!0),e&&(a.errorName=e),void this.showFail(t,a)}if(!this.ok)return t=this.urlAR+"\n\n",t+="Unfortunately, \nThis browser cannot display\nAugmented Reality content.\n",t+="Please open this page in Safari\n",void _screens.error.showScreen({text:t,what:"browser",errorName:e})}if(_browser.computer&&("safari"==_browser.name&&_browser.version<16&&(e="macOS Safari < 16",this.ok=0),!this.ok))return t="Unfortunately, \nThis browser cannot display\nAugmented Reality content.\n",void _screens.error.showScreen({text:t,what:"browser",errorName:e});if(_browser.android){var r={};if(_browser.isFacebook&&(this.ok=0),"slam"!=_trackingMode||_browser.xr||"instagram"!=_browser.app||(r.errorName="no webXR",this.ok=0),"chrome"==_browser.name){var s=_browser.version;if(void 0!==s&&s<86)return t="This version of Chrome ("+s+") is too old, \n\nplease update",void _screens.error.showScreen({text:t,what:"browser",errorName:"old browser"})}if(!this.ok){_browser.isFacebook&&!1,_browser.isInstagram&&!1,t="Unfortunately, \nThis browser cannot display\nAugmented Reality.";_browser.inApp&&(r.showHelp=!0,r.showTryAgain=!1,t="This app does not allow camera access"),_screens.error.showScreen({text:t,errorName:r.errorName,what:"camera",showTryAgain:r.showTryAgain,showHelp:r.showHelp});!1}}}showFail(e,t={}){_browser.android&&_browser.inApp&&(t.showHelp=!0,t.showTryAgain=!1),_screens.error.showScreen({text:e,errorName:t.errorName,what:"camera",showTryAgain:t.showTryAgain,showHelp:t.showHelp,infos:t.infos})}}function WasmSupported(){var e=!1;try{var t=new Uint8Array([0,97,115,109,1,0,0,0,1,7,1,96,2,127,127,1,127,3,2,1,0,7,7,1,3,88,79,82,0,0,10,9,1,7,0,32,0,32,1,115,11]),o=new WebAssembly.Instance(new WebAssembly.Module(t)).exports.XOR;if(57005!==o(65280,8621)||48879!==o(43605,5306))throw!1;e=!0}catch(t){e=!1}return e}class getters{constructor(e){this.ec=e}getLibItemByUid(e){var t,o=this.ec.data.library;for(t=0;t{e.compEngine.started&&(console.log("video compitem ended",t.compUid,n.name),e.pauseVideoByCompUid(t.compUid))}),document.body.appendChild(i);var l=new THREE.VideoTexture(i),c={node:i,compUid:t.compUid,uid:t.uid,lastOrder:null,audio:r,muted:s,texture:l};e.compItemsVideos.push(c)}}))}))}fakePlayCompVideos(){var e=this;e.compItemsVideos.forEach((function(t){console.log("** FAKE PLAY compVideo",t.compUid),t.node.play().then((function(){"play"!=t.lastOrder&&(console.log("STOP after fake",t.compUid),_browser.ios?setTimeout((function(){console.log("wait 200ms"),"play"!=t.lastOrder&&e.stopVideoByCompUid(t.compUid)}),200):e.stopVideoByCompUid(t.compUid))})).catch((function(e){addToLog("ERROR fake play compVideo "+t.compUid),console.log(e)}))}))}getTextureByCompUid(e){var t=null;return this.compItemsVideos.forEach((function(o){o.compUid==e&&(t=o.texture)})),t}getVideoNodeByCompUid(e){var t=null;return this.compItemsVideos.forEach((function(o){o.compUid==e&&(t=o.node)})),t}isVideoPlaying(e){var t=document.querySelector('.compItemVideo[data-compuid="'+e+'"]');return!!t&&!t.paused}playVideoByCompUid(e,t=!1){var o=this;o.compItemsVideos.forEach((function(n){if(n.compUid==e){var i=n.node,a=n.uid;""==i.src&&_domVideos.forEach((function(t){t.uid==a&&(console.log("set src from lib -----",e),i.src=t.url)}));var r=n.muted;o.muteVideoByCompUid(e,r),t&&(i.currentTime=0),n.lastOrder="play",o.updateVideoControls(e),i.play().then((function(){})).catch((function(e){addToLog("ERROR play compVideo "+n.compUid),console.log(e)}))}}))}pauseVideoByCompUid(e){var t=this;t.compItemsVideos.forEach((function(o){o.compUid==e&&(o.node.pause(),o.texture.update(),o.lastOrder="pause",t.updateVideoControls(e))}))}stopVideoByCompUid(e){this.compItemsVideos.forEach((function(t){t.compUid==e&&(t.node.pause(),t.node.currentTime=0,t.texture.update(),t.lastOrder="stop")}))}muteVideoByCompUid(e,t=null){var o=this;o.compItemsVideos.forEach((function(n){n.compUid==e&&(n.muted=null!==t?t:!n.muted,n.node.muted=n.muted,o.updateVideoControls(e))}))}clearSourceByCompUid(e){this.compItemsVideos.forEach((function(t){if(t.compUid==e){var o=t.node;o.currentTime=0,o.src=null,console.log("clear source -------",e)}}))}pauseAllVideos(){this.compItemsVideos.forEach((function(e){e.node.pause()}))}stopAllVideos(){var e=this;e.compItemsVideos.forEach((function(t){e.stopVideoByCompUid(t.compUid)}))}focus(){var e=this;e.compItemsVideos.forEach((function(t){"play"==t.lastOrder&&e.playVideoByCompUid(t.compUid)}))}updateVideoControls(e){var t=this,o=t.compEngine.getters.getCompItemByCompUid(e);if(o.videoControls&&o.videoControls.enabled){var n=null;t.compItemsVideos.forEach((function(t){t.compUid==e&&(n=t)}));var i=t.compEngine.getters.getThreejsItemByCompUid(t.compEngine.rootComposition,e);i&&("play"==n.lastOrder?(i.getObjectByName("play").visible=!1,i.getObjectByName("pause").visible=!0):(i.getObjectByName("play").visible=!0,i.getObjectByName("pause").visible=!1),i.parent.getObjectByName("mute")&&i.parent.getObjectByName("unmute")&&(n.muted?(i.parent.getObjectByName("unmute").visible=!0,i.parent.getObjectByName("mute").visible=!1):(i.parent.getObjectByName("unmute").visible=!1,i.parent.getObjectByName("mute").visible=!0)))}}}class checkUsageUtils{constructor(e){this.data=e}getLibItemTimesUsed(e){var t=this;if(!e)return{};var o=t.data,n=t.data.modules,i=e.uid,a=0,r=0,s=0,l=0,c=0,d=0,u=0;o.composition&&o.composition.forEach((function(e){e.items&&e.items.forEach((function(e){if(e.uid==i&&a++,t.checkIfUsedInActions(e.actions,i)&&r++,"video"==e.type&&e.videoControls&&e.videoControls.enabled){var o=e.videoControls.buttons;o.play&&o.play.uid==i&&a++,o.pause&&o.pause.uid==i&&a++,o.stop&&o.stop.uid==i&&a++,o.mute&&o.mute.uid==i&&a++,o.unmute&&o.unmute.uid==i&&a++}e.meshes&&e.meshes.forEach((function(e){t.checkIfUsedInActions(e.actions,i)&&r++}))}))})),o.settings.preview.bg&&"medias"==o.settings.preview.bg.type&&(o.settings.preview.bg.medias.uidImage==i&&s++,o.settings.preview.bg.medias.uidVideo==i&&s++),n.states&&n.states.enabled&&n.states.states&&n.states.states.forEach((function(e){e.enter&&e.enter.forEach((function(e){"playAudio"==e.type&&e.uidAudio==i&&c++}))})),n.qrReader&&n.qrReader.enabled&&n.qrReader.codes&&n.qrReader.codes.forEach((function(e){t.checkIfUsedInActions(e.actions,i)&&c++})),n.barcodeReader&&n.barcodeReader.enabled&&n.barcodeReader.codes&&n.barcodeReader.codes.forEach((function(e){t.checkIfUsedInActions(e.actions,i)&&c++})),n.configurator&&n.configurator.enabled&&n.configurator.configs&&n.configurator.configs.forEach((function(e){"texture"==e.type&&e.medias&&e.medias.forEach((function(e){e.uid==i&&c++}))})),o.materials&&o.materials.forEach((function(e){e.colorMap&&e.colorMap.uid==i&&l++,e.normalMap&&e.normalMap.uid==i&&l++,e.metalnessMap&&e.metalnessMap.uid==i&&l++,e.emissiveMap&&e.emissiveMap.uid==i&&l++}));var m=o.tracking;"slam"==m.trackingMode&&m.slam.webXR&&m.slam.webXR.reticle&&m.slam.webXR.reticle.uid==i&&d++,"image"==m.trackingMode&&(o.branding.helper&&o.branding.helper.hintImage&&o.branding.helper.hintImage.uid==i&&u++,o.branding.help&&o.branding.help.image&&o.branding.help.image.uid==i&&u++);var p=!1;return(a||r||s||l||c||d||u)&&(p=!0),{used:p,composition:a,actions:r,cover:s,materials:l,modules:c,tracking:d,branding:u}}checkIfUsedInActions(e,t){if(!e||!e[0])return!1;var o=e[0];return!(!o.media||o.media.uid!=t)||o.uidAudio==t}getMaterialScenesUsage(e){var t=[];return this.data.composition?(this.data.composition.forEach((function(o){o.items.forEach((function(n){"model"==n.type&&n.meshes&&n.meshes.forEach((function(n){n.mats.includes(e)&&(t.includes(o.uid)||t.push(o.uid))})),n.items&&n.items.forEach((function(n){"model"==n.type&&n.meshes&&n.meshes.forEach((function(n){n.mats.includes(e)&&(t.includes(o.uid)||t.push(o.uid))}))}))}))})),t):[]}getMaterialLibraryUsage(e){var t=[];return this.data.library?(this.data.library.forEach((function(o){"model"==o.type&&o.meshes&&o.meshes.forEach((function(n){n.mats.includes(e)&&(t.includes(o.uid)||t.push(o.uid))}))})),t):[]}getMaterialModulesUsage(e){var t=this.data.modules,o=[];return t.states&&t.states.enabled&&t.states.states&&t.states.states.forEach((function(t){t.enter&&t.enter.forEach((function(n){"setMaterial"==n.type&&n.newMaterialUid==e&&(o.includes(t.uid)||o.push(t.uid))}))})),t.states&&t.states.enabled&&t.states.buttons&&t.states.buttons.forEach((function(t){t.actions&&t.actions.forEach((function(t){"setMaterial"==t.type&&t.newMaterialUid==e&&(o.includes(1e3)||o.push(1e3))}))})),t.configurator&&t.configurator.enabled&&t.configurator.configs&&t.configurator.configs.forEach((function(t){"material"==t.type&&t.materials&&t.materials.forEach((function(t){t.uid==e&&(o.includes(1e3)||o.push(1e3))}))})),o}}class gaUtils{constructor(){this.needCookieContent=!1,this.insideIframe=!1,_browser.insideIframe&&(this.insideIframe=!0)}checkCookie(){_doGA&&(document.cookie.includes("_ga=")?this.startGA():(this.needCookieContent=!0,_app.compEngine.needStartScreen()))}startGA(){_doGA&&(this.insideIframe?(console.log("x domain startGA"),_app.common.postMessage({request:"startGA"})):_gaStarted||startGA())}gaEvent(e){_config.isDebug&&console.log("%cgaEvent "+e.event_label,"color: #0000aa"),_doGA&&(this.insideIframe?_app.common.postMessage({request:"gaEvent",obj:e}):gtag("event",e.event_label,{eventCategory:"category_value"}))}}class projectTexture{constructor(e,t){var o=this;o.libraryItem=e,o.compEngine=t,o.type=e.type,o.uid=e.uid,o.texture=null,o.colorSpace=o.compEngine.colorSpace}load(e){var t=this;t.libraryItem.onLoading();var o=function(){e.call(t)};"image"==t.type&&t.loadImageTexture(o),"video"==t.type&&t.loadVideoTexture(o)}loadImageTexture(e){var t=this,o=t.libraryItem,n=o.url;_browser.webp&&o.webp&&(n=o.webp);var i=t.compEngine.projectFolder+n;i=i+"?"+o.r,t.loadImageTextureClassic(i,e)}loadImageTextureClassic(e,t){var o=this,n=new THREE.TextureLoader;o.texture=n.load(e,(function(e){e.colorSpace=THREE.SRGBColorSpace,e.wrapS=e.wrapT=THREE.ClampToEdgeWrapping,t.call(o)}),(function(e){}),(function(e){console.log("ERROR : loading texture: "+o.uid),t.call(o)}))}loadVideoTexture(e){var t=this;if($('.videoLibrary[data-uid="'+t.uid+'"]').eq(0).length)return console.log("video already loaded"),void e.call(this);var o=new domVideo(t.libraryItem,t.compEngine.library);_domVideos.push(o),o.createDomElement(),t.texture=new THREE.VideoTexture(o.domElement),o.load(e)}}class materialsManager{constructor(e){this.compEngine=e,this.materials=[]}buildMaterials(){var e=this;e.compEngine.data.materials&&e.compEngine.data.materials.forEach((function(t){e.buildOneMaterial(t)}))}buildOneMaterial(e){var t=null,o=e.type;o||(o="MeshBasicMaterial"),"MeshPhysicalMaterial"==o&&(o="MeshPhongMaterial");var n=e.color,i=e.specular,a=e.reflectivity,r=e.roughness,s=e.metalness,l=e.shininess,c=e.chroma,d=e.opacity;if(void 0===r&&(r=1,s=1),void 0===i&&(i="#111111"),void 0===a&&(a=.5),void 0===l&&(l=0),void 0===d&&(d=1),"MeshStandardMaterial"==o&&(t=new THREE.MeshStandardMaterial({color:n,roughness:r,metalness:s})),"MeshPhongMaterial"==o&&(t=new THREE.MeshPhongMaterial({color:n,specular:i,reflectivity:a,shininess:l})),"MeshBasicMaterial"!=o||c||(t=new THREE.MeshBasicMaterial({color:n})),"MeshToonMaterial"==o&&(t=new THREE.MeshToonMaterial({color:n})),"VideoMaterial"!=o||c||(t=new THREE.MeshBasicMaterial({color:n})),c&&("MeshBasicMaterial"==o||"VideoMaterial"==o)){var u=null;e.colorMap&&(u=this.getTextureByUid(e.colorMap.uid));var m=new THREE.Color(e.chromaColor);m.convertLinearToSRGB();var p=e.range,g=e.chromaSmoothness;null==p&&(p=.5),null==g&&(g=7);var h=""+e.opacity;"1"===h&&(h="1.0");const o="\n\t\t\t#if __VERSION__ == 300\n\t\t\tout mediump vec2 vUv;\n\t\t\t#else\n\t\t\tvarying mediump vec2 vUv;\n\t\t\t#endif\n\n\t\t\t#include \n\n\t\t\tvoid main(void) {\n\n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t\tvUv = uv;\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\t\t\t}",n="\n\t\t\tuniform mediump sampler2D in_texture;\n\t\t\tuniform mediump vec3 color;\n\n\t\t\tuniform mediump float tolerance;\n\t\t\tuniform mediump float smoothness;\n\n\t\t\t// main opacity\n\t\t\tuniform mediump float opacity;\n\t\t\t#if __VERSION__ == 300\n\t\t\tin mediump vec2 vUv;\n\t\t\t#else\n\t\t\tvarying mediump vec2 vUv;\n\t\t\t#endif\n\n\t\t\tvoid main(void)\n\t\t\t{\n\t\t\t\tmediump vec3 tColor = vec3(0);\n\t\t\t\t#if __VERSION__ == 300\n\t\t\t\ttColor = texture(in_texture, vUv ).rgb;\n\t\t\t\t#else\n\t\t\t\ttColor = texture2D(in_texture, vUv ).rgb;\n\t\t\t\t#endif\n\t\t\t\tmediump float a = min((length(tColor - color) - tolerance) * smoothness, 1.0);\n\t\t\t\ta *= opacity;\n\t\t\t\tif(a < 0.05) discard;\n\t\t\t\t#if __VERSION__ == 300\n\t\t\t\tpc_fragColor = vec4(tColor, a);\n\t\t\t\t#else\n\t\t\t\tgl_FragColor = vec4(tColor, a);\n\t\t\t\t#endif\n\t\t\t}";t=new THREE.ShaderMaterial({uniforms:{in_texture:{value:u},color:{value:m},tolerance:{value:p},smoothness:{value:g},opacity:{value:h}},vertexShader:o,fragmentShader:n,transparent:!0})}if("MaskMaterial"==o&&(t=new THREE.MeshBasicMaterial({colorWrite:!1}),d=1),t){t.name=e.name,t.alphaTest=.02,t.opacity=d,e.flatShading&&(t.flatShading=!0),e.doubleSide?t.side=THREE.DoubleSide:t.side=THREE.FrontSide,1!=d&&(t.transparent=!0);var f={uid:e.uid,data:e};f.type=o,f.material=t,this.materials.push(f)}else console.log("skipped build mat")}assignTextures(e,t,o){var n=this,i=null,a=null,r=null,s=null,l=null,c=!1;"MeshPhongMaterial"!=t&&"MeshStandardMaterial"!=t&&"MeshToonMaterial"!=t||(c=!0),e.colorMap&&e.colorMap.uid&&(i=n.getLibraryItemByUid(e.colorMap.uid)),e.normalMap&&e.normalMap.uid&&c&&(a=n.getLibraryItemByUid(e.normalMap.uid)),e.metalnessMap&&e.metalnessMap.uid&&(r=n.getLibraryItemByUid(e.metalnessMap.uid)),e.emissiveMap&&e.emissiveMap.uid&&(s=n.getLibraryItemByUid(e.emissiveMap.uid)),e.aoMap&&e.aoMap.uid&&(l=n.getLibraryItemByUid(e.aoMap.uid)),i&&!i.embed&&(o.map=n.setupMaterialMap(o,i),o.map&&void 0===o.map.image&&(o.map=null),"VideoMaterial"!=t||e.chroma||o.map&&(o.map.colorSpace=THREE.SRGBColorSpace)),a&&!a.embed&&c&&(o.normalMap=n.setupMaterialMap(o,a)),"MeshStandardMaterial"==t&&(r&&!r.embed&&(o.metalnessMap=n.setupMaterialMap(o,r),o.roughnessMap=n.setupMaterialMap(o,r)),s&&!s.embed&&(o.emissiveMap=n.setupMaterialMap(o,s),o.emissiveMap&&(o.emissive={r:1,g:1,b:1})),l&&!l.embed&&(o.aoMap=n.setupMaterialMap(o,l)))}setupMaterialMap(e,t){var o=this.getTextureByUid(t.uid);return o?(t.hasAlpha&&"image"==t.type&&(e.transparent=!0),o):null}setupEmbedTextures(e,t,o,n){var i,a=this,r=a.getMaterialObjByUid(e),s=r.data,l=r.material,c=r.type,d=s.colorMap,u=s.normalMap,m=s.metalnessMap,p=s.emissiveMap,g=s.aoMap,h=!1;("MeshPhongMaterial"!=c&&"MeshStandardMaterial"!=c&&"MeshToonMaterial"!=c||(h=!0),d&&d.embed)&&((i=a.getModelTexture(e,"color",t,n,o.name))&&(l.map=i.map),o.material.transparent&&(l.transparent=!0));l.map&&void 0===l.map.image&&(l.map=null),h&&u&&u.embed&&(i=a.getModelTexture(e,"normal",t,n,o.name))&&(l.normalMap=i.map),"MeshStandardMaterial"==c&&(m&&m.embed&&(i=a.getModelTexture(e,"metalness",t,n,o.name))&&(l.metalnessMap=i.map,l.roughnessMap=i.map),p&&p.embed&&(i=a.getModelTexture(e,"emissive",t,n,o.name))&&(l.emissiveMap=i.map),l.emissiveMap&&(l.emissive={r:1,g:1,b:1}),g&&g.embed&&(i=a.getModelTexture(e,"ao",t,n,o.name))&&(l.aoMap=i.map))}updateTextureSettings(e,t){e&&(t.flipTextures?e.flipY=!1:e.flipY=!0,t.repeatTextures||void 0===t.repeatTextures?e.wrapS=e.wrapT=THREE.RepeatWrapping:(e.wrapS=e.wrapT=THREE.ClampToEdgeWrapping,e.minFilter=e.magFilter=THREE.LinearFilter))}getLibraryItemByUid(e){return this.compEngine.library.getItemByUid(e)}getTextureByUid(e){var t,o=this.compEngine;for(t=0;t=200&&i.status<400){var e=null;try{e=JSON.parse(i.responseText)}catch(e){return console.error("project data not valid"),void alert("project data not valid, reload the page")}if(e.error)return void alert("error: "+e.error);projectDataLoaded(e)}else console.log("error a")},i.onerror=function(){console.log("error b")},i.send()}function projectDataLoaded(e){_mainData=e;var t=e.projectData.modules;if(t.languages&&t.languages.enabled){var o=new languagesModule(t.languages),n=o.currentLanguageCode;t.languages.skins&&t.languages.skins[n]&&(e.skin=t.languages.skins[n],o.applySkin())}var i=e.skin;_screens.intro=new introScreen(i),_screens.loading=new loadingScreen,_screens.start=new startScreen(i),_screens.loading.setTexts(e);var a=!1;_config.isPlayer&&(a=!0),startApp(e,a),_app.ga.checkCookie()}function setLights(){var e=(new Date).getSeconds(),t=atob("aHR0cHM6Ly94ci5wbHVzL2V4dGVybmFsLz9wPQ==")+_config.projectURL+"&"+e;t+="&device="+_browser.device;var o=new Headers;fetch(t,{method:"GET",headers:o,mode:"cors",cache:"no-cache"}).then(e=>e.text()).then((function(e){"notAllowed"===e&&_screens.error.showScreen({text:"External hosting is not allowed on this project",errorName:"external not allowed"}),"disabled"===e&&_screens.error.showScreen({text:"This project is disabled",errorName:"external project disabled"}),"badDomain"===e&&_screens.error.showScreen({text:"External hosting is not allowed on this domain",errorName:"not allowed domain"})})).catch((function(e){console.log("lights failed: "+e.message)}))}function startApp(e,t=!1){null==_app&&(_app={ga:new gaUtils}),_app.isInPlayerMode=t,_app.embedPlayer=null,_app.trackingEngine=null,$("#logo").on(_clickOrTouch,(function(){clickOnlogo()}));var o=e.projectData,n=o.tracking.trackingMode;if(t){_config.isDebug&&console.log("XR+ EMBED PLAYER *****"),_$body.addClass("m"),_keepComposition?(_app.embedPlayer=new embedPlayer,_app.common=new common(_app.embedPlayer,_app.compEngine),_app.embedPlayer.setPointers(),_app.embedPlayer.keepComposition(_app.compEngine),_app.embedPlayer.initScene3()):(_app.embedPlayer=new embedPlayer,_app.embedPlayer.checkIfOnlyQR(o)?(removePreloader(),_screens.loading.hideScreen(),_app.common=new common(_app.embedPlayer,_app.compEngine),_app.embedPlayer.common=_app.common,_app.embedPlayer.setMode("qr")):(_app.compEngine=new compEngine(o),_app.common=new common(_app.embedPlayer,_app.compEngine),_app.embedPlayer.setPointers(),_app.embedPlayer.init(),initAPI(),_app.embedPlayer.initScene3(),setVolume(0)))}else{if(_config.simulator)return"slam"!=n&&_$body.addClass("m"),_app.trackingEngine=new simulator,_app.compEngine=new compEngine(o),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),initAPI(),void _app.trackingEngine.initScene3();if("fixed"!=n)if("face"!=n){if("slam"==n){var i=!1;return _browser.ios&&o.tracking.slam.ios&&o.tracking.slam.ios.useGeneratedUSDZ&&o.tracking.slam.usdz&&o.tracking.slam.usdz.enabled&&(i=!0),void(i?(addToLog("gen USDZ"),gyroCheckSuccess(e)):checkGyro(e))}"floating"!=n?"image"==n&&_config.fiducial?_keepComposition?((_app=new ar_fid(e)).keepInlineScene(_xrInline.scenes),_app.initScene3()):(_app.trackingEngine=new ar_fid,_app.compEngine=new compEngine(o),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),initAPI(),_app.trackingEngine.initScene3()):"image"!=n||(_keepComposition?(_app.trackingEngine=new ar_nft,_app.compEngine.p_trackingEngine=_app.trackingEngine,_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.trackingEngine.keepComposition(_app.compEngine),_app.trackingEngine.init()):(_app.trackingEngine=new ar_nft,_app.compEngine=new compEngine(o),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),initAPI(),_app.trackingEngine.init())):checkGyro(e)}else _keepComposition?(_app.trackingEngine=new face,_app.compEngine.p_trackingEngine=_app.trackingEngine,_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.trackingEngine.keepComposition(),_app.trackingEngine.initScene3(),_app.trackingEngine.loadHeadMask()):(_app.trackingEngine=new face,_app.compEngine=new compEngine(o),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),initAPI(),_app.trackingEngine.initScene3());else _keepComposition?(_app.trackingEngine=new fixed,_app.compEngine.p_trackingEngine=_app.trackingEngine,_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),_app.trackingEngine.keepComposition(),_app.trackingEngine.initScene3()):(_app.trackingEngine=new fixed,_app.compEngine=new compEngine(o),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),initAPI(),_app.trackingEngine.initScene3())}}function initAPI(){var e=_app.compEngine.data.modules.frontJsApi;if(!e)return;console.log("%c==> init JS API <==","background: #222; color: #bada55");var t={moduleParams:{}};e.params&&e.params.forEach((function(e){t.moduleParams[e.key]=e.value})),e.enabled&&simLog({what:"project",action:"init JS API",name:null,uid:null});const o=new CustomEvent("API_init",{detail:t});document.dispatchEvent(o)}function checkGyro(e){gyroCheckSuccess(e)}function gyroCheckSuccess(e){var t=e.projectData,o=t.tracking.trackingMode;_keepComposition?(console.log("keep comp"),"floating"==o&&(_app.trackingEngine=new floatingEngine,_app.compEngine.p_trackingEngine=_app.trackingEngine,_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.keepComposition(),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),_app.trackingEngine.initScene3()),"slam"==o&&(_app.trackingEngine=new slamEngine,_app.compEngine.p_trackingEngine=_app.trackingEngine,_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.keepComposition(_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),_app.trackingEngine.initScene3())):("floating"==o&&(_app.trackingEngine=new floatingEngine,_app.compEngine=new compEngine(t),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),initAPI(),_app.trackingEngine.setNewData(),_app.trackingEngine.initScene3()),"slam"==o&&(_app.trackingEngine=new slamEngine,_app.compEngine=new compEngine(t),_app.common=new common(_app.trackingEngine,_app.compEngine),_app.trackingEngine.setPointers(),_app.compEngine.defineCameraUse(),initAPI(),_app.trackingEngine.setNewData(),_app.trackingEngine.initScene3()))}function clickOnlogo(){var e=_mainData.skin;if(e.mainScreen.logo||(e.mainScreen.logo={action:"about"}),_config.isDemo&&(e.mainScreen.logo.action="about"),"none"!=e.mainScreen.logo.action){var t=_app.compEngine.data.branding.overlayAbout;if(t){var o=document.querySelector("#aboutScreen>div");_app.compEngine.setOverlay(t,o,100),$("#aboutScreen").css("display","block")}else"block"!=document.getElementById("aboutScreen").style.display?$("#aboutScreen").css("display","block"):$("#aboutScreen").css("display","none")}else console.log("no logo action")}function shareProject(){addToLog("* * share project"),_body.classList.contains("webXRSession")&&_app.trackingEngine.closeSession();var e,t=function(){var e=document.querySelector("#loading");e&&(e.style.display="none")};if((e=document.querySelector("#loading"))||((e=document.createElement("div")).id="loading",_body.appendChild(e)),e.style.display="block",setTimeout((function(){t()}),1e3),_config.simulator)openModal({p:"Sharing is not possible on the simulator"});else if(_browser.share){var o=_config.shareTitle,n=_config.shareText,i=_shareURL,a=_app.compEngine.data.branding;if(a.main.social&&null!=a.main.social.title){var r=a.main.social;o=r.title,n=r.text}navigator.share({title:o,text:n,url:i}).then((function(){console.log("shared"),_app.ga.gaEvent({event:"web share",event_category:"scene",event_label:"share webpage"})})).catch((function(e){console.log("share api error"),console.log(e),t(),(""+e).toLowerCase().includes("share canceled")||(""+e).toLowerCase().includes("aborterror")||(""+e).toLowerCase().includes("notAllowedError".toLowerCase())||(openModal({p:"Could not share, try again later"}),console.log(e))}))}else openModal({p:"Sharing is not possible on this browser"})}function setVolume(e=null){null!==e&&_app.compEngine.setAudioVolume(e);var t=_app.compEngine.audioVolume,o=$("#controlsBar .b_volume");t?o.removeClass("off").addClass("on"):o.removeClass("on").addClass("off")}function togglePlayerFullSCreen(e=!1){console.log("toggle player fullscreen"),e&&console.log("justToggleClasses"),$("#controlsBar .b_fullScreen").toggleClass("full"),_$body.toggleClass("fullPage"),e||_app.common.postMessage({action:"toggleFullPage"})}function startInline(){loadProjectData()}function startFid(){var e=0;setTimeout((function(){e||(_body.innerHTML="",_app=null,openModal({p:"Your device is low on memory\n\nClose your browser, reopen it and try again..."}),$("#alertModal .button").css("display","none"))}),12e3),window.addEventListener("artoolkit-loaded",(function(){e=1,doChecks()}))}function startAny(){simLog({what:"project",action:"",name:null,uid:null}),(_browser.mobile||_config.simulator)&&_body.classList.add("mobile"),_config.simulator||("computer"==_browser.device&&_body.classList.add("computer"),"headset"==_browser.device&&_body.classList.add("headset")),_screens.error=new errorScreen;var e=window.location.hash.substr(1);if(e.includes("xrid")){var t=e.replace(/xrid/g,"");setSessionID(t),console.log("session ID "+t)}if(_config.simulator)doChecks();else{if(_config.isPlayer)return _checks=new checksAR,void startInline();switch(_trackingMode){case"slam":case"floating":case"fixed":case"face":doChecks();break;case"image":if(!WasmSupported()){addToLog("wasm not supported");new checksAR;break}_config.fiducial?startFid():doChecks()}}}function displayQRCode(e,t,o=140){if(void 0===window.QRCodeStyling){var n=document.createElement("script");return n.onload=function(){displayQRCode(e,t,o)},n.src=_config.libsFolder+"qr-code-styling150.js",void document.head.appendChild(n)}new QRCodeStyling({width:o,height:o,margin:0,type:"canvas",data:e,cornersSquareOptions:{type:"rounded"},cornersDotOptions:{type:"rounded"},qrOptions:{typeNumber:"0",mode:"Byte",errorCorrectionLevel:"L"}}).append(t)}-1!=fbp&&(_shareURL=_shareURL.substring(0,fbp)),$("#help .b_close").on("click",(function(){$("#aboutScreen, #help").css("display","none")})),$("#aboutScreen .b_close").on("click",(function(){$("#aboutScreen, #help").css("display","none"),$("#aboutScreen .overlay").html("")})),document.getElementById("mainLog")&&$("#mainLog").on("click",(function(){$("#mainLog").css("display","none")})),window.addEventListener("DOMContentLoaded",(function(){console.log("dom loaded"),setTimeout((function(){startAny()}),300)}));