)),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch())}},jb=class extends Yt{constructor(e,r){super(e);this.managers=r;this.wheelEventsPerObject=new Map;this.scrollEventsPerObject=new Map;this.isInview=!0;this.handleResize=()=>{[...this.scrollEventsPerObject.entries()].forEach(([e,r])=>{r.forEach(i=>i.handleResize())})};this.onScroll=e=>{if(!this.isInview)return;let r={y:window.scrollY,x:window.scrollX};[...this.scrollEventsPerObject.entries()].forEach(([i,s])=>{i.dispatchEvent({type:"beginEvent",eventName:"Scroll",scroll:r}),s.forEach(o=>o.dispatch(r))})};this.onWheel=e=>{!this.isInview||e.ctrlKey||[...this.wheelEventsPerObject.entries()].forEach(([r,i])=>{r.dispatchEvent({type:"beginEvent",eventName:"Scroll",deltaY:e.deltaY}),i.forEach(s=>s.dispatch(e.deltaY))})};this.onUserEvent=({eventName:e,target:r,reverse:i})=>{if(!e||!r)return;let s=Qo(e);s&&s==="Scroll"&&(r.dispatchEvent({type:"beginEvent",eventName:"Scroll"}),this.wheelEventsPerObject.get(r)?.forEach(o=>{o.dispatchUserEvent(i)}))}}connect(){let{page:e,sharedAssets:r,domElement:i,isExport:s}=this.eventContext,o=a=>{if(!!a.data?.events.length){for(let{id:l,data:c}of a.data.events)if(!c.disabled&&c.type==="Scroll")if(c.trigger==="load"||!s){let u=new lM(l,c,a,e,r,this.managers);this.wheelEventsPerObject.has(a)?this.wheelEventsPerObject.get(a)?.push(u):this.wheelEventsPerObject.set(a,[u])}else{let u=new cM(l,c,a,e,r,i,this.managers);this.scrollEventsPerObject.has(a)?this.scrollEventsPerObject.get(a)?.push(u):this.scrollEventsPerObject.set(a,[u])}}};e.traverseEntity(a=>{(a instanceof Er||a instanceof ur)&&a.frame?.traverse(l=>{o(l)}),o(a)}),this.intersectionObserver=new IntersectionObserver(a=>{let l=a[0];l&&(this.isInview=l.isIntersecting)},{root:null}),this.intersectionObserver.observe(this.eventContext.domElement),[...this.wheelEventsPerObject.entries()].forEach(([a,l])=>{l.forEach(c=>c.connect()),a.addEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([a,l])=>{l.forEach(c=>c.connect()),a.addEventListener("userEvent",this.onUserEvent)}),[...this.wheelEventsPerObject.values()].some(a=>a.length)&&(this.domEventsNeeded.add("wheel"),window.addEventListener("wheel",this.onWheel)),[...this.scrollEventsPerObject.values()].some(a=>a.length)&&(this.domEventsNeeded.add("scroll"),window.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.handleResize))}disconnect(){window.removeEventListener("wheel",this.onWheel),window.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.handleResize),this.intersectionObserver.unobserve(this.eventContext.domElement),this.domEventsNeeded.clear(),[...this.wheelEventsPerObject.entries()].forEach(([e,r])=>{r.forEach(i=>i.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)}),[...this.scrollEventsPerObject.entries()].forEach(([e,r])=>{r.forEach(i=>i.disconnect()),e.removeEventListener("userEvent",this.onUserEvent)})}};var uM=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.actions=kt(e,e.actions,i,s,o,r)}disconnect(){hr(this.actions)}dispatch(){this.actions.Transition.forEach(t=>{t.play()}),this.actions.Animation.forEach(t=>{t.play()}),this.actions.SwitchCamera.forEach(t=>{t.play()}),this.actions.SceneTransition.forEach(t=>{t.dispatch()}),this.actions.Reset.forEach(t=>t.dispatch()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch()),this.actions.Create.forEach(t=>{t.dispatchFromStart()}),this.actions.Destroy.forEach(t=>{t.dispatchFromStart()})}dispatchAfter(t){this.actions.Audio.forEach(e=>{(e.interaction.data.triggerAfter??"any")===t&&(e.interaction instanceof Wo?e.interaction.audioPlayer.play():e.interaction instanceof Ff&&e.interaction.dispatch())}),this.actions.Video.forEach(e=>{let r=e.interaction.data.triggerAfter??"autoplay";r===t&&(e.interaction instanceof ja?e.interaction.play(r==="autoplay"):e.interaction instanceof Uf&&e.interaction.dispatch())}),this.actions.Particles.forEach(e=>{(e.data.triggerAfter??"any")===t&&e.dispatchBasic()})}dispatchUserEvent(t){this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),t?(this.actions.Transition.forEach(e=>e.reverseFromCurrent()),this.actions.Animation.forEach(e=>e.reverseFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.reverseFromCurrent())):(this.actions.Transition.forEach(e=>e.playFromCurrent()),this.actions.Animation.forEach(e=>e.playFromCurrent()),this.actions.SwitchCamera.forEach(e=>e.playFromCurrent())),this.actions.SceneTransition.forEach(e=>e.dispatch()),this.actions.Reset.forEach(e=>e.dispatch()),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch()}),this.actions.Audio.forEach(e=>{e.interaction instanceof Wo?e.interaction.audioPlayer.play():e.interaction instanceof Ff&&e.interaction.dispatch()}),this.actions.Video.forEach(e=>{e.interaction instanceof ja?e.interaction.play():e.interaction instanceof Uf&&e.interaction.dispatch()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()})}},Hb=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this.eventsPerObject=new Map;this.eventsAfterPerObject=new Map;this.onMouseDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,r])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),r.forEach(i=>{i.dispatchAfter("mouseDown")})})};this.onKeyDown=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,r])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),r.forEach(i=>{i.dispatchAfter("keyDown")})})};this.onAny=()=>{let{domElement:e,isExport:r}=this.eventContext,i=r?document:e;i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([s,o])=>{s.dispatchEvent({type:"beginEvent",eventName:"Start"}),o.forEach(a=>{a.dispatchAfter("any")})})};this.onSceneTransitionAudioVideoPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,r])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),r.forEach(i=>{i.actions.Audio.forEach(s=>{s.interaction instanceof Wo&&s.interaction.audioPlayer.play()}),i.actions.Video.forEach(s=>{let o=s.interaction.data.triggerAfter??"autoplay";s.interaction instanceof ja&&s.interaction.play(o==="autoplay")}),i.actions.Particles.forEach(s=>{s.dispatchBasic()})})})};this.onPlay=()=>{[...this.eventsAfterPerObject.entries()].forEach(([e,r])=>{e.dispatchEvent({type:"beginEvent",eventName:"Start"}),r.forEach(i=>{i.dispatchAfter("autoplay")})})};this.onUserEvent=({eventName:e,target:r,reverse:i})=>{if(!e||!r)return;let s=Qo(e);s&&s==="Start"&&(r instanceof rr||r.dispatchEvent({type:"beginEvent",eventName:"Start"}),this.eventsPerObject.get(r)?.forEach(o=>{o.dispatchUserEvent(i)}),this.eventsAfterPerObject.get(r)?.forEach(o=>{o.dispatchUserEvent(i)}))}}connect(){let{sharedAssets:e,page:r}=this.eventContext,i=s=>{if(!!s.data?.events.length)for(let{id:o,data:a}of s.data.events){if(a.disabled||a.type!=="Start")continue;let l=new uM(o,a,s,r,e,this.eventManager);(l.actions.Transition.length||l.actions.Animation.length||l.actions.SwitchCamera.length||l.actions.Create.length||l.actions.Destroy.length||l.actions.SceneTransition.length||l.actions.Reset.length||l.actions.SetVariable.length||l.actions.DynamicVariablePlay.length||l.actions.ClearLocalStorage.length||l.actions.UserAPI.length)&&(this.eventsPerObject.has(s)?this.eventsPerObject.get(s)?.push(l):this.eventsPerObject.set(s,[l])),l.actions.Audio.length&&(this.eventsAfterPerObject.has(s)?this.eventsAfterPerObject.get(s)?.push(l):this.eventsAfterPerObject.set(s,[l])),l.actions.Video.length&&(this.hasVideoAction=!0,this.eventsAfterPerObject.has(s)?this.eventsAfterPerObject.get(s)?.push(l):this.eventsAfterPerObject.set(s,[l])),l.actions.Particles.length&&(this.eventsAfterPerObject.has(s)?this.eventsAfterPerObject.get(s)?.push(l):this.eventsAfterPerObject.set(s,[l]))}};if(r.traverseEntity(s=>{(s instanceof Er||s instanceof ur)&&s.frame?.traverse(o=>{i(o)}),i(s)}),[...this.eventsAfterPerObject.values()].some(s=>s.length)){if(this.eventManager.activateCount===0){let{domElement:s,isExport:o}=this.eventContext,a=o?document:s;a.addEventListener("pointerdown",this.onMouseDown,{once:!0}),a.addEventListener("mousedown",this.onMouseDown,{once:!0}),document.addEventListener("keydown",this.onKeyDown,{once:!0}),a.addEventListener("pointerdown",this.onAny),a.addEventListener("mousedown",this.onAny),document.addEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([l,c])=>{l.addEventListener("userEvent",this.onUserEvent)})}else this.onSceneTransitionAudioVideoPlay();this.onPlay()}[...this.eventsPerObject.entries()].forEach(([s,o])=>{s.dispatchEvent({type:"beginEvent",eventName:"Start"}),o.forEach(a=>a.dispatch()),s.addEventListener("userEvent",this.onUserEvent)})}disconnect(){if([...this.eventsAfterPerObject.values()].some(e=>e.length)){let{domElement:e,isExport:r}=this.eventContext,i=r?document:e;i.removeEventListener("pointerdown",this.onMouseDown),i.removeEventListener("mousedown",this.onMouseDown),document.removeEventListener("keydown",this.onKeyDown),i.removeEventListener("pointerdown",this.onAny),i.removeEventListener("mousedown",this.onAny),document.removeEventListener("keydown",this.onAny),[...this.eventsAfterPerObject.entries()].forEach(([s,o])=>{s.removeEventListener("userEvent",this.onUserEvent),o.forEach(a=>a.disconnect())})}[...this.eventsPerObject.entries()].forEach(([e,r])=>{e.removeEventListener("userEvent",this.onUserEvent),r.forEach(i=>i.disconnect())}),this.eventsPerObject.clear(),this.eventsAfterPerObject.clear()}};var Wb=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.initialDisabled=!1;this.actions=kt(e,e.actions,i,s,o,r),this.target=e.target}disconnect(){hr(this.actions)}dispatch(t){this.initialDisabled||(this.actions.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this,e.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Collision"}),this.actions.Transition.forEach(e=>{e.data.runMode==="Toggle"?e.toggle():e.play()}),this.actions.Animation.forEach(e=>{e.data.runMode==="Toggle"?e.toggle():e.play()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Link.forEach(e=>{e.dispatch()}),this.actions.Reset.forEach(e=>{e.dispatch()}),this.actions.Create.forEach(e=>{e.dispatch()}),this.actions.Destroy.forEach(e=>{e.dispatch(t??!1)}),this.actions.SetVariable.forEach(e=>e.checkConditions()),this.actions.SetVariable.forEach(e=>e.dispatch()),this.actions.DynamicVariablePlay.forEach(e=>e.dispatch()),this.actions.Audio.forEach(e=>{e.dispatchBasic()}),this.actions.Particles.forEach(e=>{e.dispatchBasic()}),this.actions.Video.forEach(e=>{e.dispatchBasic()}),this.actions.ClearLocalStorage.forEach(e=>e.dispatch()),this.actions.UserAPI.forEach(e=>e.dispatch()))}};var qb=class extends Yt{constructor(e,r,i,s,o){super(e);this.sharedVariables=r;this.eventManager=i;this.needsMouse=s;this.needsRaycast=o;this.dynamicVars=[];this.variablesToWatch=[];this.prevMouseProperty=null;this.prevRaycastProperty=null;this.pauseTime=0;this.isOutOfFocus=!1;this.events=[];this.onFrame=e=>{let r=this.eventContext.sharedAssets;if(this.rafId=window.requestAnimationFrame(this.onFrame),this.isOutOfFocus)return;let i=new Date,s=[],o=[];for(let c=0;c=h)if(this.dynamicVars[c].last=e,this.dynamicVars[c].expectedTime+=g,f.dynamicVariableType==="random"){let y=f.min+Math.random()*(f.max-f.min),v=f.decimals;y=Math.round(y*Math.pow(10,v))/Math.pow(10,v),r.updateVariable(u,y),s.push(u),this.eventManager.requestRender()}else if(f.dynamicVariableType==="counter"){let y=r.getVariable(u),v=r.getDynamicVariableToggleIsForward(u)??!0,x=r.getVariable(u)+f.increment*(v?1:-1);f.hasEnd&&(x=f.increment>0?we.clamp(x,m,f.endValue):we.clamp(x,f.endValue,m),x===m&&r.setDynamicVariableToggleIsForward(u,void 0),f.repeat?x===f.endValue&&(x=m):(x===m||x===f.endValue)&&r.setDynamicVariablePlayState(u,"Paused")),x!==y&&(s.push(u),r.updateVariable(u,x),this.eventManager.requestRender())}else if(f.dynamicVariableType==="time"){let y=r.getVariable(u),v=CE(i,f);if(typeof y=="object"&&"textValue"in y&&typeof v=="object"&&"textValue"in v){if(Array.isArray(y.textValue)&&Array.isArray(v.textValue)){if(y.textValue.every((x,S)=>x===v.textValue[S]))continue}else if(y.textValue===v.textValue)continue}else if(y===v)continue;r.updateVariable(u,v),s.push(u),this.eventManager.requestRender()}else{let y=Br.isTextValue(f.endValue)?$N(f.endValue.textValue):f.endValue,v=r.getDynamicVariableToggleIsForward(u)??!0,x=p+(e-d)/1e3*(f.dynamicVariableType==="timer"?-1:1)*(v?1:-1);x=Math.max(x,0),f.hasEnd&&(x=f.dynamicVariableType==="stopwatch"?we.clamp(x,m,y):we.clamp(x,y,m),x===m&&r.setDynamicVariableToggleIsForward(u,void 0),f.repeat?Math.abs(x-y)<(f.format==="number3decimal"?1e-4:.1)&&(x=m):(Math.abs(x-m)<(f.format==="number3decimal"?1e-4:.1)||Math.abs(x-y)<(f.format==="number3decimal"?1e-4:.1))&&r.setDynamicVariablePlayState(u,"Paused")),x!==p&&(s.push(u),this.dynamicVars[c].timerSeconds=x,r.updateVariable(u,vn.getFormattedTimerTime(x,f)),this.eventManager.requestRender())}}}let a=!1;r.mouseProperty!==this.prevMouseProperty&&(this.prevMouseProperty=r.mouseProperty,a=!0);let l=!1;r.raycastProperty!==this.prevRaycastProperty&&(this.prevRaycastProperty=r.raycastProperty,l=!0),this.events.forEach(c=>{(s.includes(c.data.variableId)||o.find(u=>u.objId===c.data.objectId&&u.property===c.data.property)||c.data.variableId==="mouseProperty"&&a||c.data.variableId==="raycastProperty"&&l)&&(c.dispatch(),this.eventManager.requestRender())})};this.onBlur=()=>{this.pause()};this.onFocus=()=>{this.resume()}}pause(){this.isOutOfFocus||(this.isOutOfFocus=!0,this.pauseTime=Date.now())}resume(){if(!this.isOutOfFocus)return;this.isOutOfFocus=!1;let e=Date.now()-this.pauseTime;for(let r=0;r{r.data?.events.filter(i=>i.data.type==="VariableChange"&&!i.data.disabled).forEach(i=>{this.events.push(new hM(i.id,i.data,r,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.propertiesToWatch=this.events.filter(r=>r.data.variableId==="objectProperty"&&r.data.objectId!==null).map(r=>({objectId:r.data.objectId,property:r.data.property,prevValue:null}));let e=this.eventContext.sharedAssets;this.sharedVariables.forEach(({id:r,data:i})=>{if(!("dynamicVariableType"in i)){this.events.find(o=>o.data.variableId===r)&&this.variablesToWatch.push({id:r,prevValue:e.getVariable(r)});return}let s;if(i.dynamicVariableType==="timer"||i.dynamicVariableType==="stopwatch"){let o;if(Br.isTextValue(i.value)&&Array.isArray(i.value.textValue)){let a=i.value.textValue;a.length===3?o=a[2]+a[1]*60+a[0]*3600:o=a[1]+a[0]*60}else o=i.value;s=o,this.dynamicVars.push({id:r,last:-1,expectedTime:-1,data:i,timerSeconds:o,startValue:s})}else i.dynamicVariableType==="time"&&e.updateVariable(r,CE(new Date,i)),i.dynamicVariableType==="counter"&&(s=Br.isTextValue(i.value)?$N(i.value.textValue):i.value),this.dynamicVars.push({id:r,last:-1,expectedTime:-1,data:i,startValue:s})}),this.rafId=window.requestAnimationFrame(this.onFrame),window.addEventListener("blur",this.onBlur),window.addEventListener("focus",this.onFocus)}disconnect(){window.removeEventListener("blur",this.onBlur),window.removeEventListener("focus",this.onFocus),this.rafId&&(window.cancelAnimationFrame(this.rafId),this.rafId=void 0),this.events.forEach(e=>e.dispose())}},hM=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.actions=kt(e,e.actions,i,s,o,r)}dispatch(){let t=this.actions;t.Audio.forEach(e=>e.dispatchConditional()),t.Particles.forEach(e=>e.dispatchConditional()),t.Video.forEach(e=>e.dispatchConditional()),t.Create.forEach(e=>e.dispatch()),t.Destroy.forEach(e=>e.dispatch()),t.Reset.forEach(e=>e.dispatch()),t.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),t.Transition.forEach(e=>e.play()),t.Animation.forEach(e=>e.play()),t.SwitchCamera.forEach(e=>e.play()),t.SceneTransition.forEach(e=>e.dispatch()),t.SetVariable.forEach(e=>e.checkConditions()),t.SetVariable.forEach(e=>e.dispatch()),t.DynamicVariablePlay.forEach(e=>e.dispatch()),t.ClearLocalStorage.forEach(e=>e.dispatch()),t.UserAPI.forEach(e=>e.dispatch())}dispose(){hr(this.actions)}};function $N(n){return n.length===3?n[2]+n[1]*60+n[0]*3600:n[1]+n[0]*60}var tF=!1?typeof window<"u"?window.location.href:"":"https://unpkg.com/@splinetool/runtime@1.9.35/build/",S$=!1?tF:"https://unpkg.com/@splinetool/navmesh-wasm@1.9.35/build/",w$=` (async function() { const [wasmImport, wasmBinary] = await Promise.all([ import('${tF}' + 'navmesh.js'), fetch('${S$}' + 'navmesh.wasm').then((res) => res.arrayBuffer()), ]); const wasmModule = wasmImport.default; self.module = await wasmModule({ wasmBinary }); postMessage('ready'); })(); `,A$=` (async function() { const [wasmImport, wasmBinary] = await Promise.all([ import(self.location.origin + '/_libraries/navmesh.js'), fetch(self.location.origin + '/_libraries/navmesh.wasm').then((res) => res.arrayBuffer()), ]); const wasmModule = wasmImport.default; self.module = await wasmModule({ wasmBinary }); postMessage('ready'); })(); `,E$=` onmessage = function(messageEvent) { const meshData = messageEvent.data; const positions = meshData[0]; const offset = meshData[1]; const indices = meshData[2]; const indicesLength = meshData[3]; const parameters = meshData[4]; const module = self.module; const rc = new module.rcConfig(); rc.cs = parameters.cs; rc.ch = parameters.ch; rc.borderSize = parameters.borderSize ? parameters.borderSize : 0; rc.tileSize = parameters.tileSize ? parameters.tileSize : 0; rc.walkableSlopeAngle = parameters.walkableSlopeAngle; rc.walkableHeight = parameters.walkableHeight; rc.walkableClimb = parameters.walkableClimb; rc.walkableRadius = parameters.walkableRadius; rc.maxEdgeLen = parameters.maxEdgeLen; rc.maxSimplificationError = parameters.maxSimplificationError; rc.minRegionArea = parameters.minRegionArea; rc.mergeRegionArea = parameters.mergeRegionArea; rc.maxVertsPerPoly = parameters.maxVertsPerPoly; rc.detailSampleDist = parameters.detailSampleDist; rc.detailSampleMaxError = parameters.detailSampleMaxError; if (!self.navMesh) { self.navMesh = new module.NavMesh(); } self.navMesh.build(positions, offset, indices, indicesLength, rc); const navmeshData = navMesh.getNavmeshData(); const arrView = new Uint8Array(module.HEAPU8.buffer, navmeshData.dataPointer, navmeshData.size); const ret = new Uint8Array(navmeshData.size); ret.set(arrView); navMesh.freeNavmeshData(navmeshData); postMessage(ret); } `,eF=.001,T$={cs:6,ch:2,walkableSlopeAngle:90,walkableHeight:20,walkableClimb:5,walkableRadius:0,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20,maxVertsPerPoly:6,detailSampleDist:6,detailSampleMaxError:1},rF,Ot,en;fI.then(n=>{rF=n,Ot=new n.Vec3,en=new n.Vec3});var M$=new E,Yb=class{constructor(t=!1,e=!1){this.usePhysics=t;this.isExport=e;this.onPointerDown=t=>{if(Je.length!==1)return;let{raycaster:e,page:r}=this.eventContext;this.eventContext.updateRaycaster(t);let i=r.raycastWithClones(e);if(i.length!==0){if(this.gameControl){let s=M$.copy(this.gameControl.colliderWorldPosition);s.y-=this.gameControl.colliderHeight/2,this.gameControl.path=this.computePath(s,i[0].point)}this.eventContext.requestRender()}};this.traverseWithPhysics=(t,e)=>r=>{let i;if(r instanceof Gi)if(r.objectForSample){if(r.objectForSample.dataPatched.physics.fusedBody)return;i=r.object}else return r.object.dataPatched.physics.fusedBody===!0&&r.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else if(r instanceof Nr)i=r.object;else if(i=r,i.dataPatched.cloner?.disabled===!1&&i.dataPatched.cloner?.hideBase&&i.dataPatched.physics?.fusedBody!==!0)return!0;if(e&&!i.userData.navmesh)return;let s=i.dataPatched;if(!s.visible&&s.physics?.enabled!==!0)return!0;r.updateMatrixWorldSVD();let o=Eg(s),a=i.userData.hasDestroy,l=i.userData.hasDrag,c=!1,u=!1;for(let h of s.events)h.data.disabled!==!0&&(h.data.type==="GameControl"?c=!0:h.data.type==="Follow"&&(u=!0));if(c||o||u||a||l)return!0;if(this.usePhysics&&s.physics?.rigidBody==="dynamic"){if(this.usePhysics&&s.physics?.fusedBody)return!0}else if("geometry"in r&&r.geometry&&t.push(no(r.geometry,r.matrixWorld)),this.usePhysics&&s.physics?.fusedBody)return r.traverseObject((h,d)=>{if(d===0)return;let f;if(h instanceof Gi)if(h.objectForSample){if(h.objectForSample.dataPatched.physics.fusedBody)return;f=h.object}else return h.object.dataPatched.physics.fusedBody===!0&&h.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else if(h instanceof Nr)f=h.object;else if(f=h,h.dataPatched.cloner?.hideBase)return!0;let p=f.dataPatched;if(!p.visible&&p.physics?.enabled!==!0)return!0;"geometry"in h&&h.geometry&&t.push(no(h.geometry,h.matrixWorld))}),!0};this.traverseNoPhysics=(t,e)=>r=>{let i;if(r instanceof Gi)return;r instanceof Nr?i=r.object:i=r;let s=i.dataPatched;if(s.physics.enabled==="visibility"?!s.visible:!s.physics.enabled)return!0;if(e&&!i.userData.navmesh)return;let o=r.geometry,a=i.userData.hasDestroy===!0,l=i.userData.hasDrag===!0;if(Eg(s)||a||l||i.dataPatched.events.some(c=>c.data.disabled!==!0&&c.data.type==="GameControl"))return!0;o&&t.push(no(o,r.matrixWorld))};this.navmeshWasm=rF,this.navMesh=new this.navmeshWasm.NavMesh,this._workerURL=URL.createObjectURL(new Blob([(e?w$:A$)+E$])),this._worker=new Worker(this._workerURL)}init(t,e,r){this.gameControl=e,this.eventContext=r,this.setDefaultQueryExtent(new E().setScalar(t.ch*t.walkableRadius*1.2)),this._worker.onmessage=()=>{this.createNavMesh(r.page,t,i=>{this.buildFromNavmeshData(i.data)})},this.eventContext.renderer.domElement.addEventListener("pointerdown",this.onPointerDown)}createNavMesh(t,e,r){e.objects.forEach(c=>{let u=t.scene.find(c);u.traverseEntity(h=>{h.userData.navmesh=!0}),u.cloner?.traverseObject(h=>{h.userData.navmesh=!0})});let i=[],s=(this.usePhysics?this.traverseWithPhysics:this.traverseNoPhysics)(i,e.zones==="custom");if(t.traverseChildren(s),e.objects.forEach(c=>{let u=t.scene.find(c);u.traverseEntity(h=>{h.userData.navmesh=void 0}),u.cloner?.traverseObject(h=>{h.userData.navmesh=void 0})}),i.length===0)return!1;let o=Gs(i),{positions:a,triIndices:l}=Wc(o.getAttribute("position"),o.getIndex());return this._worker.postMessage([a,a.length/3,l,l.length,{...T$,...e}]),this._worker.onmessage=r,!0}createDebugNavGeometry(){let t,e,r=this.navMesh.getDebugNavMesh(),i=r.getTriangleCount(),s=new Uint32Array(i*3),o=new Float32Array(i*3*3);for(t=0;tthis.getDefaultQueryExtent().y)return[];this.getClosestPoint(t);let s=this.navMesh.computePath(Ot,en),o=s.getPointCount(),a=[];for(let l=0;l-1&&(this._agentDestinationArmed[r]=!0,this._agentDestination[r].set(e.x,e.y,e.z))}agentTeleport(t,e){this.crowd.agentTeleport(t,new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z))}updateAgentParameters(t,e){let r=this.crowd.getAgentParameters(t);e.radius!==void 0&&(r.radius=e.radius),e.height!==void 0&&(r.height=e.height),e.maxAcceleration!==void 0&&(r.maxAcceleration=e.maxAcceleration),e.maxSpeed!==void 0&&(r.maxSpeed=e.maxSpeed),e.collisionQueryRange!==void 0&&(r.collisionQueryRange=e.collisionQueryRange),e.pathOptimizationRange!==void 0&&(r.pathOptimizationRange=e.pathOptimizationRange),e.separationWeight!==void 0&&(r.separationWeight=e.separationWeight),this.crowd.setAgentParameters(t,r)}removeAgent(t){this.crowd.removeAgent(t);let e=this.agents.indexOf(t);e>-1&&(this.agents.splice(e,1),this.transforms.splice(e,1),this.reachRadii.splice(e,1),this._agentDestinationArmed.splice(e,1),this._agentDestination.splice(e,1))}getAgents(){return this.agents}update(t){if(this.navmeshWasmWrapper.navMesh.update(),t<=eF)return;let e=1/60,r=10;if(e<=eF)this.crowd.update(t);else{let i=Math.floor(t/e);r&&i>r&&(i=r),i<1&&(i=1);let s=t/i;for(let o=0;ou&&o.y{e.data.type==="Page"&&!t&&e.data.publish.gameControlObject&&Il.traverseModuleInstances(n,e.id,(i,s,o)=>{for(let a of o)a.data.type==="GameControl"&&a.data.navmesh.enabled&&(t=!0)})}),t}var C$={type:"change"},iF={type:"changeZoom"},P$={type:"changePan"},uu={type:"start"},hu={type:"end",changed:!0},_$={type:"end",changed:!1},pM=new Ke,nF=new k,I$=2*Math.PI,D$=1e-8,O$=.01,mM=new E,Xb=new k,gM=new E,Kb=new Ke,sF=new ue;var R$={type:"requestRender"},Yf=class extends pr{constructor(e,r,i={isPlayMode:!1,isExport:!1}){super();this.object=e;this.domElement=r;this.options=i;this.enabled=!0;this.useKeyEvents=!0;this.enableDamping=!1;this.enableZoom=!0;this.enableRotate=!0;this.enablePan=!0;this.autoRotate=!1;this.rotationLimitsMode=0;this.panLimitsMode=0;this.rotationSoftLimit=2;this.panSoftLimit=2;this.hoverRotatePanMode=0;this.zoomLimitsEnabled=!1;this.mouseButtons=[0,5];this.mouseButtonsPlay=[3,4,5];this.touches=[null,Xn.DOLLY_ROTATE,Xn.PAN];this.offset=new E;this.eye=new E;this.lastPosition=new E;this.lastQuaternion=new Ke;this.current=new k;this.overShoot=new k;this.overRatio=new k;this.spherical=new Cp;this.sphericalDelta=new Cp;this.panOffset=new E;this.panLeftV=new E;this.panUpV=new E;this.panV=new E;this.rotateStart=new k;this.rotateEnd=new k;this.rotateDelta=new k;this.panStart=new k;this.panEnd=new k;this.panDelta=new k;this.dollyStart=new k;this.dollyEnd=new k;this.dollyDelta=new k;this.rotationRangeFactor=new k;this.panRangeFactor=new k;this.state=-1;this.zoomChanged=!1;this.isPointerDown=!1;this.isThetaFlipped=!1;this.prevScale=0;this.scale=1;this.gesture=!1;this.timer=-1;this.timerHover=-1;this.minDistance=0;this.maxDistance=1/0;this.minZoom=0;this.maxZoom=1/0;this.minPhi=0;this.maxPhi=Math.PI;this.minTheta=-1/0;this.maxTheta=1/0;this.minH=0;this.maxH=Math.PI;this.minV=-1/0;this.maxV=1/0;this.autoRotateClockwise=!0;this.isPanOverShoot=!1;this.isRotateOverShoot=!1;this.resetHoverEffectOnPointerLeave=!1;this.hasChange=!1;this.useWindowEvents=!1;this.isTouchZoom=!0;this.autoRotateSpeed=2;this.dampingFactor=.125;this.zoomSpeed=2;this.rotateSpeed=1;this.panSpeed=1;this.hoverRotatePanStrength=.1;this.hoverRotateDamping=this.dampingFactor;this.thetaIsFree=!1;this.phiIsFree=!1;this.needsUpdate=!0;this.onCameraChange=e=>{this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange),this.object=e.camera,this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)};this.update=()=>{this.object.updateWorldMatrix(!0,!1),this.object.matrixWorld.decompose(gM,Kb,mM),this.offset.copy(gM).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&this.state===-1&&this.rotateLeft((this.autoRotateClockwise===!0?1:-1)*this.getAutoRotationAngle()),this.rotationLimitsMode!==0&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),this.rotationLimitsMode!==2&&(this.spherical.phi+=this.sphericalDelta.phi),(this.rotationLimitsMode!==1||this.autoRotate===!0)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&this.object.isPerspectiveCamera&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),this.panLimitsMode!==0&&(this.target.applyQuaternion(pM.copy(Kb).invert()),this.panOffset.applyQuaternion(pM),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(Kb),this.panOffset.applyQuaternion(Kb)),this.panLimitsMode===2&&(this.panOffset.y=0),this.panLimitsMode===1&&(this.panOffset.x=0),this.state===-1&&!this.gesture?(this.panOffset.multiplyScalar(1-this.dampingFactor),this.target.add(this.panOffset)):(this.target.add(this.panOffset),this.panOffset.set(0,0,0)),this.offset.setFromSpherical(this.spherical),gM.copy(this.target).add(this.offset),this.object.position.copy(this.target).add(this.offset),this.object.parent&&(sF.copy(this.object.parent.matrixWorld).invert(),this.object.position.applyMatrix4(sF));let e=this.spherical.phi%I$;if(this.eye.copy(this.offset).normalize(),this.object.up.copy(Tt.DEFAULT_UP).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),e>0&&e>Math.PI||e<0&&e>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),this.state===-1||this.enableDamping===!0){let r=this.hoverRotatePanMode===1?this.hoverRotateDamping:this.dampingFactor;this.sphericalDelta.theta*=1-r,this.sphericalDelta.phi*=1-r}else this.sphericalDelta.set(0,0,0);return this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>O$||8*(1-this.lastQuaternion.dot(this.object.quaternion))>D$?(this.dispatchEvent(C$),this.object.dispatchEvent(R$),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.zoomChanged=!1,!0):(this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.object.wasMovedBySwitchCameraAction=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),!1)};this.onPointerDown=e=>{this.enabled!==!1&&(e.pointerType==="touch"||e.pointerType==="pen"&&Ci?this.onPointerDownTouch(e):this.onPointerDownMouse(e),this.state!==-1&&(this.isPointerDown=!0,this.dispatchEvent(uu),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),e.stopPropagation(),e.pointerType==="touch"||e.pointerType==="pen"&&Ci||this.domElement.setPointerCapture(e.pointerId)))};this.onPointerLeave=e=>{this.resetHoverEffectOnPointerLeave&&!this.useWindowEvents?(this.hoverRotatePanMode===1?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,mM.subVectors(this.position0,this.target0),this.spherical.setFromVector3(mM),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):this.hoverRotatePanMode===2&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=e};this.onPointerEnter=e=>{this.resetHoverEffectOnPointerLeave||this.pointerLeaveEvent===void 0?Xb.set(e.clientX-this.domElement.clientWidth/2,e.clientY-this.domElement.clientHeight/2):Xb.set(e.clientX-this.pointerLeaveEvent.clientX,e.clientY-this.pointerLeaveEvent.clientY),this.hoverRotatePanMode===1?(this.rotateDelta.copy(Xb).multiplyScalar(this.rotateSpeed*this.hoverRotatePanStrength).rotateAround(nF,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(e.clientX,e.clientY)):this.hoverRotatePanMode===2&&(this.panDelta.copy(Xb).multiplyScalar(this.panSpeed*this.hoverRotatePanStrength),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(e.clientX,e.clientY)),this.update()};this.onPointerMove=e=>{this.enabled!==!1&&(this.checkRaycastLock()||(e.pointerType==="touch"||e.pointerType==="pen"&&Ci?this.onPointerMoveTouch(e):this.onPointerMoveMouse(e),e.stopPropagation()))};this.onPointerUp=e=>{this.isPointerDown=!1,Je.length===0&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),Je.length>1&&e.preventDefault(),this.hasChange?this.dispatchEvent(hu):this.dispatchEvent(_$),this.state=-1,e&&(e.stopPropagation(),e.pointerType==="touch"||e.pointerType==="pen"&&Ci||this.domElement.releasePointerCapture(e.pointerId))};this.onPointerDownMouse=e=>{let r;switch(this.useKeyEvents?r=this.mouseButtons[e.button]:r=this.mouseButtonsPlay[e.button],r){case 0:if(e.altKey===!0&&!e.shiftKey&&!Vp(e)){if(this.enableRotate===!1)return;this.handleMouseDownRotate(e),this.state=0}else if(this.key===" "){if(this.enablePan===!1)return;this.handleMouseDownPan(e),this.state=2}break;case 4:if(this.enablePan===!1)return;this.handleMouseDownPan(e),this.state=2;break;case 3:if(Vp(e)||e.shiftKey){if(this.enablePan===!1)return;this.handleMouseDownPan(e),this.state=2}else{if(this.enableRotate===!1)return;this.handleMouseDownRotate(e),this.state=0}break;case 5:if(Vp(e)||e.shiftKey){if(this.enableRotate===!1)return;this.handleMouseDownRotate(e),this.state=0}else{if(this.enablePan===!1)return;this.handleMouseDownPan(e),this.state=2}break;default:this.state=-1}};this.onPointerMoveMouse=e=>{switch(this.state){case 0:if(this.enableRotate===!1)return;this.handleMouseMoveRotate(e);break;case 1:if(this.enableZoom===!1)return;this.handleMouseMoveDolly(e);break;case 2:if(this.enablePan===!1)return;this.handleMouseMovePan(e);break}this.object.wasMovedByUser=!0};this.onPointerDownTouch=e=>{switch(Je.length>1&&e.preventDefault(),this.touches[Je.length-1]){case Xn.ROTATE:if(this.enableRotate===!1){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case Xn.PAN:if(this.enablePan===!1){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case Xn.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchStartDollyPan(),this.state=5;break;case Xn.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}};this.onPointerMoveTouch=e=>{switch(Je.length>1&&e.preventDefault(),this.state){case 3:if(this.enableRotate===!1)return;this.handleTouchMoveRotate(e),this.update();break;case 4:if(this.enablePan===!1)return;this.handleTouchMovePan(e),this.update();break;case 5:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchMoveDollyPan(e),this.update();break;case 6:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchMoveDollyRotate(e),this.update();break;default:this.state=-1}this.object.wasMovedByUser=!0};this.dispatchEndDebounced=vo(()=>this.dispatchEvent(hu),33);this.onMouseWheel=e=>{this.enabled===!1||this.enableZoom===!1&&this.enablePan===!1||this.checkRaycastLock()||(!this.options.isExport&&this.domElement.clientHeight===document.body.clientHeight&&this.domElement.clientWidth===document.body.clientWidth&&e.preventDefault(),this.dispatchEvent(uu),this.handleMouseWheel(e),this.dispatchEndDebounced(),this.object.wasMovedByUser=!0)};this.onGesture=e=>{if(e.preventDefault(),this.enabled!==!1&&!this.checkRaycastLock()&&!xo)if(e.type==="gesturechange"){if(this.enableZoom===!1||this.isTouchZoom===!1)return;this.dispatchEvent(uu),e.scale>this.prevScale?this.dollyIn(this.getZoomScale()):e.scale{e.preventDefault()};this.onTouchEnd=e=>{e.preventDefault()};this.onKeyDown=e=>{this.enabled!==!1&&(this.key=e.key,e.key===" "&&this.dispatchEvent(uu))};this.onKeyUp=e=>{this.enabled!==!1&&(this.key=void 0,this.state!==-1&&e.key==="Alt"&&this.onPointerUp(Je[0]),e.key===" "&&this.dispatchEvent(hu))};this.onPointerHover=e=>{e.pointerType!=="mouse"||this.enabled===!1||this.state!==-1||this.hoverRotatePanMode===2&&this.isPanOverShoot||this.hoverRotatePanMode===1&&this.isRotateOverShoot||(this.isPointerDown=!0,this.hoverRotatePanMode===2?this.handleMouseMovePan(e,this.hoverRotatePanStrength):this.hoverRotatePanMode===1&&this.handleMouseMoveRotate(e,this.hoverRotatePanStrength))};this.onBeginState=()=>{this.enabled=!1,this.needsUpdate=!1};this.onCompleteState=e=>{e.isfromEntity&&this.options.isPlayMode||(this.enabled=!0,this.needsUpdate=!0,this.object.updateUp(),this.object.getTarget(this.target))};this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.quat0=this.object.quaternion.clone(),this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.initialSphericalRadius=this.spherical.radius,this.addEventListenersToCamera()}dispatchEvent(e){e.type==="start"?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}addEventListenersToCamera(){this.object.addEventListener("beginState",this.onBeginState),this.object.addEventListener("completeState",this.onCompleteState),this.object.addEventListener("cameraChange",this.onCameraChange)}removeEventListenersFromCamera(){this.object.removeEventListener("beginState",this.onBeginState),this.object.removeEventListener("completeState",this.onCompleteState),this.object.removeEventListener("cameraChange",this.onCameraChange)}updateUseWindowEvents(e){if(window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("pointermove",this.onPointerHover),this.useWindowEvents=e,this.hoverRotatePanMode!==0&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),this.hoverRotatePanMode!==0&&!this.useWindowEvents){let r=this.useWindowEvents?window:this.domElement;r.addEventListener("pointerleave",this.onPointerLeave),r.addEventListener("pointerenter",this.onPointerEnter)}}fromJSON(e,r){this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.thetaIsFree=e.rotationHorizontalOffset.min===e.rotationHorizontalOffset.max&&e.rotationHorizontalOffset.min===Math.PI,this.phiIsFree=e.rotationVerticalOffset.min===e.rotationVerticalOffset.max&&e.rotationVerticalOffset.min===Math.PI,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.hoverRotateDamping=e.hoverRotateDamping??this.dampingFactor,this.useWindowEvents=r==="window",this.hoverRotatePanMode!==0&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover));let i=e.hoverRotatePanStrength/100;this.hoverRotatePanStrength=i**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/e.zoomLimits.max,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,this.autoRotateSpeed=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let s=this.object.getTarget().applyQuaternion(pM.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+s.y,this.maxV=e.panVerticalOffset.max+s.y,this.minH=-e.panHorizontalOffset.min+s.x,this.maxH=e.panHorizontalOffset.max+s.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=Jo(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=Jo(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=Jo(Jo(this.spherical.theta)-e.rotationHorizontalOffset.min),this.maxTheta=Jo(Jo(this.spherical.theta)+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,e.orbitTouches===1&&(this.touches[0]=Xn.ROTATE),e.panTouches===1&&(this.touches[0]=Xn.PAN),e.orbitTouches===2&&(this.touches[1]=Xn.DOLLY_ROTATE),e.panTouches===2&&(this.touches[1]=Xn.DOLLY_PAN),e.orbitTouches===3&&(this.touches[2]=Xn.ROTATE),e.panTouches===3&&(this.touches[2]=Xn.PAN),this.isTouchZoom=e.isTouchZoom,this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){if(this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture),this.domElement.addEventListener("touchend",this.onTouchEnd),this.hoverRotatePanMode!==0&&!this.useWindowEvents){let e=this.useWindowEvents?window:this.domElement;e.addEventListener("pointerleave",this.onPointerLeave),e.addEventListener("pointerenter",this.onPointerEnter)}this.pointerLeaveEvent=void 0}dispose(){this.removeEventListenersFromCamera(),this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),window.removeEventListener("pointerleave",this.onPointerLeave),window.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,r,i,s,o,a,l,c){this.overShoot.set(0,0);let u,h,d;e instanceof E?(u=e.x,h=e.y,this.current.set(this.target.x,this.target.y),d=!0):(u=e.theta,h=e.phi,this.current.set(Jo(this.spherical.theta),Jo(this.spherical.phi)),d=!1),i===0&&(this.current.x+=u,this.current.y+=h),(r===3||r===2)&&(!d&&this.isThetaFlipped?this.current.x>s&&this.current.x<0?this.overShoot.x=s-this.current.x:this.current.x0&&(this.overShoot.x=o-this.current.x):this.current.x>s?this.overShoot.x=s-this.current.x:this.current.xa?this.overShoot.y=a-this.current.y:this.current.y.9&&!this.thetaIsFree||this.overRatio.y>.9&&!this.phiIsFree)?this.isPointerDown=!1:(u*this.overShoot.x<0&&!this.thetaIsFree&&(u*=1-this.overRatio.x),h*this.overShoot.y<0&&!this.phiIsFree&&(h*=1-this.overRatio.y)):i===2&&(!d&&(this.overRatio.x>.002&&!this.thetaIsFree||this.overRatio.y>.002&&!this.phiIsFree)||d&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(this.thetaIsFree||(u=this.overShoot.x*.05),this.phiIsFree||(h=this.overShoot.y*.05),d?this.isPanOverShoot=!0:this.isRotateOverShoot=!0):d?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(u+=this.overShoot.x,h+=this.overShoot.y),e instanceof E?(e.x=u,e.y=h):(this.thetaIsFree||(e.theta=u),this.phiIsFree||(e.phi=h))}setEnableDampingSpeed(e){this.enableDamping=e,this.rotateSpeed=e===!0?.2:1}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*this.autoRotateSpeed}getZoomScale(){return Math.pow(.95,this.zoomSpeed)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,r){this.panLeftV.setFromMatrixColumn(r,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,r){this.panUpV.setFromMatrixColumn(r,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,r){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let s=this.object.position;this.panV.copy(s).sub(this.target);let o=this.panV.length();o*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*o/i.clientHeight,this.object.matrixWorld),this.panUp(2*r*o/i.clientHeight,this.object.matrixWorld)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrixWorld),this.panUp(r*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrixWorld));this.dispatchEvent(P$)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(iF)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(iF)}zoomOut(e=this.getZoomScale()){this.dispatchEvent(uu),this.dollyOut(e),this.dispatchEvent(hu)}zoomIn(e=this.getZoomScale()){this.dispatchEvent(uu),this.dollyIn(e),this.dispatchEvent(hu)}setZoom(e){if(this.dispatchEvent(uu),this.object.isPerspectiveCamera){let i=this.initialSphericalRadius/e/this.spherical.radius;this.scale=i}else this.object.isOrthographicCamera&&(this.object.zoom=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0);this.dispatchEvent(hu)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,r=1){e.movementX!==void 0?this.rotateDelta.set(e.movementX,e.movementY):(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)),this.rotateDelta.multiplyScalar(this.rotateSpeed*r).rotateAround(nF,-this.object.angleOffsetFromUp);let i=this.domElement,s=this.useWindowEvents?window.innerHeight:i.clientHeight,o=2*Math.PI*this.rotateDelta.x/s,a=2*Math.PI*this.rotateDelta.y/s;this.rotateLeft(o),this.rotateUp(a),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,r=1){e.movementX!==void 0?this.panDelta.set(e.movementX,e.movementY):(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)),this.panDelta.multiplyScalar(this.panSpeed*r),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(iI===!1&&Vp(e)===!1&&sI(e)===!0){if(this.enablePan===!1)return;this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(this.panSpeed),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1},30)}else{if(this.enableZoom===!1||this.gesture)return;e.deltaY===0?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(Je.length===2){let e=.5*(Je[0].pageX+Je[1].pageX),r=.5*(Je[0].pageY+Je[1].pageY);this.rotateStart.set(e,r)}else this.rotateStart.set(Je[0].pageX,Je[0].pageY)}handleTouchStartPan(){if(Je.length===2){let e=.5*(Je[0].pageX+Je[1].pageX),r=.5*(Je[0].pageY+Je[1].pageY);this.panStart.set(e,r)}else this.panStart.set(Je[0].pageX,Je[0].pageY)}handleTouchStartDolly(){let e=Je[0].pageX-Je[1].pageX,r=Je[0].pageY-Je[1].pageY,i=Math.sqrt(e*e+r*r);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&this.isTouchZoom===!0&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&this.isTouchZoom===!0&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(Je.length===2){let i=yv(e),s=.5*(e.pageX+i.x),o=.5*(e.pageY+i.y);this.rotateEnd.set(s,o)}else{if(e.pointerId!==Je[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(this.rotateSpeed);let r=this.domElement;r&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/r.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/r.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(Je.length===2){let r=yv(e),i=.5*(e.pageX+r.x),s=.5*(e.pageY+r.y);this.panEnd.set(i,s)}else{if(e.pointerId!==Je[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(this.panSpeed),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let r=yv(e),i=e.pageX-r.x,s=e.pageY-r.y,o=Math.sqrt(i*i+s*s);this.dollyEnd.set(0,o),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,this.zoomSpeed)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&this.isTouchZoom===!0&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&this.isTouchZoom===!0&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}checkRaycastLock(){if(this.object.data.raycastLock){if(this.options.isPlayMode)return!1;{let e=this.options?.showCameraLock;return e&&e(),!0}}else return!1}};function Jo(n){let t=Math.PI*2;for(;n<=-Math.PI;)n+=t;for(;n>Math.PI;)n-=t;return n}function oF(n){return 1-Math.pow(1-n,4)}var Tg=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.page=i;this.currentIntersectedObjects=[];this.actions=kt(e,e.actions,i,s,o,r),this.target=e.target,this.triggeringObjects=[];for(let a of e.triggeringObjects){let l=i.scene.find(a);l&&this.triggeringObjects.push(l)}}isValidTriggeringObject(t){return this.target==="all"?!0:this.triggeringObjects.some(e=>e===t||e.isAncestorOf(t.uuid)||t.isAncestorOf(e.uuid))}disconnect(){hr(this.actions)}dispatch(){this.object.destroyedInAction||(this.actions.Transition.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())}),this.object.dispatchEvent({type:"beginEvent",eventName:"Trigger"}),this.actions.Transition.forEach(t=>{t.data.runMode==="Toggle"?t.toggle():t.play()}),this.actions.SwitchCamera.forEach(t=>{t.data.runMode==="Toggle"?t.toggle():t.play()}),this.actions.Link.forEach(t=>{t.dispatch()}),this.actions.Reset.forEach(t=>{t.dispatch()}),this.actions.Create.forEach(t=>{t.dispatch()}),this.actions.Destroy.forEach(t=>{t.dispatch(!1)}),this.actions.Audio.forEach(t=>{t.dispatchBasic()}),this.actions.Particles.forEach(t=>{t.dispatchBasic()}),this.actions.Video.forEach(t=>{t.dispatchBasic()}),this.actions.SceneTransition.forEach(t=>{t.dispatch()}),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch()))}};var Gt;gI.then(n=>Gt=n);var bi=new E,oo=new Ke,uc=new E,yM=new nr(0,0,0,"YXZ"),aF=new nr(0,0,0,"XYZ"),ao=new E,vM=new E,xM=new E(1,1,1),Xf=new Ke,Qb=new ue,lF=new ue,L$={type:"updateMatrix"},cF=new Ke,bM=new Rr,Db={type:"beginEvent",eventName:"Collision"},B$={type:"beginEvent",eventName:"Trigger"};function uF(n){if(Il.physicsEnabled(n.scene.objects))return!0;let t=!1;return n.scene.objects.traverse((e,r)=>{if(r.events){if(Array.isArray(r.events)){for(let i of r.events)if(i.data.disabled!==!0&&i.data.type==="GameControl"&&i.data.collisionEnabled){t=!0;break}}else for(let i of Object.values(r.events))if(i.disabled!==!0&&i.type==="GameControl"&&i.collisionEnabled){t=!0;break}}}),t}var Eg=n=>n.states.some(t=>t.data.position!==void 0||t.data.rotation!==void 0||t.data.hiddenMatrix!==void 0||t.data.cloner!==void 0||t.data.pathSnapping!==void 0),Zb=class{constructor(t){this.eventContext=t;this.isEnabled=!1;this.gameControl=null;this.joysticks=[];this.joystickToGameControls=[];this.sharedGameControlGlobals={entitiesWithTransformAnim:[],entityToCollisionEvents:{},colliderToEntity:new Map,triggers:[],gamePads:[],createdObjects:[],nCreatedPerAction:{}};this.sensorToTriggerEvent={};this.eventManager=void 0;this.needsCollisionDetection=!1;this.initializationCounter=-1;this.rigidBodyToMesh=new Map;this.nActiveRigidBodies=0;this.collisionEvents=[];this.isExport=!1;this.processRigidBody=t=>{if(t.bodyType()!==Gt.RigidBodyType.Dynamic)return;t.isSleeping()||this.nActiveRigidBodies++;let[e,r,i]=this.rigidBodyToMesh.get(t.handle);if(bi.copy(t.translation()).multiplyScalar(this.pixelsPerMeter),oo.copy(t.rotation()),e.matrixWorld.compose(bi,oo,r),e.hasNonUniformScale&&e.matrixWorld.multiply(e.shearScale),e.dispatchEvent(L$),i){let s=e.cloner;if(s&&s.objectForSample===void 0){s.matrixWorld.copy(e.matrixWorld);for(let o of s.children)o.updateMatrixWorld(!0)}for(let o of e.children)o.updateMatrixWorld(!0)}};this.accumulator=0;this.handleCollisionEvents=(t,e,r)=>{if(r===!1)return;let i,s;if(this.sensorToTriggerEvent[t]?(i=this.sensorToTriggerEvent[t],s=this.sharedGameControlGlobals.colliderToEntity.get(e)):this.sensorToTriggerEvent[e]&&(i=this.sensorToTriggerEvent[e],s=this.sharedGameControlGlobals.colliderToEntity.get(t)),i&&s&&i.isValidTriggeringObject(s)){i.dispatch();return}for(let o=this.sharedGameControlGlobals.createdObjects.length-1;o>=0;o--){let a=this.sharedGameControlGlobals.createdObjects[o];if(a.userData.hasCollisionDestroy&&(a.rigidBody?.collider(0).handle===t||a.rigidBody?.collider(0).handle===e)){this.sharedGameControlGlobals.createdObjects.splice(o,1),a.removeFromParent(),requestAnimationFrame(()=>this.sharedGameControlGlobals.rapierWorld?.removeRigidBody(a.rigidBody));break}}if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(t)){let o=this.sharedGameControlGlobals.colliderToEntity.get(e),a=this.sharedGameControlGlobals.entityToCollisionEvents[o.uuid];if(a===void 0)return;for(let l of a)l.data.target==="character"&&this.dispatchCollisionEvent(l,o,e)}else if(this.gameControl?.object!==void 0&&this.gameControl.object===this.sharedGameControlGlobals.colliderToEntity.get(e)){let o=this.sharedGameControlGlobals.colliderToEntity.get(t),a=this.sharedGameControlGlobals.entityToCollisionEvents[o.uuid];if(a===void 0)return;for(let l of a)l.data.target==="character"&&this.dispatchCollisionEvent(l,o,t)}else{let o=this.sharedGameControlGlobals.colliderToEntity.get(t),a=this.sharedGameControlGlobals.entityToCollisionEvents[o.uuid];if(a!==void 0)for(let u of a)u.data.target==="scene"&&this.dispatchCollisionEvent(u,o,t);let l=this.sharedGameControlGlobals.colliderToEntity.get(e),c=this.sharedGameControlGlobals.entityToCollisionEvents[l?.uuid];if(c!==void 0)for(let u of c)u.data.target==="scene"&&this.dispatchCollisionEvent(u,l,e)}};this.isExport=t.isExport,this.sharedAssets=t.sharedAssets,this.renderer=t.renderer,this.requestRender=t.requestRender,this.domElement=this.renderer.domElement,this.pixelsPerMeter=YT,this.gravity=this.page.data.globalPhysics.gravity}get page(){return this.eventContext.page}attachVRControllers(t){t.forEach(e=>{e.addEventListener("connected",r=>{"gamepad"in r.data&&"axes"in r.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(r.data.gamepad)})})}markIsDestroyTarget(){this.page.traverseVisibleEntity(t=>{let e=t.dataPatched;for(let r of e.events){if(r.data.disabled===!0)continue;let i=r.data.actions?.find(s=>s.data.type==="Destroy")?.data;if(i)for(let s of i.objects){let o=this.page.scene.find(s);o&&(o.userData.hasDestroy=!0)}}})}markIsDragObject(){this.page.traverseVisibleEntity(t=>{let e=t.dataPatched;for(let r of e.events)if(!(r.data.disabled===!0||r.data.type!=="DragDrop"))for(let i of r.data.objects){let s=this.page.scene.find(i);s&&(s.userData.hasDrag=!0)}})}initBVH(){let t=[];if(this.page.traverseChildren(e=>{let r,i=e instanceof Kl,s=e instanceof sc;if(e instanceof Gi||i||s)return;e instanceof Nr?r=e.object:r=e;let o=r.dataPatched;if(o.physics?.enabled==="visibility"?!o.visible:!o.physics?.enabled)return!0;let a=e.geometry,l=r.userData.hasDestroy===!0,c=r.userData.hasDrag===!0;if(Eg(o)||l||c||r.dataPatched.events.some(u=>u.data.disabled!==!0&&u.data.type==="GameControl"))return e.updateMatrixWorldSVD(),this.addBoundsTree(e),!0;a&&t.push(no(a,e.matrixWorld))}),t.length>0){let e=Gs(t,!1);this.sharedGameControlGlobals.staticMeshBVH=new Do(e)}}addRigidBody(t,e,r){let i=[],s="geometry"in t?t.geometry:void 0,o=e.dataPatched;if(s?.getAttribute("position")!==void 0&&i.push(no(s,t.shearScale)),o.physics.fusedBody){let a=this.gatherChildrenGeom(t,i);t.traverseObject(a),t.children.forEach(c=>c.updateMatrixWorld(!0));let l=t.cloner;l&&l.objectForSample===void 0&&o.physics.rigidBody==="dynamic"&&(l.traverseObject(a),l.children.forEach(c=>c.updateMatrixWorld(!0)))}if(i.length>0){let a,l=!r.fromCreate&&o.physics.rigidBody==="dynamic"||r.fromCreate&&r.dynamic;l?(a=Gt.RigidBodyDesc.dynamic(),a.setLinearDamping(o.physics.damping).setAngularDamping(o.physics.damping).setAdditionalMass(1e-9).setGravityScale(o.physics.gravityScale).enabledRotations(...o.physics.enabledRotation).enabledTranslations(...o.physics.enabledTranslation)):(r.hasTransformAnim||r.hasFollow||r.hasDrag)&&!r.fromCreate?(a=Gt.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(t)):a=Gt.RigidBodyDesc.fixed();let c=Gs(i);(t.hasNonUniformScale?t.matrixWorldRigid:t.matrixWorld).decompose(bi,oo,uc),t.position0=bi.clone().divideScalar(this.pixelsPerMeter),t.rotation0=oo.clone(),bi.divideScalar(this.pixelsPerMeter),a.setTranslation(bi.x,bi.y,bi.z).setRotation(oo),s?c?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):c?.scale(uc.x/this.pixelsPerMeter,uc.y/this.pixelsPerMeter,uc.z/this.pixelsPerMeter);let u=this.sharedGameControlGlobals.rapierWorld.createRigidBody(a);l&&this.rigidBodyToMesh.set(u.handle,[t,uc.clone(),o.physics.fusedBody]);let h=!(o.geometry===void 0||o.geometry.type==="SubdivGeometry"||o.geometry.type==="NonParametricGeometry"||o.geometry.type==="BooleanGeometry"||o.geometry.type==="VectorGeometry"||o.geometry.type==="StarGeometry"||o.geometry.type==="RectangleGeometry"||o.geometry.type==="EllipseGeometry"||o.geometry.type==="TriangleGeometry"||o.geometry.type==="TorusGeometry"||o.geometry.type==="HelixGeometry");try{this.addCollider(u,o.physics,c,e,h)}catch{try{this.addCollider(u,o.physics,c,e,!1)}catch(f){console.error(f)}}t.rigidBody=u}}addBoundsTree(t){let e=[];if(t.geometry?.getAttribute("position")!==void 0&&t.geometry?.getAttribute("position").count>0&&e.push(no(t.geometry,t.shearScale)),t.traverseObject(this.gatherChildrenGeom(t,e)),t.children.forEach(r=>r.updateMatrixWorld(!0)),e.length>0){let r=Gs(e,!1);t.bvhGeometry=r,r.getAttribute("position").count>0?(t.bvhGeometry.boundsTree=new Do(r),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(t)):!1&&console.warn(`ControlsManager.addBoundsTree: object "${t.name}" has empty geometry`)}}addCollider(t,e,r,i,s=!0){if(r?.getAttribute("position").count===0||r?.getIndex()?.count===0)return;let o;r&&(e.colliderType==="trimesh"?o=Gt.ColliderDesc.trimesh(r.getAttribute("position").array,r.getIndex().array):o=Gt.ColliderDesc.convexMesh(r.getAttribute("position").array,s?r.getIndex().array:void 0)),o.setFrictionCombineRule(Gt.CoefficientCombineRule.Average).setRestitutionCombineRule(Gt.CoefficientCombineRule.Average).setDensity(e.density).setFriction(e.friction).setRestitution(e.restitution);let a=this.sharedGameControlGlobals.rapierWorld.createCollider(o,t);this.sharedGameControlGlobals.colliderToEntity.set(a.handle,i),this.sharedGameControlGlobals.entityToCollisionEvents[i.uuid]?.some(l=>l.target==="scene")&&a.setActiveEvents(Gt.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(t,e){return(r,i)=>{if(i===0)return;let s;if(r instanceof Gi)if(r.objectForSample){if(r.objectForSample.dataPatched.physics.fusedBody)return;s=r.object}else return r.object.dataPatched.physics.fusedBody===!0&&r.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else if(r instanceof Nr)s=r.object;else if(s=r,s.dataPatched.cloner?.hideBase)return!0;let o=s.dataPatched;if(o.physics.enabled==="visibility"?!o.visible:!o.physics.enabled)return!0;i===1?t.hasNonUniformScale?r.matrixWorld.multiplyMatrices(t.shearScale,r.hiddenMatrix):r.matrixWorld.copy(r.hiddenMatrix):r.matrixWorld.multiplyMatrices(r.parent.matrixWorld,r.hiddenMatrix),r.matrixWorld.multiply(r.matrix);let a=r.geometry;a?.getAttribute("position")!==void 0&&e.push(no(a,r.matrixWorld))}}activate(t){if(this.isEnabled)return;this.isEnabled=!0,this.eventManager=t,this.usePhysics=this.page.data.globalPhysics.usePhysics;let e=this.page.playCamera,r=!1,i=5,s=8,o=9,a="drag",l=this.page.data.publish.gameControlObject,c=l!==null?this.page.find(l):null,u=null;if(c)for(let f of c.data.events){if(f.data.disabled||f.data.type!=="GameControl")continue;let p=c;for(;this.usePhysics&&(p=p.parent)?.parent!==null;)p.data.physics?.fusedBody;f.data.collisionEnabled&&(this.needsCollisionDetection=!0),u===null&&(u=f.data)}if(this.page.traverseEntity(f=>{for(let p of f.dataPatched.events)if(p.data.disabled===!1&&p.data.type==="Trigger")return this.needsCollisionDetection=!0,!0}),c&&u&&(c.data.visible===!0||c.data.physics.enabled===!0)){r=r||u.camera===e.uuid||c.uuid===e.uuid;let f=new yg(c,this.renderer.domElement,u,this.eventContext.page.data.globalPhysics,this,c.uuid!==e.uuid&&u.camera===e.uuid,e,this.page,this.sharedAssets);this.gameControl=f,i=u.joystickPosLoc,s=u.joystickRotLoc,o=u.jumpTouchButtonLoc,a=u.rotByTouch,Ci&&u.touchControl&&(this.joystickToGameControls[i]="pos",u.moveMode==="walk"&&(this.joystickToGameControls[o]="jmp"),a==="joystick"&&(this.joystickToGameControls[s]="rot"))}if(this.gameControl&&this.gameControl.data.navmesh.enabled){let f=this.gameControl.data;if(!this.navigationMeshWrapper){this.navigationMeshWrapper=new Yb(this.usePhysics,this.isExport);let p;f.collider.type==="sphere"?p=f.collider.radius*2:p=f.collider.height,p=Math.floor(p/f.navmesh.ch-1),this.navigationMeshWrapper.init({...f.navmesh,walkableHeight:p},this.gameControl,this.eventContext)}}if(r===!1){let{enableRotate:f,enablePan:p,enableZoom:m,autoRotate:g,hoverRotatePanMode:y}=this.eventManager.publish.orbitControls;(f||p||m||g||y!==0)&&(this.orbitControls=new Yf(e,this.renderer.domElement,{isExport:this.isExport,isPlayMode:!0}),this.orbitControls.addEventListener("change",this.requestRender),this.orbitControls.addEventListener("end",this.requestRender),this.orbitControls.addEventListener("start",this.requestRender),this.orbitControls.fromJSON(this.eventManager.publish.orbitControls,this.eventManager.publish.mouseEventTarget),this.orbitControls.useKeyEvents=!1,this.orbitControls.addEventListenersToCamera(),this.orbitControls.connect(),this.orbitControls.update())}let h=this.renderer.domElement.width/this.renderer.getPixelRatio(),d=this.renderer.domElement.height/this.renderer.getPixelRatio();this.joystickToGameControls.forEach((f,p)=>{let m=document.body.appendChild(document.createElement("div")),[g,y,v]=this.eventManager.eventContext.publish.joystickSizeAndXYOffset[p],x=(h-5*g)/4+g,S={},w=f==="jmp",A=w?0:g;p<10?(p<5?S.top=A/2:S.bottom=A/2,S.left=A/2+p%5*x):p===10?(S.left=A/2,S.top=d/2):(S.right=A/2,S.top=d/2),S.top?S.top-=y[1]:S.bottom+=y[1],S.left?S.left+=y[0]:S.right-=y[0];for(let M in S)S[M]+="px";if(w){let M=m.appendChild(document.createElement("div"));Object.assign(M.style,S,{position:"absolute",width:g+"px",height:g+"px",backgroundColor:`rgba(255,255,255,${v==="show"?.4:0})`,zIndex:"9999",borderRadius:g+"px",border:v==="show"?"solid 2px rgba(0, 0, 0, .1)":"none",display:"flex",alignItems:"center",justifyContent:"center",touchAction:"none"});let C=g/16*16*.4;v==="show"&&(M.innerHTML=` `),M.addEventListener("pointerdown",()=>{this.gameControl.movementState.jump=1,this.requestRender()}),M.addEventListener("touchend",P=>P.preventDefault()),this.joysticks[p]=[void 0,m];return}let T={zone:m,mode:"static",position:S,size:g};v==="hide"&&(T.restOpacity=0);let b=zB.create(T);b.on("move",(M,C)=>{let P=this.gameControl;f==="pos"?C.force<.2?P.moveForce=0:(P.movementState.movePosZ=Math.sin(-C.angle.radian),P.movementState.movePosX=Math.cos(-C.angle.radian),C.force>1.2?P.movementState.run=1:P.movementState.run=0,C.force<.3?P.moveForce=(C.force-.2)/.1:P.moveForce=1):f==="rot"&&(C.force<.2?P.rotForce=0:(P.movementState.rotPosX=C.vector.y,P.movementState.rotPosY=-C.vector.x,C.force<.3?P.rotForce=(C.force-.2)/.1:P.rotForce=1)),this.requestRender()}),b.on("end",(M,C)=>{let P=this.gameControl;f==="pos"?(P.movementState.movePosZ=0,P.movementState.movePosX=0,P.moveForce=1):f==="rot"&&(P.movementState.rotPosX=0,P.movementState.rotPosY=0,P.rotForce=1)}),this.joysticks[p]=[b,m]}),this.markIsDestroyTarget(),this.markIsDragObject(),this.rebuildBVH(),this.initializationCounter++,window.setTimeout(()=>{this.collisionEvents.forEach(f=>f.initialDisabled=!1)},80)}initPhysics(){this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=new Gt.World(new Gt.Vector3(0,this.gravity,0)),this.events=new Gt.EventQueue(!0);let t=[],e=[];if(this.page.traverseChildren(a=>{let l;if(a instanceof Gi)if(a.objectForSample){if(a.objectForSample.dataPatched.physics.fusedBody)return;l=a.object}else return a.object.dataPatched.physics.fusedBody===!0&&a.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else if(a instanceof Nr)l=a.object;else{if(a instanceof sc||a instanceof Kl)return;if(l=a,l.dataPatched.cloner?.disabled===!1&&l.dataPatched.cloner?.hideBase&&l.dataPatched.physics?.fusedBody!==!0)return!0}let c=l.dataPatched,u;for(let y of c.events)y.data.disabled!==!0&&y.data.type==="GameControl"&&(u=y.data);if(!c.physics||(c.physics.enabled==="visibility"?!c.visible:!c.physics.enabled))return!0;a.updateMatrixWorldSVD();let h=Eg(c),d=!1,f=l.userData.hasDestroy,p=l.userData.hasDrag,m=!1;for(let y of c.events)if(y.data.disabled!==!0){if(y.data.type==="Collision"){d=!0;let v=new Wb(y.id,y.data,l,this.page,this.sharedAssets,this.eventManager);v.initialDisabled=!0,this.collisionEvents.push(v),this.sharedGameControlGlobals.entityToCollisionEvents[l.uuid]&&this.sharedGameControlGlobals.entityToCollisionEvents[l.uuid].every(x=>x.id!==y.id)?this.sharedGameControlGlobals.entityToCollisionEvents[l.uuid].push(v):this.sharedGameControlGlobals.entityToCollisionEvents[l.uuid]=[v]}else if(y.data.type==="Follow"){m=!0;let v=y.data.target;a.traverseVisible(x=>{x.userData.isFollowingObj=v})}}c.physics.rigidBody==="dynamic"&&c.physics.fusedBody===!1&&(a.matrixWorldFusedFalse=a.matrixWorld.clone());let g=a.geometry;if(u!==void 0){let y=Gt.RigidBodyDesc.kinematicPositionBased();(a.hasNonUniformScale?a.matrixWorldRigid:a.matrixWorld).decompose(bi,oo,uc),a.position0=bi.clone().divideScalar(this.pixelsPerMeter),a.rotation0=oo.clone(),bi.divideScalar(this.pixelsPerMeter),y.setTranslation(bi.x,bi.y,bi.z).setRotation(oo);let v=this.sharedGameControlGlobals.rapierWorld.createRigidBody(y);a.rigidBody=v;let x;u.collider.type==="sphere"?x=Gt.ColliderDesc.ball(u.collider.radius/this.pixelsPerMeter):u.collider.type==="capsule"?x=Gt.ColliderDesc.capsule((u.collider.height/2-u.collider.radius)/this.pixelsPerMeter,u.collider.radius/this.pixelsPerMeter):x=Gt.ColliderDesc.cuboid(u.collider.width/this.pixelsPerMeter/2,u.collider.height/this.pixelsPerMeter/2,u.collider.depth/this.pixelsPerMeter/2),x.setFrictionCombineRule(Gt.CoefficientCombineRule.Average).setRestitutionCombineRule(Gt.CoefficientCombineRule.Average).setDensity(c.physics.density).setFriction(c.physics.friction).setRestitution(c.physics.restitution);let S=this.sharedGameControlGlobals.rapierWorld.createCollider(x,v);this.sharedGameControlGlobals.colliderToEntity.set(S.handle,l),bi.fromArray(u.collider.position).multiply(uc.setFromMatrixScale(l.matrixWorld)).divideScalar(this.pixelsPerMeter),S.setTranslationWrtParent(bi);let w=new Ke().setFromEuler(new nr().setFromVector3(new E().fromArray(u.collider.rotation)));S.setRotationWrtParent(w),S.setActiveEvents(Gt.ActiveEvents.COLLISION_EVENTS),this.generateSensorColliderDescs(l,!0)}else c.physics.rigidBody==="dynamic"||h||m||f||p||d?(this.addRigidBody(a,l,{hasFollow:m,hasTransformAnim:h,hasDrag:p}),this.generateSensorColliderDescs(l,c.physics.fusedBody)):(g&&t.push(no(g,a.matrixWorld)),c.physics.fusedBody&&a.traverseObject((y,v)=>{if(v===0)return;let x;if(y instanceof Gi)if(y.objectForSample){if(y.objectForSample.dataPatched.physics.fusedBody)return;x=y.object}else return y.object.dataPatched.physics.fusedBody===!0&&y.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else{if(y instanceof sc||y instanceof Kl)return;if(y instanceof Nr)x=y.object;else if(x=y,x.dataPatched.cloner?.hideBase)return!0}let S=x.dataPatched;if(S.physics.enabled==="visibility"?!S.visible:!S.physics.enabled)return!0;let w=y.geometry;w?.getAttribute("position")!==void 0&&t.push(no(w,y.matrixWorld))}),this.generateSensorColliderDescs(l,c.physics.fusedBody,e));if(c.physics?.fusedBody===!0||u)return!0}),t.length===0)return;let r=Gs(t);r.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let i=Gt.RigidBodyDesc.fixed(),s=this.sharedGameControlGlobals.rapierWorld.createRigidBody(i),o=Gt.ColliderDesc.trimesh(r.getAttribute("position").array,r.getIndex().array).setFrictionCombineRule(Gt.CoefficientCombineRule.Multiply).setRestitutionCombineRule(Gt.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);this.sharedGameControlGlobals.rapierWorld.createCollider(o,s);for(let[a,l]of e){let c=this.sharedGameControlGlobals.rapierWorld.createCollider(a,s);this.sensorToTriggerEvent[c.handle]=l}}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}rebuildBVH(){this.usePhysics?this.initPhysics():(this.page.traverseEntity(t=>{for(let e of t.dataPatched.events)if(e.data.type==="Trigger"&&e.data.disabled!==!0){let r=new Tg(e.id,e.data,t,this.page,this.sharedAssets,this.eventManager),i=new ue().compose(ao.fromArray(e.data.position),Xf.setFromEuler(aF.fromArray(e.data.rotation)),xM);if(e.data.triggerZone==="box"){let s=new Ht;s.min.fromArray(e.data.size).multiplyScalar(-.5),s.max.fromArray(e.data.size).multiplyScalar(.5),this.sharedGameControlGlobals.triggers.push([s,i,t,r])}else this.sharedGameControlGlobals.triggers.push([e.data.radius,i,t,r])}}),this.needsCollisionDetection&&this.initBVH())}disconnectEvents(){this.collisionEvents.forEach(t=>t.disconnect()),this.sharedGameControlGlobals.triggers.forEach(t=>t[3].disconnect()),this.sharedGameControlGlobals.triggers.length=0}deactivate(){if(!!this.isEnabled){this.isEnabled=!1,this.page.traverse(t=>{let e=t;e.matrixWorldFusedFalse&&(e.matrixWorldFusedFalse=void 0),e.rigidBody&&(e.rigidBody=void 0),e.position0&&(e.position0=void 0),e.rotation0&&(e.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.rapierWorld=void 0,this.sharedGameControlGlobals.staticMeshBVH=void 0,this.accumulator=0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.disconnectEvents(),this.gameControl?.reset(),this.gameControl?.dispose(),this.gameControl=null,this.initializationCounter=-1,this.joysticks.forEach(([t,e])=>{t?.destroy(),e.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls&&(this.orbitControls.dispose(),this.orbitControls=void 0),this.navigationMeshWrapper?.dispose(),this.navigationMeshWrapper=void 0;for(let t of Object.values(this.sharedGameControlGlobals.entityToCollisionEvents))t.forEach(e=>e.disconnect());this.sharedGameControlGlobals.entityToCollisionEvents={},this.page.updateMatrixWorld(!0)}}update(t,e,r){if(!this.isEnabled)return!0;let i=!0;if(this.orbitControls!==void 0&&this.orbitControls.needsUpdate&&(i=!this.orbitControls.update()),this.initializationCounter>=0&&this.initializationCounter<2?(this.initializationCounter++,i=!1):this.initializationCounter===2&&this.gameControl&&(i=!this.gameControl.update(t,e,r)&&i),this.usePhysics===!1&&this.checkTrigger(),this.usePhysics){let s=.016666666666666666;if(t===0)i=this.stepPhysics()&&i;else{let o=t/1e3;o s*.55&&(o=s),this.accumulator+=o;let a=performance.now(),l=0,c=6;for(;this.accumulator>=s&&ls*1e3)););this.accumulator=this.accumulator%s}}return i}stepPhysics(){for(let e of this.sharedGameControlGlobals.entitiesWithTransformAnim){(e.hasNonUniformScale?e.matrixWorldRigid:e.matrixWorld).decompose(bi,oo,uc),yM.setFromQuaternion(oo);let r=e;r.prevR===void 0?(r.prevR=yM.clone(),r.prevT=bi.clone()):(r.prevR.copy(yM),r.prevT.copy(bi)),e.rigidBody&&(e.rigidBody.setNextKinematicTranslation(bi.divideScalar(this.pixelsPerMeter)),e.rigidBody.setNextKinematicRotation(oo))}return this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),!this.updatePositions()}dispatchCollisionEvent(t,e,r){let i=(this.sharedGameControlGlobals.rapierWorld?.getCollider(r))._parent,s;if(e.cloner){for(let o of e.cloner.children)if(o.rigidBody===i){s=o;break}}t.dispatch(s),e.dispatchEvent(Db)}updateUseWindowEvents(t){this.orbitControls?.updateUseWindowEvents(t)}generateSensorColliderDescs(t,e,r){let i=lF.copy(t.matrixWorld).invert();t.traverseEntity((s,o)=>{if(e===!1&&o===1)return!0;for(let a of s.dataPatched.events)if(a.data.type==="Trigger"&&a.data.disabled!==!0){let l=new Tg(a.id,a.data,s,this.page,this.sharedAssets,this.eventManager),c;if(a.data.triggerZone==="box"?c=Gt.ColliderDesc.cuboid(...a.data.size.map(u=>u/(2*this.pixelsPerMeter))):c=Gt.ColliderDesc.ball(a.data.radius/this.pixelsPerMeter),c.setDensity(0).setSensor(!0).setActiveEvents(Gt.ActiveEvents.COLLISION_EVENTS),ao.fromArray(a.data.position),Xf.setFromEuler(aF.fromArray(a.data.rotation)),Qb.compose(ao,Xf,xM).premultiply(s.matrixWorld),r?(Qb.decompose(ao,Xf,vM),c.setActiveCollisionTypes(Gt.ActiveCollisionTypes.KINEMATIC_FIXED|Gt.ActiveCollisionTypes.DYNAMIC_FIXED)):(Qb.premultiply(i).decompose(ao,Xf,vM),t.rigidBody.bodyType()===Gt.RigidBodyType.Dynamic||(t.rigidBody.bodyType()===Gt.RigidBodyType.Fixed?c.setActiveCollisionTypes(Gt.ActiveCollisionTypes.KINEMATIC_FIXED|Gt.ActiveCollisionTypes.DYNAMIC_FIXED):c.setActiveCollisionTypes(Gt.ActiveCollisionTypes.KINEMATIC_KINEMATIC|Gt.ActiveCollisionTypes.DYNAMIC_KINEMATIC))),ao.divideScalar(this.pixelsPerMeter),c.setTranslation(ao.x,ao.y,ao.z),c.setRotation(Xf),r)r.push([c,l]);else{let u=this.sharedGameControlGlobals.rapierWorld.createCollider(c,t.rigidBody);this.sensorToTriggerEvent[u.handle]=l}}})}checkTrigger(){let t;for(let e=0;eh!==l)}}}};function hF(n){let t=this._clip.duration,e=this._clip.start??0,r=this.loop,i=this.time+n,s=this._loopCount,o=r===Pp;if(n===0)return s===-1?i:o&&(s&1)===1?t-(i-e):i;if(r===Vw){s===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(i>=t)i=t;else if(i<0)i=0;else{this.time=i;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:n<0?-1:1})}}else{if(s===-1&&(n>=0?(s=0,this._setEndings(!0,this.repetitions===0,o)):this._setEndings(this.repetitions===0,!0,o)),i>=t||i0?t:e,this.repetitions===1&&(i=t)),this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:n>0?1:-1});else{if(l===1){let c=n<0;this._setEndings(c,!c,o)}else this._setEndings(!1,!1,o);this._loopCount=s,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}else this.time=i;if(o&&(s&1)===1)return t-(i-e)}return i}var dF=!1,Jb=class{constructor(t,e,r,i){this.scene=t;this.requestRender=e;this.updateDisplayProgress=r;this.animationInspectorState=i;this.clipIdToAction={};this.activeClip=null;this.needsUpdate=!1;this.addClip=t=>{t.data.type==="Empty"&&t.data.animations&&t.data.animations.forEach((e,r)=>{let i=e[0]+"/";if(Array.isArray(t.identity)?i+=t.identity[0]:i+=t.uuid,this.clipIdToAction[i])return;let s=Qu.parse(JSON.parse(e[2]));t.animations[r]=s;let o=this.mixer.clipAction(s,t);dF===!1&&(Object.getPrototypeOf(o)._updateTime=hF,dF=!0),o.clampWhenFinished=!0,this.clipIdToAction[i]=o})};this.mixer=new _y(t),this.scene.traverseEntity(this.addClip)}deleteClip(t,e){let r=this.scene.find(e);if(!r)return;let i=r.animations.find(o=>o.uuid===t);if(!i)return;let s=this.clipIdToAction[t];!s||(s.stop(),this.mixer.uncacheClip(i),delete this.clipIdToAction[t],r.animations=r.animations.filter(o=>o.uuid!==t))}get isPlaying(){return Object.values(this.clipIdToAction).some(t=>t.isRunning())}playFromInspector(t){this.mixer.stopAllAction();let e=this.clipIdToAction[t];!e||(e.play(),this.activeClip=e.getClip(),this.requestRender())}onExitPlayMode(){Object.values(this.clipIdToAction).forEach(t=>{t.repetitions=1/0,t.loop=kw}),this.mixer.stopAllAction(),this.requestRender()}play(t){let e=t.clipId+"/"+t.object,r=this.clipIdToAction[e];if(!!r)return t&&(t.repeat>=0&&(r.repetitions=t.repeat+1),t.direction==="pingpong"&&t.repeat!==0&&(r.loop=Pp)),r.play(),r.paused=!1,this.requestRender(),r}resumeFromInspector(t){let e=this.clipIdToAction[t];!e||(e.play(),e.paused=!1,this.requestRender())}pauseFromInspector(t){let e=this.clipIdToAction[t];!e||(e.paused=!0)}stop(){this.mixer.stopAllAction(),this.requestRender()}update(t){if(this.needsUpdate)this.needsUpdate=!1;else if(this.isPlaying===!1||this.animationInspectorState?.isScrubbing)return;this.mixer.update(t/1e3),this.activeClip&&this.updateDisplayProgress(Math.round(this.mixer.time/this.activeClip.duration*(this.maxFrames-1)%(this.maxFrames-1))),this.requestRender()}get maxFrames(){return jT(this.activeClip??void 0)}setProgressFromInspector(t,e){if(!this.clipIdToAction[e])return;this.activeClip!==this.clipIdToAction[e].getClip()&&this.playFromInspector(e);let r=this.clipIdToAction[e].paused;this.clipIdToAction[e].paused=!1,this.mixer.setTime(Math.min(t/(this.maxFrames-1),.9999)*this.activeClip.duration),this.requestRender(),r&&(this.clipIdToAction[e].paused=!0)}};var SM=new WeakMap,$b=class extends ul{constructor(t){super(t),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(t){return this.decoderPath=t,this}setDecoderConfig(t){return this.decoderConfig=t,this}setWorkerLimit(t){return this.workerLimit=t,this}load(t,e,r,i){let s=new Zu(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,o=>{this.decodeDracoFile(o,e).catch(i)},r,i)}decodeDracoFile(t,e,r,i){let s={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:i||this.defaultAttributeTypes,useUniqueIDs:!!r};return this.decodeGeometry(t,s).then(e)}decodeGeometry(t,e){let r=JSON.stringify(e);if(SM.has(t)){let l=SM.get(t);if(l.key===r)return l.promise;if(t.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let i,s=this.workerNextTaskID++,o=t.byteLength,a=this._getWorker(s,o).then(l=>(i=l,new Promise((c,u)=>{i._callbacks[s]={resolve:c,reject:u},i.postMessage({type:"decode",id:s,taskConfig:e,buffer:t},[t])}))).then(l=>this._createGeometry(l.geometry));return a.catch(()=>!0).then(()=>{i&&s&&this._releaseTask(i,s)}),SM.set(t,{key:r,promise:a}),a}_createGeometry(t){let e=new _e;t.index&&e.setIndex(new Xe(t.index.array,1));for(let r=0;r{r.load(t,i,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let t=typeof WebAssembly!="object"||this.decoderConfig.type==="js",e=[];return t?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then(r=>{let i=r[0];t||(this.decoderConfig.wasmBinary=r[1]);let s=N$.toString(),o=["/* draco decoder */",i,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(` `);this.workerSourceURL=URL.createObjectURL(new Blob([o]))}),this.decoderPending}_getWorker(t,e){return this._initDecoder().then(()=>{if(this.workerPool.lengths._taskLoad?-1:1});let r=this.workerPool[this.workerPool.length-1];return r._taskCosts[t]=e,r._taskLoad+=e,r})}_releaseTask(t,e){t._taskLoad-=t._taskCosts[e],delete t._callbacks[e],delete t._taskCosts[e]}debug(){console.log("Task load: ",this.workerPool.map(t=>t._taskLoad))}dispose(){for(let t=0;t{let h=u.draco,d=new h.Decoder,f=new h.DecoderBuffer;f.Init(new Int8Array(l),l.byteLength);try{let p=e(h,d,f,c),m=p.attributes.map(g=>g.array.buffer);p.index&&m.push(p.index.array.buffer),self.postMessage({type:"decode",id:a.id,geometry:p},m)}catch(p){console.error(p),self.postMessage({type:"error",id:a.id,error:p.message})}finally{h.destroy(f),h.destroy(d)}});break}};function e(o,a,l,c){let u=c.attributeIDs,h=c.attributeTypes,d,f,p=a.GetEncodedGeometryType(l);if(p===o.TRIANGULAR_MESH)d=new o.Mesh,f=a.DecodeBufferToMesh(l,d);else if(p===o.POINT_CLOUD)d=new o.PointCloud,f=a.DecodeBufferToPointCloud(l,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!f.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+f.error_msg());let m={index:null,attributes:[]};for(let g in u){let y=self[h[g]],v,x;if(c.useUniqueIDs)x=u[g],v=a.GetAttributeByUniqueId(d,x);else{if(x=a.GetAttributeId(d,o[u[g]]),x===-1)continue;v=a.GetAttribute(d,x)}m.attributes.push(i(o,a,d,g,y,v))}return p===o.TRIANGULAR_MESH&&(m.index=r(o,a,d)),o.destroy(d),m}function r(o,a,l){let u=l.num_faces()*3,h=u*4,d=o._malloc(h);a.GetTrianglesUInt32Array(l,h,d);let f=new Uint32Array(o.HEAPF32.buffer,d,u).slice();return o._free(d),{array:f,itemSize:1}}function i(o,a,l,c,u,h){let d=h.num_components(),p=l.num_points()*d,m=p*u.BYTES_PER_ELEMENT,g=s(o,u),y=o._malloc(m);a.GetAttributeDataArrayForAllPoints(l,h,g,m,y);let v=new u(o.HEAPF32.buffer,y,p).slice();return o._free(y),{name:c,array:v,itemSize:d}}function s(o,a){switch(a){case Float32Array:return o.DT_FLOAT32;case Int8Array:return o.DT_INT8;case Int16Array:return o.DT_INT16;case Int32Array:return o.DT_INT32;case Uint8Array:return o.DT_UINT8;case Uint16Array:return o.DT_UINT16;case Uint32Array:return o.DT_UINT32}}}var hc;function fF(){return hc||(hc=new $b,hc.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload()),hc.decoderPending}async function F$(n){if(hc){let t={attributeIDs:hc.defaultAttributeIDs,attributeTypes:hc.defaultAttributeTypes,useUniqueIDs:!1},e;try{e=await hc.decodeGeometry(new Int8Array(n).buffer,t)}catch(r){console.error(r)}if(e)return{index:e.index?{array:e.index.array}:void 0,attributes:Object.entries(e.attributes).map(([r,i])=>({name:r,itemSize:i.itemSize,array:i.array}))}}return null}async function pF(n,t){let[e,r]=xA(Nv.deserialize(new Uint8Array(n)));return s0(e),t&&t(e),r.result().data}function mF(n){let t=[];return n.scene.objects.traverse((e,r)=>{r.type==="Mesh"&&r.geometry.type==="NonParametricGeometry"&&r.geometry.data.draco!==void 0&&t.push(r)}),t}async function gF(n){for(let t of n){let e=await F$(t.geometry.data.draco);if(e){let r=t.geometry.data;e.index&&(r.index={array:e.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let i={};e.attributes.forEach(({name:s,array:o,itemSize:a})=>{i[s]={array:o,itemSize:a,type:"Float32Array",normalized:!1}}),r.attributes=i,r.draco=void 0}}}var eS=class{constructor(){this._clickCount=0;this._lastTime=0;this._lastPosition=[0,0];this._delay=500;this._distance=2;this._onMouseDown=t=>{let e=[t.clientX,t.clientY],r=new Date().getTime();if(this._clickCount>0){let i=e[0]-this._lastPosition[0],s=e[1]-this._lastPosition[1];Math.sqrt(i*i+s*s)>this._distance&&(this._clickCount=0)}this._lastPosition=e,this._clickCount=r-this._lastTime>this._delay?1:this._clickCount+1,this._lastTime=r};this._onMouseUp=t=>{}}start(t,e=500,r=2){this._target&&this.stop(),this.reset(),this._delay=e,this._distance=r,this._target=t,this._target.addEventListener("pointerdown",this._onMouseDown,!1),this._target.addEventListener("pointerup",this._onMouseUp,!1)}stop(){this._target&&(this._target.removeEventListener("pointerdown",this._onMouseDown,!1),this._target.removeEventListener("pointerup",this._onMouseUp,!1),this._target=void 0)}get clickCount(){return this._clickCount}reset(){this._clickCount=0,this._lastTime=0,this._lastPosition=[0,0]}};var wM=class{constructor(t,e,r,i,s,o,a,l){this.eventId=t;this.id=e;this.data=r;this.dataEvent=i;this.object=s;this.stage=!1;this.actions=kt(i,r.actions,o,a,l,s)}disconnect(){hr(this.actions)}dispatchIn(){this.actions.Audio.forEach(t=>t.dispatchBasic()),this.actions.Particles.forEach(t=>t.dispatchBasic()),this.actions.Video.forEach(t=>t.dispatchBasic()),this.actions.Create.forEach(t=>t.dispatch()),this.actions.Destroy.forEach(t=>t.dispatch()),this.actions.Reset.forEach(t=>t.dispatch()),this.actions.Link.forEach(t=>t.dispatch()),this.actions.Transition.forEach(t=>{t.object.currentTransitionEvent!==this&&(t.object.currentTransitionEvent=this,t.init())}),this.actions.Transition.forEach(t=>t.toggle()),this.actions.Animation.forEach(t=>t.play()),this.actions.SwitchCamera.forEach(t=>t.play()),this.actions.SceneTransition.forEach(t=>t.dispatch()),this.actions.SetVariable.forEach(t=>t.checkConditions()),this.actions.SetVariable.forEach(t=>t.dispatch()),this.actions.DynamicVariablePlay.forEach(t=>t.dispatch()),this.actions.ClearLocalStorage.forEach(t=>t.dispatch()),this.actions.UserAPI.forEach(t=>t.dispatch())}dispatchOut(){this.actions.Transition.forEach(t=>{t.toggle()})}},tS=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this.breakpoints=[];this.resize=(e,r)=>{this.breakpoints.forEach(i=>{let s=Uv.deviceToSize(i.data.size),o=i.dataEvent.orientation==="horizontal"?e:r,a;switch(i.data.operator){case"<":a=o":a=o>s[0];break;case"<>":a=o>s[0]&&o{for(let r of e){let{width:i,height:s}=r.contentRect;this.resize(i,s)}})}connect(){let{page:e,sharedAssets:r,domElement:i}=this.eventContext;this.onResizeObserver.observe(i);let s=o=>{if(!(!o.visible||!o.data?.events.length))for(let{data:a,id:l}of o.data.events)a.disabled||a.type==="Resize"&&a.breakpoints.forEach(({data:c,id:u})=>{try{let h=new wM(l,u,c,a,o,e,r,this.eventManager);this.breakpoints.push(h)}catch(h){!1&&console.log(h)}})};e.traverseEntity(o=>{(o instanceof Er||o instanceof ur)&&o.frame?.traverse(a=>{s(a)}),s(o)})}disconnect(){this.onResizeObserver.disconnect(),this.breakpoints.forEach(e=>{e.disconnect()}),this.breakpoints=[]}};var rS=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this.userAPIs={};this.events=[];this.onSuccess=({userAPIId:e})=>{this.events.forEach(r=>{r.data.userAPIId===e&&r.dispatchSuccess()})};this.onError=({userAPIId:e})=>{this.events.forEach(r=>{r.data.userAPIId===e&&r.dispatchError()})};this.userAPIs=e.sharedAssets.getUserAPIs()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(r=>r.data.type==="API"&&!r.data.disabled).forEach(r=>{this.events.push(new AM(r.id,r.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userAPIs).forEach(([e,r])=>{r.on("success",this.onSuccess),r.on("error",this.onError),r.autostart&&r.callUserAPI(this.eventContext.sharedAssets)})}disconnect(){Object.entries(this.userAPIs).forEach(([e,r])=>{r.off("success",this.onSuccess),r.off("error",this.onError)})}},AM=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.successActions=kt(e,e.successActions,i,s,o,r),this.errorActions=kt(e,e.errorActions,i,s,o,r)}dispatchSuccess(){this.dispatchActions(this.successActions)}dispatchError(){this.dispatchActions(this.errorActions)}dispatchActions(t){t.Audio.forEach(e=>e.dispatchConditional()),t.Particles.forEach(e=>e.dispatchConditional()),t.Video.forEach(e=>e.dispatchConditional()),t.Create.forEach(e=>e.dispatch()),t.Destroy.forEach(e=>e.dispatch()),t.Reset.forEach(e=>e.dispatch()),t.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),t.Transition.forEach(e=>e.play()),t.Animation.forEach(e=>e.play()),t.SwitchCamera.forEach(e=>e.play()),t.SceneTransition.forEach(e=>e.dispatch()),t.SetVariable.forEach(e=>e.checkConditions()),t.SetVariable.forEach(e=>e.dispatch()),t.DynamicVariablePlay.forEach(e=>e.dispatch()),t.ClearLocalStorage.forEach(e=>e.dispatch()),t.UserAPI.forEach(e=>e.dispatch())}};var iS=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this.userWebhooks={};this.events=[];this.onMessage=({userWebhookId:e})=>{this.events.forEach(r=>{r.data.userWebhookId===e&&r.dispatch()})};this.userWebhooks=e.sharedAssets.getUserWebhooks()}connect(){this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(r=>r.data.type==="WEBHOOK"&&!r.data.disabled).forEach(r=>{this.events.push(new EM(r.id,r.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),Object.entries(this.userWebhooks).forEach(([e,r])=>{r.connect(),r.on("message",this.onMessage)})}disconnect(){Object.entries(this.userWebhooks).forEach(([e,r])=>{r.off("message",this.onMessage),r.disconnect()})}},EM=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.actions=kt(e,e.actions,i,s,o,r)}dispatch(){let t=this.actions;t.Audio.forEach(e=>e.dispatchConditional()),t.Particles.forEach(e=>e.dispatchConditional()),t.Video.forEach(e=>e.dispatchConditional()),t.Create.forEach(e=>e.dispatch()),t.Destroy.forEach(e=>e.dispatch()),t.Reset.forEach(e=>e.dispatch()),t.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),t.Transition.forEach(e=>e.play()),t.Animation.forEach(e=>e.play()),t.SwitchCamera.forEach(e=>e.play()),t.SceneTransition.forEach(e=>e.dispatch()),t.SetVariable.forEach(e=>e.checkConditions()),t.SetVariable.forEach(e=>e.dispatch()),t.DynamicVariablePlay.forEach(e=>e.dispatch()),t.ClearLocalStorage.forEach(e=>e.dispatch()),t.UserAPI.forEach(e=>e.dispatch())}};function V$(){let n=document.createElement("textarea");return n.style.position="fixed",n.style.top="200px",n.style.left="400px",n.style.zIndex="-1",n.style.border="1px solid rgba(255,0,0,0.5)",n.style.width="10px",n.style.height="500px",n.style.color="white",n.style.opacity="0.5",n.style.background="transparent",n.style.display="none",n.style.margin="0px",n.style.padding="0px",n.style.boxSizing="content-box",n.style.pointerEvents="none",n}var k$=new E(0,0,1),yF=new E,vF=new E,xF=new fr,nS=class{constructor(t,e,r,i,s){this.containerScene=t;this.raycaster=e;this.sharedAssets=r;this.requestRender=i;this.onExit=s;this.htmlInput=null;this.virtualInput=null;this.helper=new Pf;this.doubleClickHandler=new eS;this.isDragging=!1;this.plane=new kr;this.caretInterval=0;this.planeIntersection=new E;this.projected=new k;this._lastIndex=0;this._isFirstDragMove=!1;this.selectionOnDragStart=0;this.onTextMaterialChanged=()=>{let t=this.virtualInput?.data;if(this.virtualInput!==void 0&&t){let e=t.material,r=typeof e=="string"?this.sharedAssets.data.materials[e]:e,i=wL(r,this.sharedAssets);this.helper.setCaretColor(i)}};this.stopAnimateTextCursor=()=>{clearInterval(this.caretInterval),this.helper&&(this.helper.caretMesh.visible=!1)};this.startAnimateTextCursor=()=>{this.stopAnimateTextCursor(),this.helper&&(this.helper.caretMesh.visible=!0,this.caretInterval=setInterval(()=>{this.helper&&(this.helper.caretMesh.visible=!this.helper.caretMesh.visible),this.requestRender()},600))};this.handleCaretUpdate=t=>{if(!this.htmlInput||!this.virtualInput)return;let e=this.helper,r=t?.key==="ArrowLeft"||t?.key==="ArrowRight",i=t?.key==="ArrowUp"||t?.key==="ArrowDown";this.htmlInput.selectionStart===this.htmlInput.selectionEnd?(e.setCaretPosition(this.htmlInput.selectionStart,{horizontalKeyMove:r,verticalKeyMove:i}),this.startAnimateTextCursor()):e.setSelection(this.htmlInput.selectionStart,this.htmlInput.selectionEnd),this.requestRender()};this.containerScene.add(this.helper)}createInput(){return this.htmlInput=V$(),this.htmlInput}connect(){}disconnect(){this.stopAnimateTextCursor(),this.helper.hide(),this.htmlInput?.remove(),this.doubleClickHandler.stop()}handleMouseDown(){if(!this.htmlInput||!this.virtualInput)return!0;this.getPointOnPlane();let t=this.doubleClickHandler.clickCount,{index:e,lineIndex:r,characterIndex:i}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,t>1?"inside":"previous")??{index:0,lineIndex:0,characterIndex:0};this.virtualInput?.wrappedText?.length&&this.virtualInput.wrappedText[r][Math.max(0,i-1)]===` `&&(e--,i--),this._lastIndex=e,this._isFirstDragMove=!0;let s=this.checkClickedObject();if(t===1){if(s===null)return this.onExit(this.virtualInput),!0;this.selectionOnDragStart=e,this.isDragging=!0,this.setInputSelection(e)}else s===this.virtualInput&&(t===2?this.selectClosestWord(r,i):t>2&&(this.setInputSelection(0,this.htmlInput.value.length),this.doubleClickHandler.reset()))}handleMouseUp(){this.applyRangeToTextInput(),this.isDragging=!1,this._isFirstDragMove=!1}handleMouseMove(){!this.virtualInput||(this._isFirstDragMove&&this.doubleClickHandler.clickCount>1&&(this.selectionOnDragStart=this._lastIndex,this.isDragging=!0,this.setInputSelection(this._lastIndex)),this._isFirstDragMove=!1,this.getPointOnPlane(),this.applyRangeToTextInput())}focus(t){if(this.virtualInput=t,this.updateTextInputStyles(),this.htmlInput)if(t){let e=this.data?.geometry.text;this.htmlInput.value=typeof e=="string"?"":e?.textValue.toString()??""}else this.htmlInput.value=""}blur(){}get data(){let{virtualInput:t}=this;if(t)return t.dataPatched}applyRangeToTextInput(){if(!this.isDragging||!this.virtualInput||!this.htmlInput)return;let t=this.selectionOnDragStart,{index:e,lineIndex:r,characterIndex:i}=this.helper.getSelectionFromPosition(this.projected.x,this.projected.y,this.doubleClickHandler.clickCount>2?"inside":"previous")??{index:0};r!==void 0&&i!==void 0&&this.virtualInput?.wrappedText[r][i-1]===` `&&e--,this.htmlInput.setSelectionRange(Math.min(t,e),Math.max(t,e))}checkClickedObject(){if(this.virtualInput){let t=this.raycaster.intersectObject(this.virtualInput,!1);if(t.length>0){let e=t[0];if(e.object instanceof ic)return e.object}}return null}selectClosestWord(t,e){if(!this.virtualInput)return;let r=this.virtualInput.wrappedText,i=r[t],s=e+1,o=e;i[e]!==" "&&(s=this.findNextCharOccurence(i,e,"forward"," "),o=this.findNextCharOccurence(i,e,"backward"," "),o>0&&o++,s>=i.length-1&&t===r.length-1&&s++);let a=this.helper,l=a.getGlobalIndexFromLineAndCharIndexes(r,t,o),c=a.getGlobalIndexFromLineAndCharIndexes(r,t,s);this.setInputSelection(l,c)}findNextCharOccurence(t,e,r,i=" "){let s=Math.max(0,t.length-1),o=r==="forward"?s:0,a=r==="forward"?1:-1,l=Math.max(Math.min(e,s),0);for(;l!==o;)if(l+=a,t.charAt(l)===i)return l;return o}getPointOnPlane(){let t=this.virtualInput?.data;if(!(!this.virtualInput||!t)&&this.raycaster.ray.intersectsPlane(this.plane)){this.planeIntersection===null&&(this.planeIntersection=new E);let e=this.raycaster.ray.intersectPlane(this.plane,this.planeIntersection);if(e){this.planeIntersection.copy(this.virtualInput.worldToLocal(e));let r=typeof t.geometry.width=="number"?t.geometry.width:1,i=typeof t.geometry.height=="number"?t.geometry.height:1;this.projected.set(e.x+r*.5,e.y-i*.5)}}}updatePlane(){let t=this.virtualInput?.data;this.virtualInput&&t&&(xF.getNormalMatrix(this.virtualInput.matrixWorld),yF.copy(k$).applyMatrix3(xF).normalize(),this.virtualInput.localToWorld(vF.set(0,0,t.geometry.depth)),this.plane.setFromNormalAndCoplanarPoint(yF,vF))}setInputSelection(t,e=t){this.htmlInput?.setSelectionRange(t,e),setTimeout(()=>{this.htmlInput?.focus()})}updateTextInputStyles(){let t=this.virtualInput?.data;this.virtualInput&&t&&this.htmlInput&&(this.htmlInput.style.fontSize=t.geometry.fontSize+"px",this.htmlInput.style.letterSpacing=t.geometry.letterSpacing*t.geometry.fontSize+"px",this.htmlInput.style.lineHeight=t.geometry.fontSize*t.geometry.lineHeight+"px",this.htmlInput.style.width=t.geometry.width+"px",this.htmlInput.style.height=t.geometry.height+"px",this.htmlInput.style.textAlign=U$(t.geometry.horizontalAlign))}};function U$(n){return n===4?"justify":n===2?"right":n===3?"center":"left"}var SF=(n,t)=>{if(typeof n=="string"){let e=t.data(n);if(e)return SF(e.value,t)}return Br.getDisplayedValue(n)};function bF(n,t){let e=n.text,r="";if(typeof e=="string"){let i=t.variables.data(r);i&&(r=SF(i.value,t.variables))}else r=e.textValue.toString();return r}var sS=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this._textInputs=[];this.sceneHelpers=new ei;this.helper=new Pf;this._onMouseDownFocusIn=e=>{if(Je.length>1)return;this.eventContext.updateRaycaster(e);let r=null;if(this.eventContext.raycaster){for(let i of this._textInputs)if(this.eventContext.raycaster.intersectObject(i,!0).length>0){r=i;break}}this.focusOnTextInput(r),this._onCaretUpdate(),this._onMouseUp(),this.textInputManager.doubleClickHandler.start(this.eventContext.domElement),this.textInputManager.doubleClickHandler._onMouseDown(e),this._onMouseDown(e)};this.onExit=()=>{let{virtualInput:e}=this.textInputManager;if(e===null)return;let r=this.textInputManager.htmlInput;this.helper.hide(),r?.setSelectionRange(r.value.length,r.value.length),this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!0);let{domElement:i}=this.eventContext;i.removeEventListener("pointerdown",this._onMouseDown,!1),i.removeEventListener("pointerup",this._onMouseUp,!1),i.removeEventListener("pointermove",this._onMouseMove,!1),window.removeEventListener("keydown",this._onKeyPress),this.textInputManager.doubleClickHandler.reset(),i.addEventListener("pointerdown",this._onMouseDownFocusIn),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers()};this._onMouseDown=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseDown(),this.textInputManager.virtualInput&&this.eventContext.raycaster.intersectObject(this.textInputManager.virtualInput,!0).length>0&&this.eventManager.controlsManager.orbitControls&&(this.eventManager.controlsManager.orbitControls.enabled=!1)};this._onMouseUp=()=>{this.textInputManager.handleMouseUp(),this.eventManager.controlsManager.orbitControls&&!this.eventManager.controlsManager.orbitControls.enabled&&(this.eventManager.controlsManager.orbitControls.enabled=!0)};this._onMouseMove=e=>{this.eventContext.updateRaycaster(e),this.textInputManager.handleMouseMove()};this._onTextEdit=e=>{let{htmlInput:r,virtualInput:i,helper:s}=this.textInputManager;if(!r||!i)return;let o=r.value;i.textGeometry.setText(o).then(()=>{this.eventContext.requestRender()});let a=i.data;s.update();let l=a.geometry.text;if(typeof l=="string"){let c=l;this.eventContext.sharedAssets.updateVariable(c,{textValue:o})}this.textInputManager.updateTextInputStyles(),this._onCaretUpdate()};this._onCaretUpdate=e=>{this.textInputManager.handleCaretUpdate(e)};this._onKeyPress=e=>{e.key==="Escape"&&this.onExit()};this.textInputManager=new nS(this.sceneHelpers,e.raycaster,e.sharedAssets,e.requestRender,this.onExit)}connect(){let e=[];if(this.eventContext.scene.traverseEntity(s=>{s instanceof ic&&e.push(s)}),this._textInputs=e,e.length===0)return;let{domElement:r}=this.eventContext;r.addEventListener("pointerdown",this._onMouseDownFocusIn),this.textInputManager.connect();let i=this.textInputManager.createInput();document.body.appendChild(i),i.style.display="none",i.addEventListener("keyup",this._onCaretUpdate),i.addEventListener("keydown",this._onCaretUpdate),i.addEventListener("beforeinput",this._onCaretUpdate),i.addEventListener("paste",this._onCaretUpdate),i.addEventListener("cut",this._onCaretUpdate),i.addEventListener("select",this._onCaretUpdate),i.addEventListener("selectstart",this._onCaretUpdate)}disconnect(){let e=this.textInputManager.htmlInput,{domElement:r}=this.eventContext;r.removeEventListener("pointerdown",this._onMouseDownFocusIn),e?.removeEventListener("keyup",this._onCaretUpdate),e?.removeEventListener("keydown",this._onCaretUpdate),e?.removeEventListener("beforeinput",this._onCaretUpdate),e?.removeEventListener("paste",this._onCaretUpdate),e?.removeEventListener("cut",this._onCaretUpdate),e?.removeEventListener("select",this._onCaretUpdate),e?.removeEventListener("selectstart",this._onCaretUpdate),this._textInputs.forEach(i=>{let s=bF(i.data.geometry,this.eventContext.sharedAssets.data);i.textGeometry.setText(s)}),r.removeEventListener("pointerdown",this._onMouseDown,!1),r.removeEventListener("pointerup",this._onMouseUp,!1),r.removeEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress),this.eventContext.renderer.sceneHelpersOnTop=void 0,this.eventContext.renderer.pipeline.disableHelpers(),this.textInputManager.disconnect()}focusOnTextInput(e){this.textInputManager.focus(e),this.textInputManager.onTextMaterialChanged();let r=this.textInputManager.htmlInput;if(!r||e===null)return;this.textInputManager.updateTextInputStyles(),this.eventContext.renderer.sceneHelpersOnTop=this.sceneHelpers,this.eventContext.renderer.pipeline.enableHelpers(),this.textInputManager.isDragging=!1;let i=bF(e.textGeometry.userData.parameters,this.eventContext.sharedAssets.data);r.value=i,r.setSelectionRange(0,0),this.textInputManager.helper.show(e),r.style.display="block",r.addEventListener("input",this._onTextEdit),this.textInputManager.updatePlane();let{domElement:s}=this.eventContext;s.removeEventListener("pointerdown",this._onMouseDownFocusIn),s.addEventListener("pointerdown",this._onMouseDown,!1),s.addEventListener("pointerup",this._onMouseUp,!1),s.addEventListener("pointermove",this._onMouseMove,!1),window.addEventListener("keydown",this._onKeyPress)}};var oS=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this.events=[];this.onVoice=({value:e,frequencies:r})=>{this.events.forEach(i=>{i.dispatch()})}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(r=>r.data.type==="AIAssistantListener"&&!r.data.disabled).forEach(r=>{this.events.push(new TM(r.id,r.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("voice",this.onVoice))}disconnect(){this.openAIRealtime?.off("voice",this.onVoice)}},TM=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.actions=kt(e,e.actions,i,s,o,r)}dispatch(){this.dispatchActions(this.actions)}dispatchActions(t){t.Audio.forEach(e=>e.dispatchConditional()),t.Particles.forEach(e=>e.dispatchConditional()),t.Video.forEach(e=>e.dispatchConditional()),t.Create.forEach(e=>e.dispatch()),t.Destroy.forEach(e=>e.dispatch()),t.Reset.forEach(e=>e.dispatch()),t.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),t.Transition.forEach(e=>e.play()),t.Animation.forEach(e=>e.play()),t.SwitchCamera.forEach(e=>e.play()),t.SceneTransition.forEach(e=>e.dispatch()),t.SetVariable.forEach(e=>e.checkConditions()),t.SetVariable.forEach(e=>e.dispatch()),t.DynamicVariablePlay.forEach(e=>e.dispatch()),t.ClearLocalStorage.forEach(e=>e.dispatch()),t.UserAPI.forEach(e=>e.dispatch())}};var aS=class extends Yt{constructor(e,r){super(e);this.eventManager=r;this.events=[];this.onTriggerEvent=({description:e,direction:r})=>{let i=this.events.find(s=>s.data.description===e);i&&(r==="backward"?i.dispatchReverse():i.dispatch())}}connect(){this.openAIRealtime=this.eventContext.sharedAssets.openAIRealtime,this.openAIRealtime&&(this.eventContext.page.traverseEntity(e=>{e.data?.events.filter(r=>r.data.type==="AIAssistantTrigger"&&!r.data.disabled).forEach(r=>{this.events.push(new MM(r.id,r.data,e,this.eventContext.page,this.eventContext.sharedAssets,this.eventManager))})}),this.openAIRealtime.on("trigger_event",this.onTriggerEvent))}disconnect(){this.openAIRealtime?.off("trigger_event",this.onTriggerEvent)}},MM=class{constructor(t,e,r,i,s,o){this.id=t;this.data=e;this.object=r;this.actions=kt(e,e.actions,i,s,o,r)}dispatch(){let t=this.actions;t.Audio.forEach(e=>e.dispatchConditional()),t.Particles.forEach(e=>e.dispatchConditional()),t.Video.forEach(e=>e.dispatchConditional()),t.Create.forEach(e=>e.dispatch()),t.Destroy.forEach(e=>e.dispatch()),t.Reset.forEach(e=>e.dispatch()),t.Transition.forEach(e=>{e.object.currentTransitionEvent!==this&&(e.object.currentTransitionEvent=this),e.init()}),t.Transition.forEach(e=>e.play()),t.Animation.forEach(e=>e.play()),t.SwitchCamera.forEach(e=>e.play()),t.SceneTransition.forEach(e=>e.dispatch()),t.SetVariable.forEach(e=>e.checkConditions()),t.SetVariable.forEach(e=>e.dispatch()),t.DynamicVariablePlay.forEach(e=>e.dispatch()),t.ClearLocalStorage.forEach(e=>e.dispatch()),t.UserAPI.forEach(e=>e.dispatch())}dispatchReverse(){let t=this.actions;t.Transition.forEach(e=>e.reverseFromCurrent()),t.Particles.forEach(e=>e.reverseFromCurrent()),t.Animation.forEach(e=>e.reverseFromCurrent()),t.SwitchCamera.forEach(e=>e.reverseFromCurrent()),t.Create.forEach(e=>e.dispatchStop())}};var lS=class{constructor(t,e,r,i,s){this.publish=t;this.controlsManager=e;this.animationControls=r;this.eventContext=i;this.sharedVariables=s;this.isEnabled=!1;this.activateCount=0;this.needsMouse=!1;this.needsRaycast=!1;this.onTouchMovePreventScroll=t=>{let e=window.parent!==window,r=document.documentElement.scrollHeight>document.documentElement.clientHeight||document.documentElement.scrollWidth>document.documentElement.clientWidth;(t.touches.length>1||this.preventTouchScroll||e===!1&&r===!1)&&t.preventDefault()};this.onMouseWheelPreventScroll=t=>{this.preventScroll&&t.preventDefault()};this.onMouseMove=t=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(t),pressed:t.buttons>0}};this.onMouseDown=t=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(t),pressed:!0}};this.onMouseUp=t=>{this.eventContext.sharedAssets.mouseProperty={...this.getMousePosition(t),pressed:!1}};this.getMousePosition=t=>{let{domRect:e}=this.eventContext,{pageX:r,pageY:i}=t.touches?.length>0?t.touches[0]:t;return{x:r-(e.left+window.scrollX),y:i-(e.top+window.scrollY)}};this.stopRaycast=t.stopRaycast,this.preventScroll=t.preventScroll,this.preventTouchScroll=t.preventTouchScroll,this.hideCursor=t.hideCursor,this.requestRender=i.requestRender}activate(t=!1){if(this.isEnabled)return;this.isEnabled=!0,this.initializeActionsDependentStates(),this.needsMouse&&(this.eventContext.domElement.addEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.addEventListener("pointerdown",this.onMouseDown)),this.handlers={Spline:new Lb(this.eventContext),["VariableChange"]:new qb(this.eventContext,this.sharedVariables,this,this.needsMouse,this.needsRaycast),["API"]:new rS(this.eventContext,this),["WEBHOOK"]:new iS(this.eventContext,this),["AIAssistantListener"]:new oS(this.eventContext,this),["AIAssistantTrigger"]:new aS(this.eventContext,this),["Conditional"]:new Fb(this.eventContext,this),["Start"]:new Hb(this.eventContext,this),Basic:new Bb(this.eventContext,this,this.needsRaycast),["MouseHover"]:new Gb(this.eventContext,this),["Scroll"]:new jb(this.eventContext,this),["Follow"]:new kb(this.eventContext,this),["DragDrop"]:new Vb(this.eventContext,this),["LookAt"]:new zb(this.eventContext),["Resize"]:new tS(this.eventContext,this),Textfields:new sS(this.eventContext,this)};let{page:e,domElement:r}=this.eventContext;this.hideCursor&&(r.style.cursor="none"),e.traverseEntity(i=>{i.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(i=>i.connect()),r.addEventListener("wheel",this.onMouseWheelPreventScroll),r.addEventListener("touchmove",this.onTouchMovePreventScroll),this.activateCount++,t||(this.eventContext.sharedAssets.openAIRealtime?.connect(),this.eventContext.sharedAssets.openAIRealtime?.start())}deactivate(t=!1){if(!this.isEnabled)return;this.isEnabled=!1,this.eventContext.domElement.removeEventListener("pointermove",this.onMouseMove),this.eventContext.domElement.removeEventListener("pointerdown",this.onMouseDown),this.eventContext.domElement.removeEventListener("pointerup",this.onMouseUp),this.eventContext.sharedAssets.mouseProperty=null,this.eventContext.sharedAssets.raycastProperty=null;let{page:e,domElement:r}=this.eventContext;if(r.style.cursor="",Object.values(this.handlers).forEach(i=>i.disconnect()),this.controlsManager.gameControl?.disposeActions(),this.controlsManager.disconnectEvents(),e.traverseEntity(i=>{i.removeEventListener("requestRender",this.requestRender),i.destroyedInAction=!1}),r.removeEventListener("touchmove",this.onTouchMovePreventScroll),r.removeEventListener("wheel",this.onMouseWheelPreventScroll),this.animationControls.onExitPlayMode(),!t){let i=this.eventContext.sharedAssets.openAIRealtime;i?.disconnect(),i?.stop().then(()=>{i?.disconnect()})}}get isPaused(){return this.isEnabled}pause(){this.deactivate()}resume(){this.activate()}reset(){this.deactivate(!0),this.activate(!0),this.controlsManager.page.updateMatrixWorld(!0),this.controlsManager.rebuildBVH()}updateUseWindowEvents(t){let e=this.isEnabled;e&&this.deactivate(),this.eventContext.useWindowEvents=t,e&&this.activate()}initializeActionsDependentStates(){let t=this.eventContext.sharedAssets;t.resetDynamicVariablePlayState();let e=r=>{if(r.data.type==="Conditional"&&(r.data.ifActions.forEach(e),r.data.elseActions.forEach(e)),r.data.type==="Conditional"||r.data.type==="SetVariable")for(let i of r.data.type==="Conditional"?r.data.condition:r.data.expression)"id"in i&&Array.isArray(i.id)&&(i.id[0]==="mouse"&&(this.needsMouse=!0),i.id[0]==="raycast"&&(this.needsRaycast=!0));r.data.type==="DynamicVariablePlay"&&r.data.variableId!==""&&(r.data.mode==="Play"||r.data.mode==="PlayPause"||r.data.mode==="Toggle")&&t.setDynamicVariablePlayState(r.data.variableId,"Stopped")};this.eventContext.page.traverseEntity(r=>{if(!!r.data?.events.length)for(let i of r.data.events)if(i.data.type==="VariableChange"&&(i.data.variableId==="mouseProperty"&&(this.needsMouse=!0),i.data.variableId==="raycastProperty"&&(this.needsRaycast=!0)),i.data.type==="Conditional")for(let s of["inActions","outActions"])i.data[s].forEach(e);else if(i.data.type==="DragDrop")for(let s of["drag","drop"])i.data.dragDropActions[s].forEach(e);else if(i.data.type==="GameControl")for(let s of["idle","move","jump","run"])i.data.gameActions[s].forEach(e);else if(i.data.type==="Resize")for(let s of i.data.breakpoints)s.data.actions.forEach(e);else i.data.type==="LookAt"||i.data.type==="API"||i.data.actions.forEach(e)})}};var cS=class{constructor(t,e,r,i,s){this._aspect=1;this.enableResponsive=!1;this._renderer=t,this._camera=e,this._frameSize=new k().copy(r),this._editorSize=new k().copy(i),this._aspect=e.aspect,this._fov=s??e.fov}set frameSize(t){this._frameSize.copy(t)}updateRenderer(){!this._renderer||this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewport(){if(!this._renderer||!this._camera||this._camera.cameraType!=="PerspectiveCamera")return;let t=this._frameSize.x,e=this._frameSize.y,r=this._editorSize.y;this._aspect=t/e,e<=r&&(this._camera.zoom*=r/e),this._renderer.setViewport(0,0,t,e)}updateCamera(t=!0){if(!!this._camera)if(this._camera.cameraType==="PerspectiveCamera"){let e=this._frameSize.y,r=this._editorSize.y,i=this._fov;if(t&&e>r){let s=z$(e,1080,2160,1,15)/100;i*=e/r,i*=1-s}this._camera.aspect=this._aspect,this._camera.fov=i,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y,this.enableResponsive)}setCamera(t){this._camera=t,this._aspect=t.aspect,this._fov=t.fov}revert(){let t=window.innerWidth,e=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,t,e),this._renderer.setSize(t,e)),this._camera&&(this._camera.aspect=t/e,this._camera.fov=this._fov,this._camera.setViewplaneSize(t,e,this.enableResponsive),this._camera.updateProjectionMatrix())}};function z$(n,t,e,r,i){return(n-t)/(e-t)*(i-r)+r}var uS=class{get sharedAssets(){return this.shared}constructor(t,e={},r=!0){this.shared=new $c(t.shared,e,!0,r),this.scene=new Jl(t.scene,this.sharedAssets),this.shared.setEntityOpContext({scene:this.scene,shared:this.shared})}reset(t,e){this.scene.clearScene(),this.sharedAssets.reset(t.shared),this.scene.resetAfterClear(t.scene,this.sharedAssets)}resetPersonalCameraFromDocumentData(){for(let t of this.scene.children)t instanceof ur&&!t.uiScene&&t.personalCamera.updateState(t.data.camera,{scene:this.scene,shared:this.shared})}dispose(){this.scene.dispose(),this.shared.dispose()}gc(){this.shared.geometryCache.startGc(),this.shared.geometryCache2.startGc(),this.scene.traverseEntity(t=>{t instanceof cr&&t.markGeometryAsReachable(this.shared)}),this.shared.geometryCache.endGc(),this.shared.geometryCache2.endGc()}};var hS=class{constructor({x:t=10,y:e=10}){this._startTime=0;let r=document.getElementById("spe-perfs");r?this.element=r:(this.element=document.createElement("div"),document.body.appendChild(this.element),this.element.style.position="absolute",this.element.style.zIndex="10000",this.element.style.fontFamily="monospace",this.element.style.background="black",this.element.style.color="white",this.element.style.padding="10px",this.element.style.opacity="0.5",this.element.style.fontSize="11px",this.element.setAttribute("id","spe-perfs")),this.element.style.left=`${t}px`,this.element.style.top=`${e}px`}dispose(){this.element.parentElement?.removeChild(this.element)}start(){this._startTime=performance.now()}end(){let e=performance.now()-this._startTime;this.element.innerHTML=e.toFixed(3)+" ms"}};function G$(n){let t;if(!!n.index)for(let e=0;e{if(!r.visible||!(r instanceof mr)||r.type!=="Mesh"||Array.isArray(r.material)||r.states&&Object.keys(r.states).length)return;let i=r.parent;for(;i;){if(i instanceof mr&&r.states&&Object.keys(r.states).length)return;i=i.parent}let s=r.material.uuid,o=t.shared.materials[s];if(o){if(!Kr.isMergable(o))return}else{let c=t.scene.objects.get(r.uuid)?.data;if(c&&"material"in c&&typeof c.material!="string"){if(!Kr.isMergable(c.material))return;s=Kr.getHash(c.material)}}e[s]||(e[s]={});let l=e[s][Mg(r)];if(l){if(l.push(r),r.cloner)for(let c of r.cloner.children)l.push(c)}else if(e[s][Mg(r)]=[r],r.cloner)for(let c of r.cloner.children)e[s][Mg(r)].push(c)}),e}function H$(n){let t=0;return Object.values(n).forEach(e=>{Object.values(e).forEach(r=>{let i=r.length;i>t&&(t=i)})}),t}function wF(n,t){let e=j$(t,n),r=H$(e),i=new Array(r),s=0,o=new Array(r),a=0,l=new Array(r),c=0,u=new Array(r),h=0;for(let[d,f]of Object.entries(e))for(let p of Object.values(f)){if(a=0,c=0,p.forEach(g=>{g instanceof mr&&(o[a++]=g.geometry.clone(),l[c++]=g)}),c<2)continue;for(let g=0;g{h=0;for(let x of v)x.children&&y(x.children),x instanceof mr&&(Array.isArray(x.material)||e[x.material.uuid]&&e[x.material.uuid][Mg(x)]&&e[x.material.uuid][Mg(x)].length>1||(u[h++]=x));for(let x=0;x{this._skipRender=!1};this.requestRender=()=>{this._renderRequested=!0};this.render=t=>{if(this.time=t,this._lastTime&&(this.dt=this.time-this._lastTime),this._lastTime=this.time,this._perfs?.start(),!this._renderer){this._perfs?.end();return}if(!this._isPaused&&(this.renderMode==="manual"&&!this._renderRequested||this.renderMode==="auto"&&this._skipRender)){this._perfs?.end();return}if(this._renderRequested=!1,this._skipRender=!0,this._controls&&(this._skipRender=this._controls.update(this.dt)),this._eventManager&&(this._eventManager.handlers?.Start.hasVideoAction||this._eventManager.handlers?.Basic.hasVideoAction||this._eventManager.handlers?.Conditional.hasVideoAction)&&(this._skipRender=!1),this._animationControls?.update(this.dt),this._skipRender?(this.currentTAAFrame++,this.currentTAAFrame<32?this._skipRender=!1:this.currentTAAFrame=0):this.currentTAAFrame=0,this._scene?.traverseVisibleEntity(e=>{e.type==="ParticleSystem"&&(e.update(this.dt),this._skipRender=!1)}),this._scene&&this._scene.activeCamera!==this._camera&&(this._camera=this._scene.activeCamera),this._eventManager?.isEnabled&&((this._eventManager.handlers?.Follow).onAnimationFrameDamping(),(this._eventManager.handlers?.LookAt).onAnimationFrameDamping(),(this._eventManager.handlers?.DragDrop).onAnimationFrameDamping()),this._scene&&this._camera){if(this._scene.pathConstraints.applyConstraints(this._scene),this._renderer.sceneTransitionTimeRemaining>0){this._renderer.sceneTransitionTimeRemaining-=this.dt;let e=1-this._renderer.sceneTransitionTimeRemaining/this._renderer.sceneTransitionDuration;this._renderer.pipeline.sceneTransitionPass.uniforms.mixRatio.value=e,this._skipRender=!1}else this._renderer.pipeline.sceneTransitionFromTexture=null;this._renderer.renderSplineScene(this._scene,this._camera)}this.canvas.dispatchEvent(this._renderedEvent),this._perfs?.end()};this._resize=t=>{if(!!this._renderer){if(this._viewportMode===1&&this._frameView&&(this._frameView.frameSize=q$.set(this._viewportWidth,this._viewportHeight)),t){let e=this._viewportWidth,r=this._viewportHeight;this._renderer.setSize(e-1,r-1,!1),this._renderer.setSize(e,r,!1)}else this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1);if(this._camera=this._scene?.activeCamera,this._scene?.updateViewPlaneSize(this._frameView?.frameSize?.x??this._viewportWidth,this._frameView?.frameSize?.y??this._viewportHeight,this._frameView?.enableResponsive??!1),this._camera){let e=Object.values(this._data?.frames??{})[0].preset??"fullscreen";this._frameView?.setCamera(this._camera),this._frameView?.updateCamera(e!=="fullscreen"),this._camera.cameraType==="PerspectiveCamera"&&(this._camera.aspect=this._viewportWidth/this._viewportHeight),this._camera.updateProjectionMatrix()}this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect()),this._requestRenderAutoMode()}};this._debouncedResize=vo(this._resize,10);this._onScroll=t=>{this.eventManager&&(this.eventManager.eventContext.domRect=this.canvas.getBoundingClientRect())};this.canvas=t,this.renderMode=e?"auto":r,this._renderedEvent=new CustomEvent("rendered",{bubbles:!0}),Object.defineProperty(this._renderedEvent,"target",{writable:!1,value:this}),window.location.search.includes("perfs")&&(this._perfs=new hS({x:10,y:10})),uI(t)}async load(t,e,r){Y$(t),this.disposed=!1;let s=await(await fetch(t,r)).arrayBuffer();await this.start(s,{variables:e})}async start(t,{interactive:e=!0,variables:r}={}){if(this.disposed)return;let i=await pF(t);this._data=i;let s=mF(i);i.version&&(0,MF.default)(i.version,"1.9.35")>0&&console.warn("Your .splinecode file is more recent than the library. Please upgrade @splinetool/runtime to the latest version."),await Promise.all([s.length&&fF(),qE(i)&&vR(),v3(i)&&hR(),Il.physicsEnabled(i.scene.objects)&&yI(),VE(i)&&s3(),hb(i)&&bT(),r3(i)&&e3(),nT(i)&&NL(),fM(i)&&pI()].filter(Boolean)),s.length&&await gF(s),this._eventManager?.deactivate(),this._controls?.deactivate(),this._scene?.dispose();let o=new uS(i);if(o.resetPersonalCameraFromDocumentData(),this._scene=o.scene,this._sharedAssetsManager=o.sharedAssets,this._camera=this._scene.activeCamera,window.location.search.includes("merge-geometries")){let c=performance.now();wF(i,o.scene);let u=performance.now();console.log("Merged geometries in ",u-c," ms")}qE(i)&&this._scene.traverse(c=>{En(c)&&c.recomputeBoolean()}),this._sharedAssetsManager.setRequestRender(()=>{this._requestRenderAutoMode(),this._scene?.traverse(c=>{c instanceof Gi&&c.pendingMediaLoad&&c.update()})}),this._scene?.traverse(c=>{c.type==="ParticleSystem"&&(c.wakeUp(),c.data.autoPlay?c.start():c.stop())});let a=Object.keys(i.shared.fonts).map(c=>this._sharedAssetsManager.getFont(c).loadingPromise);if(Promise.all(a).then(()=>{o.scene.markNeedsUpdateRendererDirty(),this._requestRenderAutoMode()}),VE(i)&&uF(i)&&await Promise.all(a),nT(i)){let c=[];this._scene.traverseEntity(u=>{(u instanceof Er||u instanceof ur)&&u.uiCanvas&&c.push(u.uiCanvas)}),await Promise.all(c.map(u=>u.promise))}if(this._scene.rewriteEventsBeforeGoToPlayMode(),Vf(this._scene.activePage,this._sharedAssetsManager),!this._renderer&&(this._renderer=new zx({canvas:this.canvas,antialias:!1,alpha:!0,stencil:!1,depth:!1,powerPreference:"high-performance"}),this._renderer.hdTransmission=i.scene.publish.hdTransmission===!0,this._renderer.setPixelRatio(window.devicePixelRatio),this._renderer.pipeline.enableUIOverlay(),this._renderer.pipeline.addEventListener("smaaloaded",this._requestRenderAutoMode),i.shared.images.SplineWatermark)){let c=this._sharedAssetsManager.getImage("SplineWatermark");await c.loadPromise;let u=c.getTexture(1001);this._renderer.pipeline.setWatermark(u)}hb(i)&&this._scene.initializeSplatViewer(),i.scene.blueNoiseTextureData!==void 0&&this._renderer.pipeline.updateBlueNoiseTexture(i.scene.blueNoiseTextureData);let l=Object.values(i.frames)[0];if(this._frameView?this._frameView.setCamera(this._camera):(l.preset==="fullscreen"?(this._viewportMode=1,this.canvas.style.display="block",this.canvas.parentElement&&(this._viewportWidth=this.canvas.parentElement.clientWidth||300,this.canvas.style.width="100%"),this.canvas.parentElement&&(this._viewportHeight=this.canvas.parentElement.clientHeight||150,this.canvas.style.height="100%")):(this._viewportMode=2,this._viewportWidth=l.size[0],this._viewportHeight=l.size[1],this.canvas.style.width=`${this._viewportWidth}px`,this.canvas.style.height=`${this._viewportHeight}px`),this._renderer.setSize(this._viewportWidth,this._viewportHeight,!1),this._frameView=new cS(this._renderer,this._camera,new k(this._viewportWidth,this._viewportHeight),new k(window.innerWidth,window.innerHeight)),this._frameView.enableResponsive=(l.allowResponsive??!1)&&l.preset==="fullscreen"),e){let c=new Rb(this._renderer,this.data.scene.publish,this._scene,()=>this._scene.activeCamera,this._sharedAssetsManager,this._requestRenderAutoMode,!0,l);this._scene.updateMatrixWorld(!0),this._controls=new Zb(c),this._animationControls=new Jb(this._scene,this._requestRenderAutoMode),this._eventManager=new lS(i.scene.publish,this._controls,this._animationControls,c,i.shared.variables),this._eventManager.activate(),this._controls.activate(this._eventManager)}this._resize(),this._scene.activePage.data.postprocessing.depthOfField.enabled&&Promise.all(this._sharedAssetsManager.getImageLoadPromises()).then(()=>{this._resize(!0)}),r!==void 0&&this.setVariables(r),this.dt===0&&(this.render(performance.now()),setTimeout(()=>{this._renderer?.setAnimationLoop(this.render)},0)),this._resizeObserverTimeout=setTimeout(()=>{!this._resizeObserver&&this.canvas.parentElement&&(this._resizeObserver=new ResizeObserver(()=>{this._viewportWidth=this.canvas.clientWidth,this._viewportHeight=this.canvas.clientHeight,this._debouncedResize()}),this._resizeObserver.observe(this.canvas.parentElement))},300),document.addEventListener("scroll",this._onScroll)}setVariables(t){if(this._data!==void 0){let e=Object.entries(t);for(let[r,i]of e)this.setVariable(r,i)}}setVariable(t,e){let r=this._getVariableByName(t);if(r&&!("dynamicVariableType"in r.data)){let i=e;typeof r.data.value=="number"?i=typeof e=="number"?e:typeof e=="boolean"?e===!0?1:0:parseFloat(e):typeof r.data.value=="boolean"?i=typeof e=="number"?!!e:typeof e=="boolean"?e:e.toLocaleLowerCase()==="false"?!1:!!e:typeof r.data.value!="string"&&r.data.value.textValue!==void 0&&(i=e.toString());let s=typeof i=="string"?{textValue:i}:i;this._sharedAssetsManager?.updateVariable(r.id,s),this.requestRender(),this._requestRenderAutoMode()}else r===void 0?console.warn(`No variable named ${t} was found in your Spline file. Make sure to create it from Spline editor.`):"dynamicVariableType"in r.data&&console.warn(`Dynamic variables like ${t} cannot be updated from code.`)}getVariables(){let t={};return this._data&&this._data.shared.variables.forEach(e=>{t[e.data.name]===void 0&&(t[e.data.name]=this._getVariableValue(this._sharedAssetsManager.getVariable(e.id)))}),t}getVariable(t){let e=this._getVariableByName(t);if(e){let r=this._sharedAssetsManager.getVariable(e.id);return this._getVariableValue(r)}}_getVariableValue(t){return typeof t!="string"&&Br.isTextValue(t)?Br.getDisplayedValue(t):t}_getVariableByName(t){if(this._data){if(this._variablesCache.has(t))return this._variablesCache.get(t);let e=this._data.shared.variables.find(r=>r.data.name===t);return e&&this._variablesCache.set(t,e),e}}findObjectById(t){let e=this._scene?.getObjectByProperty("uuid",t);return this._createProxyObject(e)}findObjectByName(t){let e=this._scene?.getObjectByName(t);return this._createProxyObject(e)}getAllObjects(){let t=[];return this._scene?.traverseEntity(e=>{if(e.uuid!==hs&&!this._scene.isInvisibleObjects(e)&&!(e instanceof ur)){let r=this._createProxyObject(e);r&&t.push(r)}}),t}getSplineEvents(){return(this._eventManager?.handlers?.Spline).splineEvents}emitEvent(t,e){(this.findObjectById(e)||this.findObjectByName(e))?.emitEvent(t)}emitEventReverse(t,e){(this.findObjectById(e)||this.findObjectByName(e))?.emitEventReverse(t)}addEventListener(t,e){this.canvas.addEventListener(t,e)}removeEventListener(t,e){this.canvas.removeEventListener(t,e)}setZoom(t){this._controls?.orbitControls instanceof Yf&&this._controls?.orbitControls.setZoom(t)}get eventManager(){return this._eventManager}get controls(){return this._controls}setSize(t,e){this._viewportWidth=t,this._viewportHeight=e,this._viewportMode=2,this._resize()}setBackgroundColor(t){let{r:e,g:r,b:i,a:s}={r:0,g:0,b:0,a:1},o=new vr(e,r,i,s);try{o.setStyle(t)}catch{console.error("This is not a valid css color",t)}this._scene?.activePage.setBackgroundColor(o),this._requestRenderAutoMode()}dispose(){this.disposed=!0,this._eventManager?.deactivate(),this._scene?.dispose(),this._sharedAssetsManager?.dispose(),this._proxyObjectCache.forEach(t=>{iA.unsubscribe(t)}),this._variablesCache.clear(),this._renderer?.setAnimationLoop(null),this._renderer?.dispose(),this._renderer=void 0,this._sharedAssetsManager?.dispose(),this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=void 0),this._resizeObserverTimeout!==void 0&&clearTimeout(this._resizeObserverTimeout),this.canvas.style.width="",this.canvas.style.height="",this.canvas.removeAttribute("width"),this.canvas.removeAttribute("height"),this._frameView&&(this._frameView=void 0),this._controls?.deactivate(),this.dt=0,hI(this.canvas),document.removeEventListener("scroll",this._onScroll)}get isStopped(){return this._isPaused}stop(){this._isPaused||(this._renderer?.setAnimationLoop(null),this._isPaused=!0,this._eventManager?.pause(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!1))}play(){!this._isPaused||(this._isPaused=!1,this._eventManager?.resume(),this._controls?.orbitControls&&(this._controls.orbitControls.enabled=!0),this._renderer?.setAnimationLoop(this.render))}setGlobalEvents(t){this._eventManager?.updateUseWindowEvents(t)}get data(){return this._data}_createProxyObject(t){if(t==null)return;if(this._proxyObjectCache.has(t.uuid))return this._proxyObjectCache.get(t.uuid);let e;t.traverseAncestors(s=>{s instanceof ur&&(e=s.name)});let r={name:t.name,uuid:t.uuid,visible:t.visible,intensity:t.intensity,position:t.position,rotation:t.rotation,scale:t.scale,type:t.data.type,page:e,parentUuid:t.parent instanceof ur||t instanceof Jl?void 0:t.parent?.uuid,emitEvent(s){t.dispatchEvent({type:"userEvent",eventName:s})},emitEventReverse(s){t.dispatchEvent({type:"userEvent",eventName:s,reverse:!0})}},i=iA(r,(s,o)=>{typeof t[s]!="object"&&Object.getOwnPropertyDescriptor(t,s)?.writable&&(t[s]=o),this._requestRenderAutoMode(),t.updateMatrix()});return this._proxyObjectCache.set(t.uuid,i),i}setUIWasmUrl(t){J0.skiaWasmUrl=t}};export{TF as Application};