@needle-tools/engine 3.44.2 → 3.44.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4344,7 +4344,7 @@ Open this page to get the console: `+e.toString())}const s=ja()||D1()&&ct();if((
4344
4344
  #__vconsole .vc-mask {
4345
4345
  overflow: hidden;
4346
4346
  }
4347
- `,Qo==null||Qo.prepend(i),s===!0&&oD()<=0&&R5(),console.log("🌵 Debug console has loaded")}},e.src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js",document.body.appendChild(e)}function tne(){const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const r=n.indexOf("?");r>-1&&(n=n.substring(0,r));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var c='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(c)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Ko==null||Ko.hide()}}),i.push({name:"Reload",onClick:function(n){const r=e();r&&(r.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const r=e();r.requestFullscreen?r.requestFullscreen():r.webkitRequestFullscreen instanceof Function&&r.webkitRequestFullscreen()}}),t(i)}),s}function ine(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function nne(){const s=document.querySelector("#__vconsole");return s||null}const D5=ie("debugdefines");Ry('if(!globalThis[""3.44.2""]) globalThis[""3.44.2""] = "0.0.0";');Ry('if(!globalThis[""undefined""]) globalThis[""undefined""] = "unknown";');Ry('if(!globalThis[""Fri Jul 05 2024 15:23:54 GMT+0200 (Central European Summer Time)""]) globalThis[""Fri Jul 05 2024 15:23:54 GMT+0200 (Central European Summer Time)""] = "unknown";');Ry('globalThis["__NEEDLE_ENGINE_VERSION__"] = "3.44.2";');Ry('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ry('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 05 2024 15:23:54 GMT+0200 (Central European Summer Time)";');const Oa="3.44.2",N1="undefined",GD="Fri Jul 05 2024 15:23:54 GMT+0200 (Central European Summer Time)";D5&&console.log(`Engine version: ${Oa} (generator: ${N1})
4347
+ `,Qo==null||Qo.prepend(i),s===!0&&oD()<=0&&R5(),console.log("🌵 Debug console has loaded")}},e.src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js",document.body.appendChild(e)}function tne(){const s=new VConsole.VConsolePlugin("needle-console","🌵 Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+s._id+" iframe");return s.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const r=n.indexOf("?");r>-1&&(n=n.substring(0,r));const a=location.protocol+"//"+location.host+location.pathname+"/"+n,l=encodeURIComponent(a);s.fullUrl="https://viewer.needle.tools?inspect&file="+l;var c='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(c)}),s.on("show",function(){const t=e();t&&t.src!==s.fullUrl&&(t.src=s.fullUrl)}),s.on("hide",function(){const t=e();t&&(t.src="")}),s.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window ↗",onClick:function(n){window.open(s.fullUrl,"_blank"),Ko==null||Ko.hide()}}),i.push({name:"Reload",onClick:function(n){const r=e();r&&(r.src=s.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const r=e();r.requestFullscreen?r.requestFullscreen():r.webkitRequestFullscreen instanceof Function&&r.webkitRequestFullscreen()}}),t(i)}),s}function ine(){const s=document.querySelector("#__vconsole .vc-switch");return s||null}function nne(){const s=document.querySelector("#__vconsole");return s||null}const D5=ie("debugdefines");Ry('if(!globalThis[""3.44.3""]) globalThis[""3.44.3""] = "0.0.0";');Ry('if(!globalThis[""undefined""]) globalThis[""undefined""] = "unknown";');Ry('if(!globalThis[""Fri Jul 05 2024 19:08:58 GMT+0200 (Central European Summer Time)""]) globalThis[""Fri Jul 05 2024 19:08:58 GMT+0200 (Central European Summer Time)""] = "unknown";');Ry('globalThis["__NEEDLE_ENGINE_VERSION__"] = "3.44.3";');Ry('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";');Ry('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Fri Jul 05 2024 19:08:58 GMT+0200 (Central European Summer Time)";');const Oa="3.44.3",N1="undefined",GD="Fri Jul 05 2024 19:08:58 GMT+0200 (Central European Summer Time)";D5&&console.log(`Engine version: ${Oa} (generator: ${N1})
4348
4348
  Project built at ${GD}`);const Ph="needle_isActiveInHierarchy",Cf="builtin_components",Nv="needle_editor_guid";function Ry(s){try{(0,eval)(s)}catch(e){D5&&console.error(e)}}const sne='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 187.74"><defs><linearGradient id="a" x1="89.64" y1="184.81" x2="90.48" y2="21.85" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62d399"/><stop offset=".51" stop-color="#acd842"/><stop offset=".9" stop-color="#d7db0a"/></linearGradient><linearGradient id="b" x1="69.68" y1="178.9" x2="68.08" y2="16.77" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ba398"/><stop offset=".5" stop-color="#4ca352"/><stop offset="1" stop-color="#76a30a"/></linearGradient><linearGradient id="c" x1="36.6" y1="152.17" x2="34.7" y2="84.19" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#36a382"/><stop offset=".54" stop-color="#49a459"/><stop offset="1" stop-color="#76a30b"/></linearGradient><linearGradient id="d" x1="15.82" y1="153.24" x2="18" y2="90.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#267880"/><stop offset=".51" stop-color="#457a5c"/><stop offset="1" stop-color="#717516"/></linearGradient><linearGradient id="e" x1="135.08" y1="135.43" x2="148.93" y2="63.47" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b0d939"/><stop offset="1" stop-color="#eadb04"/></linearGradient><linearGradient id="f" x1="-4163.25" y1="2285.12" x2="-4160.81" y2="2215.34" gradientTransform="rotate(20 4088.49 13316.712)" gradientUnits="userSpaceOnUse"><stop offset=".17" stop-color="#74af52"/><stop offset=".48" stop-color="#99be32"/><stop offset="1" stop-color="#c0c40a"/></linearGradient><symbol id="g" viewBox="0 0 160 187.74"><path style="fill:url(#a)" d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75z"/><path style="fill:url(#b)" d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98z"/><path style="fill:url(#c)" d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z"/><path style="fill:url(#d)" d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04z"/><path style="fill:#9c3" d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5z"/><path style="fill:url(#e)" d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59z"/><path style="fill:url(#f)" d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z"/><path style="fill:#ffe113" d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1z"/><path style="fill:#f3e600" d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75z"/></symbol></defs><use width="160" height="187.74" xlink:href="#g"/></svg>',rne=btoa(sne),one="data:image/svg+xml;base64,"+rne,ane=one,lne=`<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" version="1.1" viewBox="0 0 1014 282" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m665.95 132.73v44.88l-10.56-8.4c-0.8-0.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18 0.4-6.06 1.2s-3.54 1.8-4.98 3-2.56 2.5-3.36 3.9-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c0.32 0.24 0.56 0.44 0.72 0.6s0.36 0.32 0.6 0.48c0.96-1.2 2.14-2.28 3.54-3.24s2.92-1.76 4.56-2.4 3.34-1.14 5.1-1.5 3.44-0.54 5.04-0.54c1.44 0 2.92 0.04 4.44 0.12s2.84 0.28 3.96 0.6c4.56 1.12 7.8 3.12 9.72 6s2.88 6.56 2.88 11.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m732.38 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m795.93 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m858.57 97.21c0.64 0.48 0.96 1.16 0.96 2.04v74.88c-0.08 1.04-0.12 2.12-0.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18s-2.06-1.66-2.46-1.98c-1.76 2.48-4.26 4.44-7.5 5.88s-7.02 2.16-11.34 2.16c-3.84 0-7.4-0.7-10.68-2.1s-6.14-3.44-8.58-6.12-4.34-5.94-5.7-9.78-2.04-8.16-2.04-12.96c0-4.32 0.78-8.34 2.34-12.06s3.6-6.92 6.12-9.6 5.38-4.78 8.58-6.3 6.48-2.28 9.84-2.28c2.56 0 4.82 0.22 6.78 0.66s3.68 1.06 5.16 1.86 2.78 1.74 3.9 2.82 2.16 2.22 3.12 3.42v-35.04l10.68 8.64zm-27.96 67.92c3.6 0 6.52-0.68 8.76-2.04s3.98-3.06 5.22-5.1 2.1-4.22 2.58-6.54 0.72-4.44 0.72-6.36v-1.2c0-1.12-0.22-2.7-0.66-4.74s-1.28-4.06-2.52-6.06-3-3.7-5.28-5.1-5.22-2.02-8.82-1.86c-3.44 0-6.26 0.74-8.46 2.22s-3.96 3.26-5.28 5.34-2.24 4.2-2.76 6.36-0.78 3.92-0.78 5.28c0 1.84 0.24 3.92 0.72 6.24s1.36 4.48 2.64 6.48 3.04 3.68 5.28 5.04 5.12 2.04 8.64 2.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m882.81 97.09c0.64 0.48 0.96 1.12 0.96 1.92l-0.12 41.04v37.08l-10.56-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-77.88l10.8 8.64z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m950.36 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.8559 0 0 .7642 45.348 36.475)"> <g transform="translate(2.7114)"> <path d="m3.935 173.02c-0.331 0-0.497-0.402-0.497-1.207v-51.002c0-0.738 0.138-1.107 0.414-1.107h1.781c0.277 0 0.415 0.335 0.415 1.006v5.935c0 0.336 0.027 0.553 0.083 0.654 0.055 0.101 0.151-0.017 0.289-0.352 0.912-1.744 1.754-3.236 2.527-4.477 0.773-1.24 1.554-2.179 2.341-2.816s1.65-0.956 2.588-0.956c1.685 0 3.011 0.922 3.977 2.766 0.967 1.845 1.602 3.84 1.905 5.986 0.056 0.268 0.139 0.369 0.249 0.302s0.221-0.235 0.331-0.503c0.939-1.811 1.802-3.353 2.589-4.628 0.787-1.274 1.581-2.246 2.382-2.917s1.671-1.006 2.61-1.006c2.016 0 3.569 1.392 4.66 4.175 1.09 2.783 1.636 6.421 1.636 10.915v37.925c0 0.871-0.18 1.307-0.539 1.307h-1.739c-0.138 0-0.249-0.1-0.332-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.338-6.321-1.015-8.3-0.676-1.978-1.76-2.967-3.251-2.967-0.884 0-1.726 0.386-2.527 1.157s-1.519 1.727-2.154 2.867-1.201 2.213-1.699 3.219c-0.248 0.469-0.421 0.905-0.517 1.308-0.097 0.402-0.145 0.972-0.145 1.71v37.221c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.166 0-0.29-0.1-0.373-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.332-6.321-0.994-8.3-0.663-1.978-1.754-2.967-3.273-2.967-1.242 0-2.375 0.704-3.396 2.112-1.022 1.409-2.223 3.555-3.604 6.439v39.031c0 0.805-0.18 1.207-0.539 1.207h-1.698z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m53.642 166.28c-1.077 2.549-2.237 4.477-3.479 5.785-1.243 1.307-2.61 1.961-4.101 1.961-2.154 0-3.853-1.324-5.095-3.973-1.243-2.649-1.864-6.187-1.864-10.613 0-3.488 0.4-6.489 1.201-9.004s1.988-4.51 3.562-5.985c1.574-1.476 3.521-2.414 5.841-2.817l3.686-0.704c0.221-0.067 0.394-0.218 0.518-0.453 0.124-0.234 0.187-0.587 0.187-1.056v-2.917c0-3.89-0.504-6.975-1.512-9.255s-2.354-3.42-4.039-3.42c-1.298 0-2.472 0.72-3.521 2.162s-2.002 3.572-2.858 6.388c-0.083 0.268-0.159 0.453-0.228 0.554-0.069 0.1-0.172 0.083-0.311-0.051l-1.698-1.71c-0.083-0.134-0.138-0.285-0.166-0.453-0.027-0.167 0.014-0.452 0.125-0.855 0.856-3.353 2.009-6.052 3.459-8.098 1.449-2.045 3.224-3.068 5.322-3.068 1.74 0 3.211 0.687 4.412 2.062s2.112 3.37 2.734 5.986c0.621 2.615 0.932 5.7 0.932 9.255v35.712c0 0.536-0.035 0.888-0.104 1.056s-0.2 0.251-0.393 0.251h-1.533c-0.166 0-0.29-0.117-0.373-0.352-0.083-0.234-0.124-0.553-0.124-0.955l-0.083-5.231c-0.055-0.939-0.221-1.006-0.497-0.202zm0.456-19.314c0-1.14-0.194-1.643-0.58-1.509l-3.107 0.603c-1.436 0.202-2.686 0.638-3.749 1.308-1.063 0.671-1.953 1.543-2.671 2.616s-1.257 2.33-1.616 3.772-0.538 3.102-0.538 4.98c0 3.152 0.455 5.616 1.367 7.393 0.911 1.778 2.14 2.666 3.686 2.666 0.939 0 1.85-0.419 2.734-1.257s1.671-1.895 2.361-3.169c0.663-1.408 1.181-2.85 1.553-4.326 0.373-1.475 0.56-2.883 0.56-4.225v-8.852z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m79.034 173.02c-0.166 0-0.297-0.117-0.394-0.352-0.096-0.234-0.145-0.553-0.145-0.955v-4.628c0-0.536-0.041-0.838-0.124-0.905s-0.207 0.1-0.373 0.503c-0.276 0.67-0.69 1.593-1.242 2.766-0.553 1.174-1.271 2.23-2.154 3.169-0.884 0.939-1.961 1.408-3.231 1.408-1.74 0-3.314-0.989-4.722-2.967-1.409-1.979-2.534-4.963-3.376-8.953-0.843-3.991-1.264-8.937-1.264-14.838 0-5.701 0.415-10.68 1.243-14.939s1.988-7.595 3.479-10.009c1.492-2.415 3.204-3.622 5.137-3.622 1.436 0 2.616 0.57 3.541 1.71 0.926 1.14 1.719 2.381 2.382 3.722 0.249 0.47 0.414 0.637 0.497 0.503s0.125-0.536 0.125-1.207v-23.841c0-0.805 0.151-1.208 0.455-1.208h1.864c0.276 0 0.414 0.369 0.414 1.107v72.128c0 0.537-0.041 0.905-0.124 1.107-0.083 0.201-0.235 0.301-0.455 0.301h-1.533zm-0.621-42.049c-0.939-2.213-1.885-3.94-2.838-5.181s-2.009-1.861-3.169-1.861c-1.463 0-2.768 0.889-3.914 2.666s-2.044 4.376-2.693 7.796-0.973 7.578-0.973 12.474c0 5.097 0.338 9.272 1.015 12.524 0.676 3.253 1.567 5.651 2.672 7.193 1.104 1.543 2.305 2.314 3.603 2.314 1.188 0 2.258-0.704 3.211-2.113 0.952-1.408 1.705-3.118 2.257-5.13s0.829-3.957 0.829-5.835v-24.847z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m89.514 149.38c0 3.42 0.345 6.606 1.035 9.557 0.691 2.951 1.609 5.315 2.755 7.092s2.437 2.666 3.873 2.666c1.519 0 2.837-0.738 3.956-2.213 1.118-1.476 2.064-3.655 2.837-6.539 0.083-0.336 0.166-0.52 0.249-0.554 0.083-0.033 0.179 0.017 0.29 0.151l1.408 1.912c0.221 0.268 0.235 0.67 0.041 1.207-0.69 2.548-1.47 4.661-2.34 6.337-0.87 1.677-1.857 2.935-2.962 3.773-1.104 0.838-2.319 1.257-3.645 1.257-2.043 0-3.838-1.14-5.385-3.42-1.546-2.28-2.761-5.482-3.645-9.607-0.884-4.124-1.325-8.836-1.325-14.134 0-5.901 0.455-10.931 1.367-15.089 0.911-4.158 2.14-7.377 3.686-9.658 1.547-2.28 3.3-3.42 5.261-3.42 1.988 0 3.714 1.073 5.178 3.219 1.463 2.146 2.595 5.231 3.396 9.255s1.201 8.886 1.201 14.587c0 0.469-0.02 0.939-0.062 1.408-0.041 0.469-0.214 0.704-0.517 0.704h-16.362c-0.083 0-0.152 0.151-0.207 0.453-0.056 0.302-0.083 0.654-0.083 1.056zm13.752-6.237c0.304 0 0.497-0.1 0.58-0.302 0.083-0.201 0.124-0.57 0.124-1.106 0-3.219-0.283-6.187-0.849-8.903s-1.367-4.896-2.402-6.539c-1.036-1.643-2.272-2.464-3.708-2.464-1.629 0-2.996 0.955-4.101 2.867-1.104 1.911-1.94 4.342-2.506 7.293s-0.849 6.002-0.849 9.154h13.711z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m148.54 119.7c0.165 0 0.283 0.117 0.352 0.352s0.076 0.52 0.02 0.855l-6.254 50.902c-0.028 0.47-0.104 0.788-0.228 0.956s-0.297 0.251-0.518 0.251h-1.615c-0.442 0-0.718-0.402-0.829-1.207l-5.26-40.138c-0.111-0.604-0.201-0.905-0.27-0.905s-0.131 0.301-0.186 0.905l-5.012 40.138c-0.028 0.47-0.097 0.788-0.207 0.956-0.111 0.168-0.277 0.251-0.497 0.251h-1.74c-0.442 0-0.718-0.402-0.829-1.207l-6.503-50.801c-0.055-0.403-0.048-0.721 0.021-0.956s0.2-0.352 0.393-0.352h1.823c0.166 0 0.297 0.067 0.393 0.201 0.097 0.134 0.159 0.403 0.187 0.805l5.302 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.219-41.949c0.055-0.268 0.124-0.47 0.207-0.604s0.193-0.201 0.331-0.201h1.533c0.138 0 0.262 0.067 0.373 0.201 0.11 0.134 0.179 0.403 0.207 0.805l5.468 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.053-41.849c0.055-0.335 0.138-0.57 0.249-0.704 0.11-0.134 0.234-0.201 0.373-0.201h1.284z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m156.49 171.51c0 0.604-0.042 1.006-0.125 1.208-0.082 0.201-0.262 0.301-0.538 0.301h-1.533c-0.221 0-0.366-0.083-0.435-0.251s-0.103-0.486-0.103-0.956v-50.902c0-0.805 0.152-1.207 0.456-1.207h1.822c0.304 0 0.456 0.402 0.456 1.207v50.6zm0.165-63.979c0 1.207-0.207 1.811-0.621 1.811h-1.905c-0.221 0-0.366-0.135-0.435-0.403s-0.104-0.67-0.104-1.207v-7.847c0-1.006 0.18-1.509 0.539-1.509h1.988c0.359 0 0.538 0.47 0.538 1.409v7.746z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m168.3 124.83c-0.221 0-0.331 0.269-0.331 0.805v33.801c0 3.42 0.221 5.667 0.663 6.74 0.441 1.073 1.09 1.609 1.946 1.609h3.024c0.138 0 0.242 0.084 0.311 0.252 0.069 0.167 0.103 0.419 0.103 0.754v2.716c0 0.537-0.138 0.906-0.414 1.107-0.248 0.067-0.614 0.134-1.098 0.201-0.483 0.067-0.959 0.118-1.429 0.151-0.469 0.034-0.828 0.05-1.077 0.05-1.712 0-2.934-0.955-3.665-2.867-0.732-1.911-1.098-5.013-1.098-9.305v-35.108c0-0.604-0.124-0.906-0.373-0.906h-3.521c-0.248 0-0.373-0.268-0.373-0.804v-3.521c0-0.537 0.111-0.805 0.332-0.805h3.686c0.166 0 0.263-0.268 0.29-0.805l0.415-16.095c0-0.805 0.124-1.207 0.372-1.207h1.492c0.303 0 0.455 0.436 0.455 1.307v15.995c0 0.537 0.097 0.805 0.29 0.805h5.468c0.221 0 0.331 0.268 0.331 0.805v3.521c0 0.536-0.124 0.804-0.373 0.804h-5.426z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m179.4 173.02c-0.331 0-0.497-0.402-0.497-1.207v-72.329c0-0.738 0.138-1.107 0.414-1.107h1.782c0.276 0 0.414 0.336 0.414 1.006v27.162c0 0.335 0.034 0.536 0.103 0.603s0.159-0.033 0.27-0.302c0.994-1.81 1.898-3.319 2.713-4.526 0.814-1.208 1.629-2.113 2.444-2.717 0.814-0.603 1.691-0.905 2.63-0.905 2.182 0 3.839 1.375 4.971 4.125 1.132 2.749 1.698 6.404 1.698 10.965v37.925c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.165 0-0.29-0.1-0.373-0.301-0.082-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.366-6.321-1.097-8.3-0.732-1.978-1.899-2.967-3.501-2.967-0.883 0-1.705 0.318-2.464 0.956-0.76 0.637-1.526 1.576-2.299 2.816-0.773 1.241-1.643 2.834-2.61 4.779v39.031c0 0.805-0.179 1.207-0.538 1.207h-1.699z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> </g> <g transform="matrix(.80638 0 0 .80638 452.53 65.421)" fill-rule="nonzero"> <path d="m79.32 36.98v150.76l15.68-13.2 6.59-156.31-22.27 18.75z" fill="url(#f)"/> <path d="m79.32 36.98-22.27-18.75 6.59 156.31 15.68 13.2v-150.76z" fill="url(#e)"/> <path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z" fill="url(#d)"/> <path d="m25.19 104.83-25.19-14.59 16.97 53.86 16.85 9.77-8.63-49.04z" fill="url(#c)"/> <path d="M43.86,82.5L18.69,67.98L0,90.24L25.18,104.83L43.86,82.5Z" fill="#9c3"/> <path d="m134.82 78.69-9.97 56.5 15.58-9.04 19.57-62.05-25.18 14.59z" fill="url(#b)"/> <path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z" fill="url(#a)"/> <path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33 25.19-14.59z" fill="#ffe113"/> <path d="M101.59,18.23L79.32,0L57.05,18.23L79.32,36.98L101.59,18.23Z" fill="#f3e600"/> </g> <defs> <linearGradient id="f" x2="1" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)" gradientUnits="userSpaceOnUse"><stop stop-color="#62d399" offset="0"/><stop stop-color="#acd842" offset=".51"/><stop stop-color="#d7db0a" offset=".9"/><stop stop-color="#d7db0a" offset="1"/></linearGradient> <linearGradient id="e" x2="1" gradientTransform="matrix(-1.6,-162.13,162.13,-1.6,69.68,178.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#0ba398" offset="0"/><stop stop-color="#4ca352" offset=".5"/><stop stop-color="#76a30a" offset="1"/></linearGradient> <linearGradient id="d" x2="1" gradientTransform="matrix(-1.9,-67.98,67.98,-1.9,36.6,152.17)" gradientUnits="userSpaceOnUse"><stop stop-color="#36a382" offset="0"/><stop stop-color="#36a382" offset=".19"/><stop stop-color="#49a459" offset=".54"/><stop stop-color="#76a30b" offset="1"/></linearGradient> <linearGradient id="c" x2="1" gradientTransform="matrix(2.18,-62.38,62.38,2.18,15.82,153.24)" gradientUnits="userSpaceOnUse"><stop stop-color="#267880" offset="0"/><stop stop-color="#457a5c" offset=".51"/><stop stop-color="#717516" offset="1"/></linearGradient> <linearGradient id="b" x2="1" gradientTransform="matrix(13.85,-71.96,71.96,13.85,135.08,135.43)" gradientUnits="userSpaceOnUse"><stop stop-color="#b0d939" offset="0"/><stop stop-color="#eadb04" offset="1"/></linearGradient> <linearGradient id="a" x2="1" gradientTransform="matrix(26.159 -64.737 64.737 26.159 107.42 128.14)" gradientUnits="userSpaceOnUse"><stop stop-color="#74af52" offset="0"/><stop stop-color="#74af52" offset=".17"/><stop stop-color="#99be32" offset=".48"/><stop stop-color="#c0c40a" offset="1"/></linearGradient> </defs> </svg>`;btoa(lne);const cne='<svg viewBox="0 0 509 154" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M665.95 132.73v44.88l-10.56-8.4c-.8-.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18.4-6.06 1.2-1.88.8-3.54 1.8-4.98 3-1.44 1.2-2.56 2.5-3.36 3.9-.8 1.4-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-.72-.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c.32.24.56.44.72.6.16.16.36.32.6.48.96-1.2 2.14-2.28 3.54-3.24 1.4-.96 2.92-1.76 4.56-2.4 1.64-.64 3.34-1.14 5.1-1.5 1.76-.36 3.44-.54 5.04-.54 1.44 0 2.92.04 4.44.12 1.52.08 2.84.28 3.96.6 4.56 1.12 7.8 3.12 9.72 6 1.92 2.88 2.88 6.56 2.88 11.04ZM732.38 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM795.93 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM858.57 97.21c.64.48.96 1.16.96 2.04v74.88c-.08 1.04-.12 2.12-.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18-1.24-1-2.06-1.66-2.46-1.98-1.76 2.48-4.26 4.44-7.5 5.88-3.24 1.44-7.02 2.16-11.34 2.16-3.84 0-7.4-.7-10.68-2.1-3.28-1.4-6.14-3.44-8.58-6.12-2.44-2.68-4.34-5.94-5.7-9.78-1.36-3.84-2.04-8.16-2.04-12.96 0-4.32.78-8.34 2.34-12.06 1.56-3.72 3.6-6.92 6.12-9.6 2.52-2.68 5.38-4.78 8.58-6.3 3.2-1.52 6.48-2.28 9.84-2.28 2.56 0 4.82.22 6.78.66 1.96.44 3.68 1.06 5.16 1.86s2.78 1.74 3.9 2.82a35.92 35.92 0 0 1 3.12 3.42V88.57l10.68 8.64Zm-27.96 67.92c3.6 0 6.52-.68 8.76-2.04 2.24-1.36 3.98-3.06 5.22-5.1a20.5 20.5 0 0 0 2.58-6.54c.48-2.32.72-4.44.72-6.36v-1.2c0-1.12-.22-2.7-.66-4.74-.44-2.04-1.28-4.06-2.52-6.06s-3-3.7-5.28-5.1c-2.28-1.4-5.22-2.02-8.82-1.86-3.44 0-6.26.74-8.46 2.22-2.2 1.48-3.96 3.26-5.28 5.34-1.32 2.08-2.24 4.2-2.76 6.36-.52 2.16-.78 3.92-.78 5.28 0 1.84.24 3.92.72 6.24.48 2.32 1.36 4.48 2.64 6.48s3.04 3.68 5.28 5.04c2.24 1.36 5.12 2.04 8.64 2.04ZM882.81 97.09c.64.48.96 1.12.96 1.92l-.12 41.04v37.08l-10.56-8.4c-.72-.64-1.08-1.44-1.08-2.4V88.45l10.8 8.64ZM950.36 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14Z" style="fill-rule:nonzero" transform="translate(-452.406 -63.709) scale(1.00797)"/><path d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75Z" style="fill:url(#a);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98Z" style="fill:url(#b);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33Z" style="fill:url(#c);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04Z" style="fill:url(#d);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5Z" style="fill:#9c3;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59Z" style="fill:url(#e);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5Z" style="fill:url(#f);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1Z" style="fill:#ffe113;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75Z" style="fill:#f3e600;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><defs><linearGradient id="a" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)"><stop offset="0" style="stop-color:#62d399;stop-opacity:1"/><stop offset=".51" style="stop-color:#acd842;stop-opacity:1"/><stop offset=".9" style="stop-color:#d7db0a;stop-opacity:1"/><stop offset="1" style="stop-color:#d7db0a;stop-opacity:1"/></linearGradient><linearGradient id="b" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90.565 123.412 54.953) scale(162.14)"><stop offset="0" style="stop-color:#0ba398;stop-opacity:1"/><stop offset=".5" style="stop-color:#4ca352;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30a;stop-opacity:1"/></linearGradient><linearGradient id="c" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-68) rotate(88.4 .881 -1.396)"><stop offset="0" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".19" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".54" style="stop-color:#49a459;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30b;stop-opacity:1"/></linearGradient><linearGradient id="d" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-88 87.255 68.431) scale(62.42)"><stop offset="0" style="stop-color:#267880;stop-opacity:1"/><stop offset=".51" style="stop-color:#457a5c;stop-opacity:1"/><stop offset="1" style="stop-color:#717516;stop-opacity:1"/></linearGradient><linearGradient id="e" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-79.1 149.53 -14.065) scale(73.28)"><stop offset="0" style="stop-color:#b0d939;stop-opacity:1"/><stop offset="1" style="stop-color:#eadb04;stop-opacity:1"/></linearGradient><linearGradient id="f" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-67.997 148.705 -15.558) scale(69.8226)"><stop offset="0" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".17" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".48" style="stop-color:#99be32;stop-opacity:1"/><stop offset="1" style="stop-color:#c0c40a;stop-opacity:1"/></linearGradient></defs></svg>',hne=btoa(cne),une="data:image/svg+xml;charset=utf-8;base64,"+hne,dne=une,Ra=ie("debuglicense");let Yf="basic";Ra&&console.log("License Type: "+Yf);function Ju(){switch(Yf){case"pro":case"enterprise":return!0}return!1}function HD(){switch(Yf){case"indie":return!0}return!1}function Bh(){return Ju()||HD()}const O5=[];function fne(s){if(Ju()||HD())return s(!0);O5.push(s)}function pne(s){for(const e of O5)try{e(s)}catch{}}ui.registerCallback(Ti.ContextRegistered,s=>{yne(s.context),vne(),gne(s.context)});let Zu,CP=!1,uv="";async function mne(){if(Zu)return Zu;if(Yf==="basic")try{const s="https://engine.needle.tools/licensing/check?location="+encodeURIComponent(window.location.href)+"&version="+Oa+"&generator="+encodeURIComponent(N1),e=await fetch(s,{method:"GET"}).catch(t=>{Ra&&console.error("License check failed",t)});(e==null?void 0:e.status)===200?(CP=!1,Ra&&console.log("License check succeeded"),Yf="pro",pne(!0)):(e==null?void 0:e.status)===403?(CP=!0,uv=await e.text()):Ra&&console.log("License check failed with status "+(e==null?void 0:e.status))}catch(s){Ra&&console.error("License check failed",s)}else Ra&&console.log('Runtime license check is skipped because license is already applied as "'+Yf+'"')}Zu=mne();async function gne(s){function e(){const n=document.createElement("div");n.className="needle-forbidden",n.style.cssText=`
4349
4349
  position: fixed;
4350
4350
  top: 0;
@@ -5668,7 +5668,7 @@ Could not find method ${h.method} on object ${f.name}. Please rename ${h.method}
5668
5668
  `,f[v],`
5669
5669
  in script: `,f),Ni("EventList methods must start with lowercase letter, see console for details");return}else console.warn(`EventList method:
5670
5670
  Could not find method ${h.method} on object ${f.name}`,f,typeof f[h.method])};if(typeof f[h.method]!="function"){let v=!1,b=f;for(;b;){const S=Object.getOwnPropertyDescriptor(b,h.method);if(S&&(S.writable===!0||S.set)){v=!0;break}b=Object.getPrototypeOf(b)}!v&&(ct()||Ds)&&A()}}let m=h.argument;m!==void 0?m=u(m):h.arguments!==void 0&&(m=h.arguments.map(u));const y=p?this.createEventMethod(f,h.method,m):void 0,g=new vy(y,h.enabled);if(g.method||(g[gfe]=(o=t.object)==null?void 0:o.name),!f||!g.method){const A=t.object?"Current object: "+t.object.name+", "+t.object.guid:null;f?console.warn('EventList method not found: "'+h.method+'" on',f):console.warn("EventList is missing target - will be ignored",h.target,A,e)}else a.push(g)}const l=new Xn(a);Ds&&console.log(l);const c=t.target;return c!==void 0&&t.path!==void 0&&l.setEventTarget(t.path,c),l}}createEventMethod(e,t,i){return(...n)=>{const r=e[t];typeof r=="function"?i!==void 0?Array.isArray(i)?r==null||r.call(e,...i):r==null||r.call(e,i):r==null||r.call(e,...n):e[t]=i}}}const Afe=new yfe;class gj extends Pl{constructor(){super([id,Jt])}onSerialize(e,t){}onDeserialize(e,t){if(e instanceof Vt&&t.type===id){const i=e,n=new id(i.image.width,i.image.height,{colorSpace:ki});return n.texture=i,i.isRenderTargetTexture=!0,i.flipY=!0,i.offset.y=1,i.repeat.y=-1,i.needsUpdate=!0,i.mipmaps=[],i instanceof Ku&&(i.isCompressedTexture=!1,i.format=RGBAFormat),n}}}new gj;class yj extends Pl{constructor(){super([URL])}onSerialize(e,t){return null}onDeserialize(e,t){if(typeof e=="string"&&e.length>0)return bd(t.gltfId,e)}}new yj;const bz={type:"change"},CI={type:"start"},xz={type:"end"},Aw=new Eo,wz=new $r,vfe=Math.cos(70*di.DEG2RAD);let Aj=class extends Fs{constructor(e,t){super(),this.object=e,this.domElement=t,this.domElement.style.touchAction="none",this.enabled=!0,this.target=new w,this.cursor=new w,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:Af.ROTATE,MIDDLE:Af.DOLLY,RIGHT:Af.PAN},this.touches={ONE:vf.ROTATE,TWO:vf.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this.getPolarAngle=function(){return a.phi},this.getAzimuthalAngle=function(){return a.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(j){j.addEventListener("keydown",ke),this._domElementKeyEvents=j},this.stopListenToKeyEvents=function(){this._domElementKeyEvents.removeEventListener("keydown",ke),this._domElementKeyEvents=null},this.saveState=function(){i.target0.copy(i.target),i.position0.copy(i.object.position),i.zoom0=i.object.zoom},this.reset=function(){i.target.copy(i.target0),i.object.position.copy(i.position0),i.object.zoom=i.zoom0,i.object.updateProjectionMatrix(),i.dispatchEvent(bz),i.update(),r=n.NONE},this.update=function(){const j=new w,ae=new Ce().setFromUnitVectors(e.up,new w(0,1,0)),$=ae.clone().invert(),De=new w,ce=new Ce,He=new w,Ye=2*Math.PI;return function(Mi=null){const rn=i.object.getWorldPosition(e.position);j.copy(rn).sub(i.target),j.applyQuaternion(ae),a.setFromVector3(j),i.autoRotate&&r===n.NONE&&U(I(Mi)),i.enableDamping?(a.theta+=l.theta*i.dampingFactor,a.phi+=l.phi*i.dampingFactor):(a.theta+=l.theta,a.phi+=l.phi);let on=i.minAzimuthAngle,si=i.maxAzimuthAngle;isFinite(on)&&isFinite(si)&&(on<-Math.PI?on+=Ye:on>Math.PI&&(on-=Ye),si<-Math.PI?si+=Ye:si>Math.PI&&(si-=Ye),on<=si?a.theta=Math.max(on,Math.min(si,a.theta)):a.theta=a.theta>(on+si)/2?Math.max(on,a.theta):Math.min(si,a.theta)),a.phi=Math.max(i.minPolarAngle,Math.min(i.maxPolarAngle,a.phi)),a.makeSafe(),i.enableDamping===!0?i.target.addScaledVector(u,i.dampingFactor):i.target.add(u),i.target.sub(i.cursor),i.target.clampLength(i.minTargetRadius,i.maxTargetRadius),i.target.add(i.cursor);let vn=!1;if(i.zoomToCursor&&M||i.object.isOrthographicCamera)a.radius=re(a.radius);else{i.enableDamping?h=di.lerp(h,c,i.dampingFactor):h=c,a.radius=re(a.radius*h);const In=a.radius;a.radius=re(a.radius*c),vn=In!=a.radius}if(j.setFromSpherical(a),j.applyQuaternion($),rn.copy(i.target).add(j),i.object.parent?i.object.parent.worldToLocal(rn):i.object.position.copy(rn),i.object.lookAt(i.target),i.enableDamping===!0?(l.theta*=1-i.dampingFactor,l.phi*=1-i.dampingFactor,u.multiplyScalar(1-i.dampingFactor)):(l.set(0,0,0),u.set(0,0,0)),i.zoomToCursor&&M){let In=null;if(i.object.isPerspectiveCamera){const Bo=j.length();In=re(Bo*c);const Kh=Bo-In;i.object.position.addScaledVector(S,Kh),i.object.updateMatrixWorld(),vn=!!Kh}else if(i.object.isOrthographicCamera){const Bo=new w(E.x,E.y,0);Bo.unproject(i.object);const Kh=i.object.zoom;i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom/c)),i.object.updateProjectionMatrix(),vn=Kh!==i.object.zoom;const Do=new w(E.x,E.y,0);Do.unproject(i.object),i.object.position.sub(Do).add(Bo),i.object.updateMatrixWorld(),In=j.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),i.zoomToCursor=!1;In!==null&&(this.screenSpacePanning?i.target.set(0,0,-1).transformDirection(i.object.matrix).multiplyScalar(In).add(i.object.position):(Aw.origin.copy(i.object.position),Aw.direction.set(0,0,-1).transformDirection(i.object.matrix),Math.abs(i.object.up.dot(Aw.direction))<vfe?e.lookAt(i.target):(wz.setFromNormalAndCoplanarPoint(i.object.up,i.target),Aw.intersectPlane(wz,i.target))))}else if(i.object.isOrthographicCamera){const In=i.object.zoom;i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom/c)),In!==i.object.zoom&&(i.object.updateProjectionMatrix(),vn=!0)}return c=1,M=!1,vn||De.distanceToSquared(i.object.position)>o||8*(1-ce.dot(i.object.quaternion))>o||He.distanceToSquared(i.target)>o?(i.dispatchEvent(bz),De.copy(i.object.position),ce.copy(i.object.quaternion),He.copy(i.target),!0):!1}}(),this.dispose=function(){i.domElement.removeEventListener("contextmenu",Fe),i.domElement.removeEventListener("pointerdown",kt),i.domElement.removeEventListener("pointercancel",L),i.domElement.removeEventListener("wheel",Pe),i.domElement.removeEventListener("pointermove",H),window.removeEventListener("pointerup",L),i.domElement.getRootNode().removeEventListener("keydown",bt,{capture:!0}),i._domElementKeyEvents!==null&&(i._domElementKeyEvents.removeEventListener("keydown",ke),i._domElementKeyEvents=null)};const i=this,n={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let r=n.NONE;const o=1e-6,a=new hP,l=new hP;let c=1,h=1;const u=new w,f=new ee,p=new ee,m=new ee,y=new ee,g=new ee,A=new ee,_=new ee,v=new ee,b=new ee,S=new w,E=new ee;let M=!1;const T=[],P={};let C=!1;function I(j){return j!==null?2*Math.PI/60*i.autoRotateSpeed*j:2*Math.PI/60/60*i.autoRotateSpeed}function F(j){const ae=Math.abs(j*.01);return Math.pow(.95,i.zoomSpeed*ae)}function U(j){l.theta-=j}function O(j){l.phi-=j}const Q=function(){const j=new w;return function($,De){j.setFromMatrixColumn(De,0),j.multiplyScalar(-$),u.add(j)}}(),D=function(){const j=new w;return function($,De){i.screenSpacePanning===!0?j.setFromMatrixColumn(De,1):(j.setFromMatrixColumn(De,0),j.crossVectors(i.object.up,j)),j.multiplyScalar($),u.add(j)}}(),k=function(){const j=new w,ae=new w;return function(De,ce){const He=i.domElement;if(i.object.isPerspectiveCamera){i.object.getWorldPosition(ae),j.copy(ae).sub(i.target);let Ye=j.length();Ye*=Math.tan(i.object.fov/2*Math.PI/180),Q(2*De*Ye/He.clientHeight,i.object.matrixWorld),D(2*ce*Ye/He.clientHeight,i.object.matrixWorld)}else i.object.isOrthographicCamera?(Q(De*(i.object.right-i.object.left)/i.object.zoom/He.clientWidth,i.object.matrixWorld),D(ce*(i.object.top-i.object.bottom)/i.object.zoom/He.clientHeight,i.object.matrixWorld)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),i.enablePan=!1)}}();function z(j){i.object.isPerspectiveCamera||i.object.isOrthographicCamera?c/=j:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function q(j){i.object.isPerspectiveCamera||i.object.isOrthographicCamera?c*=j:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function X(j,ae){if(!i.zoomToCursor)return;M=!0;const $=i.domElement.getBoundingClientRect(),De=j-$.left,ce=ae-$.top,He=$.width,Ye=$.height;E.x=De/He*2-1,E.y=-(ce/Ye)*2+1,S.set(E.x,E.y,1).unproject(i.object).sub(i.object.position).normalize()}function re(j){return Math.max(i.minDistance,Math.min(i.maxDistance,j))}function le(j){f.set(j.clientX,j.clientY)}function Me(j){X(j.clientX,j.clientX),_.set(j.clientX,j.clientY)}function ne(j){y.set(j.clientX,j.clientY)}function ge(j){p.set(j.clientX,j.clientY),m.subVectors(p,f).multiplyScalar(i.rotateSpeed);const ae=i.domElement;U(2*Math.PI*m.x/ae.clientHeight),O(2*Math.PI*m.y/ae.clientHeight),f.copy(p),i.update()}function Se(j){v.set(j.clientX,j.clientY),b.subVectors(v,_),b.y>0?z(F(b.y)):b.y<0&&q(F(b.y)),_.copy(v),i.update()}function Le(j){g.set(j.clientX,j.clientY),A.subVectors(g,y).multiplyScalar(i.panSpeed),k(A.x,A.y),y.copy(g),i.update()}function We(j){X(j.clientX,j.clientY),j.deltaY<0?q(F(j.deltaY)):j.deltaY>0&&z(F(j.deltaY)),i.update()}function Ve(j){let ae=!1;switch(j.code){case i.keys.UP:j.ctrlKey||j.metaKey||j.shiftKey?O(2*Math.PI*i.rotateSpeed/i.domElement.clientHeight):k(0,i.keyPanSpeed),ae=!0;break;case i.keys.BOTTOM:j.ctrlKey||j.metaKey||j.shiftKey?O(-2*Math.PI*i.rotateSpeed/i.domElement.clientHeight):k(0,-i.keyPanSpeed),ae=!0;break;case i.keys.LEFT:j.ctrlKey||j.metaKey||j.shiftKey?U(2*Math.PI*i.rotateSpeed/i.domElement.clientHeight):k(i.keyPanSpeed,0),ae=!0;break;case i.keys.RIGHT:j.ctrlKey||j.metaKey||j.shiftKey?U(-2*Math.PI*i.rotateSpeed/i.domElement.clientHeight):k(-i.keyPanSpeed,0),ae=!0;break}ae&&(j.preventDefault(),i.update())}function gt(j){if(T.length===1)f.set(j.pageX,j.pageY);else{const ae=rt(j),$=.5*(j.pageX+ae.x),De=.5*(j.pageY+ae.y);f.set($,De)}}function st(j){if(T.length===1)y.set(j.pageX,j.pageY);else{const ae=rt(j),$=.5*(j.pageX+ae.x),De=.5*(j.pageY+ae.y);y.set($,De)}}function W(j){const ae=rt(j),$=j.pageX-ae.x,De=j.pageY-ae.y,ce=Math.sqrt($*$+De*De);_.set(0,ce)}function Ge(j){i.enableZoom&&W(j),i.enablePan&&st(j)}function xe(j){i.enableZoom&&W(j),i.enableRotate&&gt(j)}function Ne(j){if(T.length==1)p.set(j.pageX,j.pageY);else{const $=rt(j),De=.5*(j.pageX+$.x),ce=.5*(j.pageY+$.y);p.set(De,ce)}m.subVectors(p,f).multiplyScalar(i.rotateSpeed);const ae=i.domElement;U(2*Math.PI*m.x/ae.clientHeight),O(2*Math.PI*m.y/ae.clientHeight),f.copy(p)}function Ee(j){if(T.length===1)g.set(j.pageX,j.pageY);else{const ae=rt(j),$=.5*(j.pageX+ae.x),De=.5*(j.pageY+ae.y);g.set($,De)}A.subVectors(g,y).multiplyScalar(i.panSpeed),k(A.x,A.y),y.copy(g)}function tt(j){const ae=rt(j),$=j.pageX-ae.x,De=j.pageY-ae.y,ce=Math.sqrt($*$+De*De);v.set(0,ce),b.set(0,Math.pow(v.y/_.y,i.zoomSpeed)),z(b.y),_.copy(v);const He=(j.pageX+ae.x)*.5,Ye=(j.pageY+ae.y)*.5;X(He,Ye)}function $e(j){i.enableZoom&&tt(j),i.enablePan&&Ee(j)}function at(j){i.enableZoom&&tt(j),i.enableRotate&&Ne(j)}function kt(j){i.enabled!==!1&&(T.length===0&&(i.domElement.setPointerCapture(j.pointerId),i.domElement.addEventListener("pointermove",H),window.addEventListener("pointerup",L)),!Xe(j)&&(ti(j),j.pointerType==="touch"?Qe(j):me(j)))}function H(j){i.enabled!==!1&&(j.pointerType==="touch"?wt(j):_e(j))}function L(j){switch(ft(j),T.length){case 0:i.domElement.releasePointerCapture(j.pointerId),i.domElement.removeEventListener("pointermove",H),i.domElement.removeEventListener("pointerup",L),i.dispatchEvent(xz),r=n.NONE;break;case 1:const ae=T[0],$=P[ae];Qe({pointerId:ae,pageX:$.x,pageY:$.y});break}}function me(j){let ae;switch(j.button){case 0:ae=i.mouseButtons.LEFT;break;case 1:ae=i.mouseButtons.MIDDLE;break;case 2:ae=i.mouseButtons.RIGHT;break;default:ae=-1}switch(ae){case Af.DOLLY:if(i.enableZoom===!1)return;Me(j),r=n.DOLLY;break;case Af.ROTATE:if(j.ctrlKey||j.metaKey||j.shiftKey){if(i.enablePan===!1)return;ne(j),r=n.PAN}else{if(i.enableRotate===!1)return;le(j),r=n.ROTATE}break;case Af.PAN:if(j.ctrlKey||j.metaKey||j.shiftKey){if(i.enableRotate===!1)return;le(j),r=n.ROTATE}else{if(i.enablePan===!1)return;ne(j),r=n.PAN}break;default:r=n.NONE}r!==n.NONE&&i.dispatchEvent(CI)}function _e(j){switch(r){case n.ROTATE:if(i.enableRotate===!1)return;ge(j);break;case n.DOLLY:if(i.enableZoom===!1)return;Se(j);break;case n.PAN:if(i.enablePan===!1)return;Le(j);break}}function Pe(j){i.enabled===!1||i.enableZoom===!1||r!==n.NONE||(j.preventDefault(),i.dispatchEvent(CI),We(Te(j)),i.dispatchEvent(xz))}function Te(j){const ae=j.deltaMode,$={clientX:j.clientX,clientY:j.clientY,deltaY:j.deltaY};switch(ae){case 1:$.deltaY*=16;break;case 2:$.deltaY*=100;break}return j.ctrlKey&&!C&&($.deltaY*=10),$}function bt(j){j.key==="Control"&&(C=!0,i.domElement.getRootNode().addEventListener("keyup",dt,{passive:!0,capture:!0}))}function dt(j){j.key==="Control"&&(C=!1,i.domElement.getRootNode().removeEventListener("keyup",dt,{passive:!0,capture:!0}))}function ke(j){i.enabled===!1||i.enablePan===!1||Ve(j)}function Qe(j){switch(pt(j),T.length){case 1:switch(i.touches.ONE){case vf.ROTATE:if(i.enableRotate===!1)return;gt(j),r=n.TOUCH_ROTATE;break;case vf.PAN:if(i.enablePan===!1)return;st(j),r=n.TOUCH_PAN;break;default:r=n.NONE}break;case 2:switch(i.touches.TWO){case vf.DOLLY_PAN:if(i.enableZoom===!1&&i.enablePan===!1)return;Ge(j),r=n.TOUCH_DOLLY_PAN;break;case vf.DOLLY_ROTATE:if(i.enableZoom===!1&&i.enableRotate===!1)return;xe(j),r=n.TOUCH_DOLLY_ROTATE;break;default:r=n.NONE}break;default:r=n.NONE}r!==n.NONE&&i.dispatchEvent(CI)}function wt(j){switch(pt(j),r){case n.TOUCH_ROTATE:if(i.enableRotate===!1)return;Ne(j),i.update();break;case n.TOUCH_PAN:if(i.enablePan===!1)return;Ee(j),i.update();break;case n.TOUCH_DOLLY_PAN:if(i.enableZoom===!1&&i.enablePan===!1)return;$e(j),i.update();break;case n.TOUCH_DOLLY_ROTATE:if(i.enableZoom===!1&&i.enableRotate===!1)return;at(j),i.update();break;default:r=n.NONE}}function Fe(j){i.enabled!==!1&&j.preventDefault()}function ti(j){T.push(j.pointerId)}function ft(j){delete P[j.pointerId];for(let ae=0;ae<T.length;ae++)if(T[ae]==j.pointerId){T.splice(ae,1);return}}function Xe(j){for(let ae=0;ae<T.length;ae++)if(T[ae]==j.pointerId)return!0;return!1}function pt(j){let ae=P[j.pointerId];ae===void 0&&(ae=new ee,P[j.pointerId]=ae),ae.set(j.pageX,j.pageY)}function rt(j){const ae=j.pointerId===T[0]?T[1]:T[0];return P[ae]}i.domElement.addEventListener("contextmenu",Fe),i.domElement.addEventListener("pointerdown",kt),i.domElement.addEventListener("pointercancel",L),i.domElement.addEventListener("wheel",Pe,{passive:!1}),i.domElement.getRootNode().addEventListener("keydown",bt,{passive:!0,capture:!0}),this.update()}};var _fe=Object.defineProperty,bfe=Object.getOwnPropertyDescriptor,HO=(s,e,t,i)=>{for(var n=i>1?void 0:i?bfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&_fe(e,t,n),n};class Up extends Ie{constructor(){super(...arguments);d(this,"constraintActive",!0);d(this,"locked",!1);d(this,"sources",[])}}HO([x()],Up.prototype,"constraintActive",2);HO([x()],Up.prototype,"locked",2);HO([x(Ae)],Up.prototype,"sources",2);function xfe(s,e){return Sd(s,Ti.ContextCreated,e),()=>Cd(s,Ti.ContextCreated)}function wfe(s,e){return Sd(s,Ti.ContextClearing,e),()=>Cd(s,Ti.ContextClearing)}function Sfe(s,e){return Sd(s,Ti.ContextDestroying,e),()=>Cd(s,Ti.ContextDestroying)}function vj(s,e){return Sd(s,$i.Start,e),()=>Cd(s,$i.Start)}function _j(s,e){return Sd(s,$i.Update,e),()=>Cd(s,$i.Update)}function Cfe(s,e){return Sd(s,$i.OnBeforeRender,e),()=>Cd(s,$i.OnBeforeRender)}function Efe(s,e){return Sd(s,$i.OnAfterRender,e),()=>Cd(s,$i.OnAfterRender)}class tp{constructor(){d(this,"bb",null);d(this,"bb_pos",0)}__init(e,t){return this.bb_pos=e,this.bb=t,this}x(){return this.bb.readFloat32(this.bb_pos)}y(){return this.bb.readFloat32(this.bb_pos+4)}z(){return this.bb.readFloat32(this.bb_pos+8)}static sizeOf(){return 12}static createVec3(e,t,i,n){return e.prep(4,12),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}}class bj{constructor(){d(this,"bb",null);d(this,"bb_pos",0)}__init(e,t){return this.bb_pos=e,this.bb=t,this}position(e){return(e||new tp).__init(this.bb_pos,this.bb)}rotation(e){return(e||new tp).__init(this.bb_pos+12,this.bb)}scale(e){return(e||new tp).__init(this.bb_pos+24,this.bb)}static sizeOf(){return 36}static createTransform(e,t,i,n,r,o,a,l,c,h){return e.prep(4,36),e.prep(4,12),e.writeFloat32(h),e.writeFloat32(c),e.writeFloat32(l),e.prep(4,12),e.writeFloat32(a),e.writeFloat32(o),e.writeFloat32(r),e.prep(4,12),e.writeFloat32(n),e.writeFloat32(i),e.writeFloat32(t),e.offset()}}class bh{constructor(){d(this,"bb",null);d(this,"bb_pos",0)}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSyncedTransformModel(e,t){return(t||new bh).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSyncedTransformModel(e,t){return e.setPosition(e.position()+TO),(t||new bh).__init(e.readInt32(e.position())+e.position(),e)}guid(e){const t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}fast(){const e=this.bb.__offset(this.bb_pos,6);return e?!!this.bb.readInt8(this.bb_pos+e):!1}transform(e){const t=this.bb.__offset(this.bb_pos,8);return t?(e||new bj).__init(this.bb_pos+t,this.bb):null}dontSave(){const e=this.bb.__offset(this.bb_pos,10);return e?!!this.bb.readInt8(this.bb_pos+e):!1}static startSyncedTransformModel(e){e.startObject(4)}static addGuid(e,t){e.addFieldOffset(0,t,0)}static addFast(e,t){e.addFieldInt8(1,+t,0)}static addTransform(e,t){e.addFieldStruct(2,t,0)}static addDontSave(e,t){e.addFieldInt8(3,+t,0)}static endSyncedTransformModel(e){return e.endObject()}static finishSyncedTransformModelBuffer(e,t){e.finish(t)}static finishSizePrefixedSyncedTransformModelBuffer(e,t){e.finish(t,void 0,!0)}}var Ts=(s=>(s[s.Average=0]="Average",s[s.Multiply=1]="Multiply",s[s.Minimum=2]="Minimum",s[s.Maximum=3]="Maximum",s))(Ts||{}),pE=(s=>(s[s.Discrete=0]="Discrete",s[s.Continuous=1]="Continuous",s))(pE||{}),Gn=(s=>(s[s.None=0]="None",s[s.FreezePositionX=2]="FreezePositionX",s[s.FreezePositionY=4]="FreezePositionY",s[s.FreezePositionZ=8]="FreezePositionZ",s[s.FreezePosition=14]="FreezePosition",s[s.FreezeRotationX=16]="FreezeRotationX",s[s.FreezeRotationY=32]="FreezeRotationY",s[s.FreezeRotationZ=64]="FreezeRotationZ",s[s.FreezeRotation=112]="FreezeRotation",s[s.FreezeAll=126]="FreezeAll",s))(Gn||{}),Dg=(s=>(s[s.None=0]="None",s[s.X=2]="X",s[s.Y=4]="Y",s[s.Z=8]="Z",s[s.All=-1]="All",s))(Dg||{});const ur=function(s,e){return function(t,i,n){Mfe(t,i,n,s,e)}};function Mfe(s,e,t,i,n){if(!n&&!i&&!s.onValidate)return;if(t!==void 0){console.error("Invalid usage of validate decorator. Only fields can be validated.",s,e,t),pn("Invalid usage of validate decorator. Only fields can be validated. Property: "+e,Yo.Error);return}let r="";if(typeof e=="string"?r=e:r=e.name,s.__internalAwake){const o=Symbol(r),a=s.__internalAwake;s.__internalAwake=function(){var l;if(!this.onValidate){ct()&&console.warn('Usage of @validate decorate detected but there is no onValidate method in your class: "'+((l=s.constructor)==null?void 0:l.name)+'"');return}if(this[o]===void 0){this[o]=this[r];const c=this[r];if(c instanceof ee||c instanceof w||c instanceof Ze||c instanceof Ce){const h=this[r];B1(h,()=>{this.onValidate(r)})}Object.defineProperty(this,r,{set:function(h){var u;if(this[sB]===!0)this[o]=h;else{i==null||i.call(this,h);const f=this[o];this[o]=h,(u=this.onValidate)==null||u.call(this,r,f)}},get:function(){return n==null||n.call(this),this[o]}})}a.call(this)}}}const Tfe=function(s){return function(e,t,i){let n="";typeof t=="string"?n=t:n=t.name;const r=s.prototype,o=Object.getOwnPropertyDescriptor(r,n);if(!(o!=null&&o.value)){console.warn("Can not apply prefix: type does not have method named",t,s);return}const a=o.value,l=e[n];Object.defineProperty(r,n,{value:function(...c){const h=l==null?void 0:l.call(this,...c);if(h instanceof Promise){h.then(u=>{if(u!==!1)return a.call(this,...c)});return}if(h!==!1)return a.call(this,...c)}})}};var Ife=Object.defineProperty,Rfe=Object.getOwnPropertyDescriptor,ra=(s,e,t,i)=>{for(var n=i>1?void 0:i?Rfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Ife(e,t,n),n};class Pfe{constructor(e,t){d(this,"positionChanged",!1);d(this,"rotationChanged",!1);d(this,"position");d(this,"quaternion");d(this,"_positionKeys",["x","y","z"]);d(this,"_quaternionKeys",["_x","_y","_z","_w"]);d(this,"mute",!1);d(this,"context");d(this,"obj");d(this,"_positionWatch");d(this,"_rotationWatch");this.context=t,this.obj=e}get isDirty(){return this.positionChanged||this.rotationChanged}reset(e=!1){if(this.positionChanged=!1,this.rotationChanged=!1,this.mute=!1,e){if(this.position)for(const t of this._positionKeys)delete this.position[t];if(this.quaternion)for(const t of this._quaternionKeys)delete this.quaternion[t]}}syncValues(){for(const e of this._positionKeys)this.position[e]=this.obj.position[e];for(const e of this._quaternionKeys)this.quaternion[e]=this.obj.quaternion[e]}applyValues(){if(this.positionChanged&&this.position)for(const e of this._positionKeys){const t=this.position[e];t!==void 0&&(this.obj.position[e]=t)}if(this.rotationChanged&&this.quaternion)for(const e of this._quaternionKeys){const t=this.quaternion[e];t!==void 0&&(this.obj.quaternion[e]=t)}}start(e,t){this.reset(),e&&(this._positionWatch||(this._positionWatch=new Rh(this.obj.position,["x","y","z"])),this._positionWatch.apply(),this.position={},this._positionWatch.subscribeWrite((r,o)=>{var l;if((l=this.context.physics.engine)!=null&&l.isUpdating||this.mute)return;const a=this.position[o];Math.abs(a-r)<1e-5||(this.position[o]=r,this.positionChanged=!0)})),t&&(this._rotationWatch||(this._rotationWatch=new Rh(this.obj.quaternion,["_x","_y","_z","_w"])),this._rotationWatch.apply(),this.quaternion={},this._rotationWatch.subscribeWrite((r,o)=>{var l;if((l=this.context.physics.engine)!=null&&l.isUpdating||this.mute)return;const a=this.quaternion[o];Math.abs(a-r)<1e-5||(this.quaternion[o]=r,this.rotationChanged=!0)}));const i=this.obj.matrixWorld.multiplyMatrices.bind(this.obj.matrixWorld),n=new ye;this.obj.matrixWorld.multiplyMatrices=(r,o)=>{var a;return(a=this.context.physics.engine)!=null&&a.isUpdating||this.mute||n.equals(r)||(this.positionChanged=!0,this.rotationChanged=!0,n.copy(r)),i(r,o)}}stop(){var e,t;(e=this._positionWatch)==null||e.revoke(),(t=this._rotationWatch)==null||t.revoke()}}var uR;const EB=(uR=class extends Ie{constructor(){super(...arguments);d(this,"autoMass",!0);d(this,"_mass",0);d(this,"useGravity",!0);d(this,"centerOfMass",new w(0,0,0));d(this,"constraints",Gn.None);d(this,"isKinematic",!1);d(this,"drag",0);d(this,"angularDrag",1);d(this,"detectCollisions",!0);d(this,"sleepThreshold",.01);d(this,"collisionDetectionMode",pE.Discrete);d(this,"_gravityScale",1);d(this,"dominanceGroup",0);d(this,"_propertiesChanged",!1);d(this,"_currentVelocity",new w);d(this,"_smoothedVelocity",new w);d(this,"_smoothedVelocityGetter",new w);d(this,"_lastPosition",new w);d(this,"_watch")}set mass(e){e!==this._mass&&(this._mass=e,this._propertiesChanged=!0,this.__didAwake&&(this.autoMass=!1))}get mass(){var e,t;return this.autoMass?((t=(e=this.context.physics.engine)==null?void 0:e.getBody(this))==null?void 0:t.mass())??-1:this._mass}get lockPositionX(){return(this.constraints&Gn.FreezePositionX)!==0}get lockPositionY(){return(this.constraints&Gn.FreezePositionY)!==0}get lockPositionZ(){return(this.constraints&Gn.FreezePositionZ)!==0}get lockRotationX(){return(this.constraints&Gn.FreezeRotationX)!==0}get lockRotationY(){return(this.constraints&Gn.FreezeRotationY)!==0}get lockRotationZ(){return(this.constraints&Gn.FreezeRotationZ)!==0}set lockPositionX(e){e?this.constraints|=Gn.FreezePositionX:this.constraints&=~Gn.FreezePositionX}set lockPositionY(e){e?this.constraints|=Gn.FreezePositionY:this.constraints&=~Gn.FreezePositionY}set lockPositionZ(e){e?this.constraints|=Gn.FreezePositionZ:this.constraints&=~Gn.FreezePositionZ}set lockRotationX(e){e?this.constraints|=Gn.FreezeRotationX:this.constraints&=~Gn.FreezeRotationX}set lockRotationY(e){e?this.constraints|=Gn.FreezeRotationY:this.constraints&=~Gn.FreezeRotationY}set lockRotationZ(e){e?this.constraints|=Gn.FreezeRotationZ:this.constraints&=~Gn.FreezeRotationZ}set gravityScale(e){this._gravityScale=e}get gravityScale(){return this._gravityScale}awake(){this._watch=void 0,this._propertiesChanged=!1}onEnable(){this._watch||(this._watch=new Pfe(this.gameObject,this.context)),this._watch.start(!0,!0),this.startCoroutine(this.beforePhysics(),$i.LateUpdate)}onDisable(){var e,t;(e=this._watch)==null||e.stop(),(t=this.context.physics.engine)==null||t.removeBody(this)}onDestroy(){var e;(e=this.context.physics.engine)==null||e.removeBody(this)}onValidate(){this._propertiesChanged=!0}*beforePhysics(){var e,t,i,n;for(;;)this._propertiesChanged&&(this._propertiesChanged=!1,(e=this.context.physics.engine)==null||e.updateProperties(this)),(t=this._watch)!=null&&t.isDirty?(this._watch.mute=!0,this._watch.applyValues(),(i=this.context.physics.engine)==null||i.updateBody(this,this._watch.positionChanged,this._watch.rotationChanged),this._watch.reset()):(n=this._watch)==null||n.syncValues(),this.captureVelocity(),yield}teleport(e,t=!0){var i;(i=this._watch)==null||i.reset(!0),t?this.gameObject.position.set(e.x,e.y,e.z):this.setWorldPosition(e.x,e.y,e.z),this.resetForcesAndTorques(),this.resetVelocities()}resetForces(e=!0){var t;(t=this.context.physics.engine)==null||t.resetForces(this,e)}resetTorques(e=!0){var t;(t=this.context.physics.engine)==null||t.resetTorques(this,e)}resetVelocities(){this.setVelocity(0,0,0),this.setAngularVelocity(0,0,0)}resetForcesAndTorques(){this.resetForces(),this.resetTorques()}wakeUp(){var e;(e=this.context.physics.engine)==null||e.wakeup(this)}get isSleeping(){var e;return(e=this.context.physics.engine)==null?void 0:e.isSleeping(this)}updateProperties(){var e;return this._propertiesChanged=!1,(e=this.context.physics.engine)==null?void 0:e.updateProperties(this)}applyForce(e,t,i=!0){var n;this._propertiesChanged&&this.updateProperties(),(n=this.context.physics.engine)==null||n.addForce(this,e,i)}applyImpulse(e,t=!0){var i;this._propertiesChanged&&this.updateProperties(),(i=this.context.physics.engine)==null||i.applyImpulse(this,e,t)}setForce(e,t,i,n=!0){var r,o,a;(r=this.context.physics.engine)==null||r.resetForces(this,n),typeof e=="number"?(t??(t=0),i??(i=0),(o=this.context.physics.engine)==null||o.addForce(this,{x:e,y:t,z:i},n)):(a=this.context.physics.engine)==null||a.addForce(this,e,n)}getVelocity(){var t;const e=(t=this.context.physics.engine)==null?void 0:t.getLinearVelocity(this);return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setVelocity(e,t,i,n=!0){var r,o;if(e instanceof w){const a=e;(r=this.context.physics.engine)==null||r.setLinearVelocity(this,a,n);return}t===void 0||i===void 0||(o=this.context.physics.engine)==null||o.setLinearVelocity(this,{x:e,y:t,z:i},n)}getAngularVelocity(){var t;const e=(t=this.context.physics.engine)==null?void 0:t.getAngularVelocity(this);return e?(this._currentVelocity.x=e.x,this._currentVelocity.y=e.y,this._currentVelocity.z=e.z,this._currentVelocity):this._currentVelocity.set(0,0,0)}setAngularVelocity(e,t,i,n=!0){var r,o;if(e instanceof w){const a=e;(r=this.context.physics.engine)==null||r.setAngularVelocity(this,a,n);return}t===void 0||i===void 0||(o=this.context.physics.engine)==null||o.setAngularVelocity(this,{x:e,y:t,z:i},n)}setTorque(e,t,i){this.setAngularVelocity(e,t,i)}get smoothedVelocity(){return this._smoothedVelocityGetter.copy(this._smoothedVelocity),this._smoothedVelocityGetter.multiplyScalar(1/this.context.time.deltaTime)}setBodyFromGameObject(e=null){}captureVelocity(){const e=Ft(this.gameObject);EB.tempPosition.copy(e);const t=e.sub(this._lastPosition);this._lastPosition.copy(EB.tempPosition),this._smoothedVelocity.lerp(t,this.context.time.deltaTime/.1)}},d(uR,"tempPosition",new w),uR);let zi=EB;ra([ur()],zi.prototype,"autoMass",2);ra([x()],zi.prototype,"mass",1);ra([ur(),x()],zi.prototype,"useGravity",2);ra([x(w)],zi.prototype,"centerOfMass",2);ra([ur(),x()],zi.prototype,"constraints",2);ra([ur(),x()],zi.prototype,"isKinematic",2);ra([ur(),x()],zi.prototype,"drag",2);ra([ur(),x()],zi.prototype,"angularDrag",2);ra([ur(),x()],zi.prototype,"detectCollisions",2);ra([ur(),x()],zi.prototype,"sleepThreshold",2);ra([ur(),x()],zi.prototype,"collisionDetectionMode",2);ra([ur()],zi.prototype,"_gravityScale",2);ra([ur()],zi.prototype,"dominanceGroup",2);const Tu=ie("debugsync"),Q0="STRS";RO(Q0,bh.getRootAsSyncedTransformModel);const Nl=new P_;function xj(s,e,t=!0){Nl.clear();const i=Nl.createString(s);bh.startSyncedTransformModel(Nl),bh.addGuid(Nl,i),bh.addFast(Nl,t);const n=e.worldPosition,r=e.worldEuler,o=e.gameObject.scale;bh.addTransform(Nl,bj.createTransform(Nl,n.x,n.y,n.z,r.x,r.y,r.z,o.x,o.y,o.z));const a=bh.endSyncedTransformModel(Nl);return Nl.finish(a,Q0),Nl.asUint8Array()}let MB=0,e0=0;_j(s=>{var i;const t=((i=s.connection.currentServerUrl)==null?void 0:i.includes("glitch"))?10:40;e0=Math.floor(MB/t),MB=0,Tu&&e0>0&&console.log("Sync Transform Fast Interval",e0)});class dd extends Ie{constructor(){super(...arguments);d(this,"overridePhysics",!0);d(this,"interpolatePosition",!0);d(this,"interpolateRotation",!0);d(this,"fastMode",!1);d(this,"syncDestroy",!1);d(this,"_model",null);d(this,"_needsUpdate",!0);d(this,"rb",null);d(this,"_wasKinematic",!1);d(this,"_receivedDataBefore",!1);d(this,"_targetPosition");d(this,"_targetRotation");d(this,"_receivedFastUpdate",!1);d(this,"_shouldRequestOwnership",!1);d(this,"joinedRoomCallback",null);d(this,"receivedDataCallback",null);d(this,"tempEuler",new mi);d(this,"receivedUpdate",!1);d(this,"lastWorldPos");d(this,"lastWorldRotation")}requestOwnership(){Tu&&console.log("Request ownership"),this._model?this._model.requestOwnership():(this._shouldRequestOwnership=!0,this._needsUpdate=!0)}hasOwnership(){var t;return((t=this._model)==null?void 0:t.hasOwnership)??void 0}isOwned(){var t;return(t=this._model)==null?void 0:t.isOwned}awake(){Tu&&console.log("new instance",this.guid,this),this._receivedDataBefore=!1,this._targetPosition=new w,this._targetRotation=new Ce,this.lastWorldPos=new w,this.lastWorldRotation=new Ce,this.rb=se.getComponentInChildren(this.gameObject,zi),this.rb&&(this._wasKinematic=this.rb.isKinematic),this.receivedUpdate=!0,this._model=new kO(this.context.connection,this.guid),this.context.connection.isConnected&&this.tryGetLastState(),this.joinedRoomCallback=this.tryGetLastState.bind(this),this.context.connection.beginListen(Xt.JoinedRoom,this.joinedRoomCallback),this.receivedDataCallback=this.onReceivedData.bind(this),this.context.connection.beginListenBinary(Q0,this.receivedDataCallback)}onDestroy(){this.syncDestroy&&NO(this.guid,this.context.connection),this._model=null,this.context.connection.stopListen(Xt.JoinedRoom,this.joinedRoomCallback),this.context.connection.stopListenBinary(Q0,this.receivedDataCallback)}tryGetLastState(){const t=this.context.connection.tryGetState(this.guid);t&&this.onReceivedData(t)}onReceivedData(t){var i;if(!this.destroyed&&typeof t.guid=="function"&&t.guid()===this.guid){Tu&&console.log("new data",this.context.connection.connectionId,this.context.time.frameCount,this.guid,t),this.receivedUpdate=!0,this._receivedFastUpdate=t.fast();const n=t.transform();if(n){ka.markDirty(this.gameObject,!0);const r=n.position();r&&(this.interpolatePosition&&((i=this._targetPosition)==null||i.set(r.x(),r.y(),r.z())),(!this.interpolatePosition||!this._receivedDataBefore)&&this.setWorldPosition(r.x(),r.y(),r.z()));const o=n.rotation();o&&(this.tempEuler.set(o.x(),o.y(),o.z()),this.interpolateRotation&&this._targetRotation.setFromEuler(this.tempEuler),(!this.interpolateRotation||!this._receivedDataBefore)&&kD(this.gameObject,this.tempEuler))}this._receivedDataBefore=!0}}onEnable(){this.lastWorldPos.copy(this.worldPosition),this.lastWorldRotation.copy(this.worldQuaternion),this._needsUpdate=!0,this._model&&this._model.updateIsOwned()}onDisable(){this._model&&this._model.freeOwnership()}onBeforeRender(){if(!this.activeAndEnabled||!this.context.connection.isConnected)return;if(!this.context.connection.isInRoom||!this._model){Tu&&console.log("no model or room",this.name,this.guid,this.context.connection.isInRoom);return}this._shouldRequestOwnership&&(this._shouldRequestOwnership=!1,this._model.requestOwnership());const t=this.worldPosition,i=this.worldQuaternion;if(this._model.isOwned&&!this.receivedUpdate){const o=t.distanceTo(this.lastWorldPos),a=i.angleTo(this.lastWorldRotation),l=this._model.hasOwnership||this.fastMode?1e-4:.001;(o>l||a>l)&&(this._model.hasOwnership?this._needsUpdate=!0:(Tu&&console.log(this.guid,"reset because not owned but",this.gameObject.name,this.lastWorldPos),this.worldPosition=this.lastWorldPos,t.copy(this.lastWorldPos),this.worldQuaternion=this.lastWorldRotation,i.copy(this.lastWorldRotation),ka.markDirty(this.gameObject,!0),this._needsUpdate=!1))}if(this._model&&!this._model.hasOwnership&&this._model.isOwned&&this._receivedDataBefore){const a=this._receivedFastUpdate||this.fastMode?.5:.3;let l=!1;if(this.interpolatePosition&&this._targetPosition){const c=this.worldPosition;c.lerp(this._targetPosition,a),this.worldPosition=c,l=!0}if(this.interpolateRotation&&this._targetRotation){const c=this.worldQuaternion;c.slerp(this._targetRotation,a),this.worldQuaternion=c,l=!0}l&&ka.markDirty(this.gameObject,!0)}if(this.receivedUpdate=!1,this.lastWorldPos.copy(t),this.lastWorldRotation.copy(i),!this._model||!this._model||this._model.hasOwnership===void 0||!this._model.hasOwnership)return;this.rb&&this.overridePhysics&&this._wasKinematic!==void 0&&(Tu&&console.log("reset kinematic",this.rb.name,this._wasKinematic),this.rb.isKinematic=this._wasKinematic);const n=10,r=this.rb||this.fastMode;if(this._needsUpdate&&(this.context.time.frameCount%n===0||r)){if(MB++,r&&e0>0&&this.context.time.frameCount%e0!==0)return;Tu&&console.log("send update",this.context.connection.connectionId,this.guid,this.gameObject.name,this.gameObject.guid),this._needsUpdate=!1;const o=xj(this.guid,this,!!r);this.context.connection.sendBinary(o)}}}const Bfe=ie("debugshadowcomponents");ID.prototype.interactable={get(){return this.interactive},set(s){this.interactable=s}};const Ba=Symbol("shadowDomOwner");class Ga extends Ie{constructor(){super(...arguments);d(this,"_shadowComponent",null);d(this,"_controlsChildLayout",!0);d(this,"_root");d(this,"_parentComponent")}isRoot(){var t;return((t=this.Root)==null?void 0:t.gameObject)===this.gameObject}get canvas(){const t=this.Root;return t!=null&&t.isCanvas?t:null}get Canvas(){return this.canvas}markDirty(){_o.markUIDirty(this.context)}get shadowComponent(){return this._shadowComponent}set shadowComponent(t){this._shadowComponent=t}get controlsChildLayout(){return this._controlsChildLayout}set controlsChildLayout(t){this._controlsChildLayout=t,this.shadowComponent&&(this.shadowComponent.autoLayout=t)}get Root(){return this._root===void 0&&(this._root=se.getComponentInParent(this.gameObject,G_)),this._root}__internalNewInstanceCreated(t){return super.__internalNewInstanceCreated(t),this.shadowComponent=null,this._root=void 0,this._parentComponent=void 0,this}onEnable(){super.onEnable()}addShadowComponent(t,i){var o;if(!t)return;this.removeShadowComponent();const n=this.isRoot()?this.gameObject:this.gameObject.parent;if(this._parentComponent=se.getComponentInParent(n,Ga),!this._parentComponent){console.warn(`Component "${this.name}" doesn't have a UI parent anywhere. Do you have an UI element outside a Canvas? UI components must be a child of a Canvas component`,this);return}t.name=this.name+" ("+(this.constructor.name??"UI")+")",t.autoLayout=this._parentComponent.controlsChildLayout,t[Ba]=this,this.setShadowComponentOwner(t);let r=!1;if(((o=this.Root)==null?void 0:o.gameObject)===this.gameObject)this.gameObject.add(t);else{const a=this._parentComponent.shadowComponent;a&&(a==null||a.add(t),r=!0)}this.shadowComponent=t,i&&i.shadowComponent&&this.shadowComponent&&i.shadowComponent.add(this.shadowComponent),R_&&t.add(new na(.5)),this.onAfterAddedToScene(),r&&_5(),Bfe&&console.warn("Added shadow component",this.shadowComponent)}setShadowComponentOwner(t){if(t&&(t[Ba]===void 0||t[Ba]===this)&&(t[Ba]=this,t.children))for(const i of t.children)this.setShadowComponentOwner(i)}traverseOwnedShadowComponents(t,i,n){if(t&&t[Ba]===i){n(t);for(const r of t.children)this.traverseOwnedShadowComponents(r,i,n)}}removeShadowComponent(){this.shadowComponent&&this.shadowComponent.removeFromParent()}onAfterAddedToScene(){}setInteractable(t){this.shadowComponent&&(this.shadowComponent.interactable=t)}}class G_ extends Ga{awake(){super.awake()}}class Gy{constructor(e,t){d(this,"event");d(this,"button");d(this,"buttonName");d(this,"_used",!1);d(this,"_propagationStopped",!1);d(this,"z__pointer_ctured",!1);d(this,"z__pointer_cture_rleased",!1);d(this,"inputSource");d(this,"object");d(this,"point");d(this,"normal");d(this,"face");d(this,"distance");d(this,"instanceId");d(this,"intersection");d(this,"isDown");d(this,"isUp");d(this,"isPressed");d(this,"isClick");d(this,"isDoubleClick");d(this,"input");this.event=t,this.input=e,this.button=t.button}get deviceIndex(){return this.event.deviceIndex}get pointerId(){return this.event.pointerId}get pressure(){return this.event.pressure}get used(){return this._used}use(){this._used||(this._used=!0,this.event.use(),this.pointerId!==void 0&&this.input.setPointerUsed(this.pointerId))}get propagationStopped(){return this._propagationStopped}stopPropagation(){this._propagationStopped=!0,this.event.stopImmediatePropagation()}stopImmediatePropagation(){this._propagationStopped=!0,this.event.stopImmediatePropagation()}setPointerCapture(){this.z__pointer_ctured=!0}releasePointerCapture(){this.z__pointer_cture_rleased=!0}get mode(){return this.event.mode}clone(){const e=new Gy(this.input,this.event);return Object.assign(e,this),e}Use(){this.use()}StopPropagation(){this.event.stopImmediatePropagation()}}function TB(s,e){return se.foreachComponent(s,i=>{if(!i.enabled)return;const n=i;if(e)switch(e){case"pointerdown":if(n.onPointerDown)return!0;break;case"pointerup":if(n.onPointerUp||n.onPointerClick)return!0;break;case"pointermove":if(n.onPointerEnter||n.onPointerExit||n.onPointerMove)return!0;break}else if(n.onPointerDown||n.onPointerUp||n.onPointerEnter||n.onPointerExit||n.onPointerClick)return!0},!1)===!0}var Dfe=Object.defineProperty,Ofe=Object.getOwnPropertyDescriptor,Lfe=(s,e,t,i)=>{for(var n=i>1?void 0:i?Ofe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Dfe(e,t,n),n};class H_ extends Ie{awake(){_o.createIfNoneExists(this.context)}onEnable(){var e;(e=_o.get(this.context))==null||e.register(this)}onDisable(){var e;(e=_o.get(this.context))==null||e.unregister(this)}}class sa extends H_{constructor(){super(...arguments);d(this,"targets",null);d(this,"raycastHits",[]);d(this,"ignoreSkinnedMeshes",!1)}start(){this.targets=[this.gameObject]}performRaycast(t=null){if(!this.targets)return null;t??(t=new Ml),t.targets=this.targets,t.results=this.raycastHits;const i=t.testObject;this.ignoreSkinnedMeshes&&(t.testObject=r=>r instanceof xo?"continue in children":i?i(r):!0);const n=this.context.physics.raycast(t);return t.testObject=i,n}}Lfe([x()],sa.prototype,"ignoreSkinnedMeshes",2);class mE extends sa{constructor(){super(),this.ignoreSkinnedMeshes=!0}}class j0 extends H_{performRaycast(e){if(!Et.active||!(e!=null&&e.ray))return null;const t=e.ray.origin,i=.01;return this.context.physics.sphereOverlap(t,i)}}class gE{static getObject(e){const t=e[Ba];return t&&(t.isComponent===!0?e=t.gameObject:e=t),e}static isInteractable(e,t){if(t&&(t.canvasGroup=void 0,t.graphic=void 0),e==null||!e.visible||(e=this.getObject(e),!e.visible))return!1;const i=this.tryFindCanvasGroup(e);if((i==null?void 0:i.isCanvasGroup)===!0&&(t&&(t.canvasGroup=i),i.blocksRaycasts===!1||i.interactable===!1))return!1;const n=Ep(e,r=>{if(r.isGraphic===!0)return r},!1);return t&&(n==null?void 0:n.isGraphic)===!0&&(t.graphic=n),!((n==null?void 0:n.raycastTarget)===!1||(n==null?void 0:n.layer)===2)}static tryFindCanvasGroup(e){if(!e)return null;const t=Ep(e,i=>{const n=i;if(n.blocksRaycasts!==void 0&&n.interactable!==void 0)return n},!1);return t!==void 0?t:this.tryFindCanvasGroup(e.parent)}}function VO(s){const e=s[Ba];return e||(s.parent?VO(s.parent):null)}function kfe(s){return s.isUI===!0||typeof s[Ba]=="object"}function IC(s,e){if(!s)return;const t=s.material;if((t==null?void 0:t.isMaterial)===!0){const i=s.parent;i&&i.isText,t.side=e.doubleSided??!0?Ai:ys,t.shadowSide=e.doubleSided?Ai:ys,s.castShadow=e.castShadows?e.castShadows:!1,s.receiveShadow=e.receiveShadows?e.receiveShadows:!1}for(const i of s.children)IC(i,e)}function mg(s,e,t){s[e]===void 0&&console.warn("Field",e,"is undefined on",s);const i=Proxy.revocable(s[e],{set(o,a,l,c){const h=o[a],u=Reflect.set(o,a,l,c);return t(l,h),u}}),n=i.revoke,r=s[e];return i.revoke=()=>{s[e]=r,n()},s[e]=i.proxy,i}const Sz=Symbol("Scheduled action");function Ffe(s,e,t=$i.OnBeforeRender){let i=s[Sz];i||(i=s[Sz]={});const n=e.name;i[t]||(i[t]={});const r=i[t];if(r[n])return;function*a(){e==null||e.call(s),r[n]=null}const l=s.startCoroutine(a(),t);r[n]=l}const nh=ie("debugeventsystem");var IB=(s=>(s.BeforeHandleInput="BeforeHandleInput",s.AfterHandleInput="AfterHandleInput",s))(IB||{});const Kl=class extends Ie{constructor(){super();d(this,"raycaster",[]);d(this,"_handleInputFn");d(this,"pressedByID",new Map);d(this,"hoveredByID",new Map);d(this,"_sortedHits",[]);d(this,"_testObjectsCache",new Map);d(this,"_currentlyActiveRaycaster",null);d(this,"_currentPointerEventName",null);d(this,"shouldRaycastObject",t=>{var r;let i=null;if(kfe(t)&&(i=(r=t[Ba])==null?void 0:r.gameObject),this._testObjectsCache.has(t)||i&&this._testObjectsCache.has(i))return this._testObjectsCache.get(t)===!1?"continue in children":!0;{let o=TB(t,this._currentPointerEventName);if(!o&&i&&(o=TB(i,this._currentPointerEventName)),o){this._testObjectsCache.set(t,!0);for(const a of t.children)this.shouldRaycastObject_AddToYesCache(a);return!0}return this._testObjectsCache.set(t,!1),"continue in children"}});d(this,"_sortingBuffer",[]);d(this,"_noDepthTestingResults",[]);d(this,"out",{});d(this,"_capturedPointer",{});d(this,"pointerEnterSymbol",Symbol("pointerEnter"));d(this,"pointerExitSymbol",Symbol("pointerExit"));d(this,"currentActiveMeshUIComponents",[]);Kl.systems.push(this)}static createIfNoneExists(t){this.didSearchEventSystem||(this.didSearchEventSystem=!0,Kl.systems.length<=0&&Kl.systems.push(...se.findObjectsOfType(Kl,t)));for(const n of Kl.systems)if(n.context===t)return;const i=new Ae;se.addNewComponent(i,Kl),t.scene.add(i)}static get systems(){const t=Dt.Current;return this._eventSystemMap.has(t)||this._eventSystemMap.set(t,[]),this._eventSystemMap.get(t)}static get(t){const i=this._eventSystemMap.get(t);return i&&i.length>0?i[0]:null}static get instance(){return this.systems[0]}static ensureUpdateMeshUI(t,i,n=!1){Uu.update(t,i,n)}static markUIDirty(t){Uu.markDirty()}get hasActiveUI(){return this.currentActiveMeshUIComponents.length>0}get isHoveringObjects(){return this.hoveredByID.size>0}onDestroy(){Kl.systems.splice(Kl.systems.indexOf(this),1)}start(){if(this.raycaster.length<=0&&!se.findObjectOfType(H_,this.context)){const i=se.addNewComponent(this.context.scene,sa);this.raycaster.push(i),(ct()||nh)&&console.warn("Added an ObjectRaycaster to the scene because no raycaster was found.")}}register(t){var i;t&&this.raycaster&&!this.raycaster.includes(t)&&((i=this.raycaster)==null||i.push(t))}unregister(t){var n,r;const i=(n=this.raycaster)==null?void 0:n.indexOf(t);i!==void 0&&i!==-1&&((r=this.raycaster)==null||r.splice(i,1))}onEnable(){this._handleInputFn??(this._handleInputFn=this.onPointerEvent.bind(this)),this.context.input.addEventListener(fn.PointerDown,this._handleInputFn),this.context.input.addEventListener(fn.PointerUp,this._handleInputFn),this.context.input.addEventListener(fn.PointerMove,this._handleInputFn)}onDisable(){this.context.input.removeEventListener(fn.PointerDown,this._handleInputFn),this.context.input.removeEventListener(fn.PointerUp,this._handleInputFn),this.context.input.removeEventListener(fn.PointerMove,this._handleInputFn)}onBeforeRender(){this.resetMeshUIStates()}onPointerEvent(t){if(t===void 0||t.propagationStopped)return;const i=new Gy(this.context.input,t);this._currentPointerEventName=t.type,i.inputSource=this.context.input,i.isClick=t.isClick,i.isDoubleClick=t.isDoubleClick,i.isDown=t.type==fn.PointerDown,i.isUp=t.type==fn.PointerUp,i.isPressed=this.context.input.getPointerPressed(t.pointerId),nh&&(i.isDown?console.log("DOWN",i.pointerId):i.isUp&&console.log("UP",i.pointerId),i.isClick&&console.log("CLICK",i.pointerId));const n=new Ml;t.hasRay?n.ray=t.ray:n.screenPoint=this.context.input.getPointerPositionRC(t.pointerId);const r=this.performRaycast(n);if(r)for(const a of r)a.event=t,t.intersections.push(a);nh&&i.isClick&&pn("EventSystem: "+i.pointerId+" - "+this.context.time.frame+" - Up:"+i.isUp+", Down:"+i.isDown);const o={sender:this,args:i,hasActiveUI:this.currentActiveMeshUIComponents.length>0};this.dispatchEvent(new CustomEvent("BeforeHandleInput",{detail:o})),this.handleIntersections(r,i),this.dispatchEvent(new CustomEvent("AfterHandleInput",{detail:o}))}shouldRaycastObject_AddToYesCache(t){this._testObjectsCache.set(t,!0);for(const i of t.children)this.shouldRaycastObject_AddToYesCache(i)}performRaycast(t){if(!this.raycaster)return null;this._testObjectsCache.clear(),this._sortedHits.length=0,t||(t=new Ml),t.testObject=this.shouldRaycastObject;for(const i of this.raycaster){if(!i.activeAndEnabled)continue;this._currentlyActiveRaycaster=i;const n=i.performRaycast(t);this._currentlyActiveRaycaster=null,n&&n.length>0&&this._sortedHits.push(...n)}return this._sortedHits.sort((i,n)=>i.distance-n.distance),this._sortedHits}assignHitInformation(t,i){i?(t.intersection=i,t.point=i.point,t.normal=i.normal,t.face=i.face,t.distance=i.distance,t.instanceId=i.instanceId):(t.intersection=void 0,t.point=void 0,t.normal=void 0,t.face=void 0,t.distance=void 0,t.instanceId=void 0)}handleIntersections(t,i){var r;if(t!=null&&t.length){t=this.sortCandidates(t);for(const o of t){if(i.event.immediatePropagationStopped)return!1;if(this.assignHitInformation(i,o),this.handleEventOnObject(o.object,i))return!0}}this.assignHitInformation(i,t==null?void 0:t[0]),this.invokePointerCapture(i);const n=this.hoveredByID.get(i.pointerId);return n&&this.propagatePointerExit(n.obj,n.data,null),this.hoveredByID.delete(i.pointerId),i.isUp&&((r=this.pressedByID.get(i.pointerId))==null||r.handlers.forEach(o=>this.invokeOnPointerUp(i,o)),this.pressedByID.delete(i.pointerId)),!1}sortCandidates(t){this._sortingBuffer.length=0,this._noDepthTestingResults.length=0;for(let i=0;i<t.length;i++){const n=t[i],r=n.object;if(r.material&&r.material.depthTest===!1){this._noDepthTestingResults.push(n);continue}this._sortingBuffer.push(n)}for(const i of this._sortingBuffer)this._noDepthTestingResults.push(i);return this._noDepthTestingResults}handleEventOnObject(t,i){if(!this.testIsVisible(t))return i.isClick&&nh&&console.log("not allowed",t),!1;if(i.pointerId===void 0)return nh&&console.error("Event without pointer can't be handled",i),!1;i.object=t;const n=t.parent,r=i.isClick??!1;let o=null;if(n&&n.isUI){const u=(i.isPressed||i.isClick)??!1;if(n[Ba]){const f=n[Ba].gameObject;if(f){if(!gE.isInteractable(f,this.out))return!1;o=this.out.canvasGroup??null,this.handleMeshUIIntersection(t,u),t=f}}}r&&nh&&console.log(this.context.time.frame,t);const a=this.hoveredByID.get(i.pointerId),l=a==null?void 0:a.obj;l!==t&&l&&this.propagatePointerExit(l,a.data,t);const h=this.hoveredByID.get(i.pointerId);if(h?(h.obj=t,h.data=i):this.hoveredByID.set(i.pointerId,{obj:t,data:i}),i.isDown){const u=this.pressedByID.get(i.pointerId);u?(u.obj=t,u.data=i):this.pressedByID.set(i.pointerId,{obj:t,data:i,handlers:new Set})}return(o===null||o.interactable)&&this.handleMainInteraction(t,i,l??null),!0}propagate(t,i){for(;t;)se.foreachComponent(t,n=>{i(n)},!1),t=t.parent}handleMainInteraction(t,i,n){const r=this.pressedByID.get(i.pointerId),o=n!==t;let a=!0;switch(i.event.pointerType){case"mouse":case"touch":const l=this.context.input.getPointerPositionLastFrame(i.pointerId),c=this.context.input.getPointerPosition(i.pointerId);a=l&&!it.approximately(l,c);break}this.propagate(t,l=>{var h;const c=l;c.interactable!==!1&&(!c.activeAndEnabled||!c.enabled||(c.onPointerEnter&&o&&this.handlePointerEnter(c,i),i.isDown&&c.onPointerDown&&(c.onPointerDown(i),r==null||r.handlers.add(c),this.handlePointerCapture(i,c)),c.onPointerMove&&(a&&c.onPointerMove(i),this.handlePointerCapture(i,c)),i.isUp&&(c.onPointerUp&&(this.invokeOnPointerUp(i,c),r==null||r.handlers.delete(c)),c.onPointerExit&&((h=i.event)==null?void 0:h.pointerType)===nE.Touch&&(this.handlePointerExit(c,i),this.hoveredByID.delete(i.pointerId))),i.isClick&&c.onPointerClick&&c.onPointerClick(i)))}),i.isUp&&(r==null||r.handlers.forEach(l=>{this.invokeOnPointerUp(i,l)}),this.pressedByID.delete(i.pointerId))}propagatePointerExit(t,i,n){this.propagate(t,r=>{if(!r.gameObject||r.destroyed)return;const o=r;if(o.onPointerExit){if(n&&this.isChild(n,r.gameObject))return;this.handlePointerExit(o,i)}})}invokeOnPointerUp(t,i){var n;(n=i.onPointerUp)==null||n.call(i,t),this.releasePointerCapture(t,i)}handlePointerEnter(t,i){t.onPointerEnter&&this.updatePointerState(t,i.pointerId,this.pointerEnterSymbol,!0)&&t.onPointerEnter(i),this.updatePointerState(t,i.pointerId,this.pointerExitSymbol,!1)}handlePointerExit(t,i){t.onPointerExit&&this.updatePointerState(t,i.pointerId,this.pointerExitSymbol,!0)&&t.onPointerExit(i),this.updatePointerState(t,i.pointerId,this.pointerEnterSymbol,!1)}updatePointerState(t,i,n,r){let o=t[n];if(r)return o&&o.includes(i)?!1:(o=o||[],o.push(i),t[n]=o,!0);{if(!o||!o.includes(i))return!1;const a=o.indexOf(i);return a!==-1&&o.splice(a,1),!0}}handlePointerCapture(t,i){if(t.z__pointer_ctured){t.z__pointer_ctured=!1;const n=t.pointerId;if(i.onPointerMove){const r=this._capturedPointer[n]||[];r.push(i),this._capturedPointer[n]=r}else ct()&&!i.z__warned_no_pointermove&&(i.z__warned_no_pointermove=!0,console.warn("PointerCapture was requested but the component doesn't implement onPointerMove. It will not receive any pointer events"))}else t.z__pointer_cture_rleased&&(t.z__pointer_cture_rleased=!1,this.releasePointerCapture(t,i))}releasePointerCapture(t,i){const n=t.pointerId;if(this._capturedPointer[n]){const r=this._capturedPointer[n].indexOf(i);r!==-1&&(this._capturedPointer[n].splice(r,1),nh&&console.log("released pointer capture",n,i,this._capturedPointer))}}invokePointerCapture(t){var i;if(t.event.type===fn.PointerMove){const n=t.pointerId,r=this._capturedPointer[n];if(r){nh&&console.log("Captured",n,r);for(let o=0;o<r.length;o++){const a=r[o];if(a.destroyed){r.splice(o,1),o--;continue}(i=a.onPointerMove)==null||i.call(a,t)}}}}isChild(t,i){return!t||!i?!1:t===i?!0:t.parent?this.isChild(t.parent,i):!1}handleMeshUiObjectWithoutShadowDom(t,i){return!t||!t.isUI?!0:this.handleMeshUIIntersection(t,i)}handleMeshUIIntersection(t,i){const n=Uu.updateState(t,i);return n&&this.currentActiveMeshUIComponents.push(n),n!==null}resetMeshUIStates(){if(this.context.input.getPointerPressedCount()>0&&Uu.resetLastSelected(),!(!this.currentActiveMeshUIComponents||this.currentActiveMeshUIComponents.length<=0)){for(let t=0;t<this.currentActiveMeshUIComponents.length;t++){const i=this.currentActiveMeshUIComponents[t];Uu.resetState(i)}this.currentActiveMeshUIComponents.length=0}}testIsVisible(t){return t?se.isActiveSelf(t)?this.testIsVisible(t.parent):!1:!0}};let _o=Kl;d(_o,"_eventSystemMap",new Map),d(_o,"didSearchEventSystem",!1);class Uu{static markDirty(){this.needsUpdate=!0}static update(e,t,i=!1){if(i){e.update();return}const n=t.time.frameCount;for(const r of this.lastUpdateFrame)if(r.context===t){if(n===r.frame)return;r.frame=n;let o=this.needsUpdate||n<1;r.nextUpdate===t.time.frameCount&&(o=!0),o&&(nh&&console.log("Update threemeshui"),this.needsUpdate=!1,e.update());return}this.lastUpdateFrame=[{context:t,frame:n,nextUpdate:n}],e.update()}static updateState(e,t){let i=null;if(e&&(i=this.findBlockInParent(e),i&&i!==this.lastSelected)){if(i.interactable===!1)return null;this.needsUpdate=!0}return i}static resetLastSelected(){const e=this.lastSelected;e&&(this.lastSelected=null,this.resetState(e))}static resetState(e){e&&(this.needsUpdate=!0)}static findBlockInParent(e){return e?e.isBlock?e:this.findBlockInParent(e.parent):null}}d(Uu,"lastSelected",null),d(Uu,"lastUpdateFrame",[]),d(Uu,"needsUpdate",!1);var Ufe=Object.defineProperty,Nfe=Object.getOwnPropertyDescriptor,yn=(s,e,t,i)=>{for(var n=i>1?void 0:i?Nfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Ufe(e,t,n),n};const EI=ie("debugorbit"),vw=ie("freecam"),_w=ie("debugcamerafit"),bw=ie("smoothcam"),zfe={LEFT:"",UP:"",RIGHT:"",BOTTOM:""};let MI;class W0 extends CustomEvent{constructor(e,t){super("target-reached",{detail:{controls:e,type:t}})}}class bi extends Ie{constructor(){super(...arguments);d(this,"autoTarget",!0);d(this,"autoFit",!1);d(this,"enableRotate",!0);d(this,"autoRotate",!1);d(this,"autoRotateSpeed",1);d(this,"minAzimuthAngle",1/0);d(this,"maxAzimuthAngle",1/0);d(this,"minPolarAngle",0);d(this,"maxPolarAngle",Math.PI);d(this,"enableKeys",!0);d(this,"enableDamping",!0);d(this,"dampingFactor",.1);d(this,"enableZoom",!0);d(this,"minZoom",0);d(this,"maxZoom",1/0);d(this,"zoomSpeed",1);d(this,"zoomToCursor",!1);d(this,"enablePan",!0);d(this,"lookAtConstraint",null);d(this,"lookAtConstraint01",1);d(this,"allowInterrupt",!0);d(this,"middleClickToFocus",!0);d(this,"doubleClickToFocus",!0);d(this,"clickBackgroundToFitScene",2);d(this,"debugLog",!1);d(this,"targetLerpDuration",1);d(this,"_controls",null);d(this,"_cameraObject",null);d(this,"_lookTargetLerpActive",!1);d(this,"_lookTargetStartPosition",new w);d(this,"_lookTargetEndPosition",new w);d(this,"_lookTargetLerp01",0);d(this,"_lookTargetLerpDuration",0);d(this,"_cameraLerpActive",!1);d(this,"_cameraStartPosition",new w);d(this,"_cameraEndPosition",new w);d(this,"_cameraLerp01",0);d(this,"_cameraLerpDuration",0);d(this,"_inputs",0);d(this,"_enableTime",0);d(this,"_startedListeningToKeyEvents",!1);d(this,"_eventSystem");d(this,"_afterHandleInputFn");d(this,"_camera",null);d(this,"_syncedTransform");d(this,"_didStart",!1);d(this,"_didSetTarget",0);d(this,"targetElement",null);d(this,"_lastTimeClickOnBackground",-1);d(this,"_clickOnBackgroundCount",0);d(this,"_onPointerDown",t=>{if(this.clickBackgroundToFitScene>0&&t.isClick&&t.button===0){if(t.hasRay||t.intersections.push(...this.context.physics.raycast()),t.intersections.length<=0){const i=this.context.time.time-this._lastTimeClickOnBackground;this._lastTimeClickOnBackground=this.context.time.time,this.clickBackgroundToFitScene<=1||i<this.clickBackgroundToFitScene*.15?(this._clickOnBackgroundCount+=1,this._clickOnBackgroundCount>=this.clickBackgroundToFitScene-1&&this.fitCamera(this.context.scene.children,{immediate:!1})):this._clickOnBackgroundCount=0}EI&&console.log(this.clickBackgroundToFitScene,t.intersections.length,this._clickOnBackgroundCount)}});d(this,"onControlsChangeStarted",()=>{this._syncedTransform&&this._syncedTransform.requestOwnership()});d(this,"_shouldDisable",!1);d(this,"__onPreRender",()=>{const t=this.context.pre_render_callbacks.indexOf(this.__onPreRender);t>=0&&this.context.pre_render_callbacks.splice(t,1),this.autoFit&&this.fitCamera(this.scene.children,{centerCamera:"y",immediate:!0})});d(this,"_haveAttachedKeyboardEvents",!1)}get isCameraController(){return!0}get controls(){return this._controls}get controllerObject(){return this._cameraObject}onStartInteraction(t){var i;(i=this.controls)==null||i.addEventListener("start",t)}get targetLerpSpeed(){return 5}set targetLerpSpeed(t){this.targetLerpDuration=1/t}awake(){this._didStart=!1,this._didSetTarget=0,this._startedListeningToKeyEvents=!1}start(){this._didStart=!0,this._eventSystem=_o.get(this.context)??void 0,this._eventSystem&&(this._afterHandleInputFn=this.afterHandleInput.bind(this),this._eventSystem.addEventListener(IB.AfterHandleInput,this._afterHandleInputFn))}onDestroy(){var t,i;(t=this._controls)==null||t.dispose(),(i=this._eventSystem)==null||i.removeEventListener(IB.AfterHandleInput,this._afterHandleInputFn)}onEnable(){this._didSetTarget=0,this._enableTime=this.context.time.time;const t=se.getComponent(this.gameObject,Qi);this._camera=t;let i=t==null?void 0:t.cam;if(!i&&this.gameObject instanceof Gt&&(i=this.gameObject),i&&_P(i,this,!0),!this._controls&&i instanceof Gt){this._cameraObject=i;const n=this.targetElement??this.context.renderer.domElement,r=i==null?void 0:i.quaternion.clone();this._controls=new Aj(i,n),i==null||i.quaternion.copy(r),MI===void 0&&(MI={...this._controls.keys})}this._controls&&(vw&&(this.enablePan=!0,this.enableZoom=!0,this.middleClickToFocus=!0,ja()&&(this.doubleClickToFocus=!0)),this._controls.addEventListener("start",this.onControlsChangeStarted),(i==null?void 0:i.type)==="PerspectiveCamera"?vw||(this._controls.minDistance=this.minZoom,this._controls.maxDistance=this.maxZoom):vw||(this._controls.minZoom=this.minZoom,this._controls.maxZoom=this.maxZoom),this._startedListeningToKeyEvents||(this._startedListeningToKeyEvents=!0,this._controls.listenToKeyEvents(window.document.body))),this._syncedTransform=se.getComponent(this.gameObject,dd)??void 0,this.context.input.addEventListener("pointerup",this._onPointerDown),this.context.pre_render_callbacks.push(this.__onPreRender)}onDisable(){var t;(t=this._camera)!=null&&t.cam&&_P(this._camera.cam,this,!1),this._controls&&(this._controls.enabled=!1,this._controls.autoRotate=!1,this._controls.removeEventListener("start",this.onControlsChangeStarted)),this.context.input.removeEventListener("pointerup",this._onPointerDown)}afterHandleInput(t){t.detail.args.pointerId===0&&(t.detail.args.isDown?this._controls&&this._eventSystem&&(this._shouldDisable=this._eventSystem.hasActiveUI):(!t.detail.args.isPressed||t.detail.args.isUp)&&(this._shouldDisable=!1))}onBeforeRender(){var i,n;if(!this._controls)return;if(this._cameraObject!==this.context.mainCamera){this._controls.enabled=!1;return}if(this._controls.enabled=!0,(this.context.input.getPointerDown(1)||this.context.input.getPointerDown(2)||this.context.input.mouseWheelChanged||this.context.input.getPointerPressed(0)&&((i=this.context.input.getPointerPositionDelta(0))!=null&&i.length())||0>.1)&&(this._inputs+=1),this._inputs>0&&this.allowInterrupt&&(this.enableRotate&&(this.autoRotate=!1),this._cameraLerpActive=!1,this._lookTargetLerpActive=!1),this._inputs=0,this.autoTarget&&this._didSetTarget++===0){const r=se.getComponent(this.gameObject,Qi);if(r&&!this.setLookTargetFromConstraint()){this.debugLog&&console.log("NO TARGET");const a=Ft(r.cam).length(),l=new w(0,0,-a).applyMatrix4(r.cam.matrixWorld);this.setLookTargetPosition(l,!0)}if(!this.setLookTargetFromConstraint()){const o=new Ml;o.screenPoint=new ee(0,0),o.lineThreshold=.1;const a=this.context.physics.raycast(o);a.length>0&&this.setLookTargetPosition(a[0].point,!0),_w&&console.log("OrbitControls hits",...a)}}let t=this.middleClickToFocus&&this.context.input.getPointerClicked(1);if(t||(t=this.doubleClickToFocus&&this.context.input.getPointerDoubleClicked(0)&&this.context.time.time-this._enableTime>.3),t&&this.setTargetFromRaycast(),this._lookTargetLerpActive||this._cameraLerpActive){if(this._cameraLerpActive&&this._cameraObject)if(this._cameraLerp01+=this.context.time.deltaTime/this._cameraLerpDuration,this._cameraLerp01>=1)this._cameraObject.position.copy(this._cameraEndPosition),this._cameraLerpActive=!1,this.dispatchEvent(new W0(this,"camera"));else{const r=it.easeInOutCubic(this._cameraLerp01);this._cameraObject.position.lerpVectors(this._cameraStartPosition,this._cameraEndPosition,r)}if(this._lookTargetLerpActive)if(this._lookTargetLerp01+=this.context.time.deltaTime/this._lookTargetLerpDuration,this._lookTargetLerp01>=1)this._controls.target.copy(this._lookTargetEndPosition),this._lookTargetLerpActive=!1,this.dispatchEvent(new W0(this,"lookat"));else{const r=it.easeInOutCubic(this._lookTargetLerp01);this._controls.target.lerpVectors(this._lookTargetStartPosition,this._lookTargetEndPosition,r)}}if(this._controls){if(this.debugLog&&(this._controls.domElement=this.context.renderer.domElement),this._controls.enabled=!this._shouldDisable&&this._camera===this.context.mainCameraComponent&&!this.context.isInXR,this._controls.keys=this.enableKeys?MI:zfe,this._controls.autoRotate=this.autoRotate,this._controls.autoRotateSpeed=this.autoRotateSpeed,this._controls.enableZoom=this.enableZoom,this._controls.zoomSpeed=this.zoomSpeed,this._controls.zoomToCursor=this.zoomToCursor,this._controls.enableDamping=this.enableDamping,this._controls.dampingFactor=this.dampingFactor,this._controls.enablePan=this.enablePan,this._controls.enableRotate=this.enableRotate,this._controls.minAzimuthAngle=this.minAzimuthAngle,this._controls.maxAzimuthAngle=this.maxAzimuthAngle,this._controls.minPolarAngle=this.minPolarAngle,this._controls.maxPolarAngle=this.maxPolarAngle,typeof bw=="number"||bw===!0){this._controls.enableDamping=!0;const r=typeof bw=="number"?bw:.99;this._controls.dampingFactor=Math.max(.001,1-Math.min(1,r))}this.allowInterrupt||(this._lookTargetLerpActive&&(this._controls.enablePan=!1),this._cameraLerpActive&&(this._controls.enableRotate=!1,this._controls.autoRotate=!1),(this._lookTargetLerpActive||this._cameraLerpActive)&&(this._controls.enableZoom=!1)),this.context.isInXR||(!vw&&((n=this.lookAtConstraint)!=null&&n.locked)&&this.setLookTargetFromConstraint(0,this.lookAtConstraint01),this._controls.update(),EI&&_t.DrawWireSphere(this._controls.target,.1,65280))}}setCameraAndLookTarget(t){if(!t||!(t instanceof Ae))return;const i=Ft(t),n=OD(t);this.setTargetFromRaycast(new Eo(i,n)),this.setCameraTargetPosition(i)}setCameraTargetPosition(t,i=!1){var n,r;t&&(t instanceof Ae&&(t=Ft(t)),this._cameraEndPosition||(this._cameraEndPosition=new w),this._cameraEndPosition.copy(t),i===!0?(this._cameraLerpActive=!1,(n=this.controllerObject)==null||n.position.copy(this._cameraEndPosition)):this._cameraObject&&(this._cameraLerpActive=!0,this._cameraLerp01=0,this._cameraStartPosition.copy((r=this._cameraObject)==null?void 0:r.position),typeof i=="number"?this._cameraLerpDuration=i:this._cameraLerpDuration=this.targetLerpDuration))}get cameraLerpActive(){return this._cameraLerpActive}stopCameraLerp(){this._cameraLerpActive=!1}setLookTargetPosition(t=null,i=!1){this._controls&&t&&(t instanceof Ae&&(t=Ft(t)),this._lookTargetEndPosition.copy(t),EI&&(console.warn("OrbitControls: setLookTargetPosition",t,i),_t.DrawWireSphere(this._lookTargetEndPosition,.2,16711680,2)),i===!0?this._controls.target.copy(this._lookTargetEndPosition):(this._lookTargetLerpActive=!0,this._lookTargetLerp01=0,this._lookTargetStartPosition.copy(this._controls.target),typeof i=="number"?this._lookTargetLerpDuration=i:this._lookTargetLerpDuration=this.targetLerpDuration))}get lookTargetLerpActive(){return this._lookTargetLerpActive}stopLookTargetLerp(){this._lookTargetLerpActive=!1}setLookTargetFromConstraint(t=0,i=1){var r;if(!this._controls)return!1;const n=(r=this.lookAtConstraint)==null?void 0:r.sources;if(n&&n.length>0){const o=n[t];if(o)return o.getWorldPosition(this._lookTargetEndPosition),this.lerpLookTarget(this._lookTargetEndPosition,i),!0}return!1}lerpTarget(t,i){return this.lerpLookTarget(t,i)}lerpLookTarget(t,i){this._controls&&(i>=1?this._controls.target.copy(t):this._controls.target.lerp(t,i))}setTargetFromRaycast(t){if(!this.controls)return;const i=t?this.context.physics.raycastFromRay(t):this.context.physics.raycast();for(const n of i)if(n.distance>0&&se.isActiveInHierarchy(n.object)){const r=VO(n.object);if(r){const o=r.canvas;if(o!=null&&o.screenspace)break}this.setLookTargetPosition(n.point);break}}fitCamera(t,i={fitOffset:void 0,immediate:!1}){if(this.context.isInXR)return;const{immediate:n=!1,centerCamera:r}=i;let{fitOffset:o}=i;o==null&&(o=1.1);const a=this._cameraObject,l=this._controls;if(t!=null&&t.length||(t=this.context.scene.children),t.length<=0){console.warn("No objects to fit camera to...");return}if(!a||!l){console.warn("No camera or controls found to fit camera to objects...");return}const c=new w,h=new w,u=cd(t);a.updateMatrixWorld(),a.updateProjectionMatrix(),u.getCenter(h);const f=new w;if(u.getSize(f),u.applyMatrix4(a.matrixWorldInverse),u.getSize(c),u.setFromCenterAndSize(h,c),Number.isNaN(c.x)||Number.isNaN(c.y)||Number.isNaN(c.z)){console.warn("Camera fit size resultet in NaN",a,u,[...t]);return}if(c.length()<=1e-10){_w&&console.warn("Camera fit size is zero",u,[...t]);return}const p=a.fov,m=2*Math.atan(Math.tan(p*Math.PI/360/2)*a.aspect)/Math.PI*360,y=c.y/(2*Math.atan(Math.PI*p/360)),g=c.x/(2*Math.atan(Math.PI*m/360)),A=o*Math.max(y,g)+c.z/2;_w&&console.log("Fit camera to objects",y,g,"distance",A),l.maxDistance=A*10,l.minDistance=A*.01;const _=.05,v=h.clone();v.y-=c.y*_,this.setLookTargetPosition(v,n),this.autoTarget=!1;const b=Math.max(f.x,f.y,f.z);a.near=A/100,a.far=b+A*10,a.updateMatrixWorld(),a.updateProjectionMatrix();const S=Ft(a),E=h.clone();if(E.sub(S),r==="y"&&(E.y=0),E.normalize(),E.multiplyScalar(A),r==="y"&&(E.y+=-_*4*c.y),a.parent){const M=a.parent.worldToLocal(h.clone().sub(E));this.setCameraTargetPosition(M,n)}else console.error(`Can not fit camera ${a.name} because it has no parent`);if(_w){const M=new tD(u);this.context.scene.add(M),FD(M,S_(a)),setTimeout(()=>{this.context.scene.remove(M)},1e4),this._haveAttachedKeyboardEvents||(this._haveAttachedKeyboardEvents=!0,document.body.addEventListener("keydown",T=>{T.code==="KeyF"&&this.fitCamera(t,{fitOffset:o,immediate:n})}))}l.update()}}yn([x()],bi.prototype,"autoTarget",2);yn([x()],bi.prototype,"autoFit",2);yn([x()],bi.prototype,"enableRotate",2);yn([x()],bi.prototype,"autoRotate",2);yn([x()],bi.prototype,"autoRotateSpeed",2);yn([x()],bi.prototype,"minAzimuthAngle",2);yn([x()],bi.prototype,"maxAzimuthAngle",2);yn([x()],bi.prototype,"minPolarAngle",2);yn([x()],bi.prototype,"maxPolarAngle",2);yn([x()],bi.prototype,"enableKeys",2);yn([x()],bi.prototype,"enableDamping",2);yn([x()],bi.prototype,"dampingFactor",2);yn([x()],bi.prototype,"enableZoom",2);yn([x()],bi.prototype,"minZoom",2);yn([x()],bi.prototype,"maxZoom",2);yn([x()],bi.prototype,"zoomSpeed",2);yn([x()],bi.prototype,"enablePan",2);yn([x(Up)],bi.prototype,"lookAtConstraint",2);yn([x()],bi.prototype,"lookAtConstraint01",2);yn([x()],bi.prototype,"allowInterrupt",2);yn([x()],bi.prototype,"middleClickToFocus",2);yn([x()],bi.prototype,"doubleClickToFocus",2);yn([x()],bi.prototype,"clickBackgroundToFitScene",2);yn([x()],bi.prototype,"targetLerpDuration",2);var Gfe=Object.defineProperty,Hfe=Object.getOwnPropertyDescriptor,Mo=(s,e,t,i)=>{for(var n=i>1?void 0:i?Hfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Gfe(e,t,n),n},nd=(s=>(s[s.Skybox=1]="Skybox",s[s.SolidColor=2]="SolidColor",s[s.Uninitialized=4]="Uninitialized",s))(nd||{});const ch=ie("debugcam"),Cz=ie("debugscreenpointtoray");var qw;const Cv=(qw=class extends Ie{constructor(){super(...arguments);d(this,"_nearClipPlane",.1);d(this,"_farClipPlane",1e3);d(this,"orthographic",!1);d(this,"orthographicSize",5);d(this,"ARBackgroundAlpha",0);d(this,"_cullingMask",4294967295);d(this,"_backgroundBlurriness",0);d(this,"_backgroundIntensity",1);d(this,"_environmentIntensity");d(this,"_targetTexture",null);d(this,"_backgroundColor");d(this,"_fov");d(this,"_cam",null);d(this,"_clearFlags",2);d(this,"_skybox");d(this,"_frustum");d(this,"_projScreenMatrix",new ye)}get isCamera(){return!0}get aspect(){return this._cam instanceof Gt?this._cam.aspect:this.context.domWidth/this.context.domHeight}set aspect(e){this._cam instanceof Gt&&this._cam.aspect!==e&&(this._cam.aspect=e,this._cam.updateProjectionMatrix())}get fieldOfView(){return this._cam instanceof Gt?this._cam.fov:this._fov}set fieldOfView(e){const t=this.fieldOfView!=e;if(this._fov=e,t&&this._cam&&this._cam instanceof Gt){if(this._fov===void 0){console.warn("Can not set undefined fov on PerspectiveCamera");return}this._cam.fov=this._fov,this._cam.updateProjectionMatrix()}}get nearClipPlane(){return this._nearClipPlane}set nearClipPlane(e){const t=this._nearClipPlane!=e;this._nearClipPlane=e,this._cam&&t&&(this._cam.near=e,this._cam.updateProjectionMatrix())}get farClipPlane(){return this._farClipPlane}set farClipPlane(e){const t=this._farClipPlane!=e;this._farClipPlane=e,this._cam&&t&&(this._cam.far=e,this._cam.updateProjectionMatrix())}get clearFlags(){return this._clearFlags}set clearFlags(e){e!==this._clearFlags&&(this._clearFlags=e,this.applyClearFlagsIfIsActiveCamera())}set cullingMask(e){this._cullingMask=e,this._cam&&(this._cam.layers.mask=e)}get cullingMask(){return this._cam?this._cam.layers.mask:this._cullingMask}set cullingLayer(e){this.cullingMask=(1<<e|0)>>>0}set backgroundBlurriness(e){e!==this._backgroundBlurriness&&(e===void 0?this._backgroundBlurriness=void 0:this._backgroundBlurriness=Math.min(Math.max(e,0),1),this.applyClearFlagsIfIsActiveCamera())}get backgroundBlurriness(){return this._backgroundBlurriness}set backgroundIntensity(e){e!==this._backgroundIntensity&&(e===void 0?this._backgroundIntensity=void 0:this._backgroundIntensity=Math.min(Math.max(e,0),10),this.applyClearFlagsIfIsActiveCamera())}get backgroundIntensity(){return this._backgroundIntensity}set environmentIntensity(e){this._environmentIntensity=e}get environmentIntensity(){return this._environmentIntensity}get backgroundColor(){return this._backgroundColor??null}set backgroundColor(e){if(e){if(this._backgroundColor)this._backgroundColor.copy(e);else{if(!e.clone)return;this._backgroundColor=e.clone()}e.alpha===void 0&&(this._backgroundColor.alpha=1),this.applyClearFlagsIfIsActiveCamera()}}set targetTexture(e){this._targetTexture=e}get targetTexture(){return this._targetTexture}get cam(){return this.activeAndEnabled&&this.buildCamera(),this._cam}screenPointToRay(e,t,i){const n=this.cam,r=Cv._origin;r.set(e,t,-1),this.context.input.convertScreenspaceToRaycastSpace(r),Cz&&console.log("screenPointToRay",e.toFixed(2),t.toFixed(2),"now:",r.x.toFixed(2),r.y.toFixed(2),"isInXR:"+this.context.isInXR),r.z=-1,r.unproject(n);const o=Cv._direction.set(r.x,r.y,r.z),a=Ft(n);return o.sub(a),o.normalize(),i?(i.set(a,o),i):new Eo(a.clone(),o.clone())}getFrustum(){return this._frustum||(this._frustum=new dp,this.updateFrustum()),this._frustum}updateFrustum(){this._frustum||(this._frustum=new dp),this._frustum.setFromProjectionMatrix(this.getProjectionScreenMatrix(this._projScreenMatrix,!0),this.context.renderer.coordinateSystem)}getProjectionScreenMatrix(e,t){return t&&this._projScreenMatrix.multiplyMatrices(this.cam.projectionMatrix,this.cam.matrixWorldInverse),e===this._projScreenMatrix?e:e.copy(this._projScreenMatrix)}awake(){Cz&&window.addEventListener("pointerdown",e=>{const t=e.clientX,i=e.clientY;console.log("touch",t.toFixed(2),i.toFixed(2));const n=this.screenPointToRay(t,i),r="#"+Math.floor(Math.random()*16777215).toString(16);_t.DrawRay(n.origin,n.direction,r,10)})}onEnable(){ch&&console.log(`Camera enabled: "${this.name}". ClearFlags=${nd[this._clearFlags]}`,this),this.buildCamera(),(this.tag=="MainCamera"||!this.context.mainCameraComponent)&&(this.context.setCurrentCamera(this),Qfe(this)),this.applyClearFlagsIfIsActiveCamera({applySkybox:!0})}onDisable(){this.context.removeCamera(this)}onBeforeRender(){if(this._cam&&(this._frustum&&this.updateFrustum(),this._clearFlags===2&&this.applyClearFlagsIfIsActiveCamera(),this._targetTexture)){this.context.isManagedExternally&&(this._warnedAboutExternalRenderer||(this._warnedAboutExternalRenderer=!0,console.warn("Rendering with external renderer is not supported yet. This may not work or throw errors. Please remove the the target texture from your camera: "+this.name,this.targetTexture))),this.context.composer;const e=this.context.renderer;if(e){const t=this.context.mainCameraComponent;this.applyClearFlags(),this._targetTexture.render(this.context.scene,this._cam,e),t==null||t.applyClearFlags()}}}buildCamera(){if(this._cam)return;const e=this.gameObject.isCamera;let t=null;if(e?(t=this.gameObject,t==null||t.layers.enableAll(),t instanceof Gt&&(this._fov=t.fov)):t=this.gameObject.children[0],t&&t.isCamera)t instanceof Gt&&(this._fov&&(t.fov=this._fov),t.near=this._nearClipPlane,t.far=this._farClipPlane,t.updateProjectionMatrix());else if(!this.orthographic)t=new Gt(this.fieldOfView,window.innerWidth/window.innerHeight,this._nearClipPlane,this._farClipPlane),this.fieldOfView&&(t.fov=this.fieldOfView),this.gameObject.add(t);else{const i=this.orthographicSize*100;t=new Cc(window.innerWidth/-i,window.innerWidth/i,window.innerHeight/i,window.innerHeight/-i,this._nearClipPlane,this._farClipPlane),this.gameObject.add(t)}this._cam=t,this._cam.layers.mask=this._cullingMask,this.tag=="MainCamera"&&this.context.setCurrentCamera(this)}applyClearFlagsIfIsActiveCamera(e){this.context.mainCameraComponent===this&&this.applyClearFlags(e)}applyClearFlags(e){if(!this._cam){ch&&console.log("Camera does not exist (apply clear flags)");return}if(this.fieldOfView=this._fov,ch){const t=`Camera "${this.name}" clear flags: ${nd[this._clearFlags]}`;console.debug(t)}switch(this._clearFlags){case 1:if(Cv.backgroundShouldBeTransparent(this.context)&&(!this.ARBackgroundAlpha||this.ARBackgroundAlpha<.001)){this.context.scene.background=null,this.context.renderer.setClearColor(0,0);return}(!this.scene.background||!this._skybox||(e==null?void 0:e.applySkybox)===!0)&&this.applySceneSkybox(),this._backgroundBlurriness!==void 0?this.context.scene.backgroundBlurriness=this._backgroundBlurriness:ch&&console.warn(`Camera "${this.name}" has no background blurriness`),this._backgroundIntensity!==void 0?this.context.scene.backgroundIntensity=this._backgroundIntensity:ch&&console.warn(`Camera "${this.name}" has no background intensity`);break;case 2:if(this._backgroundColor){let t=this._backgroundColor.alpha;Cv.backgroundShouldBeTransparent(this.context)&&(t=this.ARBackgroundAlpha??0),this.context.scene.background=null,this.context.renderer.setClearColor(this._backgroundColor,t)}else ch&&console.warn(`Camera "${this.name}" has no background color`,this);break;case 4:this.context.scene.background=null,this.context.renderer.setClearColor(0,0);break}}applySceneSkybox(){this._skybox||(this._skybox=new Vfe(this)),this._skybox.apply()}static backgroundShouldBeTransparent(e){var r,o,a,l;const t=(r=e.renderer.xr)==null?void 0:r.getSession();if(!t)return!1;if(typeof t._transparent=="boolean")return t._transparent;const i=t.environmentBlendMode;ch&&pn("Environment blend mode: "+i+" on "+navigator.userAgent);let n=i==="additive"||i==="alpha-blend";return e.isInAR&&i==="opaque"&&((o=navigator.userAgent)!=null&&o.includes("OculusBrowser")||(a=navigator.userAgent)!=null&&a.includes("Mozilla")&&((l=navigator.userAgent)!=null&&l.includes("Mobile WebXRViewer/v2")))&&(n=!0),t._transparent=n,n}},d(qw,"_origin",new w),d(qw,"_direction",new w),qw);let Qi=Cv;Mo([x()],Qi.prototype,"aspect",1);Mo([x()],Qi.prototype,"fieldOfView",1);Mo([x()],Qi.prototype,"nearClipPlane",1);Mo([x()],Qi.prototype,"farClipPlane",1);Mo([x()],Qi.prototype,"clearFlags",1);Mo([x()],Qi.prototype,"orthographic",2);Mo([x()],Qi.prototype,"orthographicSize",2);Mo([x()],Qi.prototype,"ARBackgroundAlpha",2);Mo([x()],Qi.prototype,"cullingMask",1);Mo([x()],Qi.prototype,"backgroundBlurriness",1);Mo([x()],Qi.prototype,"backgroundIntensity",1);Mo([x()],Qi.prototype,"environmentIntensity",1);Mo([x(Ei)],Qi.prototype,"backgroundColor",1);Mo([x(id)],Qi.prototype,"targetTexture",1);class Vfe{constructor(e){d(this,"_camera");d(this,"_skybox");this._camera=e}get context(){var e;return(e=this._camera)==null?void 0:e.context}apply(){this._skybox=this.context.lightmaps.tryGetSkybox(this._camera.sourceId),this._skybox?this.context.scene.background!==this._skybox&&(ch&&console.log(`Camera "${this._camera.name}" set skybox`,this._camera,this._skybox),this._skybox.mapping=bo,this.context.scene.background=this._skybox):(this._did_log_failed_to_find_skybox||(this._did_log_failed_to_find_skybox=!0,console.warn(`Camera "${this._camera.name}" failed to load/find skybox texture`,this._camera.sourceId,this.context.lightmaps,"Current background: ",this.context.scene.background)),(ch||ct())&&Ni(`Camera "${this._camera.name}" has no skybox texture`))}}function Qfe(s){ie("freecam")&&s.context.mainCameraComponent===s&&se.getOrAddComponent(s.gameObject,bi)}class sd extends Ie{constructor(){super(...arguments);d(this,"_listener",null);d(this,"onInteraction",()=>{this.destroyed||this.listener==null||this.addListenerIfItExists()})}get listener(){return this._listener==null&&(this._listener=new aV),this._listener}onEnable(){yc.registerWaitForInteraction(this.onInteraction),this.addListenerIfItExists()}onDisable(){yc.unregisterWaitForInteraction(this.onInteraction),this.removeListenerIfItExists()}addListenerIfItExists(){const t=this._listener;if(!t||t!=null&&t.parent)return;const i=this.context.mainCameraComponent||se.getComponentInParent(this.gameObject,Qi);i!=null&&i.cam?i.cam.add(t):this.gameObject.add(t),t.filter?(t.gain.connect(t.filter),t.filter.connect(t.context.destination)):t.gain.connect(t.context.destination)}removeListenerIfItExists(){const t=this._listener;t&&(t.removeFromParent(),t.filter&&t.filter.disconnect(),t.gain&&t.gain.disconnect())}}class jfe extends Dn{constructor(e,t=1,i=16,n=2){const r=new xt,o=i+n*2,a=new Float32Array((o*3+3)*3);r.setAttribute("position",new ot(a,3));const l=new Zi({color:65280}),c=new Zi({color:16776960});super(r,[c,l]),this.audio=e,this.range=t,this.divisionsInnerAngle=i,this.divisionsOuterAngle=n,this.type="PositionalAudioHelper",this.update()}update(){const e=this.audio,t=this.range,i=this.divisionsInnerAngle,n=this.divisionsOuterAngle,r=di.degToRad(e.panner.coneInnerAngle),o=di.degToRad(e.panner.coneOuterAngle),a=r/2,l=o/2;let c=0,h=0,u,f;const p=this.geometry,m=p.attributes.position;p.clearGroups();function y(g,A,_,v){const b=(A-g)/_;for(m.setXYZ(c,0,0,0),h++,u=g;u<A;u+=b)f=c+h,m.setXYZ(f,Math.sin(u)*t,0,Math.cos(u)*t),m.setXYZ(f+1,Math.sin(Math.min(u+b,A))*t,0,Math.cos(Math.min(u+b,A))*t),m.setXYZ(f+2,0,0,0),h+=3;p.addGroup(c,h,v),c+=h,h=0}y(-l,-a,n,0),y(-a,a,i,1),y(a,l,n,0),m.needsUpdate=!0,r===o&&(this.material[0].visible=!1)}dispose(){this.geometry.dispose(),this.material[0].dispose(),this.material[1].dispose()}}var Wfe=Object.defineProperty,qfe=Object.getOwnPropertyDescriptor,Tc=(s,e,t,i)=>{for(var n=i>1?void 0:i?qfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Wfe(e,t,n),n};const br=ie("debugaudio"),Iu=class extends Ie{constructor(){super(...arguments);d(this,"clip","");d(this,"playOnAwake",!1);d(this,"preload",!1);d(this,"_spatialBlend",0);d(this,"_minDistance",1);d(this,"_maxDistance",100);d(this,"_volume",1);d(this,"rollOffMode",0);d(this,"playInBackground",!0);d(this,"_loop",!1);d(this,"sound",null);d(this,"helper",null);d(this,"wasPlaying",!1);d(this,"audioLoader",null);d(this,"shouldPlay",!1);d(this,"_lastClipStartedLoading",null);d(this,"_audioElement",null);d(this,"onVisibilityChanged",()=>{switch(document.visibilityState){case"hidden":(this.playInBackground===!1||ja())&&(this.wasPlaying=this.isPlaying,this.isPlaying&&this.pause());break;case"visible":br&&console.log("visible",this.enabled,this.playOnAwake,!this.isPlaying,Iu.userInteractionRegistered,this.wasPlaying),this.enabled&&this.playOnAwake&&!this.isPlaying&&Iu.userInteractionRegistered&&this.wasPlaying&&this.play();break}});d(this,"onApplicationMuteChanged",()=>{var e,t;this.context.application.muted?(e=this.sound)==null||e.setVolume(0):(t=this.sound)==null||t.setVolume(this.volume)});d(this,"createAudio",e=>{br&&console.log("AudioBuffer finished loading",e);const t=this.Sound;if(!t){br&&console.warn("Failed getting sound?",this.name);return}t.isPlaying&&t.stop(),e&&t.setBuffer(e),t.loop=this._loop,this.context.application.muted?t.setVolume(0):t.setVolume(this.volume),t.autoplay=this.shouldPlay&&Iu.userInteractionRegistered,this.applySpatialDistanceSettings(),t.isPlaying&&t.stop(),Iu.registerWaitForAllowAudio(this.__onAllowAudioCallback)});d(this,"__onAllowAudioCallback",()=>{this.shouldPlay&&this.play()});d(this,"_lastContextTime",0);d(this,"_hasEnded",!0);d(this,"_needUpdateSpatialDistanceSettings",!1)}static get userInteractionRegistered(){return yc.userInteractionRegistered}static registerWaitForAllowAudio(e){yc.registerWaitForAllowAudio(e)}get loop(){return this.sound&&(this._loop=this.sound.getLoop()),this._loop}set loop(e){this._loop=e,this.sound&&this.sound.setLoop(e)}get spatialBlend(){return this._spatialBlend}set spatialBlend(e){e!==this._spatialBlend&&(this._spatialBlend=e,this._needUpdateSpatialDistanceSettings=!0)}get minDistance(){return this._minDistance}set minDistance(e){this._minDistance!==e&&(this._minDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get maxDistance(){return this._maxDistance}set maxDistance(e){this._maxDistance!==e&&(this._maxDistance=e,this._needUpdateSpatialDistanceSettings=!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.sound&&!this.context.application.muted&&(br&&console.log(this.name,"audio set volume",e),this.sound.setVolume(e))}get Sound(){var e;if(!this.sound&&Iu.userInteractionRegistered){let t=se.getComponent(this.context.mainCamera,sd)??se.findObjectOfType(sd,this.context);!t&&this.context.mainCamera&&(t=se.addNewComponent(this.context.mainCamera,sd)),t!=null&&t.listener?(this.sound=new lV(t.listener),(e=this.gameObject)==null||e.add(this.sound)):br&&console.warn("No audio listener found in scene - can not play audio")}return this.sound}get ShouldPlay(){return this.shouldPlay}get audioContext(){var e;return(e=this.sound)==null?void 0:e.context}awake(){br&&console.log(this),this.audioLoader=new $S,this.playOnAwake&&(this.shouldPlay=!0),this.preload&&typeof this.clip=="string"&&this.audioLoader.load(this.clip,this.createAudio,()=>{},console.error)}onEnable(){this.sound&&this.gameObject.add(this.sound),Iu.userInteractionRegistered?this.playOnAwake&&this.context.application.isVisible&&this.play():Iu.registerWaitForAllowAudio(()=>{this.enabled&&!this.destroyed&&this.shouldPlay&&this.onNewClip(this.clip)}),globalThis.addEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.addEventListener(bC.MuteChanged,this.onApplicationMuteChanged)}onDisable(){globalThis.removeEventListener("visibilitychange",this.onVisibilityChanged),this.context.application.removeEventListener(bC.MuteChanged,this.onApplicationMuteChanged),this.pause()}applySpatialDistanceSettings(){const e=this.sound;if(!e)return;this._needUpdateSpatialDistanceSettings=!1;const t=it.lerp(10*this._maxDistance/Math.max(1e-4,this.spatialBlend),this._minDistance,this.spatialBlend);switch(br&&console.log(this.name,this._minDistance,this._maxDistance,this.spatialBlend,"Ref distance="+t),e.setRefDistance(t),e.setMaxDistance(Math.max(.01,this._maxDistance)),this.rollOffMode){case 0:e.setDistanceModel("exponential");break;case 1:e.setDistanceModel("linear");break;case 2:console.warn("Custom rolloff for AudioSource is not supported: "+this.name);break}this.spatialBlend>0?br&&!this.helper&&(this.helper=new jfe(e,e.getRefDistance()),e.add(this.helper)):this.helper&&this.helper.parent&&this.helper.removeFromParent()}async onNewClip(e){if(e&&(this.clip=e),typeof e=="string")if(br&&console.log(e),e.endsWith(".mp3")||e.endsWith(".wav")){if(this.audioLoader||(this.audioLoader=new $S),this.shouldPlay=!0,this._lastClipStartedLoading===e){br&&console.log("Is currently loading:",this._lastClipStartedLoading,this);return}this._lastClipStartedLoading=e,br&&console.log("load audio",e);const t=await this.audioLoader.loadAsync(e).catch(console.error);this._lastClipStartedLoading=null,t&&this.createAudio(t)}else console.warn("Unsupported audio clip type",e);else this.shouldPlay=!0,this.createAudio()}play(e=void 0){var i,n,r;!e&&this.clip&&(e=this.clip),e!==void 0&&typeof e!="string"&&!(e instanceof MediaStream)&&(ct()&&console.warn("Called play on AudioSource with unknown argument type:",e+`
5671
- Using the assigned clip instead:`,this.clip),e=this.clip);let t=!this.sound||e&&e!==this.clip;if(typeof e=="string"&&!this.audioLoader&&(t=!0),(e instanceof MediaStream||typeof e=="string")&&(this.clip=e),t){this.shouldPlay=!0,this.onNewClip(e);return}if(this.shouldPlay=!0,this._hasEnded=!1,br&&console.log("play",(i=this.sound)==null?void 0:i.getVolume(),this.sound),this.sound&&!this.sound.isPlaying){const o=this.context.application.muted;o&&this.sound.setVolume(0),(n=this.gameObject)==null||n.add(this.sound),this.clip instanceof MediaStream?(this.sound.setMediaStreamSource(this.clip),this._audioElement||(this._audioElement=document.createElement("audio"),this._audioElement.style.display="none"),this._audioElement.parentNode||(r=this.context.domElement.shadowRoot)==null||r.append(this._audioElement),this._audioElement.srcObject=this.clip,this._audioElement.autoplay=!1):(this._audioElement&&this._audioElement.remove(),this.sound.play(o?.1:0))}}pause(){var e,t;br&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=(e=this.sound)==null?void 0:e.context.currentTime,this.sound.pause()),(t=this._audioElement)==null||t.remove()}stop(){var e,t;br&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=(e=this.sound)==null?void 0:e.context.currentTime,br&&console.log(this._lastContextTime),this.sound.stop()),(t=this._audioElement)==null||t.remove()}get isPlaying(){var e;return((e=this.sound)==null?void 0:e.isPlaying)??!1}set isPlaying(e){}get time(){var e,t;return(e=this.sound)!=null&&e.source?((t=this.sound.source)==null?void 0:t.context.currentTime)-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}update(){this.helper&&(this.isPlaying&&this.helper.update(),this.helper.visible=this.isPlaying),this._needUpdateSpatialDistanceSettings&&this.applySpatialDistanceSettings(),this.sound&&!this.sound.isPlaying&&this.shouldPlay&&!this._hasEnded&&(this._hasEnded=!0,br&&console.log("Audio clip ended",this.clip),this.dispatchEvent(new CustomEvent("ended",{detail:this})))}};let Un=Iu;Tc([x(URL)],Un.prototype,"clip",2);Tc([x()],Un.prototype,"playOnAwake",2);Tc([x()],Un.prototype,"preload",2);Tc([x()],Un.prototype,"loop",1);Tc([x()],Un.prototype,"spatialBlend",1);Tc([x()],Un.prototype,"minDistance",1);Tc([x()],Un.prototype,"maxDistance",1);Tc([x()],Un.prototype,"volume",1);Tc([x()],Un.prototype,"rollOffMode",2);Tc([x()],Un.prototype,"playInBackground",2);var Xfe=Object.defineProperty,Yfe=Object.getOwnPropertyDescriptor,yE=(s,e,t,i)=>{for(var n=i>1?void 0:i?Yfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Xfe(e,t,n),n};const Kfe=ie("debugsignals");class V_{constructor(){d(this,"guid")}}yE([x()],V_.prototype,"guid",2);class Hy{constructor(){d(this,"signal");d(this,"reaction")}}yE([x(V_)],Hy.prototype,"signal",2);yE([x(Xn)],Hy.prototype,"reaction",2);var dR;const sh=(dR=class extends Ie{constructor(){super(...arguments);d(this,"events")}static invoke(e){if(sh.receivers[e]){const t=sh.receivers[e];if(!t)return;for(const i of t)i.invoke(e)}}awake(){Kfe&&console.log("SignalReceiver awake",this)}onEnable(){if(this.events)for(const e of this.events)sh.receivers[e.signal.guid]||(sh.receivers[e.signal.guid]=[]),sh.receivers[e.signal.guid].push(this)}onDisable(){if(this.events){for(const e of this.events)if(sh.receivers[e.signal.guid]){const t=sh.receivers[e.signal.guid].indexOf(this);t>=0&&sh.receivers[e.signal.guid].splice(t,1)}}}invoke(e){if(!this.events||!Array.isArray(this.events))return;const t=typeof e=="object"?e.guid:e;for(const i of this.events)if(i.signal.guid===t)try{if(i.reaction){if(!i.reaction.invoke){console.warn("Missing invoke - possibly a serialization error",i,this);continue}}else{console.warn("Missing reaction for signal",i,this);continue}i.reaction.invoke()}catch(n){console.error(n)}}},d(dR,"receivers",{}),dR);let Vy=sh;yE([x(Hy)],Vy.prototype,"events",2);var zo=(s=>(s.Activation="ActivationTrack",s.Animation="AnimationTrack",s.Audio="AudioTrack",s.Control="ControlTrack",s.Marker="MarkerTrack",s.Signal="SignalTrack",s))(zo||{}),Yl=(s=>(s[s.None=0]="None",s[s.Hold=1]="Hold",s[s.Loop=2]="Loop",s[s.PingPong=3]="PingPong",s[s.Continue=4]="Continue",s))(Yl||{}),QO=(s=>(s.Signal="SignalEmitter",s))(QO||{});const uc=ie("debugtimeline");class Q_{constructor(){d(this,"director");d(this,"track")}get muted(){return this.track.muted}set muted(e){var t;e!==this.track.muted&&(this.track.muted=e,(t=this.onMuteChanged)==null||t.call(this))}*forEachClip(e=!1){var t;if((t=this.track)!=null&&t.clips)if(e)for(let i=this.track.clips.length-1;i>=0;i--)yield this.track.clips[i];else for(const i of this.track.clips)yield i}getClipTime(e,t){return t.clipIn+(e-t.start)*t.timeScale}getClipTimeNormalized(e,t){return(e-t.start)/t.duration}evaluateWeight(e,t,i,n=!0){if(t<0||t>=i.length)return 0;const r=i[t];if(n||e>=r.start&&e<=r.end){let o=1;const a=!1;if(r.easeInDuration>0){const l=Math.min((e-r.start)/r.easeInDuration,1);o*=l}if(r.easeOutDuration>0&&!a){const l=Math.min((r.end-e)/r.easeOutDuration,1);o*=l}return o}return 0}}class Jfe{constructor(e){d(this,"clip");d(this,"rootPositionOffset");d(this,"rootQuaternionOffset");d(this,"rootStartPosition");d(this,"rootEndPosition");d(this,"rootStartQuaternion");d(this,"rootEndQuaternion");const t=e.getClip();this.clip=t;const i=e.getRoot(),n=i.name+".position",r=i.name+".quaternion";uc&&console.log(t.name,t.tracks,n);for(const o of t.tracks)if(!(o.times.length<=0)){if(o.name.endsWith(n))this.rootStartPosition=new w().fromArray(o.values,0),this.rootEndPosition=new w().fromArray(o.values,o.values.length-3),this.rootPositionOffset=this.rootEndPosition.clone().sub(this.rootStartPosition),uc&&console.log(this.rootPositionOffset);else if(o.name.endsWith(r)&&(this.rootStartQuaternion=new Ce().fromArray(o.values,0),this.rootEndQuaternion=new Ce().fromArray(o.values,o.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),uc)){const a=new mi().setFromQuaternion(this.rootQuaternionOffset);console.log("ROT",a)}}}get hasOffsets(){return this.rootPositionOffset!==void 0||this.rootQuaternionOffset!==void 0}}class AE extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"trackOffset");d(this,"target");d(this,"mixer");d(this,"clips",[]);d(this,"actions",[]);d(this,"_actionOffsets",[]);d(this,"_didBind",!1);d(this,"_animator",null);d(this,"_useclipOffsets",!0);d(this,"_totalOffsetPosition",new w);d(this,"_totalOffsetRotation",new Ce);d(this,"_totalOffsetPosition2",new w);d(this,"_totalOffsetRotation2",new Ce);d(this,"_summedPos",new w);d(this,"_tempPos",new w);d(this,"_summedRot",new Ce);d(this,"_tempRot",new Ce);d(this,"_clipRotQuat",new Ce)}onDisable(){var t;(t=this.mixer)==null||t.stopAllAction()}onDestroy(){this.director.context.animations.unregisterAnimationMixer(this.mixer)}onStateChanged(){this._animator&&Ez(this._animator.gameObject,this,this.director.isPlaying)}createHooks(t,i){var h,u;if(((h=i.tracks)==null?void 0:h.length)<=0){console.warn("No tracks in AnimationClip",i);return}const n=i.tracks[0].name.split("."),r=n[n.length-2],o=r+".position",a=r+".quaternion";let l=!1,c=!1;for(const f of i.tracks)f.name.endsWith(o)?(l=!0,this.createPositionInterpolant(i,t,f)):f.name.endsWith(a)&&(c=!0,this.createRotationInterpolant(i,t,f));if(!l||!c){const f=(u=this.mixer)==null?void 0:u.getRoot(),p=i.tracks[0],m=p.name.lastIndexOf("."),y=p.name.substring(0,m),g=y.substring(y.lastIndexOf(".")+1),A=f.getObjectByName(g);if(A)if(l){if(!c){const _=i.tracks[0].name.substring(0,m)+".quaternion";uc&&console.warn("Create quaternion track",g,A);const v=A.quaternion,b=new Fa(_,[0,i.duration],[v.x,v.y,v.z,v.w,v.x,v.y,v.z,v.w]);i.tracks.push(b),this.createRotationInterpolant(i,t,b)}}else{const _=y+".position";uc&&console.warn("Create position track",g,A);const v=A.position,b=new bc(_,[0,i.duration],[v.x,v.y,v.z,v.x,v.y,v.z]);i.tracks.push(b),this.createPositionInterpolant(i,t,b)}}}bind(){if(!this._didBind){this._didBind=!0,uc&&console.log(this.models),this.mixer?this.target=this.mixer.getRoot():console.warn("No mixer was assigned to animation track");for(const t of this.actions){const i=new Jfe(t);this._actionOffsets.push(i)}this.target&&(this._animator=se.getComponent(this.target,or)??null,this._animator&&Ez(this._animator.gameObject,this,!0));for(const t of this.models){const i=t.asset,n=i.position,r=i.rotation;n&&n.x!==void 0&&(n.isVector3||(i.position=new w(n.x,n.y,n.z)),r.isQuaternion||(i.rotation=new Ce(r.x,r.y,r.z,r.w)))}this.ensureTrackOffsets()}}ensureTrackOffsets(){if(this.trackOffset){const t=this.trackOffset.position;t&&(t.isVector3||(this.trackOffset.position=new w(t.x,t.y,t.z)));const i=this.trackOffset.rotation;i&&(i.isQuaternion||(this.trackOffset.rotation=new Ce(i.x,i.y,i.z,i.w)))}}evaluate(t){var l,c,h,u,f,p,m;if(this.track.muted||!this.mixer)return;this.bind(),this._totalOffsetPosition.set(0,0,0),this._totalOffsetRotation.set(0,0,0,1),this._totalOffsetPosition2.set(0,0,0),this._totalOffsetRotation2.set(0,0,0,1);let i=0,n=0,r=!1,o=!1,a=0;for(let y=0;y<this.clips.length;y++){const g=this.models[y],A=this.actions[y],_=g.asset;A.weight=0;const v=t>=g.start&&t<=g.end,b=g.preExtrapolationMode,S=g.postExtrapolationMode,E=y<this.clips.length-1?this.models[y+1]:null;let M=v,T=!1;if(!M&&!r&&g.end<t&&S!==Yl.None?(!E||E.start>t)&&(M=!0,r=!0):y==0&&!M&&!o&&g.start>t&&b!==Yl.None&&(!E||E.start<t)&&(M=!0,T=!0,o=!0),M){let P=1;P*=this.evaluateWeight(t,y,this.models,M),P*=this.director.weight;let C=v;if(T)switch(b){case Yl.Hold:break;case Yl.Loop:t+=g.start,C=!0;break;default:t+=g.start,C=!0;break}let I=this.getClipTime(t,g),F=0;const U=_.duration;if(T&&b===Yl.Hold&&(I=0),C){if(_.loop)for(F+=Math.floor(I/(U+1e-6));I>U;)I-=U}else if(!v&&r)switch(S){case Yl.Hold:I=this.getClipTime(g.end,g);break;case Yl.Loop:I%=U;break;case Yl.PingPong:const D=Math.floor(I/U)%2!==0;I%=U,D&&(I=U-I);break}g.reversed===!0?A.time=A.getClip().duration-I:A.time=I,A.timeScale=0;const O=Math.max(0,P);if(A.weight=O,a+=O,A.clampWhenFinished=!1,A.isRunning()||A.play(),this._useclipOffsets){const Q=i==0?this._totalOffsetPosition:this._totalOffsetPosition2,D=i==0?this._totalOffsetRotation:this._totalOffsetRotation2;i<1&&(n=1-P),i+=1;const k=this._summedPos.set(0,0,0),z=this._tempPos.set(0,0,0),q=this._summedRot.identity(),X=this._tempRot.identity(),re=_.rotation;re&&(this._clipRotQuat.identity(),this._clipRotQuat.slerp(re,P));const le=this._actionOffsets[y];if(le.hasOffsets)for(let Me=0;Me<F;Me++)le.rootPositionOffset?z.copy(le.rootPositionOffset):z.set(0,0,0),z.applyQuaternion(q),this._clipRotQuat&&z.applyQuaternion(this._clipRotQuat),le.rootQuaternionOffset&&(X.copy(le.rootQuaternionOffset),q.multiply(X)),k.add(z);this._clipRotQuat&&D.multiply(this._clipRotQuat),D.multiply(q),_.position&&k.add(_.position),Q.add(k)}}}if(this._useclipOffsets&&(this._totalOffsetPosition.lerp(this._totalOffsetPosition2,n),this._totalOffsetRotation.slerp(this._totalOffsetRotation2,n)),this.__mixerError===void 0&&(uc||ct())&&((c=(l=this._animator)==null?void 0:l.runtimeAnimatorController)!=null&&c.mixer)&&this.mixer!==((u=(h=this._animator)==null?void 0:h.runtimeAnimatorController)==null?void 0:u.mixer)&&(this.__mixerError=!0,console.error("AnimationTrack mixer is not shared with the animator controller - this might result in the timeline to not animate properly. Please report a bug to the Needle Engine team!",this)),(f=this._animator)!=null&&f.runtimeAnimatorController){const y=Math.max(0,1-a);(m=(p=this._animator)==null?void 0:p.runtimeAnimatorController)==null||m.update(y)}else this.mixer.update(t)}createRotationInterpolant(t,i,n){var l;const r=n.createInterpolant.bind(n),o=new Ce;this.ensureTrackOffsets();const a=(l=this.trackOffset)==null?void 0:l.rotation;n.createInterpolant=()=>{const c=r(),h=c.evaluate.bind(c);return c.evaluate=u=>{var p;const f=h(u);if(o.set(f[0],f[1],f[2],f[3]),o.premultiply(this._totalOffsetRotation),a&&o.premultiply(a),this.director.animationCallbackReceivers)for(const m of this.director.animationCallbackReceivers)(p=m==null?void 0:m.onTimelineRotation)==null||p.call(m,this.director,this.target,u,o);return f[0]=o.x,f[1]=o.y,f[2]=o.z,f[3]=o.w,f},c}}createPositionInterpolant(t,i,n){var h,u;const r=n.createInterpolant.bind(n),o=new w;this.ensureTrackOffsets();const a=(h=this.trackOffset)==null?void 0:h.rotation,l=(u=this.trackOffset)==null?void 0:u.position;let c;n.createInterpolant=()=>{const f=r(),p=f.evaluate.bind(f);return f.evaluate=m=>{var g,A,_;const y=p(m);if(o.set(y[0],y[1],y[2]),i.removeStartOffset&&(c===void 0?(c=null,c=(A=(g=this._actionOffsets.find(v=>v.clip===t))==null?void 0:g.rootStartPosition)==null?void 0:A.clone()):c!=null&&c.isVector3&&o.sub(c)),o.applyQuaternion(this._totalOffsetRotation),o.add(this._totalOffsetPosition),a&&o.applyQuaternion(a),l&&(o.x-=l.x,o.y+=l.y,o.z+=l.z),this.director.animationCallbackReceivers)for(const v of this.director.animationCallbackReceivers)(_=v==null?void 0:v.onTimelinePosition)==null||_.call(v,this.director,this.target,m,o);return y[0]=o.x,y[1]=o.y,y[2]=o.z,y},f}}}const Zfe=ie("mutetimeline"),Ug=class extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"listener");d(this,"audio",[]);d(this,"audioContextTimeOffset",[]);d(this,"lastTime",0);d(this,"audioSource");d(this,"_audioLoader",null);d(this,"_playableDirectorResumed",!1)}getAudioFilePath(t){const i=this.director.sourceId;return bd(i,t)}onAllowAudioChanged(t){for(let i=0;i<this.models.length;i++){const n=this.models[i];this.audio[i].setVolume(t?n.asset.volume:0)}}addModel(t){const i=new K2(this.listener);this.audio.push(i);const n=t;n._didTriggerPlay=!1,this.models.push(n)}onDisable(){for(const t of this.audio)t.isPlaying&&t.stop();for(const t of this.models)t._didTriggerPlay=!1}onDestroy(){for(const t of this.audio)t.source&&(t==null||t.disconnect());this.audio.length=0}onMuteChanged(){if(this.muted)for(let t=0;t<this.audio.length;t++){const i=this.audio[t];i!=null&&i.isPlaying&&i.stop()}}stop(){for(let t=0;t<this.audio.length;t++){const i=this.audio[t];i!=null&&i.isPlaying&&i.stop()}for(const t of this.models)t._didTriggerPlay=!1}onPauseChanged(){for(let t=0;t<this.audio.length;t++){const i=this.audio[t];i!=null&&i.isPlaying&&i.stop()}this._playableDirectorResumed=this.director.isPlaying}evaluate(t){if(Zfe||this.track.muted||this.director.speed<0)return;const i=this.director.context.application.muted,n=this._playableDirectorResumed;this._playableDirectorResumed=!1;const r=i?.1:0;for(let o=0;o<this.models.length;o++){const a=this.models[o],l=this.audio[o],c=a.asset;if((!l||!l.buffer)&&this.isInTimeRange(a,t-1,t+1)&&this.handleAudioLoading(a,l),Un.userInteractionRegistered!==!1&&!(l===null||!l.buffer))if(l.playbackRate=this.director.context.time.timeScale*this.director.speed,l.loop=c.loop,t>=a.start&&t<=a.end&&t<this.director.duration){if(!l.isPlaying||!this.director.isPlaying)(n||!a._didTriggerPlay&&this.lastTime<t)&&(a.duration*a.timeScale>.3?l.offset=a.clipIn+(t-a.start)*a.timeScale:l.offset=0,uc&&console.log("Timeline Audio ("+this.track.name+") play with offset "+l.offset+" - "+a.asset.clip),l.play(r),a._didTriggerPlay=!0);else{const u=a.clipIn+(t-a.start)*a.timeScale,f=l.context.currentTime-l._startedAt+l.offset;Math.abs(u-f)>.3&&(l.offset=u,l.stop(),l.play(r))}let h=c.volume;if(this.track.volume!==void 0&&(h*=this.track.volume),i&&(h=0),a.easeInDuration>0){const u=Math.min((t-a.start)/a.easeInDuration,1);h*=u}if(a.easeOutDuration>0){const u=Math.min((a.end-t)/a.easeOutDuration,1);h*=u}l.setVolume(h*this.director.weight)}else a._didTriggerPlay=!1,this.director.isPlaying&&l.isPlaying&&l.stop()}this.lastTime=t}loadAudio(t,i=0,n=0){let r=null;const o=t-n,a=t+i;for(const l of this.models)if(this.isInTimeRange(l,o,a)){const c=this.audio[this.models.indexOf(l)],h=this.handleAudioLoading(l,c);h!==null&&(r===null&&(r=[]),r.push(h))}return r!==null?Promise.all(r):null}isInTimeRange(t,i,n){return i<=t.start&&n>=t.end||i>=t.start&&i<=t.end||n>=t.start&&n<=t.end}static dispose(){Ug._audioBuffers.clear()}handleAudioLoading(t,i){this._audioLoader||(this._audioLoader=new $S);const n=this.getAudioFilePath(t.asset.clip);if(Ug._audioBuffers.get(n)){const o=Ug._audioBuffers.get(n);return o.then(a=>{a&&i.setBuffer(a)}),o}uc&&console.warn("LOAD audio track",n,this.director.sourceId);const r=new Promise((o,a)=>{this._audioLoader.load(n,l=>{i.setBuffer(l),o(l)},void 0,l=>{console.error("Error loading audio",l),o(null)})});return Ug._audioBuffers.set(n,r),r}};let ip=Ug;d(ip,"_audioBuffers",new Map);class q0 extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"didTrigger",[]);d(this,"receivers",[])}evaluate(t){var n;if(this.track.muted)return;const i=this.director.context.time.deltaTime*1.5;for(let r=0;r<this.models.length;r++){const o=this.models[r],a=this.didTrigger[r],l=o.time-t;let c=!1;if(o.retroActive)c=l<=1e-6;else{const h=Math.abs(l);(h===0||h>=1e-5&&h<i)&&(c=!0)}if(c){if(!a)if(uc&&console.log("Trigger signal",t,o.time,o),this.didTrigger[r]=!0,((n=this.receivers)==null?void 0:n.length)<=0)Vy.invoke(o.asset);else for(const h of this.receivers)h&&h.invoke(o.asset)}else o.emitOnce||(this.didTrigger[r]=!1)}}}class vE extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"timelines",[]);d(this,"_previousActiveModel",null)}resolveSourceObjects(t){for(let i=this.models.length-1;i>=0;i--){const r=this.models[i].asset;if(!r.sourceObject||typeof r.sourceObject!="object"){console.log("no source object, removing model",i,r),this.models.splice(i,1);continue}else{const o=se.getComponent(r.sourceObject,fd);this.timelines.push(o),o&&r.updateDirector&&(o.playOnAwake=!1)}}}evaluate(t){var i;this._previousActiveModel=null;for(let n=0;n<this.models.length;n++){const r=this.models[n],o=r.asset;if(t>=r.start&&t<=r.end){this._previousActiveModel=r;const a=this.getClipTime(t,r);if(o.controlActivation){const l=o.sourceObject;l.visible=!0}if(o.updateDirector){const l=this.timelines[n];l&&(l.isPlaying&&l.pause(),l.time=a,l.evaluate())}}else{const a=(i=this._previousActiveModel)==null?void 0:i.asset;if(o.controlActivation){const l=o.sourceObject;(a==null?void 0:a.sourceObject)!==l&&(l.visible=!1)}}}}}var $fe=Object.defineProperty,epe=Object.getOwnPropertyDescriptor,wj=(s,e,t,i)=>{for(var n=i>1?void 0:i?epe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&$fe(e,t,n),n};const Zm=ie("debugtimeline");var fR;const RB=(fR=class extends Ie{constructor(){super(...arguments);d(this,"playableAsset");d(this,"playOnAwake");d(this,"extrapolationMode",1);d(this,"waitForAudio",!0);d(this,"_visibilityChangeEvt");d(this,"_clonedPlayableAsset",!1);d(this,"_speed",1);d(this,"_guidsMap");d(this,"_isPlaying",!1);d(this,"_internalUpdateRoutine");d(this,"_isPaused",!1);d(this,"_isStopping",!1);d(this,"_time",0);d(this,"_duration",0);d(this,"_weight",1);d(this,"_animationTracks",[]);d(this,"_audioTracks",[]);d(this,"_signalTracks",[]);d(this,"_controlTracks",[]);d(this,"_customTracks",[]);d(this,"_allTracks",[this._animationTracks,this._audioTracks,this._signalTracks,this._controlTracks,this._customTracks]);d(this,"animationCallbackReceivers",[])}static registerCreateTrack(e,t){this.createTrackFunctions[e]=t}get isPlaying(){return this._isPlaying}get isPaused(){return this._isPaused}get time(){return this._time}set time(e){typeof e=="number"&&!Number.isNaN(e)?this._time=e:(Zm||so())&&console.error("INVALID TIMELINE.TIME VALUE",e,this.name)}get duration(){return this._duration}set duration(e){this._duration=e}get weight(){return this._weight}set weight(e){this._weight=e}get speed(){return this._speed}set speed(e){this._speed=e}awake(){var e,t,i;Zm&&console.log(this,(e=this.playableAsset)==null?void 0:e.tracks),this.rebuildGraph(),this.isValid()||console.warn("PlayableDirector is not valid",this.playableAsset,(t=this.playableAsset)==null?void 0:t.tracks,Array.isArray((i=this.playableAsset)==null?void 0:i.tracks),this)}onEnable(){var e,t,i;for(const n of this._audioTracks)(e=n.onEnable)==null||e.call(n);for(const n of this._customTracks)(t=n.onEnable)==null||t.call(n);for(const n of this._animationTracks)(i=n.onEnable)==null||i.call(n);this.playOnAwake&&this.play(),this._visibilityChangeEvt||(this._visibilityChangeEvt=()=>{switch(document.visibilityState){case"hidden":this.setAudioTracksAllowPlaying(!1);break;case"visible":this.setAudioTracksAllowPlaying(!0);break}}),window.addEventListener("visibilitychange",this._visibilityChangeEvt)}onDisable(){var e,t,i;this.stop();for(const n of this._audioTracks)(e=n.onDisable)==null||e.call(n);for(const n of this._customTracks)(t=n.onDisable)==null||t.call(n);for(const n of this._animationTracks)(i=n.onDisable)==null||i.call(n);this._visibilityChangeEvt&&window.removeEventListener("visibilitychange",this._visibilityChangeEvt)}onDestroy(){var e;for(const t of this._allTracks)for(const i of t)(e=i.onDestroy)==null||e.call(i)}rebuildGraph(){this.isValid()&&(this.resolveBindings(),this.updateTimelineDuration(),this.setupAndCreateTrackHandlers())}async play(){if(!this.isValid())return;const e=this._isPaused==!0;if(this._isPaused=!1,!this._isPlaying){if(this._isPlaying=!0,e&&this.invokePauseChangedMethodsOnTracks(),this.waitForAudio){const t=[];for(const i of this._audioTracks){const n=i.loadAudio(this._time,1,0);n&&t.push(n)}if(t.length>0&&(await Promise.all(t),!this._isPlaying))return;for(;this._audioTracks.length>0&&this._isPlaying&&!Un.userInteractionRegistered&&this.waitForAudio;)await xc(200)}this.invokeStateChangedMethodsOnTracks(),this._internalUpdateRoutine=this.startCoroutine(this.internalUpdate(),$i.LateUpdate)}}pause(){this.isValid()&&(this._isPlaying=!1,!this._isPaused&&(this._isPaused=!0,this.internalEvaluate(),this.invokePauseChangedMethodsOnTracks(),this.invokeStateChangedMethodsOnTracks()))}stop(){this._isStopping=!0;for(const i of this._audioTracks)i.stop();const e=this._isPaused==!0,t=this._isPlaying;this._isPlaying&&(this._time=0,this._isPlaying=!1,this._isPaused=!1,this.internalEvaluate(),e&&this.invokePauseChangedMethodsOnTracks()),this._isPlaying=!1,this._isPaused=!1,e&&!t&&this.invokePauseChangedMethodsOnTracks(),t&&this.invokeStateChangedMethodsOnTracks(),this._internalUpdateRoutine&&this.stopCoroutine(this._internalUpdateRoutine),this._internalUpdateRoutine=null,this._isStopping=!1}evaluate(){this.internalEvaluate(!0)}isValid(){return this.playableAsset&&this.playableAsset.tracks&&Array.isArray(this.playableAsset.tracks)}*forEachTrack(){for(const e of this._allTracks)for(const t of e)yield t}get audioTracks(){return this._audioTracks}resolveGuids(e){this._guidsMap=e}invokePauseChangedMethodsOnTracks(){var e;for(const t of this.forEachTrack())(e=t.onPauseChanged)==null||e.call(t)}invokeStateChangedMethodsOnTracks(){var e;for(const t of this.forEachTrack())(e=t.onStateChanged)==null||e.call(t,this._isPlaying)}*internalUpdate(){for(;this._isPlaying&&this.activeAndEnabled;)!this._isPaused&&this._isPlaying&&(this._time+=this.context.time.deltaTime*this.speed,this.internalEvaluate()),yield}internalEvaluate(e=!1){if(!this.isValid())return;let t=this._time;switch(this.extrapolationMode){case 0:this._speed>0?t=Math.min(t,this._duration):this._speed<0&&(t=Math.max(t,0)),this._time=t;break;case 1:t%=this._duration,this._time=t;break;case 2:if(t>this._duration){this.stop();return}break}const i=this._time;for(const n of this.playableAsset.tracks)if(!n.muted)switch(n.type){case zo.Activation:if(!e&&!this._isPlaying)continue;for(let r=0;r<n.outputs.length;r++){const o=n.outputs[r];if(typeof o=="object"){let a=!1;if(n.clips)for(const c of n.clips)c.start<=i&&i<=c.end&&(a=!0);const l=o;l.visible!==void 0&&l.visible!==a&&(l.visible=a,Zm&&console.warn(this.name,"set ActivationTrack-"+r,l.name,a,i))}}break}if(!this._isStopping)for(const n of this._animationTracks)n.evaluate(i);for(const n of this._audioTracks)n.evaluate(i);for(const n of this._signalTracks)n.evaluate(i);for(const n of this._controlTracks)n.evaluate(i);for(const n of this._customTracks)n.evaluate(i)}resolveBindings(){if(this._clonedPlayableAsset||(this._clonedPlayableAsset=!0,this.playableAsset=__(this.playableAsset)),!this.playableAsset||!this.playableAsset.tracks)return;const e=this.findRoot(this.gameObject);for(const t of this.playableAsset.tracks){for(let i=t.outputs.length-1;i>=0;i--){let n=t.outputs[i];if(typeof n=="string"){this._guidsMap&&this._guidsMap[n]&&(n=this._guidsMap[n]);const r=se.findByGuid(n,e);r===null||typeof r!="object"?(t.outputs.splice(i,1),console.warn("Failed to resolve binding",n,t.name,t.type)):(Zm&&console.log("Resolved binding",n,"to",r),t.outputs[i]=r)}else if(n===null){if(t.outputs.splice(i,1),RB.createTrackFunctions[t.type])continue;t.type!==zo.Audio&&t.type!==zo.Control&&t.type!==zo.Marker&&t.type!==zo.Signal&&console.warn("Missing binding",n,t.name,t.type,this.name,this.playableAsset.name)}}if(t.type===zo.Control&&t.clips)for(let i=0;i<t.clips.length;i++){const n=t.clips[i];let r=n.asset.sourceObject;if(typeof r=="string"){this._guidsMap&&this._guidsMap[r]&&(r=this._guidsMap[r]);const o=se.findByGuid(r,e);o===null||typeof o!="object"?console.warn("Failed to resolve sourceObject binding",r,t.name,n):(Zm&&console.log("Resolved binding",r,"to",o),n.asset.sourceObject=o)}}}}findRoot(e){return e.parent?this.findRoot(e.parent):e}updateTimelineDuration(){if(this._duration=0,!(!this.playableAsset||!this.playableAsset.tracks)){for(const e of this.playableAsset.tracks)if(e.muted!==!0){if(e.clips)for(const t of e.clips)t.end>this._duration&&(this._duration=t.end);if(e.markers)for(const t of e.markers)t.time>this._duration&&(this._duration=t.time+.001)}}}setupAndCreateTrackHandlers(){var t,i,n;if(this._animationTracks.length=0,this._audioTracks.length=0,this._signalTracks.length=0,!this.playableAsset)return;let e=se.findObjectOfType(sd,this.context);for(const r of this.playableAsset.tracks){const o=r.type,a=RB.createTrackFunctions[o];if(a!=null){const l=a(this,r);if(typeof l.evaluate=="function"){l.director=this,l.track=r,this._customTracks.push(l);continue}}if(r.type===zo.Animation){if(!r.clips||r.clips.length<=0){Zm&&console.warn("Animation track has no clips",r);continue}for(let l=r.outputs.length-1;l>=0;l--){let c=r.outputs[l];if(c instanceof Ae){const u=se.getOrAddComponent(c,or);u&&(c=u)}const h=(t=c==null?void 0:c.gameObject)==null?void 0:t.animations;if(h){const u=new AE;u.trackOffset=r.trackOffset,u.director=this,u.track=r;for(let f=0;f<r.clips.length;f++){const p=r.clips[f],m=p.asset;if(!m){console.error(`Timeline ${this.name}: clip #${f} on track "${r.name}" has no animation data`);continue}const y=m.clip;let g=y;if((typeof g=="string"||typeof g=="number")&&(g=h.find(_=>_.name===y)),!g){console.warn("Could not find animationClip for model",p,r.name,this.name,(i=this.playableAsset)==null?void 0:i.name);continue}c instanceof or&&c.runtimeAnimatorController&&(c.__internalDidAwakeAndStart||c.initializeRuntimeAnimatorController(),c.runtimeAnimatorController.mixer||c.runtimeAnimatorController.bind(c),u.mixer=c.runtimeAnimatorController.mixer),u.mixer||(u.mixer=new R1(c.gameObject),this.context.animations.registerAnimationMixer(u.mixer)),u.clips.push(g),u.mixer.uncacheAction(g),u.createHooks(p.asset,g);const A=u.mixer.clipAction(g);u.actions.push(A),u.models.push(p)}this._animationTracks.push(u)}}}else if(r.type===zo.Audio){if(!r.clips||r.clips.length<=0)continue;const l=new ip;l.director=this,l.track=r,l.audioSource=r.outputs.find(c=>c instanceof Un),this._audioTracks.push(l),e||(e=(n=this.context.mainCameraComponent)==null?void 0:n.gameObject.addNewComponent(sd)),l.listener=e.listener;for(let c=0;c<r.clips.length;c++){const h=r.clips[c];l.addModel(h)}}else if(r.type===zo.Marker){const l=new q0;if(l.director=this,l.track=r,r.markers)for(const c of r.markers)switch(c.type){case QO.Signal:l.models.push(c),l.didTrigger.push(!1);break}if(l!==null&&l.models.length>0){const c=se.getComponent(this.gameObject,Vy);c&&(l.receivers.push(c),this._signalTracks.push(l))}}else if(r.type===zo.Signal){const l=new q0;if(l.director=this,l.track=r,r.markers)for(const c of r.markers)l.models.push(c),l.didTrigger.push(!1);for(const c of r.outputs)l.receivers.push(c);this._signalTracks.push(l)}else if(r.type===zo.Control){const l=new vE;if(l.director=this,l.track=r,r.clips)for(const c of r.clips)l.models.push(c);l.resolveSourceObjects(this.context),this._controlTracks.push(l)}}}setAudioTracksAllowPlaying(e){for(const t of this._audioTracks)t.onAllowAudioChanged(e)}registerAnimationCallback(e){this.animationCallbackReceivers.push(e)}unregisterAnimationCallback(e){const t=this.animationCallbackReceivers.indexOf(e);t!==-1&&this.animationCallbackReceivers.splice(t,1)}},d(fR,"createTrackFunctions",{}),fR);let fd=RB;wj([x()],fd.prototype,"playOnAwake",2);wj([x()],fd.prototype,"extrapolationMode",2);const DS=Symbol("objectIsAnimatedData");function Ez(s,e,t){if(!s)return;if(s[DS]===void 0){if(!t)return;s[DS]=new Set}const i=s[DS];t?i.add(e):i.has(e)&&i.delete(e)}function tpe(s){if(!s)return!1;const e=s[DS];return e!==void 0&&e.size>0}ui.registerCallback(Ti.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)se.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Pr&&n.playAutomatically||n instanceof or||n instanceof fd&&n.playOnAwake===!0)return!0;if(n instanceof Pr)return n.playAutomatically=!0,!0;if(n instanceof fd)return n.playOnAwake=!0,!0}},!0)!==!0&&gy.assignAnimationsFromFile(t.file,{createAnimationComponent:(n,r)=>xl(n,Pr)})});class ipe{constructor(){d(this,"_context")}get context(){return this._context??Dt.Current}get isStateMachineBehaviour(){return!0}}class Ev{constructor(e,t,i,n){d(this,"name");d(this,"nameHash");d(this,"normalizedTime");d(this,"length");d(this,"speed");d(this,"action");d(this,"hasTransitions");var r;this.name=e.name,this.nameHash=e.hash,this.normalizedTime=t,this.length=i,this.speed=n,this.action=e.motion.action||null,this.hasTransitions=((r=e.transitions)==null?void 0:r.length)>0||!1}}function Sj(s,e){return{name:"Empty",isLooping:!1,guid:(e==null?void 0:e.generateUUID())??di.generateUUID(),index:-1,clip:new no(s,0,[])}}var Lu=(s=>(s[s.If=1]="If",s[s.IfNot=2]="IfNot",s[s.Greater=3]="Greater",s[s.Less=4]="Less",s[s.Equals=6]="Equals",s[s.NotEqual=7]="NotEqual",s))(Lu||{}),jO=(s=>(s[s.Float=1]="Float",s[s.Int=3]="Int",s[s.Bool=4]="Bool",s[s.Trigger=9]="Trigger",s))(jO||{});const Cs=ie("debuganimatorcontroller"),xw=ie("debugrootmotion");class ia{constructor(e){d(this,"_speed",1);d(this,"normalizedStartOffset",0);d(this,"animator");d(this,"model");d(this,"_mixer");d(this,"_activeState");d(this,"_activeStates",[]);d(this,"_heldActions",[]);d(this,"rootMotionHandler");this.model=e,Cs&&console.log(this)}static createFromClips(e,t={looping:!1,autoTransition:!0,transitionDuration:0}){const i=[];for(let o=0;o<e.length;o++){const a=e[o],l=[];if(t.autoTransition!==!1){const h=t.transitionDuration??0,u=h/a.duration;let f=o;(t.autoTransition===void 0||t.autoTransition===!0)&&(f=(o+1)%e.length),l.push({exitTime:1-u,offset:0,duration:h,hasExitTime:!0,destinationState:f,conditions:[]})}const c={name:a.name,hash:o,motion:{name:a.name,clip:a,isLooping:(t==null?void 0:t.looping)??!1},transitions:l,behaviours:[]};i.push(c)}const n={name:"AnimatorController",guid:new ks(Date.now()).generateUUID(),parameters:[],layers:[{name:"Base Layer",stateMachine:{defaultState:0,states:i}}]};return new ia(n)}play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){if(t<0)t=0;else if(t>=this.model.layers.length){console.warn("invalid layer");return}const o=this.model.layers[t].stateMachine;for(const a of o.states)if(a.name===e||a.hash===e){Cs&&console.log("transition to ",a),this.transitionTo(a,n,i);return}console.warn("Could not find "+e+" to play")}reset(){this.setStartTransition()}setBool(e,t){var n,r;const i=typeof e=="string"?"name":"hash";return(r=(n=this.model)==null?void 0:n.parameters)==null?void 0:r.filter(o=>o[i]===e).forEach(o=>o.value=t)}getBool(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??!1}setFloat(e,t){var r,o;const i=typeof e=="string"?"name":"hash",n=(o=(r=this.model)==null?void 0:r.parameters)==null?void 0:o.filter(a=>a[i]===e);return n.forEach(a=>a.value=t),(n==null?void 0:n.length)>0}getFloat(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??0}setInteger(e,t){var n,r;const i=typeof e=="string"?"name":"hash";return(r=(n=this.model)==null?void 0:n.parameters)==null?void 0:r.filter(o=>o[i]===e).forEach(o=>o.value=t)}getInteger(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??0}setTrigger(e){var i,n;Cs&&console.log("SET TRIGGER",e);const t=typeof e=="string"?"name":"hash";return(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.filter(r=>r[t]===e).forEach(r=>r.value=!0)}resetTrigger(e){var i,n;const t=typeof e=="string"?"name":"hash";return(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.filter(r=>r[t]===e).forEach(r=>r.value=!1)}getTrigger(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??!1}isInTransition(){return this._activeStates.length>1}setSpeed(e){this._speed=e}FindState(e){return this.findState(e)}findState(e){if(!e)return null;if(Array.isArray(this.model.layers)){for(const t of this.model.layers)for(const i of t.stateMachine.states)if(i.name===e||i.hash==e)return i}return null}getCurrentStateInfo(){if(!this._activeState)return null;const e=this._activeState.motion.action;if(!e)return null;const t=this._activeState.motion.clip.duration,i=t<=0?0:Math.abs(e.time/t);return new Ev(this._activeState,i,t,this._speed)}get currentAction(){if(!this._activeState)return null;const e=this._activeState.motion.action;return e||null}get context(){var e;return(e=this.animator)==null?void 0:e.context}get mixer(){return this._mixer}dispose(){var e;if(this._mixer.stopAllAction(),this.animator){this._mixer.uncacheRoot(this.animator.gameObject);for(const t of this._activeStates)t.motion.clip&&this.mixer.uncacheAction(t.motion.clip,this.animator.gameObject)}(e=this.context)==null||e.animations.unregisterAnimationMixer(this._mixer)}bind(e){var t,i;e?this.animator!==e&&(this._mixer&&(this._mixer.stopAllAction(),(t=this.context)==null||t.animations.unregisterAnimationMixer(this._mixer)),this.animator=e,this._mixer=new R1(this.animator.gameObject),(i=this.context)==null||i.animations.registerAnimationMixer(this._mixer),this.createActions(this.animator)):console.error("AnimatorController.bind: animator is null")}clone(){if(typeof this.model=="string")return console.warn("AnimatorController has not been resolved, can not create model from string",this.model),null;Cs&&console.warn("AnimatorController clone()",this.model);const e=__(this.model,(i,n,r)=>r==null?!0:!(r.type==="Object3D"||r.isObject3D===!0||S5(r)||r.tracks!==void 0||r instanceof ia));return console.assert(e!==this.model),new ia(e)}update(e){var i,n;if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates(e);const t=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&((i=this.rootMotionHandler)==null||i.onBeforeUpdate(e)),this._mixer.update(t),this.animator.applyRootMotion&&((n=this.rootMotionHandler)==null||n.onAfterUpdate(e))}get activeState(){return this._activeState}updateActiveStates(e){for(let t=0;t<this._activeStates.length;t++){const i=this._activeStates[t],n=i.motion;if(!n.action)this._activeStates.splice(t,1),t--;else{const r=n.action;r.weight=e,r.getEffectiveWeight()<=0&&!r.isRunning()&&(Cs&&console.debug("REMOVE",i.name,r.getEffectiveWeight(),r.isRunning(),r.isScheduled()),this._activeStates.splice(t,1),t--)}}}setStartTransition(){var e;this.model.layers.length>1&&(Cs||ct())&&console.warn("Multiple layers are not supported yet "+((e=this.animator)==null?void 0:e.name));for(const t of this.model.layers){const i=t.stateMachine;i.defaultState===void 0&&(Cs&&console.warn("AnimatorController default state is undefined, will assign state 0 as default",t),i.defaultState=0);const n=i.states[i.defaultState];this.transitionTo(n,0,this.normalizedStartOffset);break}}evaluateTransitions(){var r;let e=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;e=!0}const t=this._activeState,i=t.motion.action;for(const o of t.transitions){if(!o.hasExitTime&&o.conditions.length<=0)continue;let a=!0;for(const l of o.conditions)if(!this.evaluateCondition(l)){a=!1;break}if(a)if(i){const l=t.motion.clip.duration,c=l<=0?1:Math.abs(i.time/l);let h=o.exitTime;i.timeScale<0&&(h=1-h);let u=!1;if(o.hasExitTime?u=c>=h:u=!0,u){for(const f of o.conditions){const p=this.model.parameters.find(m=>m.name===f.parameter);(p==null?void 0:p.type)===jO.Trigger&&p.value&&(p.value=!1)}if(i.clampWhenFinished=!0,Cs){const f=this.getState(o.destinationState,0);console.log(`Transition to ${o.destinationState} / ${f==null?void 0:f.name}`,o,`
5671
+ Using the assigned clip instead:`,this.clip),e=this.clip);let t=!this.sound||e&&e!==this.clip;if(typeof e=="string"&&!this.audioLoader&&(t=!0),(e instanceof MediaStream||typeof e=="string")&&(this.clip=e),t){this.shouldPlay=!0,this.onNewClip(e);return}if(this.shouldPlay=!0,this._hasEnded=!1,br&&console.log("play",(i=this.sound)==null?void 0:i.getVolume(),this.sound),this.sound&&!this.sound.isPlaying){const o=this.context.application.muted;o&&this.sound.setVolume(0),(n=this.gameObject)==null||n.add(this.sound),this.clip instanceof MediaStream?(this.sound.setMediaStreamSource(this.clip),this._audioElement||(this._audioElement=document.createElement("audio"),this._audioElement.style.display="none"),this._audioElement.parentNode||(r=this.context.domElement.shadowRoot)==null||r.append(this._audioElement),this._audioElement.srcObject=this.clip,this._audioElement.autoplay=!1):(this._audioElement&&this._audioElement.remove(),this.sound.play(o?.1:0))}}pause(){var e,t;br&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.isPlaying&&this.sound.source&&(this._lastContextTime=(e=this.sound)==null?void 0:e.context.currentTime,this.sound.pause()),(t=this._audioElement)==null||t.remove()}stop(){var e,t;br&&console.log("Pause",this),this._hasEnded=!0,this.shouldPlay=!1,this.sound&&this.sound.source&&(this._lastContextTime=(e=this.sound)==null?void 0:e.context.currentTime,br&&console.log(this._lastContextTime),this.sound.stop()),(t=this._audioElement)==null||t.remove()}get isPlaying(){var e;return((e=this.sound)==null?void 0:e.isPlaying)??!1}set isPlaying(e){}get time(){var e,t;return(e=this.sound)!=null&&e.source?((t=this.sound.source)==null?void 0:t.context.currentTime)-this._lastContextTime+this.sound.offset:0}set time(e){if(this.sound){if(e===this.sound.offset)return;const t=this.isPlaying;this.stop(),this.sound.offset=e,t&&this.play()}}update(){this.helper&&(this.isPlaying&&this.helper.update(),this.helper.visible=this.isPlaying),this._needUpdateSpatialDistanceSettings&&this.applySpatialDistanceSettings(),this.sound&&!this.sound.isPlaying&&this.shouldPlay&&!this._hasEnded&&(this._hasEnded=!0,br&&console.log("Audio clip ended",this.clip),this.dispatchEvent(new CustomEvent("ended",{detail:this})))}};let Un=Iu;Tc([x(URL)],Un.prototype,"clip",2);Tc([x()],Un.prototype,"playOnAwake",2);Tc([x()],Un.prototype,"preload",2);Tc([x()],Un.prototype,"loop",1);Tc([x()],Un.prototype,"spatialBlend",1);Tc([x()],Un.prototype,"minDistance",1);Tc([x()],Un.prototype,"maxDistance",1);Tc([x()],Un.prototype,"volume",1);Tc([x()],Un.prototype,"rollOffMode",2);Tc([x()],Un.prototype,"playInBackground",2);var Xfe=Object.defineProperty,Yfe=Object.getOwnPropertyDescriptor,yE=(s,e,t,i)=>{for(var n=i>1?void 0:i?Yfe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Xfe(e,t,n),n};const Kfe=ie("debugsignals");class V_{constructor(){d(this,"guid")}}yE([x()],V_.prototype,"guid",2);class Hy{constructor(){d(this,"signal");d(this,"reaction")}}yE([x(V_)],Hy.prototype,"signal",2);yE([x(Xn)],Hy.prototype,"reaction",2);var dR;const sh=(dR=class extends Ie{constructor(){super(...arguments);d(this,"events")}static invoke(e){if(sh.receivers[e]){const t=sh.receivers[e];if(!t)return;for(const i of t)i.invoke(e)}}awake(){Kfe&&console.log("SignalReceiver awake",this)}onEnable(){if(this.events)for(const e of this.events)sh.receivers[e.signal.guid]||(sh.receivers[e.signal.guid]=[]),sh.receivers[e.signal.guid].push(this)}onDisable(){if(this.events){for(const e of this.events)if(sh.receivers[e.signal.guid]){const t=sh.receivers[e.signal.guid].indexOf(this);t>=0&&sh.receivers[e.signal.guid].splice(t,1)}}}invoke(e){if(!this.events||!Array.isArray(this.events))return;const t=typeof e=="object"?e.guid:e;for(const i of this.events)if(i.signal.guid===t)try{if(i.reaction){if(!i.reaction.invoke){console.warn("Missing invoke - possibly a serialization error",i,this);continue}}else{console.warn("Missing reaction for signal",i,this);continue}i.reaction.invoke()}catch(n){console.error(n)}}},d(dR,"receivers",{}),dR);let Vy=sh;yE([x(Hy)],Vy.prototype,"events",2);var zo=(s=>(s.Activation="ActivationTrack",s.Animation="AnimationTrack",s.Audio="AudioTrack",s.Control="ControlTrack",s.Marker="MarkerTrack",s.Signal="SignalTrack",s))(zo||{}),Yl=(s=>(s[s.None=0]="None",s[s.Hold=1]="Hold",s[s.Loop=2]="Loop",s[s.PingPong=3]="PingPong",s[s.Continue=4]="Continue",s))(Yl||{}),QO=(s=>(s.Signal="SignalEmitter",s))(QO||{});const uc=ie("debugtimeline");class Q_{constructor(){d(this,"director");d(this,"track")}get muted(){return this.track.muted}set muted(e){var t;e!==this.track.muted&&(this.track.muted=e,(t=this.onMuteChanged)==null||t.call(this))}*forEachClip(e=!1){var t;if((t=this.track)!=null&&t.clips)if(e)for(let i=this.track.clips.length-1;i>=0;i--)yield this.track.clips[i];else for(const i of this.track.clips)yield i}getClipTime(e,t){return t.clipIn+(e-t.start)*t.timeScale}getClipTimeNormalized(e,t){return(e-t.start)/t.duration}evaluateWeight(e,t,i,n=!0){if(t<0||t>=i.length)return 0;const r=i[t];if(n||e>=r.start&&e<=r.end){let o=1;const a=!1;if(r.easeInDuration>0){const l=Math.min((e-r.start)/r.easeInDuration,1);o*=l}if(r.easeOutDuration>0&&!a){const l=Math.min((r.end-e)/r.easeOutDuration,1);o*=l}return o}return 0}}class Jfe{constructor(e){d(this,"clip");d(this,"rootPositionOffset");d(this,"rootQuaternionOffset");d(this,"rootStartPosition");d(this,"rootEndPosition");d(this,"rootStartQuaternion");d(this,"rootEndQuaternion");const t=e.getClip();this.clip=t;const i=e.getRoot(),n=i.name+".position",r=i.name+".quaternion";uc&&console.log(t.name,t.tracks,n);for(const o of t.tracks)if(!(o.times.length<=0)){if(o.name.endsWith(n))this.rootStartPosition=new w().fromArray(o.values,0),this.rootEndPosition=new w().fromArray(o.values,o.values.length-3),this.rootPositionOffset=this.rootEndPosition.clone().sub(this.rootStartPosition),uc&&console.log(this.rootPositionOffset);else if(o.name.endsWith(r)&&(this.rootStartQuaternion=new Ce().fromArray(o.values,0),this.rootEndQuaternion=new Ce().fromArray(o.values,o.values.length-4),this.rootQuaternionOffset=this.rootEndQuaternion.clone().multiply(this.rootStartQuaternion),uc)){const a=new mi().setFromQuaternion(this.rootQuaternionOffset);console.log("ROT",a)}}}get hasOffsets(){return this.rootPositionOffset!==void 0||this.rootQuaternionOffset!==void 0}}class AE extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"trackOffset");d(this,"target");d(this,"mixer");d(this,"clips",[]);d(this,"actions",[]);d(this,"_actionOffsets",[]);d(this,"_didBind",!1);d(this,"_animator",null);d(this,"_useclipOffsets",!0);d(this,"_totalOffsetPosition",new w);d(this,"_totalOffsetRotation",new Ce);d(this,"_totalOffsetPosition2",new w);d(this,"_totalOffsetRotation2",new Ce);d(this,"_summedPos",new w);d(this,"_tempPos",new w);d(this,"_summedRot",new Ce);d(this,"_tempRot",new Ce);d(this,"_clipRotQuat",new Ce)}onDisable(){var t;(t=this.mixer)==null||t.stopAllAction()}onDestroy(){this.director.context.animations.unregisterAnimationMixer(this.mixer)}onStateChanged(){this._animator&&Ez(this._animator.gameObject,this,this.director.isPlaying)}createHooks(t,i){var h,u;if(((h=i.tracks)==null?void 0:h.length)<=0){console.warn("No tracks in AnimationClip",i);return}const n=i.tracks[0].name.split("."),r=n[n.length-2],o=r+".position",a=r+".quaternion";let l=!1,c=!1;for(const f of i.tracks)f.name.endsWith(o)?(l=!0,this.createPositionInterpolant(i,t,f)):f.name.endsWith(a)&&(c=!0,this.createRotationInterpolant(i,t,f));if(!l||!c){const f=(u=this.mixer)==null?void 0:u.getRoot(),p=i.tracks[0],m=p.name.lastIndexOf("."),y=p.name.substring(0,m),g=y.substring(y.lastIndexOf(".")+1),A=f.getObjectByName(g);if(A)if(l){if(!c){const _=i.tracks[0].name.substring(0,m)+".quaternion";uc&&console.warn("Create quaternion track",g,A);const v=A.quaternion,b=new Fa(_,[0,i.duration],[v.x,v.y,v.z,v.w,v.x,v.y,v.z,v.w]);i.tracks.push(b),this.createRotationInterpolant(i,t,b)}}else{const _=y+".position";uc&&console.warn("Create position track",g,A);const v=A.position,b=new bc(_,[0,i.duration],[v.x,v.y,v.z,v.x,v.y,v.z]);i.tracks.push(b),this.createPositionInterpolant(i,t,b)}}}bind(){if(!this._didBind){this._didBind=!0,uc&&console.log(this.models),this.mixer?this.target=this.mixer.getRoot():console.warn("No mixer was assigned to animation track");for(const t of this.actions){const i=new Jfe(t);this._actionOffsets.push(i)}this.target&&(this._animator=se.getComponent(this.target,or)??null,this._animator&&Ez(this._animator.gameObject,this,!0));for(const t of this.models){const i=t.asset,n=i.position,r=i.rotation;n&&n.x!==void 0&&(n.isVector3||(i.position=new w(n.x,n.y,n.z)),r.isQuaternion||(i.rotation=new Ce(r.x,r.y,r.z,r.w)))}this.ensureTrackOffsets()}}ensureTrackOffsets(){if(this.trackOffset){const t=this.trackOffset.position;t&&(t.isVector3||(this.trackOffset.position=new w(t.x,t.y,t.z)));const i=this.trackOffset.rotation;i&&(i.isQuaternion||(this.trackOffset.rotation=new Ce(i.x,i.y,i.z,i.w)))}}evaluate(t){var l,c,h,u,f,p,m;if(this.track.muted||!this.mixer)return;this.bind(),this._totalOffsetPosition.set(0,0,0),this._totalOffsetRotation.set(0,0,0,1),this._totalOffsetPosition2.set(0,0,0),this._totalOffsetRotation2.set(0,0,0,1);let i=0,n=0,r=!1,o=!1,a=0;for(let y=0;y<this.clips.length;y++){const g=this.models[y],A=this.actions[y],_=g.asset;A.weight=0;const v=t>=g.start&&t<=g.end,b=g.preExtrapolationMode,S=g.postExtrapolationMode,E=y<this.clips.length-1?this.models[y+1]:null;let M=v,T=!1;if(!M&&!r&&g.end<t&&S!==Yl.None?(!E||E.start>t)&&(M=!0,r=!0):y==0&&!M&&!o&&g.start>t&&b!==Yl.None&&(!E||E.start<t)&&(M=!0,T=!0,o=!0),M){let P=1;P*=this.evaluateWeight(t,y,this.models,M),P*=this.director.weight;let C=v;if(T)switch(b){case Yl.Hold:break;case Yl.Loop:t+=g.start,C=!0;break;default:t+=g.start,C=!0;break}let I=this.getClipTime(t,g),F=0;const U=_.duration;if(T&&b===Yl.Hold&&(I=0),C){if(_.loop)for(F+=Math.floor(I/(U+1e-6));I>U;)I-=U}else if(!v&&r)switch(S){case Yl.Hold:I=this.getClipTime(g.end,g);break;case Yl.Loop:I%=U;break;case Yl.PingPong:const D=Math.floor(I/U)%2!==0;I%=U,D&&(I=U-I);break}g.reversed===!0?A.time=A.getClip().duration-I:A.time=I,A.timeScale=0;const O=Math.max(0,P);if(A.weight=O,a+=O,A.clampWhenFinished=!1,A.isRunning()||A.play(),this._useclipOffsets){const Q=i==0?this._totalOffsetPosition:this._totalOffsetPosition2,D=i==0?this._totalOffsetRotation:this._totalOffsetRotation2;i<1&&(n=1-P),i+=1;const k=this._summedPos.set(0,0,0),z=this._tempPos.set(0,0,0),q=this._summedRot.identity(),X=this._tempRot.identity(),re=_.rotation;re&&(this._clipRotQuat.identity(),this._clipRotQuat.slerp(re,P));const le=this._actionOffsets[y];if(le.hasOffsets)for(let Me=0;Me<F;Me++)le.rootPositionOffset?z.copy(le.rootPositionOffset):z.set(0,0,0),z.applyQuaternion(q),this._clipRotQuat&&z.applyQuaternion(this._clipRotQuat),le.rootQuaternionOffset&&(X.copy(le.rootQuaternionOffset),q.multiply(X)),k.add(z);this._clipRotQuat&&D.multiply(this._clipRotQuat),D.multiply(q),_.position&&k.add(_.position),Q.add(k)}}}if(this._useclipOffsets&&(this._totalOffsetPosition.lerp(this._totalOffsetPosition2,n),this._totalOffsetRotation.slerp(this._totalOffsetRotation2,n)),this.__mixerError===void 0&&(uc||ct())&&((c=(l=this._animator)==null?void 0:l.runtimeAnimatorController)!=null&&c.mixer)&&this.mixer!==((u=(h=this._animator)==null?void 0:h.runtimeAnimatorController)==null?void 0:u.mixer)&&(this.__mixerError=!0,console.error("AnimationTrack mixer is not shared with the animator controller - this might result in the timeline to not animate properly. Please report a bug to the Needle Engine team!",this)),(f=this._animator)!=null&&f.runtimeAnimatorController){const y=Math.max(0,1-a);(m=(p=this._animator)==null?void 0:p.runtimeAnimatorController)==null||m.update(y)}else this.mixer.update(t)}createRotationInterpolant(t,i,n){var l;const r=n.createInterpolant.bind(n),o=new Ce;this.ensureTrackOffsets();const a=(l=this.trackOffset)==null?void 0:l.rotation;n.createInterpolant=()=>{const c=r(),h=c.evaluate.bind(c);return c.evaluate=u=>{var p;const f=h(u);if(o.set(f[0],f[1],f[2],f[3]),o.premultiply(this._totalOffsetRotation),a&&o.premultiply(a),this.director.animationCallbackReceivers)for(const m of this.director.animationCallbackReceivers)(p=m==null?void 0:m.onTimelineRotation)==null||p.call(m,this.director,this.target,u,o);return f[0]=o.x,f[1]=o.y,f[2]=o.z,f[3]=o.w,f},c}}createPositionInterpolant(t,i,n){var h,u;const r=n.createInterpolant.bind(n),o=new w;this.ensureTrackOffsets();const a=(h=this.trackOffset)==null?void 0:h.rotation,l=(u=this.trackOffset)==null?void 0:u.position;let c;n.createInterpolant=()=>{const f=r(),p=f.evaluate.bind(f);return f.evaluate=m=>{var g,A,_;const y=p(m);if(o.set(y[0],y[1],y[2]),i.removeStartOffset&&(c===void 0?(c=null,c=(A=(g=this._actionOffsets.find(v=>v.clip===t))==null?void 0:g.rootStartPosition)==null?void 0:A.clone()):c!=null&&c.isVector3&&o.sub(c)),o.applyQuaternion(this._totalOffsetRotation),o.add(this._totalOffsetPosition),a&&o.applyQuaternion(a),l&&(o.x-=l.x,o.y+=l.y,o.z+=l.z),this.director.animationCallbackReceivers)for(const v of this.director.animationCallbackReceivers)(_=v==null?void 0:v.onTimelinePosition)==null||_.call(v,this.director,this.target,m,o);return y[0]=o.x,y[1]=o.y,y[2]=o.z,y},f}}}const Zfe=ie("mutetimeline"),Ug=class extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"listener");d(this,"audio",[]);d(this,"audioContextTimeOffset",[]);d(this,"lastTime",0);d(this,"audioSource");d(this,"_audioLoader",null);d(this,"_playableDirectorResumed",!1)}getAudioFilePath(t){const i=this.director.sourceId;return bd(i,t)}onAllowAudioChanged(t){for(let i=0;i<this.models.length;i++){const n=this.models[i];this.audio[i].setVolume(t?n.asset.volume:0)}}addModel(t){const i=new K2(this.listener);this.audio.push(i);const n=t;n._didTriggerPlay=!1,this.models.push(n)}onDisable(){for(const t of this.audio)t.isPlaying&&t.stop();for(const t of this.models)t._didTriggerPlay=!1}onDestroy(){for(const t of this.audio)t.source&&(t==null||t.disconnect());this.audio.length=0}onMuteChanged(){if(this.muted)for(let t=0;t<this.audio.length;t++){const i=this.audio[t];i!=null&&i.isPlaying&&i.stop()}}stop(){for(let t=0;t<this.audio.length;t++){const i=this.audio[t];i!=null&&i.isPlaying&&i.stop()}for(const t of this.models)t._didTriggerPlay=!1}onPauseChanged(){for(let t=0;t<this.audio.length;t++){const i=this.audio[t];i!=null&&i.isPlaying&&i.stop()}this._playableDirectorResumed=this.director.isPlaying}evaluate(t){if(Zfe||this.track.muted||this.director.speed<0)return;const i=this.director.context.application.muted,n=this._playableDirectorResumed;this._playableDirectorResumed=!1;const r=i?.1:0;for(let o=0;o<this.models.length;o++){const a=this.models[o],l=this.audio[o],c=a.asset;if((!l||!l.buffer)&&this.isInTimeRange(a,t-1,t+1)&&this.handleAudioLoading(a,l),Un.userInteractionRegistered!==!1&&!(l===null||!l.buffer))if(l.playbackRate=this.director.context.time.timeScale*this.director.speed,l.loop=c.loop,t>=a.start&&t<=a.end&&t<this.director.duration){if(!l.isPlaying||!this.director.isPlaying)(n||!a._didTriggerPlay&&this.lastTime<t)&&(a.duration*a.timeScale>.3?l.offset=a.clipIn+(t-a.start)*a.timeScale:l.offset=0,uc&&console.log("Timeline Audio ("+this.track.name+") play with offset "+l.offset+" - "+a.asset.clip),l.play(r),a._didTriggerPlay=!0);else{const u=a.clipIn+(t-a.start)*a.timeScale,f=l.context.currentTime-l._startedAt+l.offset;Math.abs(u-f)>.3&&(l.offset=u,l.stop(),l.play(r))}let h=c.volume;if(this.track.volume!==void 0&&(h*=this.track.volume),i&&(h=0),a.easeInDuration>0){const u=Math.min((t-a.start)/a.easeInDuration,1);h*=u}if(a.easeOutDuration>0){const u=Math.min((a.end-t)/a.easeOutDuration,1);h*=u}l.setVolume(h*this.director.weight)}else a._didTriggerPlay=!1,this.director.isPlaying&&l.isPlaying&&l.stop()}this.lastTime=t}loadAudio(t,i=0,n=0){let r=null;const o=t-n,a=t+i;for(const l of this.models)if(this.isInTimeRange(l,o,a)){const c=this.audio[this.models.indexOf(l)],h=this.handleAudioLoading(l,c);h!==null&&(r===null&&(r=[]),r.push(h))}return r!==null?Promise.all(r):null}isInTimeRange(t,i,n){return i<=t.start&&n>=t.end||i>=t.start&&i<=t.end||n>=t.start&&n<=t.end}static dispose(){Ug._audioBuffers.clear()}handleAudioLoading(t,i){this._audioLoader||(this._audioLoader=new $S);const n=this.getAudioFilePath(t.asset.clip);if(Ug._audioBuffers.get(n)){const o=Ug._audioBuffers.get(n);return o.then(a=>{a&&i.setBuffer(a)}),o}uc&&console.warn("LOAD audio track",n,this.director.sourceId);const r=new Promise((o,a)=>{this._audioLoader.load(n,l=>{i.setBuffer(l),o(l)},void 0,l=>{console.error("Error loading audio",l),o(null)})});return Ug._audioBuffers.set(n,r),r}};let ip=Ug;d(ip,"_audioBuffers",new Map);class q0 extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"didTrigger",[]);d(this,"receivers",[])}evaluate(t){var n;if(this.track.muted)return;const i=this.director.context.time.deltaTime*1.5;for(let r=0;r<this.models.length;r++){const o=this.models[r],a=this.didTrigger[r],l=o.time-t;let c=!1;if(o.retroActive)c=l<=1e-6;else{const h=Math.abs(l);(h===0||h>=1e-5&&h<i)&&(c=!0)}if(c){if(!a)if(uc&&console.log("Trigger signal",t,o.time,o),this.didTrigger[r]=!0,((n=this.receivers)==null?void 0:n.length)<=0)Vy.invoke(o.asset);else for(const h of this.receivers)h&&h.invoke(o.asset)}else o.emitOnce||(this.didTrigger[r]=!1)}}}class vE extends Q_{constructor(){super(...arguments);d(this,"models",[]);d(this,"timelines",[]);d(this,"_previousActiveModel",null)}resolveSourceObjects(t){for(let i=this.models.length-1;i>=0;i--){const r=this.models[i].asset;if(!r.sourceObject||typeof r.sourceObject!="object"){console.log("no source object, removing model",i,r),this.models.splice(i,1);continue}else{const o=se.getComponent(r.sourceObject,fd);this.timelines.push(o),o&&r.updateDirector&&(o.playOnAwake=!1)}}}evaluate(t){var i;this._previousActiveModel=null;for(let n=0;n<this.models.length;n++){const r=this.models[n],o=r.asset;if(t>=r.start&&t<=r.end){this._previousActiveModel=r;const a=this.getClipTime(t,r);if(o.controlActivation){const l=o.sourceObject;l.visible=!0}if(o.updateDirector){const l=this.timelines[n];l&&(l.isPlaying&&l.pause(),l.time=a,l.evaluate())}}else{const a=(i=this._previousActiveModel)==null?void 0:i.asset;if(o.controlActivation){const l=o.sourceObject;(a==null?void 0:a.sourceObject)!==l&&(l.visible=!1)}}}}}var $fe=Object.defineProperty,epe=Object.getOwnPropertyDescriptor,wj=(s,e,t,i)=>{for(var n=i>1?void 0:i?epe(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&$fe(e,t,n),n};const Zm=ie("debugtimeline");var fR;const RB=(fR=class extends Ie{constructor(){super(...arguments);d(this,"playableAsset");d(this,"playOnAwake");d(this,"extrapolationMode",1);d(this,"waitForAudio",!0);d(this,"_visibilityChangeEvt");d(this,"_clonedPlayableAsset",!1);d(this,"_speed",1);d(this,"_guidsMap");d(this,"_isPlaying",!1);d(this,"_internalUpdateRoutine");d(this,"_isPaused",!1);d(this,"_isStopping",!1);d(this,"_time",0);d(this,"_duration",0);d(this,"_weight",1);d(this,"_animationTracks",[]);d(this,"_audioTracks",[]);d(this,"_signalTracks",[]);d(this,"_controlTracks",[]);d(this,"_customTracks",[]);d(this,"_allTracks",[this._animationTracks,this._audioTracks,this._signalTracks,this._controlTracks,this._customTracks]);d(this,"animationCallbackReceivers",[])}static registerCreateTrack(e,t){this.createTrackFunctions[e]=t}get isPlaying(){return this._isPlaying}get isPaused(){return this._isPaused}get time(){return this._time}set time(e){typeof e=="number"&&!Number.isNaN(e)?this._time=e:(Zm||so())&&console.error("INVALID TIMELINE.TIME VALUE",e,this.name)}get duration(){return this._duration}set duration(e){this._duration=e}get weight(){return this._weight}set weight(e){this._weight=e}get speed(){return this._speed}set speed(e){this._speed=e}awake(){var e,t,i;Zm&&console.log(this,(e=this.playableAsset)==null?void 0:e.tracks),this.rebuildGraph(),this.isValid()||console.warn("PlayableDirector is not valid",this.playableAsset,(t=this.playableAsset)==null?void 0:t.tracks,Array.isArray((i=this.playableAsset)==null?void 0:i.tracks),this)}onEnable(){var e,t,i;for(const n of this._audioTracks)(e=n.onEnable)==null||e.call(n);for(const n of this._customTracks)(t=n.onEnable)==null||t.call(n);for(const n of this._animationTracks)(i=n.onEnable)==null||i.call(n);this.playOnAwake&&this.play(),this._visibilityChangeEvt||(this._visibilityChangeEvt=()=>{switch(document.visibilityState){case"hidden":this.setAudioTracksAllowPlaying(!1);break;case"visible":this.setAudioTracksAllowPlaying(!0);break}}),window.addEventListener("visibilitychange",this._visibilityChangeEvt)}onDisable(){var e,t,i;this.stop();for(const n of this._audioTracks)(e=n.onDisable)==null||e.call(n);for(const n of this._customTracks)(t=n.onDisable)==null||t.call(n);for(const n of this._animationTracks)(i=n.onDisable)==null||i.call(n);this._visibilityChangeEvt&&window.removeEventListener("visibilitychange",this._visibilityChangeEvt)}onDestroy(){var e;for(const t of this._allTracks)for(const i of t)(e=i.onDestroy)==null||e.call(i)}rebuildGraph(){this.isValid()&&(this.resolveBindings(),this.updateTimelineDuration(),this.setupAndCreateTrackHandlers())}async play(){if(!this.isValid())return;const e=this._isPaused==!0;if(this._isPaused=!1,!this._isPlaying){if(this._isPlaying=!0,e&&this.invokePauseChangedMethodsOnTracks(),this.waitForAudio){const t=[];for(const i of this._audioTracks){const n=i.loadAudio(this._time,1,0);n&&t.push(n)}if(t.length>0&&(await Promise.all(t),!this._isPlaying))return;for(;this._audioTracks.length>0&&this._isPlaying&&!Un.userInteractionRegistered&&this.waitForAudio;)await xc(200)}this.invokeStateChangedMethodsOnTracks(),this._internalUpdateRoutine=this.startCoroutine(this.internalUpdate(),$i.LateUpdate)}}pause(){this.isValid()&&(this._isPlaying=!1,!this._isPaused&&(this._isPaused=!0,this.internalEvaluate(),this.invokePauseChangedMethodsOnTracks(),this.invokeStateChangedMethodsOnTracks()))}stop(){this._isStopping=!0;for(const i of this._audioTracks)i.stop();const e=this._isPaused==!0,t=this._isPlaying;this._isPlaying&&(this._time=0,this._isPlaying=!1,this._isPaused=!1,this.internalEvaluate(),e&&this.invokePauseChangedMethodsOnTracks()),this._isPlaying=!1,this._isPaused=!1,e&&!t&&this.invokePauseChangedMethodsOnTracks(),t&&this.invokeStateChangedMethodsOnTracks(),this._internalUpdateRoutine&&this.stopCoroutine(this._internalUpdateRoutine),this._internalUpdateRoutine=null,this._isStopping=!1}evaluate(){this.internalEvaluate(!0)}isValid(){return this.playableAsset&&this.playableAsset.tracks&&Array.isArray(this.playableAsset.tracks)}*forEachTrack(){for(const e of this._allTracks)for(const t of e)yield t}get audioTracks(){return this._audioTracks}resolveGuids(e){this._guidsMap=e}invokePauseChangedMethodsOnTracks(){var e;for(const t of this.forEachTrack())(e=t.onPauseChanged)==null||e.call(t)}invokeStateChangedMethodsOnTracks(){var e;for(const t of this.forEachTrack())(e=t.onStateChanged)==null||e.call(t,this._isPlaying)}*internalUpdate(){for(;this._isPlaying&&this.activeAndEnabled;)!this._isPaused&&this._isPlaying&&(this._time+=this.context.time.deltaTime*this.speed,this.internalEvaluate()),yield}internalEvaluate(e=!1){if(!this.isValid())return;let t=this._time;switch(this.extrapolationMode){case 0:this._speed>0?t=Math.min(t,this._duration):this._speed<0&&(t=Math.max(t,0)),this._time=t;break;case 1:t%=this._duration,this._time=t;break;case 2:if(t>this._duration){this.stop();return}break}const i=this._time;for(const n of this.playableAsset.tracks)if(!n.muted)switch(n.type){case zo.Activation:if(!e&&!this._isPlaying)continue;for(let r=0;r<n.outputs.length;r++){const o=n.outputs[r];if(typeof o=="object"){let a=!1;if(n.clips)for(const c of n.clips)c.start<=i&&i<=c.end&&(a=!0);const l=o;l.visible!==void 0&&l.visible!==a&&(l.visible=a,Zm&&console.warn(this.name,"set ActivationTrack-"+r,l.name,a,i))}}break}if(!this._isStopping)for(const n of this._animationTracks)n.evaluate(i);for(const n of this._audioTracks)n.evaluate(i);for(const n of this._signalTracks)n.evaluate(i);for(const n of this._controlTracks)n.evaluate(i);for(const n of this._customTracks)n.evaluate(i)}resolveBindings(){if(this._clonedPlayableAsset||(this._clonedPlayableAsset=!0,this.playableAsset=__(this.playableAsset)),!this.playableAsset||!this.playableAsset.tracks)return;const e=this.findRoot(this.gameObject);for(const t of this.playableAsset.tracks){for(let i=t.outputs.length-1;i>=0;i--){let n=t.outputs[i];if(typeof n=="string"){this._guidsMap&&this._guidsMap[n]&&(n=this._guidsMap[n]);const r=se.findByGuid(n,e);r===null||typeof r!="object"?(t.outputs.splice(i,1),console.warn("Failed to resolve binding",n,t.name,t.type)):(Zm&&console.log("Resolved binding",n,"to",r),t.outputs[i]=r)}else if(n===null){if(t.outputs.splice(i,1),RB.createTrackFunctions[t.type])continue;t.type!==zo.Audio&&t.type!==zo.Control&&t.type!==zo.Marker&&t.type!==zo.Signal&&console.warn("Missing binding",n,t.name,t.type,this.name,this.playableAsset.name)}}if(t.type===zo.Control&&t.clips)for(let i=0;i<t.clips.length;i++){const n=t.clips[i];let r=n.asset.sourceObject;if(typeof r=="string"){this._guidsMap&&this._guidsMap[r]&&(r=this._guidsMap[r]);const o=se.findByGuid(r,e);o===null||typeof o!="object"?console.warn("Failed to resolve sourceObject binding",r,t.name,n):(Zm&&console.log("Resolved binding",r,"to",o),n.asset.sourceObject=o)}}}}findRoot(e){return e.parent?this.findRoot(e.parent):e}updateTimelineDuration(){if(this._duration=0,!(!this.playableAsset||!this.playableAsset.tracks)){for(const e of this.playableAsset.tracks)if(e.muted!==!0){if(e.clips)for(const t of e.clips)t.end>this._duration&&(this._duration=t.end);if(e.markers)for(const t of e.markers)t.time>this._duration&&(this._duration=t.time+.001)}}}setupAndCreateTrackHandlers(){var t,i,n;if(this._animationTracks.length=0,this._audioTracks.length=0,this._signalTracks.length=0,!this.playableAsset)return;let e=se.findObjectOfType(sd,this.context);for(const r of this.playableAsset.tracks){const o=r.type,a=RB.createTrackFunctions[o];if(a!=null){const l=a(this,r);if(typeof l.evaluate=="function"){l.director=this,l.track=r,this._customTracks.push(l);continue}}if(r.type===zo.Animation){if(!r.clips||r.clips.length<=0){Zm&&console.warn("Animation track has no clips",r);continue}for(let l=r.outputs.length-1;l>=0;l--){let c=r.outputs[l];if(c instanceof Ae){const u=se.getOrAddComponent(c,or);u&&(c=u)}const h=(t=c==null?void 0:c.gameObject)==null?void 0:t.animations;if(h){const u=new AE;u.trackOffset=r.trackOffset,u.director=this,u.track=r;for(let f=0;f<r.clips.length;f++){const p=r.clips[f],m=p.asset;if(!m){console.error(`Timeline ${this.name}: clip #${f} on track "${r.name}" has no animation data`);continue}const y=m.clip;let g=y;if((typeof g=="string"||typeof g=="number")&&(g=h.find(_=>_.name===y)),!g){console.warn("Could not find animationClip for model",p,r.name,this.name,(i=this.playableAsset)==null?void 0:i.name);continue}c instanceof or&&c.runtimeAnimatorController&&(c.__internalDidAwakeAndStart||c.initializeRuntimeAnimatorController(),c.runtimeAnimatorController.mixer||c.runtimeAnimatorController.bind(c),u.mixer=c.runtimeAnimatorController.mixer),u.mixer||(u.mixer=new R1(c.gameObject),this.context.animations.registerAnimationMixer(u.mixer)),u.clips.push(g),u.mixer.uncacheAction(g),u.createHooks(p.asset,g);const A=u.mixer.clipAction(g);u.actions.push(A),u.models.push(p)}this._animationTracks.push(u)}}}else if(r.type===zo.Audio){if(!r.clips||r.clips.length<=0)continue;const l=new ip;l.director=this,l.track=r,l.audioSource=r.outputs.find(c=>c instanceof Un),this._audioTracks.push(l),e||(e=(n=this.context.mainCameraComponent)==null?void 0:n.gameObject.addNewComponent(sd)),l.listener=e.listener;for(let c=0;c<r.clips.length;c++){const h=r.clips[c];l.addModel(h)}}else if(r.type===zo.Marker){const l=new q0;if(l.director=this,l.track=r,r.markers)for(const c of r.markers)switch(c.type){case QO.Signal:l.models.push(c),l.didTrigger.push(!1);break}if(l!==null&&l.models.length>0){const c=se.getComponent(this.gameObject,Vy);c&&(l.receivers.push(c),this._signalTracks.push(l))}}else if(r.type===zo.Signal){const l=new q0;if(l.director=this,l.track=r,r.markers)for(const c of r.markers)l.models.push(c),l.didTrigger.push(!1);for(const c of r.outputs)l.receivers.push(c);this._signalTracks.push(l)}else if(r.type===zo.Control){const l=new vE;if(l.director=this,l.track=r,r.clips)for(const c of r.clips)l.models.push(c);l.resolveSourceObjects(this.context),this._controlTracks.push(l)}}}setAudioTracksAllowPlaying(e){for(const t of this._audioTracks)t.onAllowAudioChanged(e)}registerAnimationCallback(e){this.animationCallbackReceivers.push(e)}unregisterAnimationCallback(e){const t=this.animationCallbackReceivers.indexOf(e);t!==-1&&this.animationCallbackReceivers.splice(t,1)}},d(fR,"createTrackFunctions",{}),fR);let fd=RB;wj([x()],fd.prototype,"playOnAwake",2);wj([x()],fd.prototype,"extrapolationMode",2);const DS=Symbol("objectIsAnimatedData");function Ez(s,e,t){if(!s)return;if(s[DS]===void 0){if(!t)return;s[DS]=new Set}const i=s[DS];t?i.add(e):i.has(e)&&i.delete(e)}function tpe(s){if(!s)return!1;const e=s[DS];return e!==void 0&&e.size>0}ui.registerCallback(Ti.ContextCreated,s=>{const e=s.context.domElement.getAttribute("autoplay");if(e!==void 0&&(e===""||e==="true"||e==="1")&&s.files)for(const t of s.files)se.foreachComponent(t.file.scene,n=>{if(n.enabled!==!1){if(n instanceof Pr&&n.playAutomatically||n instanceof or||n instanceof fd&&n.playOnAwake===!0)return!0;if(n instanceof Pr)return n.playAutomatically=!0,!0;if(n instanceof fd)return n.playOnAwake=!0,!0}},!0)!==!0&&gy.assignAnimationsFromFile(t.file,{createAnimationComponent:(n,r)=>xl(n,Pr)})});class ipe{constructor(){d(this,"_context")}get context(){return this._context??Dt.Current}get isStateMachineBehaviour(){return!0}}class Ev{constructor(e,t,i,n){d(this,"name");d(this,"nameHash");d(this,"normalizedTime");d(this,"length");d(this,"speed");d(this,"action");d(this,"hasTransitions");var r;this.name=e.name,this.nameHash=e.hash,this.normalizedTime=t,this.length=i,this.speed=n,this.action=e.motion.action||null,this.hasTransitions=((r=e.transitions)==null?void 0:r.length)>0||!1}}function Sj(s,e){return{name:"Empty",isLooping:!1,guid:(e==null?void 0:e.generateUUID())??di.generateUUID(),index:-1,clip:new no(s,0,[])}}var Lu=(s=>(s[s.If=1]="If",s[s.IfNot=2]="IfNot",s[s.Greater=3]="Greater",s[s.Less=4]="Less",s[s.Equals=6]="Equals",s[s.NotEqual=7]="NotEqual",s))(Lu||{}),jO=(s=>(s[s.Float=1]="Float",s[s.Int=3]="Int",s[s.Bool=4]="Bool",s[s.Trigger=9]="Trigger",s))(jO||{});const Cs=ie("debuganimatorcontroller"),xw=ie("debugrootmotion");class ia{constructor(e){d(this,"_speed",1);d(this,"normalizedStartOffset",0);d(this,"animator");d(this,"model");d(this,"_mixer");d(this,"_activeState");d(this,"_activeStates",[]);d(this,"_heldActions",[]);d(this,"rootMotionHandler");this.model=e,Cs&&console.log(this)}static createFromClips(e,t={looping:!1,autoTransition:!0,transitionDuration:0}){const i=[];for(let o=0;o<e.length;o++){const a=e[o],l=[];if(t.autoTransition!==!1){const h=t.transitionDuration??0,u=h/a.duration;let f=o;(t.autoTransition===void 0||t.autoTransition===!0)&&(f=(o+1)%e.length),l.push({exitTime:1-u,offset:0,duration:h,hasExitTime:!0,destinationState:f,conditions:[]})}const c={name:a.name,hash:o,motion:{name:a.name,clip:a,isLooping:(t==null?void 0:t.looping)??!1},transitions:l,behaviours:[]};i.push(c)}const n={name:"AnimatorController",guid:new ks(Date.now()).generateUUID(),parameters:[],layers:[{name:"Base Layer",stateMachine:{defaultState:0,states:i}}]};return new ia(n)}play(e,t=-1,i=Number.NEGATIVE_INFINITY,n=0){if(t<0)t=0;else if(t>=this.model.layers.length){console.warn("invalid layer");return}const o=this.model.layers[t].stateMachine;for(const a of o.states)if(a.name===e||a.hash===e){Cs&&console.log("transition to ",a),this.transitionTo(a,n,i);return}console.warn("Could not find "+e+" to play")}reset(){this.setStartTransition()}setBool(e,t){var n,r;const i=typeof e=="string"?"name":"hash";return(r=(n=this.model)==null?void 0:n.parameters)==null?void 0:r.filter(o=>o[i]===e).forEach(o=>o.value=t)}getBool(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??!1}setFloat(e,t){var r,o;const i=typeof e=="string"?"name":"hash",n=(o=(r=this.model)==null?void 0:r.parameters)==null?void 0:o.filter(a=>a[i]===e);return n.forEach(a=>a.value=t),(n==null?void 0:n.length)>0}getFloat(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??0}setInteger(e,t){var n,r;const i=typeof e=="string"?"name":"hash";return(r=(n=this.model)==null?void 0:n.parameters)==null?void 0:r.filter(o=>o[i]===e).forEach(o=>o.value=t)}getInteger(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??0}setTrigger(e){var i,n;Cs&&console.log("SET TRIGGER",e);const t=typeof e=="string"?"name":"hash";return(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.filter(r=>r[t]===e).forEach(r=>r.value=!0)}resetTrigger(e){var i,n;const t=typeof e=="string"?"name":"hash";return(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.filter(r=>r[t]===e).forEach(r=>r.value=!1)}getTrigger(e){var i,n,r;const t=typeof e=="string"?"name":"hash";return((r=(n=(i=this.model)==null?void 0:i.parameters)==null?void 0:n.find(o=>o[t]===e))==null?void 0:r.value)??!1}isInTransition(){return this._activeStates.length>1}setSpeed(e){this._speed=e}FindState(e){return this.findState(e)}findState(e){if(!e)return null;if(Array.isArray(this.model.layers)){for(const t of this.model.layers)for(const i of t.stateMachine.states)if(i.name===e||i.hash==e)return i}return null}getCurrentStateInfo(){if(!this._activeState)return null;const e=this._activeState.motion.action;if(!e)return null;const t=this._activeState.motion.clip.duration,i=t<=0?0:Math.abs(e.time/t);return new Ev(this._activeState,i,t,this._speed)}get currentAction(){if(!this._activeState)return null;const e=this._activeState.motion.action;return e||null}get context(){var e;return(e=this.animator)==null?void 0:e.context}get mixer(){return this._mixer}dispose(){var e;if(this._mixer.stopAllAction(),this.animator){this._mixer.uncacheRoot(this.animator.gameObject);for(const t of this._activeStates)t.motion.clip&&this.mixer.uncacheAction(t.motion.clip,this.animator.gameObject)}(e=this.context)==null||e.animations.unregisterAnimationMixer(this._mixer)}bind(e){var t,i;e?this.animator!==e&&(this._mixer&&(this._mixer.stopAllAction(),(t=this.context)==null||t.animations.unregisterAnimationMixer(this._mixer)),this.animator=e,this._mixer=new R1(this.animator.gameObject),(i=this.context)==null||i.animations.registerAnimationMixer(this._mixer),this.createActions(this.animator)):console.error("AnimatorController.bind: animator is null")}clone(){if(typeof this.model=="string")return console.warn("AnimatorController has not been resolved, can not create model from string",this.model),null;Cs&&console.warn("AnimatorController clone()",this.model);const e=__(this.model,(i,n,r)=>r==null?!0:!(r.type==="Object3D"||r.isObject3D===!0||S5(r)||r.tracks!==void 0||r instanceof ia));return console.assert(e!==this.model),new ia(e)}update(e){var i,n;if(!this.animator)return;this.evaluateTransitions(),this.updateActiveStates(e);const t=this.animator.context.time.deltaTime;this.animator.applyRootMotion&&((i=this.rootMotionHandler)==null||i.onBeforeUpdate(e)),this._mixer.update(t),this.animator.applyRootMotion&&((n=this.rootMotionHandler)==null||n.onAfterUpdate(e))}get activeState(){return this._activeState}updateActiveStates(e){for(let t=0;t<this._activeStates.length;t++){const i=this._activeStates[t],n=i.motion;if(!n.action)this._activeStates.splice(t,1),t--;else{const r=n.action;r.weight=e,r.getEffectiveWeight()<=0&&!r.isRunning()&&(Cs&&console.debug("REMOVE",i.name,r.getEffectiveWeight(),r.isRunning(),r.isScheduled()),this._activeStates.splice(t,1),t--)}}}setStartTransition(){var e;this.model.layers.length>1&&(Cs||ct())&&console.warn("Multiple layers are not supported yet "+((e=this.animator)==null?void 0:e.name));for(const t of this.model.layers){const i=t.stateMachine;i.defaultState===void 0&&(Cs&&console.warn("AnimatorController default state is undefined, will assign state 0 as default",t),i.defaultState=0);const n=i.states[i.defaultState];this.transitionTo(n,0,this.normalizedStartOffset);break}}evaluateTransitions(){var r;let e=!1;if(!this._activeState){if(this.setStartTransition(),!this._activeState)return;e=!0}const t=this._activeState,i=t.motion.action;for(const o of t.transitions){if(!o.hasExitTime&&o.conditions.length<=0)continue;let a=!0;for(const l of o.conditions)if(!this.evaluateCondition(l)){a=!1;break}if(a)if(i){const l=t.motion.clip.duration,c=l<=0?1:Math.abs(i.time/l);let h=o.exitTime;i.timeScale<0&&(h=1-h);let u=!1;if(o.hasExitTime?i.timeScale>0?u=c>=o.exitTime:i.timeScale<0&&(u=1-c>=o.exitTime):u=!0,u){for(const f of o.conditions){const p=this.model.parameters.find(m=>m.name===f.parameter);(p==null?void 0:p.type)===jO.Trigger&&p.value&&(p.value=!1)}if(i.clampWhenFinished=!0,Cs){const f=this.getState(o.destinationState,0);console.log(`Transition to ${o.destinationState} / ${f==null?void 0:f.name}`,o,`
5672
5672
  Timescale: `+i.timeScale,`
5673
5673
  Normalized time: `+c.toFixed(3),`
5674
5674
  Exit Time: `+h,o.hasExitTime)}this.transitionTo(o.destinationState,o.duration,o.offset);return}}else{this.transitionTo(o.destinationState,o.duration,o.offset);return}}i&&this.setTimescale(i,t);let n=!1;if(t.motion.isLooping&&i&&(i.time>=i.getClip().duration?(n=!0,i.reset(),i.time=0,i.play()):i.time<=0&&i.timeScale<0&&(n=!0,i.reset(),i.time=i.getClip().duration,i.play())),!n&&t&&!e&&i&&this.animator&&t.behaviours){const o=i==null?void 0:i.getClip().duration,a=i.time/o,l=new Ev(this._activeState,a,o,this._speed);for(const c of t.behaviours)c.instance&&((r=c.instance.onStateUpdate)==null||r.call(c.instance,this.animator,l,0))}}setTimescale(e,t){let i=t.speed??1;t.speedParameter&&(i*=this.getFloat(t.speedParameter)),i!==void 0&&(e.timeScale=i*this._speed)}getState(e,t){return typeof e=="number"&&(e==-1&&(e=this.model.layers[t].stateMachine.defaultState,e===void 0&&(Cs&&console.warn("AnimatorController default state is undefined: ",this.model,"Layer: "+t),e=0)),e=this.model.layers[t].stateMachine.states[e]),e}releaseHeldActions(e){for(const t of this._heldActions)t.fadeOut(e);this._heldActions.length=0}transitionTo(e,t,i){var h,u,f,p,m,y,g,A;if(!this.animator)return;const n=0;if(e=this.getState(e,n),!(e!=null&&e.motion)||!e.motion.clip||!(e.motion.clip instanceof no))return;const r=this._activeState===e;if(r){const _=e.motion;if(!_.action_loopback&&_.clip){const v=this.rootMotionHandler?this.animator.gameObject.matrix.clone():null;this._mixer.uncacheAction(_.clip,this.animator.gameObject),v&&v.decompose(this.animator.gameObject.position,this.animator.gameObject.quaternion,this.animator.gameObject.scale),_.action_loopback=this.createAction(_.clip)}}if((h=this._activeState)!=null&&h.behaviours&&this._activeState.motion.action){const _=(u=this._activeState)==null?void 0:u.motion.clip.duration,v=this._activeState.motion.action.time/_,b=new Ev(this._activeState,v,_,this._speed);for(const S of this._activeState.behaviours)(p=(f=S.instance)==null?void 0:f.onStateExit)==null||p.call(S.instance,this.animator,b,n)}const o=(m=this._activeState)==null?void 0:m.motion.action;r&&(e.motion.action=e.motion.action_loopback,e.motion.action_loopback=o);const a=this._activeState;this._activeState=e;const l=(y=e.motion)==null?void 0:y.action,c=e.motion.clip;if((c==null?void 0:c.duration)<=0&&c.tracks.length<=0?o&&this._heldActions.push(o):o&&(o.fadeOut(t),this.releaseHeldActions(t)),l){if(i=Math.max(0,Math.min(1,i)),e.cycleOffsetParameter){let v=this.getFloat(e.cycleOffsetParameter);typeof v=="number"?(v<0&&(v+=1),i+=v,i%=1):Cs&&console.warn("AnimatorController cycle offset parameter is not a number",e.cycleOffsetParameter)}else typeof e.cycleOffset=="number"&&(i+=e.cycleOffset,i%=1);l.isRunning()&&l.stop(),l.reset(),l.enabled=!0,this.setTimescale(l,e);const _=e.motion.clip.duration;if(l.time=r?0:i*_,l.timeScale<0&&(l.time=_-l.time),l.clampWhenFinished=!0,l.setLoop(p0,0),t>0?l.fadeIn(t):l.weight=1,l.play(),this.rootMotionHandler&&this.rootMotionHandler.onStart(l),this._activeStates.includes(e)||this._activeStates.push(e),this._activeState.behaviours){const v=new Ev(e,i,_,this._speed);for(const b of this._activeState.behaviours)(A=(g=b.instance)==null?void 0:g.onStateEnter)==null||A.call(b.instance,this.animator,v,n)}}else Cs&&(e.__warned_no_motion||(e.__warned_no_motion=!0,console.warn("No action",e.motion,this)));Cs&&console.log("TRANSITION FROM "+(a==null?void 0:a.name)+" TO "+e.name,t,o,l,l==null?void 0:l.getEffectiveTimeScale(),l==null?void 0:l.getEffectiveWeight(),l==null?void 0:l.isRunning(),l==null?void 0:l.isScheduled(),l==null?void 0:l.paused)}createAction(e){var i,n;if(this._mixer.existingAction(e)&&this._mixer.uncacheAction(e,(i=this.animator)==null?void 0:i.gameObject),(n=this.animator)!=null&&n.applyRootMotion){this.rootMotionHandler||(this.rootMotionHandler=new npe(this));const r=this.animator.gameObject;return this.rootMotionHandler.createClip(this._mixer,r,e)}else return this._mixer.clipAction(e)}evaluateCondition(e){const t=this.model.parameters.find(i=>i.name===e.parameter);if(!t)return!1;switch(e.mode){case Lu.If:return t.value===!0;case Lu.IfNot:return t.value===!1;case Lu.Greater:return t.value>e.threshold;case Lu.Less:return t.value<e.threshold;case Lu.Equals:return t.value===e.threshold;case Lu.NotEqual:return t.value!==e.threshold}return!1}createActions(e){var t,i,n,r;Cs&&console.log("AnimatorController createActions",this.model);for(const o of this.model.layers){const a=o.stateMachine;for(let l=0;l<a.states.length;l++){const c=a.states[l];c.transitions||(c.transitions=[]);for(const h of c.transitions)h.conditions||(h.conditions=[]);if(c.motion||(Cs&&console.warn("No motion",c),c.motion=Sj(c.name)),this.animator&&c.motion.clips){const h=(t=c.motion.clips)==null?void 0:t.find(u=>{var f,p;return u.node.name===((p=(f=this.animator)==null?void 0:f.gameObject)==null?void 0:p.name)});h?c.motion.clip=h.clip:(Cs||ct())&&console.warn('Could not find clip for animator "'+((n=(i=this.animator)==null?void 0:i.gameObject)==null?void 0:n.name)+'"',c.motion.clips.map(u=>u.node.name))}if(!c.motion.clip){Cs&&console.warn("No clip assigned to state",c);const h=new no(void 0,void 0,[]);c.motion.clip=h}if((r=c.motion)!=null&&r.clip){const h=c.motion.clip;if(h instanceof no){const u=this.createAction(h);c.motion.action=u}else(Cs||ct())&&console.warn("No valid animationclip assigned",c)}if(c.behaviours&&Array.isArray(c.behaviours))for(const h of c.behaviours){if(!(h!=null&&h.typeName))continue;const u=J.get(h.typeName),f=new u;f.isStateMachineBehaviour&&(f._context=this.context??void 0,my(f,h.properties),h.instance=f),Cs&&console.log("Created animator controller behaviour",c.name,h.typeName,h.properties,f)}}}}*enumerateActions(){if(this.model.layers)for(const e of this.model.layers){const t=e.stateMachine;for(let i=0;i<t.states.length;i++){const n=t.states[i];n!=null&&n.motion&&(n.motion.action&&(yield n.motion.action),n.motion.action_loopback&&(yield n.motion.action_loopback))}}}}class Mz{constructor(e,t){d(this,"track");d(this,"createdInterpolant");d(this,"originalEvaluate");d(this,"customEvaluate");this.track=e;const i=e,n=i.createInterpolant.bind(e);i.createInterpolant=()=>(i.createInterpolant=n,this.createdInterpolant=n(),this.originalEvaluate=this.createdInterpolant.evaluate.bind(this.createdInterpolant),this.customEvaluate=r=>{if(!this.originalEvaluate)return;const o=this.originalEvaluate(r);return t(r,o)},this.createdInterpolant.evaluate=this.customEvaluate,this.createdInterpolant)}dispose(){this.createdInterpolant&&this.originalEvaluate&&(this.createdInterpolant.evaluate=this.originalEvaluate),this.track=void 0,this.createdInterpolant=null,this.originalEvaluate=void 0,this.customEvaluate=void 0}}const fs=class{constructor(e,t,i,n,r){d(this,"_action");d(this,"root");d(this,"clip");d(this,"positionWrapper",null);d(this,"rotationWrapper",null);d(this,"context");d(this,"positionChange",new w);d(this,"rotationChange",new Ce);d(this,"_prevTime",0);if(this.context=e,this.root=t,this.clip=i,fs.firstKeyframeRotation[this.cacheId]||(fs.firstKeyframeRotation[this.cacheId]=new Ce),r){const o=r.values;fs.firstKeyframeRotation[this.cacheId].set(o[0],o[1],o[2],o[3])}fs.spaceRotation[this.cacheId]||(fs.spaceRotation[this.cacheId]=new Ce),fs.effectiveSpaceRotation[this.cacheId]||(fs.effectiveSpaceRotation[this.cacheId]=new Ce),fs.clipOffsetRotation[this.cacheId]=new Ce,r&&fs.clipOffsetRotation[this.cacheId].set(r.values[0],r.values[1],r.values[2],r.values[3]).invert(),this.handlePosition(i,n),this.handleRotation(i,r)}set action(e){this._action=e}get action(){return this._action}get cacheId(){return this.root.uuid}onStart(e){if(e.getClip()!==this.clip)return;fs.lastObjRotation[this.cacheId]||(fs.lastObjRotation[this.cacheId]=this.root.quaternion.clone());const t=fs.lastObjRotation[this.cacheId];if(fs.spaceRotation[this.cacheId].copy(t),xw){const i=new mi().setFromQuaternion(t);console.log("START",this.clip.name,it.toDegrees(i.y),this.root.position.z)}}getClipRotationOffset(){return fs.clipOffsetRotation[this.cacheId]}handlePosition(e,t){if(t){const i=this.root;xw&&i.add(new na),fs.lastObjPosition[this.cacheId]||(fs.lastObjPosition[this.cacheId]=this.root.position.clone());const n=new w,r=new w;this.positionWrapper=new Mz(t,(o,a)=>{const l=this.action.getEffectiveWeight();return xw&&i.position.length()>8&&i.position.set(0,i.position.y,0),o>this._prevTime&&(n.set(a[0],a[1],a[2]),n.sub(r),n.multiplyScalar(l),n.applyQuaternion(this.getClipRotationOffset()),n.applyQuaternion(i.quaternion),this.positionChange.copy(n)),r.fromArray(a),this._prevTime=o,a[0]=0,a[1]=0,a[2]=0,a})}}handleRotation(e,t){if(t){if(xw){const o=t.values,a=new mi().setFromQuaternion(new Ce(o[0],o[1],o[2],o[3]));console.log(e.name,t.name,"FIRST ROTATION IN TRACK",it.toDegrees(a.y));const l=t.values.length-4,c=new Ce().set(o[l],o[l+1],o[l+2],o[l+3]),h=new mi().setFromQuaternion(c);console.log(e.name,t.name,"LAST ROTATION IN TRACK",it.toDegrees(h.y))}let i=0;const n=new Ce,r=new Ce;this.rotationWrapper=new Mz(t,(o,a)=>(o>i&&(r.set(a[0],a[1],a[2],a[3]),n.invert(),r.multiply(n),this.rotationChange.copy(r)),n.fromArray(a),i=o,a[0]=0,a[1]=0,a[2]=0,a[3]=1,a))}}onBeforeUpdate(e){this.positionChange.set(0,0,0),this.rotationChange.set(0,0,0,1)}onAfterUpdate(e){return!this.action||(e*=this.action.getEffectiveWeight(),e<=0)?!1:(this.positionChange.multiplyScalar(e),this.rotationChange.slerp(fs.identityQuaternion,1-e),!0)}};let Ql=fs;d(Ql,"lastObjPosition",{}),d(Ql,"lastObjRotation",{}),d(Ql,"firstKeyframeRotation",{}),d(Ql,"spaceRotation",{}),d(Ql,"effectiveSpaceRotation",{}),d(Ql,"clipOffsetRotation",{}),d(Ql,"identityQuaternion",new Ce);class npe{constructor(e){d(this,"controller");d(this,"handler",[]);d(this,"root");d(this,"basePosition",new w);d(this,"baseQuaternion",new Ce);d(this,"baseRotation",new mi);d(this,"summedPosition",new w);d(this,"summedRotation",new Ce);this.controller=e}createClip(e,t,i){this.root=t,t&&"name"in t&&t.name;const n=this.findRootTrack(i,".position"),r=this.findRootTrack(i,".quaternion"),o=new Ql(this.controller.context,t,i,n,r);this.handler.push(o);const a=e.clipAction(i);return o.action=a,a}onStart(e){for(const t of this.handler)t.onStart(e)}onBeforeUpdate(e){this.basePosition.copy(this.root.position),this.baseQuaternion.copy(this.root.quaternion);for(const t of this.handler)t.onBeforeUpdate(e)}onAfterUpdate(e){if(!(e<=0)){this.root.position.copy(this.basePosition),this.root.quaternion.copy(this.baseQuaternion),this.summedPosition.set(0,0,0),this.summedRotation.set(0,0,0,1);for(const t of this.handler)t.onAfterUpdate(e)&&(this.summedPosition.add(t.positionChange),this.summedRotation.multiply(t.rotationChange));this.root.position.add(this.summedPosition),this.root.quaternion.multiply(this.summedRotation)}}findRootTrack(e,t){const i=e.tracks;if(!i)return null;for(const n of i)if(n.name.endsWith(t))return n;return null}}class spe extends Pl{onSerialize(e,t){}onDeserialize(e,t){if(t.type===ia&&(e==null?void 0:e.__type)==="AnimatorController")return new ia(e)}}new spe(ia);var rpe=Object.defineProperty,ope=Object.getOwnPropertyDescriptor,_E=(s,e,t,i)=>{for(var n=i>1?void 0:i?ope(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&rpe(e,t,n),n};const ga=ie("debuganimator");class or extends Ie{constructor(){super(...arguments);d(this,"applyRootMotion",!1);d(this,"hasRootMotion",!1);d(this,"keepAnimatorControllerStateOnDisable",!1);d(this,"_parametersAreDirty",!1);d(this,"_isDirty",!1);d(this,"_speed",1);d(this,"_normalizedStartOffset",0);d(this,"_animatorController",null);d(this,"_initializeWithRuntimeAnimatorController")}get isAnimationComponent(){return!0}set runtimeAnimatorController(t){var i;this._animatorController&&this._animatorController.model===t||(t?t instanceof ia?(t.animator&&t.animator!==this&&(console.warn("AnimatorController can not be bound to multiple animators",(i=t.model)==null?void 0:i.name),t.model||console.error("AnimatorController has no model"),t=new ia(t.model)),this._animatorController=t,this._animatorController.bind(this)):(ga&&console.log("Assign animator controller",t,this),this._animatorController=new ia(t),this.__didAwake&&this._animatorController.bind(this)):this._animatorController=null)}get runtimeAnimatorController(){return this._animatorController}getCurrentStateInfo(){var t;return(t=this.runtimeAnimatorController)==null?void 0:t.getCurrentStateInfo()}get currentAction(){var t;return((t=this.runtimeAnimatorController)==null?void 0:t.currentAction)||null}get parametersAreDirty(){return this._parametersAreDirty}get isDirty(){return this._isDirty}Play(t,i=-1,n=Number.NEGATIVE_INFINITY,r=0){this.play(t,i,n,r)}play(t,i=-1,n=Number.NEGATIVE_INFINITY,r=0){var o;(o=this.runtimeAnimatorController)==null||o.play(t,i,n,r),this._isDirty=!0}Reset(){this.reset()}reset(){var t;(t=this._animatorController)==null||t.reset(),this._isDirty=!0}SetBool(t,i){this.setBool(t,i)}setBool(t,i){var n,r;ga&&console.log("setBool",t,i),((n=this.runtimeAnimatorController)==null?void 0:n.getBool(t))!==i&&(this._parametersAreDirty=!0),(r=this.runtimeAnimatorController)==null||r.setBool(t,i)}GetBool(t){return this.getBool(t)}getBool(t){var n;const i=((n=this.runtimeAnimatorController)==null?void 0:n.getBool(t))??!1;return ga&&console.log("getBool",t,i),i}toggleBool(t){this.setBool(t,!this.getBool(t))}SetFloat(t,i){this.setFloat(t,i)}setFloat(t,i){var n,r;((n=this.runtimeAnimatorController)==null?void 0:n.getFloat(t))!==i&&(this._parametersAreDirty=!0),ga&&console.log("setFloat",t,i),(r=this.runtimeAnimatorController)==null||r.setFloat(t,i)}GetFloat(t){return this.getFloat(t)}getFloat(t){var n;const i=((n=this.runtimeAnimatorController)==null?void 0:n.getFloat(t))??-1;return ga&&console.log("getFloat",t,i),i}SetInteger(t,i){this.setInteger(t,i)}setInteger(t,i){var n,r;((n=this.runtimeAnimatorController)==null?void 0:n.getInteger(t))!==i&&(this._parametersAreDirty=!0),ga&&console.log("setInteger",t,i),(r=this.runtimeAnimatorController)==null||r.setInteger(t,i)}GetInteger(t){return this.getInteger(t)}getInteger(t){var n;const i=((n=this.runtimeAnimatorController)==null?void 0:n.getInteger(t))??-1;return ga&&console.log("getInteger",t,i),i}SetTrigger(t){this.setTrigger(t)}setTrigger(t){var i;this._parametersAreDirty=!0,ga&&console.log("setTrigger",t),(i=this.runtimeAnimatorController)==null||i.setTrigger(t)}ResetTrigger(t){this.resetTrigger(t)}resetTrigger(t){var i;this._parametersAreDirty=!0,ga&&console.log("resetTrigger",t),(i=this.runtimeAnimatorController)==null||i.resetTrigger(t)}GetTrigger(t){this.getTrigger(t)}getTrigger(t){var n;const i=(n=this.runtimeAnimatorController)==null?void 0:n.getTrigger(t);return ga&&console.log("getTrigger",t,i),i}IsInTransition(){return this.isInTransition()}isInTransition(){var t;return((t=this.runtimeAnimatorController)==null?void 0:t.isInTransition())??!1}SetSpeed(t){return this.setSpeed(t)}setSpeed(t){var i;t!==this._speed&&(ga&&console.log("setSpeed",t),this._speed=t,((i=this._animatorController)==null?void 0:i.animator)==this&&this._animatorController.setSpeed(t))}set minMaxSpeed(t){var i;this._speed=it.lerp(t.x,t.y,Math.random()),((i=this._animatorController)==null?void 0:i.animator)==this&&this._animatorController.setSpeed(this._speed)}set minMaxOffsetNormalized(t){var i;this._normalizedStartOffset=it.lerp(t.x,t.y,Math.random()),((i=this.runtimeAnimatorController)==null?void 0:i.animator)==this&&(this.runtimeAnimatorController.normalizedStartOffset=this._normalizedStartOffset)}awake(){ga&&console.log("ANIMATOR",this.name,this),this.gameObject&&this.initializeRuntimeAnimatorController()}initializeRuntimeAnimatorController(t=!1){const i=t||this.runtimeAnimatorController!==this._initializeWithRuntimeAnimatorController;if(this.runtimeAnimatorController&&i){const n=this.runtimeAnimatorController.clone();this._initializeWithRuntimeAnimatorController=n,n?(console.assert(this.runtimeAnimatorController!==n),this.runtimeAnimatorController=n,console.assert(this.runtimeAnimatorController===n),this.runtimeAnimatorController.bind(this),this.runtimeAnimatorController.setSpeed(this._speed),this.runtimeAnimatorController.normalizedStartOffset=this._normalizedStartOffset):console.warn("Could not clone animator controller",this.runtimeAnimatorController)}}onDisable(){var t;this.keepAnimatorControllerStateOnDisable||(t=this._animatorController)==null||t.reset()}onBeforeRender(){this._isDirty=!1,this._parametersAreDirty=!1,!tpe(this.gameObject)&&this._animatorController&&this._animatorController.update(1)}}_E([x()],or.prototype,"applyRootMotion",2);_E([x()],or.prototype,"hasRootMotion",2);_E([x()],or.prototype,"keepAnimatorControllerStateOnDisable",2);_E([x()],or.prototype,"runtimeAnimatorController",1);const $l=ie("debugusdzanimation"),PB=ie("debugusdzanimationserialization");class bE{constructor(e,t,i){d(this,"_start");d(this,"ext");d(this,"root");d(this,"clip");d(this,"speed");this.ext=e,this.root=t,this.clip=i}get start(){return this._start===void 0&&(this._start=this.ext.getStartTime01(this.root,this.clip)),this._start}get duration(){var e;return((e=this.clip)==null?void 0:e.duration)??es.restPoseClipDuration}}const ok=class{constructor(e,t,i){d(this,"clip");d(this,"pos");d(this,"rot");d(this,"scale");d(this,"root");d(this,"target");d(this,"duration",0);d(this,"useRootMotion",!1);this.root=e,this.target=t,this.clip=i,i?this.duration=i.duration:this.duration=ok.restPoseClipDuration;const n=se.getComponent(e,or);n&&(this.useRootMotion=n.applyRootMotion)}get frameRate(){return 60}addTrack(e){var t,i;if(!this.clip){console.error("This is a rest clip but you're trying to add tracks to it – this is likely a bug");return}e.name.endsWith("position")?this.pos=e:e.name.endsWith("quaternion")?this.rot=e:e.name.endsWith("scale")?this.scale=e:(e.name.endsWith("activeSelf")?console.warn("[USDZ] Animation of enabled/disabled state is not supported for USDZ export and will NOT be exported: "+e.name+" on "+(((t=this.root)==null?void 0:t.name)??this.target.name)+". Animate scale 0/1 instead."):console.warn("[USDZ] Animation track type not supported for USDZ export and will NOT be exported: "+e.name+" on "+(((i=this.root)==null?void 0:i.name)??this.target.name)+". Only .position, .rotation, .scale are supported."),ct()&&Ni("[USDZ] Some animations can't be exported. See console for details."))}getFrames(){var e,t,i,n,r,o;return this.clip?Math.max(((t=(e=this.pos)==null?void 0:e.times)==null?void 0:t.length)??0,((n=(i=this.rot)==null?void 0:i.times)==null?void 0:n.length)??0,((o=(r=this.scale)==null?void 0:r.times)==null?void 0:o.length)??0):2}getDuration(){return this.duration}getSortedTimesArray(e=!0,t=!0,i=!0){var l,c,h;if(!this.clip)return[0,this.duration];const n=(l=this.pos)==null?void 0:l.times,r=(c=this.rot)==null?void 0:c.times,o=(h=this.scale)==null?void 0:h.times,a=[];if(e&&n)for(const u of n)a.push(u);if(t&&r)for(const u of r)a.push(u);if(i&&o)for(const u of o)a.push(u);return a.includes(0)||a.push(0),a.sort((u,f)=>u-f),[...new Set(a)]}*getValues(e,t=!0,i=!0,n=!0){var f,p,m;const r=new w,o=new Ce,a=new w(1,1,1),l=this.target,c=t?(f=this.pos)==null?void 0:f.createInterpolant():void 0,h=i?(p=this.rot)==null?void 0:p.createInterpolant():void 0,u=n?(m=this.scale)==null?void 0:m.createInterpolant():void 0;c||r.set(l.position.x,l.position.y,l.position.z),h||o.set(l.quaternion.x,l.quaternion.y,l.quaternion.z,l.quaternion.w),u||a.set(l.scale.x,l.scale.y,l.scale.z);for(let y=0;y<e.length;y++){const g=e[y];if(c){const A=c.evaluate(g);r.set(A[0],A[1],A[2])}if(h){const A=h.evaluate(g);o.set(A[0],A[1],A[2],A[3])}if(u){const A=u.evaluate(g);a.set(A[0],A[1],A[2])}if(this.useRootMotion&&l===this.root){const A=new ye;A.compose(r,o,a),A.multiply(l.matrix),A.decompose(r,o,a)}yield{time:g,translation:r,rotation:o,scale:a,index:y}}}};let es=ok;d(es,"animationDurationPadding",1/60),d(es,"restPoseClipDuration",1/60);class j_{constructor(e){d(this,"dict",new Map);d(this,"rootTargetMap",new Map);d(this,"rootAndClipToRegisteredAnimationMap",new Map);d(this,"rootToRegisteredClip",new Map);d(this,"serializers",[]);d(this,"injectRestPoses",!1);d(this,"injectImplicitBehaviours",!1);this.injectRestPoses=e,this.injectImplicitBehaviours=e}get extensionName(){return"animation"}getStartTimeCode(){return!this.injectRestPoses||this.rootAndClipToRegisteredAnimationMap.size===0?0:(es.restPoseClipDuration+es.animationDurationPadding)*60}getEndTimeCode(){let e=0;for(const[t,i]of this.rootAndClipToRegisteredAnimationMap){const n=i.start+i.duration;n>e&&(e=n)}return e*60}getClipCount(e){var i;return((i=this.rootToRegisteredClip.get(e))==null?void 0:i.length)??0??0}getStartTime01(e,t){if(!t)return 0;const i=this.rootTargetMap.get(e);if(!i)return 0;const n=this.dict.get(i[0]);if(!n)return console.error("Trying to get start time for root that has no animation data",e,t,...this.dict),0;let r=0;for(let o=0;o<n.length&&n[o].clip!==t;o++)r+=n[o].getDuration()+es.animationDurationPadding;return r}registerAnimation(e,t){var c;if(!e)return null;this.rootTargetMap.has(e)||this.rootTargetMap.set(e,[]);const i=e.uuid+((t==null?void 0:t.uuid)??"-rest");if(this.rootAndClipToRegisteredAnimationMap.has(i))return this.rootAndClipToRegisteredAnimationMap.get(i);$l&&console.log("registerAnimation",e,t);const n=this.injectRestPoses?1:0,r=(((c=this.rootToRegisteredClip.get(e))==null?void 0:c.length)??0)+n,o=this.rootTargetMap.get(e),a=new Set(o);if(t&&t.tracks)for(const h of t.tracks){const u=Kt.parseTrackName(h.name),f=Kt.findNode(e,u.nodeName);if(!f){console.warn("no object found for track",h.name,"using "+e.name+" instead");continue}this.dict.has(f)||this.dict.set(f,[]);const p=this.dict.get(f);if(!p){console.warn("no transform data found for target ",f,"at slot "+r+", this is likely a bug");continue}a.delete(f),this.injectRestPoses&&!p[0]&&(p[0]=new es(null,f,null));let m=p[r];m||(m=new es(e,f,t),p[r]=m),m.addTrack(h),o!=null&&o.includes(f)||o==null||o.push(f)}$l&&console.log("Unregistered nodes for this clip",a,"clip",t,"at slot",r,"for root",e,"targets",o);for(const h of a){const u=this.dict.get(h);if(!u)continue;if(this.injectRestPoses&&!u[0]){console.warn("Adding rest pose for ",h,t,"at slot",r,"This is likely a bug, should have been added earlier.");const p=new es(null,h,null);u[0]=p}let f=u[r];f||($l&&console.log("Adding padding clip for ",h,t,"at slot",r),f=new es(e,h,t),u[r]=f)}const l=new bE(this,e,t);if(this.rootAndClipToRegisteredAnimationMap.set(i,l),$l&&console.log({root:e,clip:t,info:l}),t){const h=this.rootToRegisteredClip.get(e);h?h.push(t):this.rootToRegisteredClip.set(e,[t])}return l}onAfterHierarchy(e){$l&&console.log("Animation clips per animation target node",this.dict)}onAfterBuildDocument(e){var t,i;$l&&console.log("Animation data",{dict:this.dict,rootTargetMap:this.rootTargetMap,rootToRegisteredClip:this.rootToRegisteredClip});for(const n of this.rootTargetMap.keys()){const r=this.rootTargetMap.get(n);if(!r)continue;let o;const a=[];for(const l of r){const c=this.dict.get(l);if(!c){console.error("No data found for target on USDZ export – please report a bug!",l);continue}o===void 0&&(o=c==null?void 0:c.length),o!==(c==null?void 0:c.length)&&console.error("Different array lengths for targets – please report a bug!",c);for(let h=0;h<c.length;h++){let u=c[h];if(!u){const p=h-(this.injectRestPoses?1:0);c[h]=new es(null,l,this.rootToRegisteredClip.get(n)[p]),u=c[h]}const f=u.getDuration();if(a[h]===void 0)a[h]=f;else if(a[h]!==f){console.error("Error during UDSZ export: Encountered different animation durations for animated targets. Please report a bug!",{datas:c,target:l}),a[h]=f;continue}}}}for(const n of this.serializers){const r=(t=n.model)==null?void 0:t.parent,o=(r==null?void 0:r.isDynamic)===!0;PB&&console.log(o,(i=n.model)==null?void 0:i.parent),o&&n.registerCallback(r)}}onExportObject(e,t,i){se.foreachComponent(e,r=>{const o=r;typeof o.createAnimation=="function"&&o.createAnimation(this,t,i)},!1);const n=new ape(e,this.dict);this.serializers.push(n),n.registerCallback(t)}}class ape{constructor(e,t){d(this,"object");d(this,"dict");d(this,"model");d(this,"callback");this.object=e,this.dict=t}registerCallback(e){this.model&&this.callback&&this.model.removeEventListener("serialize",this.callback),this.callback||(this.callback=this.onSerialize.bind(this)),PB&&console.log("REPARENT",e),this.model=e,this.callback&&this.model.addEventListener("serialize",this.callback)}skinnedMeshExport(e,t){var r;const i=this.model,n=this.dict;if(i&&i.skinnedMesh){let o=function(I){const F=[];for(const[U,O]of I){let Q=`${U} : [`;const D=[];for(const k of O)D.push(`(${Is(k.x)}, ${Is(k.y)}, ${Is(k.z)})`);Q=Q.concat(D.join(", ")),Q=Q.concat("],"),F.push(Q)}return F},a=function(I){const F=[];for(const[U,O]of I){let Q=`${U} : [`;const D=[];for(const k of O)D.push(`(${Is(k.w)}, ${Is(k.x)}, ${Is(k.y)}, ${Is(k.z)})`);Q=Q.concat(D.join(", ")),Q=Q.concat("],"),F.push(Q)}return F},l=function(I){let F,U=!0;const O=new Map;for(const[D,k]of I){F===void 0&&(F=k.length),F!==k.length&&(U=!1);let z=0;for(const q of k)z++,q||(O.has(D)||O.set(D,[]),O.get(D).push(z))}$l&&console.log("Bone count: ",I.size,"TransformData entries per bone: ",F,"Undefined bone entries: ",O),console.assert(U,"All bones should have the same number of TransformData entries",I),console.assert(O.size===0,"All TransformData entries should be set",O);const Q=[];for(const[D,k]of I){const z=new Array;let q=0;for(let X=0;X<k.length;X++)z.push(q),q+=k[X].getDuration()+es.animationDurationPadding;for(let X=0;X<k.length;X++){const re=k[X],le=z[X];Q.length<=X&&Q.push({pos:[],rot:[],scale:[],timeOffset:le});const Me=Q[X];Me.pos.push(...re.getSortedTimesArray(!0,!1,!1)),Me.rot.push(...re.getSortedTimesArray(!1,!0,!1)),Me.scale.push(...re.getSortedTimesArray(!1,!1,!0))}}for(const D of Q)D.pos.sort((k,z)=>k-z),D.rot.sort((k,z)=>k-z),D.scale.sort((k,z)=>k-z),D.pos=[...new Set(D.pos)],D.rot=[...new Set(D.rot)],D.scale=[...new Set(D.scale)];return Q},c=function(I,F,U){const O=new Map,Q=new Map,D=new Map,k=F.length;for(const z of U){const q=I.get(z);let X;q?console.assert(q.length===k,"We should have the same number of TransformData entries for each bone",q,F):X=new es(null,z,null);for(let re=0;re<k;re++){const le=q?q[re]:X,Me=F[re];for(const{time:ne,translation:ge}of le.getValues(Me.pos,!0,!1,!1)){const Le=(ne+Me.timeOffset)*60;O.has(Le)||O.set(Le,new Array),O.get(Le).push(ge.clone())}for(const{time:ne,rotation:ge}of le.getValues(Me.rot,!1,!0,!1)){const Le=(ne+Me.timeOffset)*60;Q.has(Le)||Q.set(Le,new Array),Q.get(Le).push(ge.clone())}for(const{time:ne,scale:ge}of le.getValues(Me.scale,!1,!1,!0)){const Le=(ne+Me.timeOffset)*60;D.has(Le)||D.set(Le,new Array),D.get(Le).push(ge.clone())}}}return{position:O.size==0?void 0:O,quaternion:Q.size==0?void 0:Q,scale:D.size==0?void 0:D}},h=function(I){const F=[];for(const U of I)F.push(`(${Is(U.x)}, ${Is(U.y)}, ${Is(U.z)})`);return F.join(", ")},u=function(I){const F=[];for(const U of I)F.push(`(${Is(U.w)}, ${Is(U.x)}, ${Is(U.y)}, ${Is(U.z)})`);return F.join(", ")},f=function(I){const F=new Map;if($l){const U=new Array;for(const[O,Q]of n)U.push(O.uuid+": "+Q.length+" "+Q.map(D=>{var k;return(k=D.clip)==null?void 0:k.uuid.substring(0,6)}).join(" "));console.log(`getPerBoneTransformData
@@ -6150,7 +6150,7 @@ Texture:`,i),this.setLightmapDebugMaterial()):eg&&console.log("Use debuglightmap
6150
6150
  }
6151
6151
  `};class yL extends Lt{constructor(e){super({type:"LineMaterial",uniforms:Ey.clone(er.line.uniforms),vertexShader:er.line.vertexShader,fragmentShader:er.line.fragmentShader,clipping:!0}),this.isLineMaterial=!0,this.setValues(e)}get color(){return this.uniforms.diffuse.value}set color(e){this.uniforms.diffuse.value=e}get worldUnits(){return"WORLD_UNITS"in this.defines}set worldUnits(e){e===!0?this.defines.WORLD_UNITS="":delete this.defines.WORLD_UNITS}get linewidth(){return this.uniforms.linewidth.value}set linewidth(e){this.uniforms.linewidth&&(this.uniforms.linewidth.value=e)}get dashed(){return"USE_DASH"in this.defines}set dashed(e){e===!0!==this.dashed&&(this.needsUpdate=!0),e===!0?this.defines.USE_DASH="":delete this.defines.USE_DASH}get dashScale(){return this.uniforms.dashScale.value}set dashScale(e){this.uniforms.dashScale.value=e}get dashSize(){return this.uniforms.dashSize.value}set dashSize(e){this.uniforms.dashSize.value=e}get dashOffset(){return this.uniforms.dashOffset.value}set dashOffset(e){this.uniforms.dashOffset.value=e}get gapSize(){return this.uniforms.gapSize.value}set gapSize(e){this.uniforms.gapSize.value=e}get opacity(){return this.uniforms.opacity.value}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}get resolution(){return this.uniforms.resolution.value}set resolution(e){this.uniforms.resolution.value.copy(e)}get alphaToCoverage(){return"USE_ALPHA_TO_COVERAGE"in this.defines}set alphaToCoverage(e){this.defines&&(e===!0!==this.alphaToCoverage&&(this.needsUpdate=!0),e===!0?(this.defines.USE_ALPHA_TO_COVERAGE="",this.extensions.derivatives=!0):(delete this.defines.USE_ALPHA_TO_COVERAGE,this.extensions.derivatives=!1))}}const Qz=new w,jz=new w,Hs=new Ze,Vs=new Ze,Gl=new Ze,UI=new w,NI=new ye,Js=new $2,Wz=new w,Pw=new Ci,Bw=new kn,Hl=new Ze;let rc,op;function qz(s,e,t){return Hl.set(0,0,-e,1).applyMatrix4(s.projectionMatrix),Hl.multiplyScalar(1/Hl.w),Hl.x=op/t.width,Hl.y=op/t.height,Hl.applyMatrix4(s.projectionMatrixInverse),Hl.multiplyScalar(1/Hl.w),Math.abs(Math.max(Hl.x,Hl.y))}function Xge(s,e){const t=s.matrixWorld,i=s.geometry,n=i.attributes.instanceStart,r=i.attributes.instanceEnd,o=Math.min(i.instanceCount,n.count);for(let a=0,l=o;a<l;a++){Js.start.fromBufferAttribute(n,a),Js.end.fromBufferAttribute(r,a),Js.applyMatrix4(t);const c=new w,h=new w;rc.distanceSqToSegment(Js.start,Js.end,h,c),h.distanceTo(c)<op*.5&&e.push({point:h,pointOnLine:c,distance:rc.origin.distanceTo(h),object:s,face:null,faceIndex:a,uv:null,uv1:null})}}function Yge(s,e,t){const i=e.projectionMatrix,r=s.material.resolution,o=s.matrixWorld,a=s.geometry,l=a.attributes.instanceStart,c=a.attributes.instanceEnd,h=Math.min(a.instanceCount,l.count),u=-e.near;rc.at(1,Gl),Gl.w=1,Gl.applyMatrix4(e.matrixWorldInverse),Gl.applyMatrix4(i),Gl.multiplyScalar(1/Gl.w),Gl.x*=r.x/2,Gl.y*=r.y/2,Gl.z=0,UI.copy(Gl),NI.multiplyMatrices(e.matrixWorldInverse,o);for(let f=0,p=h;f<p;f++){if(Hs.fromBufferAttribute(l,f),Vs.fromBufferAttribute(c,f),Hs.w=1,Vs.w=1,Hs.applyMatrix4(NI),Vs.applyMatrix4(NI),Hs.z>u&&Vs.z>u)continue;if(Hs.z>u){const v=Hs.z-Vs.z,b=(Hs.z-u)/v;Hs.lerp(Vs,b)}else if(Vs.z>u){const v=Vs.z-Hs.z,b=(Vs.z-u)/v;Vs.lerp(Hs,b)}Hs.applyMatrix4(i),Vs.applyMatrix4(i),Hs.multiplyScalar(1/Hs.w),Vs.multiplyScalar(1/Vs.w),Hs.x*=r.x/2,Hs.y*=r.y/2,Vs.x*=r.x/2,Vs.y*=r.y/2,Js.start.copy(Hs),Js.start.z=0,Js.end.copy(Vs),Js.end.z=0;const y=Js.closestPointToPointParameter(UI,!0);Js.at(y,Wz);const g=di.lerp(Hs.z,Vs.z,y),A=g>=-1&&g<=1,_=UI.distanceTo(Wz)<op*.5;if(A&&_){Js.start.fromBufferAttribute(l,f),Js.end.fromBufferAttribute(c,f),Js.start.applyMatrix4(o),Js.end.applyMatrix4(o);const v=new w,b=new w;rc.distanceSqToSegment(Js.start,Js.end,b,v),t.push({point:b,pointOnLine:v,distance:rc.origin.distanceTo(b),object:s,face:null,faceIndex:f,uv:null,uv1:null})}}}class Kge extends fe{constructor(e=new Zj,t=new yL({color:Math.random()*16777215})){super(e,t),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const e=this.geometry,t=e.attributes.instanceStart,i=e.attributes.instanceEnd,n=new Float32Array(2*t.count);for(let o=0,a=0,l=t.count;o<l;o++,a+=2)Qz.fromBufferAttribute(t,o),jz.fromBufferAttribute(i,o),n[a]=a===0?0:n[a-1],n[a+1]=n[a]+Qz.distanceTo(jz);const r=new eC(n,2,1);return e.setAttribute("instanceDistanceStart",new Xo(r,1,0)),e.setAttribute("instanceDistanceEnd",new Xo(r,1,1)),this}raycast(e,t){const i=this.material.worldUnits,n=e.camera;n===null&&!i&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const r=e.params.Line2!==void 0&&e.params.Line2.threshold||0;rc=e.ray;const o=this.matrixWorld,a=this.geometry,l=this.material;op=l.linewidth+r,a.boundingSphere===null&&a.computeBoundingSphere(),Bw.copy(a.boundingSphere).applyMatrix4(o);let c;if(i)c=op*.5;else{const u=Math.max(n.near,Bw.distanceToPoint(rc.origin));c=qz(n,u,l.resolution)}if(Bw.radius+=c,rc.intersectsSphere(Bw)===!1)return;a.boundingBox===null&&a.computeBoundingBox(),Pw.copy(a.boundingBox).applyMatrix4(o);let h;if(i)h=op*.5;else{const u=Math.max(n.near,Pw.distanceToPoint(rc.origin));h=qz(n,u,l.resolution)}Pw.expandByScalar(h),rc.intersectsBox(Pw)!==!1&&(i?Xge(this,t):Yge(this,n,t))}}class $j extends Zj{constructor(){super(),this.isLineGeometry=!0,this.type="LineGeometry"}setPositions(e){const t=e.length-3,i=new Float32Array(2*t);for(let n=0;n<t;n+=3)i[2*n]=e[n],i[2*n+1]=e[n+1],i[2*n+2]=e[n+2],i[2*n+3]=e[n+3],i[2*n+4]=e[n+4],i[2*n+5]=e[n+5];return super.setPositions(i),this}setColors(e){const t=e.length-3,i=new Float32Array(2*t);for(let n=0;n<t;n+=3)i[2*n]=e[n],i[2*n+1]=e[n+1],i[2*n+2]=e[n+2],i[2*n+3]=e[n+3],i[2*n+4]=e[n+4],i[2*n+5]=e[n+5];return super.setColors(i),this}fromLine(e){const t=e.geometry;return this.setPositions(t.attributes.position.array),this}}class Jge extends Kge{constructor(e=new $j,t=new yL({color:Math.random()*16777215})){super(e,t),this.isLine2=!0,this.type="Line2"}}class RE extends Ie{}var Zge=Object.defineProperty,$ge=Object.getOwnPropertyDescriptor,Yp=(s,e,t,i)=>{for(var n=i>1?void 0:i?$ge(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&Zge(e,t,n),n};const Xz=ie("debugwebxr");class Ha extends Ie{constructor(){super(...arguments);d(this,"movementSpeed",1);d(this,"rotationStep",60);d(this,"useTeleport",!0);d(this,"useTeleportTarget",!1);d(this,"useTeleportFade",!1);d(this,"showRays",!0);d(this,"showHits",!0);d(this,"isXRMovementHandler",!0);d(this,"xrSessionMode","immersive-vr");d(this,"_didApplyRotation",!1);d(this,"_didTeleport",!1);d(this,"_lines",[]);d(this,"_hitDiscs",[]);d(this,"_hitDistances",[]);d(this,"hitPointRaycastFilter",t=>t.type==="SkinnedMesh"?"continue in children":!0)}onUpdateXR(t){const i=t.xr.rig;if(!(i!=null&&i.gameObject)||t.xr.isPassThrough)return;const n=t.xr.leftController,r=t.xr.rightController;n&&this.onHandleMovement(n,i.gameObject),r&&(this.onHandleRotation(r,i.gameObject),this.useTeleport&&this.onHandleTeleport(r,i.gameObject))}onLeaveXR(t){for(const i of this._lines)i.removeFromParent();for(const i of this._hitDiscs)i==null||i.removeFromParent()}onBeforeRender(){var t;(t=this.context.xr)!=null&&t.running&&(this.showRays&&this.renderRays(this.context.xr),this.showHits&&this.renderHits(this.context.xr))}onHandleMovement(t,i){const n=t.getStick("xr-standard-thumbstick"),r=new w(n.x,0,n.y);r.multiplyScalar(this.context.time.deltaTimeUnscaled*this.movementSpeed);const o=Ki(i);r.multiplyScalar(o.x),r.applyQuaternion(t.xr.poseOrientation),r.y=0,r.applyQuaternion(i.worldQuaternion),i.position.add(r),i.updateMatrixWorld()}onHandleRotation(t,i){const r=t.getStick("xr-standard-thumbstick").x;if(this._didApplyRotation)Math.abs(r)<.3&&(this._didApplyRotation=!1);else if(Math.abs(r)>.5){this._didApplyRotation=!0;const o=r>0?1:-1;i.rotateY(o*it.toRadians(this.rotationStep))}}onHandleTeleport(t,i){var r;const n=t.getStick("xr-standard-thumbstick");if(this._didTeleport)n.y<.2&&(this._didTeleport=!1);else if(n.y>.8){this._didTeleport=!0;const o=this.context.physics.raycastFromRay(t.ray)[0];if(o){if(this.useTeleportTarget&&!se.getComponentInParent(o.object,RE))return;Xz&&_t.DrawSphere(o.point,.025,16711680,5);const a=o.point.clone();this.useTeleportFade?(r=t.xr.fadeTransition())==null||r.then(()=>{i.worldPosition=a}):i.worldPosition=a}}}renderRays(t){for(let i=0;i<this._lines.length;i++){const n=this._lines[i];n&&(n.visible=!1)}for(let i=0;i<t.controllers.length;i++){const n=t.controllers[i];let r=this._lines[i];if(!n.connected||!n.isTracking||!n.ray||n.targetRayMode==="transient-pointer"||!n.hasSelectEvent){r&&(r.visible=!1);continue}r||(r=this.createRayLineObject(),r.scale.z=.5,this._lines[i]=r),n.updateRayWorldPosition(),n.updateRayWorldQuaternion();const o=n.rayWorldPosition,a=n.rayWorldQuaternion;r.position.copy(o),r.quaternion.copy(a);const l=t.rigScale,c=this._hitDistances[i]??1;r.scale.set(l,l,c),r.visible=!0,r.layers.disableAll(),r.layers.enable(2),r.parent!==this.context.scene&&this.context.scene.add(r)}}renderHits(t){for(const i of this._hitDiscs)i&&(i.visible=!1);for(let i=0;i<t.controllers.length;i++){const n=t.controllers[i];if(!n.connected||!n.isTracking||!n.ray||!n.hasSelectEvent)continue;if(this.context.time.frame%2!==0){const a=this._hitDiscs[i];a&&a.hit&&(a.visible=!0);continue}const r=this.context.physics.raycastFromRay(n.ray,{testObject:this.hitPointRaycastFilter})[0];this._hitDistances[i]=r==null?void 0:r.distance;let o=this._hitDiscs[i];if(o&&(o.hit=r),r){const a=t.rigScale??1;Xz&&(_t.DrawWireSphere(r.point,.025*a,16711680),_t.DrawLabel(Ui(0,.2,0).add(r.point),r.object.name,.02,0)),o||(o=this.createHitPointObject(),this._hitDiscs[i]=o),o.visible=!0;const l=.01*(a+r.distance);if(o.scale.set(l,l,l),o.layers.disableAll(),o.layers.enable(2),o.hit=r,r.normal){const c=.02*a;o.position.set(0,0,-.1*c).applyQuaternion(n.rayWorldQuaternion),o.position.add(r.point);const h=r.normal.applyQuaternion(Li(r.object));o.quaternion.setFromUnitVectors(eye,h)}else o.position.add(r.point);o.parent!==this.context.scene&&this.context.scene.add(o)}else this._hitDiscs[i]&&(this._hitDiscs[i].visible=!1)}}createHitPointObject(){var t=new Ae;const i=new fe(new mp(.3,.5,32).rotateX(-Math.PI/2),new ei({color:15658734,opacity:.7,transparent:!0,side:Ai}));i.layers.disableAll(),i.layers.enable(2),t.add(i);const n=new fe(new mp(.43,.5,32).rotateX(-Math.PI/2),new ei({color:0,opacity:.2,transparent:!0,side:Ai}));return n.layers.disableAll(),n.layers.enable(2),n.position.y=.01,t.add(n),t}createRayLineObject(){const t=new Jge;t.layers.disableAll(),t.layers.enable(2);const i=new $j;t.geometry=i;const n=new Float32Array(9);n.set([0,0,.02,0,0,.4,0,0,1]),i.setPositions(n);const r=new Float32Array(9);r.set([1,1,1,.1,.1,.1,0,0,0]),i.setColors(r);const o=new yL({color:16777215,vertexColors:!0,worldUnits:!0,linewidth:.004,transparent:!0,blending:lp,dashed:!1,alphaToCoverage:!0});return t.material=o,t}}Yp([x()],Ha.prototype,"movementSpeed",2);Yp([x()],Ha.prototype,"rotationStep",2);Yp([x()],Ha.prototype,"useTeleport",2);Yp([x()],Ha.prototype,"useTeleportTarget",2);Yp([x()],Ha.prototype,"useTeleportFade",2);Yp([x()],Ha.prototype,"showRays",2);Yp([x()],Ha.prototype,"showHits",2);const eye=new w(0,1,0);var tye=Object.defineProperty,iye=Object.getOwnPropertyDescriptor,Ro=(s,e,t,i)=>{for(var n=i>1?void 0:i?iye(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&tye(e,t,n),n};const Dw=ie("debugwebxr"),nye=ie("debugusdz");class Us extends Ie{constructor(){super(...arguments);d(this,"createVRButton",!0);d(this,"createARButton",!0);d(this,"createSendToQuestButton",!0);d(this,"createQRCode",!0);d(this,"useDefaultControls",!0);d(this,"showControllerModels",!0);d(this,"showHandModels",!0);d(this,"usePlacementReticle",!0);d(this,"usePlacementAdjustment",!0);d(this,"arSceneScale",1);d(this,"useXRAnchor",!1);d(this,"useQuicklookExport",!1);d(this,"useDepthSensing",!1);d(this,"defaultAvatar");d(this,"_playerSync");d(this,"_createdComponentsInSession",[]);d(this,"_usdzExporter");d(this,"_previousXRState",0);d(this,"onAvatarSpawned",t=>{Dw&&console.log("WebXR.onAvatarSpawned",t),se.getComponentInChildren(t,pd)??(i=se.addComponent(t,pd))});d(this,"_buttonFactory");d(this,"_buttons",[])}awake(){Et.getXRSync(this.context)}onEnable(){var t,i;window.location.protocol!=="https:"&&Ni('<a href="https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API" target="_blank">WebXR</a> only works on secure connections (https).'),this.useQuicklookExport&&(se.findObjectOfType(Fn)||(Dw&&console.log("WebXR: Adding USDZExporter"),this._usdzExporter=se.addComponent(this.gameObject,Fn),this._usdzExporter.objectToExport=this.context.scene,this._usdzExporter.autoExportAnimations=!0,this._usdzExporter.autoExportAudioSources=!0)),this.handleCreatingHTML(),this.handleOfferSession(),this.defaultAvatar&&(this._playerSync=this.gameObject.getOrAddComponent(Qy),this._playerSync.autoSync=!1),this._playerSync&&(this._playerSync.asset=this.defaultAvatar,(t=this._playerSync.onPlayerSpawned)==null||t.removeEventListener(this.onAvatarSpawned),(i=this._playerSync.onPlayerSpawned)==null||i.addEventListener(this.onAvatarSpawned))}onDisable(){var t;(t=this._usdzExporter)==null||t.destroy(),this.removeButtons()}async handleOfferSession(){return this.createVRButton&&await Et.isVRSupported()&&this.createVRButton?Et.offerSession("immersive-vr","default",this.context):this.createARButton&&await Et.isARSupported()&&this.createARButton?Et.offerSession("immersive-ar","default",this.context):!1}get session(){return Et.active??null}get sessionMode(){return Et.activeMode??null}async enterVR(t){return Et.start("immersive-vr",t,this.context)}async enterAR(t){return Et.start("immersive-ar",t,this.context)}exitXR(){Et.stop()}onBeforeXR(t,i){t=="immersive-ar"&&this.useDepthSensing&&(i.optionalFeatures=i.optionalFeatures||[],i.optionalFeatures.push("depth-sensing"))}async onEnterXR(t){Dw&&console.log("WebXR onEnterXR"),this._previousXRState=tr.Global.Mask;const i=t.xr.isVR;if(tr.Global.Set(i?sc.VR:sc.AR),this.usePlacementReticle&&t.xr.isAR){let r=se.findObjectOfType(ao);if(r)Dw&&console.log("WebXR: WebARSessionRoot already exists, not creating a new one");else{const o=new Ae;for(const a of this.context.scene.children)o.add(a);this.context.scene.add(o),r=se.addNewComponent(o,ao),this._createdComponentsInSession.push(r),r.arScale=this.arSceneScale,r.arTouchTransform=this.usePlacementAdjustment,r.useXRAnchor=this.useXRAnchor}}this.useDefaultControls&&this.setDefaultMovementEnabled(!0),(this.showControllerModels||this.showHandModels)&&this.setDefaultControllerRenderingEnabled(!0);let n=se.findObjectOfType(j0);n||(n=this.gameObject.addNewComponent(j0)),this.createLocalAvatar(t.xr)}onLeaveXR(t){var i;tr.Global.Set(this._previousXRState),(i=this._playerSync)==null||i.destroyInstance();for(const n of this._createdComponentsInSession)n.destroy();this._createdComponentsInSession.length=0,this.handleOfferSession()}setDefaultMovementEnabled(t){let i=this.gameObject.getComponent(Ha);return!i&&t&&(i=this.gameObject.addComponent(Ha),this._createdComponentsInSession.push(i)),i&&(i.enabled=t),i}setDefaultControllerRenderingEnabled(t){let i=this.gameObject.getComponent(wc);return!i&&t&&(i=this.gameObject.addComponent(wc),this._createdComponentsInSession.push(i),i.createControllerModel=this.showControllerModels,i.createHandModel==this.showHandModels),i&&(i.enabled=t),i}async createLocalAvatar(t){this._playerSync&&t.running&&(this._playerSync.asset=this.defaultAvatar,await this._playerSync.getInstance())}getButtonsContainer(){return this.getButtonsFactory()}getButtonsFactory(){return this._buttonFactory||(this._buttonFactory=Lh.getOrCreate()),this._buttonFactory}handleCreatingHTML(){if(this.createARButton||this.createVRButton||this.useQuicklookExport){if((vp()&&Vg()||nye)&&this.useQuicklookExport){const i=se.findObjectOfType(Fn);if(!i||i&&i.allowCreateQuicklookButton){const n=this.getButtonsFactory().createQuicklookButton();this.addButton(n,50)}}if(this.createARButton){const i=this.getButtonsFactory().createARButton();this.addButton(i,50)}if(this.createVRButton){const i=this.getButtonsFactory().createVRButton();this.addButton(i,50)}}if(this.createSendToQuestButton&&!D1()&&Et.isVRSupported().then(i=>{if(!i){const n=this.getButtonsFactory().createSendToQuestButton();this.addButton(n,50)}}),this.createQRCode&&!ja()){const i=dE(Bc);i&&i.createQRCodeButton===!1?ct()&&console.warn("WebXR: QRCode button is disabled in the Needle Menu component"):Et.isXRSupported().then(n=>{if(Ap()||!n){const r=Al.getOrCreate().createQRCode();this.addButton(r,50)}})}}addButton(t,i){this._buttons.push(t),t.setAttribute("priority",i.toString()),this.context.menu.appendChild(t)}removeButtons(){for(const t of this._buttons)t.remove();this._buttons.length=0}}Ro([x()],Us.prototype,"createVRButton",2);Ro([x()],Us.prototype,"createARButton",2);Ro([x()],Us.prototype,"createSendToQuestButton",2);Ro([x()],Us.prototype,"createQRCode",2);Ro([x()],Us.prototype,"useDefaultControls",2);Ro([x()],Us.prototype,"showControllerModels",2);Ro([x()],Us.prototype,"showHandModels",2);Ro([x()],Us.prototype,"usePlacementReticle",2);Ro([x()],Us.prototype,"usePlacementAdjustment",2);Ro([x()],Us.prototype,"arSceneScale",2);Ro([x()],Us.prototype,"useXRAnchor",2);Ro([x()],Us.prototype,"useQuicklookExport",2);Ro([x()],Us.prototype,"useDepthSensing",2);Ro([x($t)],Us.prototype,"defaultAvatar",2);class PE{get extensionName(){return"Physics"}onExportObject(e,t,i){const n=se.getComponents(e,zi).filter(l=>l.enabled),r=se.getComponents(e,oa).filter(l=>l.enabled&&!l.isTrigger);let o=n.length>0?n[0]:null;const a=r.length>0?r[0]:null;a&&!o&&(o=new zi,o.isKinematic=!0),o&&t.addEventListener("serialize",(l,c)=>{var h,u,f;if(o){if(l.appendLine(),l.beginBlock('def RealityKitComponent "RigidBody"',"{",!0),o.useGravity||l.appendLine("bool gravityEnabled = 0"),l.appendLine('uniform token info:id = "RealityKit.RigidBody"'),o.isKinematic&&l.appendLine('token motionType = "Kinematic"'),l.beginBlock('def RealityKitStruct "massFrame"',"{",!0),l.appendLine(`float m_mass = ${o.mass}`),l.beginBlock('def RealityKitStruct "m_pose"',"{",!0),l.appendLine(`float3 position = (${o.centerOfMass.x}, ${o.centerOfMass.y}, ${o.centerOfMass.z})`),l.closeBlock("}"),l.closeBlock("}"),r.length>0){const p=r[0];l.beginBlock('def RealityKitStruct "material"',"{",!0);const m=p.sharedMaterial;m&&m.dynamicFriction!==void 0&&l.appendLine(`double dynamicFriction = ${(h=p.sharedMaterial)==null?void 0:h.dynamicFriction}`),m&&m.bounciness!==void 0&&l.appendLine(`double restitution = ${(u=p.sharedMaterial)==null?void 0:u.bounciness}`),m&&m.staticFriction!==void 0&&l.appendLine(`double staticFriction = ${(f=p.sharedMaterial)==null?void 0:f.staticFriction}`),l.closeBlock("}")}l.closeBlock("}")}}),a&&(t.addEventListener("serialize",(l,c)=>{var f;l.beginBlock('def RealityKitComponent "Collider"',"{",!0),l.appendLine("uint group = 1"),l.appendLine('uniform token info:id = "RealityKit.Collider"'),l.appendLine("uint mask = 4294967295");const u=a.isTrigger?"Trigger":"Default";if(l.appendLine(`token type = "${u}"`),l.beginBlock('def RealityKitStruct "Shape"',"{",!0),a instanceof qy){const p=a;l.appendLine('token shapeType = "Sphere"'),l.appendLine(`float radius = ${p.radius}`)}else if(a instanceof Xy){const p=a;l.appendLine('token shapeType = "Box"'),l.appendLine(`float3 extent = (${p.size.x}, ${p.size.y}, ${p.size.z})`)}else if(a instanceof Nh){const p=a;l.appendLine('token shapeType = "Capsule"'),l.appendLine(`float radius = ${p.radius}`),l.appendLine(`float height = ${p.height}`)}else if(a instanceof Hp&&((f=a.sharedMesh)!=null&&f.geometry)){const p=a.sharedMesh.geometry;p.boundingBox||p.computeBoundingBox();const m=a.sharedMesh.geometry.boundingBox;m&&(l.appendLine('token shapeType = "Box"'),l.appendLine(`float3 extent = (${m.max.x-m.min.x}, ${m.max.y-m.min.y}, ${m.max.z-m.min.z})`),console.log("[USDZ] Only Box, Sphere, and Capsule colliders are supported in visionOS/iOS. MeshCollider will be exported as Box",a))}else console.warn("[USDZ] Only Box, Sphere, and Capsule colliders are supported in visionOS/iOS. Ignoring collider:",a);l.beginBlock('def RealityKitStruct "pose"',"{",!0),l.closeBlock("}"),l.closeBlock("}"),l.closeBlock("}")}),r.length>1&&console.log("WARNING: Multiple colliders detected. visionOS / iOS can only support objects with a single collider, only exporting the first collider: ",a))}}var sye=Object.defineProperty,rye=Object.getOwnPropertyDescriptor,Xh=(s,e,t,i)=>{for(var n=i>1?void 0:i?rye(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&sye(e,t,n),n};const hf=ie("debugtext");var us=(s=>(s[s.UpperLeft=0]="UpperLeft",s[s.UpperCenter=1]="UpperCenter",s[s.UpperRight=2]="UpperRight",s[s.MiddleLeft=3]="MiddleLeft",s[s.MiddleCenter=4]="MiddleCenter",s[s.MiddleRight=5]="MiddleRight",s[s.LowerLeft=6]="LowerLeft",s[s.LowerCenter=7]="LowerCenter",s[s.LowerRight=8]="LowerRight",s))(us||{}),eW=(s=>(s[s.Normal=0]="Normal",s[s.Bold=1]="Bold",s[s.Italic=2]="Italic",s[s.BoldAndItalic=3]="BoldAndItalic",s))(eW||{});class Fr extends Qp{constructor(){super(...arguments);d(this,"alignment",0);d(this,"verticalOverflow",0);d(this,"horizontalOverflow",0);d(this,"lineSpacing",1);d(this,"supportRichText",!1);d(this,"font");d(this,"fontStyle",0);d(this,"sRGBTextColor",new ve(1,0,1));d(this,"_text","");d(this,"_fontSize",12);d(this,"_textMeshUi",null);d(this,"_didHandleTextRenderOnTop",!1)}setAlphaFactor(t){var i;super.setAlphaFactor(t),(i=this.uiObject)==null||i.set({fontOpacity:this.color.alpha*this.alphaFactor}),this.markDirty()}get text(){return this._text}set text(t){t!==this._text&&(this._text=t,this.feedText(this.text,this.supportRichText),this.markDirty())}set_text(t){this.text=t}get fontSize(){return this._fontSize}set fontSize(t){var i;this._fontSize=t,(i=this.uiObject)==null||i.set({fontSize:t})}onColorChanged(){var t;this.sRGBTextColor.copy(this.color),this.sRGBTextColor.convertLinearToSRGB(),(t=this.uiObject)==null||t.set({color:this.sRGBTextColor,fontOpacity:this.color.alpha})}onParentRectTransformChanged(){super.onParentRectTransformChanged(),this.uiObject&&this.updateOverflow()}onBeforeCanvasRender(t){this.updateOverflow()}updateOverflow(){var i;const t=(i=this.uiObject)==null?void 0:i._overflow;t&&(t._needsUpdate=!0,this.markDirty())}onCreate(t){hf&&console.log(this),this.horizontalOverflow==1&&(t.whiteSpace="pre"),this.verticalOverflow==0&&(this.context.renderer.localClippingEnabled=!0,t.overflow="hidden"),this.horizontalOverflow==1&&this.verticalOverflow==0,t.lineHeight=this.lineSpacing,delete t.backgroundOpacity,delete t.backgroundColor,hf&&(t.backgroundColor=16750848,t.backgroundOpacity=.5);const i=this.rectTransform;t={...t,...this.getTextOpts()},this.getAlignment(t),hf&&(t.backgroundColor=Math.random()*16777215,t.backgroundOpacity=.1),this.uiObject=i.createNewText(t),this.feedText(this.text,this.supportRichText)}onAfterAddedToScene(){super.onAfterAddedToScene(),this.handleTextRenderOnTop()}getTextOpts(){const t=this.fontSize,i={color:this.color,fontOpacity:this.color.alpha,fontSize:t,fontKerning:"normal"};return this.setFont(i,this.fontStyle),i}onEnable(){var t;super.onEnable(),this._didHandleTextRenderOnTop=!1,this.uiObject&&this.uiObject.addAfterUpdate(()=>{this.setShadowComponentOwner(this.uiObject),this.markDirty()}),setTimeout(()=>this.markDirty(),10),(t=this.canvas)==null||t.registerEventReceiver(this)}onDisable(){var t;super.onDisable(),(t=this.canvas)==null||t.unregisterEventReceiver(this)}getAlignment(t){switch(t.flexDirection="column",this.alignment){case 0:case 3:case 6:t.textAlign="left";break;case 1:case 4:case 7:t.textAlign="center";break;case 2:case 5:case 8:t.textAlign="right";break}switch(this.alignment){default:case 0:case 1:case 2:t.alignItems="start";break;case 3:case 4:case 5:t.alignItems="center";break;case 6:case 7:case 8:t.alignItems="end";break}return t}feedText(t,i){var n,r,o;if(hf&&console.log("feedText",this.uiObject,t,i),!!this.uiObject)if(this._textMeshUi||(this._textMeshUi=[]),this.uiObject.children.length=0,!i||t.length===0)this.uiObject.textContent=t;else{let a=this.getNextTag(t);if(a){if(a.startIndex>0){for(let h=this.uiObject.children.length-1;h>=0;h--){const u=this.uiObject.children[h];u.isUI&&(this.uiObject.remove(u),u.clear())}const c=new uS({textContent:t.substring(0,a.startIndex),color:"inherit"});this.uiObject.add(c)}}else{this.uiObject.textContent="",this.setOptions({textContent:t});return}const l=[];for(;a;){const c=this.getNextTag(t,a.endIndex),h={fontFamily:(n=this.uiObject)==null?void 0:n.get("fontFamily"),color:"inherit",textContent:""};if(c){h.textContent=this.getText(t,a,c),this.handleTag(a,h,l);const u=new uS(h);(r=this.uiObject)==null||r.add(u)}else{h.textContent=t.substring(a.endIndex),this.handleTag(a,h,l);const u=new uS(h);(o=this.uiObject)==null||o.add(u)}a=c}}}handleTextRenderOnTop(){this._didHandleTextRenderOnTop||(this._didHandleTextRenderOnTop=!0,this.startCoroutine(this.renderOnTopCoroutine()))}*renderOnTopCoroutine(){if(!this.canvas)return;const t=[],i=this.canvas,n={renderOnTop:i.renderOnTop,depthWrite:i.depthWrite,doubleSided:i.doubleSided};for(;;){let r=!1;if(this._textMeshUi)for(let o=0;o<this._textMeshUi.length;o++){if(t[o]===!0)continue;r=!0;const a=this._textMeshUi[o];a.textContent&&(IC(a,n),t[o]=!0)}if(!r)break;yield}}handleTag(t,i,n){if(!t.isEndTag){if(t.type.includes("color")){const r=new zI(t,{color:i.color});if(n.push(r),t.type.length>6){const o=parseInt("0x"+t.type.substring(7));i.color=o}else i.color=new ve(1,1,1)}else if(t.type=="b"){this.setFont(i,1);const r=new zI(t,{fontWeight:700});n.push(r)}else if(t.type=="i"){this.setFont(i,2);const r=new zI(t,{fontStyle:"italic"});n.push(r)}}}getText(t,i,n){return t.substring(i.endIndex,n.startIndex)}getNextTag(t,i=0){const n=t.indexOf("<",i),r=t.indexOf(">",n);if(n>=0&&r>=0){const o=t.substring(n+1,r);return{type:o,startIndex:n,endIndex:r+1,isEndTag:o.startsWith("/")}}return null}setFont(t,i){if(!this.font)return;const n=this.font,r=this.getFamilyNameWithCorrectSuffix(n,i);hf&&console.log("Selected font family:"+r);let o=vP.getFontFamily(r);switch(o||(o=vP.addFontFamily(r)),t.fontFamily=o,i){default:case 0:t.fontWeight=400,t.fontStyle="normal";break;case 1:t.fontWeight=700,t.fontStyle="normal";break;case 2:t.fontWeight=400,t.fontStyle="italic";break;case 3:t.fontStyle="italic",t.fontWeight=400}let a=o.getVariant(t.fontWeight,t.fontStyle);if(!a){let l=r;l!=null&&l.endsWith("-msdf.json")||(l+="-msdf.json");let c=r;c!=null&&c.endsWith(".png")||(c+=".png"),a=o.addVariant(t.fontWeight,t.fontStyle,l,c),a==null||a.addEventListener("ready",()=>{this.markDirty()})}}getFamilyNameWithCorrectSuffix(t,i){var h;const n=t.lastIndexOf("-");if(n<0)return t;const r=(h=t.substring(n+1))==null?void 0:h.toLowerCase();if(oye.includes(r))return hf&&console.warn("Unsupported font style: "+r),t;const o=t.lastIndexOf("/");let a=t;o>=0&&(a=a.substring(o+1));const l=a[0]===a[0].toUpperCase(),c=t.substring(0,n);switch(hf&&console.log("Select font: ",t,eW[i],a,l,c),i){case 0:return l?c+"-Regular":c+"-regular";case 1:return l?c+"-Bold":c+"-bold";case 2:return l?c+"-Italic":c+"-italic";case 3:return l?c+"-BoldItalic":c+"-bolditalic";default:return t}}}Xh([x()],Fr.prototype,"alignment",2);Xh([x()],Fr.prototype,"verticalOverflow",2);Xh([x()],Fr.prototype,"horizontalOverflow",2);Xh([x()],Fr.prototype,"lineSpacing",2);Xh([x()],Fr.prototype,"supportRichText",2);Xh([x(URL)],Fr.prototype,"font",2);Xh([x()],Fr.prototype,"fontStyle",2);Xh([x()],Fr.prototype,"text",1);Xh([x()],Fr.prototype,"fontSize",1);class zI{constructor(e,t){d(this,"tag");d(this,"previousValues");this.tag=e,this.previousValues=t}}const oye=["medium","mediumitalic","black","blackitalic","thin","thinitalic","extrabold","light","lightitalic","semibold"];class Wu{constructor(e){d(this,"id");d(this,"content","");d(this,"font",[]);d(this,"pointSize",144);d(this,"width");d(this,"height");d(this,"depth");d(this,"wrapMode");d(this,"horizontalAlignment");d(this,"verticalAlignment");d(this,"material");this.id=e}static getId(){return this.global_id++}setDepth(e){return this.depth=e,this}setPointSize(e){return this.pointSize=e,this}setHorizontalAlignment(e){return this.horizontalAlignment=e,this}setVerticalAlignment(e){return this.verticalAlignment=e,this}writeTo(e,t){var n;t.beginBlock(`def Preliminary_Text "${this.id}"`,"(",!1),t.appendLine('prepend apiSchemas = ["MaterialBindingAPI"]'),t.closeBlock(")"),t.beginBlock(),this.content&&t.appendLine(`string content = "${this.content}"`),(!this.font||this.font.length<=0)&&(this.font||(this.font=[]),(n=this.font)==null||n.push("sans-serif"));const i=this.font.map(r=>`"${r}"`).join(", ");t.appendLine(`string[] font = [ ${i} ]`),t.appendLine(`double pointSize = ${this.pointSize}`),typeof this.width=="number"&&t.appendLine(`double width = ${this.width}`),typeof this.height=="number"&&t.appendLine(`double height = ${this.height}`),typeof this.depth=="number"&&t.appendLine(`double depth = ${this.depth}`),this.wrapMode&&t.appendLine(`token wrapMode = "${this.wrapMode}"`),this.horizontalAlignment&&t.appendLine(`token horizontalAlignment = "${this.horizontalAlignment}"`),this.verticalAlignment&&t.appendLine(`token verticalAlignment = "${this.verticalAlignment}"`),this.material!==void 0&&t.appendLine(`rel material:binding = </StageRoot/Materials/${aO(this.material)}>`),t.closeBlock()}}d(Wu,"global_id",0);class BE{static singleLine(e,t,i){const n=new Wu("text_"+Wu.getId());return n.content=e,t&&(n.pointSize=t),i&&(n.depth=i),n}static multiLine(e,t,i,n,r,o){const a=new Wu("text_"+Wu.getId());return a.content=e,a.width=t,a.height=i,a.horizontalAlignment=n,a.verticalAlignment=r,o!==void 0&&(a.wrapMode=o),a}}const aye=new ye().makeRotationY(Math.PI),lye=new ye().makeScale(-1,1,-1);class rb{get extensionName(){return"text"}exportText(e,t,i){const n=se.getComponent(e,Fr);if(!n)return;const r=se.getComponent(e,Lr);let o=100,a=100;r&&(o=r.width,a=r.height),t.matrix=aye.clone(),r&&t.matrix.premultiply(lye);const l=n.color.clone();t.material=new Rr({color:l,emissive:l}),t.addEventListener("serialize",(c,h)=>{let u=n.text;u=u.replace(/\r/g,""),u=u.replace(/\n/g,"\\n");const f=BE.multiLine(u,o,a,"center","bottom","flowing");this.setTextAlignment(f,n.alignment),this.setOverflow(f,n),t.material&&(f.material=t.material),f.pointSize=this.convertToTextSize(n.fontSize),f.depth=.001,f.writeTo(void 0,c)})}convertToTextSize(e){return 1/.0502*144*e}setOverflow(e,t){t.horizontalOverflow?e.wrapMode="singleLine":e.wrapMode="flowing"}setTextAlignment(e,t){switch(t){case us.LowerLeft:case us.MiddleLeft:case us.UpperLeft:e.horizontalAlignment="left";break;case us.LowerCenter:case us.MiddleCenter:case us.UpperCenter:e.horizontalAlignment="center";break;case us.LowerRight:case us.MiddleRight:case us.UpperRight:e.horizontalAlignment="right";break}switch(t){case us.LowerLeft:case us.LowerCenter:case us.LowerRight:e.verticalAlignment="bottom";break;case us.MiddleLeft:case us.MiddleCenter:case us.MiddleRight:e.verticalAlignment="middle";break;case us.UpperLeft:case us.UpperCenter:case us.UpperRight:e.verticalAlignment="top";break}}}class DE{get extensionName(){return"tmui"}onExportObject(e,t,i){const n=se.getComponent(e,ar);if(n&&n.enabled&&n.renderMode===Nj.WorldSpace){const r=new rb,o=se.getComponent(e,Lr),a=se.getComponent(e,md),l=new Array;if(o){if(!se.isActiveSelf(e)){const u=se.isActiveSelf(e);se.setActive(e,!0),o.onEnable(),o.updateTransform(),l.push(()=>{o.onDisable(),se.setActive(e,u)})}e.traverse(u=>{if(!se.isActiveInHierarchy(u)){const f=se.isActiveSelf(u);se.setActive(u,!0);const p=se.getComponent(u,Ga);p&&(p.onEnable(),l.push(()=>{p.onDisable()}));const m=se.getComponent(u,Lr);m&&(m.onEnable(),m.updateTransform(),m.onApplyTransform(),l.push(()=>{m.onDisable()}));const y=se.getComponent(u,Fr);y&&(y.onEnable(),l.push(()=>{y.onDisable()})),l.push(()=>{se.setActive(u,f)})}}),o.width,o.height;const c=nr.createEmpty(),h=o.shadowComponent;if(t.add(c),h){const u=h.matrix;c.matrix.copy(u);const f=new Map,p=new Map;f.set(h,c),p.set(h,a?a.alpha:1),h.traverse(m=>{if(m===h)return;const y=nr.createEmpty();y.matrix.copy(m.matrix);const g=m.parent,A=!!g&&typeof g.textContent=="string"&&g.textContent.length>0;let _=p.get(g)||1;const v=se.getComponent(m,md);if(v&&(_*=v.alpha),m instanceof fe&&A){const S=m[Ba];S?r.exportText(S.gameObject,y,i):console.error("Error when exporting UI: shadow component owner not found. This is likely a bug.",m)}if(m instanceof fe&&!A){const S=m.geometry.clone();S.scale(1,1,-1),this.flipWindingOrder(S),y.geometry=S;const E=new ve,M=m.material.opacity;E.copy(m.material.color),y.material=new ei({color:E,opacity:M*_,map:m.material.map,transparent:!0})}f.set(m,y),p.set(m,_);const b=f.get(g);if(!b){console.error("Error when exporting UI: shadow component parent not found!",m,m.parent);return}b.add(y)})}}for(const c of l)c()}}flipWindingOrder(e){const t=e.index.array;for(let i=0,n=t.length/3;i<n;i++){const r=t[i*3];t[i*3]=t[i*3+2],t[i*3+2]=r}e.index.needsUpdate=!0}}const Rv=ie("debugusdz");function cye(s,e){var a;const t=[],i=se.getComponentsInChildren(s,or),n=se.getComponentsInChildren(s,Pr),r=new Array,o=new Array;if(e.injectImplicitBehaviours)for(const l of i){if(!l||!l.runtimeAnimatorController||!l.enabled)continue;const c=l.runtimeAnimatorController.activeState;if(!c||!c.motion||!c.motion.clip||((a=c.motion.clip.tracks)==null?void 0:a.length)<1||r.includes(l))continue;const h=new Mp;h.animator=l,h.stateName=c.name,h.trigger="start",h.name="PlayAnimationOnClick_implicitAtStart_"+h.stateName;const u=new Ae;se.addComponent(u,h),o.push(u),r.push(l),s.add(u)}else for(const l of i){if(!l||!l.runtimeAnimatorController||!l.enabled)continue;Rv&&console.log(l);const c=[];for(const h of l.runtimeAnimatorController.enumerateActions()){Rv&&console.log(h);const u=h.getClip();c.includes(u)||c.push(u)}t.push({root:l.gameObject,clips:c})}if(e.injectImplicitBehaviours)for(const l of n){if(!l||!l.clip||!l.enabled||!l.playAutomatically||r.includes(l))continue;const c=new Mp;c.animation=l,c.stateName=l.clip.name,c.trigger="start",c.name="PlayAnimationOnClick_implicitAtStart_"+c.stateName;const h=new Ae;se.addComponent(h,c),o.push(h),r.push(l),s.add(h)}else for(const l of n){Rv&&console.log(l);const c=[];for(const h of l.animations)c.includes(h)||c.push(h);t.push({root:l.gameObject,clips:c})}Rv&&(t==null?void 0:t.length)>0&&console.log("USDZ Animation Clips without behaviours",t);for(const l of t)for(const c of l.clips)e.registerAnimation(l.root,c);return o}function hye(s,e){const t=se.getComponentsInChildren(s,Un),i=se.getComponentsInChildren(s,gd),n=new Array,r=new Array;Rv&&console.log({audioSources:t,playAudioOnClicks:i});for(const o of i){if(!o.target)continue;const a=t.indexOf(o.target);a>-1&&t.splice(a,1)}for(const o of t){if(!o||!o.clip||o.volume<=0||n.includes(o))continue;const a=new gd;a.target=o,a.name="PlayAudioOnClick_implicitAtStart_",a.trigger="start";const l=new Ae;se.addComponent(l,a),console.log("implicit PlayAudioOnStart",l,a),r.push(l),n.push(o),s.add(l)}return r}function uye(s){return new ns("DisableAtStart",Os.sceneStartTrigger(),pi.fadeAction(s,0,!1))}function Yz(s){const e=s.domElement.shadowRoot.querySelector("link[rel='ar']");if(e)return e;const t=document.createElement("div");t.classList.add("menu"),t.classList.add("quicklook-menu"),t.style.display="none",t.style.visibility="hidden";const i=document.createElement("button");i.id="open-in-ar",i.innerText="Open in QuickLook",t.appendChild(i);const n=document.createElement("a");n.id="needle-usdz-link",n.style.display="none",n.rel="ar",n.href="",t.appendChild(n);const r=document.createElement("img");return r.id="button",n.appendChild(r),s.domElement.shadowRoot.appendChild(t),n}var dye=Object.defineProperty,fye=Object.getOwnPropertyDescriptor,Ur=(s,e,t,i)=>{for(var n=i>1?void 0:i?fye(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&dye(e,t,n),n};const ya=ie("debugusdz");class Ld{constructor(){d(this,"callToAction");d(this,"checkoutTitle");d(this,"checkoutSubtitle");d(this,"callToActionURL")}}Ur([x()],Ld.prototype,"callToAction",2);Ur([x()],Ld.prototype,"checkoutTitle",2);Ur([x()],Ld.prototype,"checkoutSubtitle",2);Ur([x()],Ld.prototype,"callToActionURL",2);var $w;const LB=($w=class extends Ie{constructor(){super(...arguments);d(this,"objectToExport");d(this,"autoExportAnimations",!0);d(this,"autoExportAudioSources",!0);d(this,"exportFileName");d(this,"customUsdzFile");d(this,"customBranding");d(this,"anchoringType","plane");d(this,"maxTextureSize",2048);d(this,"planeAnchoringAlignment","horizontal");d(this,"interactive",!0);d(this,"allowCreateQuicklookButton",!0);d(this,"quickLookCompatible",!0);d(this,"extensions",[]);d(this,"link");d(this,"button");d(this,"onClickedOpenInARElement",e=>{e.preventDefault(),this.exportAndOpen()});d(this,"_currentExportTasks",new Map);d(this,"_previousTimeScale",1);d(this,"lastCallback");d(this,"_rootSessionRootWasAppliedTo",null);d(this,"_rootPositionBeforeExport",new w);d(this,"_rootRotationBeforeExport",new Ce);d(this,"_rootScaleBeforeExport",new w)}start(){var e,t,i;ya&&(console.log("USDZExporter",this),console.log("Debug USDZ Mode. Press 'T' to export"),window.addEventListener("keydown",n=>{switch(n.key){case"t":this.exportAsync();break}}),ja()&&setTimeout(()=>{this.exportAsync()},2e3)),this.objectToExport||(this.objectToExport=this.gameObject),!((t=(e=this.objectToExport)==null?void 0:e.children)!=null&&t.length)&&!((i=this.objectToExport)!=null&&i.isMesh)&&(this.objectToExport=this.context.scene),this.interactive&&(this.extensions.push(new CE),this.extensions.push(new Md),this.extensions.push(new PE),this.extensions.push(new rb),this.extensions.push(new DE))}onEnable(){var i;const e=vp(),t=Vg();(ya||e&&t)&&(this.allowCreateQuicklookButton&&(this.button=this.createQuicklookButton()),this.lastCallback=this.quicklookCallback.bind(this),this.link=Yz(this.context),this.link.addEventListener("message",this.lastCallback)),ya&&pn("USDZ Exporter enabled: "+this.name),(i=document.getElementById("open-in-ar"))==null||i.addEventListener("click",this.onClickedOpenInARElement)}onDisable(){var e,t,i;(e=this.button)==null||e.remove(),(t=this.link)==null||t.removeEventListener("message",this.lastCallback),ya&&pn("USDZ Exporter disabled: "+this.name),(i=document.getElementById("open-in-ar"))==null||i.removeEventListener("click",this.onClickedOpenInARElement)}async exportAsync(){return this.exportAndOpen()}async exportAndOpen(){var i;let e=this.exportFileName??((i=this.objectToExport)==null?void 0:i.name)??this.name;if(e+="-"+B8(),Ju()||(e!==""&&(e+="-"),e+="MadeWithNeedle"),this.link||(this.link=Yz(this.context)),this.customUsdzFile)return ya&&console.log("Exporting custom usdz",this.customUsdzFile),this.openInQuickLook(this.customUsdzFile,e),null;if(!this.objectToExport)return console.warn("No object to export",this),null;const t=await this.export(this.objectToExport);return t?(ya&&console.log("USDZ generation done. Downloading as "+e),this.openInQuickLook(t,e),t):(console.error("USDZ generation failed. Please report a bug",this),null)}async export(e){if(!e)return console.warn("No object to export"),null;const t=this._currentExportTasks.get(e);if(t)return t;const i=this.internalExport(e);return i instanceof Promise?(this._currentExportTasks.set(e,i),i.then(n=>(this._currentExportTasks.delete(e),n)).catch(n=>(this._currentExportTasks.delete(e),console.error("Error during USDZ export – please report a bug!",n),null))):i}async internalExport(e){ri.start("export-usdz",{onProgress:_=>{this.dispatchEvent(new CustomEvent("export-progress",{detail:{progress:_}}))}}),ri.report("export-usdz",{message:"Starting export",totalSteps:40,currentStep:0}),ri.report("export-usdz",{message:"Load progressive textures",autoStep:5}),ri.start("export-usdz-textures","export-usdz");const t=se.getComponentsInChildren(e,Ya);for(const _ of t)_&&_.enabled&&_.start&&_.start();const i=se.getComponentsInChildren(e,Nn),n=new Array;let r=0;for(const _ of i){for(const v of _.sharedMeshes)if(v){const b=gi.assignMeshLOD(v,0);b instanceof Promise&&n.push(new Promise((S,E)=>{b.then(()=>{r++,ri.report("export-usdz-textures",{message:"Loaded progressive mesh",currentStep:r,totalSteps:n.length}),S()}).catch(M=>E(M))}))}for(const v of _.sharedMaterials)if(v){const b=gi.assignTextureLOD(v,0);b instanceof Promise&&n.push(new Promise((S,E)=>{b.then(()=>{r++,ri.report("export-usdz-textures",{message:"Loaded progressive texture",currentStep:r,totalSteps:n.length}),S()}).catch(M=>E(M))}))}}ya&&pn("Progressive Loading: "+n.length),await Promise.all(n),ya&&pn("Progressive Loading: done"),ri.end("export-usdz-textures");const o=tr.Global.Mask;tr.Global.Set(sc.AR);const a=new F8,l=new j_(this.quickLookCompatible),c=[l,...this.extensions],h={self:this,exporter:a,extensions:c,object:e};ri.report("export-usdz","Invoking before-export"),this.dispatchEvent(new CustomEvent("before-export",{detail:h})),this.applyWebARSessionRoot(),this._previousTimeScale=this.context.time.timeScale,this.context.time.timeScale=0,ri.report("export-usdz","auto export animations and audio sources");const u=new Array;this.autoExportAnimations&&u.push(...cye(e,l)),this.extensions.find(_=>_.extensionName==="Audio")&&this.autoExportAudioSources&&u.push(...hye(e)),a.debug=ya,a.keepObject=_=>{const v=se.getComponent(_,Nn);return!(v&&!v.enabled)};const p=new Array;this.objectToExport&&this.quickLookCompatible&&this.interactive&&this.objectToExport.traverse(_=>{_.visible||p.push(_)});const m=this.extensions.find(_=>_.extensionName==="Behaviour");this.interactive&&m&&p.length>0&&m.addBehavior(uye(p));let y=!0;this.quickLookCompatible&&!this.interactive&&(y=!1),this.anchoringType!=="plane"&&this.anchoringType!=="none"&&this.anchoringType!=="image"&&this.anchoringType!=="face"&&(this.anchoringType="plane"),this.planeAnchoringAlignment!=="horizontal"&&this.planeAnchoringAlignment!=="vertical"&&this.planeAnchoringAlignment!=="any"&&(this.planeAnchoringAlignment="horizontal"),ri.report("export-usdz","Invoking exporter.parse");const g=await a.parse(this.objectToExport,{ar:{anchoring:{type:this.anchoringType},planeAnchoring:{alignment:this.planeAnchoringAlignment}},extensions:c,quickLookCompatible:this.quickLookCompatible,maxTextureSize:this.maxTextureSize,exportInvisible:y}),A=new Blob([g],{type:"model/vnd.usdz+zip"});this.revertWebARSessionRoot(),this.context.time.timeScale=this._previousTimeScale,ri.report("export-usdz","Invoking after-export"),this.dispatchEvent(new CustomEvent("after-export",{detail:h}));for(const _ of u)se.destroy(_);return tr.Global.Set(o),ri.end("export-usdz"),A}openInQuickLook(e,t){const i=e instanceof Blob?URL.createObjectURL(e):e,n=this.buildQuicklookOverlay();ya&&console.log("QuickLook Overlay",n);const r=n.callToAction?encodeURIComponent(n.callToAction):"",o=n.checkoutTitle?encodeURIComponent(n.checkoutTitle):"",a=n.checkoutSubtitle?encodeURIComponent(n.checkoutSubtitle):"";this.link.href=i+`#callToAction=${r}&checkoutTitle=${o}&checkoutSubtitle=${a}&callToActionURL=${n.callToActionURL}`,this.lastCallback||(this.lastCallback=this.quicklookCallback.bind(this),this.link.addEventListener("message",this.lastCallback)),this.link.download=t+".usdz",this.link.click()}download(e,t){LB.save(e,t)}static save(e,t){const i=document.createElement("a");i.style.display="none",document.body.appendChild(i),typeof e=="string"?i.href=e:i.href=URL.createObjectURL(e),i.download=t,i.click(),i.remove()}quicklookCallback(e){if((e==null?void 0:e.data)=="_apple_ar_quicklook_button_tapped"){ya&&Ni("Quicklook closed via call to action button");var t=new CustomEvent("quicklook-button-tapped",{detail:this});if(this.dispatchEvent(t),!t.defaultPrevented){const i=new URLSearchParams(this.link.href);if(i){const n=i.get("callToActionURL");ya&&pn("Quicklook url: "+n),n&&(Ju()?globalThis.open(n,"_blank"):console.warn("Quicklook closed: custom redirects require a Needle Engine Pro license: https://needle.tools/pricing",n))}}}}buildQuicklookOverlay(){var i,n,r,o,a,l;const e={};return this.customBranding&&Object.assign(e,this.customBranding),Ju()||(console.log("Custom Quicklook banner text requires pro license: https://needle.tools/pricing"),e.callToAction="Close",e.checkoutTitle="🌵 Made with Needle",e.checkoutSubtitle="_"),(((i=e.callToAction)==null?void 0:i.length)||((n=e.checkoutTitle)==null?void 0:n.length)||((r=e.checkoutSubtitle)==null?void 0:r.length))&&((o=e.callToAction)!=null&&o.length||(e.callToAction="\0"),(a=e.checkoutTitle)!=null&&a.length||(e.checkoutTitle="\0"),(l=e.checkoutSubtitle)!=null&&l.length||(e.checkoutSubtitle="\0")),this.dispatchEvent(new CustomEvent("quicklook-overlay",{detail:e})),e}getARScaleAndTarget(){if(!this.objectToExport)return{scale:1,_invertForward:!1,target:this.gameObject,sessionRoot:null};let e=se.getComponentInParent(this.objectToExport,ao);e||(e=se.getComponentInChildren(this.objectToExport,ao));let t=1,i=!1;const n=this.objectToExport;if(e)t=e.arScale,i=e.invertForward;else{const a=se.findObjectOfType(Us);a&&(t=a.arSceneScale)}return{scale:1/t,_invertForward:i,target:n,sessionRoot:(e==null?void 0:e.gameObject)??null}}applyWebARSessionRoot(){if(!this.objectToExport)return;const{scale:e,_invertForward:t,target:i,sessionRoot:n}=this.getARScaleAndTarget(),r=n==null?void 0:n.matrixWorld.clone().invert();this._rootSessionRootWasAppliedTo=i,this._rootPositionBeforeExport.copy(i.position),this._rootRotationBeforeExport.copy(i.quaternion),this._rootScaleBeforeExport.copy(i.scale),i.scale.multiplyScalar(e),t&&i.quaternion.multiply(LB.invertForwardQuaternion),i.updateMatrix(),i.updateMatrixWorld(!0),n&&r&&i.matrix.premultiply(r)}revertWebARSessionRoot(){if(!this.objectToExport||!this._rootSessionRootWasAppliedTo)return;const e=this._rootSessionRootWasAppliedTo;e.position.copy(this._rootPositionBeforeExport),e.quaternion.copy(this._rootRotationBeforeExport),e.scale.copy(this._rootScaleBeforeExport),e.updateMatrix(),e.updateMatrixWorld(!0),this._rootSessionRootWasAppliedTo=null}createQuicklookButton(){const t=Lh.getOrCreate().createQuicklookButton();return t.parentNode||this.context.menu.appendChild(t),t}},d($w,"invertForwardMatrix",new ye().makeRotationY(Math.PI)),d($w,"invertForwardQuaternion",new Ce().setFromEuler(new mi(0,Math.PI,0))),$w);let Fn=LB;Ur([x(Ae)],Fn.prototype,"objectToExport",2);Ur([x()],Fn.prototype,"autoExportAnimations",2);Ur([x()],Fn.prototype,"autoExportAudioSources",2);Ur([x()],Fn.prototype,"exportFileName",2);Ur([x(URL)],Fn.prototype,"customUsdzFile",2);Ur([x(Ld)],Fn.prototype,"customBranding",2);Ur([x()],Fn.prototype,"anchoringType",2);Ur([x()],Fn.prototype,"maxTextureSize",2);Ur([x()],Fn.prototype,"planeAnchoringAlignment",2);Ur([x()],Fn.prototype,"interactive",2);Ur([x()],Fn.prototype,"allowCreateQuicklookButton",2);Ur([x()],Fn.prototype,"quickLookCompatible",2);class ob extends Ie{constructor(){super(...arguments);d(this,"isUsed",!0);d(this,"usedBy",null)}}class AL extends Ie{}const Kz=ie("debugdeletable");class OE extends Da{}class vL extends Ie{constructor(){super(...arguments);d(this,"deleteBoxes",[])}awake(){this.deleteBoxes=se.findObjectsOfType(OE,this.context)}update(){for(const t of this.deleteBoxes){const i=this.gameObject;if(t.isInBox(i)===!0){const r=se.getComponentInParent(this.gameObject,ob);r?Kz&&console.warn("Can not delete object with usage marker",this.guid,r):(Kz&&console.log("DESTROY",this.gameObject),L_(this.gameObject,this.context.connection))}}}}var pye=Object.defineProperty,mye=Object.getOwnPropertyDescriptor,Kp=(s,e,t,i)=>{for(var n=i>1?void 0:i?mye(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&pye(e,t,n),n};const gye=ie("debugpost");class Dl extends dr{constructor(){super(...arguments);d(this,"mode");d(this,"focusDistance",new Ke(1));d(this,"focalLength",new Ke(.2));d(this,"aperture",new Ke(20));d(this,"gaussianMaxRadius",new Ke);d(this,"resolutionScale",new Ke(1*1/window.devicePixelRatio));d(this,"bokehScale",new Ke)}get typeName(){return"DepthOfField"}init(){this.focalLength.valueProcessor=i=>{const n=i/300,r=2;return it.lerp(r,.01,n)};const t=20;this.aperture.valueProcessor=i=>{const n=1-i/32;return it.lerp(1,t,n)}}onCreateEffect(){if(this.mode===0){gye&&console.warn("DepthOfField: Mode is set to Off");return}const t=new uQ(this.context.mainCamera,{worldFocusRange:.2,focalLength:1,bokehScale:20,resolutionScale:this.resolutionScale.value});return this.focusDistance.onValueChanged=i=>{t.cocMaterial.worldFocusDistance=i},this.focalLength.onValueChanged=i=>t.cocMaterial.worldFocusRange=i,this.aperture.onValueChanged=i=>t.bokehScale=i,this.resolutionScale&&(this.resolutionScale.onValueChanged=i=>t.resolution.scale=i),[t]}unapply(){}}Kp([x()],Dl.prototype,"mode",2);Kp([x(Ke)],Dl.prototype,"focusDistance",2);Kp([x(Ke)],Dl.prototype,"focalLength",2);Kp([x(Ke)],Dl.prototype,"aperture",2);Kp([x(Ke)],Dl.prototype,"gaussianMaxRadius",2);Kp([x(Ke)],Dl.prototype,"resolutionScale",2);Kp([x(Ke)],Dl.prototype,"bokehScale",2);qa("DepthOfField",Dl);var yye=Object.defineProperty,Aye=Object.getOwnPropertyDescriptor,vye=(s,e,t,i)=>{for(var n=i>1?void 0:i?Aye(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&yye(e,t,n),n};class LE extends Ie{constructor(){super(...arguments);d(this,"visibleOn")}onEnable(){this.apply()}apply(){this.test()||se.setActive(this.gameObject,!1)}test(){return this.visibleOn<0?!0:ja()?(this.visibleOn&2)!==0:(this.visibleOn&1)!==0}}vye([x()],LE.prototype,"visibleOn",2);class _L{get extensionName(){return"DocumentExtension"}onAfterBuildDocument(e){}}var _ye=Object.defineProperty,bye=Object.getOwnPropertyDescriptor,Jp=(s,e,t,i)=>{for(var n=i>1?void 0:i?bye(e,t):e,r=s.length-1,o;r>=0;r--)(o=s[r])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&_ye(e,t,n),n};const fc=ie("debugdrag");var tW=(s=>(s[s.XZPlane=0]="XZPlane",s[s.Attached=1]="Attached",s[s.HitNormal=2]="HitNormal",s[s.DynamicViewAngle=3]="DynamicViewAngle",s[s.SnapToSurfaces=4]="SnapToSurfaces",s[s.None=5]="None",s))(tW||{}),eS;const ql=(eS=class extends Ie{constructor(){super(...arguments);d(this,"dragMode",3);d(this,"snapGridResolution",0);d(this,"keepRotation",!0);d(this,"xrDragMode",1);d(this,"xrKeepRotation",!1);d(this,"xrDistanceDragFactor",1);d(this,"showGizmo",!1);d(this,"targetObject",null);d(this,"orbit",null);d(this,"_dragHelper",null);d(this,"_draggingRigidbodies",[]);d(this,"_potentialDragStartEvt",null);d(this,"_dragHandlers",new Map);d(this,"_totalMovement",new w);d(this,"_marker",null);d(this,"_isDragging",!1);d(this,"_didDrag",!1)}static get HasAnySelected(){return this._active>0}setTargetObject(e){this.targetObject=e;for(const t of this._dragHandlers.values())t.setTargetObject(e)}awake(){this._potentialDragStartEvt=null,this._dragHandlers=new Map,this._totalMovement=new w,this._marker=null,this._isDragging=!1,this._didDrag=!1,this._dragHelper=null,this._draggingRigidbodies=[]}start(){this.orbit=se.findObjectOfType(bi,this.context),this.gameObject.getComponentInParent(sa)||this.gameObject.addComponent(sa)}allowEdit(e=null){return this.context.connection.allowEditing}onPointerEnter(e){if(!this.allowEdit(this.gameObject)||e.mode!=="screen"||(e.event.mode==="tracked-pointer"||e.event.mode==="transient-pointer"?this.xrDragMode:this.dragMode)===5)return;const n=se.getComponentInParent(e.object,ql);!n||n!==this||(ql.lastHovered=e.object,this.context.domElement.style.cursor="pointer")}onPointerExit(e){this.allowEdit(this.gameObject)&&e.mode==="screen"&&ql.lastHovered===e.object&&(this.context.domElement.style.cursor="auto")}onPointerDown(e){if(!(!this.allowEdit(this.gameObject)||e.used||(e.mode==="tracked-pointer"||e.mode==="transient-pointer"?this.xrDragMode:this.dragMode)===5)&&(ql.lastHovered=e.object,e.button===0)){this._dragHandlers.size===0&&(this._didDrag=!1,this._totalMovement.set(0,0,0),this._potentialDragStartEvt=e),ql._active+=1;const n=new wye(this,this.targetObject||this.gameObject);if(this._dragHandlers.set(e.event.space,n),this.orbit&&(this.orbit.enabled=!1),n.onDragStart(e),this._dragHandlers.size===2){const r=this._dragHandlers.values(),o=r.next().value,a=r.next().value,l=new xye(this,this.targetObject||this.gameObject,o,a);this._dragHandlers.set(this.gameObject,l),l.onDragStart(e)}e.use()}}onPointerMove(e){(this._isDragging||this._potentialDragStartEvt!==null)&&e.use()}onPointerUp(e){if(fc&&_t.DrawLabel(e.point??this.gameObject.worldPosition,"POINTERUP:"+e.pointerId+", "+e.button,.03,3),!this.allowEdit(this.gameObject)||e.button!==0)return;this._potentialDragStartEvt=null;const t=this._dragHandlers.get(e.event.space),i=this._dragHandlers.get(this.gameObject);i&&(i.handlerA===t||i.handlerB===t)&&(this._dragHandlers.delete(this.gameObject),i.onDragEnd(e)),t&&(ql._active>0&&(ql._active-=1),t.onDragEnd&&t.onDragEnd(e),this._dragHandlers.delete(e.event.space),this._dragHandlers.size===0&&this.onLastDragEnd(e),e.use()),ql._active===0&&this.orbit&&(this.orbit.enabled=!0)}update(){for(const e of this._dragHandlers.values())e.collectMovementInfo&&e.collectMovementInfo(),e.getTotalMovement&&this._totalMovement.add(e.getTotalMovement());if(this._potentialDragStartEvt){if(!this._didDrag)if(this._totalMovement.length()>3e-4)this._didDrag=!0;else return;const e=this._potentialDragStartEvt;this._potentialDragStartEvt=null,this.onFirstDragStart(e)}for(const e of this._dragHandlers.values())e.onDragUpdate&&e.onDragUpdate(this._dragHandlers.size);this._dragHelper&&this._dragHelper.hasSelected&&this.onAnyDragUpdate()}onFirstDragStart(e){if(!this._dragHelper)if(this.context.mainCamera)this._dragHelper=new kS(this.context.mainCamera);else return;if(!e||!e.object)return;const t=se.getComponentInParent(e.object,ql);if(!t||t!==this&&t._isDragging)return;const i=this.targetObject||this.gameObject;if(!i)return;this._isDragging=!0,this._dragHelper.setSelected(i,this.context),this.orbit&&(this.orbit.enabled=!1);const n=se.getComponentInChildren(i,dd);fc&&console.log("DRAG START",n,i),n&&(n.fastMode=!0,n==null||n.requestOwnership()),this._marker=se.addComponent(i,ob),this._draggingRigidbodies.length=0;const r=se.getComponentsInChildren(i,zi);r&&this._draggingRigidbodies.push(...r)}onAnyDragUpdate(){if(!this._dragHelper)return;this._dragHelper.showGizmo=this.showGizmo,this._dragHelper.onUpdate(this.context);for(const t of this._draggingRigidbodies)t.wakeUp(),t.resetVelocities(),t.resetForcesAndTorques();const e=this.targetObject||this.gameObject;ka.markDirty(e)}onLastDragEnd(e){if(!this||!this._isDragging||(this._isDragging=!1,!this._dragHelper))return;for(const i of this._draggingRigidbodies)i.setVelocity(i.smoothedVelocity);this._draggingRigidbodies.length=0;const t=this._dragHelper.selected;if(fc&&console.log("DRAG END",t,t==null?void 0:t.visible),this._dragHelper.setSelected(null,this.context),this.orbit&&(this.orbit.enabled=!0),e!=null&&e.object){const i=se.getComponentInChildren(e.object,dd);i&&(i.fastMode=!1)}this._marker&&this._marker.destroy()}},d(eS,"_active",0),d(eS,"lastHovered"),eS);let Va=ql;Jp([x()],Va.prototype,"dragMode",2);Jp([x()],Va.prototype,"snapGridResolution",2);Jp([x()],Va.prototype,"keepRotation",2);Jp([x()],Va.prototype,"xrDragMode",2);Jp([x()],Va.prototype,"xrKeepRotation",2);Jp([x()],Va.prototype,"xrDistanceDragFactor",2);Jp([x()],Va.prototype,"showGizmo",2);class xye{constructor(e,t,i,n){d(this,"handlerA");d(this,"handlerB");d(this,"context");d(this,"settings");d(this,"gameObject");d(this,"_handlerAAttachmentPoint",new w);d(this,"_handlerBAttachmentPoint",new w);d(this,"_followObject");d(this,"_manipulatorObject");d(this,"_deviceMode");d(this,"_followObjectStartWorldQuaternion",new Ce);d(this,"_manipulatorPosOffset",new w);d(this,"_manipulatorRotOffset",new Ce);d(this,"_manipulatorScaleOffset",new w);d(this,"_tempVec1",new w);d(this,"_tempVec2",new w);d(this,"_tempVec3",new w);d(this,"tempLookMatrix",new ye);d(this,"_initialScale",new w);d(this,"_initialDistance",0);var o,a;this.context=e.context,this.settings=e,this.gameObject=t,this.handlerA=i,this.handlerB=n,this._followObject=new Ae,this._manipulatorObject=new Ae,this.context.scene.add(this._manipulatorObject);const r=(a=(o=Et.active)==null?void 0:o.rig)==null?void 0:a.gameObject;if(!this.handlerA||!this.handlerB||!this.handlerA.hitPointInLocalSpace||!this.handlerB.hitPointInLocalSpace){console.error("Invalid: MultiTouchDragHandler needs two valid DragPointerHandlers with hitPointInLocalSpace set.");return}if(this._tempVec1.copy(this.handlerA.hitPointInLocalSpace),this._tempVec2.copy(this.handlerB.hitPointInLocalSpace),this.gameObject.localToWorld(this._tempVec1),this.gameObject.localToWorld(this._tempVec2),r&&(r.worldToLocal(this._tempVec1),r.worldToLocal(this._tempVec2)),this._initialDistance=this._tempVec1.distanceTo(this._tempVec2),this._initialDistance<.02?(fc&&console.log("Finding alternative drag attachment points since initial distance is too low: "+this._initialDistance.toFixed(2)),this.handlerA.followObject.parent.getWorldPosition(this._tempVec1),this.handlerB.followObject.parent.getWorldPosition(this._tempVec2),this._handlerAAttachmentPoint.copy(this._tempVec1),this._handlerBAttachmentPoint.copy(this._tempVec2),this.gameObject.worldToLocal(this._handlerAAttachmentPoint),this.gameObject.worldToLocal(this._handlerBAttachmentPoint),this._initialDistance=this._tempVec1.distanceTo(this._tempVec2),this._initialDistance<.001&&(console.warn("Not supported right now – controller drag points for multitouch are too close!"),this._initialDistance=1)):(this._handlerAAttachmentPoint.copy(this.handlerA.hitPointInLocalSpace),this._handlerBAttachmentPoint.copy(this.handlerB.hitPointInLocalSpace)),this._tempVec3.lerpVectors(this._tempVec1,this._tempVec2,.5),this._initialScale.copy(t.scale),fc){this._followObject.add(new na(2)),this._manipulatorObject.add(new na(5));const l=c=>`${c.x.toFixed(2)}, ${c.y.toFixed(2)}, ${c.z.toFixed(2)}`;_t.DrawLine(this._tempVec1,this._tempVec2,65535,0,!1),_t.DrawLabel(this._tempVec3,"A:B "+this._initialDistance.toFixed(2)+`
6152
6152
  `+l(this._tempVec1)+`
6153
- `+l(this._tempVec2),.03,5)}}onDragStart(e){this.gameObject.add(this._followObject),this._followObject.matrixAutoUpdate=!1,this._followObject.matrix.identity(),this._deviceMode=e.mode,this._followObjectStartWorldQuaternion.copy(this._followObject.worldQuaternion),this.alignManipulator(),this._manipulatorObject.attach(this._followObject),this._manipulatorPosOffset.copy(this._followObject.position),this._manipulatorRotOffset.copy(this._followObject.quaternion),this._manipulatorScaleOffset.copy(this._followObject.scale)}onDragEnd(e){if(!this.handlerA||!this.handlerB){console.error("onDragEnd called on MultiTouchDragHandler without valid handlers. This is likely a bug.");return}this.handlerA.recenter(),this.handlerB.recenter(),this._manipulatorObject.removeFromParent(),this._followObject.removeFromParent(),this._manipulatorObject.destroy(),this._followObject.destroy()}alignManipulator(){if(!this.handlerA||!this.handlerB){console.error("alignManipulator called on MultiTouchDragHandler without valid handlers. This is likely a bug.",this);return}if(!this.handlerA.followObject||!this.handlerB.followObject){console.error("alignManipulator called on MultiTouchDragHandler without valid follow objects. This is likely a bug.",this.handlerA,this.handlerB);return}this._tempVec1.copy(this._handlerAAttachmentPoint),this._tempVec2.copy(this._handlerBAttachmentPoint),this.handlerA.followObject.localToWorld(this._tempVec1),this.handlerB.followObject.localToWorld(this._tempVec2),this._tempVec3.lerpVectors(this._tempVec1,this._tempVec2,.5),this._manipulatorObject.position.copy(this._tempVec3);const e=this.context.mainCamera;this.tempLookMatrix.lookAt(this._tempVec3,this._tempVec2,e.worldUp),this._manipulatorObject.quaternion.setFromRotationMatrix(this.tempLookMatrix);const t=this._tempVec1.distanceTo(this._tempVec2);this._manipulatorObject.scale.copy(this._initialScale).multiplyScalar(t/this._initialDistance),this._manipulatorObject.updateMatrix(),this._manipulatorObject.updateMatrixWorld(!0),fc&&(_t.DrawLabel(this._tempVec3.clone().add(new w(0,.2,0)),"A:B "+t.toFixed(2),.03),_t.DrawLine(this._tempVec1,this._tempVec2,65280,0,!1))}onDragUpdate(){this.alignManipulator();const e=30,t=1;this._followObject.position.copy(this._manipulatorPosOffset),this._followObject.quaternion.copy(this._manipulatorRotOffset),this._followObject.scale.copy(this._manipulatorScaleOffset);const i=this.gameObject,n=this._followObject;n.updateMatrix(),n.updateMatrixWorld(!0);const o=this._deviceMode==="tracked-pointer"||this._deviceMode==="transient-pointer"?this.settings.xrKeepRotation:this.settings.keepRotation;if(this.settings.snapGridResolution>0){const u=this._followObject.worldPosition,f=this.settings.snapGridResolution;u.x=Math.round(u.x/f)*f,u.y=Math.round(u.y/f)*f,u.z=Math.round(u.z/f)*f,this._followObject.worldPosition=u,this._followObject.updateMatrix()}o&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion,this._followObject.updateMatrix());const a=it.clamp01(this.context.time.deltaTime*e*t),l=i.worldPosition;l.lerp(n.worldPosition,a),i.worldPosition=l;const c=i.worldQuaternion;c.slerp(n.worldQuaternion,a),i.worldQuaternion=c;const h=i.worldScale;h.lerp(n.worldScale,a),i.worldScale=h}setTargetObject(e){this.gameObject=e}}class wye{constructor(e,t){d(this,"context");d(this,"gameObject");d(this,"settings");d(this,"_lastRig");d(this,"_followObject");d(this,"_totalMovement",new w);d(this,"_totalMovementAlongRayDirection",0);d(this,"_grabStartDistance",0);d(this,"_deviceMode");d(this,"_followObjectStartPosition",new w);d(this,"_followObjectStartQuaternion",new Ce);d(this,"_followObjectStartWorldQuaternion",new Ce);d(this,"_lastDragPosRigSpace");d(this,"_tempVec",new w);d(this,"_tempMat",new ye);d(this,"_hitPointInLocalSpace",new w);d(this,"_hitNormalInLocalSpace",new w);d(this,"_bottomCenter",new w);d(this,"_backCenter",new w);d(this,"_backBottomCenter",new w);d(this,"_bounds",new Ci);d(this,"_dragPlane",new $r(new w(0,1,0)));d(this,"_draggedOverObject",null);d(this,"_draggedOverObjectLastSetUp",null);d(this,"_draggedOverObjectLastNormal",new w);d(this,"_draggedOverObjectDuration",0);this.settings=e,this.context=e.context,this.gameObject=t,this._followObject=new Ae}getTotalMovement(){return this._totalMovement}get followObject(){return this._followObject}get hitPointInLocalSpace(){return this._hitPointInLocalSpace}setTargetObject(e){this.gameObject=e}recenter(){var r,o;if(!this._followObject.parent){console.warn("Error: space follow object doesn't have parent but recenter() is called. This is likely a bug");return}const e=this._followObject.parent;this.gameObject.add(this._followObject),this._followObject.matrixAutoUpdate=!1,this._followObject.position.set(0,0,0),this._followObject.quaternion.set(0,0,0,1),this._followObject.scale.set(1,1,1),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0),e.attach(this._followObject),this._followObjectStartPosition.copy(this._followObject.position),this._followObjectStartQuaternion.copy(this._followObject.quaternion),this._followObjectStartWorldQuaternion.copy(this._followObject.worldQuaternion),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);const t=this._hitPointInLocalSpace.clone();this.gameObject.localToWorld(t),this._grabStartDistance=t.distanceTo(e.worldPosition);const i=(o=(r=Et.active)==null?void 0:r.rig)==null?void 0:o.gameObject,n=(i==null?void 0:i.worldScale.x)||1;this._grabStartDistance/=n,this._totalMovementAlongRayDirection=0,this._lastDragPosRigSpace=void 0,fc&&(_t.DrawLine(t,e.worldPosition,65280,.5,!1),_t.DrawLabel(e.worldPosition.add(new w(0,.1,0)),this._grabStartDistance.toFixed(2),.03,.5))}onDragStart(e){if(e.event.space.add(this._followObject),this._lastDragPosRigSpace=void 0,e.point&&e.normal)this._hitPointInLocalSpace.copy(e.point),this.gameObject.worldToLocal(this._hitPointInLocalSpace),this._hitNormalInLocalSpace.copy(e.normal);else if(e){const y=e.event.space,g=y.worldPosition;this.gameObject.worldToLocal(g),this._hitPointInLocalSpace.copy(g);const A=y.worldUp;this._tempMat.copy(this.gameObject.matrixWorld).invert(),A.transformDirection(this._tempMat),this._hitNormalInLocalSpace.copy(A)}this.recenter(),this._totalMovement.set(0,0,0),this._deviceMode=e.mode;const i=this._followObject.parent.worldForward,r=this._deviceMode==="tracked-pointer"||this._deviceMode==="transient-pointer"?this.settings.xrDragMode:this.settings.dragMode,o=this._hitPointInLocalSpace.clone();switch(this.gameObject.localToWorld(o),r){case 0:const y=new w(0,1,0);this.gameObject.parent&&y.transformDirection(this.gameObject.parent.matrixWorld.clone().invert()),this._dragPlane.setFromNormalAndCoplanarPoint(y,o);break;case 2:const g=this._hitNormalInLocalSpace.clone();g.transformDirection(this.gameObject.matrixWorld),this._dragPlane.setFromNormalAndCoplanarPoint(g,o);break;case 1:this._dragPlane.setFromNormalAndCoplanarPoint(i,o);break;case 3:const A=new w(0,1,0),_=i,v=A.angleTo(_),b=.5;v>Math.PI/2+b||v<Math.PI/2-b?this._dragPlane.setFromNormalAndCoplanarPoint(new w(0,1,0),o):this._dragPlane.setFromNormalAndCoplanarPoint(i,o);break}const a=this.gameObject.parent,l=this.gameObject.position.clone(),c=this.gameObject.quaternion.clone(),h=this.gameObject.scale.clone(),u=this.gameObject.matrixWorld.clone();a&&a.remove(this.gameObject),this.gameObject.position.set(0,0,0),this.gameObject.quaternion.set(0,0,0,1),this.gameObject.scale.set(1,1,1);const f=cd([this.gameObject]);f.expandByPoint(this.gameObject.worldPosition);const p=new w;f.getCenter(p);const m=new w;f.getSize(m),this._bottomCenter.copy(p.clone().add(new w(0,-m.y/2,0))),this._backCenter.copy(p.clone().add(new w(0,0,m.z/2))),this._backBottomCenter.copy(p.clone().add(new w(0,-m.y/2,m.z/2))),this._bounds.copy(f),a&&a.add(this.gameObject),this.gameObject.position.copy(l),this.gameObject.quaternion.copy(c),this.gameObject.scale.copy(h),this.gameObject.matrixWorld.copy(u),this._draggedOverObject=null,this._draggedOverObjectLastSetUp=null,this._draggedOverObjectLastNormal.set(0,1,0),this._draggedOverObjectDuration=0}collectMovementInfo(){var r,o;if(!this._followObject.parent)return;const e=this._followObject.parent;this._followObject.updateMatrix();const t=e.worldPosition,i=(o=(r=Et.active)==null?void 0:r.rig)==null?void 0:o.gameObject;i&&i.worldToLocal(t),(this._lastDragPosRigSpace===void 0||i!=this._lastRig)&&(this._lastDragPosRigSpace=t.clone(),this._lastRig=i),this._tempVec.copy(t).sub(this._lastDragPosRigSpace);const n=e.worldForward;if(i&&(this._tempMat.copy(i.matrixWorld).invert(),n.transformDirection(this._tempMat)),this._totalMovementAlongRayDirection+=n.dot(this._tempVec),this._tempVec.x=Math.abs(this._tempVec.x),this._tempVec.y=Math.abs(this._tempVec.y),this._tempVec.z=Math.abs(this._tempVec.z),this._totalMovement.add(this._tempVec),this._lastDragPosRigSpace.copy(t),fc){let a=t;i&&(a=a.clone(),a.transformDirection(i.matrixWorld)),_t.DrawRay(a,n,255)}}onDragUpdate(e){if(e>1)return;const t=this.gameObject,i=this._followObject.parent;this._followObject.updateMatrix();const n=i.worldPosition,r=i.worldForward,o=this._deviceMode==="tracked-pointer"||this._deviceMode==="transient-pointer",a=o?this.settings.xrKeepRotation:this.settings.keepRotation,l=o?this.settings.xrDragMode:this.settings.dragMode;if(l===5)return;const c=10;a&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);let h=1,u=2;if(o&&this._grabStartDistance>.5){const g=1+this._totalMovementAlongRayDirection*(2*this.settings.xrDistanceDragFactor);h=Math.max(0,g),h=h*h*h}else this._grabStartDistance<=.5&&(u=3);this._followObject.position.copy(this._followObjectStartPosition),a||this._followObject.quaternion.copy(this._followObjectStartQuaternion),this._followObject.position.multiplyScalar(h),this._followObject.updateMatrix();const f=new Eo(n,r);if(l==4){const g=new Ml;g.testObject=_=>_!==this.followObject&&_!==i&&_!==t;const A=this.context.physics.raycastFromRay(f,g);if(A.length>0){const _=A[0];if(this._draggedOverObject===_.object?this._draggedOverObjectDuration+=this.context.time.deltaTime:(this._draggedOverObject=_.object,this._draggedOverObjectDuration=0),_.face){const b=this._draggedOverObjectDuration>=.15;if(b&&(this._draggedOverObjectLastSetUp!==this._draggedOverObject||this._draggedOverObjectLastNormal.dot(_.face.normal)<.999999||this.context.time.frame%60===0)){this._draggedOverObjectLastSetUp=this._draggedOverObject,this._draggedOverObjectLastNormal.copy(_.face.normal);const S=Ui(),E=Ui();this._bounds.getCenter(S),this._bounds.getSize(E),S.sub(E.multiplyScalar(.5).multiply(_.face.normal)),this._hitPointInLocalSpace.copy(S),this._hitNormalInLocalSpace.copy(_.face.normal),this._bounds.getCenter(S),this._bounds.getSize(E),S.add(E.multiplyScalar(.5).multiply(_.face.normal));const M=Ui(this._hitPointInLocalSpace).add(S);this._followObject.localToWorld(M);const T=_.point;this._dragPlane.setFromNormalAndCoplanarPoint(_.face.normal,T)}else if(!b)return}}}if(l!==1&&f.intersectPlane(this._dragPlane,this._tempVec)){this._followObject.worldPosition=this._tempVec,this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);const g=this._hitPointInLocalSpace.clone();this._followObject.localToWorld(g),fc&&_t.DrawLine(g,this._tempVec,65535,0,!1),this._followObject.worldPosition=this._tempVec.multiplyScalar(2).sub(g),this._followObject.updateMatrix(),this._followObject.updateMatrix()}if(this.settings.snapGridResolution>0){const g=this._followObject.worldPosition,A=this.settings.snapGridResolution;g.x=Math.round(g.x/A)*A,g.y=Math.round(g.y/A)*A,g.z=Math.round(g.z/A)*A,this._followObject.worldPosition=g,this._followObject.updateMatrix()}a&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion,this._followObject.updateMatrix());const p=it.clamp01(this.context.time.deltaTime*c*u),m=t.worldPosition;m.lerp(this._followObject.worldPosition,p),t.worldPosition=m;const y=t.worldQuaternion;if(y.slerp(this._followObject.worldQuaternion,p),t.worldQuaternion=y,fc){const g=this._hitPointInLocalSpace.clone();t.localToWorld(g),_t.DrawSphere(g,.02,16711680);const A=this._hitNormalInLocalSpace.clone();A.applyQuaternion(y),_t.DrawRay(g,A,16711680),_t.DrawLabel(m.add(new w(0,.25,0)),`Distance: ${this._totalMovement.length().toFixed(2)}
6153
+ `+l(this._tempVec2),.03,5)}}onDragStart(e){this.gameObject.add(this._followObject),this._followObject.matrixAutoUpdate=!1,this._followObject.matrix.identity(),this._deviceMode=e.mode,this._followObjectStartWorldQuaternion.copy(this._followObject.worldQuaternion),this.alignManipulator(),this._manipulatorObject.attach(this._followObject),this._manipulatorPosOffset.copy(this._followObject.position),this._manipulatorRotOffset.copy(this._followObject.quaternion),this._manipulatorScaleOffset.copy(this._followObject.scale)}onDragEnd(e){if(!this.handlerA||!this.handlerB){console.error("onDragEnd called on MultiTouchDragHandler without valid handlers. This is likely a bug.");return}this.handlerA.recenter(),this.handlerB.recenter(),this._manipulatorObject.removeFromParent(),this._followObject.removeFromParent(),this._manipulatorObject.destroy(),this._followObject.destroy()}alignManipulator(){if(!this.handlerA||!this.handlerB){console.error("alignManipulator called on MultiTouchDragHandler without valid handlers. This is likely a bug.",this);return}if(!this.handlerA.followObject||!this.handlerB.followObject){console.error("alignManipulator called on MultiTouchDragHandler without valid follow objects. This is likely a bug.",this.handlerA,this.handlerB);return}this._tempVec1.copy(this._handlerAAttachmentPoint),this._tempVec2.copy(this._handlerBAttachmentPoint),this.handlerA.followObject.localToWorld(this._tempVec1),this.handlerB.followObject.localToWorld(this._tempVec2),this._tempVec3.lerpVectors(this._tempVec1,this._tempVec2,.5),this._manipulatorObject.position.copy(this._tempVec3);const e=this.context.mainCamera;this.tempLookMatrix.lookAt(this._tempVec3,this._tempVec2,e.worldUp),this._manipulatorObject.quaternion.setFromRotationMatrix(this.tempLookMatrix);const t=this._tempVec1.distanceTo(this._tempVec2);this._manipulatorObject.scale.copy(this._initialScale).multiplyScalar(t/this._initialDistance),this._manipulatorObject.updateMatrix(),this._manipulatorObject.updateMatrixWorld(!0),fc&&(_t.DrawLabel(this._tempVec3.clone().add(new w(0,.2,0)),"A:B "+t.toFixed(2),.03),_t.DrawLine(this._tempVec1,this._tempVec2,65280,0,!1))}onDragUpdate(){this.alignManipulator();const e=30,t=1;this._followObject.position.copy(this._manipulatorPosOffset),this._followObject.quaternion.copy(this._manipulatorRotOffset),this._followObject.scale.copy(this._manipulatorScaleOffset);const i=this.gameObject,n=this._followObject;n.updateMatrix(),n.updateMatrixWorld(!0);const o=this._deviceMode==="tracked-pointer"||this._deviceMode==="transient-pointer"?this.settings.xrKeepRotation:this.settings.keepRotation;if(this.settings.snapGridResolution>0){const u=this._followObject.worldPosition,f=this.settings.snapGridResolution;u.x=Math.round(u.x/f)*f,u.y=Math.round(u.y/f)*f,u.z=Math.round(u.z/f)*f,this._followObject.worldPosition=u,this._followObject.updateMatrix()}o&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion,this._followObject.updateMatrix());const a=it.clamp01(this.context.time.deltaTime*e*t),l=i.worldPosition;l.lerp(n.worldPosition,a),i.worldPosition=l;const c=i.worldQuaternion;c.slerp(n.worldQuaternion,a),i.worldQuaternion=c;const h=i.worldScale;h.lerp(n.worldScale,a),i.worldScale=h}setTargetObject(e){this.gameObject=e}}class wye{constructor(e,t){d(this,"context");d(this,"gameObject");d(this,"settings");d(this,"_lastRig");d(this,"_followObject");d(this,"_totalMovement",new w);d(this,"_totalMovementAlongRayDirection",0);d(this,"_grabStartDistance",0);d(this,"_deviceMode");d(this,"_followObjectStartPosition",new w);d(this,"_followObjectStartQuaternion",new Ce);d(this,"_followObjectStartWorldQuaternion",new Ce);d(this,"_lastDragPosRigSpace");d(this,"_tempVec",new w);d(this,"_tempMat",new ye);d(this,"_hitPointInLocalSpace",new w);d(this,"_hitNormalInLocalSpace",new w);d(this,"_bottomCenter",new w);d(this,"_backCenter",new w);d(this,"_backBottomCenter",new w);d(this,"_bounds",new Ci);d(this,"_dragPlane",new $r(new w(0,1,0)));d(this,"_draggedOverObject",null);d(this,"_draggedOverObjectLastSetUp",null);d(this,"_draggedOverObjectLastNormal",new w);d(this,"_draggedOverObjectDuration",0);this.settings=e,this.context=e.context,this.gameObject=t,this._followObject=new Ae}getTotalMovement(){return this._totalMovement}get followObject(){return this._followObject}get hitPointInLocalSpace(){return this._hitPointInLocalSpace}setTargetObject(e){this.gameObject=e}recenter(){var r,o;if(!this._followObject.parent){console.warn("Error: space follow object doesn't have parent but recenter() is called. This is likely a bug");return}const e=this._followObject.parent;this.gameObject.add(this._followObject),this._followObject.matrixAutoUpdate=!1,this._followObject.position.set(0,0,0),this._followObject.quaternion.set(0,0,0,1),this._followObject.scale.set(1,1,1),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0),e.attach(this._followObject),this._followObjectStartPosition.copy(this._followObject.position),this._followObjectStartQuaternion.copy(this._followObject.quaternion),this._followObjectStartWorldQuaternion.copy(this._followObject.worldQuaternion),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);const t=this._hitPointInLocalSpace.clone();this.gameObject.localToWorld(t),this._grabStartDistance=t.distanceTo(e.worldPosition);const i=(o=(r=Et.active)==null?void 0:r.rig)==null?void 0:o.gameObject,n=(i==null?void 0:i.worldScale.x)||1;this._grabStartDistance/=n,this._totalMovementAlongRayDirection=0,this._lastDragPosRigSpace=void 0,fc&&(_t.DrawLine(t,e.worldPosition,65280,.5,!1),_t.DrawLabel(e.worldPosition.add(new w(0,.1,0)),this._grabStartDistance.toFixed(2),.03,.5))}onDragStart(e){if(e.event.space.add(this._followObject),this._lastDragPosRigSpace=void 0,e.point&&e.normal)this._hitPointInLocalSpace.copy(e.point),this.gameObject.worldToLocal(this._hitPointInLocalSpace),this._hitNormalInLocalSpace.copy(e.normal);else if(e){const y=e.event.space,g=y.worldPosition;this.gameObject.worldToLocal(g),this._hitPointInLocalSpace.copy(g);const A=y.worldUp;this._tempMat.copy(this.gameObject.matrixWorld).invert(),A.transformDirection(this._tempMat),this._hitNormalInLocalSpace.copy(A)}this.recenter(),this._totalMovement.set(0,0,0),this._deviceMode=e.mode;const i=this._followObject.parent.worldForward,r=this._deviceMode==="tracked-pointer"||this._deviceMode==="transient-pointer"?this.settings.xrDragMode:this.settings.dragMode,o=this._hitPointInLocalSpace.clone();switch(this.gameObject.localToWorld(o),r){case 0:const y=new w(0,1,0);this.gameObject.parent&&y.transformDirection(this.gameObject.parent.matrixWorld.clone().invert()),this._dragPlane.setFromNormalAndCoplanarPoint(y,o);break;case 2:const g=this._hitNormalInLocalSpace.clone();g.transformDirection(this.gameObject.matrixWorld),this._dragPlane.setFromNormalAndCoplanarPoint(g,o);break;case 1:this._dragPlane.setFromNormalAndCoplanarPoint(i,o);break;case 3:const A=new w(0,1,0),_=i,v=A.angleTo(_),b=.5;v>Math.PI/2+b||v<Math.PI/2-b?this._dragPlane.setFromNormalAndCoplanarPoint(new w(0,1,0),o):this._dragPlane.setFromNormalAndCoplanarPoint(i,o);break}const a=this.gameObject.parent,l=this.gameObject.position.clone(),c=this.gameObject.quaternion.clone(),h=this.gameObject.scale.clone(),u=this.gameObject.matrixWorld.clone();a&&a.remove(this.gameObject),this.gameObject.position.set(0,0,0),this.gameObject.quaternion.set(0,0,0,1),this.gameObject.scale.set(1,1,1);const f=cd([this.gameObject]);f.expandByPoint(this.gameObject.worldPosition);const p=new w;f.getCenter(p);const m=new w;f.getSize(m),this._bottomCenter.copy(p.clone().add(new w(0,-m.y/2,0))),this._backCenter.copy(p.clone().add(new w(0,0,m.z/2))),this._backBottomCenter.copy(p.clone().add(new w(0,-m.y/2,m.z/2))),this._bounds.copy(f),a&&a.add(this.gameObject),this.gameObject.position.copy(l),this.gameObject.quaternion.copy(c),this.gameObject.scale.copy(h),this.gameObject.matrixWorld.copy(u),this._draggedOverObject=null,this._draggedOverObjectLastSetUp=null,this._draggedOverObjectLastNormal.set(0,1,0),this._draggedOverObjectDuration=0}collectMovementInfo(){var r,o;if(!this._followObject.parent)return;const e=this._followObject.parent;this._followObject.updateMatrix();const t=e.worldPosition,i=(o=(r=Et.active)==null?void 0:r.rig)==null?void 0:o.gameObject;i&&i.worldToLocal(t),(this._lastDragPosRigSpace===void 0||i!=this._lastRig)&&(this._lastDragPosRigSpace=t.clone(),this._lastRig=i),this._tempVec.copy(t).sub(this._lastDragPosRigSpace);const n=e.worldForward;if(i&&(this._tempMat.copy(i.matrixWorld).invert(),n.transformDirection(this._tempMat)),this._totalMovementAlongRayDirection+=n.dot(this._tempVec),this._tempVec.x=Math.abs(this._tempVec.x),this._tempVec.y=Math.abs(this._tempVec.y),this._tempVec.z=Math.abs(this._tempVec.z),this._totalMovement.add(this._tempVec),this._lastDragPosRigSpace.copy(t),fc){let a=t;i&&(a=a.clone(),a.transformDirection(i.matrixWorld)),_t.DrawRay(a,n,255)}}onDragUpdate(e){if(e>1)return;const t=this.gameObject,i=this._followObject.parent;this._followObject.updateMatrix();const n=i.worldPosition,r=i.worldForward,o=this._deviceMode==="tracked-pointer"||this._deviceMode==="transient-pointer",a=o?this.settings.xrKeepRotation:this.settings.keepRotation,l=o?this.settings.xrDragMode:this.settings.dragMode;if(l===5)return;const c=10;a&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion),this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);let h=1,u=2;if(o&&this._grabStartDistance>.5){const g=1+this._totalMovementAlongRayDirection*(2*this.settings.xrDistanceDragFactor);h=Math.max(0,g),h=h*h*h}else this._grabStartDistance<=.5&&(u=3);this._followObject.position.copy(this._followObjectStartPosition),a||this._followObject.quaternion.copy(this._followObjectStartQuaternion),this._followObject.position.multiplyScalar(h),this._followObject.updateMatrix();const f=new Eo(n,r);if(l==4){const g=new Ml;g.testObject=_=>_!==this.followObject&&_!==i&&_!==t;const A=this.context.physics.raycastFromRay(f,g);if(A.length>0){const _=A[0];if(this._draggedOverObject===_.object?this._draggedOverObjectDuration+=this.context.time.deltaTime:(this._draggedOverObject=_.object,this._draggedOverObjectDuration=0),_.face){const b=this._draggedOverObjectDuration>=.15,S=.001,E=this._totalMovement.length()>=S;if((b||E)&&(this._draggedOverObjectLastSetUp!==this._draggedOverObject||this._draggedOverObjectLastNormal.dot(_.face.normal)<.999999||this.context.time.frame%60===0)){this._draggedOverObjectLastSetUp=this._draggedOverObject,this._draggedOverObjectLastNormal.copy(_.face.normal);const M=Ui(),T=Ui();this._bounds.getCenter(M),this._bounds.getSize(T),M.sub(T.multiplyScalar(.5).multiply(_.face.normal)),this._hitPointInLocalSpace.copy(M),this._hitNormalInLocalSpace.copy(_.face.normal),this._bounds.getCenter(M),this._bounds.getSize(T),M.add(T.multiplyScalar(.5).multiply(_.face.normal));const P=Ui(this._hitPointInLocalSpace).add(M);this._followObject.localToWorld(P);const C=_.point;this._dragPlane.setFromNormalAndCoplanarPoint(_.face.normal,C)}else if(!(b||E))return}}}if(l!==1&&f.intersectPlane(this._dragPlane,this._tempVec)){this._followObject.worldPosition=this._tempVec,this._followObject.updateMatrix(),this._followObject.updateMatrixWorld(!0);const g=this._hitPointInLocalSpace.clone();this._followObject.localToWorld(g),fc&&_t.DrawLine(g,this._tempVec,65535,0,!1),this._followObject.worldPosition=this._tempVec.multiplyScalar(2).sub(g),this._followObject.updateMatrix(),this._followObject.updateMatrix()}if(this.settings.snapGridResolution>0){const g=this._followObject.worldPosition,A=this.settings.snapGridResolution;g.x=Math.round(g.x/A)*A,g.y=Math.round(g.y/A)*A,g.z=Math.round(g.z/A)*A,this._followObject.worldPosition=g,this._followObject.updateMatrix()}a&&(this._followObject.worldQuaternion=this._followObjectStartWorldQuaternion,this._followObject.updateMatrix());const p=it.clamp01(this.context.time.deltaTime*c*u),m=t.worldPosition;m.lerp(this._followObject.worldPosition,p),t.worldPosition=m;const y=t.worldQuaternion;if(y.slerp(this._followObject.worldQuaternion,p),t.worldQuaternion=y,fc){const g=this._hitPointInLocalSpace.clone();t.localToWorld(g),_t.DrawSphere(g,.02,16711680);const A=this._hitNormalInLocalSpace.clone();A.applyQuaternion(y),_t.DrawRay(g,A,16711680),_t.DrawLabel(m.add(new w(0,.25,0)),`Distance: ${this._totalMovement.length().toFixed(2)}
6154
6154
 
6155
6155
  Along Ray: ${this._totalMovementAlongRayDirection.toFixed(2)}
6156
6156