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,a,n,i,r=function(e){t.deviceOrientation=e},s=function(){t.screenOrientation=window.orientation||0},l=(o=new THREE.Vector3(0,0,1),a=new THREE.Euler,n=new THREE.Quaternion,i=new THREE.Quaternion(-Math.sqrt(.5),0,0,Math.sqrt(.5)),function(e,t,r,s,l){a.set(r,t,-s,"YXZ"),e.setFromEuler(a),e.multiply(i),e.multiply(n.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,a=e.beta?THREE.MathUtils.degToRad(e.beta):0,n=e.gamma?THREE.MathUtils.degToRad(e.gamma):0,i=t.screenOrientation?THREE.MathUtils.degToRad(t.screenOrientation):0;l(t.object.quaternion,o,a,n,i)}}},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 a=o.domVideo;a.autoplay=!0,a.playsInline=!0,a.muted=!0,a.style.zIndex="-1";var n={audio:!1,video:{facingMode:{exact:o.facingMode}}};if(_browser.computer){n={};var i=navigator.mediaDevices.getSupportedConstraints(),r=!0;i.facingMode&&(r={width:{ideal:o.idealWidth},height:{ideal:o.idealHeight},facingMode:{ideal:o.facingMode}}),n.video=r,i.audio&&(n.audio=!1)}else o.idealWidth&&o.idealHeight&&(n.video.width={min:640,ideal:o.idealWidth,max:1280},n.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:n});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(n).then((function(a){_config.isDebug&&console.log("-> success getUserMedia: ok");var n=o.domVideo;if(n.srcObject=a,o.stream=a,_config.isDebug&&!_browser.computer){let{width:e,height:t}=a.getTracks()[0].getSettings();(e<720||t<720)&&alert("error resolution "+e+"x"+t)}const i=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);n.play().then((function(){clearTimeout(i),n.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,a=t.canvasBlit.height;t.ctxBlit.drawImage(e,0,0,o,a)}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),ta&&(a=o),a*=1.01;var n=e.domVideo.videoWidth/e.domVideo.videoHeight,i=a,r=a/n;n>=e.camera.aspect&&(r=a,i=a*n),e.planeVideo.scale.set(i,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,a=t.y-e.y,n=t.z-e.z;return Math.sqrt(o*o+a*a+n*n)}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 a=_app.compEngine.scene3,n=" <"+a.type+"> "+a.name;function i(a){var n=" <"+a.type+"> "+a.name;e&&(n+=" P "+JSON.stringify(a.position).replaceAll('"',"")),t&&(n+=" R "+JSON.stringify(a.rotation).replaceAll('"',"")),o&&(n+=" S "+a.scale.x),a.visible||(n+=" hidden"),a.isMesh?(a.geometry&&a.geometry.groups&&a.geometry.groups.length>1&&(n+=" geo groups x "+a.geometry.groups.length),console.group("%c"+n,"color: green;")):console.group(n),"dotsGrid"!=a.name&&"transformControls"!=a.name&&a.children.forEach(e=>i(e)),console.groupEnd()}console.group(n),a.children.forEach(e=>i(e)),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 a=document.createElement("div");a.id="bgModal";var n=document.createElement("div");n.id="alertModal",e.class&&n.classList.add(e.class);var i=document.createElement("div");i.className="text",n.appendChild(i);var r,s,l=e.h2,d=e.p,c=e.image,u=e.video;l&&""!=l&&((s=document.createElement("h2")).innerText=l,i.appendChild(s),n.classList.add("h2"));c&&(r=(r=(r=c.url).replace(/script/gi,"")).replace(/fromCharCode/gi,""),(s=document.createElement("img")).src=r,i.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,i.appendChild(s));d&&""!=d&&((s=document.createElement("p")).innerText=d,"left"==e.textalign&&(s.style.textAlign="left"),i.appendChild(s),n.classList.add("p"));e.buttons&&((s=document.createElement("div")).className="buttons",n.appendChild(s));a.appendChild(n),document.body.appendChild(a);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",n.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+"",n.querySelector(".buttons").innerHTML=g,$("#alertModal .button.ok, #alertModal .button.yes").on("click",(function(){m(t)})),$("#alertModal .button.no").on("click",(function(){m(o)}))}else n.classList.add("noButtons");if(e.titleColor&&n.querySelector("h2")&&(n.querySelector("h2").style.color=e.titleColor),e.textColor&&n.querySelector("p")&&(n.querySelector("p").style.color=e.textColor),e.bgColor){n.style.backgroundColor=e.bgColor;var h=e.bgColor.substring(1),v=parseInt(h,16);.21*(v>>16&255)+.71*(v>>8&255)+.07*(v>>0&255)<100&&p&&(p.className+=" white")}n.setAttribute("tabindex","0"),n.focus(),n.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 a,n,i=o.compEngine.data.composition;for(a=0;ao.maxBackgroundFileSize)return}var r=!1;if(o.assetsLoadingQueue.forEach((function(e){e.uid==i.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 a=o,n=16,i=e/2-a,r=t/2-a,s=e/2,l=t/2,d=a/e,c=(e-a)/e,u=a/t,m=(t-a)/t;let p,g,h,v,f,y=[-i,-l,0,i,-l,0,i,l,0,-i,-l,0,i,l,0,-i,l,0,-s,-r,0,-i,-r,0,-i,r,0,-s,-r,0,-i,r,0,-s,r,0,i,-r,0,s,-r,0,s,r,0,i,-r,0,s,r,0,i,r,0],E=[d,0,c,0,c,1,d,0,c,1,d,1,0,u,d,u,d,m,0,u,d,m,0,m,c,u,1,u,1,m,c,u,1,m,c,m],b=0;for(let e=0;e<64;e++)p=2*Math.PI*(e+1)/64,g=e=48?i:-i,h=e<32?r:-r,y.push(g,h,0,g+a*Math.cos(b),h+a*Math.sin(b),0,g+a*Math.cos(p),h+a*Math.sin(p),0),v=g=e=48?c:d,f=e<32?m:u,E.push(v,f,v+d*Math.cos(b),f+u*Math.sin(b),v+d*Math.cos(p),f+u*Math.sin(p)),b=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(E),2)),w}}class textItem{constructor(e,t){this.item=e,this.fonts=t}getMeshes(){var e=this.item,t=null,o=this.getFont(e.font);const a=cleanString(e.text).split("\n");var n=!1,i=!1,r=.1,s=e.lineHeight/10,l=[];a.forEach((function(t,r){1==a.length&&t.length&&(32===t.charCodeAt(0)&&(n=!0),32===t.charCodeAt(t.length-1)&&(i=!0));var d=new THREE.TextGeometry(t,{font:o,size:.2,height:0,curveSegments:4,bevelEnabled:!1});if("center"==e.align&&d.center(),"right"==e.align){d.computeBoundingBox();const e=d.boundingBox;var c=e.max.x-e.min.x;d.translate(-1*c,0,0)}d.translate(0,-1*s*r,0),l.push(d)}));var d=THREE.BufferGeometryUtils.mergeGeometries(l,!0);d.center(),d.rotateX(Math.PI/-2);var c=new THREE.Mesh(d,t);c.name="meshText",c.userData.isTextChild=!0;var u=null;d.computeBoundingBox();var m=d.boundingBox,p=0;n&&(m.min.x-=r,p+=-.05),i&&(m.max.x+=r,p+=.05);var g=m.max.x-m.min.x+.025,h=m.max.z-m.min.z,v=0;if(e.background.enabled){v=e.background.corner;var f=.025*e.background.padding,y=new RoundedPlaneGeometry(g+2*f,h+2*f,v/20);y.rotateX(Math.PI/-2),y.translate(p,-.005,0),(u=new THREE.Mesh(y,t)).name="meshBack",u.userData.isTextChild=!0}var E=new RoundedPlaneGeometry(g+2*(f=0),h+2*f,v/20);E.rotateX(Math.PI/-2),E.translate(p,-.005,0);var b=new THREE.Mesh(E,t);return b.add(c),u&&b.add(u),b.name=e.name,b.uid=e.uid,b.isMedia=!0,b}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 a=new THREE.Mesh(t,null);return a.name=e.name,a.isMedia=!0,a}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,a){let n=.5*e,i=.5*t,r=.5*o,s=[n,i-a,-r+a,n,-i+a,-r+a,n,-i+a,r-a,n,i-a,r-a,n-a,i-a,r,n-a,-i+a,r,-n+a,-i+a,r,-n+a,i-a,r,-n,i-a,r-a,-n,-i+a,r-a,-n,-i+a,-r+a,-n,i-a,-r+a,-n+a,i-a,-r,-n+a,-i+a,-r,n-a,-i+a,-r,n-a,i-a,-r,n-a,i,-r+a,n-a,i,r-a,-n+a,i,r-a,-n+a,i,-r+a,n-a,-i,-r+a,n-a,-i,r-a,-n+a,-i,r-a,-n+a,-i,-r+a],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),a=t.sounds.length;if("positional"==e.item.audio.type){var n=e.itemMaxDistance*e.scaleFactor*e.worldScale;e.item.audio.focused&&(n=e.itemMaxDistance*e.scaleFactor*e.worldScale/10),e.currentSoundMaxDistance=n,t.sounds[a]=new THREE.PositionalAudio(t.audioListener),t.sounds[a].setMaxDistance(n),t.sounds[a].setRefDistance(n/5),t.sounds[a].setDistanceModel("linear")}else t.sounds[a]=new THREE.Audio(t.audioListener);e.audio=t.sounds[a],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 a=new THREE.RingGeometry(.9,1,32);return a.rotateX(Math.PI/-2),a.scale(.1,1,.1),e.mesh=new THREE.Mesh(a,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})],a=new THREE.CircleGeometry(.1,32);a.translate(0,0,-.005),a.rotateX(Math.PI/-2);var n=[a,t],i=THREE.BufferGeometryUtils.mergeGeometries(n,!0);(i=i.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 n=[r.geometry,t],i=THREE.BufferGeometryUtils.mergeGeometries(n,!1);(a=a.toNonIndexed()).deleteAttribute("uv");var s=[i,a],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),a=(new THREE.BufferGeometry).setFromPoints(t),n=(new THREE.BufferGeometry).setFromPoints(t);return a.rotateX(Math.PI/2),n.rotateY(Math.PI/2),THREE.BufferGeometryUtils.mergeGeometries([o,a,n],!0)}addDistanceSphere(){var e=this,t=e.item.audio.distance*e.scaleFactor,o=e.getSphereGeometry(t),a=new THREE.LineBasicMaterial({color:e.color});e.maxDistanceSphere=new THREE.LineSegments(o,a),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),a=new THREE.LineBasicMaterial({color:e.colorFocus});e.focusSphere=new THREE.LineSegments(o,a),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 a=!1,n=t.item.audio.distance*t.scaleFactor*t.worldScale/10,i=new THREE.Sphere(t.audio_wp,n);t.frustum.intersectsSphere(i)&&(a=!0),t.isInCameraView=a;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 a=1*o.get("scene");isNaN(a)||(e.startSceneIndex=a-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,a=[...new Set(t)];a.includes("cardo")&&((o=document.createElement("style")).innerHTML="@import url('https://fonts.googleapis.com/css2?family=Cardo&display=swap');",document.getElementsByTagName("head")[0].appendChild(o));a.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));a.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 a=new THREE.Mesh(t,o);a.name="debug root",e.cameraTargetHook.add(a),_config.isDebug||(a.visible=!1);const n=new THREE.BoxGeometry(4,4,4),i=new THREE.MeshNormalMaterial({opacity:.6,transparent:!0});e.cameraTarget=new THREE.Mesh(n,i),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 a=this;addToLog("---\x3e setActive | st "+e+" mv "+t+" vi "+o),a.scenesNavigation&&a.scenesNavigation.show();var n=!1;if("image"==a.trackingMode&&(n=!0,a.markerRoot&&(n=!1,a.markerRoot.visible&&(n=!0),a.settings.keepVisible&&!a.markerNeverFound&&(n=!0))),(t||o||n)&&(addToLog("---\x3e set comp active -> play videos + audio"),a.currentCompScene.playSceneVideos(),a.currentCompScene.playSceneAudios()),!a.isInline&&"image"==a.trackingMode&&t){a.foundMarker(0,0)}if(t){console.log("timeline zero on set active");var i=a.currentScene;a.timeline.changeScene(i)}e&&a.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 a=this;if(!_config.simulator){if(addToLog("- - - FOUND marker "+t),a.markerNeverFound){var n=a.currentScene;a.timeline.changeScene(n),o&&a.applyDefaultState()}else if(e&&o){var i=a.modulesEngine.modulesData.states;i&&i.enabled&&i.revertTime&&i.revertTime2)&&_app.ga.gaEvent({event:"scan marker",event_category:"scene",event_label:"scan marker"}),a.markerNeverFound=!1,a.modules.frontJsApi&&a.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,a,n,i=t.currentScene;if(i.useCubeMap&&i.cubeMap){var r,s=i.cubeMap,l=[];for(r=0;r<6;r++){var d=t.modulesEngine.virtualTourModule.getTextureByUidAndIndex(s,r);d||console.log("error cubemap texture"),l[r]=new THREE.MeshBasicMaterial({map:d,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,a=e.modules.gazeInput;if(a&&a.enabled&&a.disableTouchActions&&(o=!1),o){var n=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(n,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,a=!1){e&&this.started&&_domVideos.forEach((function(n){n.uid==e&&(n.play(t,o),a&&(n.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,a,n,i=this,r=i.getters.getAllSceneItems(i.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,n,o.compUid),n++),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 a,n=o.mat,i=!1;if("text"==o.type){if((a=[])[0]=new THREE.MeshBasicMaterial({color:n.color}),1!=n.opacity&&(a[0].transparent=!0,a[0].opacity=1*n.opacity),o.background.enabled){var r=o.background.mat;a[1]=new THREE.MeshBasicMaterial({color:r.color,side:THREE.DoubleSide}),1!=r.opacity&&(a[1].transparent=!0,a[1].opacity=1*r.opacity)}else a[1]=new THREE.MeshBasicMaterial({side:THREE.DoubleSide}),a[1].transparent=!0,a[1].opacity=0,a[1].alphaTest=.02;return a[2]=new THREE.MeshBasicMaterial({side:THREE.DoubleSide}),a[2].transparent=!0,a[2].opacity=0,a[2].alphaTest=.02,e.material=a[2],e.children[0].material=a[0],void(e.children[1]&&(e.children[1].material=a[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),n.chroma||(l.colorSpace=THREE.SRGBColorSpace)),l||(console.log("ERROR - - - missing texture for media"),console.log(s),console.log(t.textures)),n.chroma||((a=new THREE.MeshBasicMaterial({side:THREE.DoubleSide})).opacity=1*n.opacity,a.opacity<1&&(i=!0)),n.chroma){l.colorSpace=THREE.NoColorSpace;var d=new THREE.Color(n.chromaColor);d.convertLinearToSRGB();var c=n.range,u=n.chromaSmoothness;null==c&&(c=.5),null==u&&(u=7);var m=""+n.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 }";a=new THREE.ShaderMaterial({uniforms:{in_texture:{value:l},color:{value:d},tolerance:{value:c},smoothness:{value:u},opacity:{value:m}},vertexShader:e,fragmentShader:t,side:THREE.DoubleSide}),i=!0}if(a.alphaTest=.02,a.transparent=i,l){a.map=t.setupMaterialMap(e,a,l,s,{repeatTextures:!1})}e.material=a}else{if(a=new THREE.MeshBasicMaterial({side:THREE.DoubleSide,color:n.color}),1*n.opacity!=1&&(a.transparent=!0,a.opacity=1*n.opacity),o.mask){a=new THREE.MeshBasicMaterial({colorWrite:!1,side:THREE.DoubleSide});n={maskEverything:o.maskEverything,maskedItems:o.maskedItems};t.doMasking(e,n)}e.material=a}}}setupModelMeshMaterial(e,t,o){var a=this,n=a.getters.findCompMeshByCompUidAndIdMesh(o,t);if(n){var i=a.getters.getIdMeshByCompUidAndMeshName(o,e.name);if(null!==i&&i!=t){if(console.warn("error .idm on",e.name),!(n=a.getters.findCompMeshByCompUidAndIdMesh(o,i)))return void console.log("error: setupModelMeshMaterial - no mesh B");_config.isDebug&&(console.log("corrected:",e.name),console.log(t,"=>",i))}var r=[];n.mats.forEach((function(e){a.data.materials.forEach((function(t,o){t.uid==e&&r.push(o)}))})),a.setupMaterialsOnMesh(e,r,t,o)}else console.log("error: setupModelMeshMaterial - no mesh A")}setupMaterialsOnMesh(e,t,o,a){var n,i,r,s=this,l=[],d=s.getters.getLibItemByCompUid(a),c=1;e.geometry.groups&&(c=e.geometry.groups.length);var u=t.length;c>u&&(u=c);var m=!1;for(c>1&&(m=!0),n=0;n=s.data.materials.length&&(addToLog("matIndex is too high, using 0 :"+i+" : "+s.data.materials.length),i=0),r=s.data.materials[i]){var p=s.materialsManager.getMaterialObjByUid(r.uid);if(p){var g=p.material,h={flipTextures:d.flipTextures,repeatTextures:r.repeatTextures};s.materialsManager.assignTextures(p.data,p.type,g),s.materialsManager.setupEmbedTextures(r.uid,a,e,o),s.materialsManager.updateTextureSettings(g.map,h),s.materialsManager.updateTextureSettings(g.normalMap,h),"MaskMaterial"==r.type&&s.doMasking(e,r),l[n]=g,l[n].needsUpdate=!0}else console.log("BAD -------- mat not found :",e.name,r.type),"LineBasicMaterial"==r.type&&(console.log("warning : LineBasicMaterial => MeshBasicMaterial"),l[n]=new THREE.MeshBasicMaterial({opacity:0,transparent:!0})),l[n]||(l[n]=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 a=o.getters.getThreejsItemByCompUid(o.rootComposition,t);a&&a.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 a,n,i=e.p_trackingEngine.globalScale;console.log("lights scaled to ",i);for(a=0;a<3;a++)o=(n=t.lights[a]).int,1*THREE.REVISION>=156&&(o*=Math.PI),e.light[a]=new THREE.PointLight(n.color,o,n.dis*i),e.light[a].position.set(n.transform.pos.x,n.transform.pos.y,n.transform.pos.z),e.rootLighting.add(e.light[a]),(_config.isDebug||_config.simulator)&&(e.lightHelpers[a]=new THREE.PointLightHelper(e.light[a],.1),e.scene3.add(e.lightHelpers[a]))}}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){a(e)})):a(o))}))}))}))}}else e.envMap=null}function a(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 a=!0;if("image"==t.trackingMode){a=!1;var n=!1;o.multipleTracking,t.markerRoot&&t.markerRoot.visible&&(n=!0),n&&(a=!0),t.trackingSettings.image.keepVisible&&!t.markerNeverFound&&(a=!0)}a&&(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,a=o.camera,n=new THREE.Vector2,i=!1,r=t.threejsCanvas;o.usingWebXR&&o.isInARSession&&(i=!0),_config.simulator||"image"==t.trackingMode&&(a||(a=_arScene.camera));var s=!1;_body.classList.contains("p")&&_body.classList.contains("fid")&&(s=!0);var l=e.clientX,d=e.clientY,c=null,u=null,m={x:parseInt(100*(l/window.innerWidth*2-1))/100,y:-1*parseInt(100*(d/window.innerHeight*2-1))/100};if(i){var p=r.clientWidth/r.clientHeight/(9/16);c=r.clientWidth/window.innerWidth,u=r.clientHeight/window.innerHeight,c=p,n.x=l*c,n.y=d*u}if(s&&(n.x=m.y,n.y=-1*m.x,c=r.clientHeight/window.innerWidth,n.x*=1.15,n.y/=c),!s&&!i){var g=r.getBoundingClientRect().width/r.offsetWidth,h=r.getBoundingClientRect().height/r.offsetHeight;c=r.clientWidth*g/window.innerWidth,u=r.clientHeight*h/window.innerHeight,n.x=m.x/c,n.y=m.y/u}if("image"!=t.trackingMode||_body.classList.contains("m")||_body.classList.contains("keep")){var v=t.getMeshOnRaycast(a,n);v&&t.doActionOnMeshOrCompItem(v)}}getMeshOnRaycast(e,t,o=!1){var a=this,n=a.p_trackingEngine;a.raycaster.setFromCamera(t,e);var i=[],r=!0;"slam"==a.trackingMode&&(a.rootXR.visible||(r=!1)),r&&a.rootComposition.traverseVisible((function(e){e.isMesh&&i.push(e)})),n.reticleObj&&n.reticleObj.visible&&i.push(n.reticleObj);var s=a.raycaster.intersectObjects(i);if(s.length>0){var l,d,c=s[0].object;if(_config.isDebug){var u=s[0].point;if(!a.debugCube){const e=new THREE.BoxGeometry(.01,.01,.01),t=new THREE.MeshNormalMaterial;a.debugCube=new THREE.Mesh(e,t),a.debugCube.name="raycast cube"}console.log("R P ",u),a.scene3.add(a.debugCube),a.debugCube.position.set(u.x,u.y,u.z)}if(s.length>1)if(!c.visible||c.userData.isGizmo)for(l=1;l{!s&&e.compUid&&(s=e)}),s){n=s.compUid;if((o=t.getters.getCompItemByCompUid(n)).meshes){var l=t.getters.getLibItemByUid(o.uid),d=!1;r=null;if("gltf"==l.format&&o.meshes.forEach((function(t){if(!d&&t.name==e.name&&t.actions&&t.actions[0]&&t.actions[0].type)return r=t.actions[0],void(d=!0)})),!d){var c=0,u=!1,m=0;s.traverse((function(t){!u&&t.isMesh&&(t==e&&(c=m,u=!0),m++)}));var p=t.getters.findCompMeshByCompUidAndIdMesh(n,c);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 a=o.compUid,n=0,i=!1,r=0;o.traverse((function(t){!i&&t.isMesh&&(t==e&&(n=r,i=!0),r++)}));var s=!1,l=this.getters.findCompMeshByCompUidAndIdMesh(a,n);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,a=e.originalScale.z;e.scale.set(.9*t,.9*o,.9*a),new TWEEN.Tween(e.scale).to({x:t,y:o,z:a},300).start()}doAction(e,t=!1){new c_action(this,e,t)}setOverlay(e,t,o=1){var a=this;if(void 0===e||0!=e){var n=t.innerHTML;if(a.domOverlay=t,a.domOverlay.innerHTML="",a.domOverlay.style.zIndex=o,a.overlay=null,void 0!==e&&-1!=e){var i=a.getters.getOverlayByUid(e);i&&(simLog({what:"overlay",action:"change overlay",name:i.name,uid:i.uid}),a.overlay=new c_overlay(i,a.domOverlay))}else""!=n&&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 a=document.createElement("span");a.id="b_share",(n=document.createElement("img")).src=e.assetsFolder+"icons/icon-share.svg",a.appendChild(n),o.appendChild(a),$(a).on("click",(function(){shareProject()}))}if(t.QRButton&&t.QRButton.enabled){var n,i=document.createElement("span");i.id="b_qrCode",(n=document.createElement("img")).src=e.assetsFolder+"icons/icon-qr-code.svg",i.appendChild(n),o.appendChild(i),$(i).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 a=o.href;openModal({buttons:!1,closeButton:!0}),e.canvasQRParent=document.createElement("div");var n=document.querySelector("#alertModal .text");n.appendChild(e.canvasQRParent);var i=document.createElement("p");i.innerText=getText("QRShare"),i.style.fontSize="18px",i.style.margin="10px",n.appendChild(i),e.qrCode=new QRCodeStyling({width:e.size,height:e.size,margin:0,type:"canvas",data:a,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,a,n=document.getElementById("pagination");for(n.innerHTML="",o=0;o=5&&a.classList.add("small"),a.setAttribute("data-index",o),a.textContent=e.compEngine.data.composition[o].name,n.appendChild(a),a.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,a=null){this.actionData=t,this.compEngine=e,this.callback=a,this.doAction(o)}doAction(e=!1){var t=this,o=t.actionData,a=t.compEngine,n=a.getters,i=o.type;if(""==o.eventLabel&&(o.eventLabel=null),i&&""!=i){var r=!1;e&&(r=!0);var s="action: "+i;if("changeScene"==i){r=!0;var l=n.getSceneIndexByUid(o.sceneUid);if(null!==l){if(a.currentSceneIndex==l)return void(t.callback&&t.callback.call(t));var d=null;a.modulesEngine.virtualTourModule&&(d=o.angles),a.changeScene(l,t.callback,{angles:d})}}if("previousScene"==i){r=!0;var c=a.data.composition.length;(u=a.currentSceneIndex-1)<0&&(u=c-1),c>1&&a.changeScene(u,t.callback)}if("nextScene"==i){r=!0;var u;c=a.data.composition.length;(u=a.currentSceneIndex+1)==c&&(u=0),c>1&&a.changeScene(u,t.callback)}if("changeOverlay"==i&&(r=!0,a.setOverlay(o.overlayUid,document.querySelector("#sceneOverlay"))),"switchState"==i){r=!0;var m=a.modulesEngine.statesModule;if(!m)return;var p=n.getStateByUid(o.stateUid);if(!p)return;s="state: "+p.name,m.applyStateByUid(o.stateUid)}if("stopAllAudios"==i&&a.stopAudios(),"setVolume"==i){if(!(k=n.getCompItemByCompUid(o.compUid)))return;if("audio"==k.type&&k.audioItem.setVolume(o.volume),"video"==k.type){var g=a.videosUtils.getVideoNodeByCompUid(o.compUid);g&&(g.volume=o.volume/100)}}if("textBox"==i){s="media popup";var h={h2:o.textBoxTitle,p:o.textBoxText};if(o.translations&&o.translations.enabled&&a.modulesEngine.languagesModule&&(h.h2=a.modulesEngine.languagesModule.getText(o,"textBoxTitle",o.textBoxTitle),h.p=a.modulesEngine.languagesModule.getText(o,"textBoxText",o.textBoxText)),o.media){var v=o.media.uid;o.translations&&o.translations.enabled&&a.modulesEngine.languagesModule&&(v=a.modulesEngine.languagesModule.getImageUid(o,o.media.uid));var f=a.library.getItemByUid(v);if(f&&"image"==f.type){var y=a.library.getImageSrcByUid(v);h.image={url:y,width:f.width,height:f.height}}f&&"video"==f.type&&(h.video={url:a.projectFolder+f.url,width:f.width,height:f.height})}var E={content:h,colors:{textColor:o.textColor,titleColor:o.titleColor,bgColor:o.bgColor},useButton:o.useButton,stateUid:o.stateUid};t.openTextBox(E)}if("www"==i){r=!0;var b=o.wwwUrl;!b&&o.www&&(b=o.www),o.eventLabel&&(s=s+" "+o.eventLabel),t.openLink(o,b)}if("email"==i&&(r=!0,setTimeout((function(){t.openLink(o,o.email)}),100)),"call"==i)r=!0,C="tel:"+(C=(C=cleanString(o.callNumber)).replace(/[a-z]/gi,"")),setTimeout((function(){t.openLink(o,C)}),100);if("playVideo"==i&&(o.itemsCompUid&&o.itemsCompUid.forEach((function(e){a.playVideoByCompUid(e)})),o.matsUid&&o.matsUid.forEach((function(e){var t=n.getMaterialByUid(e);t&&"VideoMaterial"==t.type&&t.colorMap&&a.playVideoByUid(t.colorMap.uid)}))),"pauseVideo"==i&&(o.itemsCompUid&&o.itemsCompUid.forEach((function(e){a.pauseVideoByCompUid(e)})),o.matsUid&&o.matsUid.forEach((function(e){var t=n.getMaterialByUid(e);t&&"VideoMaterial"==t.type&&t.colorMap&&a.pauseVideoByUid(t.colorMap.uid)}))),"stopVideo"==i&&(o.itemsCompUid&&o.itemsCompUid.forEach((function(e){a.stopVideoByCompUid(e)})),o.matsUid&&o.matsUid.forEach((function(e){var t=n.getMaterialByUid(e);t&&"VideoMaterial"==t.type&&t.colorMap&&a.stopVideoByUid(t.colorMap.uid)}))),"restartTimeline"==i&&(a.timeline.isPaused&&a.timeline.resume(),a.changeScene(a.currentSceneIndex)),"pauseTimeline"==i&&a.timeline.pause(),"resumeTimeline"==i&&a.timeline.resume(),"embedVideo"==i){var w=o.embedVideoRatio,T=window.innerWidth/window.innerHeight;if(!(_=o.embedVideoID))return;_.length>11&&(_=_.substr(0,11));var _=cleanString(_);t.openEmbedPopUp("video");var M=document.querySelector("#embedContent .content");a.setAudioVolume(0),w>=T?(x=window.innerWidth-10-4,R=parseInt(x/w)):(R=window.innerHeight-10-4,x=parseInt(R*w)),M.innerHTML='';y="https://www.youtube.com/embed/"+_;o.embedVideoStartTime&&(y+="?start="+1*o.embedVideoStartTime),M.querySelector("iframe").src=y}if("embedWebsite"==i&&t.openEmbedWebsite(o),"iframe"==i){var C,S=validateURL(C=cleanString(o.iframeCode));if(!S){if(!(S=validateURL(C=o.iframeCode.match(/(http|ftp|https):\/\/([\w\-_]+(?:(?:\.[\w\-_]+)+))([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/)[0])))return}t.openEmbedPopUp("website");var x;M=document.querySelector("#embedContent .content");(x=window.innerWidth-20)<360&&(x=360),x>1500&&(x=1500);var R=window.innerHeight-100;M.innerHTML='',M.querySelector("iframe").src=C}if("setMaterial"==i){if(!o.target)return;var k,A=o.target[0];if(!(k=n.getCompItemByCompUid(A.compUid)))return;var L=n.findCompMeshByCompUidAndIdMesh(A.compUid,A.idm),I=o.newMaterialUid;L.mats[A.indexMat]=I,a.data.materials.forEach((function(e,t){e.uid==I&&a.updateMaterial(k,t)}))}if("share"==i&&(r=!0,shareProject()),"eShop"==i&&a.modulesEngine.openEShopModule(o.eShopCode),"cameraTarget"==i){console.log("look at camera target -----------");var B=1*o.cameraTarget,D=1*o.duration,U=t.compEngine.rootComposition,P=n.getThreejsItemByCompUid(U,B);if(!P)return void console.log("item not found");(A=_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 V=(new THREE.Euler).copy(A.rotation);A.lookAt(H);var O=(new THREE.Euler).copy(A.rotation);A.rotation.copy(V);var z=_app.compEngine.tweenCameraPosition;z&&z.stop(),_app.compEngine.tweenCameraPosition=new TWEEN.Tween(V).to(O,D),_app.compEngine.tweenCameraPosition.start(),_app.compEngine.tweenCameraPosition.onUpdate((function(e){A.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(A.rotation)}))}if("vcf"==i&&t.doVCF(o),"recenter3dof"==i&&"floating"==a.data.tracking.trackingMode&&_app.trackingEngine.recenter3Dof(),"resetUserTransform"==i&&"slam"==a.data.tracking.trackingMode&&_app.trackingEngine.resetUserTransform(),"resetGesturesModule"==i&&a.modulesEngine.gesturesModule&&a.modulesEngine.gesturesModule.reset(o),"playModelAnimation"==i){if(!o.compUid)return;var N=o.animationIndex;null!=N&&N>=0&&(o.index=N,a.playModelAnimation(o))}if("pauseModelAnimations"==i&&a.pauseModelAnimations(o),"playSimpleAnimation"==i&&t.playBasicAnimation(o),"stopSimpleAnimation"==i&&t.stopBasicAnimation(o),"mapMessage"==i&&setTimeout((function(){_app.common.postMessage({mapAction:o})}),1*o.delay),"jsAPIAction"==i&&(o.eventLabel?s="action: "+o.eventLabel:r=!1,a.data.modules.frontJsApi&&a.data.modules.frontJsApi.enabled)){var F={},j=null;o.params&&(o.params.forEach((function(e){F[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:F});document.dispatchEvent(e)}var W=a.modulesEngine.gamingModule;if(W&&("gamingEvent"==i&&(r=!1,W.triggerEvent(1*o.gamingEventUid)),"gamingStartTimer"==i&&(r=!0,W.startTimer(1*o.gamingTimerUid)),"gamingStopTimer"==i&&(r=!0,W.stopTimer(1*o.gamingTimerUid))),null!=o.uidAudio){var G=1*o.uidAudio;G&&(o.volume=100,a.playActionAudio(G,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 a=validateURL(t=cleanString(t)),n=!1,i=validateEmail(t),r=!1;if("tel:"==t.substring(0,4)&&(n=!0),a&&(r=!0),n&&(r=!0),i&&(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,d=t;a&&(s="Visit this page?",l=""+(d=(d=d.replace("https://","").replace("http://","")).replace(/\/$/,""))),n&&(o=!1,e.wwwSameTab=!1,d=d.replace("tel:",""),t=t.replace(/\s+/g,""),s="Call this number?",e.title&&(s=e.title),l=""+d),i&&(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=""+d),e.wwwText&&""!=e.wwwText&&(s=null,l=e.wwwText),s&&(s=cleanString(s)),l&&(l=cleanString(l));var c={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(c)}),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"],a=e["og:image"];if(!document.getElementById("alertModal"))return;var n,i=document.querySelector("#alertModal .text");if(!i)return;if(a)(n=document.createElement("img")).src=""+a,t.appendChild(n);if(o)(n=document.createElement("p")).innerText=""+o,t.appendChild(n);(o||a)&&i.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"),a=window.innerWidth-20;a<350&&(a=350),a>1500&&(a=1500);var n=window.innerHeight-100,i=t.split(".").pop();if("jpg"==i||"jpeg"==i||"png"==i||"webp"==i){o.innerHTML='';var r=o.querySelector("img");return r.src=t,r.style.maxWidth=a+"px",void(r.style.maxHeight=n+"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,a=e.useButton,n={h2:e.content.h2,p:e.content.p,image:e.content.image,video:e.content.video,buttons:!1,closeButton:!0};o&&(n.titleColor=o.titleColor,n.textColor=o.textColor,n.bgColor=o.bgColor),a&&(n.buttons=!0,n.OKButton="ok",n.closeButton=!1),n.callbackYes=function(){t.setFocus(!0),t.setAudioVolume(1),e.stateUid&&t.doAction({type:"switchState",stateUid:e.stateUid})},n.callbackNo=function(){t.setFocus(!0),t.setAudioVolume(1)},t.setFocus(!1),openModal(n)}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 a=e.companyName;if(a&&(o+="ORG:"+a+"\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 n=t.library.getItemByUid(e.media.uid);if(n){var i=t.projectFolder+n.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 a=300*e.height/e.width;return t.width=300,t.height=a,o.drawImage(e,0,0,300,a),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=""+i}else s()}else s();function s(){o+="END:VCARD";const t=encodeURIComponent(o);var a="";e.firstName&&(a+=e.firstName+" "),e.lastName&&(a+=e.lastName+"\n"),a+="\n",e.role&&(a+=e.role+"\n"),e.companyName&&(a+=e.companyName+"\n"),a+="\n",e.phone&&(a+=e.phone+"\n"),e.email&&(a+=e.email+"\n"),e.www&&(a+=e.www+"\n"),openModal({h2:"Save new contact?",p:a,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 a=e.itemsCompUid[0],n=t.compEngine.getters.getCompItemByCompUid(a);if(n){var i={type:e.animationType,speed:e.animationSpeed,axis:e.animationAxis,loop:e.animationLoop};t.compEngine.currentCompScene.startBasicAnimation(n,i)}}}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,d,c,u,m=e.animationType,p=1*e.animationSpeed,g=1.1,h=e.animationAxis,v=e.animationLoop,f=o;t.stopBasicAnimation(e,m),p=11-p;var y=f.rotation.x,E=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 w=(S=f.scale.x)*g,T=(x=f.scale.y)*g,_=(R=f.scale.z)*g;l=250*p,d=parseInt(60*l/100),c=parseInt(40*l/100);var M=new TWEEN.Tween(f.scale).to({x:w,y:T,z:_},d),C=new TWEEN.Tween(f.scale).to({x:S,y:x,z:R},c);M.chain(C),v&&C.chain(M),M.start(),M.animationType=m,C.animationType=m,f.basicAnimationTweenArray.push(M),f.basicAnimationTweenArray.push(C)}if("pulse"==m){f.scale.set(f.originalScale.x,f.originalScale.y,f.originalScale.z);var S,x,R;w=(S=f.scale.x)*g,T=(x=f.scale.y)*g,_=(R=f.scale.z)*g;l=250*p,d=parseInt(30*l/100),c=parseInt(10*l/100),u=parseInt(60*l/100);M=new TWEEN.Tween(f.scale).to({x:w,y:T,z:_},d),C=new TWEEN.Tween(f.scale).to({x:S,y:x,z:R},c);var k=new TWEEN.Tween(null).to(null,u);M.chain(C),C.chain(k),v&&k.chain(M),M.start(),M.animationType=m,C.animationType=m,k.animationType=m,f.basicAnimationTweenArray.push(M),f.basicAnimationTweenArray.push(C),f.basicAnimationTweenArray.push(k)}if("rot_clockwise"==m){d=2500*p;var A={v:0},L={v:-2*Math.PI};M=new TWEEN.Tween(A).to(L,d).onUpdate((function(){f.rotation.set(y,E,b),"x"==h&&f.rotateX(A.v),"y"==h&&f.rotateY(A.v),"z"==h&&f.rotateZ(A.v)})).onComplete((function(){f.rotation.set(y,E,b),f.rotateY(1*L.v)})).start();v&&M.repeat(1/0),M.animationType=m,f.basicAnimationTweenArray.push(M)}if("rot_anticlockwise"==m){d=2500*p;A={v:0},L={v:2*Math.PI},M=new TWEEN.Tween(A).to(L,d).onUpdate((function(){f.rotation.set(y,E,b),"x"==h&&f.rotateX(A.v),"y"==h&&f.rotateY(A.v),"z"==h&&f.rotateZ(A.v)})).onComplete((function(){f.rotation.set(y,E,b),f.rotateY(1*L.v)})).start();v&&M.repeat(1/0),M.animationType=m,f.basicAnimationTweenArray.push(M)}}}}stopBasicAnimation(e,t=null){var o=this;if(e.onCompItem){if(e.itemsCompUid&&e.itemsCompUid.length){var a=e.itemsCompUid[0],n=o.compEngine.getters.getCompItemByCompUid(a);n&&o.compEngine.currentCompScene.stopBasicAnimation(n)}}else{var i=null;if(e.target&&e.target[0]){var r=e.target[0],s=o.compEngine.rootComposition;i=o.compEngine.getters.getCompMeshByCompUidAndIdMesh(s,r.compUid,r.idm)}if(i){var l=i;if(l.basicAnimationTweenArray)if(t){for(d=0;d8e3&&(u=8e3);var m=(l+=u)+2e3+800*d;function p(){t.loaded||(t.loaded=!0,_config.isDebug&&console.log("%cvideo ready "+n,"background: #222; color: #bada55"),e.call(t))}o.addEventListener("canplaythrough",(function(e){t.loaded||(_config.isDebug&&console.log("%ccan play through "+n,"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 "+n),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 "+n,"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 "+n,"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,a=o.uid;console.log("vvv play",o.uid,"| last",o.lastOrder),o.lastOrder="play";var n=o.domElement;if(n.paused)if(_browser.ios&&o.underPromise)console.log("under promise => ABORT play",o.uid);else{var i=!0;o.libraryItem.audio&&(i=!1),0==o.compEngine.audioVolume&&(i=!0),n.muted=i,t&&(n.currentTime=0);var r=n.play();o.underPromise=!0,r.then((function(){if(o.underPromise=!1,"play"!=o.lastOrder)return console.log("vvv ERROR play promise",a,"| last",o.lastOrder),console.log("vvv => back to pause"),void o.pause();console.log("vvv play promise ok "+a+" paused: "+n.paused),n.setAttribute("data-paused","false"),n.paused&&_browser.ios&&setTimeout((function(){console.log("vvv PAUSED "+a+" => try again with restart"),o.play(!1,!0)}),80)})).catch((function(e){o.underPromise=!1,console.log("ERROR: vvv play prevented "+a),console.log(e)}))}else console.log("video data-paused ",n.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 a=!1;o.usingCamera||(a=!0),"mobile"!=_browser.device||"slam"!=o.trackingMode||_config.isPlayer||(a=!1),a&&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 a=e.sceneData.bg,n={topColor:{type:"c",value:new THREE.Color(a.colors.top)},bottomColor:{type:"c",value:new THREE.Color(a.colors.bottom)},offset:{type:"f",value:0},exponent:{type:"f",value:.9}},i=new THREE.Color(a.colors.top);i.convertLinearToSRGB();var r=new THREE.Color(a.colors.bottom);r.convertLinearToSRGB(),n.topColor={type:"c",value:i},n.bottomColor={type:"c",value:r};var s=new THREE.ShaderMaterial({uniforms:n,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 a=o.compUid;t.getters.getThreejsItemByCompUid(t.compEngine.rootComposition,a).visible&&t.compEngine.videosUtils.playVideoByCompUid(a,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 a=o.getters.getThreejsItemByCompUid(o.compEngine.rootComposition,e.compUid);if(a){void 0===t.speed&&(t.speed=1);var n,i,r,s,l,d,c,u,m,p,g,h=t.type,v=1*t.speed,f=t.loop,y=t.axis;if(void 0===y&&(y="y"),void 0===f&&(f=!0),v=11-v,n=a.scale.x,i=a.scale.y,r=a.scale.z,a.originalScale||(a.originalScale={x:n,y:i,z:r}),o.stopBasicAnimation(e),a.basicAnimationTweenArray||(a.basicAnimationTweenArray=[]),"scale_up_down"==h){s=n*(p=1.1),l=i*p,d=r*p,g=250*v,c=parseInt(60*g/100),u=parseInt(40*g/100);var E=new TWEEN.Tween(a.scale).to({x:s,y:l,z:d},c),b=new TWEEN.Tween(a.scale).to({x:n,y:i,z:r},u);E.chain(b),f&&b.chain(E),E.start(),a.basicAnimationTweenArray.push(E),a.basicAnimationTweenArray.push(b)}if("pulse"==h){s=n*(p=1.1),l=i*p,d=r*p,g=250*v,c=parseInt(30*g/100),u=parseInt(10*g/100),m=parseInt(60*g/100);E=new TWEEN.Tween(a.scale).to({x:s,y:l,z:d},c),b=new TWEEN.Tween(a.scale).to({x:n,y:i,z:r},u);var w=new TWEEN.Tween(null).to(null,m);E.chain(b),b.chain(w),f&&w.chain(E),E.start(),E.animationType=h,b.animationType=h,w.animationType=h,a.basicAnimationTweenArray.push(E),a.basicAnimationTweenArray.push(b),a.basicAnimationTweenArray.push(w)}if("rot_clockwise"==h){c=2500*v;E=new TWEEN.Tween(a.rotation).to({[y]:"-"+2*Math.PI},c).onComplete((function(){Math.abs(a.rotation.y)<=-2*Math.PI&&(a.rotation.y=a.rotation.y%(-2*Math.PI))})).start();f&&E.repeat(1/0),a.basicAnimationTweenArray.push(E)}if("rot_anticlockwise"==h){c=2500*v;E=new TWEEN.Tween(a.rotation).to({[y]:"+"+2*Math.PI},c).onComplete((function(){Math.abs(a.rotation.y)>=2*Math.PI&&(a.rotation.y=a.rotation.y%(2*Math.PI))})).start();f&&E.repeat(1/0),a.basicAnimationTweenArray.push(E)}}}}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}),a.start()}if(2==t.transitionType){var n={x:(r=_app.trackingEngine.camera).position.x,y:r.position.y,z:r.position.z},i={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(n).to(i,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;n={x:(r=_app.trackingEngine.camera).position.x,y:r.position.y,z:r.position.z},i={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(n).to(i,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 a={x:(i=_app.trackingEngine.camera).position.x,y:i.position.y,z:i.position.z+.5},n={x:i.position.x,y:i.position.y,z:i.position.z};e.savedCameraPosition={x:i.position.x,y:i.position.y,z:i.position.z},(r=new TWEEN.Tween(a).to(n,t)).easing(TWEEN.Easing.Quadratic.Out),r.onUpdate(e=>{i.position.set(e.x,e.y,e.z)}),r.onComplete(e=>{}),r.start()}if(3==e.transitionType){var i,r;a={x:(i=_app.trackingEngine.camera).position.x+.5,y:i.position.y,z:i.position.z},n={x:i.position.x,y:i.position.y,z:i.position.z};e.savedCameraPosition={x:i.position.x,y:i.position.y,z:i.position.z},(r=new TWEEN.Tween(a).to(n,t)).easing(TWEEN.Easing.Quadratic.Out),r.onUpdate(e=>{i.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,a){o.timeline&&o.timeline[0]&&function(o,a){var n=!0,i=o.timeline[0];i.in>t&&(n=!1),i.in<=t&&i.out>=t&&(n=!0),i.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 a;(a=document.createElement("span")).className="b_share";var n=document.createElement("img");n.src=e.assetsFolder+"icons/icon-share.svg",a.appendChild(n),e.domControls.appendChild(a)}_needVolumeButton&&e.addVolumeButton(),(a=document.createElement("span")).className="b_fullScreen";var i=document.createElement("img");i.src=e.assetsFolder+"icons/icon-fullscreen.svg",a.appendChild(i),e.domControls.appendChild(a),$("#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 a=document.createElement("img");a.src=e.assetsFolder+"icons/icon-audio-off.svg",a.className="off",t.appendChild(o),t.appendChild(a),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 a=this;window.addEventListener("resize",(function(){a.resizeOverlay()})),a.resizeOverlay(),setTimeout((function(){a.resizeOverlay()}),500),a.data.items&&a.populateOverlay()}populateOverlay(){var e,t,o=this,a=o.dom;for(a.innerHTML="",e=o.data.items.length-1;e>=0;e--)t=o.data.items[e],o.addItem(t,a)}getText(e){var t=e.text,o=this.compEngine.modulesEngine.languagesModule;o&&(t=o.getText(e,"text",e.text));var a=this.compEngine.modulesEngine.gamingModule;return a&&(t=a.setDynamicValues(t)),t}updateDynamicTexts(){var e,t=this,o=t.dom,a=t.compEngine.getters;a.getOverlayItems(t.data.uid).forEach((function(n){("text"==n.type&&(e=o.querySelector('[data-uid="'+1*n.uid+'"] p'))&&(e.textContent=t.getText(n)),"overlay"==n.type)&&a.getOverlayItems(n.overlayUid).forEach((function(a){"text"==a.type&&(e=o.querySelector('[data-uid="'+1*a.uid+'"] p'))&&(e.textContent=t.getText(a))}))}))}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 a="";e.center.left-50==0&&(a="center"),e.center.left-50<0&&(a="left"),e.center.left-50>0&&(a="right"),e.center.top-50==0&&(a+=" center"),e.center.top-50<0&&(a+=" top"),e.center.top-50>0&&(a+=" bottom"),t.style.transformOrigin=a}addItem(e,t){var o=this,a=_browser.device;if(_config.simulator&&_config.simulator.mobile&&(a="mobile"),("mobile"!=a||e.devices.mobile)&&("computer"!=a||e.devices.computer)&&("headset"!=a||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,a=e.unit,n=document.createElement("div");n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,n.style.left=1*e.left+a,n.style.top=1*e.top+a,n.style.width=1*e.width+a,n.style.height=1*e.height+a,e.corner&&(n.style.borderRadius=1*e.corner+"px"),o.addShadow(e,n),o.setCSSTransform(e,n),n.style.backgroundColor=o.hexToRGBA(e.backgroundColor,e.opacity),o.addItemAction(e,n),t.appendChild(n)}addImage(e,t){var o=this,a=e.unit,n=document.createElement("div");n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,n.style.left=1*e.left+a,n.style.top=1*e.top+a,e.corner&&(n.style.borderRadius=1*e.corner+"px");var i=1*e.opacity;if(1!=i&&(n.style.opacity=i),e.sizeByHeight?n.style.height=1*e.height+a:n.style.width=1*e.width+a,e.image&&"circle"==e.image.shape&&(n.style.borderRadius="50%"),o.setCSSTransform(e,n),e.image&&e.image.url){var r=_config.assetsFolder+e.image.url;(u=document.createElement("img")).src=r,n.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 d=s.getters.getLibItemByUid(l);if(d){var c=d.url;d.webp&&(c=d.webp);var u,m=s.projectFolder+c;(u=document.createElement("img")).src=m,e.sizeByHeight&&u.classList.add("sizeByHeight"),n.appendChild(u),o.addShadow(e,u)}}e.id&&(n.id=e.id),o.addItemAction(e,n),t.appendChild(n)}addVideo(e,t){var o=this,a=e.unit,n=document.createElement("div");if(n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,n.style.left=1*e.left+a,n.style.top=1*e.top+a,n.style.width=1*e.width+a,o.setCSSTransform(e,n),e.video&&e.video.uid){var i=o.compEngine,r=i.getters.getLibItemByUid(e.video.uid);if(r){var s=r.url,l=i.projectFolder+s,d=document.createElement("video");d.src=l,d.playsInline=!0,d.autoplay=!0,d.muted=!0,d.loop=!0,n.appendChild(d)}}e.id&&(n.id=e.id),o.addItemAction(e,n),t.appendChild(n)}addText(e,t){var o=this,a=e.unit,n=document.createElement("div");n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,n.style.left=1*e.left+a,n.style.top=1*e.top+a,n.style.width=1*e.width+a,o.setCSSTransform(e,n);var i=o.getText(e),r=document.createElement("p");r.className=e.textAlign,r.textContent=i,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"),n.appendChild(r),o.addItemAction(e,n),t.appendChild(n)}addButton(e,t){var o=this,a=e.unit,n=document.createElement("div");if(n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,n.style.left=1*e.left+a,n.style.top=1*e.top+a,o.setCSSTransform(e,n),e.useImage){if(n.style.width=1*e.width+"%",e.image&&e.image.url){var i=_config.assetsFolder+e.image.url,r=document.createElement("img");r.src=i,n.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"),n.appendChild(l)}o.addItemAction(e,n),t.appendChild(n)}addGroup(e,t){var o,a=e.unit,n=document.createElement("div");if(n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,n.style.left=1*e.left+a,n.style.top=1*e.top+a,this.setCSSTransform(e,n),_config.isDebug){var i=document.createElement("span");i.style.display="inline-block",i.style.width="10px",i.style.height="10px",i.style.position="absolute",i.style.transform="translate(-50%, -50%)",i.style.backgroundColor="#ff0000",n.appendChild(i)}for(o=e.items.length-1;o>=0;o--){var r=e.items[o];this.addItem(r,n)}t.appendChild(n)}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,a=this.compEngine.getters.getOverlayByUid(o);if(a){var n=document.createElement("div");n.setAttribute("data-uid",1*e.uid),n.className="item type_"+e.type,t.appendChild(n);var i=document.createElement("div");i.className="subOverlay",n.appendChild(i);new c_overlay(a,i,1)}}addPhotoModuleButton(e,t){var o=this,a=e.unit,n=document.createElement("div");if(n.className="item type_"+e.type,n.classList.add(e.type),n.style.left=1*e.left+a,n.style.top=1*e.top+a,e.sizeByHeight?n.style.height=1*e.height+a:n.style.width=1*e.width+a,e.image&&"circle"==e.image.shape&&(n.style.borderRadius="50%"),o.setCSSTransform(e,n),e.image&&e.image.uid){var i=o.compEngine,r=i.getters.getLibItemByUid(e.image.uid);if(r){var s=r.url;r.webp&&(s=r.webp);var l=i.projectFolder+s;(d=document.createElement("img")).src=l,e.sizeByHeight&&d.classList.add("sizeByHeight"),n.appendChild(d)}}else{var d=document.createElement("img");"photoButton"==e.type&&(d.src=o.assetsFolder+"icons/icon-camera.svg"),"videoButton"==e.type&&(d.src=o.assetsFolder+"icons/icon-video-camera.svg"),"cameraButton"==e.type&&(d.src=o.assetsFolder+"icons/icon-switch-camera.png"),e.sizeByHeight&&d.classList.add("sizeByHeight"),n.classList.add("defaultIcon"),n.appendChild(d)}o.addItemAction(e,n),t.appendChild(n)}addShadow(e,t){if(e.shadow&&e.shadow.enabled){var o=e.shadow,a=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 ${a}`:t.style.setProperty("-webkit-filter",`drop-shadow(${1*o.x}px ${1*o.y}px ${1*o.size}px ${a})`)}}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 a=this;if(addToLog("--\x3e ASK Orientation Perm"),_browser.insideIframe){var n=!1,i=!0;try{parent.window.location.hostname===window.location.hostname&&(i=!1)}catch(e){}if(_browser.iOSVersion<15&&i&&(n=!0),"chrome"==_browser.name&&_browser.webgl2&&(n=!1),n)return addToLog("iframe motion request iOS "+_browser.iOSVersion),a.common.postMessage({request:"motion",version:_browser.version,browserName:_browser.name}),void window.addEventListener("message",a.gotMessage,!1)}"undefined"!=typeof DeviceOrientationEvent&&("function"==typeof DeviceOrientationEvent.requestPermission?DeviceOrientationEvent.requestPermission().then((function(e){a.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 a=o.deviceOrientation;o.deviceOrientation=e.data.deviceOrientation,a.alpha=e.data.deviceOrientation.alpha,a.beta=e.data.deviceOrientation.beta,a.gamma=e.data.deviceOrientation.gamma,o.enabled=!0}}}}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,"*")}}}class floatingEngine{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.rootOrientation=null,this.floorRadius=100,this.floorY=-100,this.windowSize=null,this.fingers=[],this.lastTouch={x:0,y:0},this.videoStream=null,this.compositionHasBeenAdded=!1,this.positionToLookAt=null,this.useReticle=!1,this.reticle=null,this.trackingSettings=null}getDistanceXZ(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.z-t.z,2))}setNewData(){this.checkDeviceOrientationPermission()}setPointers(){var e=this;e.compEngine=_app.compEngine,e.common=_app.common,e.trackingSettings=e.compEngine.data.tracking.floating}keepComposition(){console.log("///////////////////// FLOATING"),console.log("KEEP COMP INSTANCE"),this.checkDeviceOrientationPermission(),_app.compEngine.rootXR.rotation.set(THREE.MathUtils.degToRad(90),0,0)}checkDeviceOrientationPermission(){_browser.ios&&(_apiParams.disableDeviceOrientationControls||(this.needDeviceOrientationPermission=!0))}askDeviceOrientationPermission(){var e=this;new orientationPermission(e.common,e.controls,(function(){e.placeComposition()}))}initScene3(){var e=this;addToLog("-> init Scene3");var t=e.compEngine;e.scene3=t.createThreejsScene();var o=window.innerWidth,a=window.innerHeight;if(null==e.camera){e.common.addWindowEvents();var n=1*e.trackingSettings.fov,i=5*e.trackingSettings.far,r=e.trackingSettings[_browser.device].position;if(0==r.z&&(addToLog("user position.z 0 => fix"),r.z=1),"mobile"==_browser.device&&(e.floorRadius=5*r.z/100+.02,e.floorY=-5*r.y/100),"computer"==_browser.device&&(e.floorRadius=5*r.z/100+.02,e.floorY=-5*r.y/100),"headset"==_browser.device){e.floorRadius=5*r.z/100+.02,e.floorY=-5*r.y/100;var s=e.trackingSettings[_browser.device].scale;e.floorY-=s.xyz/100*10}e.camera=new THREE.PerspectiveCamera(n,o/a,.1,i),e.scene3.add(e.camera),t.createCameraTarget();var l=new THREE.CircleGeometry(e.floorRadius,16);l.rotateX(-Math.PI/2);var d=new THREE.MeshBasicMaterial({color:16773120,wireframe:!0}),c=new THREE.Mesh(l,d);if(c.name="floor",e.scene3.add(c),_config.isDebug||(c.visible=!1),c.position.set(0,e.floorY,0),e.trackingSettings.reticle.enabled&&(e.useReticle=!0),e.rootOrientation=new THREE.Group,e.rootOrientation.name="rootOrientation",_browser.mobile?e.camera.add(e.rootOrientation):(e.scene3.add(t.rootXR),_browser.computer&&(console.log("YOYO yoyo floating computer"),console.log(t.rootXR.position.y))),!e.renderer){var u=!1;1==_apiParams.rendererAlpha&&(u=!0),"headset"==_browser.device&&_browser.ar&&(u=!0);var m=!1;_browser.computer&&(m=!0),_browser.mobileVR&&(m=!0);var p={antialias:m,preserveDrawingBuffer:!0,canvas:_canvas,alpha:u};e.renderer=new THREE.WebGLRenderer(p);var g=2;_browser.computer&&(g=1),e.renderer.setPixelRatio(g),e.renderer.setSize(o,a),!_browser.computer&&e.useReticle&&e.addReticleButton(),window.addEventListener("resize",(function(){e.resizeCanvas()}))}}else addToLog("-> coming back to XR scene"),alert("bad floating"),e.scene3.remove(e.rootOrientation),e.rootOrientation.position.set(0,0,-60),e.camera.add(e.rootOrientation);_keepComposition?e.allSceneDataLoaded():t.load()}allSceneDataLoaded(){var e=this,t=_canvas;_browser.mobile&&(e.controls=new DeviceOrientationControls(e.camera),_apiParams.disableDeviceOrientationControls&&e.controls.dispose()),_browser.computer&&(t.addEventListener("pointerdown",e=>{0===e.button&&(t.style.cursor="grab")}),document.addEventListener("pointerup",e=>{t.style.cursor="default"})),_screens.start.showScreen();var o=!1;"mobile"==_browser.device&&e.trackingSettings.mobile.useCamera&&(o=!0),"computer"==_browser.device&&e.trackingSettings.computer.useCamera&&(o=!0),"headset"==_browser.device&&(o=!1),o?e.getVideoStream():console.log("not using camera")}start(){var e=this,t=e.compEngine;_browser.mobile&&e.rootOrientation.add(t.rootXR),e.placeComposition(),t.activateScene(),e.startLoop()}getVideoStream(){var e=this;if(null!=e.videoStream)return addToLog("-> already has stream"),void e.placeComposition();if(_browser.computer){var t=document.createElement("div");t.id="cameraAccessDimmer",_body.appendChild(t)}e.videoStream=new videoStream({canvas:_canvas,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("floating 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})}placeComposition(){var e=this,t=e.rootOrientation;addToLog("-> placeComposition "),t.rotation.set(0,0,0),e.compositionHasBeenAdded||(e.compositionHasBeenAdded=!0,_browser.computer?e.recenter3Dof():(t.visible=!1,setTimeout((function(){t.visible=!0,e.recenter3Dof()}),350)))}resizeCanvas(){var e=this,t=window.innerWidth,o=window.innerHeight,a=t/o;if(!e.compEngine.usingCamera)return e.renderer.setSize(t,o,!1),_canvas.style.width=t+"px",_canvas.style.height=o+"px",e.camera.aspect=a,void e.camera.updateProjectionMatrix();if(_video){var n="landscape";e.streamSize.w has not been rendered yet?"),console.log(t.position),console.log(o.position));var i=n/e.floorRadius;e.floorRadius<0&&(i*=-1),o.position.x/=i,o.position.z/=i,_browser.mobile&&!_browser.mobileVR?(e.positionToLookAt={x:0,y:e.floorY,z:0},e.compEngine.rootXR.lookAt(e.positionToLookAt.x,e.positionToLookAt.y,e.positionToLookAt.z),e.floorRadius<0&&(o.position.x/=-1,o.position.z/=-1)):o.position.z=0}switchTo3D(){addToLog("FLOATING back to 3D"),_screens.start.closeScreen(!1,!1),removeElementByID("b_reticle"),this.loopIsPaused=!0,_canvas.style.visibility="visible",_keepComposition=!0,startApp(_mainData,!0)}}class common{constructor(e,t){this.trackingEngine=e,this.compEngine=t,window.addEventListener("message",this.gotMessage,!1)}pauseAllVideoTextures(e=!1){var t,o=document.querySelectorAll(".videoLibrary");if(o&&o.length)for(t=0;t 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)}}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 a={fullConfig:!0,data:o.configuratorModule.configData};o.submitUpdate(a)}}}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,a=e.compEngine.usingCamera,n=e.modulesData;if(n.states&&1==n.states.enabled&&(e.statesModule=new statesModule(e)),n.photo&&1==n.photo.enabled){var i=!0;"slam"!=o||_config.isDebug||(i=!1),i&&(e.photoModule=new photoModule(e))}n.gestures&&1==n.gestures.enabled&&(_config.simulator||_browser.mobileVR||"face"==o||(e.gesturesModule=new gesturesModule(e))),n.qrReader&&1==n.qrReader.enabled&&a&&("slam"!=o?e.qrReaderModule=new qrReaderModule(e):(addToLog("SLAM => no qrReader Module"),n.qrReader.enabled=!1)),n.barcodeReader&&1==n.barcodeReader.enabled&&a&&("slam"!=o?e.barcodeReaderModule=new barcodeReaderModule(e):(addToLog("SLAM => no barcodeReader Module"),n.barcodeReader.enabled=!1)),n.eShop&&1==n.eShop.enabled&&a&&e.eShopModule(),n.configurator&&1==n.configurator.enabled&&(e.configuratorModule=new configuratorModule(e)),n.skybox&&1==n.skybox.enabled&&(e.skyboxModule=new skyboxModule(e)),n.gazeInput&&1==n.gazeInput.enabled&&(e.gazeInputModule=new gazeInputModule(e)),n.gaming&&1==n.gaming.enabled&&(e.gamingModule=new gamingModule(e)),n.languages&&n.languages.enabled&&(e.languagesModule=new languagesModule(n.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 a=t.moduleData;function n(e){t.isMouseDown=!0,t.touchStart(e)}a.rotationX=0,a.rotationY=0,a.rotationZ=0,a.lastTouch={x:0,y:0},a.lastTouchCenter={x:0,y:0},a.isMouseDown=!1,a.skipRotation=!1,a.currentScale=1,a.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,n(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",n,!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&&a.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,a=1;isTouch&&(a=e.touches.length),a>1&&(t.skipRotation=!0);var n=t.canvas.getBoundingClientRect(),i=n.top+document.body.scrollTop,r=n.left+document.body.scrollLeft,s=window.innerWidth,l=window.innerHeight,d=new THREE.Vector2;d.x=(e.clientX-r)/s*2-1,d.y=-(e.clientY-i)/l*2+1,o.lastTouch={x:e.clientX,y:e.clientY};var c={x:e.clientX,y:e.clientY};if(t.touches.push(c),_browser.isTouch){if(t.fingers[0]={x:e.touches[0].screenX,y:e.touches[0].screenY},t.touches.length>1&&a>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&&a>1){t.fingers[1]||console.log("gestures error fingers 1 A",t.touches.length,a);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,a=t.trackingEngine,n=t.compEngine.trackingMode,i=!1;if(a&&a.isInARSession&&(i=!0),e.target==t.canvas||!_app||i){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 d=1*o.rotation.sensibility;if(o.rotation.xAxis){var c=(s-o.lastTouch.y)/l;this.deltaRotation.x+=90*c*d,i||(o.rotationX+=90*c*d),i&&a.inOnFloor&&(o.rotationX+=90*c*d),i&&!a.inOnFloor&&(o.rotationX+=90*c*d)}if(o.rotation.yAxis){var u=(r-o.lastTouch.x)/l;this.deltaRotation.y+=90*u*d,i||(o.rotationY+=90*u*d),i&&a.inOnFloor&&(a.useReticle,o.rotationY+=90*u*d),i&&!a.inOnFloor&&(o.rotationY+=90*u*d)}}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:(v={x:t.fingers[0].x,y:t.fingers[0].y}).x-o.lastTouchCenter.x,y:v.y-o.lastTouchCenter.y};if(Math.abs(m.x)>3||Math.abs(m.y)>3){var p=420-40*o.pan.sensibility;i&&(p/=3);var g=!0,h=1;"image"==n&&(t.compEngine.markerOrientationIsVertical||(g=!1,h=-1)),"fixed"==n&&(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:v.x,y:v.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 v;m={x:(v={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:v.y-o.lastTouchCenter.y};if(Math.abs(m.x)>3||Math.abs(m.y)>3){p=420-40*o.pan.sensibility;i&&(p/=3);g=!0,h=1;"image"==n&&(t.compEngine.markerOrientationIsVertical||(g=!1,h=-1)),"fixed"==n&&(g=!1,h=-1),"slam"==n&&(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:v.x,y:v.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 a=t.originalFov/(o.zoom.max/100),n=t.originalFov/(o.zoom.min/100);t.currentFovn&&(t.currentFov=n);var i=t.trackingEngine.camera;return i.fov=t.currentFov,void i.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,a=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,a.fov=t.currentFov,a.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 a=o.currentScale;t.scale.x!=a&&t.scale.set(a,a,a)}if(o.rotation.enabled){if("floating"==e.compEngine.trackingMode&&_browser.computer,"floating"==e.compEngine.trackingMode&&_browser.computer){t=e.compEngine.cameraTargetHook;var n=!1;if(e.deltaRotation.x&&(n=!0,t.rotateX(THREE.MathUtils.degToRad(-1*e.deltaRotation.x))),e.deltaRotation.y&&(n=!0,t.rotateY(THREE.MathUtils.degToRad(-1*e.deltaRotation.y))),n){var i=new THREE.Vector3;e.compEngine.cameraTarget.getWorldPosition(i),_app.trackingEngine.camera.lookAt(i)}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 a=[];return o.traverse((function(e){!e.isMesh&&t||a.push(e)})),a[e]}applyDefaultState(){var e=this.moduleData;e&&e.enabled&&this.applyStateByUid(e.defaultStateUid)}applyStateByUid(e){var t=this;t.moduleData.states.forEach((function(o,a){o.uid==e&&t.applyState(a)}))}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 a=o[e];simLog({what:"states",action:"change state",name:a.name,uid:a.uid}),a.actions&&t.doNextStateAction(e,-1),window.jscolor&&window.jscolor.installByClassName("jscolor")}}doNextStateAction(e,t){var o=this,a=o.moduleData.states[e];if(!(++t>=a.actions.length)){var n=a.actions[t];o.doStateAction(n,e,t)||o.doNextStateAction(e,t)}}doStateAction(e,t,o){var a=this,n=e.type,i=a.compEngine,r=i.getters,s=null;if("changeScene"==n||"previousScene"==n||"nextScene"==n)return s=function(){a.doNextStateAction(t,o)},a.doAction(e,s),!0;if("changeOverlay"==n&&(e.uidAudio&&(console.log("hot fix state action: remove .uidAudio"),e.uidAudio=null),a.doAction(e)),"restartTimeline"==n&&a.doAction(e),"pauseTimeline"==n&&a.doAction(e),"resumeTimeline"==n&&a.doAction(e),"showMesh"==n&&e.target&&e.target.forEach((function(t){if(t){var o=r.getCompMeshByCompUidAndIdMesh(i.rootComposition,t.compUid,t.idm);o&&(e.delay||(o.visible=!0),e.delay&&setTimeout((function(){o.visible=!0}),1*e.delay))}})),"hideMesh"==n&&e.target&&e.target.forEach((function(t){if(t){var o=r.getCompMeshByCompUidAndIdMesh(i.rootComposition,t.compUid,t.idm);o&&(e.delay||(o.visible=!1),e.delay&&setTimeout((function(){o.visible=!1}),1*e.delay))}})),"showItem"==n)if(e.everything){var l=i.currentScene;r.getAllSceneItems(l).forEach((function(e){var t=r.getThreejsItemByCompUid(i.rootComposition,e.compUid);t&&(t.visible=!0)}))}else void 0!==e.itemsCompUid&&e.itemsCompUid.forEach((function(e){if(e){var t=r.getThreejsItemByCompUid(i.rootComposition,e);t&&(t.visible=!0)}}));if("hideItem"==n){function d(e){if(e){var t=r.getThreejsItemByCompUid(i.rootComposition,e.compUid);if(t&&(t.visible=!1),e&&"video"==e.type){var o=e.uid,a=i.currentScene,n=r.getAllSceneItems(a),s=!1;n.forEach((function(e){if(e.uid==o){var t=r.getThreejsItemByCompUid(i.rootComposition,e.compUid);t&&t.visible&&(s=!0)}})),s||(console.log("video not visible ",o," => stop it"),i.stopVideoByUid(o))}}}if(e.everything){l=i.currentScene;r.getAllSceneItems(l).forEach((function(e){d(e)}))}else void 0!==e.itemsCompUid&&e.itemsCompUid.forEach((function(e){if(e){var t=r.getCompItemByCompUid(e);d(t)}}))}if("showOverlayItems"==n){function c(e){$('.item[data-uid="'+e.uid+'"]').removeClass("hidden")}if(e.everything){var u=i.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("hideOverlayItems"==n){function d(e){$('.item[data-uid="'+e.uid+'"]').addClass("hidden")}if(e.everything){u=i.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("playModelAnimation"==n&&a.doAction(e),"pauseModelAnimations"==n&&a.doAction(e),"playSimpleAnimation"==n&&a.doAction(e),"stopSimpleAnimation"==n&&a.doAction(e),"playAudio"==n){var m=e.uidAudio;m&&(e.loop=e.audioLoop,void 0===e.volume&&(e.volume=100),i.playActionAudio(m,e,!0))}if("stopAllAudios"==n&&a.doAction(e),"setVolume"==n&&a.doAction(e),"playVideo"==n&&a.doAction(e),"pauseVideo"==n&&a.doAction(e),"stopVideo"==n&&a.doAction(e),"timer"==n){var p=a.currentStateIndex,g=e.timerEnd,h=e.timer;0==h&&(h=10),a.timerSwitchState&&clearTimeout(a.timerSwitchState),a.timerSwitchState=setTimeout((function(){return a.currentStateIndex==p&&(g&&void 0!==g.stateUid?(a.applyStateByUid(g.stateUid),!1):void 0)}),h)}if("setMaterial"==n&&a.doAction(e),"property"==n){void 0!==e.indexMaterial&&i.data.materials[e.indexMaterial]&&(e.matUid=i.data.materials[e.indexMaterial].uid);var v=i.materialsManager.getMaterialObjByUid(e.matUid);if(!v)return;var f=v.material,y=1*e.duration,E=new THREE.Color(e.propertyValue);if(y>10)new TWEEN.Tween(f.color).to(E,y).start();else f.color=E}return"www"==n&&(e.wwwSameTab=!0,e.wwwModal=!1,a.doAction(e)),"embedVideo"==n&&a.doAction(e),"recenter3dof"==n&&a.doAction(e),"resetUserTransform"==n&&a.doAction(e),"resetGesturesModule"==n&&a.doAction(e),"mapMessage"==n&&a.doAction(e),"jsAPIAction"==n&&a.doAction(e),"gamingEvent"==n&&a.doAction(e),"gamingStartTimer"==n&&a.doAction(e),!1}doAction(e,t=null){new c_action(this.compEngine,e,!1,t)}getNextState(e){var t,o=this,a=e.index,n=e.compUid,i=o.moduleData.states[o.currentStateIndex].actions;for(t=0;te.width&&(o=e.width);var n=document.createElement("canvas"),i=n.getContext("2d");n.width=o,n.height=a;var r=0;e.width>o&&(r=parseInt((e.width-o)/2));return i.drawImage(e,r,0,o,a,0,0,o,a),n.toDataURL("image/jpeg",.8)}setPhotoDataAndsSource(e){document.getElementById("photoPreview").src=e,this.photobase64=e}saveMedia(){var e,t=this,o=cleanString(_config.projectURL),a=new Date,n=a.getHours(),i=a.getMinutes(),r=a.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+"-"+n+"-"+i+"-"+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+"-"+n+"-"+i+"-"+r+".jpg",_browser.android){var l="photo-"+o+"-"+n+"-"+i+"-"+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 d=document.getElementById("photoPreview").src;d=d.replace(/^data:image\/[^;]/,"data:application/octet-stream"),s.href=d}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 a=new File(this.mediaRecorderChunks,"video."+o.format,{type:o.type});return void e.shareFile(a,t,t)}addToLog("share photo file");const a=e.photobase64;fetch(a).then((function(e){return e.blob()})).then((function(o){const a=new File([o],"picture.jpg",{type:o.type});var n={files:[a],title:t,text:t};_browser.ios&&(n={files:[a]}),navigator.share(n).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 a=this,n={files:[e],title:t,text:o};_browser.ios&&(n={files:[e]}),navigator.share(n).then((function(e){a.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 a=new CustomEvent("API_mediaCaptured",{detail:o});document.dispatchEvent(a)}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(a){var n=_canvas.captureStream();t=new MediaStream;var i=_app.compEngine.audioListener.context,r=i.createMediaStreamDestination();i.createMediaStreamSource(a).connect(r),n.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]):a.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 a=_app.compEngine.audioListener.context.createMediaStreamDestination();return _canvas.captureStream().getVideoTracks().forEach((function(e){t.addTrack(e)})),o(a),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 a="video/"+o;e.forEach(e=>{[`${a};codecs=${e}`,`${a};codecs:${e}`,""+a].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 a=new Blob(t.mediaRecorderChunks,{type:o.type});t.blobVideoData=a,t.videoUrl=URL.createObjectURL(a),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 a=new XMLHttpRequest;a.open("POST","https://tools.xr.plus/sharing/convert-video.php",!0),a.onload=function(){if(a.status>=200&&a.status<400){t.stopLoading();try{var e=JSON.parse(a.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 a=await fetch(o),n=await a.arrayBuffer(),i="video-"+e.w+"x"+e.h+".mp4",r=new File([n],i,{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..."})},a.onerror=function(){console.log("error b"),t.stopLoading(),openModal({p:"something went wrong..."})},a.upload.onprogress=function(e){var t=parseInt(100*e.loaded/e.total);t<99?$("#loadingTools p").text(t+"%"):$("#loadingTools p").text("converting...")},a.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 a=setInterval(()=>{_video&&(addToLog("QR : video ready"),clearInterval(a),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 a=o.createQrEngine(o.WORKER_PATH),n=document.createElement("canvas");function i(e){e&&(isModalOpen()||t.readQR(e.data))}setInterval(()=>{t.isPaused||_app.trackingEngine.loopIsPaused||o.scanImage(_video,{qrEngine:a,canvas:n,returnDetailedScanResult:!0}).then(e=>i(e)).catch(e=>i(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 a=document.location.href;try{a=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]!=a&&o.openAllValidUrls){var n=!1;if(validateURL(e)&&(n=!0),_config.isDebug&&console.log("other ",e),n){_app.common.gaEvent({event:"scan QR code",event_category:"scene",event_label:"scan QR code"});var i=cleanString(e);if(o.embedContent){var r={type:"embedWebsite",embedWebsiteURL:i};t.compEngine.doAction(r)}else r={type:"www",wwwUrl:i,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 a,n,i=""+e;i=i.replace(/\s/g,"");for(a=0;a480&&(a=50),e.canvas.setAttribute("width",n-2*a),e.canvas.setAttribute("height",n-2*a);var i=n-2*a;setInterval(()=>{e.isPaused||function(){if(!_app.trackingEngine.loopIsPaused){var n=t.videoWidth,r=t.videoHeight,s=0,l=0;n>=r&&(s=(n-r)/-2),n{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 a=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)a();else{var n=document.createElement("script");n.onload=function(){a()},n.src=t.scriptURL,document.head.appendChild(n)}var i=function(e,a){setInterval(()=>{t.isPaused||function(){if(!_app.trackingEngine.loopIsPaused){var n=e.videoWidth,i=e.videoHeight,r=0,s=0;n>=i&&(r=(n-i)/-2),n480&&(o=100),addToLog("ean margin "+o),t.canvas.setAttribute("width",e-2*o),t.canvas.setAttribute("height",e-2*o),i(_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,a,n=""+e;for(n=n.replace(/\s/g,""),o=0;o480&&(a=50),addToLog("ean API margin "+a),e.canvas.setAttribute("width",n-2*a),e.canvas.setAttribute("height",n-2*a);var i=n-2*a;setInterval(()=>{e.isPaused||function(){if(!_app.trackingEngine.loopIsPaused){var n=t.videoWidth,r=t.videoHeight,s=0,l=0;n>=r&&(s=(n-r)/-2),n{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 a=-1;a++,t.button[a]=document.createElement("span"),t.button[a].classList.add("eShopButton"),t.button[a].innerHTML='',t.divButtons.appendChild(t.button[a]),a++,t.button[a]=document.createElement("span"),t.button[a].classList.add("eShopButton"),t.button[a].innerHTML='',t.divButtons.appendChild(t.button[a]),a++,t.button[a]=document.createElement("span"),t.button[a].classList.add("eShopButton"),t.button[a].innerHTML='',t.divButtons.appendChild(t.button[a]);var n=document.createElement("span");n.className="b_close white",t.divDimmer.appendChild(n),n.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,a=null,n=l.articles;for(t=0;t=0;n--){var i=a[n];"color"==i.type&&(i.palette&&i.palette.length||a.splice(n,1)),"texture"==i.type&&(i.medias&&i.medias.length||a.splice(n,1)),"material"==i.type&&(i.materials&&i.materials.length||a.splice(n,1))}if(a.length){if(a.forEach((function(e,t){e.configIndex=t})),t.configData=JSON.parse(JSON.stringify(a)),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,a=document.createElement("div");if(a.className="config color",e.name){a.classList.add("name");var n=document.createElement("p");n.className="brandingColor",n.innerText=e.name,a.appendChild(n)}e.materials;var i,r,s=document.createElement("div");for(a.appendChild(s),i=0;i set FULL config"),t=0;t{e.classList.remove("active")}),s.classList.add("active"),n.configData[i].valueIndex=o,a){var c={configData:e,value:o};n.sendConfigMessage(c)}}setConfigTexture(e,t,o,a=!0){var n=this,i=n.compEngine,r=e.configIndex,s=t.querySelector('.media[data-index="'+o+'"]'),l=s.getAttribute("data-uid"),d=s.getAttribute("data-indexMat"),c=i.getLibraryItemByUid(l);console.log("v3 configurator : load image texture");var u=new projectTexture(c,i);if(i.textures.push(u),u.load((function(){var e=i.materials[d];void 0===e.colorMap&&(console.log("NO color map for configurator mat"),e.colorMap={}),e.colorMap.uid=l,i.setupMaterials()})),t.querySelectorAll(".media").forEach(e=>{e.classList.remove("active")}),s.classList.add("active"),n.configData[r].valueIndex=o,a){var m={configData:e,value:o};n.sendConfigMessage(m)}}setConfigMaterial(e,t,o,a=!0){var n=this,i=e.configIndex,r=n.compEngine,s=r.getters.findCompItemByCompUid(e.compUid),l=r.getters.findCompMeshByCompUidAndIdMesh(e.compUid,e.idMesh),d=e.materials[o].uid;l.mats[e.indexMat]=d,r.data.materials.forEach((function(e,t){e.uid==d&&r.updateMaterial(s,t)}));var c=t.querySelector('.mat[data-index="'+o+'"]');if(t.querySelectorAll(".mat").forEach(e=>{e.classList.remove("active")}),c.classList.add("active"),n.configData[i].valueIndex=o,a){var u={configData:e,value:o};n.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,a=o.configIndex,n=document.querySelectorAll(".config")[a];"color"==o.type&&t.setConfigColor(o,n,e.value,!1),"texture"==o.type&&t.setConfigTexture(o,n,e.value,!1),"material"==o.type&&t.setConfigMaterial(o,n,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,a=t.moduleData;t.trackingEngine.simulatorSkyBox&&t.scene.attach(t.trackingEngine.simulatorSkyBox);var n={topColor:{type:"c",value:new THREE.Color(a.top)},bottomColor:{type:"c",value:new THREE.Color(a.bottom)},topAlpha:{type:"f",value:a.topOpacity},bottomAlpha:{type:"f",value:a.bottomOpacity},offset:{type:"f",value:40},exponent:{type:"f",value:.9}},i=new THREE.ShaderMaterial({uniforms:n,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,i),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 a=e.compEngine.isActionOnMeshOrCompItem(o);o==e.pointerValues.mesh&&a?(e.pointerValues.times++,1==e.pointerValues.times&&e.createRing(),e.pointerValues.timesa&&(t=a),e.crosshairDom.style.opacity=t,e.crosshairDom.style.transform="translate(-50%,-50%) scale("+o+")",o<1&&setTimeout(n,50)};n()}}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 a="gamingEvent: "+o.eventLabel;_app.ga.gaEvent({event:"button action",event_category:"scene",event_label:a})}}doEventAction(e){var t=this,o=t.compEngine,a=e.type,n=t.getVarByUid(e.varUid);if("switchState"==a&&e.stateUid){var i=o.modulesEngine.statesModule;if(!i)return;var r=1*e.stateUid;i.applyStateByUid(r)}if("increaseVar"==a){if(!n)return;n.value=1*n.value+1*e.value,simLog({what:"gaming",action:n.key+" => "+n.value,name:null,uid:n.uid}),t.updateDynamicTexts()}if("decreaseVar"==a){if(!n)return;n.value=1*n.value-1*e.value,simLog({what:"gaming",action:n.key+" => "+n.value,name:null,uid:n.uid}),t.updateDynamicTexts()}if("setVarValue"==a){if(!n)return;n.value=1*e.value,simLog({what:"gaming",action:n.key+" => "+n.value,name:null,uid:n.uid}),t.updateDynamicTexts()}if("setVarRandomValue"==a){if(!n)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:n.uid});var l=1*e.minValue+Math.floor(Math.random()*s);n.value=1*l,simLog({what:"gaming",action:n.key+" => "+n.value,name:null,uid:n.uid}),t.updateDynamicTexts()}if("copyVarValue"==a){if(!n)return;var d=t.getVarByUid(e.fromVarUid);if(!d)return;n.value=1*d.value,simLog({what:"gaming",action:n.key+" => "+n.value,name:null,uid:n.uid}),t.updateDynamicTexts()}if("toggleVarValue"==a){if(!n)return;if("boolean"!=n.type)return console.log("wrong var type, must be true/false"),void simLog({what:"gaming",action:"wrong var type, must be true/false"});n.value=!n.value,simLog({what:"gaming",action:n.key+" => "+n.value,name:null,uid:n.uid}),t.updateDynamicTexts()}if("ifThen"==a){if(!(n=t.getVarByUid(e.varUid)))return;var c=1*n.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&&cp&&(h=!0),"not"==u&&c!=p&&(h=!0),_config.isDebug&&console.log("if",c,u,p),h&&(_config.isDebug&&console.log("do then action",e.then.action.type),t.doEventAction(e.then.action))}if("gamingStartTimer"==a)new c_action(o,e,!1);if("gamingStopTimer"==a)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 a=o;if(!e.translations||!e.translations.enabled)return a;var n=this.currentLanguageCode,i=this.defaultLanguageCode,r=e.translations.la;if(void 0!==r[n])console.log("use ideal",n),a=r[n][t];else{if(console.log("use default",i),void 0===r[i])return console.log("BAD: warning: default translation not set"),a;a=r[i][t]}return a}getImageUid(e,t){if(!e.translation)return t;var o=t,a=this.currentLanguageCode,n=this.defaultLanguageCode,i=e.translations.la;if(void 0!==i[a])console.log("use ideal",a),o=i[a].uid;else{if(console.log("use default",n),void 0===i[n])return console.log("BAD: warning: default translation not set"),o;o=i[n].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,a="",n=e.loadingScreen;console.log(n);var i=o+n.background[t].webp;$("#loadingScreen").css({"background-color":n.background.color}),$("#loadingScreen").css({"background-size":n.background[t].fit}),i&&$("#loadingScreen").css({"background-image":'url("'+i+'")'});n=e.startScreen;console.log(n);i=o+n.background[t].webp;$("#startScreen").css({"background-color":n.background.color}),$("#startScreen").css({"background-size":n.background[t].fit}),i&&$("#startScreen").css({"background-image":'url("'+i+'")'});var r=n.startButton;a+="#startScreen .startButton{background:"+r.colors.bg+";color:"+r.colors.text+";top:"+r.top+"%;}";var s=document.createElement("style");s.innerHTML=a,document.getElementsByTagName("head")[0].appendChild(s)}}class virtualTourModule{constructor(e,t){var o=this;console.log("///// virtualTour Module"),o.moduleData=e,o.compEngine=t,o.assetsFolder=o.compEngine.genericAssetsFolder,o.addSheresModels(),o.setupCompItems(),o.cubeMapsTextures=[],o.compEngine.data.composition.forEach((function(e){if(e.cubeMap){var t={uid:e.cubeMap,textures:[]};o.cubeMapsTextures.push(t)}})),console.log("set rootXR y position to 0 1 1"),o.compEngine.data.tracking.floating[_browser.device].position={x:0,y:1,z:1},o.compEngine.data.settings.envMap.index=0}saveCubeTexture(e,t,o){console.log("saveCubeTexture",e,t);var a=new THREE.Texture(o);a.colorSpace=THREE.SRGBColorSpace,a.wrapS=a.wrapT=THREE.ClampToEdgeWrapping,a.center=new THREE.Vector2(.5,.5),a.flipY=!1,2!=t&&3!=t&&(a.rotation=Math.PI),3==t&&(a.rotation=Math.PI/2),2==t&&(a.rotation=Math.PI/-2),a.needsUpdate=!0,this.cubeMapsTextures.forEach((function(o){o.uid==e&&(o.textures[t]=a)}))}getTextureByUidAndIndex(e,t){var o=null;return this.cubeMapsTextures.forEach((function(a){a.uid==e&&(o=a.textures[t])})),o}addSheresModels(){console.log("addSheresModels * * * * * * * *");var e=this.compEngine,t=e.data.library,o={type:"model",format:"gltf",scaleToFit:10,url:this.assetsFolder+"360/sphere360-2-mats.glb",external:!0,textures:[],flipTextures:1,fixedMeshesOrder:!0,meshes:[{idm:0},{idm:1}],name:"360 sphere 2 mats",alwaysNeeded:!0,uid:2};t.push(o),e.library.injectItem(o),e.data.composition.forEach((function(e,t){console.log("one scene - add sphere as compItem");var o=t+1001,a=e.sphereMats;if(a){var n=1;2==a.length&&(n=2),4==a.length&&(n=4);var i={type:"model",name:"sphere "+n,compUid:o,uid:n,transform:{pos:{x:0,y:0,z:0},rot:{x:0,y:180,z:0},sca:{xyz:10}},meshes:[{idm:0,mats:[a[0]]},{idm:1,mats:[a[1]]}]};i&&!e.useCubeMap&&e.items.push(i)}}))}setupCompItems(){this.compEngine.data.composition.forEach((function(e,t){var o=JSON.parse(JSON.stringify(e.items));e.items=[],o.forEach((function(o,a){if("360Texture"!=o.type){var n,i=JSON.parse(JSON.stringify(o)),r=1001+t+""+a,s=0,l=0,d=0,c=null;if("image"==i.type)s=(s=50-i.top)/50*90,l=(l=50-i.left)/50*180,(c=new THREE.Group).rotateY(THREE.MathUtils.degToRad(l)),c.rotateX(THREE.MathUtils.degToRad(s)),s=THREE.MathUtils.radToDeg(c.rotation.x),l=THREE.MathUtils.radToDeg(c.rotation.y),d=THREE.MathUtils.radToDeg(c.rotation.z),i.transform.pos.y=0,i.transform.pos.z=-95,i.transform.rot.x=90,i.flat=!0,(n=o.actions)&&n[0]&&"changeScene"==n[0].type&&(i.transform.rot.x=30,i.flat=!1);if("video"==i.type)s=(s=50-i.top)/50*90,l=(l=50-i.left)/50*180,(c=new THREE.Group).rotateY(THREE.MathUtils.degToRad(l)),c.rotateX(THREE.MathUtils.degToRad(s)),s=THREE.MathUtils.radToDeg(c.rotation.x),l=THREE.MathUtils.radToDeg(c.rotation.y),d=THREE.MathUtils.radToDeg(c.rotation.z),i.transform.pos.y=0,i.transform.pos.z=-95,i.transform.rot.x=90,i.flat=!0,(n=o.actions)&&n[0]&&"changeScene"==n[0].type&&(i.transform.rot.x=30,i.flat=!1);"text"==i.type&&(s=(s=50-i.top)/50*90,l=(l=50-i.left)/50*180,(c=new THREE.Group).rotateY(THREE.MathUtils.degToRad(l)),c.rotateX(THREE.MathUtils.degToRad(s)),s=THREE.MathUtils.radToDeg(c.rotation.x),l=THREE.MathUtils.radToDeg(c.rotation.y),d=THREE.MathUtils.radToDeg(c.rotation.z),i.transform.pos.y=0,i.transform.pos.z=-95,i.transform.rot.x=90,i.flat=!0);var u={type:"group",name:"g "+r,compUid:r,transform:{pos:{x:0,y:0,z:0},rot:{x:s,y:l,z:d},sca:{xyz:10}},items:[i]};e.items.push(u),c=null}}))}))}}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(false,!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 a=document.createElement("img");a.src=o.arButtonPng,t.appendChild(a)}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 a=o.trackingSettings.fixed.scale/100;o.rootComposition.scale.set(a,a,a)}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,a=e.camera,n=-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,a);var i=new THREE.BoxHelper(t.rootComposition,16755200);_config.isDebug&&o.add(i),i.geometry.computeBoundingBox();const r=new THREE.Box3;r.copy(i.geometry.boundingBox).applyMatrix4(i.matrixWorld);var s=new THREE.BoxGeometry(.05,.05,.05),l=new THREE.MeshNormalMaterial,d=new THREE.Mesh(s,l);d.position.set(r.min.x,r.max.y,r.max.z),o.add(d);var c=new THREE.Mesh(s,l);c.position.set(r.max.x,r.max.y,r.max.z),o.add(c);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||(d.visible=!1,c.visible=!1,u.visible=!1,m.visible=!1,p.visible=!1);o.position.set(0,n,0),a.position.set(0,2,7),e.controls.update(),e.renderer.render(e.compEngine.scene3,a);var g=!1,h=e.getScreenPosition(d),v=e.getScreenPosition(u),f=h.y-v.y;var y=e.getScreenPosition(c).x-h.x;var E,b=e.getScreenPosition(p);var w=0;f>.01&&y>3*f&&(console.log("flat composition"),w=-.4);for(E=0;E<12;E++){if(f<1.6&&y<1.6){g,a.translateZ(-1),E<3&&a.translateZ(-1);h=e.getScreenPosition(d),v=e.getScreenPosition(u),y=e.getScreenPosition(c).x-h.x;f=(f=h.y-v.y).toFixed(2),y=y.toFixed(2)}if(f>1.8||y>1.9){g,a.translateZ(1),E<3&&a.translateZ(1);h=e.getScreenPosition(d),v=e.getScreenPosition(u),y=e.getScreenPosition(c).x-h.x;f=(f=h.y-v.y).toFixed(2),y=y.toFixed(2)}b.yw+.1&&(n-=.2,E<3&&(n-=.2),o.position.set(0,n,0),b=e.getScreenPosition(p))}if("swing"==e.skinInline.animation.type){o.rotation.set(0,0,0);var T=1*e.skinInline.animation.angle,_=500*(5-1*e.skinInline.animation.speed),M={x:0,y:THREE.MathUtils.degToRad(-1*T),z:0},C={x:0,y:THREE.MathUtils.degToRad(T),z:0};e.tweenGroupSwing=new TWEEN.Group;var S=new TWEEN.Tween(o.rotation,e.tweenGroupSwing).to(M,_).easing(TWEEN.Easing.Quadratic.InOut),x=new TWEEN.Tween(o.rotation,e.tweenGroupSwing).to(C,_).easing(TWEEN.Easing.Quadratic.InOut);S.chain(x),x.chain(S),S.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 a=document.createElement("span");a.id="b_closeQR",a.className="b_close",t.appendChild(a),$("#b_closeQR").on("click",(function(){e.setMode("ddd")})),_$body.addClass("inlineQR");var n=_shareURL;if(n+="#xrp"+e.compEngine.url,_sessionID&&(n+="xrid"+_sessionID),displayQRCode(n,t,190),"image"==e.compEngine.trackingMode){var i=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),i.src=r,i.className="marker",i.title="",t.appendChild(i),$("#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 a=document.createElement("span");a.id="b_exit_webvr",a.className="button",a.innerHTML="exit VR mode",t.appendChild(a),$("#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 a=new THREE.BufferGeometry;a.setAttribute("position",new THREE.Float32BufferAttribute([0,0,0,0,0,-1],3));var n=new THREE.LineBasicMaterial({color:16777215,opacity:.5,transparent:!0});_controller1.add(new THREE.Line(a,n)),_controller2.add(new THREE.Line(a,n)),a=new THREE.BoxGeometry(.02,.02,.02),n=new THREE.MeshBasicMaterial;var i=new THREE.Mesh(a,n);_controller1.children[0].add(i),i.position.set(0,0,-4),i.visible=!1;var r=new THREE.Mesh(a,n);_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],a=o.children[0],n=new THREE.Raycaster,i=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 d=new THREE.Vector3;o.getWorldPosition(d);var c=new THREE.Vector3;a.getWorldPosition(c),n.set(d,i.subVectors(c,d).normalize()),n.far=r.subVectors(c,d).length();var u=n.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,a=o.trackingSettings;function n(n){"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"}),n.addEventListener("end",r),e.renderer.xr.setSession(n),e.renderer.xr.setUserCamera(_app.trackingEngine.camera),_$body.addClass("webXRSession"),_currentVRSession=n,e.addControllers();var i=0,s=a.headset.position,l=a.headset.scale.xyz/100;if("floating"==e.compEngine.trackingMode){t.position.z=-1*s.z/100/l,i=-1*s.y/100/l,o.rootOrientation.rotation.set(0,0,0);var d=.2/l;t.scale.set(d,d,d)}if("slam"==e.compEngine.trackingMode){t.position.z=-1*s.z/100/l,i=-1*s.y/100/l;d=.2/l;t.scale.set(d,d,d)}"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,i,t.position.z)}function i(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(a.headset.passthrough&&a.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(n).catch(i)}else{e.immersiveMode="vr";var l={optionalFeatures:["local-floor","bounded-floor"]};navigator.xr.requestSession("immersive-vr",l).then(n).catch(i)}}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 a=document.createElement("img");a.src=e.playerAssetsFolder,_browser.webp?a.src+=t.introButton.webp:a.src+=t.introButton.png,a.alt="",a.title="",o.appendChild(a)}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 a=o.texts;(a.loading||""===a.loading)&&t.text(a.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 a=document.getElementById("startScreen");(i=a.querySelector(".startButton"))&&i.parentElement.removeChild(i);var n=_mainData.skin,i=document.createElement("span"),r=n.assetsFolder;if(_config.externalHost&&(r="skin-assets/"),n.v>=2)if(n.startScreen.startButton.useImage&&n.startScreen.startButton.webp){i.className="startButton image";var s=document.createElement("img");s.alt="",s.title="",s.src=r+n.startScreen.startButton.webp,i.appendChild(s)}else i.className="startButton flash",i.innerText=n.startScreen.startButton.label;1==n.v&&(i.className="startButton flash",i.innerText="Start"),a.insertBefore(i,a.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 a=!1;_browser.ios||("chrome"==_browser.name&&_browser.version>=64&&(a=!0),"samsungbrowser"==_browser.name&&(a=!0),"edge"==_browser.name&&(a=!0)),a&&navigator.permissions&&navigator.permissions.query({name:e}).then(a=>{if(addToLog("perm "+e+" "+a.state),t&&"denied"==a.state){var n="";"samsungbrowser"==_browser.name?(n="To continue, allow the camera in the settings:",n+="\n\n1. tap the ☰ icon",n+="\n2. Open Settings",n+="\n3. Select Privacy and security",n+="\n4. Select Delete browsing data",n+="\n5. Make sure Location access data is selected and tap on Delete",n+="\n\nYay!"):n=getText("toContinueAllowCameraWebsite"),o.showScreen({text:n,errorName:a.state,infos:"permission api camera"})}a.onchange=t=>{if("change"===t.type){if("camera"==e&&"granted"==a.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 a=document.createElement("div");a.id="mainLog",a.innerHTML=o,_body.appendChild(a),addToLog("fb: "+_browser.isFacebook)}var n=document.createElement("div");n.id="errorScreen",_body.appendChild(n);var i="",r=e.errorName,s=e.h?e.h:"Oops!",l="";if("old browser"==r&&(r=null),"NotFoundError"==r&&(i="No camera detected"),"NotAllowedError"==r&&(i="(Access to camera has been denied)",l="Access to camera has been denied"),"AbortError"==r&&(i="\nCould not access camera.\n Already used in another tab or by another app?"),"NotReadableError"==r&&(i="\nCould not access camera.\n Already used by another app?"),"NotAllowedError"==e.errorName&&_browser.android&&_browser.inApp&&(i="This app does not allow camera access\n",e.showHelp=!0),e.text){var d=e.text;if(d==getText("pleaseAllowAccessToTheCamera")){var c=!0;_browser.ios&&(c=!1),"firefox"==_browser.name&&(c=!1),_browser.android&&"firefox"==_browser.name&&(c=!0),c&&"NotAllowedError"==e.errorName&&(d+="\n\n"+getText("toContinueAllowCameraWebsite"))}i=d}e.showHelp&&(i+="\n\nTo continue, \nfollow instructions in the red box."),"samsungbrowser"==_browser.name&&(i+="\n\nMake sure 'video autoplay' is enabled\n\n(settings -> useful features)"),r&&(i+='\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=i,u.appendChild(m),u.appendChild(p),n.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 ...'",n.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 v=document.createElement("p");v.id="systemDetails";var f="";l&&(f=l+"\n\n"),f+=_browser.os+" | ",_browser.ios&&_browser.iOSVersion&&(f+="iOS "+_browser.iOSVersion+" | "),f+=_browser.name+" "+_browser.version,_browser.inApp&&(f+=" (inside app)"),f+=" | "+_config.projectURL,v.innerText=f,n.appendChild(v),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 a=atob("aHR0cHM6Ly94ci5wbHVzL2dldC1wcm9qZWN0L3JlcG9ydC8="),n=new XMLHttpRequest;n.open("POST",a,!0),n.onload=function(){n.status>=200&&n.status<400||console.log("error report")},n.onerror=function(){console.log("error report b")},n.send(o)}}}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,a=_browser.iOSVersion,n=!1;if("MacIntel"===navigator.platform&&navigator.maxTouchPoints>1&&(n=!0),a&&a<14&&!n)return t="Unfortunately, \naugmented reality on the web requires iOS 14 or newer.\n",this.ok=0,void this.showFail(t);if(_browser.inApp&&a&&a<14.3&&(o=!0,e="webview < 14.3"),!_browser.userMedia&&a&&a>=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 i={};return _browser.inApp&&(i.showHelp=!0),e&&(i.errorName=e),void this.showFail(t,i)}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,a.name),e.pauseVideoByCompUid(t.compUid))}),document.body.appendChild(n);var l=new THREE.VideoTexture(n),d={node:n,compUid:t.compUid,uid:t.uid,lastOrder:null,audio:r,muted:s,texture:l};e.compItemsVideos.push(d)}}))}))}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(a){if(a.compUid==e){var n=a.node,i=a.uid;""==n.src&&_domVideos.forEach((function(t){t.uid==i&&(console.log("set src from lib -----",e),n.src=t.url)}));var r=a.muted;o.muteVideoByCompUid(e,r),t&&(n.currentTime=0),a.lastOrder="play",o.updateVideoControls(e),n.play().then((function(){})).catch((function(e){addToLog("ERROR play compVideo "+a.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(a){a.compUid==e&&(a.muted=null!==t?t:!a.muted,a.node.muted=a.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 a=null;t.compItemsVideos.forEach((function(t){t.compUid==e&&(a=t)}));var n=t.compEngine.getters.getThreejsItemByCompUid(t.compEngine.rootComposition,e);n&&("play"==a.lastOrder?(n.getObjectByName("play").visible=!1,n.getObjectByName("pause").visible=!0):(n.getObjectByName("play").visible=!0,n.getObjectByName("pause").visible=!1),n.parent.getObjectByName("mute")&&n.parent.getObjectByName("unmute")&&(a.muted?(n.parent.getObjectByName("unmute").visible=!0,n.parent.getObjectByName("mute").visible=!1):(n.parent.getObjectByName("unmute").visible=!1,n.parent.getObjectByName("mute").visible=!0)))}}}class checkUsageUtils{constructor(e){this.data=e}getLibItemTimesUsed(e){var t=this;if(!e)return{};var o=t.data,a=t.data.modules,n=e.uid,i=0,r=0,s=0,l=0,d=0,c=0,u=0;o.composition&&o.composition.forEach((function(e){e.items&&e.items.forEach((function(e){if(e.uid==n&&i++,t.checkIfUsedInActions(e.actions,n)&&r++,"video"==e.type&&e.videoControls&&e.videoControls.enabled){var o=e.videoControls.buttons;o.play&&o.play.uid==n&&i++,o.pause&&o.pause.uid==n&&i++,o.stop&&o.stop.uid==n&&i++,o.mute&&o.mute.uid==n&&i++,o.unmute&&o.unmute.uid==n&&i++}e.meshes&&e.meshes.forEach((function(e){t.checkIfUsedInActions(e.actions,n)&&r++}))}))})),o.settings.preview.bg&&"medias"==o.settings.preview.bg.type&&(o.settings.preview.bg.medias.uidImage==n&&s++,o.settings.preview.bg.medias.uidVideo==n&&s++),a.states&&a.states.enabled&&a.states.states&&a.states.states.forEach((function(e){e.enter&&e.enter.forEach((function(e){"playAudio"==e.type&&e.uidAudio==n&&d++}))})),a.qrReader&&a.qrReader.enabled&&a.qrReader.codes&&a.qrReader.codes.forEach((function(e){t.checkIfUsedInActions(e.actions,n)&&d++})),a.barcodeReader&&a.barcodeReader.enabled&&a.barcodeReader.codes&&a.barcodeReader.codes.forEach((function(e){t.checkIfUsedInActions(e.actions,n)&&d++})),a.configurator&&a.configurator.enabled&&a.configurator.configs&&a.configurator.configs.forEach((function(e){"texture"==e.type&&e.medias&&e.medias.forEach((function(e){e.uid==n&&d++}))})),o.materials&&o.materials.forEach((function(e){e.colorMap&&e.colorMap.uid==n&&l++,e.normalMap&&e.normalMap.uid==n&&l++,e.metalnessMap&&e.metalnessMap.uid==n&&l++,e.emissiveMap&&e.emissiveMap.uid==n&&l++}));var m=o.tracking;"slam"==m.trackingMode&&m.slam.webXR&&m.slam.webXR.reticle&&m.slam.webXR.reticle.uid==n&&c++,"image"==m.trackingMode&&(o.branding.helper&&o.branding.helper.hintImage&&o.branding.helper.hintImage.uid==n&&u++,o.branding.help&&o.branding.help.image&&o.branding.help.image.uid==n&&u++);var p=!1;return(i||r||s||l||d||c||u)&&(p=!0),{used:p,composition:i,actions:r,cover:s,materials:l,modules:d,tracking:c,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(a){"model"==a.type&&a.meshes&&a.meshes.forEach((function(a){a.mats.includes(e)&&(t.includes(o.uid)||t.push(o.uid))})),a.items&&a.items.forEach((function(a){"model"==a.type&&a.meshes&&a.meshes.forEach((function(a){a.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(a){a.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(a){"setMaterial"==a.type&&a.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,a=o.url;_browser.webp&&o.webp&&(a=o.webp);var n=t.compEngine.projectFolder+a;n=n+"?"+o.r,t.loadImageTextureClassic(n,e)}loadImageTextureClassic(e,t){var o=this,a=new THREE.TextureLoader;o.texture=a.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 a=e.color,n=e.specular,i=e.reflectivity,r=e.roughness,s=e.metalness,l=e.shininess,d=e.chroma,c=e.opacity;if(void 0===r&&(r=1,s=1),void 0===n&&(n="#111111"),void 0===i&&(i=.5),void 0===l&&(l=0),void 0===c&&(c=1),"MeshStandardMaterial"==o&&(t=new THREE.MeshStandardMaterial({color:a,roughness:r,metalness:s})),"MeshPhongMaterial"==o&&(t=new THREE.MeshPhongMaterial({color:a,specular:n,reflectivity:i,shininess:l})),"MeshBasicMaterial"!=o||d||(t=new THREE.MeshBasicMaterial({color:a})),"MeshToonMaterial"==o&&(t=new THREE.MeshToonMaterial({color:a})),"VideoMaterial"!=o||d||(t=new THREE.MeshBasicMaterial({color:a})),d&&("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}",a="\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:a,transparent:!0})}if("MaskMaterial"==o&&(t=new THREE.MeshBasicMaterial({colorWrite:!1}),c=1),t){t.name=e.name,t.alphaTest=.02,t.opacity=c,e.flatShading&&(t.flatShading=!0),e.doubleSide?t.side=THREE.DoubleSide:t.side=THREE.FrontSide,1!=c&&(t.transparent=!0);var v={uid:e.uid,data:e};v.type=o,v.material=t,this.materials.push(v)}else console.log("skipped build mat")}assignTextures(e,t,o){var a=this,n=null,i=null,r=null,s=null,l=null,d=!1;"MeshPhongMaterial"!=t&&"MeshStandardMaterial"!=t&&"MeshToonMaterial"!=t||(d=!0),e.colorMap&&e.colorMap.uid&&(n=a.getLibraryItemByUid(e.colorMap.uid)),e.normalMap&&e.normalMap.uid&&d&&(i=a.getLibraryItemByUid(e.normalMap.uid)),e.metalnessMap&&e.metalnessMap.uid&&(r=a.getLibraryItemByUid(e.metalnessMap.uid)),e.emissiveMap&&e.emissiveMap.uid&&(s=a.getLibraryItemByUid(e.emissiveMap.uid)),e.aoMap&&e.aoMap.uid&&(l=a.getLibraryItemByUid(e.aoMap.uid)),n&&!n.embed&&(o.map=a.setupMaterialMap(o,n),o.map&&void 0===o.map.image&&(o.map=null),"VideoMaterial"!=t||e.chroma||o.map&&(o.map.colorSpace=THREE.SRGBColorSpace)),i&&!i.embed&&d&&(o.normalMap=a.setupMaterialMap(o,i)),"MeshStandardMaterial"==t&&(r&&!r.embed&&(o.metalnessMap=a.setupMaterialMap(o,r),o.roughnessMap=a.setupMaterialMap(o,r)),s&&!s.embed&&(o.emissiveMap=a.setupMaterialMap(o,s),o.emissiveMap&&(o.emissive={r:1,g:1,b:1})),l&&!l.embed&&(o.aoMap=a.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,a){var n,i=this,r=i.getMaterialObjByUid(e),s=r.data,l=r.material,d=r.type,c=s.colorMap,u=s.normalMap,m=s.metalnessMap,p=s.emissiveMap,g=s.aoMap,h=!1;("MeshPhongMaterial"!=d&&"MeshStandardMaterial"!=d&&"MeshToonMaterial"!=d||(h=!0),c&&c.embed)&&((n=i.getModelTexture(e,"color",t,a,o.name))&&(l.map=n.map),o.material.transparent&&(l.transparent=!0));l.map&&void 0===l.map.image&&(l.map=null),h&&u&&u.embed&&(n=i.getModelTexture(e,"normal",t,a,o.name))&&(l.normalMap=n.map),"MeshStandardMaterial"==d&&(m&&m.embed&&(n=i.getModelTexture(e,"metalness",t,a,o.name))&&(l.metalnessMap=n.map,l.roughnessMap=n.map),p&&p.embed&&(n=i.getModelTexture(e,"emissive",t,a,o.name))&&(l.emissiveMap=n.map),l.emissiveMap&&(l.emissive={r:1,g:1,b:1}),g&&g.embed&&(n=i.getModelTexture(e,"ao",t,a,o.name))&&(l.aoMap=n.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&&n.status<400){var e=null;try{e=JSON.parse(n.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")},n.onerror=function(){console.log("error b")},n.send()}function projectDataLoaded(e){_mainData=e;var t=e.projectData.modules;if(t.languages&&t.languages.enabled){var o=new languagesModule(t.languages),a=o.currentLanguageCode;t.languages.skins&&t.languages.skins[a]&&(e.skin=t.languages.skins[a],o.applySkin())}var n=e.skin;_screens.intro=new introScreen(n),_screens.loading=new loadingScreen,_screens.start=new startScreen(n),_screens.loading.setTexts(e);var i=!1;_config.isPlayer&&(i=!0),startApp(e,i),_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,a=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"!=a&&_$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"!=a)if("face"!=a){if("slam"==a){var n=!1;return _browser.ios&&o.tracking.slam.ios&&o.tracking.slam.ios.useGeneratedUSDZ&&o.tracking.slam.usdz&&o.tracking.slam.usdz.enabled&&(n=!0),void(n?(addToLog("gen USDZ"),gyroCheckSuccess(e)):checkGyro(e))}"floating"!=a?"image"==a&&_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"!=a||(_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,a=_config.shareText,n=_shareURL,i=_app.compEngine.data.branding;if(i.main.social&&null!=i.main.social.title){var r=i.main.social;o=r.title,a=r.text}navigator.share({title:o,text:a,url:n}).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 a=document.createElement("script");return a.onload=function(){displayQRCode(e,t,o)},a.src=_config.libsFolder+"qr-code-styling150.js",void document.head.appendChild(a)}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)}));