webwallgl 1.0.0-beta1
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.
- package/LICENSE +21 -0
- package/README.en.md +173 -0
- package/README.md +173 -0
- package/imgs/alipay.png +0 -0
- package/imgs/wechat.png +0 -0
- package/package.json +42 -0
- package/types.d.ts +170 -0
- package/webwallgl.d.ts +42 -0
- package/webwallgl.global.js +13704 -0
- package/webwallgl.global.js.map +1 -0
- package/webwallgl.global.min.js +500 -0
- package/webwallgl.global.min.js.map +1 -0
- package/webwallgl.min.mjs +500 -0
- package/webwallgl.min.mjs.map +1 -0
- package/webwallgl.mjs +13700 -0
- package/webwallgl.mjs.map +1 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
function er(e,n){const t=n?.renderDpr??e.cfg?.renderDpr??1;return Math.min(window.devicePixelRatio||1,t)}function Sn(e){return e==="fit"?"contain":e==="fill"?"cover":e==="contain"||e==="stretch"?e:"cover"}function no(e){const n=Sn(e);return n==="contain"?{objectFit:"contain",background:"rgba(10,12,16,0.85)"}:n==="stretch"?{objectFit:"fill",background:"transparent"}:{objectFit:"cover",background:"transparent"}}function Wi(e){return{cfg:{type:"canvas"},coverAlign:{x:.5,y:.5,tx:.5,ty:.5},frameMeter:{stamps:[],last:0,fps:0},disposers:[]}}(()=>{const e=n=>n.preventDefault();window.addEventListener("contextmenu",e,!0),document.addEventListener("contextmenu",e,!0),window.__blockContextMenu=n=>n.addEventListener("contextmenu",e,!0)})();function on(e){e.wrap&&(e.wrap.innerHTML=""),e.raf!==void 0&&cancelAnimationFrame(e.raf),e.raf=void 0;for(const n of e.videoPairs??[])n.destroy();e.videoPairs=void 0,e.sceneCleanup&&e.sceneCleanup(),e.sceneCleanup=void 0,e.sceneCtl=void 0,e.renderer&&(e.renderer.dispose?.(),e.renderer=void 0);for(const n of e.videoTextures??[])n.pause(),n.removeAttribute("src"),n.load(),n.remove();e.videoTextures=void 0;for(const n of e.objectUrls??[])try{URL.revokeObjectURL(n)}catch{}if(e.objectUrls=void 0,e.sceneAudio){for(const n of e.sceneAudio.audios)n.pause(),n.removeAttribute("src"),n.load();e.sceneAudio=void 0}if(e.video){e.video.pause(),e.video.removeAttribute("src");try{e.video.load()}catch{}e.video.remove()}e.video=void 0,e.img=void 0,e.iframe=void 0,e.canvas=void 0,e.ctx=void 0,e.info=void 0,io(e)}function Vi(e){on(e);for(const n of e.disposers.splice(0))try{n()}catch{}e.wrap?.remove(),e.wrap=void 0}const Xi=new TextDecoder,ut=e=>Xi.decode(e).replace(/^\uFEFF/,""),ro=500;function oo(e,n){const t=e.frameMeter.stamps;t.push(n),e.frameMeter.last=n;const r=n-ro;for(;t.length&&t[0]<r;)t.shift();const o=t.length>=2?t[t.length-1]-t[0]:0;e.frameMeter.fps=o>0?(t.length-1)*1e3/o:0}function io(e){e.frameMeter.stamps.length=0,e.frameMeter.last=0,e.frameMeter.fps=0}function Hi(e){return!e.frameMeter.last||e.paused?{fps:0,running:!1}:performance.now()-e.frameMeter.last>Math.max(ro,400)?{fps:0,running:!1}:{fps:e.frameMeter.fps,running:!0}}function ae(e,n,t){try{e.onDiagnostic?.(t,/fail|error|失败|ERROR/.test(t)?"error":"info")}catch{}try{const r=n.mediaBase?new URL(n.mediaBase).origin:"";if(r){const o=new Image;o.src=`${r}/diag?msg=${encodeURIComponent(`scene ${n.src??"?"}: ${t.slice(0,500)}`)}`}}catch{}}function Mr(e){e.coverAlign.x=e.coverAlign.y=e.coverAlign.tx=e.coverAlign.ty=.5,Gi(e)}function Gi(e){const n=`${(e.coverAlign.x*100).toFixed(2)}% ${(e.coverAlign.y*100).toFixed(2)}%`,t=e.video??e.img;t&&t.isConnected&&(t.style.objectPosition=n)}function so(e,n,t){const r=er(e,t),o=Math.max(1,Math.round((n.clientWidth||window.innerWidth||1)*r)),i=Math.max(1,Math.round((n.clientHeight||window.innerHeight||1)*r));return n.width===o&&n.height===i?!1:(n.width=o,n.height=i,!0)}function Yi(e){const n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(e.length<16)throw new Error("\u6587\u4EF6\u592A\u5C0F\uFF0C\u4E0D\u662F scene.pkg");const t=n.getUint32(0,!0);if(t<4||t>16)throw new Error("\u9B54\u6570\u957F\u5EA6\u5F02\u5E38: "+t);const r=ao(e,4,t);if(!r.startsWith("PKGV"))throw new Error("\u4E0D\u662F scene.pkg\uFF0C\u9B54\u6570: "+r);const o=n.getUint32(4+t,!0);let i=4+t+4;const s=[];for(let a=0;a<o;a++){if(i+8>e.length)throw new Error("\u5165\u53E3\u8868\u8D8A\u754C @"+a);const u=n.getUint32(i,!0);if(i+=4,i+u+8>e.length)throw new Error("\u5165\u53E3 "+a+" \u8D8A\u754C");const l=Zi(e,i,u);i+=u;const d=n.getUint32(i,!0);i+=4;const h=n.getUint32(i,!0);i+=4,s.push({name:l,offset:d,size:h})}const c=i;return{magic:r,version:r.slice(4),count:o,entries:s,dataStart:c,fileSize:e.length,buf:e}}function _r(e,n){const t=e.entries.find(i=>i.name===n);if(t===void 0)return null;const r=e.dataStart+t.offset,o=r+t.size;if(r<0||o>e.fileSize)throw new Error("\u5165\u53E3 "+n+" \u8D8A\u754C");return e.buf.subarray(r,o)}function qi(e){let n=0;for(const t of e.entries)n=Math.max(n,t.offset+t.size);return{dataEnd:e.dataStart+n,fileSize:e.fileSize,ok:e.dataStart+n<=e.fileSize}}function ao(e,n,t){let r="";for(let o=n;o<n+t;o++)r+=String.fromCharCode(e[o]);return r}function Zi(e,n,t){try{return new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(n,n+t))}catch{return ao(e,n,t)}}const Ki=Object.freeze(Object.defineProperty({__proto__:null,getEntry:_r,parsePkg:Yi,verifyLayout:qi},Symbol.toStringTag,{value:"Module"})),Ar={0:"ARGB8888",1:"RGB888",2:"RGB565",4:"DXT5",6:"DXT3",7:"DXT1",8:"RG88",9:"R8",10:"RG1616f",11:"R16f",12:"BC7",13:"RGBa1010102",14:"RGBA16161616f",15:"RGB161616f"},Dt={UNKNOWN:-1,JPEG:2,PNG:13,GIF:25,WEBP:35,MP4:35};function Qi(e){const n=e.images[0];if(!n||n.length===0)throw new Error("\u65E0\u56FE\u50CF\u6570\u636E");const t=n[0];if(e.isVideo)return{width:t.width,height:t.height,video:t.data};if(e.freeImageFormat===Dt.PNG)return{width:t.width,height:t.height,png:t.data};if(e.freeImageFormat!==Dt.UNKNOWN)return{width:t.width,height:t.height,image:t.data,fif:e.freeImageFormat};const r=Tr(e.format,t.data,t.width,t.height);return!e.frames?.list?.length&&(t.width!==e.width||t.height!==e.height)?{width:e.width,height:e.height,rgba:co(r,t.width,t.height,e.width,e.height)}:{width:t.width,height:t.height,rgba:r}}function Ji(e){const n=e.images[0];if(!n||n.length===0)throw new Error("\u65E0\u56FE\u50CF\u6570\u636E");const t=[];for(const r of n){if(e.freeImageFormat!==Dt.UNKNOWN){t.push({width:r.width,height:r.height,image:r.data,fif:e.freeImageFormat});continue}const o=Tr(e.format,r.data,r.width,r.height);t.push({width:r.width,height:r.height,rgba:o})}return!e.frames?.list?.length&&t.length>0&&(t[0].width!==e.width||t[0].height!==e.height)&&t[0].rgba&&(t[0]={width:e.width,height:e.height,rgba:co(t[0].rgba,t[0].width,t[0].height,e.width,e.height)}),t}function co(e,n,t,r,o){const i=new Uint8Array(r*o*4);for(let s=0;s<o;s++)i.set(e.subarray(s*n*4,s*n*4+r*4),s*r*4);return i}function Tr(e,n,t,r){switch(e){case 0:return es(n,t,r);case 1:return ts(n,t,r);case 2:return ns(n,t,r);case 4:return as(n,t,r);case 6:return ss(n,t,r);case 7:return is(n,t,r);case 8:return rs(n,t,r);case 9:return os(n,t,r);case 12:throw new Error("BC7 \u89E3\u7801\u6682\u672A\u5B9E\u73B0\uFF08format=12\uFF09");default:throw new Error("\u672A\u652F\u6301\u7684\u7EB9\u7406\u683C\u5F0F: "+(Ar[e]||e))}}function es(e,n,t){return new Uint8Array(e.buffer,e.byteOffset,n*t*4).slice()}function ts(e,n,t){const r=new Uint8Array(n*t*4);for(let o=0;o<n*t;o++)r[o*4]=e[o*3],r[o*4+1]=e[o*3+1],r[o*4+2]=e[o*3+2],r[o*4+3]=255;return r}function ns(e,n,t){const r=new Uint8Array(n*t*4);for(let o=0;o<n*t;o++){const i=e[o*2]|e[o*2+1]<<8,s=i>>11&31,c=i>>5&63,a=i&31;r[o*4]=s<<3|s>>2,r[o*4+1]=c<<2|c>>4,r[o*4+2]=a<<3|a>>2,r[o*4+3]=255}return r}function rs(e,n,t){const r=new Uint8Array(n*t*4);for(let o=0;o<n*t;o++)r[o*4]=e[o*2+1],r[o*4+1]=e[o*2+1],r[o*4+2]=e[o*2+1],r[o*4+3]=e[o*2];return r}function os(e,n,t){const r=new Uint8Array(n*t*4);for(let o=0;o<n*t;o++)r[o*4]=e[o],r[o*4+1]=e[o],r[o*4+2]=e[o],r[o*4+3]=255;return r}function is(e,n,t){return Er(e,n,t,!0,0)}function ss(e,n,t){return Er(e,n,t,!1,3)}function as(e,n,t){return Er(e,n,t,!1,5)}function Er(e,n,t,r,o){const i=new Uint8Array(n*t*4),s=r?8:16,c=new Uint8Array(16);let a=0;for(let u=0;u<t;u+=4)for(let l=0;l<n;l+=4){if(a+s>e.length)return i;c.set(e.subarray(a,a+s)),a+=s;const d=cs(c,r),h=ls(c,r),p=o===3?us(c):o===5?fs(c):null;for(let w=0;w<4;w++)for(let m=0;m<4;m++){const g=l+m,v=u+w;if(g>=n||v>=t)continue;const b=w*4+m,x=(v*n+g)*4;i[x]=d[h[b]*4],i[x+1]=d[h[b]*4+1],i[x+2]=d[h[b]*4+2],i[x+3]=p!==null?p[b]:d[h[b]*4+3]}}return i}function lo(e,n){const t=e[n]|e[n+1]<<8,r=t>>11&31,o=t>>5&63,i=t&31;return[t,r<<3|r>>2,o<<2|o>>4,i<<3|i>>2]}function cs(e,n){const t=n?0:8,r=lo(e,t),o=lo(e,t+2),i=new Uint8Array(16);return i[0]=r[1],i[1]=r[2],i[2]=r[3],i[3]=255,i[4]=o[1],i[5]=o[2],i[6]=o[3],i[7]=255,n&&r[0]<=o[0]?(i[8]=r[1]+o[1]>>1,i[9]=r[2]+o[2]>>1,i[10]=r[3]+o[3]>>1,i[11]=255,i[12]=0,i[13]=0,i[14]=0,i[15]=0):(i[8]=Math.floor((2*r[1]+o[1])/3),i[9]=Math.floor((2*r[2]+o[2])/3),i[10]=Math.floor((2*r[3]+o[3])/3),i[11]=255,i[12]=Math.floor((r[1]+2*o[1])/3),i[13]=Math.floor((r[2]+2*o[2])/3),i[14]=Math.floor((r[3]+2*o[3])/3),i[15]=255),i}function ls(e,n){const t=n?4:12,r=new Uint8Array(16);for(let o=0;o<4;o++){const i=e[t+o];r[o*4]=i&3,r[o*4+1]=i>>2&3,r[o*4+2]=i>>4&3,r[o*4+3]=i>>6&3}return r}function us(e){const n=new Uint8Array(16);for(let t=0;t<8;t++){const r=e[t],o=r&15,i=r&240;n[2*t]=o|o<<4,n[2*t+1]=i|i>>4}return n}function fs(e){const n=e[0],t=e[1],r=new Uint8Array(8);if(r[0]=n,r[1]=t,n<=t){for(let c=1;c<5;c++)r[1+c]=Math.floor(((5-c)*n+c*t)/5);r[6]=0,r[7]=255}else for(let c=1;c<7;c++)r[c+1]=Math.floor(((7-c)*n+c*t)/7);const o=new Uint8Array(16);let i=0;for(let c=0;c<2;c++){let a=0;for(let u=0;u<3;u++)a|=e[2+c*3+u]<<8*u;for(let u=0;u<8;u++)o[i++]=a>>3*u&7}const s=new Uint8Array(16);for(let c=0;c<16;c++)s[c]=r[o[c]];return s}function uo(e,n){const t=new Uint8Array(n);let r=0,o=0;for(;r<e.length;){const i=e[r++];let s=i>>4;if(s===15){let l;do l=e[r++],s+=l;while(l===255)}for(let l=0;l<s;l++)t[o++]=e[r++];if(r>=e.length)break;const c=e[r]|e[r+1]<<8;r+=2;let a=4+(i&15);if((i&15)===15){let l;do l=e[r++],a+=l;while(l===255)}const u=o-c;for(let l=0;l<a;l++)t[o++]=t[u+l]}return t}function Ue(e,n){return(e[n]|e[n+1]<<8|e[n+2]<<16|e[n+3]<<24)>>>0}function fo(e,n){return Ue(e,n)|0}const Pn=new DataView(new ArrayBuffer(4));function zt(e,n){return Pn.setUint8(0,e[n]),Pn.setUint8(1,e[n+1]),Pn.setUint8(2,e[n+2]),Pn.setUint8(3,e[n+3]),Pn.getFloat32(0,!0)}function ds(e){let n=0;const t=tr(e,n,9);if(n+=9,t!=="TEXV0005\0")throw new Error("\u4E0D\u662F .tex \u6587\u4EF6: "+t);const r=tr(e,n,9);if(n+=9,r!=="TEXI0001\0")throw new Error("\u672A\u77E5 TEXI \u5B50\u5BB9\u5668: "+r);const o=Ue(e,n);n+=4;const i=Ue(e,n);n+=4;const s=Ue(e,n);n+=4;const c=Ue(e,n);n+=4;const a=Ue(e,n);n+=4;const u=Ue(e,n);n+=4,n+=4;const l=tr(e,n,9);n+=9;const d=Ue(e,n);n+=4;let h=Dt.UNKNOWN,p=0;if(l==="TEXB0004\0"){h=Ue(e,n)|0,n+=4;const E=Ue(e,n);n+=4,h===Dt.UNKNOWN&&E===1&&(h=Dt.MP4),p=E===1?4:3}else if(l==="TEXB0003\0")h=Ue(e,n)|0,n+=4,p=3;else if(l==="TEXB0002\0")p=2;else if(l==="TEXB0001\0")p=1;else throw new Error("\u672A\u77E5 TEXB \u5BB9\u5668: "+l);const w=(i&32)!==0||h===Dt.MP4,m=[];for(let E=0;E<d;E++){const _=Ue(e,n);n+=4;const C=[];for(let N=0;N<_;N++){if(p===4){for(n+=8;n<e.length&&e[n]!==0;)n++;n+=1,n+=4}const D=Ue(e,n);n+=4;const k=Ue(e,n);n+=4;let O=0,j=0;p>=2&&(O=Ue(e,n),n+=4,j=fo(e,n),n+=4);const W=fo(e,n);if(n+=4,w){C.push({width:D,height:k,compression:0,data:e.subarray(n)}),n=e.length;continue}O===0&&(j=W);const K=e.subarray(n,n+W);n+=W;let V=K;O===1&&(V=uo(K,j)),C.push({width:D,height:k,compression:O,data:V})}m.push(C)}const g=m[0]&&m[0][0],v=g?g.width:s,b=g?g.height:c;let x=null;if(n+13<=e.length){const E=tr(e,n,9);if(E.indexOf("TEXS")===0){let _=n+9;const C=Ue(e,_);_+=4;let N=0,D=0;E==="TEXS0003\0"&&(N=Ue(e,_),_+=4,D=Ue(e,_),_+=4);const k=e.length-_,O=C>0&&k>0&&k%C===0?k/C:0;if(C>0&&C<=4096&&O>=32){const j=[];for(let K=0;K<C;K++){const V=_+K*O;if(V+32>e.length)break;const G=zt(e,V+8),Q=zt(e,V+12),q=zt(e,V+16),te=zt(e,V+20),me=zt(e,V+24),ye=zt(e,V+28);j.push({imageId:zt(e,V)|0,duration:zt(e,V+4),x:G,y:Q,width:Math.hypot(q,te)||N,height:Math.hypot(me,ye)||D,uDir:[q,te],vDir:[me,ye],rotated:Math.abs(te)>.5||Math.abs(me)>.5})}j.length===C&&j.every(K=>{if(!(K.width>0&&K.height>0))return!1;const V=[K.x,K.x+K.uDir[0],K.x+K.vDir[0],K.x+K.uDir[0]+K.vDir[0]],G=[K.y,K.y+K.uDir[1],K.y+K.vDir[1],K.y+K.uDir[1]+K.vDir[1]];return Math.min(...V)>=-1&&Math.max(...V)<=v+1&&Math.min(...G)>=-1&&Math.max(...G)<=b+1})&&(x={magic:E,frameWidth:N,frameHeight:D,atlasWidth:v,atlasHeight:b,list:j})}}}return{format:o,formatName:Ar[o]||String(o),flags:i,textureWidth:s,textureHeight:c,width:a,height:u,freeImageFormat:h,containerMagic:l,containerVersion:p,isVideo:w,images:m,frames:x}}function tr(e,n,t){let r="";for(let o=n;o<n+t;o++)r+=String.fromCharCode(e[o]);return r}const hs=Object.freeze(Object.defineProperty({__proto__:null,FIF:Dt,TEXTURE_FORMATS:Ar,decodeMip0:Qi,decodeMips:Ji,decodePixels:Tr,lz4Decompress:uo,parseTex:ds},Symbol.toStringTag,{value:"Module"}));function ho(e,n){if(!e||typeof n!="string")return null;const t=e[n];return t&&typeof t=="object"?t:null}function Sr(e){return typeof e=="string"?e:e&&typeof e=="object"&&typeof e.name=="string"?e.name:null}function ms(e,n){return nr(e)&&nr(n)?Number(e)===Number(n):String(e)===String(n)}function Pr(e){if(typeof e=="boolean")return"bool";if(typeof e=="number")return Number.isFinite(e)?"num":"other";if(typeof e=="string"){const n=e.trim().split(/\s+/);return n.length>0&&n[0]!==""&&n.every(t=>Number.isFinite(Number(t)))?"num":"text"}return"other"}function ps(e){switch(e.type){case"bool":return"bool";case"slider":return"num";case"color":return"num";case"textinput":return"text";default:return Pr(e.value)}}function mo(e,n){if(e===null||typeof e!="object")return e;if(e.user&&typeof e.user=="object"&&typeof e.user.name=="string"){const r=ho(n,e.user.name);if(!r||r.value===void 0||r.value===null)return e.value;const o=r.type==="combo"?Cr(r.value,r.options):r.value;return ms(o,e.user.condition)}if(typeof e.user!="string")return e;const t=ho(n,e.user);if(!t||t.value===void 0||t.value===null)return e.value;if(t.userOverridden)return t.value;if(e.value!==null&&typeof e.value=="object")return e.value;if(e.value===void 0)return t.value;if(Pr(e.value)==="bool"&&t.type==="slider"){const r=Number(t.value);return Number.isFinite(r)?r!==0:e.value}return Pr(e.value)===ps(t)?t.value:e.value}function sn(e,n,t){if(t>32||e===null||typeof e!="object")return e;if(Array.isArray(e)){for(let r=0;r<e.length;r++)e[r]=sn(e[r],n,t+1);return e}if(Sr(e.user)){let r=mo(e,n);for(let o=0;o<8&&r!==null&&typeof r=="object"&&Sr(r.user);o++)r=mo(r,n);return e.value=sn(r,n,t+1),e}for(const r of Object.keys(e))e[r]=sn(e[r],n,t+1);return e}function gs(e){return e?Array.isArray(e)?e.map(n=>n&&typeof n=="object"&&"value"in n?n.value:n):typeof e=="object"?Object.values(e):[]:[]}function nr(e){return typeof e=="number"?Number.isInteger(e):typeof e=="string"&&/^-?\d+$/.test(e.trim())}function Cr(e,n){const t=gs(n);return!(t.length>0?t.every(nr):nr(e))||typeof e=="number"&&Number.isFinite(e)?e:typeof e=="string"&&/^-?\d+$/.test(e.trim())?Number(e):e}function bs(e){const n={};if(!e||typeof e!="object")return n;for(const[t,r]of Object.entries(e))!r||typeof r!="object"||!("value"in r)||(n[t]=r.type==="combo"?Cr(r.value,r.options):r.value);return n}function xt(e){return e&&typeof e=="object"?Sr(e.user):null}function vs(e,n,t){const r={};if(!t||typeof t!="object")return r;const o=e&&typeof e=="object"?e:{},i=n&&typeof n=="object"?n:{};for(const[s,c]of Object.entries(t)){const a=c&&typeof c=="object"&&"value"in c?c.value:c,u=o[s];if(u&&typeof u=="object"){u.value=a,u.userOverridden=!0;const l=u.type==="combo"?Cr(u.value,u.options):u.value;i[s]=l,r[s]=l}else i[s]=a,r[s]=a}return r}function an(e){typeof e=="object"&&e!==null&&(e=e.value);const n=String(e??"").trim().split(/\s+/).map(Number);return n.length===1?[n[0]||0,n[0]||0,n[0]||0]:[n[0]||0,n[1]||0,n[2]||0]}function Cn(e){typeof e=="object"&&e!==null&&(e=e.value);const n=String(e??"").trim().split(/\s+/).map(Number);return n.length===1?[n[0]||0,n[0]||0]:[n[0]||0,n[1]||0]}function rr(e){return e==null?[1,1,1]:typeof e=="string"?an(e):typeof e=="object"&&e!==null?an(e.value):[1,1,1]}function Ke(e,n=!1){if(e==null)return n;if(typeof e=="boolean")return e;if(typeof e=="number")return e!==0;if(typeof e=="object"&&e!==null){const t=e.value;return typeof t=="number"?t!==0:!!t}return n}function nt(e,n){if(typeof e=="number")return e;if(e!==null&&typeof e=="object"){const t=Number(e.value);return Number.isFinite(t)?t:n}return n}function xs(e,n){const t=n&&n.general&&n.general.properties||{},r=e.objects||[];sn(r,t,0),sn(e.general||{},t,0);const o=new Map;for(const m of r)m.id!==void 0&&o.set(m.id,m);const i=r.map(m=>({id:m.id,parent:m.parent,origin:an(m.origin||"0 0 0"),scale:an(m.scale||"1 1 1"),angles:an(m.angles||"0 0 0")}));for(let m=0;m<8;m++){let g=!1;for(const v of i){if(v.parent===void 0||v.parent===null||!o.get(v.parent))continue;const x=i.findIndex(G=>G.id===v.parent);if(x<0)continue;const E=i[x];if(E.parent!==void 0&&E.parent!==null)continue;const _=r[x],C=_.scale,N=C!==null&&typeof C=="object"&&(typeof C.script=="string"||C.user!==void 0),D=!_.image&&!_.model&&!_.particle&&_.text==null&&!_.size,k=N&&D?[1,1,1]:E.scale,O=E.angles[2]*Math.PI/180,j=Math.cos(O),W=Math.sin(O),K=v.origin[0]*k[0],V=v.origin[1]*k[1];v.origin[0]=E.origin[0]+K*j-V*W,v.origin[1]=E.origin[1]+K*W+V*j,v.origin[2]=E.origin[2]+v.origin[2],v.angles[2]=E.angles[2]+v.angles[2],v.scale[0]=k[0]*v.scale[0],v.scale[1]=k[1]*v.scale[1],v.scale[2]=k[2]*v.scale[2],v.parent=null,g=!0}if(!g)break}const s=r.map(m=>Ke(m.visible,!0)),c=new Map;r.forEach((m,g)=>{m.id!==void 0&&c.set(m.id,g)});const a=new Map,u=new Map;for(const m of r)if(m.parent!==void 0&&m.parent!==null){a.set(m.parent,(a.get(m.parent)||0)+1);const g=m.id!==void 0?m.id:null;if(g!==null){const v=u.get(m.parent);v?v.push(g):u.set(m.parent,[g])}}const l=r.map(()=>!0);for(let m=0;m<r.length;m++){let g=s[m],v=r[m].parent;for(let b=0;g&&v!==void 0&&v!==null&&b<64;b++){const x=c.get(v);if(x===void 0)break;s[x]||(g=!1),v=r[x].parent}l[m]=g}const d=r.map((m,g)=>{const v=i[g],b=typeof m.image=="string"&&(m.image.indexOf("models/util/projectlayer")===0||m.image.indexOf("models/util/fullscreenlayer")===0);let x=Cn(m.size||"0 0"),E=v.origin;if(b){const _=(e.general||{}).orthogonalprojection,C=_&&Number(_.width),N=_&&Number(_.height);C>0&&N>0&&(x=[C,N],E=[C/2,N/2,v.origin[2]||0])}return{id:m.id!==void 0?m.id:g,name:m.name||"",visible:l[g],visibleSelf:s[g],srcObject:m,image:typeof m.image=="string"?m.image:null,model:typeof m.model=="string"?m.model:null,isSkybox:typeof m.name=="string"&&m.name.indexOf("\u5929\u7A7A\u76D2")>=0,particle:typeof m.particle=="string"?m.particle:null,instanceoverride:m.instanceoverride||null,sound:Array.isArray(m.sound)?m.sound.filter(_=>typeof _=="string"):[],soundprops:{volume:nt(m.volume,1),playbackmode:m.playbackmode||"single",startsilent:Ke(m.startsilent,!1),maxtime:nt(m.maxtime,0),mintime:nt(m.mintime,0),spatialization:Ke(m.spatialization,!1),muteineditor:Ke(m.muteineditor,!1)},text:typeof m.text=="string"?m.text:m.text&&typeof m.text=="object"?m.text.value:null,textScript:m.text&&typeof m.text=="object"&&m.text.script||null,textScriptProps:m.text&&typeof m.text=="object"&&m.text.scriptproperties||null,component:typeof m.component=="string"?m.component:null,isText:m.text!==void 0&&m.text!==null,textFont:typeof m.font=="string"?m.font:null,textPointsize:nt(m.pointsize,24)||24,textColor:rr(m.color),textAnchor:typeof m.anchor=="string"&&m.anchor!=="none"?m.anchor:"center",textMaxwidth:nt(m.maxwidth,0),textMaxrows:nt(m.maxrows,0),textLimitwidth:Ke(m.limitwidth,!1),textLimitrows:Ke(m.limitrows,!1),textLimituseellipsis:Ke(m.limituseellipsis,!1),textHAlign:m.horizontalalign||"center",textVAlign:m.verticalalign||"center",textSpacing:m.spacing?Cn(m.spacing):[0,0],textPadding:(()=>{const _=m.padding;if(typeof _=="number")return _;const C=String(_??"").trim().split(/\s+/).map(Number).filter(N=>Number.isFinite(N));return C.length?C.reduce((N,D)=>N+D,0)/C.length:0})(),textOpaquebackground:Ke(m.opaquebackground,!1),textBackgroundcolor:rr(m.backgroundcolor),textBackgroundbrightness:nt(m.backgroundbrightness,1),textCastshadow:Ke(m.castshadow,!1),isSound:!!(m.sound&&m.sound.length),isComponent:!!m.component,objectScripts:(()=>{const _={};for(const C of["scale","origin","color","alpha","brightness","angles","visible"]){const N=m[C];N&&typeof N=="object"&&typeof N.script=="string"&&N.script&&(_[C]={script:N.script,scriptproperties:N.scriptproperties||null,value:N.value})}return Object.keys(_).length?_:null})(),objectAnimations:(()=>{const _={};for(const C of["scale","origin","color","alpha","brightness","angles","visible","volume","maxwidth","zoom"]){const N=m[C];N&&typeof N=="object"&&N.animation&&typeof N.animation=="object"&&N.animation.options&&(_[C]={animation:N.animation,value:N.value})}return Object.keys(_).length?_:null})(),animationLayers:(m.animationlayers||[]).filter(_=>_&&typeof _.animation=="number").map(_=>({animation:_.animation,visible:Ke(_.visible,!0),additive:Ke(_.additive,!1),blend:nt(_.blend,1),rate:nt(_.rate,1)})),solid:(()=>{if(typeof m.particle=="string")return!1;const _=typeof m.image=="string"?m.image:"";return _.indexOf("models/util/composelayer")===0?!1:_.indexOf("models/util/solidlayer")===0?!0:m.solid?!_||_.indexOf("models/util/")===0:!1})(),isContainer:typeof m.image=="string"&&m.image.indexOf("models/util/composelayer")===0,hasChildren:(a.get(m.id!==void 0?m.id:g)||0)>0,childIds:u.get(m.id!==void 0?m.id:g)||null,parentId:m.parent!==void 0&&m.parent!==null?m.parent:null,attachment:typeof m.attachment=="string"&&m.attachment!==""?m.attachment:null,passthrough:!!(m.config&&m.config.passthrough===!0),isPostProcess:b,origin:E,scale:v.scale,angles:v.angles,size:x,alignment:m.alignment||"center",color:rr(m.color),alpha:nt(m.alpha,1),brightness:nt(m.brightness,1),copybackground:!!m.copybackground,colorBlendMode:m.colorBlendMode||0,parallaxDepth:m.parallaxDepth!==void 0?Cn(m.parallaxDepth):null,effects:(m.effects||[]).map(_=>({file:_.file||"",name:typeof _.name=="string"?_.name:"",visible:Ke(_.visible,!0),visibleScript:_.visible&&typeof _.visible=="object"&&typeof _.visible.script=="string"&&_.visible.script?{script:_.visible.script,scriptproperties:_.visible.scriptproperties||null,value:!!_.visible.value}:null,passes:(_.passes||[]).map(C=>({combos:C.combos||{},constantshadervalues:C.constantshadervalues||{},textures:C.textures||[]}))}))}}),h=e.general||{},p=(()=>{const m={};for(const[g,v]of Object.entries(h))v&&typeof v=="object"&&typeof v.script=="string"&&v.script&&(m[g]={script:v.script,scriptproperties:v.scriptproperties||null,value:v.value});return Object.keys(m).length?m:null})(),w=(()=>{const m={};for(const[g,v]of Object.entries(h))v&&typeof v=="object"&&v.animation&&typeof v.animation=="object"&&v.animation.options&&(m[g]={animation:v.animation,value:v.value});return Object.keys(m).length?m:null})();{const m=new Map;for(const g of d)g.id!==void 0&&m.set(g.id,g);for(let g=0;g<8;g++){let v=!1;for(const b of d){if(b.parallaxDepth||b.parentId==null)continue;const x=m.get(b.parentId);!x||!x.parallaxDepth||x.image||x.particle||x.model||(b.parallaxDepth=x.parallaxDepth.slice(),v=!0)}if(!v)break}}return{camera:e.camera||null,general:h,generalScripts:p,generalAnimations:w,layers:d,properties:t}}function ys(e){if(!Array.isArray(e))return;const n=new Map;for(const t of e)t&&t.id!==void 0&&t.id!==null&&n.set(t.id,t);for(const t of e){if(!t)continue;if(t.destroyed){t.visible=!1;continue}let r=t.visibleSelf!==!1,o=t.parentId;for(let i=0;r&&o!=null&&i<64;i++){const s=n.get(o);if(!s)break;(s.visibleSelf===!1||s.destroyed)&&(r=!1),o=s.parentId}t.visible=r}}function ws(e,n){!e||!n||typeof n!="object"||e.isContainer||n.solidlayer===!0&&(e.solid=!0)}function Ms(e){return!e||typeof e.material!="string"?null:{materialPath:e.material,autosize:!!e.autosize,cropoffset:e.cropoffset?Cn(e.cropoffset):null}}const _s=Object.freeze(Object.defineProperty({__proto__:null,applySolidFromModel:ws,parseBool:Ke,parseColor:rr,parseNum:nt,parseScene:xs,parseVec2:Cn,parseVec3:an,recomputeLayerVisibility:ys,resolveMaterial:Ms},Symbol.toStringTag,{value:"Module"}));function As(e,n,t){const r=_r(e,n.file);if(r===null)return;let o;try{o=JSON.parse(t(r))}catch{return}n.fbos=o.fbos||[],n.materialPasses=(o.passes||[]).map(i=>{if(!i.material)return{shader:null,copyCommand:!0,target:i.target||null,source:i.source||null,binds:i.bind||[],blending:"normal",textures:[],combos:{},constants:{}};const s=_r(e,i.material);if(s===null)return{shader:null,copyCommand:!1,target:i.target||null,binds:i.bind||[],blending:"normal",textures:[],combos:{},constants:{}};const c=JSON.parse(t(s)),a=c.passes&&c.passes[0]||{};return{shader:a.shader||null,copyCommand:!1,target:i.target||null,binds:i.bind||[],blending:a.blending||"normal",textures:a.textures||[],combos:a.combos||{},constants:a.constantshadervalues||{}}})}const Ts={"models/util/solidlayer.json":{material:"materials/util/solidlayer.json"},"models/util/composelayer.json":{material:"materials/util/solidlayer.json"},"models/util/fullscreenlayer.json":{material:"materials/util/solidlayer.json"},"models/util/projectlayer.json":{material:"materials/util/solidlayer.json"}};function po(e){if(!e||typeof e!="string")return!0;const n=e.toLowerCase();return n==="generic"||n==="sprite"||n==="flat"||n.startsWith("genericimage")}function Es(e,n){return!e||!n||!n.shader||po(n.shader)||(e.effects=e.effects||[],e.effects.some(t=>t.layerMaterial))?!1:(e.effects.unshift({file:"",name:"_layerMaterial",visible:!0,layerMaterial:!0,passes:[{combos:n.combos||{},constantshadervalues:n.constantshadervalues||{},textures:n.textures||[]}],materialPasses:[{shader:n.shader,copyCommand:!1,target:null,binds:[],blending:n.blending||"normal",textures:n.textures||[],combos:n.combos||{},constants:n.constantshadervalues||{}}],fbos:[]}),!0)}const Ss={"materials/util/solidlayer.json":{passes:[{shader:"flat",blending:"translucent",cullmode:"nocull",depthtest:"disabled",depthwrite:"disabled",textures:[],combos:{}}]}},Ps=Object.freeze(Object.defineProperty({__proto__:null,BUILTIN_MATERIALS:Ss,BUILTIN_MODELS:Ts,attachLayerMaterialEffect:Es,isBuiltinAlbedoShader:po,resolveEffectChain:As},Symbol.toStringTag,{value:"Module"}));function cn(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function yt(e,n){const t=new Float32Array(16);for(let r=0;r<4;r++)for(let o=0;o<4;o++){let i=0;for(let s=0;s<4;s++)i+=e[s*4+o]*n[r*4+s];t[r*4+o]=i}return t}function Rn(e,n,t,r,o,i){const s=cn();return s[0]=2/(n-e),s[5]=2/(r-t),s[10]=-2/(i-o),s[12]=-(n+e)/(n-e),s[13]=-(r+t)/(r-t),s[14]=-0/(i-o),s}function ln(e,n,t,r){return yt(e,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,n,t,r,1]))}function Cs(e){const n=new Float32Array(16);for(let t=0;t<4;t++)for(let r=0;r<4;r++)n[r*4+t]=e[t*4+r];return n}function Ln(e,n,t,r){return yt(e,new Float32Array([n,0,0,0,0,t,0,0,0,0,r,0,0,0,0,1]))}function go(e,n){const t=Math.cos(n),r=Math.sin(n);return yt(e,new Float32Array([t,r,0,0,-r,t,0,0,0,0,1,0,0,0,0,1]))}function Rs(e,n){const t=Math.cos(n),r=Math.sin(n);return yt(e,new Float32Array([1,0,0,0,0,t,r,0,0,-r,t,0,0,0,0,1]))}function Ls(e,n){const t=Math.cos(n),r=Math.sin(n);return yt(e,new Float32Array([t,0,-r,0,0,1,0,0,r,0,t,0,0,0,0,1]))}function Fs(e,n,t,r){const o=1/Math.tan(e*Math.PI/180/2),i=new Float32Array(16);return i[0]=o/(n||1),i[5]=o,i[10]=(r+t)/(t-r),i[11]=-1,i[14]=2*r*t/(t-r),i}function or(e,n){const t=e&&typeof e=="object"?e.value:e;return typeof t=="number"&&Number.isFinite(t)?t:n}function Ns(e){const n=e&&e.general;return!n||n.orthogonalprojection?!1:or(n.fov,0)>0}function Us(e,n){return n&&n.perspective&&e&&e.isSkybox&&n.eye?n.eye:e.origin}function ks(e,n,t){const r=vo([e[0]-n[0],e[1]-n[1],e[2]-n[2]]),o=vo(xo(t,r)),i=xo(r,o),s=new Float32Array([o[0],i[0],r[0],0,o[1],i[1],r[1],0,o[2],i[2],r[2],0,0,0,0,1]);return s[12]=-(o[0]*e[0]+o[1]*e[1]+o[2]*e[2]),s[13]=-(i[0]*e[0]+i[1]*e[1]+i[2]*e[2]),s[14]=-(r[0]*e[0]+r[1]*e[1]+r[2]*e[2]),s}function Bs(e,n,t,r){const o=e[3]*n+e[7]*t+e[11]*r+e[15];return[(e[0]*n+e[4]*t+e[8]*r+e[12])/o,(e[1]*n+e[5]*t+e[9]*r+e[13])/o,(e[2]*n+e[6]*t+e[10]*r+e[14])/o]}const Is=[[16,9],[16,10],[21,9],[32,9]];function Os(e,n,t,r,o){const i=e/n;if(!Number.isFinite(i)||i<=0||!(t>0)||!(r>0))return null;const s=.02,c=t/r;if(Math.abs(i-c)<=s*c)return{viewW:t,viewH:r};for(const[a,u]of Is){const l=a/u;if(Math.abs(i-l)>s*l)continue;const d=r,h=r*l;return h>t+1e-6?{viewW:t,viewH:t/l}:{viewW:h,viewH:d}}return null}function Rr(e,n,t,r,o,i,s){const c=bo(i),a=bo(s);if(e==="cover"){const u=Os(r,o,n,t);if(u)return{offX:(n-u.viewW)*c,offY:(t-u.viewH)*a,viewW:u.viewW,viewH:u.viewH};const l=Math.max(r/n,o/t),d=r/l,h=o/l;return{offX:(n-d)*c,offY:(t-h)*a,viewW:d,viewH:h}}if(e==="contain"){const u=r/o;if(n/t>u){const p=n,w=n/u;return{offX:0,offY:(t-w)/2,viewW:p,viewH:w}}const d=t,h=t*u;return{offY:0,offX:(n-h)/2,viewW:h,viewH:d}}return{offX:0,offY:0,viewW:n,viewH:t}}function Ds(e,n,t,r,o,i){const s=e.general,c=e.camera,a=c&&c.eye?Lr(c.eye):[0,0,0],u=c&&c.center?Lr(c.center):[0,0,-1],l=c&&c.up?Lr(c.up):[0,1,0];if(Ns(e)){const x=t>0?n/t:1.7777777777777777,E=or(s.fov,50),_=Math.max(or(s.nearz,.01),1e-4),C=Math.max(or(s.farz,1e4),_+1),N=ks(a,u,l),D=Fs(E,x,_,C);return{view:N,projection:D,eye:a,center:u,projW:x,projH:1,offX:0,offY:0,viewW:x,viewH:1,perspective:!0}}const d=cn(),h=s&&s.orthogonalprojection&&s.orthogonalprojection.width||n,p=s&&s.orthogonalprojection&&s.orthogonalprojection.height||t,w=Rr(r,h,p,n,t,o,i),m=e&&e.cameraTransforms?e.cameraTransforms.zoom:s&&s.zoom,g=m&&typeof m=="object"?m.value:m,v=Number(g);if(Number.isFinite(v)&&v>0&&Math.abs(v-1)>1e-6){const x=w.offX+w.viewW/2,E=w.offY+w.viewH/2,_=w.viewW/v,C=w.viewH/v;w.offX=x-_/2,w.offY=E-C/2,w.viewW=_,w.viewH=C}const b=Rn(w.offX,w.offX+w.viewW,w.offY+w.viewH,w.offY,-1e4,1e4);return{view:d,projection:b,eye:a,projW:h,projH:p,offX:w.offX,offY:w.offY,viewW:w.viewW,viewH:w.viewH,perspective:!1}}function bo(e){const n=Number(e);return Number.isFinite(n)?n<0?0:n>1?1:n:.5}function Lr(e){return String(e).trim().split(/\s+/).map(Number)}function vo(e){const n=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/n,e[1]/n,e[2]/n]}function xo(e,n){return[e[1]*n[2]-e[2]*n[1],e[2]*n[0]-e[0]*n[2],e[0]*n[1]-e[1]*n[0]]}function un(e){const n=Number(e);return Number.isFinite(n)?n*.5:0}function zs(e){const n=new Map,t=new Map,r=/^[ \t]*#define[ \t]+([A-Za-z_][A-Za-z0-9_]*)(?:\(([^)]*)\))?[ \t]*(.*)$/gm;let o;for(;(o=r.exec(e))!==null;){const i=s=>s.replace(/\/\/.*$/,"").replace(/\/\*[\s\S]*?\*\//g,"").trim();o[2]!==void 0?t.set(o[1],{args:o[2].split(",").map(s=>s.trim()).filter(Boolean),body:i(o[3])}):n.set(o[1],i(o[3]))}return{defs:n,fns:t}}function $s(e,n,t,r){const o=[];let i=0;for(;i<e.length;){const s=e.indexOf(n,i);if(s===-1){o.push(e.slice(i));break}o.push(e.slice(i,s));let a=s+n.length;for(;a<e.length&&/\s/.test(e[a]);)a++;if(e[a]!=="("){o.push(e.slice(s,a)),i=a;continue}let u=0,l=a;for(;l<e.length;l++)if(e[l]==="(")u++;else if(e[l]===")"&&(u--,u===0))break;if(l>=e.length){o.push(e.slice(s));break}const d=e.slice(a+1,l),h=$t(d);let p=t.body;t.args.forEach((w,m)=>{const g=h[m]!==void 0?h[m].trim():"";p=Fn(p,w,g)}),r>0&&(p=yo(p,r-1)),o.push("("+p+")"),i=l+1}return o.join("")}function Fn(e,n,t){return e.replace(new RegExp("\\b"+n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\b","g"),t)}function $t(e){const n=[];let t=0,r="";for(let o=0;o<e.length;o++){const i=e[o];i==="("?t++:i===")"&&t--,i===","&&t===0?(n.push(r),r=""):r+=i}return r.trim()!==""&&n.push(r),n}function yo(e,n){for(let t=0;t<12;t++){const{defs:r,fns:o}=zs(e);if(r.size===0&&o.size===0)break;const i=e.split(`
|
|
2
|
+
`);let s=!1;for(let c=0;c<i.length;c++){const a=i[c];if(/^[ \t]*#/.test(a))continue;let u=a;for(const[l,d]of r)new RegExp("\\b"+l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\b").test(u)&&(u=Fn(u,l,d),s=!0);for(const[l,d]of o)u.includes(l)&&(u=$s(u,l,d,n),s=!0);i[c]=u}if(e=i.join(`
|
|
3
|
+
`),!s)break}return e}function wo(e,n,t){const r=p=>n[p]!==void 0?String(n[p]):t.has(p)?"("+t.get(p)+")":"0";let o=e.replace(/\b[A-Za-z_][A-Za-z0-9_]*\b/g,p=>r(p)),i=0;function s(){for(;i<o.length&&/\s/.test(o[i]);)i++}function c(){let p=a();for(s();o.startsWith("||",i);){i+=2;const w=a();p=p||w,s()}return p}function a(){let p=u();for(s();o.startsWith("&&",i);){i+=2;const w=u();p=p&&w,s()}return p}function u(){let p=l();for(s();o.startsWith("==",i)||o.startsWith("!=",i);){const w=o[i]==="="?"==":"!=";i+=2;const m=l();p=w==="=="?p===m:p!==m,s()}return p}function l(){let p=d();for(s();/^[<>]/.test(o[i]||"");){let w=o[i];o[i+1]==="="&&(w+="=",i++),i++;const m=d();w==="<"?p=p<m:w===">"?p=p>m:w==="<="?p=p<=m:p=p>=m,s()}return p}function d(){return s(),o[i]==="!"?(i++,!d()):h()}function h(){if(s(),o[i]==="("){i++;const w=c();return s(),i++,w}const p=/^-?\d+(\.\d+)?/.exec(o.slice(i));return p?(i+=p[0].length,Number(p[0])):!1}return c()}function Mo(e){let n="",t=0;const r=e.length;for(;t<r;){const o=e[t],i=e[t+1];if(o==="/"&&i==="*"){for(t+=2;t<r&&!(e[t]==="*"&&e[t+1]==="/");)e[t]===`
|
|
4
|
+
`&&(n+=`
|
|
5
|
+
`),t++;t+=2;continue}if(o==="/"&&i==="/"){for(;t<r&&e[t]!==`
|
|
6
|
+
`;)t++;continue}n+=o,t++}return n}function _o(e,n,t,r){const o=e.split(`
|
|
7
|
+
`),i=[],s=[],c=new Map;for(let a=0;a<o.length;a++){const u=o[a],l=u.trim();if(l.startsWith("#include")){if(Nn(s)){const d=/^#include[ \t]+"([^"]+)"|^#include[ \t]+<([^>]+)>/.exec(l),h=d&&(d[1]||d[2]),p=h&&t?t(h):null;p!=null?i.push(_o(Mo(p),n,t)):i.push("// [include \u7F3A\u5931: "+h+"]")}continue}if(l.startsWith("#define")){if(Nn(s)){i.push(u);const d=/^#define[ \t]+([A-Za-z_][A-Za-z0-9_]*)(?:\([^)]*\))?[ \t]*(.*)$/.exec(l);d&&c.set(d[1],d[2].trim())}continue}if(l.startsWith("#undef")){Nn(s)&&i.push(u);continue}if(l.startsWith("#ifdef")||l.startsWith("#ifndef")||l.startsWith("#if")){const d=Nn(s);let h=!1;if(l.startsWith("#ifdef")){const p=l.slice(6).trim().split(/\s+/)[0];h=n[p]!==void 0||c.has(p)}else if(l.startsWith("#ifndef")){const p=l.slice(7).trim().split(/\s+/)[0];h=!(n[p]!==void 0||c.has(p))}else try{h=!!wo(l.slice(3).trim(),n,c)}catch{h=!1}s.push({parent:d,hit:h,done:h});continue}if(l.startsWith("#else")){if(s.length>0){const d=s[s.length-1];d.hit=!d.done,d.done=!0}continue}if(l.startsWith("#elif")){if(s.length>0){const d=s[s.length-1];if(d.done)d.hit=!1;else{let h=!1;try{h=!!wo(l.slice(5).trim(),n,c)}catch{h=!1}d.hit=h,d.done=h}}continue}if(l.startsWith("#endif")){s.length>0&&s.pop();continue}l.startsWith("#")||Nn(s)&&i.push(u)}return i.join(`
|
|
8
|
+
`)}function Nn(e){return e.every(n=>n.parent&&n.hit)}function ir(e,n,t,r){let o=0;for(let i=n;i<e.length;i++)if(e[i]===t)o++;else if(e[i]===r&&(o--,o===0))return i;return-1}function Ao(e,n){return ir(e,n,"(",")")}const js=new Set(["void","bool","int","uint","float","double","vec2","vec3","vec4","bvec2","bvec3","bvec4","ivec2","ivec3","ivec4","uvec2","uvec3","uvec4","mat2","mat3","mat4","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4"]);function Ws(e,n){let t=n-1;for(;t>=0&&/[ \t]/.test(e[t]);)t--;if(t<0||t===n-1)return!1;let r=t+1;for(;t>=0&&/[A-Za-z0-9_]/.test(e[t]);)t--;const o=e.slice(t+1,r);return js.has(o)}function De(e,n,t){let r="",o=0;for(;o<e.length;){const i=e.indexOf(n,o);if(i===-1){r+=e.slice(o);break}if(i>0&&/[A-Za-z0-9_]/.test(e[i-1])){r+=e.slice(o,i+1),o=i+1;continue}const s=i+n.length;if(s<e.length&&/[A-Za-z0-9_]/.test(e[s])){r+=e.slice(o,s),o=s;continue}if(Ws(e,i)){r+=e.slice(o,s),o=s;continue}r+=e.slice(o,i);let c=i+n.length;for(;c<e.length&&/\s/.test(e[c]);)c++;if(e[c]!=="("){r+=e.slice(i,c),o=c;continue}const a=Ao(e,c);if(a===-1){r+=e.slice(i);break}const u=e.slice(c+1,a);r+=t(u,i),o=a+1}return r}function To(e,n,t,r,o){const i=e;e=Mo(e);const s={},c=/\[COMBO\][^\n]*?"combo"\s*:\s*"([^"]+)"[^\n]*?"default"\s*:\s*(-?\d+)/g;let a;if(typeof o=="string"&&o){const g=new RegExp(c.source,"g");let v;for(;(v=g.exec(o))!==null;)s[v[1]]=Number(v[2])}for(;(a=c.exec(i))!==null;)s[a[1]]=Number(a[2]);const u={GLSL:1,...s,...t||{}};let l=_o(e,u,r);l=yo(l,20),l=l.replace(/^[ \t]*#define[^\n]*\n?/gm,"");{const g=new Set,v=/\[COMBO\][^\n]*"combo"\s*:\s*"([^"]+)"/g;let b;for(;(b=v.exec(i))!==null;)g.add(b[1]);for(const x of Object.keys(u))g.add(x);g.delete("GLSL");for(const x of g){const E=u[x]!==void 0?u[x]:0;l=Fn(l,x,String(E))}}l=Fn(l,"sample","smp"),l=l.replace(/(\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)[fh]\b/g,"$1"),l=l.replace(/\bfloat4x4\b/g,"mat4").replace(/\bfloat3x3\b/g,"mat3").replace(/\bfloat2x2\b/g,"mat2").replace(/\bfloat4\b/g,"vec4").replace(/\bfloat3\b/g,"vec3").replace(/\bfloat2\b/g,"vec2").replace(/\bhalf4\b/g,"vec4").replace(/\bhalf3\b/g,"vec3").replace(/\bhalf2\b/g,"vec2").replace(/\bhalf\b/g,"float"),l=l.replace(/\btexSample2DLod\b/g,"textureLod").replace(/\btexSample2D\b/g,"texture"),l=De(l,"saturate",g=>"clamp("+g+", 0.0, 1.0)"),l=De(l,"CAST4",g=>"vec4("+g+")"),l=De(l,"CAST3",g=>"vec3("+g+")"),l=De(l,"CAST2",g=>"vec2("+g+")"),l=l.replace(/\b(max|min)\(\s*(-?\d+(?:\.\d+)?)\s*,\s*([A-Za-z_]\w*\.(rgb|xyz|rg|xy|r|x))\s*\)/g,(g,v,b,x,E)=>{const _=E.length;return v+"(vec"+_+"("+b+"), "+x+")"}),l=l.replace(/(^|[^\w.])(\d+)\s*([*/])\s*([A-Za-z_][A-Za-z0-9_]*)/g,"$1$2.0 $3 $4"),l=l.replace(/\b([A-Za-z_][A-Za-z0-9_]*)\s*([*/])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=l.replace(/(\d+\.\d+)\s*([*/])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=l.replace(/(^|[^\w.])(\d+)\s*([*/])\s*(\d+\.\d+)/g,"$1$2.0 $3 $4"),l=l.replace(/(\.\d+)\s*([+-])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=l.replace(/([A-Za-z_]\w*\.(?:xyzw|xyz|xy|zw|rgba|rgb|rg|x|y|z|w|r|g|b|a))\s*([+-])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=l.replace(/(^|[^\w.])(\d+)\s*([+-])\s*(\d+\.\d+)/g,"$1$2.0 $3 $4"),l=l.replace(/(^|[^\w.])(\d+)\s*([+-])\s*([A-Za-z_]\w*\.(?:xyzw|xyz|xy|zw|rgba|rgb|rg|x|y|z|w|r|g|b|a))/g,"$1$2.0 $3 $4");{const g=new Set,v=/\b(?:uniform\s+)?(?:highp|mediump|lowp\s+)?(?:float|vec2|vec3|vec4|mat2|mat3|mat4)\s+([A-Za-z_][A-Za-z0-9_]*)/g;let b;for(;(b=v.exec(l))!==null;)g.add(b[1]);if(g.size>0){const x=Array.from(g).sort((E,_)=>_.length-E.length).join("|");l=l.replace(new RegExp("(^|[^\\w.])(\\d+)\\s*([+-])\\s*("+x+")(?![A-Za-z0-9_])","g"),"$1$2.0 $3 $4")}}{const g=["smoothstep","step","mix","clamp","max","min","pow","mod","atan","sqrt","inversesqrt","exp","log","exp2","log2","abs","sign","floor","ceil","fract","length","distance","dot","reflect","refract","faceforward","normalize","cross"],v=/\b(ApplyBlending|ApplyComposite|BlendTransparency)\s*\(/;for(const b of g)l=De(l,b,x=>{const _=$t(x).map(C=>{if(v.test(C))return C;const N=[];let D=C.replace(/\[[^\]]*\]/g,k=>(N.push(k),"\0"+(N.length-1)+"\0")).replace(/\b(?:ivec[234]|uvec[234]|int|uint)\s*\([^()]*\)/g,k=>(N.push(k),"\0"+(N.length-1)+"\0"));return D=D.replace(/(?<![A-Za-z0-9_.\u0000])(\d+)(?![.\d])(?![A-Za-z_])/g,"$1.0"),D.replace(/\u0000(\d+)\u0000/g,(k,O)=>N[Number(O)])});return b+"("+_.join(",")+")"});l=De(l,"pow",b=>{const x=$t(b);if(x.length!==2)return"pow("+b+")";const E=x[0].trim(),_=x[1].trim(),C=/\.(xyzw|rgba|xyz|rgb|xy|rg|zw)\s*$/.exec(E),D=C?{xyzw:4,rgba:4,xyz:3,rgb:3,xy:2,rg:2,zw:2}[C[1]]:0,k=/\bvec[234]\s*\(/.test(_)||/\.(xyzw|rgba|xyz|rgb|xy|rg|zw)\b/.test(_);return D>=2&&!k?"pow("+E+", vec"+D+"("+_+"))":"pow("+E+", "+_+")"})}l=l.replace(/([)\]])\s*([*/])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=l.replace(/\)\s*([+-])\s*(\d+)(?![\d.])/g,") $1 $2.0"),l=l.replace(/(^|[^\w.])(\d+)(?![.\d])\s*([+-])\s*((?:step|smoothstep|mix|mod|fract|abs|sin|cos|tan|atan|sqrt|pow|inversesqrt|floor|ceil|sign|length|normalize|distance|dot|cross|exp|log|exp2|log2|clamp|min|max)\s*\()/g,"$1$2.0 $3 $4");{const g=new Set,v=/\b(?:vec[234])\s+([A-Za-z_][A-Za-z0-9_]*)/g;let b;for(;(b=v.exec(l))!==null;)g.add(b[1]);if(g.size>0){const x=Array.from(g).sort((E,_)=>_.length-E.length).join("|");l=l.replace(new RegExp("\\b("+x+")\\s*([+-])\\s*(\\d+)(?![\\d.])","g"),"$1 $2 $3.0")}}{const g=new Set,v=/\b(?:int|uint)\s+([A-Za-z_][A-Za-z0-9_]*)/g;let b;for(;(b=v.exec(l))!==null;)g.add(b[1]);l=l.replace(/\buint\b/g,"int"),l=l.replace(/\b([A-Za-z_][A-Za-z0-9_]*)\s*%\s*(\d+)(?![\d.])/g,(x,E,_)=>g.has(E)?x:"mod("+E+", "+_+".0)"),l=l.replace(/\bint\s+([A-Za-z_][A-Za-z0-9_]*)\s*=\s*mod\(([^;]*)\);/g,"int $1 = int(mod($2));")}l=l.replace(/\b(vec[234])\s+([A-Za-z_][A-Za-z0-9_]*)\s*=\s*([^;()\n,]+);/g,(g,v,b,x)=>{const E=x.trim();return/^(vec[234]|mat[234]|int\b|float\b)/.test(E)?g:v+" "+b+" = "+v+"("+E+");"});for(const g of["mix","clamp","step","smoothstep","min","max","mod","pow"])l=De(l,g,v=>g+"("+v.replace(/(?<![A-Za-z0-9_.])(\d+)(?![.\d])/g,"$1.0")+")");l=De(l,"clamp",g=>{const v=$t(g);if(v.length!==3)return"clamp("+g+")";const b=v[0].trim(),x=v[1].trim(),E=_=>/^-?\d+\.?\d*$/.test(_);return E(b)&&E(x)&&Number(b)===0&&Number(x)===1?"clamp("+v[2].trim()+", "+b+", "+x+")":"clamp("+g+")"}),l=l.replace(/(\.\d+)\s*([+-])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=l.replace(/([)\]])\s*([+-])\s*(\d+)(?![\d.])/g,"$1 $2 $3.0"),l=De(l,"smoothstep",g=>{const v=$t(g);return v.length===3&&v[1].trim()==="0.0"&&v[0].trim()!=="0.0"?"(1.0 - smoothstep(0.0, "+v[0].trim()+", "+v[2].trim()+"))":"smoothstep("+g+")"});{const g=new Map,v=/\b(?:uniform|varying|attribute|in|out)?\s*\b(vec([234]))\s+([A-Za-z_]\w*)/g;let b;for(;(b=v.exec(l))!==null;)g.set(b[3],Number(b[2]));if(g.size>0){const x={2:"xy",3:"xyz",4:"xyzw"};l=l.replace(/(^|[;{}\n]\s*)([A-Za-z_]\w*)\s*=\s*([A-Za-z_]\w*)\s*;/g,(E,_,C,N)=>{const D=g.get(C),k=g.get(N);return!D||!k||D>=k?E:_+C+" = "+N+"."+x[D]+";"})}if(g.size>0){const x=new Set,E=/\b(?:uniform|varying|attribute|in|out)?\s*\bfloat\s+([A-Za-z_]\w*)/g;let _;for(;(_=E.exec(l))!==null;)x.add(_[1]);const C="pow|saturate|clamp|smoothstep|step|abs|floor|ceil|fract|frac|sin|cos|tan|asin|acos|atan|sqrt|length|distance|dot|exp|log|sign|fmod|mod|min|max|mix|lerp",N=/^(?:length|distance|dot)$/,D=O=>{const j=O.match(new RegExp("^(?:"+C+")\\s*\\("));if(!j)return!1;let W=0;const K=j[0].length-1;let V=-1;for(let q=K;q<O.length;q++)if(O[q]==="(")W++;else if(O[q]===")"&&(W--,W===0)){V=q;break}if(V!==O.length-1)return!1;const G=j[0].replace(/\s*\($/,"");if(N.test(G))return!0;const Q=O.slice(K+1,V);if(/\bvec[234]\s*\(/.test(Q)||/\.[xyzwrgba]{2,4}\b/.test(Q))return!1;for(const q of g.keys()){const te=q.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(new RegExp("(?<!\\.)\\b"+te+"\\b(?!\\s*\\.[xyzwrgba]\\b)").test(Q))return!1}return!0},k=new Set;if(l=l.replace(/(^|[;{}\n]\s*)([A-Za-z_]\w*)\s*=\s*([^;]+);/g,(O,j,W,K)=>{const V=g.get(W);if(!V)return O;const G=K.trim();if(new RegExp("^vec"+V+"\\s*\\(").test(G)||g.has(G))return O;const Q=/^-?\d+(?:\.\d+)?(?:e[-+]?\d+)?$/i.test(G),q=x.has(G);return!Q&&!q&&!D(G)?O:(k.add(W),j+W+" = vec"+V+"("+G+");")}),k.size>0){const O=[...k].sort((j,W)=>W.length-j.length).join("|");l=l.replace(new RegExp(`\\b([A-Za-z_]\\w*)\\s*([*/])\\s*(${O})\\b`,"g"),(j,W,K,V)=>g.has(W)?j:`${W} ${K} ${V}.x`),l=l.replace(new RegExp(`\\b(${O})\\s*([*/])\\s*([A-Za-z_]\\w*)\\b`,"g"),(j,W,K,V)=>g.has(V)?j:`${W}.x ${K} ${V}`)}}}l=l.replace(/(\.[xyzwrgba]{1,4}\s*=\s*)(-?\d+)\s*;/g,"$1$2.0;"),l=l.replace(/\b(float|vec2|vec3|vec4)\s+([A-Za-z_]\w*)\s*=\s*(-?\d+)\s*;/g,(g,v,b,x)=>v==="float"?`${v} ${b} = ${x}.0;`:`${v} ${b} = ${v}(${x}.0);`);{const g=new Set,v=/\b(?:uniform|varying|attribute|in|out)?\s*\bfloat\s+([A-Za-z_]\w*)/g;let b;for(;(b=v.exec(l))!==null;)g.add(b[1]);if(g.size>0){const x=[...g].sort((E,_)=>_.length-E.length).join("|");l=l.replace(new RegExp(`\\b(${x})\\s*=\\s*(-?\\d+)\\s*;`,"g"),"$1 = $2.0;"),l=l.replace(new RegExp(`\\b(${x})\\s*([-+*/]=)\\s*(-?\\d+)\\s*;`,"g"),"$1 $2 $3.0;")}}l=l.replace(/(\.[xyzwrgba]{1,4}\s*[-+*/]=\s*)(-?\d+)\s*;/g,"$1$2.0;");const d="step|smoothstep|saturate|clamp|mix|lerp|frac|fract|abs|floor|ceil|min|max|pow|sqrt|length|dot|distance";l=l.replace(new RegExp(`\\bint\\s+([A-Za-z_]\\w*)\\s*=\\s*((?:${d})\\s*\\()`,"g"),"float $1 = $2");{const g=new Set,v=/\bbool\s+([A-Za-z_]\w*)\s*=/g;let b;for(;(b=v.exec(l))!==null;)g.add(b[1]);if(g.size>0){const x=[...g].join("|");l=l.replace(new RegExp(`([-+*/]=\\s*)(${x})\\b`,"g"),(E,_,C)=>`${_}float(${C})`)}}{const g=new Set;for(const v of l.matchAll(/\b(?:uniform\s+)?(?:highp|mediump|lowp\s+)?float\s+([A-Za-z_]\w*)\s*\[/g))g.add(v[1]);if(g.size){const v=[...g].sort((C,N)=>N.length-C.length).join("|"),b=new RegExp("\\b("+v+")\\s*\\[","g");let x="",E=0,_;for(;_=b.exec(l);){const C=_.index+_[0].length-1,N=ir(l,C,"[","]");if(N<0)break;let D=N+1;for(;D<l.length&&/[ \t]/.test(l[D]);)D++;if(l[D]!=="["){b.lastIndex=N+1;continue}const k=ir(l,D,"[","]");if(k<0)break;const O=l.slice(C+1,N),j=l.slice(D+1,k);x+=l.slice(E,_.index),x+=_[1]+"[int(("+O+")) * 4 + int(("+j+"))]",E=k+1,b.lastIndex=E}l=x+l.slice(E)}}l=De(l,"mix",(g,v)=>{const b=$t(g);if(b.length!==3)return"mix("+g+")";const x=D=>{const k=D.trim(),O=/\.([xyzwrgba]{1,4})\s*$/.exec(k);if(O)return O[1].length;const j=/^vec([234])\s*\(/.exec(k);if(j)return Number(j[1]);if(!/^[A-Za-z_]\w*$/.test(k))return 0;const W=new RegExp("\\b(vec([234])|float)\\s+"+k+"\\b","g");let K=0,V;for(;(V=W.exec(l))!==null&&V.index<v;)K=V[1].startsWith("vec")?Number(V[2]):1;return K},E=b[0].trim(),_=b[1].trim(),C=x(E),N=x(_);if(C>=2&&N>=2&&C!==N){const D=Math.min(C,N),k=D===2?".xy":D===3?".xyz":"";return k?"mix("+(C>D?E+k:E)+", "+(N>D?_+k:_)+", "+b[2].trim()+")":"mix("+g+")"}return"mix("+g+")"});{const g=/\b(vec([234]))\s+([A-Za-z_]\w*)\s*\(/g;let v="",b=0,x;for(;x=g.exec(l);){const E=Ao(l,x.index+x[0].length-1);if(E<0)break;let _=E+1;for(;_<l.length&&/\s/.test(l[_]);)_++;if(l[_]!=="{")continue;const C=ir(l,_,"{","}");if(C<0)break;const N=Number(x[2]);if(N>=4){g.lastIndex=C;continue}let D=l.slice(_+1,C);const k=new Map;for(const j of l.slice(0,x.index).matchAll(/\buniform\s+(?:highp|mediump|lowp\s+)?(vec([234]))\s+([A-Za-z_]\w*)/g))k.set(j[3],Number(j[2]));for(const j of D.matchAll(/\b(vec([234]))\s+([A-Za-z_]\w*)/g))k.set(j[3],Number(j[2]));const O=N===2?"xy":"xyz";D=D.replace(/\breturn\s+([A-Za-z_]\w*)\s*;/g,(j,W)=>{const K=k.get(W);return K&&K>N?"return "+W+"."+O+";":j}),v+=l.slice(b,_+1)+D,b=C,g.lastIndex=C}l=v+l.slice(b)}const h=new Set,p=/\b(?:uniform\s+)?(?:mat4|mat3|mat2|float4x4)\s+([A-Za-z_][A-Za-z0-9_]*)/g;let w;for(;(w=p.exec(l))!==null;)h.add(w[1]);if(l=De(l,"mul",g=>{const v=$t(g);if(v.length!==2)return"mul("+g+")";const b=v[0].trim(),x=v[1].trim(),E=_=>h.has(_.split(/[\[.\s]/)[0])||/^mat[234]\(/.test(_);return E(b)&&E(x)?"(transpose("+x+") * transpose("+b+"))":E(x)?"(transpose("+x+") * "+b+")":"("+b+" * "+x+")"}),l=l.replace(/\blerp\b/g,"mix").replace(/\bfrac\b/g,"fract"),l=De(l,"atan2",g=>"atan("+g+")"),l=De(l,"fmod",g=>{const v=$t(g);if(v.length!==2)return"mod("+g+")";const b=v[0].trim(),x=v[1].trim();return"(("+b+") - ("+x+") * trunc(("+b+") / ("+x+")))"}),l=De(l,"ddx",g=>"dFdx("+g+")"),l=De(l,"ddy",g=>"dFdy("+g+")"),l=De(l,"CAST3X3",g=>"mat3("+g+")"),n==="vert")l=l.replace(/\battribute\b/g,"in").replace(/\bvarying\b/g,"out");else{if(l=l.replace(/\bvarying\b/g,"in").replace(/\battribute\b/g,"in"),typeof o=="string"&&o){const b=new Map,x=/^\s*(?:varying|out)\s+(?:highp|mediump|lowp\s+)?(vec[234]|float)\s+([A-Za-z_]\w*)\s*;/gm;let E;for(;(E=x.exec(o))!==null;)b.set(E[2],E[1]);const _={float:1,vec2:2,vec3:3,vec4:4},C=new Map;if(l=l.replace(/^(\s*in\s+(?:highp|mediump|lowp\s+)?)(vec[234]|float)(\s+)([A-Za-z_]\w*)(\s*;)/gm,(N,D,k,O,j,W)=>{const K=b.get(j);return!K||_[K]<=_[k]?N:(C.set(j,_[k]),D+K+O+j+W)}),C.size>0){const N={1:"x",2:"xy",3:"xyz"};for(const[D,k]of C){const O=N[k];O&&(l=l.split(`
|
|
9
|
+
`).map(j=>/^\s*in\s/.test(j)?j:j.replace(new RegExp("\\b"+D+"\\b(?!\\s*[.\\w])","g"),D+"."+O)).join(`
|
|
10
|
+
`))}}}const g=new Set,v=new Set;{const b=/^\s*in\s+(?:highp|mediump|lowp\s+)?(vec[234]|float)\s+([A-Za-z_]\w*)\s*;/gm;let x;for(;(x=b.exec(l))!==null;)v.add(x[2])}for(const b of v)new RegExp("\\b"+b+"\\b\\s*(?:\\.[xyzwrgba]{1,4})?\\s*(?:[-+*/]?=(?!=)|\\+\\+|--)").test(l)&&g.add(b);if(g.size>0){const b=l.search(/\bvoid\s+main\s*\([^)]*\)\s*\{/);if(b!==-1){const x=l.indexOf("{",b),E=l.slice(0,x+1);let _=l.slice(x+1);const C=[];for(const N of g){const D=new RegExp("^\\s*in\\s+(?:highp|mediump|lowp\\s+)?(vec[234]|float)\\s+"+N+"\\s*;","m").exec(l),k=D?D[1]:"vec4";C.push(" "+k+" "+N+"_rw = "+N+";"),_=Fn(_,N,N+"_rw")}_=`
|
|
11
|
+
`+C.map(N=>N.replace(/= (\w+)_rw;/,"= $1;")).join(`
|
|
12
|
+
`)+`
|
|
13
|
+
`+_,l=E+_}}}l=l.replace(/\[(?:unroll|loop|branch|flatten)\]\s*/g,""),l=l.replace(/\bstatic\s+/g,"");{const g=new Set;for(const v of l.matchAll(/\b(?:uniform[ \t]+)?(?:highp|mediump|lowp)?[ \t]*float[ \t]+([A-Za-z_]\w*)[ \t]*[;=]/g))g.add(v[1]);if(g.size){const v=b=>{const x=b.trim().startsWith("-"),E=b.replace(/^-\s*/,"").trim();return g.has(E)?(x?"-":"")+"int("+E+")":b};l=l.replace(/(for\s*\(\s*(?:int|uint)\s+(\w+)\s*=\s*)(-?\s*[A-Za-z_]\w*|-?\s*\d+)(\s*;\s*\2\s*[<>]=?\s*)(-?\s*[A-Za-z_]\w*|-?\s*\d+)(\s*;)/g,(b,x,E,_,C,N,D)=>x+v(_)+C+v(N)+D)}}{const g=new Set;l=l.split(`
|
|
14
|
+
`).map(v=>{const b=/^[ \t]*uniform[ \t]+(?:highp|mediump|lowp[ \t]+)?[A-Za-z0-9_]+[ \t]+([A-Za-z_][A-Za-z0-9_]*)/.exec(v);if(!b)return v;const x=b[1];return g.has(x)?"":(g.add(x),v)}).join(`
|
|
15
|
+
`)}let m=`#version 300 es
|
|
16
|
+
`;return n==="vert"&&(m+=`precision highp float;
|
|
17
|
+
`),n==="frag"&&(m+=`precision highp float;
|
|
18
|
+
`,/\bgl_FragColor\b/.test(l)&&(m+=`out vec4 fragColor;
|
|
19
|
+
`,l=l.replace(/\bgl_FragColor\b/g,"fragColor"))),m+l}const Eo={center:[.5,.5],centre:[.5,.5],left:[0,.5],right:[1,.5],top:[.5,0],bottom:[.5,1],topleft:[0,0],topright:[1,0],bottomleft:[0,1],bottomright:[1,1]},Vs={2:"multiply",6:"additive",7:"screen",9:"additive",31:"additive"},Xs={screen:1,multiply:2},Fr=`#version 300 es
|
|
20
|
+
in vec3 a_Position;
|
|
21
|
+
in vec2 a_TexCoord;
|
|
22
|
+
uniform mat4 u_MVP;
|
|
23
|
+
out vec2 v_UV;
|
|
24
|
+
void main() {
|
|
25
|
+
gl_Position = u_MVP * vec4(a_Position, 1.0);
|
|
26
|
+
v_UV = a_TexCoord;
|
|
27
|
+
}`,Hs=`#version 300 es
|
|
28
|
+
precision mediump float;
|
|
29
|
+
in vec2 v_UV;
|
|
30
|
+
uniform sampler2D u_Tex;
|
|
31
|
+
uniform vec4 u_Color4;
|
|
32
|
+
uniform vec2 u_FrameOrigin;
|
|
33
|
+
uniform vec2 u_FrameU;
|
|
34
|
+
uniform vec2 u_FrameV;
|
|
35
|
+
uniform int u_BlendPrep;
|
|
36
|
+
out vec4 fragColor;
|
|
37
|
+
void main() {
|
|
38
|
+
vec2 uv = u_FrameOrigin + v_UV.x * u_FrameU + v_UV.y * u_FrameV;
|
|
39
|
+
vec4 c = texture(u_Tex, uv) * u_Color4;
|
|
40
|
+
if (u_BlendPrep == 1) c.rgb *= c.a;
|
|
41
|
+
else if (u_BlendPrep == 2) c.rgb = mix(vec3(1.0), c.rgb, c.a);
|
|
42
|
+
fragColor = c;
|
|
43
|
+
}`,Gs=`#version 300 es
|
|
44
|
+
precision mediump float;
|
|
45
|
+
in vec2 v_UV;
|
|
46
|
+
uniform sampler2D u_Tex;
|
|
47
|
+
uniform int u_BlendPrep;
|
|
48
|
+
out vec4 fragColor;
|
|
49
|
+
void main() {
|
|
50
|
+
vec4 c = texture(u_Tex, v_UV);
|
|
51
|
+
if (u_BlendPrep == 1) c.rgb *= c.a;
|
|
52
|
+
else if (u_BlendPrep == 2) c.rgb = mix(vec3(1.0), c.rgb, c.a);
|
|
53
|
+
fragColor = c;
|
|
54
|
+
}`,Ys=`#version 300 es
|
|
55
|
+
precision mediump float;
|
|
56
|
+
in vec2 v_UV;
|
|
57
|
+
uniform sampler2D u_Tex;
|
|
58
|
+
out vec4 fragColor;
|
|
59
|
+
void main() {
|
|
60
|
+
fragColor = vec4(texture(u_Tex, v_UV).rgb, 1.0);
|
|
61
|
+
}`;function qs(e,n){return new Float32Array([0,n,0,0,1,0,0,0,0,0,e,n,0,1,1,e,n,0,1,1,0,0,0,0,0,e,0,0,1,0])}function Zs(){return new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,1,0,1,1,-1,-1,0,0,0,1,-1,0,1,0])}function Ks(){return new Float32Array([-.5,.5,0,0,1,-.5,-.5,0,0,0,.5,.5,0,1,1,.5,.5,0,1,1,-.5,-.5,0,0,0,.5,-.5,0,1,0])}const Qs={5126:"float",35664:"vec2",35665:"vec3",35666:"vec4",5124:"int",35667:"ivec2",35668:"ivec3",35669:"ivec4",35670:"bool",35676:"mat4",35675:"mat3"};function sr(e,n,t){const r=So(e,e.VERTEX_SHADER,n),o=So(e,e.FRAGMENT_SHADER,t),i=e.createProgram();if(e.attachShader(i,r),e.attachShader(i,o),e.bindAttribLocation(i,0,"a_Position"),e.bindAttribLocation(i,1,"a_TexCoord"),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS))throw new Error("\u7740\u8272\u5668\u94FE\u63A5\u5931\u8D25: "+e.getProgramInfoLog(i));return i}function So(e,n,t){const r=e.createShader(n);if(e.shaderSource(r,t),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error("\u7740\u8272\u5668\u7F16\u8BD1\u5931\u8D25: "+e.getShaderInfoLog(r));return r}function Po(e){const n=String(e).trim().split(/\s+/).map(Number);return[n[0]||0,n[1]||0,n[2]||0]}function Nr(e,n,t,r,o=null){const i=e.createTexture();return e.bindTexture(e.TEXTURE_2D,i),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),o?e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,o):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,t,r,0,e.RGBA,e.UNSIGNED_BYTE,n),i}function Js(e,n,t=!1){const r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR);const o=n[0];if(o.bitmap)e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,o.bitmap);else if(t&&o.rgba){const i=o.width*o.height,s=new Uint8Array(i*2);for(let a=0;a<i;a++)s[a*2]=o.rgba[a*4+3],s[a*2+1]=o.rgba[a*4];const c=e.getParameter(e.UNPACK_ALIGNMENT);e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.texImage2D(e.TEXTURE_2D,0,e.RG8,o.width,o.height,0,e.RG,e.UNSIGNED_BYTE,s),e.pixelStorei(e.UNPACK_ALIGNMENT,c)}else e.texImage2D(e.TEXTURE_2D,0,e.RGBA,o.width,o.height,0,e.RGBA,e.UNSIGNED_BYTE,o.rgba);return e.generateMipmap(e.TEXTURE_2D),r}function Ur(e,n,t,r,o){const i=1-o;return i*i*i*e+3*i*i*o*n+3*i*o*o*t+o*o*o*r}function ea(e,n,t,r,o){if(o<=e)return 0;if(o>=r)return 1;let i=r-e>1e-9?(o-e)/(r-e):.5;for(let a=0;a<8;a++){const u=Ur(e,n,t,r,i)-o;if(Math.abs(u)<1e-6)return i;const l=1-i,d=3*l*l*(n-e)+6*l*i*(t-n)+3*i*i*(r-t);if(Math.abs(d)<1e-9)break;const h=i-u/d;if(h<0||h>1||!Number.isFinite(h))break;i=h}let s=0,c=1;for(let a=0;a<40;a++)i=(s+c)/2,Ur(e,n,t,r,i)<o?s=i:c=i;return i}function ar(e,n,t){if(!e||e.length===0)return 0;if(e.length===1)return Number(e[0].value)||0;if(t&&t.length>0){const k=e[0],O=e[e.length-1],j=t.length-O.frame;if(j>1e-9&&n>O.frame&&n<=t.length)return ar([{frame:0,value:O.value,front:O.front,back:O.back},{frame:j,value:k.value,front:k.front,back:k.back}],n-O.frame)}if(n<=e[0].frame)return Number(e[0].value)||0;const r=e[e.length-1];if(n>=r.frame)return Number(r.value)||0;let o=0,i=e.length-1;for(;i-o>1;){const k=o+i>>1;e[k].frame<=n?o=k:i=k}const s=e[o],c=e[i],a=s.frame,u=c.frame,l=Number(s.value)||0,d=Number(c.value)||0,h=u-a;if(h<=0)return d;const p=s.front,w=c.back,m=h/3,g=!!(p&&p.enabled),v=!!(w&&w.enabled),b=g?Math.abs(Number(p.x)||0):1,x=v?Math.abs(Number(w.x)||0):1,E=a+Math.min(b,1.5)*m,_=u-Math.min(x,1.5)*m,C=g?l+(Number(p.y)||0):l+(d-l)/3,N=v?d+(Number(w.y)||0):d-(d-l)/3,D=ea(a,E,_,u,n);return Ur(l,C,N,d,D)}function Co(e,n,t){const r=n>0?n:1;if(t==="loop"){let o=e%r;return o<0&&(o+=r),o}if(t==="mirror"){const o=r*2;let i=e%o;return i<0&&(i+=o),i<=r?i:o-i}return Math.max(0,Math.min(r,e))}function ta(e){return Array.isArray(e)?e:typeof e=="string"?e.trim().split(/\s+/).map(Number):Number.isFinite(e)?[e]:[]}function Ro(e){const n=e&&e.options||{},t=Number(n.fps)>0?Number(n.fps):30,r=Number(n.length)>0?Number(n.length):0,o=n.mode==="loop"||n.mode==="mirror"?n.mode:"single",i=typeof n.name=="string"?n.name:"",s=!!(e&&e.relative),c=n.wraploop===!0&&o==="loop",a=[];for(let h=0;;h++){const p=e&&e["c"+h];if(!Array.isArray(p))break;a.push(p)}const u=n.startpaused!==!0,l=[],d={name:i,mode:o,fps:t,relative:s,channelCount:a.length,frame:0,rate:1,playing:u,ended:!1,get frameCount(){return r},play(){return d.playing=!0,d.ended=!1,d},pause(){return d.playing=!1,d},stop(){return d.playing=!1,d.frame=0,d.ended=!1,d},setFrame(h){const p=Number(h);return Number.isFinite(p)&&(d.frame=p),d},getFrame(){return d.frame},setRate(h){const p=Number(h);return Number.isFinite(p)&&(d.rate=p),d},addEndedCallback(h){return typeof h=="function"&&l.push(h),d},setBlend(){return d},setVisible(){return d},advance(h){if(d.playing&&(d.frame+=(Number(h)||0)*t*d.rate,o==="single"))if(d.frame>=r){if(d.frame=r,d.playing=!1,!d.ended){d.ended=!0;for(const p of l)try{p()}catch{}}}else d.frame<0&&(d.frame=0,d.playing=!1)},value(){const h=Co(d.frame,r,o),p=c?{length:r}:void 0;if(a.length===1)return ar(a[0],h,p);const w=[];for(const m of a)w.push(ar(m,h,p));return w},applyTo(h){const p=d.value();if(!s)return p;const w=ta(h);return Array.isArray(p)?p.map((m,g)=>m+(Number(w[g])||0)):p+(Number(w[0])||0)}};return d}function na(){const e={name:"",mode:"single",fps:30,relative:!1,channelCount:0,frame:0,rate:1,playing:!1,ended:!1,get frameCount(){return 0},play(){return e},pause(){return e},stop(){return e},setFrame(){return e},getFrame(){return 0},setRate(){return e},addEndedCallback(){return e},setBlend(){return e},setVisible(){return e},advance(){},value(){return 0},applyTo(n){return n}};return e}const ra=Object.freeze(Object.defineProperty({__proto__:null,createAnimation:Ro,createNeutralAnimation:na,sampleChannel:ar,wrapFrame:Co},Symbol.toStringTag,{value:"Module"}));function Lo(e){const n=e&&e.puppet&&e.puppet.animBound;return n?[n.x*Math.abs(e.scale[0]),n.y*Math.abs(e.scale[1])]:[0,0]}function Fo(e){for(const n of e&&e.effects||[]){if(n.visible===!1)continue;const t=Math.max((n.passes||[]).length,(n.materialPasses||[]).length);for(let r=0;r<t;r++){const o=n.passes&&n.passes[r]&&n.passes[r].combos||{},i=n.materialPasses&&n.materialPasses[r]&&n.materialPasses[r].combos||{},s=o.TRANSPARENCY!==void 0?o.TRANSPARENCY:i.TRANSPARENCY;if(Number(s)===0)return!0}}return!1}function cr(e,n,t){if(t||(t=new Set),!n)return t;for(const r of e.childIds||[]){const o=n.get(r);!o||o.particle||o.isPostProcess||(t.add(r),cr(o,n,t))}return t}function kr(e){const n=Vs[e]||"translucent";return{mode:n,prep:Xs[n]||0}}function oa(e,n,t,r){const{mode:o,prep:i}=kr(e);let s=t;return i===1?s=t*r:i===2&&(s=1-r+t*r),o==="screen"?s+n*(1-s):o==="multiply"?n*s:o==="additive"?n+t*r:n*(1-r)+t*r}function No(e,n,t){const r=e&&Number(e.scale)||1;let o=Math.max(1,Math.round(n/r)),i=Math.max(1,Math.round(t/r));const s=e&&Number(e.fit);if(Number.isFinite(s)&&s>0){const c=Math.max(o,i);if(c>s){const a=s/c;o=Math.max(1,Math.round(o*a)),i=Math.max(1,Math.round(i*a))}}return[o,i]}function ia(e){const n=Number(e);return!Number.isFinite(n)||n<.001?999:1/n}const Un=-1;function Br(e,n){return!!n&&!e}const sa="mix(999.0, 1.0 / max(g_PointerScale, 0.001), step(0.001, g_PointerScale))";function Uo(e){if(typeof e!="string"||/unprojectedUVs\s*\*=\s*mix\(999\.0,\s*1\.0\s*\/\s*max\(\s*g_PointerScale/.test(e))return e;const n=/unprojectedUVs\s*\*=\s*v_PointerScale\s*\*/.test(e),t=/unprojectedUVs\s*\*=\s*g_PointerScale\s*\*/.test(e);if(!n&&!t)return e;let r=e;/uniform\s+float\s+g_PointerScale\b/.test(r)||(r=r.replace(/void\s+main\s*\(/,`uniform float g_PointerScale;
|
|
62
|
+
void main(`));const o=n?/unprojectedUVs\s*\*=\s*v_PointerScale\s*\*/:/unprojectedUVs\s*\*=\s*g_PointerScale\s*\*/;return r.replace(o,"unprojectedUVs *= "+sa+" *")}function aa(e,n={}){const t=e.getContext("webgl2",{premultipliedAlpha:!1,antialias:!1,alpha:!1,preserveDrawingBuffer:!0});if(!t)throw new Error("\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 WebGL2");const r=n.shaderResolver||(async()=>null),o=n.diag||(()=>{}),i=typeof document<"u"?document.createElement("canvas"):null;i&&(i.style.cssText="position:fixed;left:-9999px;top:-9999px;width:2px;height:2px;opacity:0");let s=!1,c=n.fboCapFactor===void 0?0:n.fboCapFactor,a=null,u=null,l=null;const d=[["g_AudioSpectrum16Left","left16"],["g_AudioSpectrum16Right","right16"],["g_AudioSpectrum32Left","left32"],["g_AudioSpectrum32Right","right32"],["g_AudioSpectrum64Left","left64"],["g_AudioSpectrum64Right","right64"]];function h(f){l=f||null}let p=null,w=null,m=null,g=null,v=null,b=null,x=null;const E=new Map,_=new Map,C={total:0,ok:0,failed:0};function N(f,T){p=typeof f=="function"?f:null,w=T&&T.userProperties||null,m=T&&T.audioViews||null,g=T&&T.shared||null,v=T&&T.inputView||null,b=T&&T.timers||null,x=T&&typeof T.onSandbox=="function"?T.onSandbox:null,E.clear(),_.clear()}let D=!1;const k=sr(t,Fr,Hs),O=sr(t,Fr,Gs),j=sr(t,Fr,Ys),W=t.createVertexArray();t.bindVertexArray(W);const K=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,K),t.enableVertexAttribArray(0),t.vertexAttribPointer(0,3,t.FLOAT,!1,20,0),t.enableVertexAttribArray(1),t.vertexAttribPointer(1,2,t.FLOAT,!1,20,12),t.bindVertexArray(null);const V=new Map;let G=1;function Q(f,T,y){const M=(y||"")+"|"+f+"x"+T;if(V.has(M)){const B=V.get(M);return B.stamp=G,B}const S=t.createFramebuffer(),P=t.createTexture();t.bindTexture(t.TEXTURE_2D,P),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,f,T,0,t.RGBA,t.UNSIGNED_BYTE,null),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.bindFramebuffer(t.FRAMEBUFFER,S),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,P,0),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.bindFramebuffer(t.FRAMEBUFFER,null);const R={fbo:S,tex:P,width:f,height:T,stamp:G};return V.set(M,R),R}function q(){for(const[f,T]of V)T.stamp!==G&&(T.fbo&&t.deleteFramebuffer(T.fbo),T.tex&&t.deleteTexture(T.tex),V.delete(f))}const te=new Map,me=new Map,ye=new Map;function We(f){const T={},y=/uniform\s+[A-Za-z0-9_]+\s+([A-Za-z_][A-Za-z0-9_]*)[^;]*;\s*\/\/([^\n]*)/g;let M;for(;(M=y.exec(f))!==null;){const S=M[1],P=M[2],R=/"material"\s*:\s*"([^"]+)"/.exec(P);if(!R)continue;const B=/"default"\s*:\s*("(?:[^"]*)"|-?\d+(?:\.\d+)?)/.exec(P);T[R[1]]={uniform:S,default:B?Je(B[1]):void 0}}return T}function Ve(f){const T=new Map,y=/uniform\s+sampler2D\s+g_Texture(\d+)\s*;\s*\/\/([^\n]*)/g;let M;for(;(M=y.exec(f))!==null;){const S=Number(M[1]),P=/"default"\s*:\s*"([^"]+)"/.exec(M[2]);P&&P[1]&&T.set(S,P[1])}return T}function Se(f){const T=[],y=/uniform\s+sampler2D\s+(g_Texture(\d+))[^;]*;\s*\/\/([^\n]*)/g;let M;for(;(M=y.exec(f))!==null;){const S=/"combo"\s*:\s*"([^"]+)"/.exec(M[3]);S&&T.push({slot:Number(M[2]),name:M[1],combo:S[1]})}return T}function Je(f){if(f.startsWith('"'))return f.slice(1,-1);const T=Number(f);return Number.isFinite(T)?T:void 0}async function Xe(f,T,y){let M=ye.get(f);if(M===void 0){const R=await r("shaders/"+f+".frag")||"",B=await r("shaders/"+f+".vert")||"";M={frag:R,vert:B,texCombos:Se(R)},ye.set(f,M)}const S={...T};for(const R of M.texCombos)y&&y[R.slot]&&S[R.combo]===void 0&&(S[R.combo]=1);const P=f+"|"+JSON.stringify(S);if(te.has(P))return te.get(P);for(let R=0;R<4;R++){const B=new Set,z=re=>me.has(re)?me.get(re):(B.add(re),null),$=Uo(To(M.frag,"frag",S,z,M.vert)),J=To(M.vert,"vert",S,z,M.frag);if(B.size===0){let re;try{re=sr(t,J,$)}catch(F){throw new Error("shader="+f+" "+(F&&F.message))}const Z=new Map,ce=t.getProgramParameter(re,t.ACTIVE_UNIFORMS);for(let F=0;F<ce;F++){const ee=t.getActiveUniform(re,F),ue=ee.name.replace(/\[0\]$/,"");Z.set(ue,{loc:t.getUniformLocation(re,ee.name),type:Qs[ee.type]||"unknown",size:ee.size})}const le={...We(M.vert),...We(M.frag)},se=new Map([...Ve(M.vert),...Ve(M.frag)]),ie={prog:re,uni:Z,matMeta:le,samplerDefaults:se,fragGlsl:$,vertGlsl:J};return te.set(P,ie),ie}await Promise.all(Array.from(B).map(async re=>{me.set(re,await r("shaders/"+re)||"")}))}throw new Error("include \u89E3\u6790\u5931\u8D25: "+f)}const Pe=Nr(t,new Uint8Array([255,255,255,255]),1,1),Ae=Nr(t,new Uint8Array([0,0,0,0]),1,1);let Ye=null;function yr(f){Ye=f||null}function ot(){if(!Ye)return null;const f=typeof Ye=="function"?Ye():Ye;return f&&f.state?f.state:f}const He={x:0,y:0,sx:0,sy:0};let Hn=0,Lt=0,et=0,Be=1/60,Mt=-1;const mn=typeof n.fadeDuration=="number"&&n.fadeDuration>=0?n.fadeDuration:1,pn=(f,T)=>{const y=f!==null&&typeof f=="object"?f.value:f;return y===!0||y===1?!0:y===!1||y===0?!1:T},gn=(f,T)=>{const y=f!==null&&typeof f=="object"?f.value:f;return typeof y=="number"&&Number.isFinite(y)?y:T},Gn=f=>n.fade!==!1&&pn(f.camerafade,!1);function Qt(f,T){if(!pn(f.camerashake,!1))return null;const y=gn(f.camerashakeamplitude,0);if(y===0)return null;const M=Math.max(0,Math.min(1,gn(f.camerashakeroughness,0))),S=gn(f.camerashakespeed,1),P=T*S,R=Math.sin(P*2.1)*Math.cos(P*.7),B=Math.cos(P*1.7)*Math.sin(P*.9),z=Math.sin(P*11.3)*Math.cos(P*7.1),$=Math.cos(P*9.7)*Math.sin(P*13.1);return{x:(R*(1-M)+z*M)*y,y:(B*(1-M)+$*M)*y}}function Yn(){const f=new Date;return(f.getHours()*3600+f.getMinutes()*60+f.getSeconds())/86400}function we(f,T,y){const M=f.get(T);M&&M.loc!==null&&y(M.loc,M.type,M.size)}function Gt(f){if(typeof f=="number")return[f,f,f,f];const T=String(f).trim().split(/[\s,]+/).map(Number);return[T[0]||0,T[1]||0,T[2]||0,T[3]||0]}function ht(f,T,y){const M=f.get(T);if(!M||M.loc===null)return;const S=y&&y.value!==void 0?y.value:y,P=Gt(S);switch(M.type){case"float":t.uniform1f(M.loc,P[0]);break;case"int":case"bool":t.uniform1i(M.loc,S===!0||S===1?1:Math.round(P[0]));break;case"vec2":t.uniform2f(M.loc,P[0],P[1]);break;case"vec3":t.uniform3f(M.loc,P[0],P[1],P[2]);break;case"vec4":t.uniform4f(M.loc,P[0],P[1],P[2],P[3]);break;case"mat4":t.uniformMatrix4fv(M.loc,!1,Ze);break;case"mat3":t.uniformMatrix3fv(M.loc,!1,Zn);break}}const bn=()=>new Float32Array([1,0,0,0,1,0,0,0,1]);function qn(f,T,y,M,S,P,R,B,z,$,J){if(we(f,"g_Time",F=>t.uniform1f(F,y)),we(f,"g_Daytime",F=>t.uniform1f(F,Yn())),we(f,"g_ModelViewProjectionMatrix",F=>t.uniformMatrix4fv(F,!1,P)),we(f,"g_ModelMatrix",F=>t.uniformMatrix4fv(F,!1,R)),we(f,"g_ViewProjectionMatrix",F=>t.uniformMatrix4fv(F,!1,B)),f.get("g_ModelViewProjectionMatrixInverse")){let F=null;for(const[ue,ve]of z)ue===0&&(F=ve);const ee=F&&F[0]>0&&F[1]>0?Cs(Ln(cn(),F[0]/2,F[1]/2,1)):Ze;we(f,"g_ModelViewProjectionMatrixInverse",ue=>t.uniformMatrix4fv(ue,!1,ee))}we(f,"g_Brightness",F=>t.uniform1f(F,T.brightness)),we(f,"g_UserAlpha",F=>t.uniform1f(F,T.alpha)),we(f,"g_Alpha",F=>t.uniform1f(F,T.alpha)),we(f,"g_Color",F=>t.uniform3f(F,T.color[0],T.color[1],T.color[2])),we(f,"g_Color4",F=>t.uniform4f(F,T.color[0],T.color[1],T.color[2],1)),we(f,"g_CompositeColor",F=>t.uniform3f(F,T.color[0],T.color[1],T.color[2])),we(f,"g_TexelSize",F=>t.uniform2f(F,1/M,1/S)),we(f,"g_TexelSizeHalf",F=>t.uniform2f(F,.5/M,.5/S)),we(f,"g_TextureReductionScale",F=>t.uniform1f(F,1));const re=ot(),Z=Br(!!(re&&re.has),!!f.get("g_PointerScale"));let ce=Z?Un:re?re.u:.5,le=Z?Un:re?re.v:.5,se=Z?Un:re?re.lastU:.5,ie=Z?Un:re?re.lastV:.5;if(J&&T&&T.size&&T.size[0]>0&&T.size[1]>0){const F=Math.abs(T.size[0]*T.scale[0]),ee=Math.abs(T.size[1]*T.scale[1]);if(F>0&&ee>0){const ue=T.origin[0]-F/2,ve=J.projH-T.origin[1]-ee/2,Me=Re=>(J.offX+Re*J.viewW-ue)/F,he=Re=>(J.offY+Re*J.viewH-ve)/ee;ce=Me(ce),le=he(le),se=Me(se),ie=he(ie)}}we(f,"g_PointerPosition",F=>t.uniform2f(F,ce,le)),we(f,"g_PointerPositionLast",F=>t.uniform2f(F,se,ie)),we(f,"g_PointerState",F=>t.uniform4f(F,ce,le,re&&re.leftDown?1:0,0)),we(f,"g_ParallaxPosition",F=>t.uniform2f(F,He.sx*.5+.5,He.sy*.5+.5)),we(f,"g_Frametime",F=>t.uniform1f(F,Be)),f.get("g_EffectTextureProjectionMatrixInverse")&&we(f,"g_EffectTextureProjectionMatrixInverse",F=>t.uniformMatrix4fv(F,!1,Ze));for(let F=0;F<8;F++)we(f,"g_Texture"+F,ee=>t.uniform1i(ee,F));for(const[F,ee]of z)we(f,"g_Texture"+F+"Resolution",ue=>t.uniform4f(ue,ee[0],ee[1],ee[2],ee[3]));if(l){const F=typeof l=="function"?l():l;if(F)for(const[ee,ue]of d){const ve=F[ue];ve&&we(f,ee,Me=>t.uniform1fv(Me,ve))}}}function Jt(f,T,y){for(const[M,S]of Object.entries(T||{})){const P=y&&y[M];P&&ht(f,P.uniform,S)}for(const[M,S]of Object.entries(y||{}))(!T||!(M in T))&&S.default!==void 0&&ht(f,S.uniform,S.default)}function en(f){const T=ot();Br(!!(T&&T.has),!!f.get("g_PointerScale"))&&we(f,"g_PointerScale",y=>t.uniform1f(y,0))}function it(f,T,y,M){if(!f)return f;let S=!1;for(const R of Object.values(f))if(R!==null&&typeof R=="object"&&typeof R.script=="string"){S=!0;break}if(!S||!p)return f;const P={...f};for(const[R,B]of Object.entries(f)){if(B===null||typeof B!="object"||typeof B.script!="string")continue;const z=T+"|"+R;let $=E.get(z);if($===void 0){C.total++;try{$=p(B.script,B.scriptproperties||B.scriptProperties||null,{userProperties:w||{},audioViews:m||void 0,layer:M||null,shared:g||{},inputView:v||void 0,setTimeout:b?b.setTimeout:void 0,clearTimeout:b?b.clearTimeout:void 0,setInterval:b?b.setInterval:void 0,clearInterval:b?b.clearInterval:void 0})}catch{$=null}if($?C.ok++:C.failed++,E.set(z,$),$){const se=B.value!==void 0?B.value:B,ie=Gt(se),ee=typeof se=="number"?ie[0]:{x:ie[0],y:ie[1],z:ie[2]};$.init&&$.init(ee)}if($&&typeof $.applyUserProperties=="function")try{$.applyUserProperties(w||{})}catch{}if($&&$.hasMediaHook&&x)try{x($)}catch{}}if(!$||$.disabled||!$.hasUpdate)continue;if($.engine){$.engine.runtime=y,$.engine.frametime=Be,$.engine.timeOfDay=Yn();const se=ot();se&&se.screenW&&se.screenH&&($.engine.screenResolution={x:se.screenW,y:se.screenH})}const J=Gt(B.value!==void 0?B.value:B),Z=typeof(B.value!==void 0?B.value:B)=="number"?J[0]:{x:J[0],y:J[1],z:J[2]};let ce;try{ce=$.callUpdate(Z)}catch{ce=void 0}const le=ce??Z;if(typeof le=="number"&&Number.isFinite(le))P[R]=le;else if(le&&typeof le=="object"){const se=Number(le.x),ie=Number(le.y),F=Number(le.z);Number.isFinite(se)&&Number.isFinite(ie)&&(P[R]=Number.isFinite(F)?`${se} ${ie} ${F}`:`${se} ${ie} 0`)}}return P}function vn(f,T,y){if(!f)return f;let M=!1;for(const P of Object.values(f))if(P&&typeof P=="object"&&P.animation&&P.animation.options){M=!0;break}if(!M)return f;const S={...f};for(const[P,R]of Object.entries(f)){if(!R||typeof R!="object"||!R.animation||!R.animation.options)continue;const B=T+"|anim|"+P;let z=_.get(B);if(!z){const $=Ro(R.animation),J=R.value!==void 0?R.value:0;$.baseNumeric=Array.isArray(J)?J.slice():J,z={ctrl:$},_.set(B,z)}z.ctrl.playing&&z.ctrl.setFrame(y*z.ctrl.fps*z.ctrl.rate),S[P]=z.ctrl.applyTo(z.ctrl.baseNumeric)}return S}function Yt(f,T,y,M){return f==null||f===""?null:f.startsWith("_rt_")?f.startsWith("_rt_imageLayerComposite")?rn&&at.has(f)?at.get(f):T:y.has(f)?y.get(f):null:y.has(f)?y.get(f):M.get(f)||null}const tt=Zs(),xn=Ks(),yn=new Map;function Ft(f,T){const y=f+"x"+T;let M=yn.get(y);return M===void 0&&(M=qs(f,T),yn.set(y,M)),M}let Nt=null;function st(f,T){Nt!==f&&(t.bindBuffer(t.ARRAY_BUFFER,K),t.bufferData(t.ARRAY_BUFFER,T,t.DYNAMIC_DRAW),Nt=f)}const _e={mvp:t.getUniformLocation(k,"u_MVP"),tex:t.getUniformLocation(k,"u_Tex"),color:t.getUniformLocation(k,"u_Color4"),frameOrigin:t.getUniformLocation(k,"u_FrameOrigin"),frameU:t.getUniformLocation(k,"u_FrameU"),frameV:t.getUniformLocation(k,"u_FrameV"),blendPrep:t.getUniformLocation(k,"u_BlendPrep")},_t={mvp:t.getUniformLocation(O,"u_MVP"),tex:t.getUniformLocation(O,"u_Tex"),blendPrep:t.getUniformLocation(O,"u_BlendPrep")},qt={mvp:t.getUniformLocation(j,"u_MVP"),tex:t.getUniformLocation(j,"u_Tex")},Ze=cn(),Zn=bn();function mt(f){f==="translucent"?(t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)):f==="additive"?(t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE,t.ONE,t.ONE)):t.disable(t.BLEND)}let Ut=0;function kt(f){const{mode:T,prep:y}=kr(f);Ut=y,T==="additive"?(t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE,t.ONE,t.ONE)):T==="multiply"?(t.enable(t.BLEND),t.blendFuncSeparate(t.DST_COLOR,t.ZERO,t.ONE,t.ONE_MINUS_SRC_ALPHA)):T==="screen"?(t.enable(t.BLEND),t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_COLOR,t.ONE,t.ONE_MINUS_SRC_ALPHA)):mt("translucent")}function wn(f,T){if(T&&T.perspective)return!1;const y=f.size[0]*f.scale[0],M=f.size[1]*f.scale[1];if(y===0||M===0)return!1;let S=Math.abs(y)/2,P=Math.abs(M)/2;const R=f.angles[2];if(R!==0){const ce=Math.abs(Math.cos(R)),le=Math.abs(Math.sin(R)),se=S*ce+P*le,ie=S*le+P*ce;S=se,P=ie}const B=f.origin[0],z=T.projH-f.origin[1];let $=64;f.parallaxDepth&&($+=Math.abs(un(f.parallaxDepth[0])*Lt),$+=Math.abs(un(f.parallaxDepth[1])*et));const J=Lo(f),re=$+J[0],Z=$+J[1];return B+S+re<T.offX||B-S-re>T.offX+T.viewW||z+P+Z<T.offY||z-P-Z>T.offY+T.viewH}function Kn(f,T,y){if(!f.spriteSheet)return null;const M=T&&T.frames,S=Array.isArray(M)?M:M&&M.list;if(!S||S.length===0)return null;const P=M&&M.atlasWidth||T.width||0,R=M&&M.atlasHeight||T.height||0;if(P<=0||R<=0)return null;f.spriteFrameCount=S.length;let B=0;const z=f.textureAnimation;if(z&&z.frame!==null&&z.frame!==void 0)B=Math.floor(Number(z.frame))||0,B>=0||(B=0),B>=S.length&&(B=S.length-1);else if(S.length>1){const le=z&&z.playing===!1;let se=0;for(const ie of S)se+=ie.duration>0?ie.duration:1/30;if(!le&&se>0){let ie=y%se;ie<0&&(ie+=se);for(let F=0;F<S.length;F++){const ee=S[F].duration>0?S[F].duration:.03333333333333333;if(ie<ee){B=F;break}ie-=ee,B=F}}}const $=S[B],J=$.uDir?$.uDir[0]:$.width,re=$.uDir?$.uDir[1]:0,Z=$.vDir?$.vDir[0]:0,ce=$.vDir?$.vDir[1]:$.height;return[$.x/P,$.y/R,J/P,re/R,Z/P,ce/R]}function pt(f,T){const y=f.size[0]*f.scale[0],M=f.size[1]*f.scale[1];let S=cn();if(T&&T.perspective){const R=Us(f,T);S=ln(S,R[0],R[1],R[2]);const B=f.angles[0]||0,z=f.angles[1]||0;z&&(S=Ls(S,z)),B&&(S=Rs(S,B)),S=go(S,-f.angles[2])}else{if(S=ln(S,f.origin[0],T.projH-f.origin[1],f.origin[2]),f.parallaxDepth&&(Lt!==0||et!==0)){const R=un(f.parallaxDepth[0]),B=un(f.parallaxDepth[1]);S=ln(S,R*Lt,B*et,0)}S=go(S,-f.angles[2])}const P=Eo[f.alignment]||[.5,.5];return(P[0]!==.5||P[1]!==.5)&&(S=ln(S,(.5-P[0])*y,(.5-P[1])*M,0)),{m:S,w:y,h:M}}function Qn(f,T,y,M,S,P,R,B,z=!1,$=null,J=null){const re=pt(M,S);let Z=re.m;if(J){const se=(J[0]+J[2]/2)*M.scale[0],ie=(J[1]+J[3]/2)*M.scale[1];Z=ln(Z,se,-ie,0),Z=Ln(Z,J[2]*M.scale[0],J[3]*M.scale[1],1)}else Z=Ln(Z,re.w,re.h,1);const ce=yt(P,Z),le=f===O?_t:_e;t.useProgram(f),z?(Ut=0,t.enable(t.BLEND),M.containerAlphaMeaningful?t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA):t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)):kt(M.colorBlendMode),le.blendPrep!==null&&le.blendPrep!==void 0&&t.uniform1i(le.blendPrep,Ut),Ce?(t.bindFramebuffer(t.FRAMEBUFFER,Ce.fbo.fbo),t.viewport(0,0,Ce.w,Ce.h)):(t.bindFramebuffer(t.FRAMEBUFFER,null),t.viewport(0,0,R,B)),t.bindVertexArray(W),st("local",xn),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,T),t.uniform1i(le.tex,0),t.uniformMatrix4fv(le.mvp,!1,ce),le.color!==null&&le.color!==void 0&&t.uniform4f(le.color,y[0],y[1],y[2],y[3]),tn(le,$),t.drawArrays(t.TRIANGLES,0,6)}function tn(f,T){!f||f.frameOrigin===null||f.frameOrigin===void 0||(T?(t.uniform2f(f.frameOrigin,T[0],T[1]),t.uniform2f(f.frameU,T[2],T[3]),t.uniform2f(f.frameV,T[4],T[5])):(t.uniform2f(f.frameOrigin,0,0),t.uniform2f(f.frameU,1,0),t.uniform2f(f.frameV,0,1)))}let nn=null,Ce=null;const at=new Map,At=new Map;let rn=!0;function Mn(f,T){const y=pt(f,T),M=T&&T.perspective?f.scale[1]:-f.scale[1],S=T&&T.perspective&&f.scale[2]||1;return Ln(y.m,f.scale[0],M,S)}function _n(f,T,y,M,S,P,R){Ce?(t.bindFramebuffer(t.FRAMEBUFFER,Ce.fbo.fbo),t.viewport(0,0,Ce.w,Ce.h)):(t.bindFramebuffer(t.FRAMEBUFFER,null),t.viewport(0,0,M,S));const B=yt(y,Mn(f,T));nn(f,B,{time:P,overrideTex:R||null}),Nt=null}let Bt=null;function A(f,T){return Bt===null&&(Bt=t.createTexture(),t.bindTexture(t.TEXTURE_2D,Bt),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)),t.bindFramebuffer(t.FRAMEBUFFER,null),t.bindTexture(t.TEXTURE_2D,Bt),t.copyTexImage2D(t.TEXTURE_2D,0,t.RGB8,0,0,f,T,0),Bt}function L(f,T,y,M,S,P,R,B){const z=A(R,B),$=pt(f,S);let J=$.m;J=Ln(J,$.w,$.h,1);const re=yt(P,J),Z=[[-.5,.5],[.5,.5],[-.5,-.5],[.5,-.5]].map(([ee,ue])=>{const ve=Bs(re,ee,ue,0);return[ve[0]*.5+.5,ve[1]*.5+.5]}),[ce,le,se,ie]=Z,F=new Float32Array([0,M,0,ce[0],ce[1],0,0,0,se[0],se[1],y,M,0,le[0],le[1],y,M,0,le[0],le[1],0,0,0,se[0],se[1],y,0,0,ie[0],ie[1]]);t.useProgram(j),mt("normal"),t.disable(t.BLEND),t.bindFramebuffer(t.FRAMEBUFFER,T.fbo),t.viewport(0,0,y,M),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.bindVertexArray(W),t.bindBuffer(t.ARRAY_BUFFER,K),t.bufferData(t.ARRAY_BUFFER,F,t.DYNAMIC_DRAW),Nt=null,t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,z),t.uniform1i(qt.tex,0),t.uniformMatrix4fv(qt.mvp,!1,Rn(0,y,0,M,-1e4,1e4)),t.drawArrays(t.TRIANGLES,0,6),t.enable(t.BLEND)}function I(f,T,y,M,S){if(!rn||Ce)return;const P=At.get(f.id);if(!P||P.size===0)return;const R=Math.max(1,Math.round(Math.abs(f.size[0]*(f.scale[0]||1)))),B=Math.max(1,Math.round(Math.abs(f.size[1]*(f.scale[1]||1))));if(R<=1&&B<=1)return;const z=Q(R,B,"lc:"+f.id);L(f,z,R,B,T,y,M,S);for(const $ of P)at.set($,z);At.delete(f.id),t.bindFramebuffer(t.FRAMEBUFFER,null),t.viewport(0,0,M,S)}async function U(f,T,y,M,S,P,R,B){G++,t.viewport(0,0,y,M);const z=f.general||{};if(z.clearenabled!==!1){const F=Po(z.clearcolor||"0 0 0");t.clearColor(F[0],F[1],F[2],1)}else t.clearColor(0,0,0,1);if(t.clear(t.COLOR_BUFFER_BIT),Mt>=0){const F=S-Mt;Be=F>0&&F<1?F:Math.min(.1,Math.max(.001,F||1/60))}Mt=S;const $=Ds(f,y,M,P,R,B);let J=yt($.projection,$.view);const re=z.cameraparallax,Z=re===!0||re!==null&&typeof re=="object"&&re.value===!0;Lt=0,et=0;const ce=ot();if(ce&&(He.x=ce.u*2-1,He.y=ce.v*2-1),!$.perspective&&n.parallax!==!1&&Z){const F=(Et,fe)=>{const ge=Et!==null&&typeof Et=="object"?Et.value:Et;return typeof ge=="number"&&Number.isFinite(ge)?ge:fe},ee=F(z.cameraparallaxamount,0),ue=F(z.cameraparallaxmouseinfluence,1),ve=F(z.cameraparallaxdelay,1),Me=S-Hn;Hn=S;const he=Me>0?1-Math.exp(-Me/Math.max(.05,ve)):1;He.sx+=(He.x-He.sx)*he,He.sy+=(He.y-He.sy)*he;const Re=ee*ue,Te=60,Ge=He.sx*Re*$.viewW,gt=He.sy*Re*$.viewH,Tt=Math.max(Math.abs(Ge),Math.abs(gt))/Te,Zt=Tt>1?1/Tt:1;Lt=-(Ge*Zt),et=-(gt*Zt)}if(!$.perspective&&n.shake!==!1){const F=Qt(z,S);if(F){const ee=F.x*$.viewW*.02,ue=F.y*$.viewH*.02;(ee!==0||ue!==0)&&(J=yt(J,ln(cn(),ee,ue,0)))}}if(Ye){const F=typeof Ye=="function"?Ye():Ye;F&&typeof F.syncWorld=="function"&&F.syncWorld($,0,0)}if(!D){D=!0;const F=(f.layers||[]).filter(ve=>ve.isContainer),ee=F.filter(ve=>(ve.effects||[]).some(Me=>Me.visible)&&!ve.hasChildren),ue=ee.filter(ve=>(ve.effects||[]).some(Me=>(Me.materialPasses||[]).length>0));o(`containers total=${F.length} canvasCandidates=${ee.length} passesResolved=${ue.length} names=${ee.slice(0,4).map(ve=>ve.name||"?").join("/")}`)}await X(f,T,$,y,M,S);const le=new Map;for(const F of f.layers)F.id!==void 0&&le.set(F.id,F);const se=new Set;for(const F of f.layers)!F.visible||F.destroyed||!F.isContainer||!F.hasChildren||!(F.effects||[]).some(ue=>ue.visible)||(F.childIds||[]).length===0||cr(F,le,se);if(a)try{a()}catch(F){o("particle advance error: "+(F&&F.message))}const ie=$.perspective?f.layers.slice().sort((F,ee)=>+!!ee.isSkybox-+!!F.isSkybox):f.layers;for(const F of ie)if(!(!F.visible||F.destroyed)&&!(F.isPostProcess&&!(F.effects||[]).some(ee=>ee.visible))&&!se.has(F.id)){if(F.isContainer){if(!(F.effects||[]).some(ue=>ue.visible)){I(F,$,J,y,M);continue}if(F.hasChildren){(F.childIds||[]).length>0&&await ne(F,f,T,$,J,y,M,S);continue}}if(F.particle){if(u)try{await u(F.id,$,J,y,M)}catch(ee){o("particle render error: "+(ee&&ee.message))}continue}wn(F,$)||await Y(F,T,$,J,y,M,S)}if(Gn(z)&&S<mn){const F=Math.max(0,Math.min(1,S/mn)),ee=1-F*F*(3-2*F);if(ee>.002){const ue=Po(z.clearcolor||"0 0 0");t.useProgram(k),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),t.bindFramebuffer(t.FRAMEBUFFER,null),t.viewport(0,0,y,M),t.bindVertexArray(W),st("pass",tt),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,Pe),t.uniform1i(_e.tex,0),t.uniform4f(_e.color,ue[0],ue[1],ue[2],ee),tn(_e,null),_e.blendPrep!==null&&_e.blendPrep!==void 0&&t.uniform1i(_e.blendPrep,0),t.uniformMatrix4fv(_e.mvp,!1,Ze),t.drawArrays(t.TRIANGLES,0,6)}}t.bindVertexArray(null),q()}async function X(f,T,y,M,S,P){at.clear(),At.clear();const R=new Map,B=new Set;let z=null;const $=J=>{if(typeof J!="string")return;const re=/^_rt_imageLayerComposite_(\d+)_[a-z]$/.exec(J);if(!re)return;const Z=Number(re[1]);z!==null&&Z===z&&B.add(Z);let ce=R.get(Z);ce||(ce=new Set,R.set(Z,ce)),ce.add(J)};for(const J of f.layers||[]){z=J.id;for(const re of J.effects||[])if(re.visible){for(const Z of re.passes||[])for(const ce of Z.textures||[])$(ce);for(const Z of re.materialPasses||[]){for(const ce of Z.binds||[])$(ce&&ce.name);for(const ce of Z.textures||[])$(ce)}}}if(R.size!==0){for(const[J,re]of R){const Z=(f.layers||[]).find(Te=>Te.id===J);if(!Z||Z.particle||Z.isPostProcess||B.has(J))continue;const ce=typeof Z.image=="string"?Z.image:"";if(Z.isContainer&&!Z.hasChildren&&ce.indexOf("models/util/composelayer")===0&&!(Z.effects||[]).some(Te=>Te.visible)){At.set(J,re);continue}const se=Math.max(1,Math.round(Math.abs(Z.size[0]*(Z.scale[0]||1)))),ie=Math.max(1,Math.round(Math.abs(Z.size[1]*(Z.scale[1]||1))));if(se<=1&&ie<=1)continue;const F=Q(se,ie,"lc:"+J);t.bindFramebuffer(t.FRAMEBUFFER,F.fbo),t.viewport(0,0,se,ie),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT);const ee={view:y.view,projection:Rn(0,se,0,ie,-1e4,1e4),eye:y.eye,projW:se,projH:ie,offX:0,offY:0,viewW:se,viewH:ie},ue=Ce,ve=Z.origin,Me=Z.scale,he=Z.angles,Re=Z.visible;Ce={fbo:F,w:se,h:ie},Z.origin=[se/2,ee.projH-ie/2,ve[2]],Z.scale=[Math.sign(Me[0])||1,Math.sign(Me[1])||1,Me[2]],Z.angles=[0,0,0],Z.visible=!0;try{await Y(Z,T,ee,ee.projection,se,ie,P);for(const Te of re)at.set(Te,F)}catch(Te){o(`composite \u6E90\u5C42 ${J} \u6E32\u67D3\u5931\u8D25: ${Te&&Te.message}`)}finally{Ce=ue,Z.origin=ve,Z.scale=Me,Z.angles=he,Z.visible=Re}}t.bindFramebuffer(t.FRAMEBUFFER,null),t.viewport(0,0,M,S)}}async function ne(f,T,y,M,S,P,R,B){const z=Math.max(1,Math.round(Math.abs(f.size[0]))),$=Math.max(1,Math.round(Math.abs(f.size[1])));if((f.childIds||[]).length===0)return;const re=new Map;for(const he of T.layers)he.id!==void 0&&re.set(he.id,he);const Z=cr(f,re),ce=T.layers.filter(he=>Z.has(he.id)&&he.visible);if(ce.length===0)return;const le=Q(z,$,"group");t.bindFramebuffer(t.FRAMEBUFFER,le.fbo),t.viewport(0,0,z,$),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT);const se={view:M.view,projection:Rn(0,z,0,$,-1e4,1e4),eye:M.eye,projW:z,projH:$,offX:0,offY:0,viewW:z,viewH:$},ie=se.projection,F=f.scale[0]||1,ee=f.scale[1]||1,ue=f.angles[2]||0,ve=Math.cos(-ue),Me=Math.sin(-ue);Ce={fbo:le,w:z,h:$};try{for(const he of ce){if(he.isPostProcess||he.particle||he.isContainer&&(he.childIds||[]).length>0)continue;const Re=he.origin,Te=he.scale,Ge=he.angles,gt=Re[0]-f.origin[0],Tt=Re[1]-f.origin[1],Zt=(gt*ve-Tt*Me)/F,Et=(gt*Me+Tt*ve)/ee;he.origin=[z/2+Zt,$/2+Et,Re[2]],he.scale=[Te[0]/F,Te[1]/ee,Te[2]],he.angles=[Ge[0],Ge[1],Ge[2]-ue];try{await Y(he,y,se,ie,z,$,B)}finally{he.origin=Re,he.scale=Te,he.angles=Ge}}}finally{Ce=null}f.groupTex=le.tex,f.groupW=z,f.groupH=$;try{await Y(f,y,M,S,P,R,B)}finally{f.groupTex=null}}async function Y(f,T,y,M,S,P,R){const B=!!(f.puppet&&nn),z=!f.solid&&f.textureName?T.get(f.textureName):null;if(z&&z.video){const fe=z.video;if(fe.readyState>=2&&fe.currentTime!==z.lastUploaded){t.bindTexture(t.TEXTURE_2D,z.glTex);try{let ge=fe.videoWidth||z.width,de=fe.videoHeight||z.height;const Le=2048,bt=t.getParameter(t.MAX_TEXTURE_SIZE),ct=bt>0&&bt<4096?Math.min(Le,bt):Le;let It=1;Math.max(ge,de)>ct&&(It=ct/Math.max(ge,de));const lt=Math.max(1,Math.round(ge*It)),Ie=Math.max(1,Math.round(de*It));let Jn=fe;if(i&<>0&&Ie>0){(i.width!==lt||i.height!==Ie)&&(i.width=lt,i.height=Ie);const St=i.getContext("2d");St&&(St.clearRect(0,0,lt,Ie),St.drawImage(fe,0,0,lt,Ie),Jn=i)}if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,Jn),t.getError()!==t.NO_ERROR&&i)try{const Ot=i.getContext("2d").getImageData(0,0,i.width,i.height);for(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,i.width,i.height,0,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array(Ot.data.buffer));t.getError()!==t.NO_ERROR;);}catch{}z.width=lt,z.height=Ie,z.lastUploaded=fe.currentTime,s||(s=!0,o("video tex ready "+lt+"x"+Ie+" (src "+ge+"x"+de+")"))}catch(ge){s||(s=!0,o("video upload FAIL: "+(ge&&ge.message||ge))),console.warn("[we-scene] \u89C6\u9891\u5E27\u4E0A\u4F20\u5931\u8D25:",ge&&ge.message,"readyState=",fe.readyState,"cur=",fe.currentTime)}}}const $=f.groupTex?f.groupTex:z&&z.glTex?z.glTex:f.solid?Pe:Ae,J=(!!f.passthrough||!!f.isPostProcess||Fo(f))&&!f.groupTex&&!z&&!B;let re,Z;if(f.groupTex?(re=f.groupW||f.size[0],Z=f.groupH||f.size[1]):B||!z?(re=f.size[0],Z=f.size[1]):(re=z.width,Z=z.height),!B&&z&&f.spriteSheet){const fe=z.frames,ge=Array.isArray(fe)?fe:fe&&fe.list;ge&&ge.length&&(re=ge[0].width||re,Z=ge[0].height||Z)}const ce=Math.max(1,Math.round(re)),le=Math.max(1,Math.round(Z)),se=[f.color[0]*f.brightness,f.color[1]*f.brightness,f.color[2]*f.brightness,f.alpha],ie=(f.effects||[]).filter(fe=>fe.visible);let F=ce,ee=le;if(c>0&&y.projW>0&&y.projH>0){const fe=Math.min(Math.abs(f.size[0]*f.scale[0]),y.viewW),ge=Math.min(Math.abs(f.size[1]*f.scale[1]),y.viewH),de=fe*(S/y.projW),Le=ge*(P/y.projH);if(de>0&&Le>0){const bt=Math.max(64,Math.round(de*c)),ct=Math.max(64,Math.round(Le*c));bt<ce&&(F=bt),ct<le&&(ee=ct)}}if(ie.length===0){B?_n(f,y,M,S,P,R):Qn(k,$,se,f,y,M,S,P,!1,Kn(f,z,R));return}const ue=Q(F,ee,"ping"),ve=Q(F,ee,"pong"),Me=Rn(0,F,0,ee,-1e4,1e4);if(B)t.useProgram(k),mt("normal"),t.bindFramebuffer(t.FRAMEBUFFER,ue.fbo),t.viewport(0,0,F,ee),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.bindVertexArray(W),Nt=null,st("layer"+F+"x"+ee,Ft(F,ee)),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,$),t.uniform1i(_e.tex,0),t.uniform4f(_e.color,1,1,1,1),tn(_e,null),_e.blendPrep!==null&&_e.blendPrep!==void 0&&t.uniform1i(_e.blendPrep,0),t.uniformMatrix4fv(_e.mvp,!1,Me),t.drawArrays(t.TRIANGLES,0,6);else if(J)L(f,ue,F,ee,y,M,S,P);else{t.useProgram(k),mt("normal"),t.bindFramebuffer(t.FRAMEBUFFER,ue.fbo),t.viewport(0,0,F,ee),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.bindVertexArray(W),st("layer"+F+"x"+ee,Ft(F,ee)),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,$),t.uniform1i(_e.tex,0);const fe=ie.some(ge=>ge&&ge.layerMaterial)?[1,1,1,se[3]]:se;t.uniform4f(_e.color,fe[0],fe[1],fe[2],fe[3]),tn(_e,Kn(f,z,R)),_e.blendPrep!==null&&_e.blendPrep!==void 0&&t.uniform1i(_e.blendPrep,0),t.uniformMatrix4fv(_e.mvp,!1,Me),t.drawArrays(t.TRIANGLES,0,6)}let he=ue,Re=ve;const Te=new Map;let Ge=!1,gt=ue;const Tt=[],Zt=new Set;for(const fe of ie){for(const de of fe.fbos||[])if(!Te.has(de.name)){const[Le,bt]=No(de,F,ee),ct=de.unique?f.id+":"+de.name:de.name;Te.set(de.name,Q(Le,bt,ct))}const ge=fe.materialPasses||[];for(let de=0;de<ge.length;de++)Tt.push({eff:fe,mp:ge[de],ov:fe.passes&&fe.passes[de]})}const Et=[];for(let fe=0;fe<Tt.length;fe++){const{eff:ge,mp:de,ov:Le}=Tt[fe];if(Zt.has(ge))continue;const bt={...de.combos||{},...Le&&Le.combos||{}},ct=de.textures||[],It=Le&&Le.textures||[],lt=[];for(let xe=0;xe<Math.max(ct.length,It.length);xe++)It[xe]!==void 0&&It[xe]!==null?lt[xe]=It[xe]:lt[xe]=ct[xe]!==void 0?ct[xe]:null;if(de.copyCommand){const xe=de.source?Te.get(de.source):null,Oe=de.target?Te.get(de.target):null;xe&&Oe&&(t.useProgram(O),mt("normal"),t.bindFramebuffer(t.FRAMEBUFFER,Oe.fbo),t.viewport(0,0,Oe.width,Oe.height),t.bindVertexArray(W),st("pass",tt),t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,xe.tex),t.uniform1i(_t.tex,0),_t.blendPrep!==null&&_t.blendPrep!==void 0&&t.uniform1i(_t.blendPrep,0),t.uniformMatrix4fv(_t.mvp,!1,Ze),t.drawArrays(t.TRIANGLES,0,6),t.bindFramebuffer(t.FRAMEBUFFER,null));continue}let Ie;try{Ie=await Xe(de.shader,bt,lt)}catch(xe){console.warn("[we-scene] \u8DF3\u8FC7\u6548\u679C\uFF08pass \u7F16\u8BD1\u5931\u8D25\uFF09:",de.shader,xe&&xe.message||xe),Zt.add(ge);continue}const Jn=Ie.prog,St=Ie.uni;Ie.fragGlsl&&Et.push(Ie.fragGlsl);let Ot,An;de.target?(Ge||(gt=he,Ge=!0),Ot=Te.get(de.target)||he,An=gt):(Ge=!1,Ot=Re,An=he),t.useProgram(Jn),mt(de.blending||"normal"),t.bindFramebuffer(t.FRAMEBUFFER,Ot.fbo),t.viewport(0,0,Ot.width,Ot.height),t.bindVertexArray(W),st("pass",tt);const wr=de.textures||[],$i=Math.max(wr.length,8),to=new Map,ji=new Set;for(let xe=0;xe<$i;xe++){let Oe=xe<wr.length?wr[xe]:null;Le&&Le.textures&&Le.textures[xe]!==void 0&&Le.textures[xe]!==null&&(Oe=Le.textures[xe]);for(const En of de.binds||[])En.index===xe&&(Oe=En.name);let vt;if(xe===0&&(Oe==null||Oe===""))vt=An;else{if((Oe==null||Oe==="")&&Ie.samplerDefaults){const En=Ie.samplerDefaults.get(xe);En&&(Oe=En)}vt=Yt(Oe,An,Te,T)}Oe==="previous"&&(vt=An),vt===null&&(vt={glTex:Pe,width:1,height:1,tex:Pe});const Tn=vt.fbo?vt:{tex:vt.glTex||Pe,width:vt.width||1,height:vt.height||1};t.activeTexture(t.TEXTURE0+xe),t.bindTexture(t.TEXTURE_2D,Tn.tex),ji.add(xe),to.set(xe,[Tn.width,Tn.height,Tn.width,Tn.height])}qn(St,f,R,y.projW,y.projH,Ze,Me,Ze,to,Me,y),Jt(St,vn(it({...de.constants||{},...Le&&Le.constantshadervalues||{}},(f.id||f.name||"?")+"|"+(de.shader||"?")+"|"+fe,R,f),(f.id||f.name||"?")+"|"+(de.shader||"?")+"|"+fe,R),Ie.matMeta),en(St),t.drawArrays(t.TRIANGLES,0,6),de.target||(Re=he,he=Ot)}if(f.isContainer&&!f.groupTex&&!J&&f.containerAlphaMeaningful===void 0){let fe=!1;for(const ge of Et){if(typeof ge!="string")continue;const de=ge.match(/\bfloat\s+alpha\s*=\s*([^;]+);/);if(de&&!/^\s*scene\s*\.\s*a\s*$/.test(de[1])){fe=!0;break}}f.containerAlphaMeaningful=fe,o(`container "${f.name||"?"}" alpha ${fe?"\u643A\u5E26\u5F62\u72B6 \u2192 SRC_ALPHA":"\u65E0\u4FE1\u606F \u2192 \u52A0\u6CD5"}`)}if(B){_n(f,y,M,S,P,R,he.tex);return}Qn(O,he.tex,[1,1,1,1],f,y,M,S,P,!!f.isContainer&&!f.groupTex&&!J,null,null)}return{gl:t,render:U,getFBO:Q,getEffectProgram:Xe,progCache:te,shaderResolver:r,whiteTex:Pe,resetShaderCaches:function(){te.clear(),me.clear(),ye&&ye.clear()},setFboCapFactor:function(f){c=f},setParticleRenderer:function(f,T){a=typeof f=="function"?f:null,u=typeof T=="function"?T:null},setConstantScriptRuntime:N,applyConstUserProperties:function(f){if(f){for(const T of E.values())if(T&&typeof T.applyUserProperties=="function")try{T.applyUserProperties(f)}catch{}}},constantScriptStats:function(){return{...C,cached:E.size}},setCompositeEnabled:function(f){rn=!!f},compositeStats:function(){const f=[],T=new Uint8Array(4);for(const[y,M]of at){let S=null;try{t.bindFramebuffer(t.FRAMEBUFFER,M.fbo),t.readPixels(M.w>>1,M.h>>1,1,1,t.RGBA,t.UNSIGNED_BYTE,T),S=[T[0],T[1],T[2],T[3]]}catch{}f.push({name:y,w:M.w,h:M.h,center:S})}return t.bindFramebuffer(t.FRAMEBUFFER,null),f},setPuppetRenderer:function(f){nn=f},setAudioProvider:h,setPointerProvider:yr,getParallaxOffset:function(){return{x:Lt,y:et}},dispose:function(){try{const f=t.getExtension("WEBGL_lose_context");f&&f.loseContext()}catch{}}}}const ca=Object.freeze(Object.defineProperty({__proto__:null,ALIGN:Eo,XRAY_IDLE_SCREEN_UV:Un,applyColorBlendCPU:oa,collectGroupDescendantIds:cr,colorBlendPlan:kr,createRenderer:aa,effectFboSize:No,layerWantsPreserveBackdrop:Fo,makeTexture:Nr,makeTextureMip:Js,puppetAnimMargin:Lo,rewriteXrayFragScale:Uo,xrayShouldParkPointer:Br,xrayUvScale:ia},Symbol.toStringTag,{value:"Module"}));function la(e=256,n=8){const t=e/n,r=ko(1337),o=ko(4242),i=new Float32Array(t*t),s=new Float32Array(t*t);for(let u=0;u<t*t;u++)i[u]=r(),s[u]=o();const c=new Uint8Array(e*e*4),a=n;for(let u=0;u<e;u++){const l=Math.floor(u/a),d=u%a/a,h=d*d*(3-2*d);for(let p=0;p<e;p++){const w=Math.floor(p/a),m=p%a/a,g=m*m*(3-2*m),v=w%t,b=(w+1)%t,x=l%t,E=(l+1)%t,_=i[x*t+v],C=i[x*t+b],N=i[E*t+v],D=i[E*t+b],k=s[x*t+v],O=s[x*t+b],j=s[E*t+v],W=s[E*t+b],K=_+(C-_)*g+(N-_)*h+(_-C-N+D)*g*h,V=k+(O-k)*g+(j-k)*h+(k-O-j+W)*g*h,G=(u*e+p)*4;c[G]=Math.round(K*255),c[G+1]=Math.round(V*255),c[G+2]=0,c[G+3]=255}}return c}function ko(e){let n=e>>>0;return()=>{n|=0,n=n+1831565813|0;let t=Math.imul(n^n>>>15,1|n);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}const ua=Object.freeze(Object.defineProperty({__proto__:null,generateNoiseTexture:la},Symbol.toStringTag,{value:"Module"})),ft=Math.PI*2;function Fe(e,n){return e==null?Math.random():n==null?e:e+Math.random()*(n-e)}function Bo(e,n,t){if(e==null)return Math.random();if(n==null)return e;const r=t&&t!==1?Math.pow(Math.random(),t):Math.random();return e+r*(n-e)}function be(e,n){if(Array.isArray(e))return[e[0]||0,e[1]||0,e[2]||0];if(e==null)return n?n.slice():[0,0,0];if(typeof e=="object")return be(e.value,n);if(typeof e=="number")return[e,e,e];const t=String(e).trim().split(/\s+/).map(Number);return[t[0]||0,t[1]||0,t[2]||0]}function Io(e){return e==null?null:typeof e=="number"?[e,e,e]:be(e)}function H(e,n){if(e==null)return n;if(typeof e=="object")return H(e.value,n);const t=Number(e);return Number.isFinite(t)?t:n}function Ir(e,n){const t=e[0],r=e[1]>t?e[1]:t+1e-6,o=Math.min(1,Math.max(0,(n-t)/(r-t)));return o*o*(3-2*o)}function jt(e,n,t){const r=Math.sin(e*127.1+n*311.7+t*74.7)*43758.5453;return r-Math.floor(r)}function fa(e,n,t){const r=Math.floor(e),o=Math.floor(n),i=Math.floor(t),s=e-r,c=n-o,a=t-i,u=s*s*(3-2*s),l=c*c*(3-2*c),d=a*a*(3-2*a),h=(v,b,x)=>v+(b-v)*x,p=h(jt(r,o,i),jt(r+1,o,i),u),w=h(jt(r,o+1,i),jt(r+1,o+1,i),u),m=h(jt(r,o,i+1),jt(r+1,o,i+1),u),g=h(jt(r,o+1,i+1),jt(r+1,o+1,i+1),u);return h(h(p,w,l),h(m,g,l),d)}function Or(e,n,t,r){let o=0,i=.5,s=1,c=0;for(let a=0;a<r;a++)o+=i*fa(e*s,n*s,t*s),c+=i,i*=.5,s*=2;return o/(c||1)}function Dr(e,n,t,r){return[Or(e,n,t,r)*2-1,Or(e+31.7,n+11.3,t+57.1,r)*2-1,Or(e+73.9,n+92.1,t+13.7,r)*2-1]}function da(e){const n=`#version 300 es
|
|
63
|
+
// \u5355\u4F4D quad\uFF08TRIANGLE_STRIP 4 \u9876\u70B9\uFF09\uFF0C\u6309\u5B9E\u4F8B\u7684 size/rot \u5C55\u5F00\u4E3A\u671D\u5C4F\u5E55\u7684\u7CBE\u7075
|
|
64
|
+
layout(location=0) in vec2 a_corner; // -0.5..0.5
|
|
65
|
+
layout(location=1) in vec3 a_pos; // \u5B9E\u4F8B\u4E2D\u5FC3\uFF08\u6295\u5F71\u7A7A\u95F4\u4E16\u754C\u5750\u6807\uFF09
|
|
66
|
+
layout(location=2) in vec2 a_sizeRot; // x=size(\u50CF\u7D20) y=rot(\u5F27\u5EA6)
|
|
67
|
+
layout(location=3) in vec4 a_color; // rgb + alpha
|
|
68
|
+
layout(location=4) in vec3 a_stretchFrame; // xy=\u975E\u7B49\u6BD4\u62C9\u4F38 z=\u5E27\u5E8F\u53F7
|
|
69
|
+
uniform mat4 u_mvp;
|
|
70
|
+
// \u5E8F\u5217\u5E27 uv \u53D8\u6362\u8868\uFF08TEXS \u5E27\u77E9\u5F62\u5F52\u4E00\u5316\u540E\u7684 offset/scale\uFF09\uFF0C\u6700\u591A 128 \u5E27
|
|
71
|
+
// \uFF08matrix spritesheet 72 \u6709 71 \u5E27\uFF0C\u65E7\u4E0A\u9650 64 \u4F1A\u4E22\u672B\u5C3E\u5B57\u7B26\uFF09
|
|
72
|
+
uniform int u_frameCount;
|
|
73
|
+
uniform vec4 u_frames[128]; // xy=offset zw=scale
|
|
74
|
+
out vec2 v_uv;
|
|
75
|
+
out vec4 v_color;
|
|
76
|
+
void main(){
|
|
77
|
+
float size = a_sizeRot.x;
|
|
78
|
+
float rot = a_sizeRot.y;
|
|
79
|
+
float c = cos(rot), s = sin(rot);
|
|
80
|
+
// \u5148\u6309 size \u4E0E\u975E\u7B49\u6BD4\u62C9\u4F38\u5C55\u5F00\uFF0C\u518D\u65CB\u8F6C\uFF08\u987A\u5E8F\u53CD\u4E86\u4F1A\u628A\u62C9\u4F38\u65B9\u5411\u4E5F\u8F6C\u8D70\uFF09
|
|
81
|
+
vec2 corner = a_corner * size * a_stretchFrame.xy;
|
|
82
|
+
vec2 rotated = vec2(corner.x * c - corner.y * s, corner.x * s + corner.y * c);
|
|
83
|
+
gl_Position = u_mvp * vec4(a_pos.xy + rotated, a_pos.z, 1.0);
|
|
84
|
+
// quad \u89D2 \u2192 \u8D34\u56FE uv\u3002\u4E16\u754C y \u5DF2\u7FFB\u8F6C\u5230\u6295\u5F71\u7A7A\u95F4\uFF08y \u5411\u4E0B\uFF09\uFF0C\u6545 quad \u7684 +y \u89D2
|
|
85
|
+
// \u5BF9\u5E94\u5C4F\u5E55\u4E0A\u65B9\uFF0C\u5E94\u91C7\u6837\u7EB9\u7406\u9876\u884C v=1\uFF08\u4E0E renderer.js \u7684 layerQuadVerts \u540C\u7EA6\u5B9A\uFF09\u3002
|
|
86
|
+
vec2 uv = a_corner + 0.5;
|
|
87
|
+
if (u_frameCount > 0) {
|
|
88
|
+
// \u5E27\u77E9\u5F62\u4EE5\u5DE6\u4E0A\u4E3A\u539F\u70B9\uFF08TEXS \u662F top-down \u50CF\u7D20\u5750\u6807\uFF09\uFF0C\u6545\u5148\u628A v \u7FFB\u6210 top-down
|
|
89
|
+
int fi = int(a_stretchFrame.z);
|
|
90
|
+
fi = clamp(fi, 0, u_frameCount - 1);
|
|
91
|
+
vec4 fr = u_frames[fi];
|
|
92
|
+
vec2 cell = vec2(uv.x, 1.0 - uv.y) * fr.zw + fr.xy;
|
|
93
|
+
uv = vec2(cell.x, 1.0 - cell.y);
|
|
94
|
+
}
|
|
95
|
+
v_uv = uv;
|
|
96
|
+
v_color = a_color;
|
|
97
|
+
}`,t=`#version 300 es
|
|
98
|
+
precision mediump float;
|
|
99
|
+
uniform sampler2D u_tex;
|
|
100
|
+
uniform sampler2D u_normal;
|
|
101
|
+
uniform sampler2D u_scene;
|
|
102
|
+
uniform int u_refract;
|
|
103
|
+
uniform int u_sampleScene;
|
|
104
|
+
uniform vec2 u_resolution;
|
|
105
|
+
uniform float u_refractScale;
|
|
106
|
+
in vec2 v_uv;
|
|
107
|
+
in vec4 v_color;
|
|
108
|
+
out vec4 fragColor;
|
|
109
|
+
void main(){
|
|
110
|
+
vec4 t = texture(u_tex, v_uv);
|
|
111
|
+
vec4 col = vec4(t.rgb * v_color.rgb, t.a * v_color.a);
|
|
112
|
+
if (u_refract == 1) {
|
|
113
|
+
// genericparticle REFRACT\uFF1A\u69FD 0 \u7ECF\u5E38\u662F\u7A7A\u767D\u767D\u56FE\uFF08Rain2 \u7684
|
|
114
|
+
// "particles 256x1280 blank"\u3001firework \u7684 util/white\uFF09\uFF0C\u6C34\u73E0\u5F62\u72B6\u5728\u6CD5\u7EBF\u91CC\u3002
|
|
115
|
+
// \u6309\u666E\u901A\u7CBE\u7075\u753B\u4F1A\u628A\u6574\u5757 quad \u6D82\u6210\u767D\u65B9\u5757\u3002\u8FD9\u91CC\u7528\u6CD5\u7EBF AG\uFF08DXT5nm \u6253\u5305\uFF09
|
|
116
|
+
// \u626D\u66F2\u5DF2\u7ED8\u5236\u7684\u753B\u9762\uFF0C\u7A7A\u767D albedo \u6539\u7528\u6CD5\u7EBF\u504F\u79BB\u5F53 alpha\u3002
|
|
117
|
+
vec4 ntex = texture(u_normal, v_uv);
|
|
118
|
+
// \u5DE5\u574A DXT5nm\uFF1AR=255 B=0\uFF0CXY \u5728 AG\uFF082464842912 Rain2\uFF09\u3002
|
|
119
|
+
// \u5B98\u65B9 DecompressNormal\uFF08common_fragment.h\uFF09\u4E0E\u7A0B\u5E8F\u5316\u6CD5\u7EBF\uFF1AXY \u5728 RG\u3002
|
|
120
|
+
vec2 nxy = (ntex.r > 0.85 && ntex.b < 0.15) ? (ntex.ag * 2.0 - 1.0) : (ntex.rg * 2.0 - 1.0);
|
|
121
|
+
// \u5E73\u5766\u5904 AG\u2248128\uFF0C\u91CF\u5316\u566A\u58F0\u4F1A\u8BA9 length*2.2 \u4ECD\u6709 ~0.04\uFF0C\u6574\u5757 quad \u5269\u6DE1\u65B9\u5757\u3002
|
|
122
|
+
float drop = smoothstep(0.06, 0.28, length(nxy));
|
|
123
|
+
float blank = step(0.95, min(min(t.r, t.g), min(t.b, t.a)));
|
|
124
|
+
float alpha = mix(t.a, drop, blank) * v_color.a;
|
|
125
|
+
vec3 rgb = t.rgb * v_color.rgb;
|
|
126
|
+
if (u_sampleScene == 1) {
|
|
127
|
+
vec2 screenUV = gl_FragCoord.xy / max(u_resolution, vec2(1.0));
|
|
128
|
+
vec3 scene = texture(u_scene, clamp(screenUV + nxy * u_refractScale, 0.0, 1.0)).rgb;
|
|
129
|
+
rgb = scene * v_color.rgb;
|
|
130
|
+
}
|
|
131
|
+
col = vec4(rgb, alpha);
|
|
132
|
+
if (col.a < 0.004) discard;
|
|
133
|
+
}
|
|
134
|
+
fragColor = col;
|
|
135
|
+
}`,r=(u,l)=>{const d=e.createShader(u);if(e.shaderSource(d,l),e.compileShader(d),!e.getShaderParameter(d,e.COMPILE_STATUS))throw new Error("\u7C92\u5B50 shader: "+e.getShaderInfoLog(d));return d},o=e.createProgram();if(e.attachShader(o,r(e.VERTEX_SHADER,n)),e.attachShader(o,r(e.FRAGMENT_SHADER,t)),e.linkProgram(o),!e.getProgramParameter(o,e.LINK_STATUS))throw new Error("\u7C92\u5B50 shader \u94FE\u63A5\u5931\u8D25: "+e.getProgramInfoLog(o));const i=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,i),e.bufferData(e.ARRAY_BUFFER,new Float32Array([-.5,-.5,.5,-.5,-.5,.5,.5,.5]),e.STATIC_DRAW);const s=e.createBuffer(),c=e.createVertexArray();e.bindVertexArray(c),e.bindBuffer(e.ARRAY_BUFFER,i),e.enableVertexAttribArray(0),e.vertexAttribPointer(0,2,e.FLOAT,!1,8,0),e.vertexAttribDivisor(0,0),e.bindBuffer(e.ARRAY_BUFFER,s);const a=48;return e.enableVertexAttribArray(1),e.vertexAttribPointer(1,3,e.FLOAT,!1,a,0),e.vertexAttribDivisor(1,1),e.enableVertexAttribArray(2),e.vertexAttribPointer(2,2,e.FLOAT,!1,a,12),e.vertexAttribDivisor(2,1),e.enableVertexAttribArray(3),e.vertexAttribPointer(3,4,e.FLOAT,!1,a,20),e.vertexAttribDivisor(3,1),e.enableVertexAttribArray(4),e.vertexAttribPointer(4,3,e.FLOAT,!1,a,36),e.vertexAttribDivisor(4,1),e.bindVertexArray(null),{prog:{prog:o,uniTex:e.getUniformLocation(o,"u_tex"),uniNormal:e.getUniformLocation(o,"u_normal"),uniScene:e.getUniformLocation(o,"u_scene"),uniRefract:e.getUniformLocation(o,"u_refract"),uniSampleScene:e.getUniformLocation(o,"u_sampleScene"),uniResolution:e.getUniformLocation(o,"u_resolution"),uniRefractScale:e.getUniformLocation(o,"u_refractScale"),uniMvp:e.getUniformLocation(o,"u_mvp"),uniFrameCount:e.getUniformLocation(o,"u_frameCount"),uniFrames:e.getUniformLocation(o,"u_frames")},quadBuf:i,vbuf:s,vao:c}}function Oo(e){const n=e&&e.passes&&e.passes[0]&&e.passes[0].combos;return!!(n&&Number(n.REFRACT)===1)}function ha(e){if(!e||e.length<16)return!1;const n=e.length/4,t=Math.max(1,n/64|0);let r=0;for(let o=0;o<n;o+=t){const i=o*4;if(e[i]<250||e[i+1]<250||e[i+2]<250||e[i+3]<250)return!1;r++}return r>0}function Do(e,n,t,r){let o=Math.abs(Number(e)||0)*(Number(n)||0);const i=Number(t)||0,s=Number(r)||0;return i>0&&(o=Math.max(i,o)),s>0&&(o=Math.min(s,o)),o}function zo(e,n){return e||n?Math.atan2(n,e)-Math.PI/2:0}function $o(e,n){return e&&e.kind==="ropetrail"?Math.max(1,n||1):1}class ma{constructor(){this.alive=!1,this.x=this.y=this.z=0,this.vx=this.vy=this.vz=0,this.bx=this.by=this.bz=0,this.age=0,this.life=1,this.size=1,this.baseSize=1,this.rot=0,this.rotVel=0,this.r=this.g=this.b=1,this.baseR=this.baseG=this.baseB=1,this.alpha=1,this.baseAlpha=1,this.seed=0,this.frame=0,this.oscPhase=0,this.oscFreq=0,this.oscAmp=0,this.oscAPhase=0,this.oscAFreq=0,this.oscSPhase=0,this.oscSFreq=0,this.turbSpeed=0,this.turbPhase=0,this.trail=null}}class pa{constructor(n,t,r,o){this.gl=n,this.model=t||{},this.override=r||{},this.layer=o||null;const i=o&&o.origin?o.origin:[0,0,0],s=o&&o.scale?o.scale:[1,1,1],c=o&&o.angles?o.angles:[0,0,0];this.originX=i[0]||0,this.originY=i[1]||0,this.originZ=i[2]||0,this.scaleX=s[0]===0?1:s[0],this.scaleY=s[1]===0?1:s[1],this.angleZ=(c[2]||0)*Math.PI/180;const a=Math.abs(this.scaleX),u=Math.abs(this.scaleY);this.sysScale=Math.min(a,u)||1,this.spriteStretchX=a/this.sysScale,this.spriteStretchY=u/this.sysScale,this.maxCount=Math.max(1,Math.min(2e4,H(this.model.maxcount,100))),this.simTime=0,this.paused=!1,this.texture=null,this.normalTex=null,this.material=null,this.blend="translucent",this.refract=!1,this.refractAmount=.04,this.opacityMul=1,this.lifetimeMul=1,this.visible=!0,this._ready=!1,this._prog=null,this._vbuf=null,this._quadBuf=null,this._vao=null,this._data=null,this._sceneTex=null,this.sequenceMul=Math.max(1,Math.round(H(this.model.sequencemultiplier,1))),this.animationMode=this.model.animationmode||null,this.texFrames=null,this.frameCount=this.sequenceMul*this.sequenceMul,this.texAspectX=1,this.texAspectY=1,this.controlPoints=(this.model.controlpoint||[]).filter(Boolean).map(l=>({id:H(l.id,0),lockToPointer:!!l.locktopointer||(H(l.flags,0)&1)!==0,offset:be(l.offset),x:0,y:0,z:0})),this.pointer=null,this._followParent=null,this._followMode=null,this._followOffset=[0,0,0],this._ov={},this._applyOverride(),this.startTime=Math.max(0,Math.min(30,H(this.model.starttime,0))),this._warmed=!1,this._compile()}reapplyOverride(){this._applyOverride()}_applyOverride(){this._ov={},this.opacityMul=1,this.lifetimeMul=1,this.maxCount=Math.max(1,Math.min(2e4,H(this.model.maxcount,100)));const n=this.override||{};for(const t of Object.keys(n)){if(t==="id")continue;const r=n[t],o=r&&typeof r=="object"&&"value"in r?r.value:r;if(t==="count"){const i=H(this.model.maxcount,100),s=Number(o),c=Number.isFinite(s)?s:1;this.maxCount=Math.max(1,Math.min(2e4,Math.round(i*c))),this._ov.countMul=c}else if(t==="alpha")this.opacityMul=Number(o),Number.isFinite(this.opacityMul)||(this.opacityMul=1);else if(t==="color"||t==="colorn"){const i=be(o);this._ov.color=t==="colorn"?i:[i[0]/255,i[1]/255,i[2]/255]}else t==="size"?this._ov.size=Number(o)||1:t==="rate"?(this._ov.rateMul=Number(o),Number.isFinite(this._ov.rateMul)||(this._ov.rateMul=1)):t==="speed"?this._ov.speed=Number(o)||1:t==="lifetime"?this.lifetimeMul=Number(o)||1:t==="brightness"?this._ov.brightness=Number(o)||1:this._ov[t]=o}this.pool=[];for(let t=0;t<this.maxCount;t++)this.pool.push(new ma)}_compile(){const n=this.model;this.emitters=(n.emitter||[]).map(a=>({kind:a.name==="boxrandom"?"box":"sphere",origin:be(a.origin),directions:be(a.directions,[1,1,1]),distanceMin:Io(a.distancemin),distanceMax:Io(a.distancemax),sign:a.sign?be(a.sign):null,rate:H(a.rate,0),audioDriven:a.audioprocessingmode!==void 0,audioBounds:be(a.audioprocessingbounds,[0,1]),fill:a.rate===void 0&&a.instantaneous===void 0&&a.audioprocessingmode===void 0,instantaneous:H(a.instantaneous,0),speedMin:H(a.speedmin,0),speedMax:H(a.speedmax,0),controlPoint:a.controlpoint!==void 0&&a.controlpoint!==null?H(a.controlpoint,0):0,_burst:!1}));const t=n.initializer||[];this.init={life:null,size:null,color:null,alpha:null,velocity:null,rotation:null,angularVelocity:null,turbulentVelocity:null,mapAround:null};for(const a of t)switch(a.name){case"lifetimerandom":this.init.life={min:H(a.min,1),max:H(a.max,1),exp:H(a.exponent,1)};break;case"sizerandom":this.init.size={min:H(a.min,1),max:H(a.max,1),exp:H(a.exponent,1)};break;case"colorrandom":this.init.color={min:be(a.min,[255,255,255]),max:be(a.max,[255,255,255])};break;case"alpharandom":this.init.alpha={min:H(a.min,1),max:H(a.max,1)};break;case"velocityrandom":this.init.velocity={min:be(a.min),max:be(a.max)};break;case"rotationrandom":this.init.rotation={min:be(a.min),max:be(a.max,[0,0,0]),exp:H(a.exponent,1)};break;case"angularvelocityrandom":this.init.angularVelocity={min:be(a.min),max:be(a.max),exp:H(a.exponent,1)};break;case"mapsequencearoundcontrolpoint":this.init.mapAround={count:Math.max(1,H(a.count,1)),bounds:be(a.bounds,[0,1]),speedMin:be(a.speedmin),speedMax:be(a.speedmax,[0,0,0]),cp:H(a.controlpoint,0)},this._mapAroundSeq=0;break;case"turbulentvelocityrandom":this.init.turbulentVelocity={scale:H(a.scale,.1),offset:H(a.offset,0),speedMin:H(a.speedmin,0),speedMax:H(a.speedmax,0),phaseMax:H(a.phasemax,0),timeScale:H(a.timescale,0),audioMode:H(a.audioprocessingmode,0),audioBounds:be(a.audioprocessingbounds,[0,1])};break}const r=n.operator||[];this.ops={movement:null,angularMovement:null,alphaFade:null,alphaChange:null,sizeChange:null,colorChange:null,turbulence:[],oscAlpha:null,oscSize:null,oscPos:null,attract:[],vortex:[],remap:[]};for(const a of r)switch(a.name){case"movement":this.ops.movement={gravity:be(a.gravity),drag:H(a.drag,0)};break;case"angularmovement":this.ops.angularMovement={force:be(a.force),drag:H(a.drag,0)};break;case"alphafade":this.ops.alphaFade={fadeIn:H(a.fadeintime,.1),fadeOut:H(a.fadeouttime,.9)};break;case"alphachange":this.ops.alphaChange={startTime:H(a.starttime,0),endTime:H(a.endtime,1),startValue:H(a.startvalue,1),endValue:H(a.endvalue,0)};break;case"sizechange":this.ops.sizeChange={startTime:H(a.starttime,0),endTime:H(a.endtime,1),startValue:H(a.startvalue,1),endValue:H(a.endvalue,1)};break;case"colorchange":this.ops.colorChange={startTime:H(a.starttime,0),endTime:H(a.endtime,1),startValue:a.startvalue!==void 0?be(a.startvalue):null,endValue:be(a.endvalue,[1,1,1])};break;case"turbulence":this.ops.turbulence.push({scale:H(a.scale,.01),speedMin:H(a.speedmin,0),speedMax:H(a.speedmax,0),timeScale:H(a.timescale,1),phaseMin:H(a.phasemin,0),phaseMax:H(a.phasemax,0),mask:a.mask!==void 0?be(a.mask,[1,1,1]):[1,1,1]});break;case"oscillatealpha":this.ops.oscAlpha={freqMin:H(a.frequencymin,H(a.frequencymax,1)),freqMax:H(a.frequencymax,1),scaleMin:H(a.scalemin,0),scaleMax:H(a.scalemax,1),phaseMax:H(a.phasemax,ft)};break;case"oscillatesize":this.ops.oscSize={freqMin:H(a.frequencymin,H(a.frequencymax,1)),freqMax:H(a.frequencymax,H(a.frequencymin,1)),scaleMin:H(a.scalemin,1),scaleMax:H(a.scalemax,1),phaseMax:H(a.phasemax,ft)};break;case"oscillateposition":this.ops.oscPos={freqMin:H(a.frequencymin,H(a.frequencymax,.5)),freqMax:H(a.frequencymax,.5),scaleMin:H(a.scalemin,0),scaleMax:H(a.scalemax,1),phaseMin:H(a.phasemin,0),phaseMax:H(a.phasemax,ft),mask:a.mask!==void 0?be(a.mask,[1,1,0]):[1,1,0]};break;case"controlpointattract":this.ops.attract.push({cp:H(a.controlpoint,0),origin:be(a.origin),scale:H(a.scale,0),threshold:H(a.threshold,0)});break;case"vortex":this.ops.vortex.push({axis:be(a.axis,[0,0,1]),offset:be(a.offset),distanceInner:H(a.distanceinner,0),distanceOuter:H(a.distanceouter,0),speedInner:H(a.speedinner,0),speedOuter:H(a.speedouter,0),cp:a.controlpoint!==void 0&&a.controlpoint!==null?H(a.controlpoint,0):0,audioMode:H(a.audioprocessingmode,0),audioBounds:be(a.audioprocessingbounds,[0,1])});break;case"remapvalue":this.ops.remap.push({output:a.output||"velocity",rangeMin:be(a.outputrangemin),rangeMax:be(a.outputrangemax),fn:a.transformfunction||"simplexnoise",inputScale:H(a.transforminputscale,1)});break}const o=this.model.renderer,i=o==null,s=Array.isArray(o)?o:o?[o]:[];this.renderers=s.map(a=>{const u=a&&a.name||"sprite";return{kind:u,length:H(a&&a.length,u==="spritetrail"?.1:0),maxLength:H(a&&a.maxlength,0),minLength:H(a&&a.minlength,0),subdivision:H(a&&a.subdivision,1),orientation:a&&a.orientation||null}}),i&&!this.renderers.length&&(this.renderers=[{kind:"sprite",length:0,maxLength:0,minLength:0,subdivision:1,orientation:null}]);const c=this.renderers.find(a=>a.kind==="spritetrail"||a.kind==="ropetrail");if(this.trailCfg=c||null,this.trailSegments=1,c&&c.kind==="ropetrail"){const a=Math.max(2,Math.min(16,Math.round(c.maxLength||c.subdivision||6)));this.trailSegments=a;for(const u of this.pool)u.trail=new Float32Array(a*3)}}setModel(n){this.model=n,this._compile()}setMaterial(n){this.material=n;const t=n&&n.passes&&n.passes[0];this.blend=t&&t.blending||"translucent",this.refract=Oo(n);const r=t&&t.constantshadervalues,o=r&&r.ui_editor_properties_refract_amount,i=Number(o);this.refractAmount=Number.isFinite(i)?Math.min(.35,Math.max(0,i)):.04}setNormalTexture(n){this.normalTex=n||null}setTexture(n){this.texture=n,this._ready=!!n;const t=n&&n.frames,r=Array.isArray(t)?t:t&&t.list&&t.list.length?t.list:null,o=n&&n.width||r&&(t&&t.atlasWidth||r.atlasWidth)||0,i=n&&n.height||r&&(t&&t.atlasHeight||r.atlasHeight)||0;r&&o>0&&i>0?(this.texFrames=r.map(u=>({ou:u.x/o,ov:u.y/i,su:u.width/o,sv:u.height/i})),this.frameCount=this.texFrames.length):(this.texFrames=null,this.frameCount=this.sequenceMul*this.sequenceMul);let s=1,c=1;this.texFrames&&r?(s=r[0].width||1,c=r[0].height||1):n&&n.width>0&&n.height>0&&(s=n.width,c=n.height);const a=Math.max(s,c)||1;this.texAspectX=s/a,this.texAspectY=c/a,this._frameData=void 0}setVisible(n){this.visible=n}setPointer(n,t){const r=n-this.originX,o=t-this.originY,i=Math.cos(-this.angleZ),s=Math.sin(-this.angleZ);this.pointer={x:(r*i-o*s)/(this.scaleX||1),y:(r*s+o*i)/(this.scaleY||1)}}attachFollow(n,t,r){this._followParent=n||null,this._followMode=t==="particle"||t==="origin"?t:null;const o=r||[0,0,0];this._followOffset=[o[0]||0,o[1]||0,o[2]||0],this._syncFollow()}leaderParticle(){const n=this.pool;for(let t=0;t<n.length;t++)if(n[t].alive)return n[t];return null}localToWorld(n,t){const r=n*this.scaleX,o=t*this.scaleY,i=Math.cos(this.angleZ),s=Math.sin(this.angleZ);return[this.originX+r*i-o*s,this.originY+r*s+o*i]}_syncFollow(){const n=this._followParent,t=this._followMode;if(!n||!t)return;const r=this._followOffset;if(t==="particle"){const o=n.leaderParticle();if(!o)return;const i=n.localToWorld(o.x+r[0],o.y+r[1]);this.originX=i[0],this.originY=i[1]}else{const o=n.localToWorld(r[0],r[1]);this.originX=o[0],this.originY=o[1]}}spawn(n){const t=this.pool,r=t.length;let o=null,i=this._cursor||0;for(let d=0;d<r;d++){const h=t[(i+d)%r];if(!h.alive){o=h,this._cursor=(i+d+1)%r;break}}if(!o)return;o.alive=!0,o.age=0,o.seed=Math.random(),o.rot=0,o.rotVel=0,o.vx=o.vy=o.vz=0,o.frame=0;const s=n.origin;if(n.kind==="box"){const d=n.distanceMax||[0,0,0],h=n.distanceMin;o.x=s[0]+Fe(-d[0],d[0])+(h?h[0]:0),o.y=s[1]+Fe(-d[1],d[1])+(h?h[1]:0),o.z=s[2]+Fe(-d[2],d[2])+(h?h[2]:0)}else{const d=n.directions,h=n.distanceMin?n.distanceMin[0]:0,p=n.distanceMax?n.distanceMax[0]:0,w=Math.random()*2-1,m=Math.random()*ft,g=Math.sqrt(Math.max(0,1-w*w));let v=g*Math.cos(m),b=g*Math.sin(m),x=w;n.sign&&(n.sign[0]&&(v=Math.abs(v)*Math.sign(n.sign[0])),n.sign[1]&&(b=Math.abs(b)*Math.sign(n.sign[1])),n.sign[2]&&(x=Math.abs(x)*Math.sign(n.sign[2])));const E=Fe(h,p);if(o.x=s[0]+v*E*d[0],o.y=s[1]+b*E*d[1],o.z=s[2]+x*E*d[2],n.speedMax||n.speedMin){const _=Fe(n.speedMin,n.speedMax);o.vx+=v*_,o.vy+=b*_,o.vz+=x*_}}{const d=this._cpPos(n.controlPoint);if(d)o.x+=d[0],o.y+=d[1],o.z+=d[2];else{const h=this.controlPoints.find(p=>p.id===n.controlPoint);if(h&&h.lockToPointer){o.alive=!1;return}}}if(this.init.mapAround){const d=this.init.mapAround,h=this._cpPos(d.cp);if(h){const p=d.count,w=this._mapAroundSeq++,m=p>0?w%p/p:0,v=(d.bounds[0]+(d.bounds[1]-d.bounds[0])*m)*ft,b=n.distanceMin?n.distanceMin[0]:0,x=n.distanceMax?n.distanceMax[0]:0,E=x>0?x:b;o.x=h[0]+Math.cos(v)*E,o.y=h[1]+Math.sin(v)*E,o.z=h[2];const _=Math.random();o.vx+=d.speedMin[0]+(d.speedMax[0]-d.speedMin[0])*_,o.vy+=d.speedMin[1]+(d.speedMax[1]-d.speedMin[1])*_,o.vz+=d.speedMin[2]+(d.speedMax[2]-d.speedMin[2])*_}}const c=this.init,a=this._ov.speed||1,u=this._ov.size||1;if(o.life=c.life?Math.max(.001,Bo(c.life.min,c.life.max,c.life.exp)*this.lifetimeMul):1,o.baseSize=c.size?Bo(c.size.min,c.size.max,c.size.exp)*u:u,o.size=o.baseSize,c.color){const d=c.color.min,h=c.color.max,p=Math.random();o.baseR=(d[0]+(h[0]-d[0])*p)/255,o.baseG=(d[1]+(h[1]-d[1])*p)/255,o.baseB=(d[2]+(h[2]-d[2])*p)/255}else o.baseR=o.baseG=o.baseB=1;if(this._ov.color&&(o.baseR=this._ov.color[0],o.baseG=this._ov.color[1],o.baseB=this._ov.color[2]),o.r=o.baseR,o.g=o.baseG,o.b=o.baseB,o.baseAlpha=(c.alpha?Fe(c.alpha.min,c.alpha.max):1)*this.opacityMul,o.alpha=o.baseAlpha,c.velocity&&(o.vx+=Fe(c.velocity.min[0],c.velocity.max[0])*a,o.vy+=Fe(c.velocity.min[1],c.velocity.max[1])*a,o.vz+=Fe(c.velocity.min[2],c.velocity.max[2])*a),c.turbulentVelocity){const d=c.turbulentVelocity,h=d.audioMode?Ir(d.audioBounds,this._audioLevel||0):1,p=Fe(d.speedMin,d.speedMax)*a*h,w=this.simTime*(d.timeScale||0),m=Dr(o.x*d.scale+d.offset,o.y*d.scale+d.offset,w+o.seed*(d.phaseMax||0),3);o.vx+=m[0]*p,o.vy+=m[1]*p,o.vz+=m[2]*p}c.rotation&&(o.rot=Fe(c.rotation.min[2],c.rotation.max[2])),c.angularVelocity&&(o.rotVel=Fe(c.angularVelocity.min[2],c.angularVelocity.max[2]));const l=this.ops;if(l.oscPos&&(o.oscFreq=Fe(l.oscPos.freqMin,l.oscPos.freqMax),o.oscAmp=Fe(l.oscPos.scaleMin,l.oscPos.scaleMax),o.oscPhase=Fe(l.oscPos.phaseMin,l.oscPos.phaseMax)+o.seed*ft),l.oscAlpha&&(o.oscAFreq=Fe(l.oscAlpha.freqMin,l.oscAlpha.freqMax),o.oscAPhase=Math.random()*(l.oscAlpha.phaseMax||ft)),l.oscSize&&(o.oscSFreq=Fe(l.oscSize.freqMin,l.oscSize.freqMax),o.oscSPhase=Math.random()*(l.oscSize.phaseMax||ft)),l.turbulence.length){const d=l.turbulence[0];o.turbSpeed=Fe(d.speedMin,d.speedMax),o.turbPhase=Fe(d.phaseMin,d.phaseMax)}if(this.frameCount>1&&(o.frame=this.animationMode==="randomframe"?Math.floor(Math.random()*this.frameCount):0),o.bx=o.x,o.by=o.y,o.bz=o.z,o.trail)for(let d=0;d<o.trail.length;d+=3)o.trail[d]=o.x,o.trail[d+1]=o.y,o.trail[d+2]=o.z}updateParticle(n,t){if(n.age+=t,n.age>=n.life){n.alive=!1;return}const r=n.age/n.life,o=this.ops;if(o.movement&&(n.vx+=o.movement.gravity[0]*t,n.vy+=o.movement.gravity[1]*t,n.vz+=o.movement.gravity[2]*t,o.movement.drag>0)){const c=Math.exp(-o.movement.drag*t);n.vx*=c,n.vy*=c,n.vz*=c}o.angularMovement&&(n.rotVel+=(o.angularMovement.force[2]||0)*t,o.angularMovement.drag>0&&(n.rotVel*=Math.exp(-o.angularMovement.drag*t)));for(const c of o.turbulence){const a=c.timeScale||1,u=Dr(n.bx*c.scale,n.by*c.scale,this.simTime*c.scale*a+n.turbPhase,3);n.vx+=u[0]*n.turbSpeed*c.mask[0]*t,n.vy+=u[1]*n.turbSpeed*c.mask[1]*t,n.vz+=u[2]*n.turbSpeed*c.mask[2]*t}for(const c of o.attract){const a=this._cpPos(c.cp);if(!a)continue;const u=a[0]+c.origin[0]-n.x,l=a[1]+c.origin[1]-n.y,d=Math.hypot(u,l);if(d<.001||c.threshold>0&&d>c.threshold)continue;const h=c.threshold>0?1-d/c.threshold:1,p=c.scale*h*t/Math.max(1,d);n.vx+=u*p,n.vy+=l*p}for(const c of o.vortex){const a=this._cpPos(c.cp)||[0,0,0],u=n.x-(a[0]+c.offset[0]),l=n.y-(a[1]+c.offset[1]),d=Math.hypot(u,l);if(d<.001)continue;const h=c.distanceOuter-c.distanceInner,p=h>0?Math.min(1,Math.max(0,(d-c.distanceInner)/h)):0,w=c.audioMode?Ir(c.audioBounds,this._audioLevel||0):1,m=c.speedInner+(c.speedOuter-c.speedInner)*p;n.vx+=-l/d*m*t*w,n.vy+=u/d*m*t*w}for(const c of o.remap){const a=c.inputScale||1,u=Dr(n.bx*.01*a,n.by*.01*a,this.simTime*.1,c.fn==="fbmnoise"?4:2);if(c.output==="velocity")for(let l=0;l<3;l++){const d=(u[l]+1)/2,h=c.rangeMin[l]+(c.rangeMax[l]-c.rangeMin[l])*d;l===0?n.vx=h:l===1?n.vy=h:n.vz=h}else if(c.output==="speed"){const l=(u[0]+1)/2,d=c.rangeMin[0]+(c.rangeMax[0]-c.rangeMin[0])*l,h=Math.hypot(n.vx,n.vy)||1;n.vx=n.vx/h*d,n.vy=n.vy/h*d}}if(n.bx+=n.vx*t,n.by+=n.vy*t,n.bz+=n.vz*t,n.rot+=n.rotVel*t,n.x=n.bx,n.y=n.by,n.z=n.bz,o.oscPos){const c=this.simTime*n.oscFreq*ft+n.oscPhase,a=o.oscPos.mask;n.x+=Math.sin(c)*n.oscAmp*a[0],n.y+=Math.cos(c)*n.oscAmp*a[1],n.z+=Math.sin(c*.7)*n.oscAmp*a[2]}let i=n.baseSize;if(o.sizeChange){const c=o.sizeChange,a=c.endTime-c.startTime,u=a>0?Math.min(1,Math.max(0,(r-c.startTime)/a)):r>=c.startTime?1:0;i*=c.startValue+(c.endValue-c.startValue)*u}if(o.oscSize){const c=this.simTime*n.oscSFreq*ft+n.oscSPhase,a=o.oscSize,u=(a.scaleMin+a.scaleMax)/2,l=(a.scaleMax-a.scaleMin)/2;i*=u+Math.sin(c)*l}if(n.size=i,o.colorChange){const c=o.colorChange,a=c.endTime-c.startTime,u=a>0?Math.min(1,Math.max(0,(r-c.startTime)/a)):r>=c.startTime?1:0,l=c.startValue||[n.baseR,n.baseG,n.baseB];n.r=l[0]+(c.endValue[0]-l[0])*u,n.g=l[1]+(c.endValue[1]-l[1])*u,n.b=l[2]+(c.endValue[2]-l[2])*u}let s=n.baseAlpha;if(o.alphaFade){const c=o.alphaFade.fadeIn,a=o.alphaFade.fadeOut;c>0&&r<c&&(s*=r/c),a<1&&r>a&&(s*=Math.max(0,(1-r)/(1-a)))}else o.alphaChange||(r<.1?s*=r/.1:r>.85&&(s*=(1-r)/.15));if(o.alphaChange){const c=o.alphaChange,a=c.endTime-c.startTime,u=a>0?Math.min(1,Math.max(0,(r-c.startTime)/a)):r>=c.startTime?1:0;s*=c.startValue+(c.endValue-c.startValue)*u}if(o.oscAlpha){const c=this.simTime*n.oscAFreq*ft+n.oscAPhase,a=o.oscAlpha,u=(a.scaleMin+a.scaleMax)/2,l=(a.scaleMax-a.scaleMin)/2;s*=u+Math.sin(c)*l}if(n.alpha=Math.max(0,s),this.frameCount>1&&this.animationMode!=="randomframe"&&(n.frame=Math.min(this.frameCount-1,Math.floor(r*this.frameCount))),n.trail){const c=n.trail;for(let a=c.length-3;a>=3;a-=3)c[a]=c[a-3],c[a+1]=c[a-2],c[a+2]=c[a-1];c[0]=n.x,c[1]=n.y,c[2]=n.z}}_cpPos(n){const t=this.controlPoints.find(r=>r.id===n);return t?t.lockToPointer?this.pointer?[this.pointer.x+t.offset[0],this.pointer.y+t.offset[1],t.offset[2]]:null:t.offset:null}advance(n,t){if(!(this.paused||!this.visible)){if(this._syncFollow(),!this._warmed&&(this._warmed=!0,this.startTime>0)){const r=.03333333333333333,o=Math.min(900,Math.round(this.startTime/r));for(let i=0;i<o;i++)this._step(r)}this._step(n,t)}}_step(n,t){this.simTime+=n;const r=t&&Number.isFinite(t.level)?Math.max(0,Math.min(1,t.level)):0;this._audioLevel=r;for(const i of this.emitters){if(i.instantaneous>0&&!i._burst){i._burst=!0;for(let a=0;a<Math.min(i.instantaneous,this.maxCount);a++)this.spawn(i)}if(i.fill){const u=Math.min(this.maxCount,2048);let l=0;for(let h=0;h<this.pool.length;h++)this.pool[h].alive&&l++;let d=Math.min(u-l,512);for(;d-- >0;)this.spawn(i);continue}if(i.audioDriven){const a=Ir(i.audioBounds,r);if(i.rate>0){const u=i.rate*a*(this._ov.rateMul!==void 0?this._ov.rateMul:1)*(this._ov.countMul!==void 0?this._ov.countMul:1);if(!(u>0))continue;i._accum=(i._accum||0)+u*n;let l=Math.floor(i._accum);if(l>0){i._accum-=l,l>this.maxCount&&(l=this.maxCount);for(let d=0;d<l;d++)this.spawn(i)}}else{const l=Math.round(Math.min(this.maxCount,2048)*a);let d=0;for(let p=0;p<this.pool.length;p++)this.pool[p].alive&&d++;let h=Math.min(l-d,256);for(;h-- >0;)this.spawn(i)}continue}const s=i.rate*(this._ov.rateMul!==void 0?this._ov.rateMul:1)*(this._ov.countMul!==void 0?this._ov.countMul:1);if(!(s>0))continue;i._accum=(i._accum||0)+s*n;let c=Math.floor(i._accum);if(c>0){i._accum-=c,c>this.maxCount&&(c=this.maxCount);for(let a=0;a<c;a++)this.spawn(i)}}const o=this.pool;for(let i=0;i<o.length;i++)o[i].alive&&this.updateParticle(o[i],n)}render(n,t,r,o,i){if(!this._ready||!this.visible||!this.renderers.length)return;const s=this.gl;this._prog||this._buildProgram(s);const c=this.trailCfg&&this.trailCfg.kind==="ropetrail"?this.trailCfg:null,a=this.trailCfg&&this.trailCfg.kind==="spritetrail"?this.trailCfg:null,u=$o(this.trailCfg,this.trailSegments),l=12,d=this.pool;let h=0;for(let G=0;G<d.length;G++)d[G].alive&&h++;if(h===0)return;const p=h*u,w=p*l;(!this._data||this._data.length<w)&&(this._data=new Float32Array(Math.max(w,1024)));const m=this._data;let g=0;const v=this._ov.brightness||1,b=this.sysScale,x=this.spriteStretchX*(this.texAspectX||1),E=this.spriteStretchY*(this.texAspectY||1),_=Math.cos(this.angleZ),C=Math.sin(this.angleZ),N=this.originX,D=this.originY,k=this.scaleX,O=this.scaleY,j=(G,Q)=>{const q=G*k,te=Q*O;return[N+q*_-te*C,i-(D+q*C+te*_)]};for(let G=0;G<d.length;G++){const Q=d[G];if(Q.alive)for(let q=0;q<u;q++){let te=Q.x,me=Q.y,ye=1,We=1;if(c&&Q.trail){te=Q.trail[q*3],me=Q.trail[q*3+1];const Pe=u>1?q/(u-1):0;ye=1-Pe,We=1-Pe*.55}const Ve=j(te,me);let Se=Q.rot,Je=x,Xe=E;if(a){const Pe=j(Q.x+Q.vx,Q.y+Q.vy);Se=zo(Pe[0]-Ve[0],Pe[1]-Ve[1]);const Ae=Do(Math.hypot(Q.vx,Q.vy),a.length,a.minLength,a.maxLength);Xe=E*Ae}m[g++]=Ve[0],m[g++]=Ve[1],m[g++]=0,m[g++]=Math.abs(Q.size)*b*We,m[g++]=Se,m[g++]=Q.r*v,m[g++]=Q.g*v,m[g++]=Q.b*v,m[g++]=Q.alpha*ye,m[g++]=Je,m[g++]=Xe,m[g++]=Q.frame}}const W=this._prog;s.useProgram(W.prog),s.bindVertexArray(this._vao),s.bindBuffer(s.ARRAY_BUFFER,this._vbuf),s.bufferData(s.ARRAY_BUFFER,m.subarray(0,g),s.DYNAMIC_DRAW),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this.texture.glTex),s.uniform1i(W.uniTex,0),s.uniformMatrix4fv(W.uniMvp,!1,n);const K=this.refract&&this.normalTex&&this.normalTex.glTex;if(W.uniRefract&&s.uniform1i(W.uniRefract,K?1:0),K){s.activeTexture(s.TEXTURE1),s.bindTexture(s.TEXTURE_2D,this.normalTex.glTex),W.uniNormal&&s.uniform1i(W.uniNormal,1);const G=this.blend!=="additive";if(W.uniSampleScene&&s.uniform1i(W.uniSampleScene,G?1:0),G){const Q=s.drawingBufferWidth||t,q=s.drawingBufferHeight||r;s.bindFramebuffer(s.FRAMEBUFFER,null),s.activeTexture(s.TEXTURE2),this._sceneTex?s.bindTexture(s.TEXTURE_2D,this._sceneTex):(this._sceneTex=s.createTexture(),s.bindTexture(s.TEXTURE_2D,this._sceneTex),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE)),s.copyTexImage2D(s.TEXTURE_2D,0,s.RGB8,0,0,Q,q,0),W.uniScene&&s.uniform1i(W.uniScene,2),W.uniResolution&&s.uniform2f(W.uniResolution,Q,q),W.uniRefractScale&&s.uniform1f(W.uniRefractScale,this.refractAmount||.04)}else s.activeTexture(s.TEXTURE2),s.bindTexture(s.TEXTURE_2D,this.texture.glTex),W.uniScene&&s.uniform1i(W.uniScene,2)}else W.uniNormal&&(s.activeTexture(s.TEXTURE1),s.bindTexture(s.TEXTURE_2D,this.texture.glTex),s.uniform1i(W.uniNormal,1),s.activeTexture(s.TEXTURE2),s.bindTexture(s.TEXTURE_2D,this.texture.glTex),W.uniScene&&s.uniform1i(W.uniScene,2),W.uniSampleScene&&s.uniform1i(W.uniSampleScene,0));const V=this._frameUniformData();V?(s.uniform1i(W.uniFrameCount,V.count),s.uniform4fv(W.uniFrames,V.arr)):s.uniform1i(W.uniFrameCount,0),s.enable(s.BLEND),this.blend==="additive"?s.blendFunc(s.SRC_ALPHA,s.ONE):s.blendFunc(s.SRC_ALPHA,s.ONE_MINUS_SRC_ALPHA),s.depthMask(!1),s.drawArraysInstanced(s.TRIANGLE_STRIP,0,4,p),s.depthMask(!0),s.disable(s.BLEND),s.bindVertexArray(null)}_buildProgram(n){const t=da(n);this._quadBuf=t.quadBuf,this._vbuf=t.vbuf,this._vao=t.vao,this._prog=t.prog}_frameUniformData(){if(this._frameData!==void 0)return this._frameData;let n=this.texFrames;if(!n&&this.sequenceMul>1){const o=this.sequenceMul;n=[];for(let i=0;i<o;i++)for(let s=0;s<o;s++)n.push({ou:s/o,ov:i/o,su:1/o,sv:1/o})}if(!n||n.length===0)return this._frameData=null,null;const t=Math.min(n.length,128),r=new Float32Array(t*4);for(let o=0;o<t;o++)r[o*4]=n[o].ou,r[o*4+1]=n[o].ov,r[o*4+2]=n[o].su,r[o*4+3]=n[o].sv;return this._frameData={count:t,arr:r},this._frameData}liveCount(){let n=0;for(const t of this.pool)t.alive&&n++;return n}dispose(){this.paused=!0;const n=this.gl;if(n){try{this._vbuf&&n.deleteBuffer(this._vbuf),this._quadBuf&&n.deleteBuffer(this._quadBuf),this._vao&&n.deleteVertexArray(this._vao),this._prog&&this._prog.prog&&n.deleteProgram(this._prog.prog),this._sceneTex&&n.deleteTexture(this._sceneTex)}catch{}this._prog=null,this._vbuf=null,this._quadBuf=null,this._vao=null,this._data=null,this._sceneTex=null}}}const ga=Object.freeze(Object.defineProperty({__proto__:null,ParticleSystem:pa,particleInstanceSegs:$o,particlePassRefract:Oo,rgbaIsBlankWhite:ha,spriteTrailLengthFactor:Do,spriteTrailRotation:zo},Symbol.toStringTag,{value:"Module"})),kn=new Map,zr=new Map;let lr=null;function ba(e,n){const t=String(e);zr.set(t,n),kn.delete(t)}function va(e){lr=typeof e=="function"?e:null}function xa(){zr.clear(),lr=null,kn.clear()}function ya(){return Object.keys(Dn)}function Ee(e,n,t){e[n]=255,e[n+1]=255,e[n+2]=255,e[n+3]=Math.round(Math.min(1,Math.max(0,t))*255)}function Bn(e,n){const{width:t,height:r,rgba:o}=e,i=Math.max(2,Math.round(Math.min(t,r)*.04));for(let s=0;s<r;s++)for(let c=0;c<t;c++){const a=Math.min(c,s,t-1-c,r-1-s);if(a>=i)continue;const u=a/i,l=(s*t+c)*4+3;o[l]=Math.round(o[l]*u)}if(n>0){let s=0;const c=t*r;for(let u=0;u<c;u++)s+=o[u*4+3];const a=s/c/255;if(a>n&&a>0){const u=n/a;for(let l=0;l<c;l++)o[l*4+3]=Math.round(o[l*4+3]*u)}}return e}function $r(e){let n=e>>>0;return function(){n|=0,n=n+1831565813|0;let t=Math.imul(n^n>>>15,1|n);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}const fn=e=>e*e*(3-2*e),jo=e=>e*e*e*(e*(e*6-15)+10),jr=(e,n,t)=>e+(n-e)*t,oe=(e,n)=>Math.exp(-(e*e)/(n*n));function Kt(e,n,t,r){const o=Math.min(e,n,t-1-e,t-1-n);return o>=r?1:o/r}function In(e,n){const t=new Uint8Array(e*e*4),r=e/2;for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=Math.hypot((i+.5-r)/r,(o+.5-r)/r);let c=0;for(let a=0;a<n.length;a++)c+=n[a].w*oe(s,n[a].r);Ee(t,(o*e+i)*4,c)}return{width:e,height:e,rgba:t}}function Pt(e,n,t){return In(e,[n,t])}function Ct(e,n,t,r,o){const i=new Uint8Array(e*e*4),s=e/2,c=Math.max(2,Math.round(e*.03));for(let a=0;a<e;a++)for(let u=0;u<e;u++){const l=(u+.5-s)/s,d=(a+.5-s)/s,h=Math.hypot(l,d),p=Math.atan2(d,l),w=Math.pow(.5+.5*Math.cos(n*p),r);let m=oe(h,o)+w*oe(h,t);m*=Kt(u,a,e,c),Ee(i,(a*e+u)*4,m)}return{width:e,height:e,rgba:i}}function rt(e,n,t,r,o){const i=o===void 0?.55:o,s=new Uint8Array(e*n*4);for(let c=0;c<n;c++){const a=c/(n-1),u=r?oe(a-.5,.27):fn(Math.min(1,a/.06))*Math.pow(1-a,1.35);for(let l=0;l<e;l++){const d=l/(e-1)*2-1,h=oe(d,t);Ee(s,(c*e+l)*4,h*h*h*u*i)}}return{width:e,height:n,rgba:s}}function Wr(e,n,t){const r=new Uint8Array(e*e*4),o=e/2;for(let i=0;i<e;i++)for(let s=0;s<e;s++){const c=Math.hypot((s-o)/o,(i-o)/o);Ee(r,(i*e+s)*4,oe(c-n,t*.6)*Math.max(0,1-c))}return{width:e,height:e,rgba:r}}function Wo(e,n){const t={1:{r:.78,t:.048,inner:.06,hi:[[-.28,-.32,.22,.9],[.32,.36,.12,.28]]},2:{r:.7,t:.07,inner:.14,hi:[[-.2,-.28,.3,.72],[.38,.2,.14,.4]]},3:{r:.84,t:.036,inner:.04,hi:[[-.34,-.18,.16,.95],[.2,.42,.1,.22],[.04,-.08,.07,.18]]}},r=t[n]||t[1],o=new Uint8Array(e*e*4),i=e/2;for(let s=0;s<e;s++)for(let c=0;c<e;c++){const a=(c+.5-i)/i,u=(s+.5-i)/i,l=Math.hypot(a,u);let d=oe(l-r.r,r.t*.85)*Math.max(0,1.05-l);l<r.r&&(d+=r.inner*oe(l,.5));for(let h=0;h<r.hi.length;h++){const p=r.hi[h];d+=p[3]*oe(Math.hypot(a-p[0],u-p[1]),p[2])}Ee(o,(s*e+c)*4,d)}return Bn({width:e,height:e,rgba:o},.05)}function On(e,n){const t=e>>1,r=new Uint8Array(e*e*4),o=n===1?[1,2,1,3]:n===2?[2,1,2,3]:[3,1,2,3];for(let i=0;i<2;i++)for(let s=0;s<2;s++){const c=Wo(t,o[i*2+s]);for(let a=0;a<t;a++){const u=(i*t+a)*e,l=a*t;for(let d=0;d<t;d++){const h=(u+s*t+d)*4,p=(l+d)*4;r[h]=c.rgba[p],r[h+1]=c.rgba[p+1],r[h+2]=c.rgba[p+2],r[h+3]=c.rgba[p+3]}}}return{width:e,height:e,rgba:r}}function Vo(e){const n=new Uint8Array(e*e*4),t=e/2,r=[[.32,0],[1.1,.35],[2.2,-.3],[-.7,.2]];for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=i>=t?1:0,c=o>=t?1:0,a=c*2+s,u=s*t+t/2,l=c*t+t/2,d=r[a][0],h=r[a][1],p=(i+.5-u)/(t*.4),w=(o+.5-l)/(t*.4),m=Math.cos(d),g=Math.sin(d);let v=p*m+w*g;const b=-p*g+w*m;v+=h*b*.18;const x=1-Math.max(0,b)*.42,E=Math.hypot(v/(.52*x),b/.92);let _=E>=1.12?0:oe(E,.48);_=Math.min(1,_+oe(v,.07)*oe(b,.65)*_*.4),Ee(n,(o*e+i)*4,_)}return Bn({width:e,height:e,rgba:n},.11)}function ze(e,n){const t={0:{rx:.36,ry:.92,wave:0,folds:0},1:{rx:.48,ry:.86,wave:.05,folds:7},2:{rx:.4,ry:.88,wave:.08,folds:5},3:{rx:.58,ry:.72,wave:0,folds:0},5:{rx:.44,ry:.8,wave:.12,folds:9},6:{rx:.52,ry:.78,wave:.07,folds:4},7:{rx:.5,ry:.9,wave:.16,folds:3},8:{rx:.38,ry:.94,wave:.2,folds:2}},r=t[n]||t[0],o=new Uint8Array(e*e*4),i=e/2;for(let s=0;s<e;s++)for(let c=0;c<e;c++){const a=(c+.5-i)/i,u=(s+.5-i)/i,l=Math.atan2(a,u),d=r.wave?1+r.wave*Math.sin(l*r.folds):1,h=Math.hypot(a/(r.rx*d),u/r.ry);let p=h>=1.12?0:oe(h,.5);p>0&&(p=Math.min(1,p+oe(a,.028)*oe(u,.72)*.28)),Ee(o,(s*e+c)*4,p)}return Bn({width:e,height:e,rgba:o},.11)}function dt(e,n){const t=e.width,r=e.height,o=e.rgba,i=n??2.8,s=new Uint8Array(t*r*4),c=(a,u)=>{const l=a<0?0:a>=t?t-1:a,d=u<0?0:u>=r?r-1:u;return o[(d*t+l)*4+3]/255};for(let a=0;a<r;a++)for(let u=0;u<t;u++){const l=(c(u-1,a)-c(u+1,a))*i,d=(c(u,a-1)-c(u,a+1))*i,h=1/Math.hypot(l,d,1),p=(a*t+u)*4;s[p]=Math.round((l*h*.5+.5)*255),s[p+1]=Math.round((d*h*.5+.5)*255),s[p+2]=Math.round((h*.5+.5)*255),s[p+3]=255}return{width:t,height:r,rgba:s}}function Xo(e){const n=new Uint8Array(e*e*4),t=e/2;for(let r=0;r<e;r++)for(let o=0;o<e;o++){const i=(o+.5-t)/t,s=(r+.5-t)/t,c=Math.hypot(i,s),a=c>=1?0:Math.sqrt(Math.max(0,1-c*c)),u=oe(c-.62,.11)*.55;Ee(n,(r*e+o)*4,Math.min(1,a*.85+u))}return{width:e,height:e,rgba:n}}function wa(e){const n=new Uint8Array(e*e*4),t=e/2;for(let r=0;r<e;r++)for(let o=0;o<e;o++){const i=(o+.5-t)/t,s=(r+.5-t)/t,c=Math.hypot(i,s),a=Math.atan2(s,i),u=oe(c,.38)*(.55+.45*Math.cos(a*3+c*6));Ee(n,(r*e+o)*4,u)}return{width:e,height:e,rgba:n}}function Ho(e){const n=new Uint8Array(e*e*4),t=e/2,r=Math.max(2,Math.round(e*.04));for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=(i+.5-t)/t,c=(o+.5-t)/t,a=Math.hypot(s,c),u=Math.atan2(c,s),l=fn(Math.max(0,Math.cos(u)*.55+.45)),d=oe(a-.68,.07)*l+.35*oe(a-.78,.12)*oe(u-.9,.55);Ee(n,(o*e+i)*4,Math.min(1,d)*Kt(i,o,e,r))}return{width:e,height:e,rgba:n}}function Ma(e){if(!e||e.length<16)return!1;const n=e.length/4,t=Math.max(1,n/48|0);let r=0;for(let o=0;o<n;o+=t){const i=o*4;if(e[i]<240||e[i+1]<240||e[i+2]<240)return!1;r++}return r>0}function _a(e){return!e||!e.rgba?e:Ma(e.rgba)?dt(e,2.8):e}const Aa={"particle/drop":"particle/drop_normal","particle/water/rain_drops_sheet":"particle/water/rain_drops_sheet_normal","particle/bubbles/bubble1":"particle/bubbles/bubble1normal","particle/bubbles/bubble2":"particle/bubbles/bubble2_normal","particle/sharp_halo":"particle/sharp_halo_normal","particle/misc/wave":"particle/normal_splash","particle/halo":"particle/sharp_halo_normal"};function Ta(e){if(!e)return null;const n=String(e);return/normal/i.test(n)?n:Aa[n]||n+"_normal"}function Ea(e){const n=String(e);return/(^|\/)normal_/.test(n)?null:/_normal$/i.test(n)?n.replace(/_normal$/i,""):/normal$/i.test(n)?n.replace(/normal$/i,""):null}function Sa(e){if(Dn[e])return Dn[e]();const n=String(e).toLowerCase();return/normal/.test(n)?Pt(64,{r:.18,w:1},{r:.4,w:.2}):ei(e)()}function Go(e,n,t){const r=$r(t*7919+17);let o=e;const i=[];for(let a=0;a<n;a++){const u=o*o,l=new Float32Array(u*2);for(let d=0;d<u;d++){const h=r()*Math.PI*2;l[d*2]=Math.cos(h),l[d*2+1]=Math.sin(h)}i.push({f:o,g:l,ox:a*7.31,oy:a*3.17}),o*=2}const s=(a,u,l,d,h)=>{const p=a.f,w=(u%p+p)%p,g=((l%p+p)%p*p+w)*2;return a.g[g]*d+a.g[g+1]*h},c=(a,u,l)=>{const d=(u+a.ox)*a.f,h=(l+a.oy)*a.f,p=Math.floor(d),w=Math.floor(h),m=d-p,g=h-w,v=jo(m),b=jo(g);return jr(jr(s(a,p,w,m,g),s(a,p+1,w,m-1,g),v),jr(s(a,p,w+1,m,g-1),s(a,p+1,w+1,m-1,g-1),v),b)};return function(u,l,d){const h=d==null?i.length:Math.min(d,i.length);let p=1,w=0,m=0;for(let g=0;g<h;g++)w+=(c(i[g],u,l)*.5+.5)*p,m+=p,p*=.55;return w/m}}function Yo(e,n,t){const{width:r,height:o,rgba:i}=e;if(r===n&&o===t)return e;const s=new Uint8Array(n*t*4);for(let c=0;c<t;c++){const a=(c+.5)/t*o-.5,u=Math.max(0,Math.min(o-1,Math.floor(a))),l=Math.max(0,Math.min(o-1,u+1)),d=a-Math.floor(a);for(let h=0;h<n;h++){const p=(h+.5)/n*r-.5,w=Math.max(0,Math.min(r-1,Math.floor(p))),m=Math.max(0,Math.min(r-1,w+1)),g=p-Math.floor(p),v=i[(u*r+w)*4+3],b=i[(u*r+m)*4+3],x=i[(l*r+w)*4+3],E=i[(l*r+m)*4+3],_=(v*(1-g)+b*g)*(1-d)+(x*(1-g)+E*g)*d;Ee(s,(c*n+h)*4,_/255)}}return{width:n,height:t,rgba:s}}function Wt(e,n,t,r,o,i,s){const c=i===void 0?1:i,a=s===void 0?200:s,u=256,l=Go(n,t,r),d=new Uint8Array(u*u*4),h=u/2,p=u*u,w=new Float32Array(p);let m=1,g=0;for(let E=0;E<p;E++){const _=E%u,C=E/u|0,N=(_+.5)/u,D=(C+.5)/u,k=l(N+5.2,D+1.3,2)-.5,O=l(N+9.7,D+8.1,2)-.5,j=w[E]=l(N+k*.45,D+O*.45);j<m&&(m=j),j>g&&(g=j)}const v=g-m||1;for(let E=0;E<u;E++)for(let _=0;_<u;_++){const C=(w[E*u+_]-m)/v,N=Math.hypot((_+.5-h)/h,(E+.5-h)/h),D=Math.pow(Math.max(0,1-N),c);let k=Math.max(0,(C-(1-o))/(o||1));k=fn(Math.min(1,k))*D,Ee(d,(E*u+_)*4,k)}let b=0;for(let E=0;E<p;E++)b=Math.max(b,d[E*4+3]);if(b>0&&b<a){const E=a/b;for(let _=0;_<p;_++)d[_*4+3]=Math.round(Math.min(255,d[_*4+3]*E))}const x={width:u,height:u,rgba:d};return u===e?x:Yo(x,e,e)}function Vr(e,n){const t=e,r=Go(3,5,n??23),o=new Uint8Array(t*t*4),i=t*t,s=new Float32Array(i);let c=1,a=0;for(let h=0;h<i;h++){const p=h%t,w=h/t|0,m=(p+.5)/t,g=(w+.5)/t,v=r(m+2.1,g+4.7,2)-.5,b=r(m+6.3,g+1.9,2)-.5,x=s[h]=r(m+v*.28,g+b*.55);x<c&&(c=x),x>a&&(a=x)}const u=a-c||1;for(let h=0;h<t;h++)for(let p=0;p<t;p++){const w=(h+.5)/t,m=(p+.5)/t*2-1,g=.1+.52*Math.pow(w,1.25),v=(s[h*t+p]-c)/u,b=oe(m/(g||.01),.55)*oe(w-.58,.42);let x=fn(Math.min(1,Math.max(0,(v-.18)/.72)))*b;x*=w<.06?w/.06:1,Ee(o,(h*t+p)*4,x)}let l=0;for(let h=0;h<i;h++)l=Math.max(l,o[h*4+3]);if(l>0&&l<220){const h=220/l;for(let p=0;p<i;p++)o[p*4+3]=Math.round(Math.min(255,o[p*4+3]*h))}const d=Bn({width:t,height:t,rgba:o},.08);return t===e?d:Yo(d,e,e)}function Xr(e,n,t,r){const o=new Uint8Array(e*n*4),i=e/t,s=n/r;for(let c=0;c<n;c++)for(let a=0;a<e;a++){const u=Math.floor(a/i),l=Math.floor(c/s),d=(a+.5-u*i)/i*2-1,h=(c+.5-l*s)/s*2-1,p=1-Math.max(0,h)*.45,w=Math.hypot(d/(.52*p),h/.8),m=w>=1.12?0:oe(w,.48);Ee(o,(c*e+a)*4,m)}return{width:e,height:n,rgba:o}}function qo(e){const n=new Uint8Array(e*e*4),t=$r(7),r=[];for(let o=0;o<11;o++)r.push({x:.14+t()*.72,y:.14+t()*.72,rx:.025+t()*.03,ry:.018+t()*.024,rot:t()*Math.PI});for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=(i+.5)/e,c=(o+.5)/e;let a=0;for(const u of r){const l=s-u.x,d=c-u.y,h=Math.cos(u.rot),p=Math.sin(u.rot),w=(l*h+d*p)/u.rx,m=(-l*p+d*h)/u.ry,g=oe(Math.hypot(w,m),.55);g>a&&(a=g)}Ee(n,(o*e+i)*4,a)}return{width:e,height:e,rgba:n}}function ur(e,n){const t=n??19,r=$r(t),o=h=>Math.min(.86,Math.max(.14,h)),i=5+t%4,s=[];let c=o(.5+(r()-.5)*.16);for(let h=0;h<=i;h++){const p=.06+h/i*.86;h>0&&(c=o(c+(r()-.5)*.32)),s.push([c,p])}const a=[];for(let h=0;h<s.length-1;h++)a.push([s[h],s[h+1],1]);const u=1+t%2;for(let h=0;h<u;h++){const p=1+(t+h*3)%Math.max(1,s.length-2),w=s[p],m=[w];let g=w[0],v=w[1];const b=2+t%2;for(let x=0;x<b;x++)g=o(g+(r()-.5)*.36),v=Math.min(.92,v+.1+r()*.08),m.push([g,v]);for(let x=0;x<m.length-1;x++)a.push([m[x],m[x+1],.45+h*.1])}const l=new Uint8Array(e*e*4),d=Math.max(2,Math.round(e*.04));for(let h=0;h<e;h++)for(let p=0;p<e;p++){const w=(p+.5)/e,m=(h+.5)/e;let g=9,v=0;for(const[x,E,_]of a){const C=E[0]-x[0],N=E[1]-x[1],D=C*C+N*N||1e-8,k=Math.max(0,Math.min(1,((w-x[0])*C+(m-x[1])*N)/D)),O=Math.hypot(w-(x[0]+C*k),m-(x[1]+N*k));O/_<g&&(g=O/_,v=_)}const b=.95*oe(g,.012)+.3*oe(g,.05)*v;Ee(l,(h*e+p)*4,Math.min(1,b)*Kt(p,h,e,d))}return{width:e,height:e,rgba:l}}function Hr(e,n){const t=new Uint8Array(e*n*4);for(let r=0;r<n;r++)for(let o=0;o<e;o++){const i=(o+.5-e/2)/(e/2),s=(r+.5-n/2)/(n/2),c=oe(i,.34)*Math.exp(-Math.max(0,-s-.05)*4.2)*(s<.1?1:Math.max(0,1-s*4)),a=Math.hypot(i/.34,(s-.42)/.3),u=a>=1?0:oe(a,.5);Ee(t,(r*e+o)*4,Math.max(c,u))}return{width:e,height:n,rgba:t}}function Pa(e){return Pt(e,{r:.1,w:1},{r:.3,w:.16})}function Gr(e,n){const t=new Uint8Array(e*n*4);for(let r=0;r<n;r++){const o=(r+.5)/n,i=fn(Math.min(1,Math.min(o/.08,(1-o)/.08))),s=oe(o-.46,.24)*i,c=.5*(1-fn(Math.min(1,Math.max(0,(o-.42)/.5)))*.6);for(let a=0;a<e;a++){const u=(a+.5-e/2)/(e/2);Ee(t,(r*e+a)*4,oe(Math.abs(u)/(c||.01),.5)*s)}}return{width:e,height:n,rgba:t}}function Zo(e){const n=new Uint8Array(e*e*4),t=e/2,r=Math.max(2,Math.round(e*.04));for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=(i+.5-t)/t,c=(o+.5-t)/t,a=oe(Math.hypot(s,c),.42),u=oe(Math.hypot(s-.34,c),.36),l=Math.max(0,a-u*1.08)*Kt(i,o,e,r);Ee(n,(o*e+i)*4,l)}return{width:e,height:e,rgba:n}}function Ko(e){const n=new Uint8Array(e*e*4),t=e/2,r=Math.max(2,Math.round(e*.04));for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=(i+.5-t)/t,c=(o+.5-t)/t;let a=oe(Math.hypot(s,c),.08);for(let u=0;u<6;u++){const l=u*Math.PI/3,d=Math.cos(l),h=Math.sin(l),p=s*d+c*h,w=-s*h+c*d;if(p<0)continue;const m=Math.max(0,1.02-p/.72);a+=oe(w,.028)*oe(p,.5)*m,a+=.55*oe(w-(p-.28)*.65,.02)*oe(p-.28,.12)*m,a+=.55*oe(w+(p-.28)*.65,.02)*oe(p-.28,.12)*m,a+=.4*oe(w-(p-.48)*.7,.016)*oe(p-.48,.08)*m,a+=.4*oe(w+(p-.48)*.7,.016)*oe(p-.48,.08)*m}Ee(n,(o*e+i)*4,Math.min(1,a)*Kt(i,o,e,r))}return{width:e,height:e,rgba:n}}function Qo(e,n){const t=new Uint8Array(e*e*4),r=e/2,o=Math.max(2,Math.round(e*.04)),i=Math.abs(n|0)%3;for(let s=0;s<e;s++)for(let c=0;c<e;c++){const a=(c+.5-r)/r*1.55,u=(s+.5-r)/r*1.55,l=Math.abs(Math.abs(a)+Math.abs(u)-.55);let d=oe(l,.016);i===0?(d+=oe(a,.012)*oe(u,.38),d+=oe(u,.012)*oe(a,.38)):i===1?(d+=oe(a-u,.012)*oe(a+u,.36),d+=oe(a+u,.012)*oe(a-u,.36)):(d+=oe(Math.hypot(a,u)-.26,.014),d+=oe(a,.012)*oe(u,.22)),Ee(t,(s*e+c)*4,Math.min(1,d)*Kt(c,s,e,o))}return Bn({width:e,height:e,rgba:t},.03)}function Yr(e){let n=0;const t=String(e);for(let r=0;r<t.length;r++)n=n*31+t.charCodeAt(r)|0;return n}function Jo(e){const n=new Uint8Array(e*e*4),t=e/2,r=Math.max(2,Math.round(e*.03));for(let o=0;o<e;o++)for(let i=0;i<e;i++){const s=(i+.5-t)/t,c=(o+.5-t)/t,a=Math.hypot(s,c),u=oe(a,.07)+.85*oe(s,.62)*oe(c,.045)+.22*oe(s,.92)*oe(c,.018);Ee(n,(o*e+i)*4,Math.min(1,u)*Kt(i,o,e,r))}return{width:e,height:e,rgba:n}}const Dn={"particle/halo_6":()=>Pt(256,{r:.14,w:1},{r:.4,w:.17}),"particle/normal_splash":()=>dt(Xo(256),3.2),"particle/drop_normal":()=>dt(Gr(128,512),3.4),"particle/normal_ring_smooth":()=>dt(Wr(256,.55,.12),3.1),"particle/normal_pinch_rotate":()=>dt(wa(256),2.8),"particle/water/rain_drops_sheet_normal":()=>dt(Xr(256,512,2,4),3.6),"particle/bubbles/bubble1normal":()=>dt(On(256,1),3.2),"particle/bubbles/bubble2_normal":()=>dt(On(256,2),3.2),"particle/sharp_halo_normal":()=>dt(In(256,[{r:.035,w:1},{r:.09,w:.45},{r:.22,w:.08}]),3.4),"particle/beam/beam_0":()=>rt(128,512,.46,!0),"particle/beam/beam_1":()=>rt(128,512,.34,!0),"particle/beam/beam_2":()=>rt(128,512,.22,!0),"particle/beam/beam_2_fade":()=>rt(128,512,.24,!1),"particle/light/light_shafts_0":()=>rt(128,512,.42,!0),"particle/light/light_shafts_1":()=>rt(128,512,.3,!0),"particle/light/light_shafts_3":()=>rt(128,512,.26,!0),"particle/light/light_shafts_5":()=>rt(128,512,.23,!0),"particle/light/light_shafts_6":()=>rt(128,512,.2,!0),"particle/nature/rosepetals":()=>Vo(256),"particle/nature/leaves":()=>ze(256,0),"particle/nature/leaves1":()=>ze(256,1),"particle/nature/leaves2":()=>ze(256,2),"particle/nature/leaves3":()=>ze(256,3),"particle/nature/leaves5":()=>ze(256,5),"particle/nature/leaves6":()=>ze(256,6),"particle/nature/leaves7":()=>ze(256,7),"particle/nature/leaves8":()=>ze(256,8),"particle/nature/snow":()=>Ko(256),"particle/halo":()=>Pt(256,{r:.12,w:1},{r:.3,w:.15}),"particle/halo_1":()=>Pt(256,{r:.1,w:1},{r:.3,w:.13}),"particle/halo_2":()=>Pt(256,{r:.2,w:.9},{r:.44,w:.2}),"particle/halo_3":()=>In(256,[{r:.045,w:1},{r:.13,w:.85},{r:.36,w:.15}]),"particle/halo_4":()=>Pt(256,{r:.085,w:1},{r:.28,w:.12}),"particle/halo_5":()=>In(256,[{r:.04,w:1},{r:.11,w:.8},{r:.34,w:.17}]),"particle/sharp_halo":()=>In(256,[{r:.035,w:1},{r:.09,w:.45},{r:.22,w:.08}]),"particle/chromaticdot":()=>Pa(128),"particle/light/flare_0":()=>Ct(256,6,.58,10,.08),"particle/light/flare_1":()=>Ct(512,4,.62,14,.07),"particle/light/flare_2":()=>Jo(256),"particle/drop":()=>Gr(128,512),"particle/nature/rain1":()=>rt(128,512,.16,!0,.6),"particle/nature/rain2":()=>rt(128,512,.24,!0,.55),"particle/water/rain_drops_sheet":()=>Xr(256,512,2,4),"particle/fog/fog1":()=>Wt(512,4,5,1,.4,.9,150),"particle/fog/fog2":()=>Wt(512,3,5,2,.45,.8,140),"particle/fog/fog3":()=>Wt(512,6,4,3,.36,1,150),"particle/smoke/smoke1":()=>Wt(512,3,5,7,.55,1.5,130),"particle/smoke/smoke2":()=>Wt(512,2,5,11,.6,1.7,120),"particle/smoke/smoke2light":()=>Wt(512,2,5,13,.4,1.7,110),"particle/misc/wave":()=>Wr(512,.72,.085),"particle/misc/star_0":()=>Ct(256,5,.62,8,.1),"particle/bubbles/bubble1":()=>On(256,1),"particle/bubbles/bubble2":()=>On(256,2),"particle/bubbles/bubble3":()=>On(256,3),"particle/debris/debris1":()=>qo(128),"particle/lightning/lightning1":()=>ur(256,3),"particle/lightning/lightning2":()=>ur(256,11),"particle/lightning/lightning3":()=>ur(256,19),"particle/fire/fire1":()=>Vr(256,23),"particle/fire/fire2":()=>Vr(256,41),"particle/star":()=>Ct(256,4,.58,12,.09),"particle/shape/circle_wind":()=>Ho(256),"particle/sickle":()=>Zo(256),"particle/magic/glyph_4":()=>Qo(256,4),"@sparkle":()=>Ct(256,4,.6,16,.08),"@star":()=>Ct(256,5,.62,8,.1),"@trail":()=>Hr(128,256)};function ei(e){const n=String(e).toLowerCase();if(/normal/.test(n)){const t=Ea(e);return t?()=>dt(Sa(t),2.8):()=>dt(Xo(128),2.6)}return/rosepetal|petal|sakura|blossom/.test(n)?()=>Vo(256):/leaf|leaves|foliage/.test(n)?/leaves8/.test(n)?()=>ze(256,8):/leaves7/.test(n)?()=>ze(256,7):/leaves6/.test(n)?()=>ze(256,6):/leaves5/.test(n)?()=>ze(256,5):/leaves3/.test(n)?()=>ze(256,3):/leaves2/.test(n)?()=>ze(256,2):/leaves1/.test(n)?()=>ze(256,1):()=>ze(256,0):/circle_wind|windcircle/.test(n)?()=>Ho(256):/fog|cloud|mist|vapor/.test(n)?()=>Wt(512,4,5,5,.4,.9,150):/smoke/.test(n)?()=>Wt(512,3,5,8,.55,1.5,130):/beam|shaft|ray|godray/.test(n)?()=>rt(128,512,.3,!0):/flare/.test(n)?()=>Jo(256):/bubble/.test(n)?()=>Wo(256,1):/ring|wave/.test(n)?()=>Wr(512,.72,.085):/fire|flame|ember|ash/.test(n)?()=>Vr(256,Yr(n)):/sickle|crescent|moon/.test(n)?()=>Zo(256):/glyph|magic|rune/.test(n)?()=>Qo(256,Yr(n)):/snowflake|雪花|snow/.test(n)?()=>Ko(256):/流星|meteor|shooting/.test(n)?()=>Hr(128,256):/star|星/.test(n)?()=>Ct(256,5,.62,8,.1):/sparkle|glint|twinkle/.test(n)?()=>Ct(256,4,.6,16,.08):/rain_drops_sheet|drops_sheet/.test(n)?()=>Xr(256,512,2,4):/drop|rain/.test(n)?()=>Gr(128,512):/debris|dirt|rock/.test(n)?()=>qo(128):/lightning|bolt|arc/.test(n)?()=>ur(256,Yr(n)):/note|music/.test(n)?()=>Ct(256,4,.55,8,.12):/trail|streak/.test(n)?()=>Hr(128,256):()=>Pt(256,{r:.12,w:1},{r:.3,w:.15})}function Ca(e){if(kn.has(e))return kn.get(e);let n=null;const t=zr.get(e);if(t)try{n=t()}catch{n=null}if(!n&&lr)try{n=lr(e)}catch{n=null}if(!n&&Dn[e])try{n=Dn[e]()}catch{n=null}if(!n)try{n=ei(e)()}catch{n=null}return n||(n=Pt(256,{r:.12,w:1},{r:.3,w:.15})),kn.set(e,n),n}function Ra(e){return typeof e=="string"&&e.indexOf("particle/")===0}const La=Object.freeze(Object.defineProperty({__proto__:null,buildBuiltinParticleTexture:Ca,isBuiltinParticleTextureName:Ra,listBuiltinParticleTextureNames:ya,particleNormalNameForAlbedo:Ta,prepareParticleNormalTexture:_a,resetParticleTextureFactories:xa,setParticleTextureFactory:ba,setParticleTextureProvider:va},Symbol.toStringTag,{value:"Module"})),ti=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function Vt(e,n,t){const r=t||new Float32Array(16);for(let o=0;o<4;o++)for(let i=0;i<4;i++)r[o*4+i]=e[i]*n[o*4]+e[4+i]*n[o*4+1]+e[8+i]*n[o*4+2]+e[12+i]*n[o*4+3];return r}function ni(e){const n=[];for(let r=0;r<4;r++)n.push([e[r],e[4+r],e[8+r],e[12+r],0,0,0,0]),n[r][4+r]=1;for(let r=0;r<4;r++){let o=r;for(let c=r+1;c<4;c++)Math.abs(n[c][r])>Math.abs(n[o][r])&&(o=c);const i=n[r];n[r]=n[o],n[o]=i;const s=n[r][r];if(Math.abs(s)<1e-12)return Float32Array.from(ti);for(let c=0;c<8;c++)n[r][c]/=s;for(let c=0;c<4;c++){if(c===r)continue;const a=n[c][r];if(a!==0)for(let u=0;u<8;u++)n[c][u]-=a*n[r][u]}}const t=new Float32Array(16);for(let r=0;r<4;r++)for(let o=0;o<4;o++)t[r*4+o]=n[o][4+r];return t}function qr(e,n,t,r,o,i,s,c,a,u){const l=u||new Float32Array(16),d=Math.cos(r),h=Math.sin(r),p=Math.cos(o),w=Math.sin(o),m=Math.cos(i),g=Math.sin(i);return l[0]=m*p*s,l[1]=g*p*s,l[2]=-w*s,l[3]=0,l[4]=(m*w*h-g*d)*c,l[5]=(g*w*h+m*d)*c,l[6]=p*h*c,l[7]=0,l[8]=(m*w*d+g*h)*a,l[9]=(g*w*d-m*h)*a,l[10]=p*d*a,l[11]=0,l[12]=e,l[13]=n,l[14]=t,l[15]=1,l}function zn(e,n){const t=[];for(;n<e.byteLength;){const o=e.getUint8(n++);if(o===0)break;t.push(o)}let r="";try{r=new TextDecoder("utf-8").decode(new Uint8Array(t))}catch{r=String.fromCharCode.apply(null,t)}return{value:r,next:n}}function fr(e,n,t=0){const r=[];for(let o=0;o<n.length;o++)r.push(n.charCodeAt(o));e:for(let o=t;o<=e.length-r.length;o++){for(let i=0;i<r.length;i++)if(e[o+i]!==r[i])continue e;return o}return-1}function Fa(e){const n=new DataView(e.buffer,e.byteOffset,e.byteLength),t=String.fromCharCode.apply(null,Array.from(e.subarray(0,8)));if(!t.startsWith("MDLV"))throw new Error("\u4E0D\u662F MDL: "+t);const r=zn(n,21),i=parseInt(t.slice(4),10)>=23?[{lenOff:32,stride:80,uv:72,bone:40,weight:56},{lenOff:32,stride:48,uv:40,bone:-1,weight:-1}]:[{lenOff:8,stride:52,uv:44,bone:12,weight:28},{lenOff:4,stride:52,uv:44,bone:12,weight:28},{lenOff:32,stride:80,uv:72,bone:40,weight:56}];let s=null,c=0,a=0;for(const G of i){const Q=r.next+G.lenOff;if(Q+4>e.byteLength)continue;const q=n.getUint32(Q,!0);if(q>0&&q%G.stride===0&&Q+4+q<=e.byteLength){s=G,c=q,a=Q;break}}if(!s)throw new Error("\u9876\u70B9\u533A\u957F\u5EA6\u5F02\u5E38\uFF08"+t+"\uFF0C\u5DF2\u8BD5 stride "+i.map(G=>G.stride).join("/")+"\uFF09");const u=a+4,l=c/s.stride,d=new Float32Array(l*3),h=new Float32Array(l*2),p=new Float32Array(l*4),w=new Float32Array(l*4);for(let G=0;G<l;G++){const Q=u+G*s.stride;if(d[G*3]=n.getFloat32(Q,!0),d[G*3+1]=n.getFloat32(Q+4,!0),d[G*3+2]=n.getFloat32(Q+8,!0),h[G*2]=n.getFloat32(Q+s.uv,!0),h[G*2+1]=n.getFloat32(Q+s.uv+4,!0),s.bone>=0&&s.weight>=0)for(let q=0;q<4;q++)p[G*4+q]=n.getUint32(Q+s.bone+q*4,!0),w[G*4+q]=n.getFloat32(Q+s.weight+q*4,!0);else p[G*4]=0,w[G*4]=1}const m=n.getUint32(u+c,!0),g=u+c+4,v=l>65535&&m%4===0,b=v?m/4:m/2,x=v?new Uint32Array(b):new Uint16Array(b);if(v)for(let G=0;G<b;G++)x[G]=n.getUint32(g+G*4,!0);else for(let G=0;G<b;G++)x[G]=n.getUint16(g+G*2,!0);const E=Ua(e,n),_=ka(e,n,E.length),C=Ia(e,n,E),N=Na(e,n,E.length),D=[],k=[],O=[];if(E.length>0){const G=E.map((q,te)=>{const me=q.matrix,ye=Math.hypot(me[0],me[1]),We=Math.hypot(me[4],me[5]);return O[te]=Float32Array.from([me[12],me[13],me[14],0,0,Math.atan2(me[1],me[0]),ye||1,We||1,me[10]||1]),Float32Array.from(me)});for(let q=0;q<E.length;q++){const te=O[q],me=E[q].matrix;Math.hypot(te[0]-me[12],te[1]-me[13])>.001&&(G[q]=qr(te[0],te[1],te[2],te[3],te[4],te[5],te[6],te[7],te[8],new Float32Array(16)))}const Q=[];for(let q=0;q<E.length;q++){const te=E[q].parent;Q[q]=te>=0&&te<q?Vt(Q[te],G[q]):Float32Array.from(G[q])}for(let q=0;q<E.length;q++)D[q]=ni(Q[q]);if(C){const q=[];for(let te=0;te<E.length;te++){const me=E[te].parent;q[te]=me>=0&&me<te?Vt(q[me],C[te]):Float32Array.from(C[te])}for(let te=0;te<E.length;te++)k[te]=Vt(q[te],D[te])}}let j=1/0,W=-1/0,K=1/0,V=-1/0;for(let G=0;G<l;G++){const Q=d[G*3],q=d[G*3+1];Q<j&&(j=Q),Q>W&&(W=Q),q<K&&(K=q),q>V&&(V=q)}return{magic:t,materialPath:r.value,vertexCount:l,positions:d,uvs:h,boneIdx:p,weights:w,indexCount:b,indexType:v?"u32":"u16",indices:x,bones:E,animations:_,animBound:Ba(_,E),invBindWorld:D,bindTRS:O.length>0?O:null,attachments:N.length>0?N:null,restCorrection:k.length>0?k:null,bounds:{minX:j,maxX:W,minY:K,maxY:V}}}function Na(e,n,t){const r=fr(e,"MDAT");if(r<0)return[];const o=n.getUint16(r+13,!0);if(o<=0||o>256)return[];const i=[];let s=r+15;for(let c=0;c<o&&!(s+2>e.length);c++){const a=n.getUint16(s,!0),u=zn(n,s+2);if(u.next+64>e.length)break;const l=new Float32Array(16);for(let d=0;d<16;d++)l[d]=n.getFloat32(u.next+d*4,!0);a<t&&i.push({bone:a,name:u.value,matrix:l}),s=u.next+64}return i}function Ua(e,n){const t=fr(e,"MDLS");if(t<0)return[];const r=n.getUint32(t+13,!0);if(r<=0||r>1024)return[];const o=[];let i=t+17;for(let s=0;s<r;s++){if(i+77>n.byteLength)return o;const c=n.getUint32(i+1,!0),a=n.getInt32(i+5,!0),u=new Float32Array(16);for(let d=0;d<16;d++)u[d]=n.getFloat32(i+13+d*4,!0);const l=zn(n,i+13+64);o.push({id:c,parent:a>=0&&a<r?a:-1,matrix:u}),i=l.next}return o}function ka(e,n,t){const r=fr(e,"MDLA");if(r<0)return[];let o=r+9;const i=n.getUint32(o,!0);o+=4;const s=n.getUint32(o,!0);if(o+=4,s<=0||s>256)return[];const c=[];for(let a=0;a<s&&!(o+16>n.byteLength);a++){const u=n.getUint32(o,!0);o+=8;const l=zn(n,o);o=l.next;const d=zn(n,o);if(o=d.next,o+16>n.byteLength)break;const h=n.getFloat32(o,!0);o+=4;const p=n.getUint32(o,!0);o+=8;const w=n.getUint32(o,!0);if(o+=4,w>1024)break;const m=[];for(let g=0;g<w&&!(o+8>n.byteLength);g++){o+=4;const v=n.getUint32(o,!0);o+=4;const b=Math.floor(v/36);if(o+v>n.byteLength)break;const x=new Float32Array(b*9);for(let E=0;E<b;E++){const _=o+E*36;for(let C=0;C<9;C++)x[E*9+C]=n.getFloat32(_+C*4,!0)}o+=v,m.push({frameCount:b,keyframes:x})}if(o+=35,m.length>0&&p>0&&h>0&&c.push({id:u,name:l.value,mode:d.value,fps:h,frameCount:p,duration:p/h,tracks:m}),o>=i)break}return c}function Ba(e,n){let t=0,r=0;for(const o of e)for(let i=0;i<o.tracks.length;i++){const s=o.tracks[i];if(!s)continue;const c=n[i],a=c?c.matrix[12]:0,u=c?c.matrix[13]:0,l=s.keyframes;for(let d=0;d<s.frameCount;d++){const h=Math.abs(l[d*9]-a),p=Math.abs(l[d*9+1]-u);h>t&&(t=h),p>r&&(r=p)}}return{x:t,y:r}}function Ia(e,n,t){if(t.length===0)return null;const r=fr(e,"MDLE");if(r<0)return null;const o=r+8+1+4+4;if(o+t.length*64>n.byteLength)return null;const i=[];for(let s=0;s<t.length;s++){const c=new Float32Array(16);for(let a=0;a<16;a++)c[a]=n.getFloat32(o+s*64+a*4,!0);i.push(c)}return i}function Oa(e,n,t,r){const o=e.frameCount;if(o===0)return r[0]=0,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=0,r[6]=1,r[7]=1,r[8]=1,r;const i=t*n.fps;let s,c,a;if(n.mode==="loop"){const p=Math.max(1,o-1),w=(i%p+p)%p;s=Math.floor(w),c=(s+1)%o,a=w-s}else if(n.mode==="mirror"){const p=Math.max(1,o-1),w=p*2;let m=(i%w+w)%w;m>p&&(m=w-m),s=Math.floor(m),c=Math.min(s+1,o-1),a=m-s}else{const p=Math.min(Math.max(i,0),o-1);s=Math.floor(p),c=Math.min(s+1,o-1),a=p-s}const u=e.keyframes,l=s*9,d=c*9,h=1-a;for(let p=0;p<9;p++)if(p>=3&&p<=5){let w=u[d+p]-u[l+p];w>Math.PI?w-=2*Math.PI:w<-Math.PI&&(w+=2*Math.PI),r[p]=u[l+p]+w*a}else r[p]=u[l+p]*h+u[d+p]*a;return r}function Da(e,n,t){const r=e.bindTRS&&e.bindTRS[n];if(r)return t.set(r),t;const o=e.bones[n].matrix;return t[0]=o[12],t[1]=o[13],t[2]=o[14],t[3]=0,t[4]=0,t[5]=Math.atan2(o[1],o[0]),t[6]=Math.hypot(o[0],o[1])||1,t[7]=Math.hypot(o[4],o[5])||1,t[8]=o[10]||1,t}function Zr(e,n,t,r){const o=e.bones,i=o.length;if(i===0)return null;const s=!!(r&&r.size>0);if(!e._skin||e._skin.length!==i*16){e._skin=new Float32Array(i*16),e._local=[],e._world=[],e._tmp=new Float32Array(16),e._tmp2=new Float32Array(16);for(let h=0;h<i;h++)e._local.push(new Float32Array(16)),e._world.push(new Float32Array(16))}const c=Array.isArray(t)&&t.length>0,a=[];if(c)for(const h of t){if(h.visible===!1||h.visible===0)continue;const p=e.animations.find(w=>w.id===h.animation);p&&a.push({anim:p,additive:!!h.additive,blend:typeof h.blend=="number"?h.blend:1,rate:typeof h.rate=="number"?h.rate:1})}if(a.length===0&&!c){const h=e.animations[0];if(h)a.push({anim:h,additive:!1,blend:1,rate:1});else if(!s)return null}const u=e._trsBase||(e._trsBase=new Float32Array(9)),l=e._trsAcc||(e._trsAcc=new Float32Array(9)),d=e._trsSmp||(e._trsSmp=new Float32Array(9));for(let h=0;h<i;h++){Da(e,h,u),l.set(u);let p=!1,w=0;for(const g of a){const v=g.anim.tracks[h];if(!v)continue;Oa(v,g.anim,n*g.rate,d);const b=g.blend;if(g.additive){for(let x=0;x<9;x++){let E=d[x]-u[x];x>=3&&x<=5&&(E>Math.PI?E-=2*Math.PI:E<-Math.PI&&(E+=2*Math.PI)),l[x]+=E*b}w+=b}else for(let x=0;x<9;x++)l[x]=l[x]*(1-b)+d[x]*b;p=!0}if(w>1)for(let g=0;g<9;g++)l[g]=u[g]+(l[g]-u[g])/w;const m=s?r.get(h):void 0;m&&(l[0]=m[0],l[1]=m[1],l[2]=m[2],p=!0),p?qr(l[0],l[1],l[2],l[3],l[4],l[5],l[6],l[7],l[8],e._local[h]):qr(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],e._local[h])}for(let h=0;h<i;h++){const p=o[h].parent;p>=0&&p<h?Vt(e._world[p],e._local[h],e._world[h]):e._world[h].set(e._local[h])}for(let h=0;h<i;h++)Vt(e._world[h],e.invBindWorld[h],e._tmp),e._skin.set(e._tmp,h*16);return e._skin}function ri(e,n){return!e||!e.invBindWorld||!(n>=0&&n<e.invBindWorld.length)?null:ni(e.invBindWorld[n])}function za(e,n){return Vt(e,n)}function oi(e,n){if(!e||!e.attachments||typeof n!="string"||n===""||!e._world)return null;for(const t of e.attachments)if(t.name===n)return t.bone<0||t.bone>=e._world.length?null:Vt(e._world[t.bone],t.matrix);return null}function ii(e,n){if(!e||!e.attachments||typeof n!="string"||n==="")return null;for(const t of e.attachments){if(t.name!==n)continue;const r=ri(e,t.bone);return r?Vt(r,t.matrix):null}return null}function Kr(e,n,t){const r=e&&e.angles&&e.angles[2]||0,o=e&&e.scale?e.scale[0]:1,i=e&&e.scale?e.scale[1]:1,s=r*Math.PI/180,c=Math.cos(s),a=Math.sin(s),u=n*o,l=t*i;return[u*c-l*a,u*a+l*c]}function $a(e){const n=new Map,t=new Map;for(const i of e){if(!i||i.id===void 0||i.id===null||(n.set(i.id,i),i.parentId===void 0||i.parentId===null))continue;const s=t.get(i.parentId);s?s.push(i):t.set(i.parentId,[i])}const r=(i,s)=>{const c=t.get(i.id);if(c)for(const a of c)s.push(a),r(a,s)},o=[];for(const i of e){const s=i&&i.attachment;if(typeof s!="string"||s==="")continue;const c=n.get(i.parentId);if(!c||!c.puppet)continue;const a=ii(c.puppet,s);if(!a)continue;const u=a[12],l=a[13],d=Kr(c,u,l),h=[];r(i,h),i.origin[0]+=d[0],i.origin[1]+=d[1];for(const p of h)p.origin[0]+=d[0],p.origin[1]+=d[1];o.push({layer:i,parent:c,name:s,bindX:u,bindY:l,desc:h})}for(const i of o){i.baseX=i.layer.origin[0],i.baseY=i.layer.origin[1],i.subtree=[{layer:i.layer,x:i.layer.origin[0],y:i.layer.origin[1]}];for(const s of i.desc)i.subtree.push({layer:s,x:s.origin[0],y:s.origin[1]})}return o}function ja(e,n,t){if(!e||e.length===0)return;const r=new Set,o=[];for(const s of e){const c=s.parent&&s.parent.puppet;if(!c){o.push(null);continue}if(!r.has(c)){r.add(c);const u=typeof t=="function"?t(s.parent):null;Zr(c,n,s.parent.animationLayers,u)}const a=oi(c,s.name);if(!a){o.push(null);continue}o.push(Kr(s.parent,a[12]-s.bindX,a[13]-s.bindY))}const i=new Set;for(const s of e){const c=s.subtree||[{layer:s.layer,x:s.baseX,y:s.baseY}];for(const a of c)i.has(a.layer)||(i.add(a.layer),a.layer.origin[0]=a.x,a.layer.origin[1]=a.y)}for(let s=0;s<e.length;s++){const c=e[s],a=o[s],u=c.subtree||[{layer:c.layer,x:c.baseX,y:c.baseY}];if(a)for(const l of u)l.layer.origin[0]+=a[0],l.layer.origin[1]+=a[1]}}const Wa=128,dr=24;function Va(e){const n=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS)||256,t=Math.floor((n-32)/4);return Math.max(dr,Math.min(Wa,t))}const Xa=e=>`#version 300 es
|
|
136
|
+
in vec3 a_pos;
|
|
137
|
+
in vec2 a_uv;
|
|
138
|
+
in vec4 a_bone;
|
|
139
|
+
in vec4 a_weight;
|
|
140
|
+
uniform mat4 u_mvp;
|
|
141
|
+
uniform mat4 u_skin[${e}];
|
|
142
|
+
uniform int u_boneCount;
|
|
143
|
+
out vec2 v_uv;
|
|
144
|
+
void main() {
|
|
145
|
+
vec4 p = vec4(a_pos, 1.0);
|
|
146
|
+
vec4 skinned = vec4(0.0);
|
|
147
|
+
float total = 0.0;
|
|
148
|
+
if (u_boneCount > 0) {
|
|
149
|
+
for (int i = 0; i < 4; i++) {
|
|
150
|
+
float w = a_weight[i];
|
|
151
|
+
if (w <= 0.0) continue;
|
|
152
|
+
int bi = int(a_bone[i]);
|
|
153
|
+
if (bi < 0 || bi >= u_boneCount) continue;
|
|
154
|
+
skinned += (u_skin[bi] * p) * w;
|
|
155
|
+
total += w;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
vec4 local = total > 0.0 ? skinned / total : p;
|
|
159
|
+
gl_Position = u_mvp * vec4(local.xy, 0.0, 1.0);
|
|
160
|
+
v_uv = a_uv;
|
|
161
|
+
}`,Ha=`#version 300 es
|
|
162
|
+
precision mediump float;
|
|
163
|
+
in vec2 v_uv;
|
|
164
|
+
uniform sampler2D u_tex;
|
|
165
|
+
uniform vec4 u_color;
|
|
166
|
+
out vec4 fragColor;
|
|
167
|
+
void main() {
|
|
168
|
+
vec4 t = texture(u_tex, v_uv);
|
|
169
|
+
fragColor = t * u_color;
|
|
170
|
+
}`;function Ga(e){const n=(u,l)=>{const d=e.createShader(u);if(e.shaderSource(d,l),e.compileShader(d),!e.getShaderParameter(d,e.COMPILE_STATUS))throw new Error("MDL \u7740\u8272\u5668\u7F16\u8BD1\u5931\u8D25: "+e.getShaderInfoLog(d));return d};let t=Va(e),r=null;for(;;){const u=e.createProgram();let l=!1;try{e.attachShader(u,n(e.VERTEX_SHADER,Xa(t))),e.attachShader(u,n(e.FRAGMENT_SHADER,Ha)),e.bindAttribLocation(u,0,"a_pos"),e.bindAttribLocation(u,1,"a_uv"),e.bindAttribLocation(u,2,"a_bone"),e.bindAttribLocation(u,3,"a_weight"),e.linkProgram(u),l=!!e.getProgramParameter(u,e.LINK_STATUS)}catch{l=!1}if(l){r=u;break}if(e.deleteProgram(u),t<=dr)throw new Error("MDL \u7740\u8272\u5668\u94FE\u63A5\u5931\u8D25\uFF08\u9AA8\u6570\u5DF2\u964D\u5230 "+dr+"\uFF09");t=Math.max(dr,t>>1)}const o=t,i={mvp:e.getUniformLocation(r,"u_mvp"),tex:e.getUniformLocation(r,"u_tex"),skin:e.getUniformLocation(r,"u_skin"),boneCount:e.getUniformLocation(r,"u_boneCount"),color:e.getUniformLocation(r,"u_color")},s=new Float32Array(o*16);for(let u=0;u<o;u++)s.set(ti,u*16);const c=new WeakMap;function a(u){let l=c.get(u);if(l)return l;const d=e.createVertexArray();e.bindVertexArray(d);const h=u.vertexCount,p=new Float32Array(h*13);for(let v=0;v<h;v++){const b=v*13;p[b]=u.positions[v*3],p[b+1]=u.positions[v*3+1],p[b+2]=u.positions[v*3+2],p[b+3]=u.uvs[v*2],p[b+4]=u.uvs[v*2+1];for(let x=0;x<4;x++)p[b+5+x]=u.boneIdx[v*4+x],p[b+9+x]=u.weights[v*4+x]}const w=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,w),e.bufferData(e.ARRAY_BUFFER,p,e.STATIC_DRAW);const m=52;e.enableVertexAttribArray(0),e.vertexAttribPointer(0,3,e.FLOAT,!1,m,0),e.enableVertexAttribArray(1),e.vertexAttribPointer(1,2,e.FLOAT,!1,m,12),e.enableVertexAttribArray(2),e.vertexAttribPointer(2,4,e.FLOAT,!1,m,20),e.enableVertexAttribArray(3),e.vertexAttribPointer(3,4,e.FLOAT,!1,m,36);const g=e.createBuffer();return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,g),e.bufferData(e.ELEMENT_ARRAY_BUFFER,u.indices,e.STATIC_DRAW),e.bindVertexArray(null),l={vao:d,vbuf:w,ibuf:g},c.set(u,l),l}return{gl:e,prog:r,maxBones:o,upload(u){a(u)},draw(u,l,d,h){const p=a(l);e.useProgram(r),e.bindVertexArray(p.vao),e.activeTexture(e.TEXTURE0);const w=d.overrideTex||(h&&h.glTex?h.glTex:h);e.bindTexture(e.TEXTURE_2D,w),e.uniform1i(i.tex,0),e.uniformMatrix4fv(i.mvp,!1,u);const m=d.color||[1,1,1,1];e.uniform4f(i.color,m[0],m[1],m[2],m[3]);const g=Zr(l,d.time||0,d.animLayers,d.boneOverrides),v=Math.min(l.bones.length,o);g&&v>0?(e.uniformMatrix4fv(i.skin,!1,g.subarray(0,v*16)),e.uniform1i(i.boneCount,v)):(e.uniformMatrix4fv(i.skin,!1,s),e.uniform1i(i.boneCount,0)),d.blending==="additive"?(e.enable(e.BLEND),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE,e.ONE,e.ONE)):d.blending==="normal"?e.disable(e.BLEND):(e.enable(e.BLEND),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA));const b=l.indexType==="u32"?e.UNSIGNED_INT:e.UNSIGNED_SHORT;e.drawElements(e.TRIANGLES,l.indexCount,b,0),e.bindVertexArray(null)}}}const Ya=Object.freeze(Object.defineProperty({__proto__:null,applyAttachmentBindOrigins:$a,attachmentBind:ii,attachmentWorld:oi,bindWorldOf:ri,computeSkinMatrices:Zr,createMDLRenderer:Ga,followAttachments:ja,mat4MulOut:za,parentMeshToWorldDelta:Kr,parseMDL:Fa},Symbol.toStringTag,{value:"Module"}));function si(e,n,t){const r=Math.max(0,Number(t)||0),o=Math.max(1,Number(e)||1),i=Math.max(1,Number(n)||1);return r*2>=Math.min(o,i)?0:r}function qa(e,n,t){const r=Math.max(1,n.boxW),o=Math.max(1,n.boxH),i=si(r,o,n.padding||0),s=n.spacing||[0,0],c=Math.max(1,n.lineHeight||(n.pointsize||24)*1.25+s[1]),a=Math.max(1,r-i*2),u=n.limitwidth&&n.maxwidth>0?Math.min(n.maxwidth,a):1/0;function l(E){if(t(E)<=u)return[E];const _=[];let C="",N=-1;for(const D of E)if(C+=D,(D===" "||D===" ")&&(N=C.length),t(C)>u&&C.length>1)for(N>0?(_.push(C.slice(0,N-1)),C=C.slice(N)):(_.push(C.slice(0,-1)),C=D),N=-1;t(C)>u&&C.length>1;)_.push(C.slice(0,-1)),C=C.slice(-1);return C!==""&&_.push(C),_.length?_:[""]}let d=[];const h=String(e??"").split(`
|
|
171
|
+
`);for(const E of h)d.push(...l(E));let p=!1;if(n.limitrows&&n.maxrows>0&&d.length>n.maxrows&&(d=d.slice(0,n.maxrows),p=!0,n.limituseellipsis)){let E=d[n.maxrows-1];for(;E.length>0&&t(E+"\u2026")>u;)E=E.slice(0,-1);d[n.maxrows-1]=E+"\u2026"}const w=d.map(E=>t(E)),m=d.length*c,g=n.halign||"center",v=n.valign||"center",b=v==="top"?i:v==="bottom"?Math.max(i,o-i-m):(o-m)/2;return{lines:d.map((E,_)=>{const C=w[_],N=g==="left"?i:g==="right"?Math.max(i,r-i-C):(r-C)/2;return{text:E,width:C,x:N,y:b+_*c}}),lineHeight:c,totalH:m,truncated:p,boxW:r,boxH:o}}function Za(e,n,t){const r=n.boxW,o=n.boxH,i=t.color||[1,1,1],s=t.alpha!==void 0?t.alpha:1,c=t.brightness!==void 0?t.brightness:1;e.font=t.font;try{e.letterSpacing=(t.spacing&&t.spacing[0]?t.spacing[0]:0)+"px"}catch{}if(e.textBaseline="middle",t.opaquebackground){const u=t.backgroundcolor||[0,0,0],l=t.backgroundbrightness!==void 0?t.backgroundbrightness:1;e.fillStyle=`rgba(${Math.round(u[0]*255*l)},${Math.round(u[1]*255*l)},${Math.round(u[2]*255*l)},${s})`,e.fillRect(0,0,r,o)}const a=(u,l,d)=>{e.fillStyle=d;for(const h of n.lines)e.fillText(h.text,h.x+u,h.y+n.lineHeight/2+l)};if(t.castshadow){const u=Math.max(1,(t.pointsize||24)/10);a(u,u,`rgba(0,0,0,${s*.75})`)}a(0,0,`rgba(${Math.round(i[0]*255*c)},${Math.round(i[1]*255*c)},${Math.round(i[2]*255*c)},${s})`)}const ai=/^add[A-Z]/;function ci(){return{log:()=>{},warn:()=>{},error:()=>{},info:()=>{},debug:()=>{}}}function li(e){return new Proxy(e,{get(n,t,r){const o=Reflect.get(n,t,r);if(o==null&&typeof t=="string"&&t!=="then"){const i=()=>{};return n[t]=i,i}return o}})}function dn(e,n){return()=>{}}function ui(e,n){e.isScreensaver=!!n.isScreensaver,typeof n.isRunningInEditor=="boolean"&&(e.isRunningInEditor=n.isRunningInEditor),e.setInterval||(e.setInterval=n.setInterval||dn),e.setTimeout||(e.setTimeout=n.setTimeout||dn),e.clearTimeout||(e.clearTimeout=n.clearTimeout||(()=>{})),e.clearInterval||(e.clearInterval=n.clearInterval||(()=>{})),typeof n.openUserShortcut=="function"&&(e.openUserShortcut=n.openUserShortcut);const t=n.mediaControl||null;e.media={skipNext:()=>{if(t&&t.skipNext)return t.skipNext()},skipPrevious:()=>{if(t&&t.skipPrevious)return t.skipPrevious()},play:()=>{if(t&&t.play)return t.play()},pause:()=>{if(t&&t.pause)return t.pause()},playPause:()=>{if(t&&t.playPause)return t.playPause()},get snapshot(){return t&&t.snapshot?t.snapshot:null}};const r=n.windowTitle;Object.defineProperty(e,"windowTitle",{configurable:!0,enumerable:!0,get(){return r&&r.title?String(r.title):""}}),Object.defineProperty(e,"windowApp",{configurable:!0,enumerable:!0,get(){return r&&r.app?String(r.app):""}})}class pe{constructor(n,t,r){if(n!==null&&typeof n=="object")this.x=n.x!==void 0?n.x:n.width||0,this.y=t!==void 0?t:n.y!==void 0?n.y:n.height||0,this.z=r!==void 0?r:n.z||0;else if(t===void 0&&r===void 0){const o=Number(n)||0;this.x=o,this.y=o,this.z=o}else this.x=Number(n)||0,this.y=Number(t)||0,this.z=Number(r)||0}add(n){const t=new pe(n);return new pe(this.x+t.x,this.y+t.y,this.z+t.z)}subtract(n){const t=new pe(n);return new pe(this.x-t.x,this.y-t.y,this.z-t.z)}multiply(n){return n&&typeof n=="object"?new pe(this.x*n.x,this.y*n.y,this.z*n.z):new pe(this.x*n,this.y*n,this.z*n)}divide(n){const t=(r,o)=>o===0?0:r/o;return n&&typeof n=="object"?new pe(t(this.x,n.x),t(this.y,n.y),t(this.z,n.z)):new pe(t(this.x,n),t(this.y,n),t(this.z,n))}copy(){return new pe(this.x,this.y,this.z)}mix(n,t){const r=new pe(n),o=Number(t),i=Number.isFinite(o)?o:0;return new pe(this.x+(r.x-this.x)*i,this.y+(r.y-this.y)*i,this.z+(r.z-this.z)*i)}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}normalize(){const n=this.length();return n===0?new pe(0,0,0):new pe(this.x/n,this.y/n,this.z/n)}dot(n){const t=new pe(n);return this.x*t.x+this.y*t.y+this.z*t.z}toString(){return this.x+" "+this.y+" "+this.z}}const fi=pe;function di(e){if(e instanceof pe||!e||typeof e!="object"||Array.isArray(e)||!("x"in e)&&!("y"in e)&&!("z"in e)||Object.getPrototypeOf(e)===pe.prototype)return e;try{Object.setPrototypeOf(e,pe.prototype)}catch{}return e}function hi(e){return e&&e.cursorWorldPosition?e:{cursorWorldPosition:new pe(0,0,0),cursorScreenPosition:new pe(0,0,0),cursorPosition:new pe(0,0,0),cursorPositionLast:new pe(0,0,0),cursorLeftDown:!1}}function Ka(e,n,t){return new pe(e||0,n||0,t||0)}function Qa(){const e={cursorWorldPosition:new pe(0,0,0),cursorScreenPosition:new pe(0,0,0),cursorPosition:new pe(0,0,0),cursorPositionLast:new pe(0,0,0),cursorLeftDown:!1};return e.update=function(n){return n&&(e.cursorWorldPosition.x=n.wx,e.cursorWorldPosition.y=n.originY!=null?n.originY:n.wy,e.cursorWorldPosition.z=0,e.cursorScreenPosition.x=n.screenX,e.cursorScreenPosition.y=n.screenY,e.cursorScreenPosition.z=0,e.cursorPosition.x=n.u,e.cursorPosition.y=n.v,e.cursorPosition.z=0,e.cursorPositionLast.x=n.lastU,e.cursorPositionLast.y=n.lastV,e.cursorPositionLast.z=0,e.cursorLeftDown=!!n.leftDown),e},e}const mi={mix:(e,n,t)=>e+(n-e)*t,lerp:(e,n,t)=>e+(n-e)*t,clamp:(e,n,t)=>Math.min(t,Math.max(n,e)),saturate:e=>Math.min(1,Math.max(0,e)),smoothstep:(e,n,t)=>{const r=Math.min(1,Math.max(0,(t-e)/(n-e||1)));return r*r*(3-2*r)},smoothStep:(e,n,t)=>{const r=Math.min(1,Math.max(0,(t-e)/(n-e||1)));return r*r*(3-2*r)},random:(e,n)=>e===void 0?Math.random():e+Math.random()*((n===void 0?1:n)-e),randomInt:(e,n)=>Math.floor((e||0)+Math.random()*((n===void 0?1:n)+1-(e||0))),degrees:e=>e*180/Math.PI,radians:e=>e*Math.PI/180},pi={hsv2rgb:e=>{const n=e&&typeof e=="object"?e:{x:0,y:0,z:0},t=((Number(n.x)||0)%1+1)%1,r=Math.min(1,Math.max(0,Number(n.y)||0)),o=Math.min(1,Math.max(0,Number(n.z)||0)),i=Math.floor(t*6),s=t*6-i,c=o*(1-r),a=o*(1-s*r),u=o*(1-(1-s)*r),d=[[o,u,c],[a,o,c],[c,o,u],[c,a,o],[u,c,o],[o,c,a]][i%6];return{x:d[0],y:d[1],z:d[2]}},rgb2hsv:e=>{const n=e&&typeof e=="object"?e:{x:0,y:0,z:0},t=Number(n.x)||0,r=Number(n.y)||0,o=Number(n.z)||0,i=Math.max(t,r,o),s=Math.min(t,r,o),c=i-s;let a=0;return c>0&&(i===t?a=(r-o)/c/6:i===r?a=(2+(o-t)/c)/6:a=(4+(t-r)/c)/6,a<0&&(a+=1)),{x:a,y:i===0?0:c/i,z:i}}},gi={add:(e,n)=>({x:(e.x||0)+(n.x||0),y:(e.y||0)+(n.y||0),z:(e.z||0)+(n.z||0)}),subtract:(e,n)=>({x:(e.x||0)-(n.x||0),y:(e.y||0)-(n.y||0),z:(e.z||0)-(n.z||0)}),scale:(e,n)=>({x:(e.x||0)*n,y:(e.y||0)*n,z:(e.z||0)*n}),length:e=>Math.hypot(e.x||0,e.y||0,e.z||0),dot:(e,n)=>(e.x||0)*(n.x||0)+(e.y||0)*(n.y||0)+(e.z||0)*(n.z||0),normalize:e=>{const n=Math.hypot(e.x||0,e.y||0,e.z||0)||1;return{x:(e.x||0)/n,y:(e.y||0)/n,z:(e.z||0)/n}},mix:(e,n,t)=>({x:(e.x||0)+((n.x||0)-(e.x||0))*t,y:(e.y||0)+((n.y||0)-(e.y||0))*t,z:(e.z||0)+((n.z||0)-(e.z||0))*t})},bi=Object.freeze({PLAYBACK_STOPPED:0,PLAYBACK_PLAYING:1,PLAYBACK_PAUSED:2}),hr=["mediaPropertiesChanged","mediaThumbnailChanged","mediaPlaybackChanged","mediaTimelineChanged","mediaStatusChanged","mediaLyricsChanged"],Ja=["scriptProperties","engine","WEMath","WEColor","WEVector","createScriptProperties","shared","console","process","globalThis","self","window","document","require","module","exports","fetch","XMLHttpRequest","Worker","importScripts","location","navigator","alert","confirm","prompt","setTimeout","setInterval","clearTimeout","clearInterval","requestAnimationFrame","cancelAnimationFrame","performance","Function","Vec3","Vec2","input","thisLayer","thisScene","thisObject","localStorage","MediaPlaybackEvent"],ec=new RegExp(`(^[ \\t]*|;|\\})[ \\t]*(?:var|let|const)[ \\t]+(?=(?:${Ja.join("|")})\\b)`,"gm"),tc={WEMath:!0,WEColor:!0,WEVector:!0};function vi(e){return typeof e!="string"?e:e.replace(/([!=])==(\s*)(['"])(-?\d+)\3/g,"$1=$2$3$4$3")}function xi(e){return vi(e).replace(/\bimport\s*\*\s*as\s+(\w+)\s+from\s*['"]([^'"]+)['"]\s*;?/g,(n,t,r)=>{const o=String(r);return tc[o]?t===o?"":`var ${t} = ${o};`:`var ${t} = {};`}).replace(/(^[ \t]*|;|\})[ \t]*import\s+(?:[^;'"]+\s+from\s+)?['"][^'"]*['"];?[ \t]*/gm,"$1").replace(/(^[ \t]*|;|\})[ \t]*export[ \t]+(?=(?:async[ \t]+)?function\b|(?:var|let|const)\b)/gm,"$1").replace(ec,"$1")}function $n(e){return e!==null&&typeof e=="object"&&"value"in e?e.value:e}function nc(e,n,t={}){if(typeof e!="string"||e.length===0)return null;const r=xi(e);if(r===e&&e.indexOf("update")<0)return null;const o={};if(n&&typeof n=="object")for(const[v,b]of Object.entries(n))o[v]=$n(b);const i=new Proxy(()=>i,{apply(){return i},get(v,b){if(b==="finish")return()=>o;if(typeof b=="string"&&ai.test(b))return x=>(x&&typeof x=="object"&&typeof x.name=="string"&&!(x.name in o)&&(o[x.name]=$n(x.value)),i)}}),s={text:t.text!==void 0&&t.text!==null?String(t.text):"",font:t.font||"",pointsize:t.pointsize||24,color:(t.color||[1,1,1]).slice(),angles:(t.angles||[0,0,0]).slice(),scale:(t.scale||[1,1,1]).slice(),visible:t.visible!==!1,origin:Jr(t.origin||[0,0,0])},c={registerAsset:()=>{},frametime:1/60,runtime:0,canvasSize:t.canvasSize||{width:1920,height:1080},screenResolution:t.screenResolution||{x:1920,y:1080},timeOfDay:typeof t.timeOfDay=="number"?t.timeOfDay:0,userProperties:t.userProperties||{},AUDIO_RESOLUTION_16:16,AUDIO_RESOLUTION_32:32,AUDIO_RESOLUTION_64:64,setTimeout:t.setTimeout||dn,clearTimeout:t.clearTimeout||(()=>{}),setInterval:t.setInterval||dn,clearInterval:t.clearInterval||(()=>{}),openUserShortcut:t.openUserShortcut||(()=>{}),isRunningInEditor:!!t.isRunningInEditor,isScreensaver:!!t.isScreensaver};ui(c,t);const a=t.audioViews;c.registerAudioBuffers=v=>{const b=Math.max(1,Math.min(64,Math.floor(Number(v)||0)));let x=a?a.get(b):void 0;return x||(x={left:new Float32Array(b),right:new Float32Array(b),average:new Float32Array(b)},a&&a.set(b,x)),x};const u={getLayer(v){const b=t.getLayerText?t.getLayerText(String(v)):void 0;return{text:b!=null?String(b):""}},createLayer(v){return{text:"",visible:!1,color:[0,0,0],alpha:1,pointsize:t.pointsize||24,font:t.font||"",origin:Jr(t.origin||[0,0,0]),angles:[0,0,0],scale:[1,1,1]}},sortLayer:()=>{},getLayerIndex:()=>0},l=t.shared||{},d={console:ci()},h=hi(t.inputView);let p;try{p=new Function("scriptProperties","engine","thisLayer","thisScene","WEMath","WEColor","WEVector","createScriptProperties","shared","console","process","globalThis","self","window","document","require","module","exports","fetch","XMLHttpRequest","Worker","importScripts","location","navigator","alert","confirm","prompt","setTimeout","setInterval","clearTimeout","clearInterval","requestAnimationFrame","cancelAnimationFrame","performance","Function","Vec3","Vec2","input","MediaPlaybackEvent",`"use strict";
|
|
172
|
+
`+r+`
|
|
173
|
+
;return {update: typeof update === "function" ? update : null,init: typeof init === "function" ? init : null,applyUserProperties: typeof applyUserProperties === "function" ? applyUserProperties : null,cursorClick: typeof cursorClick === "function" ? cursorClick : null,cursorEnter: typeof cursorEnter === "function" ? cursorEnter : null,cursorLeave: typeof cursorLeave === "function" ? cursorLeave : null,cursorDown: typeof cursorDown === "function" ? cursorDown : null,cursorUp: typeof cursorUp === "function" ? cursorUp : null,cursorMove: typeof cursorMove === "function" ? cursorMove : null,`+hr.map(b=>`${b}: typeof ${b} === "function" ? ${b} : null,`).join("")+"dummy_: 0};")(o,li(c),s,u,mi,pi,gi,i,l,d.console,void 0,d,d,d,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,pe,fi,h,bi)}catch(v){return t.onError&&t.onError(v,"parse"),null}const w=!!(p&&hr.some(v=>p[v])),m=!!(p&&typeof p.applyUserProperties=="function");if(!p||!p.update&&!w&&!m)return null;const g={engine:c,thisLayer:s,scriptProperties:o,hasUpdate:!!p.update,hasCursorHook:!!(p.cursorClick||p.cursorEnter||p.cursorLeave||p.cursorDown||p.cursorUp||p.cursorMove),hasMediaHook:w,hasApplyHook:m,errCount:0,disabled:!1,init(v){if(p.init)try{p.init(v)}catch(b){g.errCount++,t.onError&&t.onError(b,"init")}},applyUserProperties(v){if(p.applyUserProperties)try{p.applyUserProperties(v||{})}catch(b){g.errCount++,t.onError&&t.onError(b,"applyUserProperties")}},callUpdate(v){if(!p.update||g.disabled)return null;const b=s.text;let x;try{x=p.update(b!==""?b:v!==void 0?v:"")}catch(E){return g.errCount++,t.onError&&t.onError(E,"update"),g.errCount>=3&&(g.disabled=!0),null}return typeof x=="string"?(s.text=x,x):typeof x=="boolean"?null:x!=null?(s.text=String(x),s.text):s.text!==b?s.text:null},callCursor(v,b){if(g.disabled)return;const x=p[v];if(typeof x=="function")try{return x(b)}catch(E){g.errCount++,t.onError&&t.onError(E,v),g.errCount>=3&&(g.disabled=!0);return}},callMedia(v,b){if(g.disabled)return;const x=p[v];if(typeof x=="function")try{return x(b)}catch(E){g.errCount++,t.onError&&t.onError(E,v),g.errCount>=3&&(g.disabled=!0);return}}};return g}function jn(){const e={play:()=>e,pause:()=>e,stop:()=>e,setFrame:()=>e,setRate:()=>e,setBlend:()=>e,setVisible:()=>e,isPlaying:Object.assign(()=>!1,{valueOf:()=>!1,toString:()=>"false"}),get frame(){return 0},get frameCount(){return 0},get rate(){return 1}};return e}function rc(e){if(!e)return jn();if(e.textureAnimation)return e.textureAnimation.api;const n={frame:null,playing:!0,rate:1},t={play:()=>(n.playing=!0,t),pause:()=>(n.playing=!1,t),stop:()=>(n.playing=!1,t),setFrame:r=>{const o=Number(r);return n.frame=Number.isFinite(o)?o:0,t},setRate:r=>{const o=Number(r);return Number.isFinite(o)&&(n.rate=o),t},setBlend:()=>t,setVisible:r=>(e.visible=!!r,t),isPlaying:Object.assign(()=>n.playing,{valueOf:()=>n.playing,toString:()=>String(n.playing)}),get frame(){return n.frame===null?0:n.frame},get frameCount(){return e.spriteFrameCount||0},get rate(){return n.rate}};return n.api=t,e.textureAnimation=n,t}function oc(e){if(e&&e.videoTextureApi)return e.videoTextureApi;const n=()=>e&&e.videoCtl||null,t={get duration(){const r=n(),o=r&&typeof r.duration=="function"?r.duration():0;return Number.isFinite(o)?o:0},get rate(){const r=n(),o=r&&typeof r.getRate=="function"?r.getRate():1;return Number.isFinite(o)&&o>0?o:1},set rate(r){const o=n(),i=Number(r);o&&typeof o.setRate=="function"&&Number.isFinite(i)&&o.setRate(i)},get loop(){const r=n();return r&&typeof r.getLoop=="function"?!!r.getLoop():!0},set loop(r){const o=n();o&&typeof o.setLoop=="function"&&o.setLoop(!!r)},play:()=>{const r=n();r&&r.play&&r.play()},pause:()=>{const r=n();r&&r.pause&&r.pause()},stop:()=>{const r=n();r&&r.stop&&r.stop()},isPlaying:Object.assign(()=>{const r=n();return!!(r&&typeof r.isPlaying=="function"&&r.isPlaying())},{valueOf(){const r=n();return!!(r&&typeof r.isPlaying=="function"&&r.isPlaying())},toString(){const r=n();return String(!!(r&&typeof r.isPlaying=="function"&&r.isPlaying()))}}),getCurrentTime:()=>{const r=n(),o=r&&typeof r.getCurrentTime=="function"?r.getCurrentTime():0;return Number.isFinite(o)?o:0},setCurrentTime:r=>{const o=n(),i=Number(r);o&&typeof o.setCurrentTime=="function"&&Number.isFinite(i)&&o.setCurrentTime(i)},addEndedCallback:r=>{const o=n();typeof r=="function"&&o&&typeof o.addEndedCallback=="function"&&o.addEndedCallback(r)}};return e&&(e.videoTextureApi=t),t}function ic(){const e=new Map,n=r=>e.has(String(r))?e.get(String(r)):null,t=(r,o)=>{e.set(String(r),String(o))};return{getItem:n,setItem:t,get:n,set:t,removeItem:r=>{e.delete(String(r))},remove:r=>{e.delete(String(r))},clear:()=>{e.clear()},key:r=>Array.from(e.keys())[r]??null,get length(){return e.size}}}function sc(e,n){const t=e&&e.puppet,r=t&&t.bones||null,o=r?r.length:0,i=e&&e.origin||[0,0,0],s=e&&e.scale||[1,1,1],c=s[0]||1,a=s[1]||1,u=(w,m)=>[i[0]+w*c,i[1]-m*a],l=(w,m)=>[(w-i[0])/c,-(m-i[1])/a],d=w=>{const m=n.get(w);if(m)return[m[0],m[1],m[2]];const g=r[w].matrix;return[g[12],g[13],g[14]]},h=w=>{let m=0,g=0,v=w;for(let b=0;v>=0&&v<o&&b<64;b++){const x=d(v);m+=x[0],g+=x[1],v=r[v].parent}return u(m,g)},p=w=>{const m={translation(g){if(g===void 0){const _=h(w);return new pe(_[0],_[1],0)}const v=Xt(g);let b=0,x=0;if(r[w].parent>=0){const _=h(r[w].parent),C=l(_[0],_[1]);b=C[0],x=C[1]}const E=l(v[0],v[1]);return n.set(w,[E[0]-b,E[1]-x,0]),m},rotation(){return m},scale(){return m}};return m};return{getBoneCount:()=>o,getBoneTransform:w=>{const m=Math.floor(Number(w));if(!r||!(m>=0)||m>=o){const g={translation(v){return v===void 0?new pe(0,0,0):g},rotation(){return g},scale(){return g}};return g}return p(m)},setBoneTransform:(w,m)=>{const g=Math.floor(Number(w));!r||!(g>=0)||g>=o},applyBonePhysicsImpulse:()=>{}}}function Qr(e){return{get visible(){return e?!!e.visible:!1},set visible(n){e&&(e.visible=!!n)},get name(){return e&&e.name||""},getMaterial:()=>null}}function yi(e,n){if(e==null)return null;const t=r=>{if(!r)return null;if(n&&typeof n.getSceneLayer=="function"){const o=n.getSceneLayer(String(r));if(o)return o}return n&&n.layer&&n.layer.name===r?n.layer:null};return t(typeof e=="object"?e.name:String(e))}function ac(e,n){e&&(e.visibleSelf=!1,e.visible=!1,e.destroyed=!0,n&&typeof n.recomputeVisibility=="function"&&n.recomputeVisibility())}function wi(e,n){if(typeof e!="string"||!e||/\/workshop\//.test(e))return e;const t=n!=null&&n!==""?String(n):"";if(!t)return e;const r=e.match(/^(models|materials|shaders|particles|effects)\/(.+)$/);return r?`${r[1]}/workshop/${t}/${r[2]}`:e}function cc(e){if(typeof e!="string")return null;const n=e.match(/export\s+let\s+__workshopId\s*=\s*['"](\d+)['"]/);return n?n[1]:null}function lc(e){const n=t=>mr(t||null,e);return{getLayer(t){if(e.getSceneLayer){const r=e.getSceneLayer(String(t));if(r&&!r.destroyed)return n(r)}return n(null)},createLayer(t){if(typeof e.createSceneLayer!="function")return n(null);let r=t;if(typeof t=="string"){const i=typeof e.getWorkshopId=="function"?e.getWorkshopId():e.workshopId;r=wi(t,i)}const o=e.createSceneLayer(r);return n(o||null)},destroyLayer(t){ac(yi(t,e),e)},sortLayer:()=>{},getLayerIndex(t){const r=typeof e.enumerateSceneLayers=="function"?e.enumerateSceneLayers():[],o=t&&typeof t=="object"?t.name:String(t||""),i=r.findIndex(s=>s&&s.name===o);return i<0?0:i},enumerateLayers(){const t=typeof e.enumerateSceneLayers=="function"?e.enumerateSceneLayers():[],r=[];for(const o of t)o&&!o.destroyed&&r.push(n(o));return r},getAnimation(t){if(typeof e.getSceneAnimation=="function"){const r=e.getSceneAnimation(t);if(r)return r}return jn()},getCameraTransforms(){const t=e.cameraTransforms||{zoom:1};return{zoom:typeof t.zoom=="number"?t.zoom:1,center:t.center||null,eye:t.eye||null,parallaxAmount:typeof t.parallaxAmount=="number"?t.parallaxAmount:0}},setCameraTransforms(t){const r=e.cameraTransforms;!r||!t||typeof t!="object"||(typeof t.zoom=="number"&&Number.isFinite(t.zoom)&&t.zoom>0&&(r.zoom=t.zoom),t.center!==void 0&&(r.center=t.center),t.eye!==void 0&&(r.eye=t.eye),typeof t.parallaxAmount=="number"&&(r.parallaxAmount=t.parallaxAmount))},getInitialLayerConfig(t){return typeof e.getInitialLayerConfig=="function"?e.getInitialLayerConfig(t):yi(t,e)||null}}}function mr(e,n){const t=s=>Jr(Array.isArray(s)?s:[0,0,0]),r=n&&typeof n.getBoneOverrides=="function"&&e?n.getBoneOverrides(e):null,o={origin:t(e?e.origin:[0,0,0]),scale:t(e?e.scale:[1,1,1]),angles:dc(e),size:t(e?e.size:[0,0,0]),color:t(e?e.color:[1,1,1])},i={get name(){return e&&e.name||""},get id(){return e&&e.id||0},get visible(){const s=n&&n.targetEffect;return s?!!s.visible:e?e.visibleSelf!==void 0?!!e.visibleSelf:!!e.visible:!1},set visible(s){const c=n&&n.targetEffect;if(c){c.visible=!!s;return}e&&(e.visibleSelf=!!s,typeof n.recomputeVisibility=="function"?n.recomputeVisibility():e.visible=!!s)},get alpha(){return e&&typeof e.alpha=="number"?e.alpha:1},set alpha(s){e&&(e.alpha=Number(s)||0)},get brightness(){return e&&typeof e.brightness=="number"?e.brightness:1},set brightness(s){e&&(e.brightness=Number(s)||0)},get text(){return e&&e.text!==void 0?String(e.text):""},set text(s){e&&typeof s!="boolean"&&(e.text=s==null?"":String(s))},get pointsize(){return e&&e.textPointsize||24},set pointsize(s){e&&(e.textPointsize=Number(s)||24)},get font(){return e&&e.textFont||""},set font(s){e&&(e.textFont=String(s||""))},get alignment(){return e&&e.alignment||"center"},set alignment(s){if(!e)return;const c=String(s||"center").toLowerCase();e.alignment=c==="centre"?"center":c},...e&&e.puppet&&r?sc(e,r):{getBoneCount:()=>0,getBoneTransform:()=>{const s={translation(c){return c===void 0?new pe(0,0,0):s},rotation(){return s},scale(){return s}};return s},setBoneTransform:()=>{},applyBonePhysicsImpulse:()=>{}},getParent:()=>{if(!e||e.parentId==null)return null;const s=n&&typeof n.getSceneLayerById=="function"?n.getSceneLayerById(e.parentId):null;return!s||s.destroyed?null:mr(s,n)},getChildren:()=>{const s=e&&e.childIds||[];if(!s.length)return[];const c=n&&typeof n.getSceneLayerById=="function"?n.getSceneLayerById:null;if(!c)return[];const a=[];for(const u of s){const l=c(u);l&&!l.destroyed&&a.push(mr(l,n))}return a},getAnimation:s=>{const c=e&&e.animations,a=e&&e.animationList||[];return s==null||s===""?a[0]||jn():c&&c[s]?c[s]:typeof s=="number"&&a[s]?a[s]:typeof s=="string"&&/^\d+$/.test(s)&&a[Number(s)]?a[Number(s)]:jn()},getAnimationLayer:s=>{const c=e&&e.animations,a=e&&e.animationList||[];return c&&c[s]?c[s]:typeof s=="number"&&a[s]?a[s]:typeof s=="string"&&/^\d+$/.test(s)&&a[Number(s)]?a[Number(s)]:jn()},getAnimationLayerCount:()=>(e&&e.animationList||[]).length,getTextureAnimation:()=>rc(e),play:()=>{e&&e.soundCtl&&e.soundCtl.play&&e.soundCtl.play(),e&&e.videoCtl&&e.videoCtl.play&&e.videoCtl.play()},pause:()=>{e&&e.soundCtl&&e.soundCtl.pause&&e.soundCtl.pause(),e&&e.videoCtl&&e.videoCtl.pause&&e.videoCtl.pause()},stop:()=>{e&&e.soundCtl&&e.soundCtl.stop&&e.soundCtl.stop(),e&&e.videoCtl&&e.videoCtl.stop&&e.videoCtl.stop()},isPlaying:Object.assign(()=>{const s=e&&e.soundCtl&&typeof e.soundCtl.isPlaying=="function"&&e.soundCtl.isPlaying(),c=e&&e.videoCtl&&typeof e.videoCtl.isPlaying=="function"&&e.videoCtl.isPlaying();return!!(s||c)},{valueOf(){const s=e&&e.soundCtl&&typeof e.soundCtl.isPlaying=="function"&&e.soundCtl.isPlaying(),c=e&&e.videoCtl&&typeof e.videoCtl.isPlaying=="function"&&e.videoCtl.isPlaying();return!!(s||c)},toString(){const s=e&&e.soundCtl&&typeof e.soundCtl.isPlaying=="function"&&e.soundCtl.isPlaying(),c=e&&e.videoCtl&&typeof e.videoCtl.isPlaying=="function"&&e.videoCtl.isPlaying();return String(!!(s||c))}}),get volume(){if(e&&e.soundCtl&&typeof e.soundCtl.getVolume=="function")return e.soundCtl.getVolume();const s=e&&e.soundprops&&e.soundprops.volume;return typeof s=="number"?s:1},set volume(s){const c=Number(s);if(!Number.isFinite(c)||!e)return;const a=Math.max(0,Math.min(1,c));e.soundprops&&(e.soundprops.volume=a),e.soundCtl&&typeof e.soundCtl.setVolume=="function"&&e.soundCtl.setVolume(a)},getVideoTexture:()=>oc(e),getTransformMatrix:()=>{const s=e&&e.origin||[0,0,0],c=new Float32Array(16);return c[0]=1,c[5]=1,c[10]=1,c[15]=1,c[12]=s[0]||0,c[13]=s[1]||0,c[14]=s[2]||0,{m:c}},getEffect:s=>{const c=e&&e.effects||null;if(!c||c.length===0)return Qr(null);if(typeof s=="number"||typeof s=="string"&&/^\d+$/.test(s))return Qr(c[Number(s)]||null);const a=String(s);return Qr(c.find(u=>u&&u.name===a)||null)}};Object.defineProperty(i,"angles",{enumerable:!0,get(){return o.angles},set(s){if(e&&Array.isArray(e.angles)){const c=Mi(s);e.angles[0]=c[0],e.angles[1]=c[1],e.angles[2]=c[2]}}});for(const s of["origin","scale","size","color"])Object.defineProperty(i,s,{enumerable:!0,get(){if(e&&Array.isArray(e[s])){const c=e[s];o[s].x=c[0]||0,o[s].y=c[1]||0,o[s].z=c[2]||0}return o[s]},set(c){const a=Xt(c);o[s].x=a[0],o[s].y=a[1],o[s].z=a[2],e&&Array.isArray(e[s])&&s!=="size"&&(e[s][0]=a[0],e[s][1]=a[1],e[s][2]=a[2])}});return i}function uc(e,n,t={}){if(typeof e!="string"||e.length===0)return null;const r=xi(e),o={};if(n&&typeof n=="object")for(const[E,_]of Object.entries(n))if(_!==null&&typeof _=="object"&&typeof _.user=="string"){const C=t.userProperties?t.userProperties[_.user]:void 0;o[E]=C!==void 0?C:$n(_)}else o[E]=$n(_);const i=new Proxy(()=>i,{apply(){return i},get(E,_){if(_==="finish")return()=>o;if(typeof _=="string"&&ai.test(_))return C=>(C&&typeof C=="object"&&typeof C.name=="string"&&!(C.name in o)&&(o[C.name]=$n(C.value)),i)}}),s={registerAsset:()=>{},frametime:1/60,runtime:0,canvasSize:t.canvasSize||{width:1920,height:1080},screenResolution:t.screenResolution||{x:1920,y:1080},timeOfDay:typeof t.timeOfDay=="number"?t.timeOfDay:0,userProperties:t.userProperties||{},AUDIO_RESOLUTION_16:16,AUDIO_RESOLUTION_32:32,AUDIO_RESOLUTION_64:64,setTimeout:t.setTimeout||dn,clearTimeout:t.clearTimeout||(()=>{}),setInterval:t.setInterval||dn,clearInterval:t.clearInterval||(()=>{}),openUserShortcut:t.openUserShortcut||(()=>{}),isRunningInEditor:!!t.isRunningInEditor,isScreensaver:!!t.isScreensaver};ui(s,t);const c=t.audioViews;s.registerAudioBuffers=E=>{const _=Math.max(1,Math.min(64,Math.floor(Number(E)||0)));let C=c?c.get(_):void 0;return C||(C={left:new Float32Array(_),right:new Float32Array(_),average:new Float32Array(_)},c&&c.set(_,C)),C};const a=t.shared||{},u={console:ci()},l=hi(t.inputView),d=t.layer||null,h=t.workshopId!=null?t.workshopId:cc(e),p=mr(d,t),w=lc({...t,workshopId:h,getWorkshopId:()=>h});let m;try{m=new Function("scriptProperties","engine","WEMath","WEColor","WEVector","createScriptProperties","shared","console","process","globalThis","self","window","document","require","module","exports","fetch","XMLHttpRequest","Worker","importScripts","location","navigator","alert","confirm","prompt","setTimeout","setInterval","clearTimeout","clearInterval","requestAnimationFrame","cancelAnimationFrame","performance","Function","Vec3","Vec2","input","thisLayer","thisScene","thisObject","localStorage","MediaPlaybackEvent",`"use strict";
|
|
174
|
+
`+r+`
|
|
175
|
+
;return {update: typeof update === "function" ? update : null,init: typeof init === "function" ? init : null,applyUserProperties: typeof applyUserProperties === "function" ? applyUserProperties : null,cursorClick: typeof cursorClick === "function" ? cursorClick : null,cursorEnter: typeof cursorEnter === "function" ? cursorEnter : null,cursorLeave: typeof cursorLeave === "function" ? cursorLeave : null,cursorDown: typeof cursorDown === "function" ? cursorDown : null,cursorUp: typeof cursorUp === "function" ? cursorUp : null,cursorMove: typeof cursorMove === "function" ? cursorMove : null,`+hr.map(_=>`${_}: typeof ${_} === "function" ? ${_} : null,`).join("")+"dummy_: 0};")(o,li(s),mi,pi,gi,i,a,u.console,void 0,u,u,u,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,pe,fi,l,p,w,p,ic(),bi)}catch(E){return t.onError&&t.onError(E,"parse"),null}const g=!!(m&&(m.cursorClick||m.cursorEnter||m.cursorLeave||m.cursorDown||m.cursorUp||m.cursorMove)),v=!!(m&&hr.some(E=>m[E])),b=!!(m&&typeof m.applyUserProperties=="function");if(!m||!m.update&&!g&&!v&&!b)return null;const x={engine:s,scriptProperties:o,hasUpdate:!!m.update,hasCursorHook:g,hasApplyHook:b,errCount:0,disabled:!1,init(E){if(m.init)try{m.init(di(E))}catch(_){x.errCount++,t.onError&&t.onError(_,"init")}},applyUserProperties(E){if(m.applyUserProperties)try{m.applyUserProperties(E||{})}catch(_){x.errCount++,t.onError&&t.onError(_,"applyUserProperties")}},callUpdate(E){if(x.disabled||!m.update)return;let _;try{_=m.update(di(E))}catch(C){x.errCount++,t.onError&&t.onError(C,"update"),x.errCount>=3&&(x.disabled=!0);return}return _},hasCursorHook:g,callCursor(E,_){if(x.disabled)return;const C=m[E];if(typeof C=="function")try{return C(_)}catch(N){x.errCount++,t.onError&&t.onError(N,E),x.errCount>=3&&(x.disabled=!0);return}},hasMediaHook:v,callMedia(E,_){if(x.disabled)return;const C=m[E];if(typeof C=="function")try{return C(_)}catch(N){x.errCount++,t.onError&&t.onError(N,E),x.errCount>=3&&(x.disabled=!0);return}}};return x}function Jr(e){const n=Array.isArray(e)?e:[0,0,0],t={x:n[0]||0,y:n[1]||0,z:n[2]||0},r={get x(){return t.x},set x(o){t.x=Number(o)||0},get y(){return t.y},set y(o){t.y=Number(o)||0},get z(){return t.z},set z(o){t.z=Number(o)||0},add(o){const i=Xt(o);return t.x+=i[0],t.y+=i[1],t.z+=i[2],r},subtract(o){const i=Xt(o);return t.x-=i[0],t.y-=i[1],t.z-=i[2],r},multiply(o){if(o&&typeof o=="object"){const i=Xt(o);t.x*=i[0],t.y*=i[1],t.z*=i[2]}else{const i=Number(o)||0;t.x*=i,t.y*=i,t.z*=i}return r},copy(){return new pe(t.x,t.y,t.z)},length(){return Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z)},toArray(){return[t.x,t.y,t.z]}};return r}function Xt(e){if(Array.isArray(e))return[e[0]||0,e[1]||0,e[2]||0];if(e&&typeof e=="object")return[e.x||0,e.y||0,e.z||0];const n=Number(e)||0;return[n,n,n]}const pr=Math.PI/180,gr=180/Math.PI;function fc(e){const n=Array.isArray(e)?e:[0,0,0];return{x:(n[0]||0)*gr,y:(n[1]||0)*gr,z:(n[2]||0)*gr}}function Mi(e){const n=Xt(e);return[n[0]*pr,n[1]*pr,n[2]*pr]}function dc(e){const n={x:0,y:1,z:2},t={add(r){const o=Xt(r);return t.x+=o[0],t.y+=o[1],t.z+=o[2],t},subtract(r){const o=Xt(r);return t.x-=o[0],t.y-=o[1],t.z-=o[2],t},multiply(r){return t.x*=r,t.y*=r,t.z*=r,t},toArray(){return[t.x,t.y,t.z]}};for(const r of["x","y","z"])Object.defineProperty(t,r,{enumerable:!0,get(){return!e||!Array.isArray(e.angles)?0:(e.angles[n[r]]||0)*gr},set(o){!e||!Array.isArray(e.angles)||(e.angles[n[r]]=(Number(o)||0)*pr)}});return t}function hc(e,n){return Math.min(256,Math.ceil(Math.max(1,Number(e)||1)*2+8))}function mc(e){for(const n of e&&e.effects?e.effects:[]){if(n&&n.visible===!1)continue;if(String(n&&(n.file||n.name)||"").includes("tint"))return!0;for(const r of n&&n.passes||[])for(const o of r&&r.textures||[])if(o&&String(o).toLowerCase().includes("mask"))return!0}return!1}const pc=Object.freeze(Object.defineProperty({__proto__:null,createInputView:Qa,drawTextLayer:Za,effectiveTextPadding:si,evalObjectScript:uc,evalTextScript:nc,layoutText:qa,makeCursorEventVec:Ka,radToScriptAngles:fc,resolveWorkshopAssetPath:wi,rewriteComboStringEq:vi,scriptAnglesToRad:Mi,textCanvasMargin:hc,textLayerHasTintMask:mc},Symbol.toStringTag,{value:"Module"}));function gc(e={},n={}){const t=typeof e.setTimeout=="function"?e.setTimeout:null,r=typeof e.clearTimeout=="function"?e.clearTimeout:null,o=typeof e.setInterval=="function"?e.setInterval:null,i=typeof e.clearInterval=="function"?e.clearInterval:null,s=typeof n.onError=="function"?n.onError:null,c=new Set,a=g=>{const v=Number(g);return Number.isFinite(v)&&v>0?v:0},u=g=>()=>{try{g()}catch(v){s&&s(v,"timer")}},l=(g,v)=>{const b=()=>{g.fired||(g.fired=!0,c.delete(b),v&&g.handle!=null&&v(g.handle))};return b.handle=null,b.valueOf=()=>typeof g.handle=="number"?g.handle:0,b};function d(g,v){if(typeof g!="function")return l({fired:!0,handle:null},null);const b={fired:!1,handle:null},x=l(b,r);return c.add(x),b.handle=t?t(u(()=>{b.fired=!0,c.delete(x),g()}),a(v)):null,x.handle=b.handle,x}function h(g,v){if(typeof g!="function")return l({fired:!0,handle:null},null);const b={fired:!1,handle:null},x=l(b,i);return c.add(x),b.handle=o?o(u(g),a(v)):null,x.handle=b.handle,x}function p(g){if(typeof g=="function"){g();return}r&&g!=null&&r(g)}function w(g){if(typeof g=="function"){g();return}i&&g!=null&&i(g)}function m(){for(const g of[...c])g();c.clear()}return{setTimeout:d,setInterval:h,clearTimeout:p,clearInterval:w,dispose:m,pendingCount:()=>c.size}}const bc=Object.freeze(Object.defineProperty({__proto__:null,createEngineTimers:gc},Symbol.toStringTag,{value:"Module"}));function vc(e){let n=e>>>0;return function(){n|=0,n=n+1831565813|0;let t=Math.imul(n^n>>>15,1|n);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}function eo(e,n){const t=Math.floor(e),r=e-t,o=s=>{const c=Math.sin((s*127.1+n*311.7)*43758.5453)*43758.5453;return(c-Math.floor(c))*2-1},i=r*r*(3-2*r);return o(t)*(1-i)+o(t+1)*i}const xc=32,yc=112,_i=60/yc,wc=3.2;function Mc(e){const n=new Float32Array(16),t=new Float32Array(16),r=new Float32Array(16);for(let o=0;o<16;o++)n[o]=o%4===0?1:o%4===2?.38+e()*.15:e()<.08?.5:0,t[o]=o%8===4?1:e()<.06?.6:0,r[o]=o%2===1?.5+e()*.4:o%4===0?.25:e()<.3?.3:0;return{kick:n,snare:t,hat:r}}function _c(e=20260830){const n=vc(e),t=Mc(n),r=new Float32Array(64);for(let g=0;g<64;g++)r[g]=n()*64;const o=64,i=new Float32Array(o),s=new Float32Array(o),c=new Float32Array(o),a=new Float32Array(o),u=new Float32Array(32),l=new Float32Array(32),d=new Float32Array(16),h=new Float32Array(16),p={left64:c,right64:a,left32:u,right32:l,left16:d,right16:h,level:0,silent:!1};function w(g,v){const b=v.length/g.length;for(let x=0;x<g.length;x++){let E=0;const _=Math.floor(x*b),C=Math.floor((x+1)*b);for(let N=_;N<Math.max(_+1,C);N++)E+=v[N];g[x]=E/Math.max(1,C-_)}}function m(g){const v=g/_i,b=v*4,x=Math.floor(b)%16,E=b-Math.floor(b),_=Math.exp(-E*_i*14),C=g%xc,N=C>=27&&C<29,D=C>=29?(C-29)/3:0,k=C>=24&&C<27?1-(C-24)/3:0,O=N?0:D>0?D*D:k>0?0:1,j=N?0:k>0?.35:1,W=t.kick[x]*_*O,K=(t.snare[x]*_+t.hat[x]*_*.7)*O,V=t.hat[x]*_*O,G=D>0?Math.pow(D,3)*(.4+.6*Math.abs(eo(b*2,7))):0;let Q=0;for(let q=0;q<o;q++){const te=q/o,me=Math.pow(1-te*.85,1.6);let ye=j*(.5+.3*eo(v*.5+r[q]*.05,q%8));if(ye*=.35+.65*te,te<.2&&(ye+=W*(1-te/.2)),te>=.12&&te<.62){const Pe=1-Math.abs(te-.34)/.28;Pe>0&&(ye+=K*.55*Pe)}te>=.45&&(ye+=V*.5*((te-.45)/.55)),ye+=G*.5,ye*=me,ye=Math.min(1,ye*wc);const We=.06+te*.2,Ve=eo(v*.13+q*.35,11)*We;let Se=Math.min(1,Math.max(0,ye*(1-Ve))),Je=Math.min(1,Math.max(0,ye*(1+Ve)));const Xe=N?.012:0;i[q]=Math.max(Xe,Se),s[q]=Math.max(Xe,Je),q<48&&(Q+=(i[q]+s[q])*.5)}return c.set(i),a.set(s),w(u,i),w(l,s),w(d,i),w(h,s),p.level=Math.min(1,Q/(48*1.2)),p.silent=N,p}return{update:m,snapshot:p,bands:o}}function Ac(e,n){for(const t of e.values()){Ai(t.left,n.left64),Ai(t.right,n.right64);for(let r=0;r<t.average.length;r++)t.average[r]=(t.left[r]+t.right[r])*.5}}function Ai(e,n){const t=n.length/e.length;for(let r=0;r<e.length;r++){let o=0;const i=Math.floor(r*t),s=Math.max(i+1,Math.floor((r+1)*t));for(let c=i;c<s;c++)o+=n[c];e[r]=o/(s-i)}}const Ht={STOPPED:0,PLAYING:1,PAUSED:2};class Ne{constructor(n,t,r){this.x=Number(n)||0,this.y=Number(t)||0,this.z=Number(r)||0}add(n){return new Ne(this.x+n.x,this.y+n.y,this.z+n.z)}subtract(n){return new Ne(this.x-n.x,this.y-n.y,this.z-n.z)}multiply(n){if(n!==null&&typeof n=="object")return new Ne(this.x*n.x,this.y*n.y,this.z*n.z);const t=Number(n)||0;return new Ne(this.x*t,this.y*t,this.z*t)}divide(n){const t=Number(n)||1;return new Ne(this.x/t,this.y/t,this.z/t)}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}copy(){return new Ne(this.x,this.y,this.z)}toArray(){return[this.x,this.y,this.z]}}function Tc(e,n,t){return new Ne(e,n,t)}const Ec=[{title:"\u591C\u822A\u661F",artist:"\u76F8\u4F4D\u8FC1\u79FB",album:"\u6DF1\u7A7A\u56DE\u58F0",albumArtist:"\u76F8\u4F4D\u8FC1\u79FB",duration:212,colors:{primary:[.24,.42,.86],secondary:[.12,.18,.42],tertiary:[.62,.74,.98],text:[.95,.97,1]},lyrics:[[0,"\u5728\u65E0\u5149\u7684\u822A\u9053\u4E0A"],[12,"\u6211\u4EEC\u53EA\u5E26\u8D70\u5F7C\u6B64\u7684\u540D\u5B57"],[26,"\u5F15\u64CE\u4F4E\u9E23\u50CF\u4E00\u53E5\u65E7\u8BFA\u8A00"],[41,"\u628A\u9ED1\u6697\u6298\u6210\u4E24\u534A"],[58,"\u591C\u822A\u661F\u554A"],[72,"\u522B\u5728\u4E2D\u9014\u7184\u706D"],[95,"\uFF08\u95F4\u594F\uFF09"],[126,"\u5982\u679C\u5750\u6807\u7EC8\u5C06\u5931\u6548"],[140,"\u5C31\u8BA9\u8F68\u8FF9\u81EA\u5DF1\u8BF4\u8BDD"],[158,"\u6211\u4EEC\u4E0D\u8FD4\u822A"],[176,"\u4E5F\u4E0D\u9057\u61BE"],[198,"\u2026\u2026"]]},{title:"Amber Lantern",artist:"Hollow Coast",album:"Tidewater",albumArtist:"Hollow Coast",duration:187,colors:{primary:[.93,.62,.24],secondary:[.44,.24,.1],tertiary:[.99,.82,.56],text:[1,.98,.93]},lyrics:[[0,"Salt on the window frame"],[14,"a lantern swinging slow"],[30,"you said the tide forgets"],[46,"but the harbour never does"],[63,"Amber lantern, burn a little longer"],[88,"(instrumental)"],[118,"Every rope remembers the knot"],[134,"every shore remembers the leaving"],[152,"burn a little longer"],[170,"for me"]]},{title:"\u82D4\u75D5",artist:"\u6797\u95F4\u7535\u53F0",album:"\u534A\u5C71\u96E8",albumArtist:"\u6797\u95F4\u7535\u53F0",duration:241,colors:{primary:[.3,.68,.44],secondary:[.1,.28,.2],tertiary:[.72,.92,.78],text:[.96,1,.97]},lyrics:[[0,"\u96E8\u505C\u5728\u7B2C\u4E09\u7EA7\u53F0\u9636"],[16,"\u82D4\u75D5\u722C\u6EE1\u4E86\u65E7\u95E8\u724C"],[33,"\u4F60\u8BF4\u6162\u4E00\u70B9\u4E5F\u6CA1\u5173\u7CFB"],[52,"\u5C71\u4E0D\u4F1A\u8D70"],[70,"\u800C\u6211\u4EEC\u6709\u7684\u662F\u65F6\u95F4"],[92,"\uFF08\u95F4\u594F\uFF09"],[130,"\u628A\u4F1E\u6536\u8D77\u6765\u5427"],[148,"\u8BA9\u6F6E\u6C14\u8BB0\u4F4F\u8FD9\u4E00\u523B"],[172,"\u6162\u4E00\u70B9"],[200,"\u771F\u7684\u6CA1\u5173\u7CFB"],[226,"\u2026\u2026"]]},{title:"Neon Ashes",artist:"VELVET//NULL",album:"Afterimage",albumArtist:"VELVET//NULL",duration:168,colors:{primary:[.86,.22,.58],secondary:[.3,.06,.22],tertiary:[.99,.64,.86],text:[1,.94,.98]},lyrics:[[0,"city bleeds into the lens"],[11,"we were only afterimage"],[24,"neon ashes on your coat"],[38,"nothing here stays lit"],[55,"burn out with me"],[76,"(drop)"],[104,"nothing here stays lit"],[122,"burn out with me"],[146,"\u2026"]]}],br=3;function Ti(e=20260901){const n=Ec,t=n.reduce((v,b)=>v+b.duration+br,0),r={hasMedia:!1,state:Ht.STOPPED,title:"",artist:"",album:"",albumArtist:"",position:0,duration:0,hasThumbnail:!1,primaryColor:new Ne(0,0,0),secondaryColor:new Ne(0,0,0),tertiaryColor:new Ne(0,0,0),textColor:new Ne(1,1,1),highContrastColor:new Ne(1,1,1),trackIndex:-1,lyrics:[],lyricLine:"",lyricIndex:-1};let o=0,i=!1,s=0,c=0;function a(v){let b=0;const x=(v%n.length+n.length)%n.length;for(let E=0;E<x;E++)b+=n[E].duration+br;return b}function u(v){let b=t>0?v%t:0;b<0&&(b+=t);let x=-1,E=0,_=!1;for(let j=0;j<n.length;j++){const W=n[j].duration;if(b<W){x=j,E=b;break}if(b-=W,b<br){x=j,E=W,_=!0;break}b-=br}x<0&&(x=n.length-1,E=n[x].duration,_=!0);const C=n[x];r.hasMedia=!0,r.trackIndex=x,r.title=C.title,r.artist=C.artist,r.album=C.album,r.albumArtist=C.albumArtist,r.duration=C.duration,r.position=E;const N=C.duration>0?E/C.duration:0;i?r.state=Ht.PAUSED:_?r.state=Ht.STOPPED:N>.7&&N<.76?r.state=Ht.PAUSED:r.state=Ht.PLAYING,r.hasThumbnail=!_;const D=C.colors;r.primaryColor=new Ne(D.primary[0],D.primary[1],D.primary[2]),r.secondaryColor=new Ne(D.secondary[0],D.secondary[1],D.secondary[2]),r.tertiaryColor=new Ne(D.tertiary[0],D.tertiary[1],D.tertiary[2]),r.textColor=new Ne(D.text[0],D.text[1],D.text[2]);const k=.2126*D.primary[0]+.7152*D.primary[1]+.0722*D.primary[2];r.highContrastColor=k>.5?new Ne(0,0,0):new Ne(1,1,1),r.lyrics=C.lyrics;let O=-1;for(let j=0;j<C.lyrics.length;j++)E>=C.lyrics[j][0]&&(O=j);return r.lyricIndex=O,r.lyricLine=O>=0?C.lyrics[O][1]:"",r}function l(v){c=Number(v)||0;const b=i?s:c+o;return u(b)}function d(v){i=!1;const b=a(v);return o=b-c,u(b)}function h(){const v=r.trackIndex<0?0:r.trackIndex+1;return d(v)}function p(){const v=r.trackIndex<0?n.length-1:r.trackIndex-1;return d(v)}function w(){return i||(s=c+o,i=!0,r.state=Ht.PAUSED),r}function m(){return i?(i=!1,o=s-c,u(s)):r}function g(){return i?m():w()}return{update:l,snapshot:r,tracks:n,cycle:t,MEDIA_PLAYBACK:Ht,skipNext:h,skipPrevious:p,play:m,pause:w,playPause:g}}function Sc(e,n=512){const t=Math.max(8,n|0),r=new Uint8Array(t*t*4),o=e&&e.colors?e.colors:{primary:[.5,.5,.5],secondary:[.1,.1,.1],tertiary:[.8,.8,.8]},[i,s,c]=o.primary,[a,u,l]=o.secondary,[d,h,p]=o.tertiary;for(let w=0;w<t;w++)for(let m=0;m<t;m++){const g=m/(t-1),v=w/(t-1),b=g-.5,x=v-.5,E=Math.sqrt(b*b+x*x)*2,_=.5+.5*Math.sin(E*18-1.2),C=.5+.5*Math.sin((g+v)*6),N=Math.min(1,Math.max(0,E));let D=i*(1-N)+a*N,k=s*(1-N)+u*N,O=c*(1-N)+l*N;D=D*(.72+.28*_)+d*.18*C,k=k*(.72+.28*_)+h*.18*C,O=O*(.72+.28*_)+p*.18*C;const j=1-.35*Math.min(1,E*E),W=(w*t+m)*4;r[W]=Math.max(0,Math.min(255,Math.round(D*j*255))),r[W+1]=Math.max(0,Math.min(255,Math.round(k*j*255))),r[W+2]=Math.max(0,Math.min(255,Math.round(O*j*255))),r[W+3]=255}return{width:t,height:t,rgba:r}}function Pc(e,n){const t=[];if(!n)return t;const r=!e;return(r||e.hasMedia!==n.hasMedia)&&t.push({name:"mediaStatusChanged",event:{enabled:n.hasMedia}}),(r||e.title!==n.title||e.artist!==n.artist||e.album!==n.album||e.albumArtist!==n.albumArtist)&&t.push({name:"mediaPropertiesChanged",event:{title:n.title,artist:n.artist,album:n.album,albumArtist:n.albumArtist,albumTitle:n.album,subTitle:"",trackType:"music"}}),(r||e.hasThumbnail!==n.hasThumbnail||e.trackIndex!==n.trackIndex)&&t.push({name:"mediaThumbnailChanged",event:{hasThumbnail:n.hasThumbnail,primaryColor:n.primaryColor,secondaryColor:n.secondaryColor,tertiaryColor:n.tertiaryColor,textColor:n.textColor,highContrastColor:n.highContrastColor}}),(r||e.state!==n.state)&&t.push({name:"mediaPlaybackChanged",event:{state:n.state}}),(r||Math.floor(e.position)!==Math.floor(n.position)||e.duration!==n.duration)&&t.push({name:"mediaTimelineChanged",event:{position:n.position,duration:n.duration}}),(r||e.lyricIndex!==n.lyricIndex||e.trackIndex!==n.trackIndex)&&t.push({name:"mediaLyricsChanged",event:{line:n.lyricLine,index:n.lyricIndex,lines:n.lyrics}}),t}function Cc(e){return e?{hasMedia:e.hasMedia,state:e.state,title:e.title,artist:e.artist,album:e.album,albumArtist:e.albumArtist,position:e.position,duration:e.duration,hasThumbnail:e.hasThumbnail,trackIndex:e.trackIndex,lyricIndex:e.lyricIndex,lyricLine:e.lyricLine}:null}const Rc=Object.freeze(Object.defineProperty({__proto__:null,MEDIA_PLAYBACK:Ht,cloneMediaSnapshot:Cc,createSimulatedMedia:Ti,diffMediaEvents:Pc,mediaVec3:Tc,renderThumbnail:Sc},Symbol.toStringTag,{value:"Module"})),Ei=14,Wn=[{app:"Safari",title:"GitHub \xB7 we-scene-renderer",url:"https://github.com/oneincase/we-scene-renderer"},{app:"Google Chrome",title:"YouTube",url:"https://www.youtube.com/watch?v=dQw4w9WgXcQ"},{app:"Google Chrome",title:"Wallpaper Engine - Workshop",url:"https://steamcommunity.com/app/431960/workshop/"},{app:"Safari",title:"MDN Web Docs",url:"https://developer.mozilla.org/en-US/docs/Web/API"},{app:"Music",title:"\u591C\u822A\u661F \u2014 \u76F8\u4F4D\u8FC1\u79FB",url:""},{app:"Code",title:"we-scene-renderer \u2014 text.js",url:""}];function Si(){const e={app:"",title:"",url:"",index:-1};function n(t){const r=Number(t)||0,o=Wn.length?Math.floor(r/Ei)%Wn.length:0,i=Wn[o]||Wn[0];return e.app=i.app,e.title=i.title,e.url=i.url,e.index=o,e}return n(0),{update:n,snapshot:e,tabs:Wn,hold:Ei}}function Pi(e){const n={name:"",at:0};function t(r){return n.name=String(r||""),n.at=Date.now(),typeof e=="function"&&e(n.name),n.name}return{openUserShortcut:t,last:n}}function Lc(e){const n=Ti(e),t=Si(),r=Pi(null);return{media:n,windowTitle:t,shortcuts:r}}const Fc=Object.freeze(Object.defineProperty({__proto__:null,createShortcutHandler:Pi,createSimulatedSystem:Lc,createSimulatedWindowTitle:Si},Symbol.toStringTag,{value:"Module"}));function Nc(e={}){const n=e.target||(typeof window<"u"?window:null),t=e.viewport||(typeof window<"u"?()=>({w:window.innerWidth||1,h:window.innerHeight||1}):null),r={u:.5,v:.5,screenX:0,screenY:0,wx:0,wy:0,originY:null,lastU:.5,lastV:.5,lastScreenX:0,lastScreenY:0,lastWx:0,lastWy:0,lastOriginY:null,leftDown:!1,has:!1,moveCount:0,downCount:0,upCount:0,lastEventTime:0,screenW:1,screenH:1};function o(){if(!t)return;const l=t();r.screenW=l.w||1,r.screenH=l.h||1}o();function i(l){o();let d=l.clientX,h=l.clientY;if(n&&typeof n.getBoundingClientRect=="function"){const m=n.getBoundingClientRect();d-=m.left,h-=m.top}const p=d/r.screenW,w=h/r.screenH;r.has||(r.lastU=p,r.lastV=w,r.lastScreenX=d,r.lastScreenY=h),r.screenX=d,r.screenY=h,r.u=p,r.v=w,r.has=!0,r.moveCount++,r.lastEventTime=Date.now()}function s(l){l.button!==void 0&&l.button!==0||(r.leftDown=!0,r.downCount++)}function c(l){l.button!==void 0&&l.button!==0||(r.leftDown=!1,r.upCount++)}function a(){r.leftDown=!1}let u=!1;return n&&n.addEventListener&&(u=!0,n.addEventListener("mousemove",i,{passive:!0}),n.addEventListener("mousedown",s,{passive:!0}),n.addEventListener("mouseup",c,{passive:!0}),n.addEventListener("blur",a,{passive:!0}),typeof document<"u"&&document.addEventListener&&document.addEventListener("mouseleave",a,{passive:!0})),{state:r,beginFrame(){o(),r.lastU=r.u,r.lastV=r.v,r.lastScreenX=r.screenX,r.lastScreenY=r.screenY,r.lastWx=r.wx,r.lastWy=r.wy,r.lastOriginY=r.originY},syncWorld(l,d=0,h=0){if(!l)return;r.wx=l.offX+r.u*l.viewW-d,r.wy=l.offY+r.v*l.viewH-h;const p=Number(l.projH);r.originY=Number.isFinite(p)?p-r.wy:r.wy,r.lastWx===0&&r.lastWy===0&&(r.lastWx=r.wx,r.lastWy=r.wy,r.lastOriginY=r.originY)},normalizedDelta(){const l=r.u-r.lastU,d=r.v-r.lastV;return Math.hypot(l,d)},dispose(){!u||!n||!n.removeEventListener||(u=!1,n.removeEventListener("mousemove",i),n.removeEventListener("mousedown",s),n.removeEventListener("mouseup",c),n.removeEventListener("blur",a),typeof document<"u"&&document.removeEventListener&&document.removeEventListener("mouseleave",a))}}}const Uc=Object.freeze(Object.defineProperty({__proto__:null,createPointerSource:Nc},Symbol.toStringTag,{value:"Module"}));function Ci(e,n,t,r,o,i,s){const c=e.size||[0,0],a=e.scale||[1,1,1],u=c[0]*a[0],l=c[1]*a[1];if(!(u>0)||!(l>0))return null;const d=e.origin||[0,0,0];let h=d[0],p=r-d[1];if(e.parallaxDepth&&(o!==0||i!==0)){const b=e.parallaxDepth,x=un(b[0]),E=un(b[1]);h+=x*o,p+=E*i}let w=n-h,m=t-p;const g=e.angles?e.angles[2]:0;if(g){const b=Math.cos(-g),x=Math.sin(-g),E=w*b+m*x,_=-w*x+m*b;w=E,m=_}const v=s&&s[e.alignment]||[.5,.5];return(v[0]!==.5||v[1]!==.5)&&(w-=(.5-v[0])*u,m-=(.5-v[1])*l),{lx:w/u,ly:m/l,w:u,h:l}}function kc(e,n,t,r,o={}){if(!e||e.length===0)return null;const i=o.parOffX||0,s=o.parOffY||0,c=o.alignTable,a=o.filter;for(let u=e.length-1;u>=0;u--){const l=e[u];if(!l||!l.visible||l.destroyed||a&&!a(l))continue;const d=Ci(l,n,t,r,i,s,c);if(d&&Math.abs(d.lx)<=.5&&Math.abs(d.ly)<=.5)return l}return null}const Bc=Object.freeze(Object.defineProperty({__proto__:null,hitTestLayers:kc,worldToLayerLocal:Ci},Symbol.toStringTag,{value:"Module"})),$e=e=>e,je=$e(Ki),vr=$e(hs),Qe=$e(_s),wt=$e(Ps),ke=$e(ca),Ic=$e(ua),Oc=$e(ga),hn=$e(La),Vn=$e(Ya),qe=$e(pc),Dc=$e(bc),Rt=$e(Rc),Ri=$e(Fc),Li=$e(ra),zc=$e(Uc),$c=$e(Bc);function jc(e,n,t){return{camera:null,general:{orthogonalprojection:{width:e,height:n},clearenabled:!0,clearcolor:"0 0 0"},layers:[{id:0,name:"media",visible:!0,image:t,textureName:t,particle:null,puppet:null,solid:!1,isContainer:!1,isPostProcess:!1,isText:!1,isSound:!1,isComponent:!1,sound:[],origin:[e/2,n/2,0],scale:[1,1,1],angles:[0,0,0],size:[e,n],alignment:"center",color:[1,1,1],alpha:1,brightness:1,colorBlendMode:0,copybackground:!1,parallaxDepth:null,animationLayers:[],effects:[]}],properties:{}}}async function Wc(e){const n=await fetch(e);if(!n.ok)throw new Error(`HTTP ${n.status}`);const t=new window.ImageDecoder({data:await n.arrayBuffer(),type:"image/gif"});await t.tracks.ready,await t.completed;const r=t.tracks.selectedTrack;if(!r||!r.frameCount)return null;const o=Math.min(r.frameCount,300),i=[];let s=0,c=0;for(let a=0;a<o;a++){const{image:u}=await t.decode({frameIndex:a});s=u.displayWidth,c=u.displayHeight,i.push({bitmap:await createImageBitmap(u),durationMs:u.duration?u.duration/1e3:100}),u.close()}return t.close?.(),{width:s,height:c,frames:i}}function Vc(e,n){if(on(e),!n.src){e.fallbackPage?.();return}const t=n.type==="video",r=n.type==="gif",o=document.createElement("canvas"),i=er(e,n);if(o.width=Math.max(1,Math.round(innerWidth*i)),o.height=Math.max(1,Math.round(innerHeight*i)),o.style.cssText="position:absolute;inset:0;width:100%;height:100%;",!o.getContext("webgl2",{premultipliedAlpha:!1,antialias:!1,alpha:!1,preserveDrawingBuffer:!0})){ae(e,n,`media ${n.type}: WEBGL2_UNAVAILABLE\uFF0C\u56DE\u9000 DOM \u6E32\u67D3`),t?Xc(e,n):Hc(e,n);return}e.wrap?.appendChild(o),e.canvas=o;let c=!1;e.sceneCleanup=()=>{c=!0,e.renderer&&(e.renderer.dispose?.(),e.renderer=void 0)};let a,u,l=!1;e.sceneCtl={pause(){a?.()},resume(){u?.()},applyUserProperties(){}};const d=h=>{c||(c=!0,ae(e,n,`media ${n.type} \u5931\u8D25: ${h}`),e.fallbackPage?.())};(async()=>{try{const h=ke.createRenderer(o,{diag:k=>ae(e,n,`renderer: ${k}`),fboCapFactor:0});if(e.renderer=h,c)return;const p="__media",w=new Map;let m,g=0,v=0;if(t){const k=document.createElement("video");if(k.autoplay=!0,k.loop=n.loop!==!1,k.muted=n.muted!==!1,k.playsInline=!0,k.preload="metadata",k.width=o.width,k.height=o.height,k.style.cssText="position:fixed;left:-9999px;top:-9999px;width:2px;height:2px;opacity:0;pointer-events:none",k.src=n.src,document.body.appendChild(k),e.video=k,(e.videoTextures??=[]).push(k),await new Promise((O,j)=>{k.addEventListener("loadedmetadata",()=>O(),{once:!0}),k.addEventListener("error",()=>j(new Error(`video error ${k.error?.code??"?"}`)),{once:!0})}),c)return;g=k.videoWidth||o.width,v=k.videoHeight||o.height,w.set(p,{video:k,glTex:ke.makeTexture(h.gl,new Uint8Array([0,0,0,255]),1,1),width:g,height:v,rg88:!1,lastUploaded:-1}),e.paused||k.play().catch(()=>{}),ae(e,n,`media video ${g}x${v} \u2192 scene \u6E32\u67D3`)}else{let k=!1;if(r&&typeof window.ImageDecoder=="function")try{const O=await Wc(n.src);if(O&&O.frames.length>1){g=O.width,v=O.height;const j=h.gl,W={glTex:ke.makeTexture(j,null,0,0,O.frames[0].bitmap),width:g,height:v,rg88:!1};w.set(p,W);let K=0,V=performance.now()+O.frames[0].durationMs;m=()=>{const Q=performance.now();if(!(Q<V)){K=(K+1)%O.frames.length,V=Q+O.frames[K].durationMs,j.bindTexture(j.TEXTURE_2D,W.glTex);try{j.texImage2D(j.TEXTURE_2D,0,j.RGBA,j.RGBA,j.UNSIGNED_BYTE,O.frames[K].bitmap)}catch{}}};const G=e.sceneCleanup;e.sceneCleanup=()=>{G?.();for(const Q of O.frames)Q.bitmap.close()},k=!0,ae(e,n,`media gif ${g}x${v} ${O.frames.length} \u5E27 \u2192 scene \u6E32\u67D3`)}}catch(O){ae(e,n,`gif \u89E3\u7801\u5931\u8D25\uFF0C\u56DE\u9000\u9759\u6001\u9996\u5E27: ${String(O.message).slice(0,80)}`)}if(!k){const O=new Image;if(O.crossOrigin="anonymous",O.src=n.src,await new Promise((j,W)=>{O.addEventListener("load",()=>j(),{once:!0}),O.addEventListener("error",()=>W(new Error("image load error")),{once:!0})}),c)return;g=O.naturalWidth||1,v=O.naturalHeight||1,e.img=O,w.set(p,{glTex:ke.makeTexture(h.gl,null,0,0,O),width:g,height:v,rg88:!1}),ae(e,n,`media ${n.type} ${g}x${v} \u2192 scene \u6E32\u67D3`)}}if(c)return;const b=jc(g,v,p),x=performance.now();let E=0,_=0,C=-1/0;const N=k=>{if(c||e.paused)return;const O=e.cfg.sceneFps||60;if(k-C>=1e3/O){C=k,oo(e,k),so(e,o,e.cfg),m?.();const j=e.coverAlign;h.render(b,w,o.width,o.height,(k-x-E)/1e3,Sn(e.cfg.fit),j.x,j.y).then(()=>{c||e.paused||(e.raf=requestAnimationFrame(N))}).catch(W=>d(String(W.message||W).slice(0,200)))}else e.paused||(e.raf=requestAnimationFrame(N))},D=()=>{c||e.paused||e.raf===void 0&&(e.raf=requestAnimationFrame(N))};a=()=>{e.raf!==void 0&&(cancelAnimationFrame(e.raf),e.raf=void 0),_||(_=performance.now());const k=e.video;l=!!(k&&!k.paused&&!k.ended),k?.pause()},u=()=>{_&&(E+=performance.now()-_,_=0),l&&e.video?.play().catch(()=>{}),l=!1,D()},D()}catch(h){d(String(h.message||h).slice(0,200))}})()}function Xc(e,n){if(on(e),!n.src){e.fallbackPage?.();return}const t=no(n.fit),r=`position:absolute;inset:0;width:100%;height:100%;object-fit:${t.objectFit};object-position:50% 50%;background:${t.background};`;let o=!1;const i=()=>{o||(o=!0,console.warn("video error, fallback to default wallpaper"),e.fallbackPage?.())},s=document.createElement("video");s.autoplay=!0,s.loop=n.loop!==!1,s.muted=n.muted!==!1,s.playsInline=!0,s.preload="metadata";const c=Math.min(window.devicePixelRatio||1,e.cfg.renderDpr||1);s.width=Math.max(1,Math.round(innerWidth*c)),s.height=Math.max(1,Math.round(innerHeight*c)),s.style.cssText=r,s.src=n.src,s.addEventListener("error",i),e.wrap?.appendChild(s),e.video=s,s.addEventListener("canplay",()=>s.play().catch(()=>{}),{once:!0}),ae(e,n,"video mounted (single + native loop)")}function Hc(e,n){on(e);const t=document.createElement("img"),r=no(n.fit);t.style.cssText=`position:absolute;inset:0;width:100%;height:100%;object-fit:${r.objectFit};object-position:50% 50%;background:${r.background};`,t.src=n.src??"",t.addEventListener("error",()=>e.fallbackPage?.()),e.wrap?.appendChild(t),e.img=t}const Gc=["scene.pkg","scenes/scene.pkg","gifscene.pkg"];function Fi(e,n){const t=e.replace(/\/+$/,"");return{key:t,async scenePkg(r){let o=null,i=null;for(const c of Gc){let a;try{a=await fetch(`${t}/${c}`,{...n,signal:r})}catch(u){if(r?.aborted)throw u;i=u;continue}if(!a.ok){o=a.status;continue}try{return await a.arrayBuffer()}catch(u){if(r?.aborted)throw u;const l=u instanceof Error?u.message:String(u);throw new Error(`\u8BFB\u53D6 scene.pkg \u4F53\u5931\u8D25\uFF08${l}\uFF09`)}}if(o!=null)throw new Error(`scene.pkg \u52A0\u8F7D\u5931\u8D25\uFF08HTTP ${o}\uFF09`);const s=i instanceof Error?i.message:"Failed to fetch";throw new Error(`scene.pkg \u52A0\u8F7D\u5931\u8D25\uFF08${s}\uFF09`)},async project(r){try{const o=await fetch(`${t}/project.json`,{...n,signal:r});return o.ok?await o.json():null}catch{return null}}}}function Yc(e,n){const t=e;return{key:typeof t.name=="string"?`file:${t.name}:${t.size}:${t.lastModified??0}`:void 0,scenePkg:()=>e.arrayBuffer(),project:async()=>n??null}}function qc(e,n,t){return{key:t,scenePkg:async()=>e,project:async()=>n??null}}const Ni=.5,Zc=.04,Ui=.08;function Kc(e,n){const t=b=>{const x=document.createElement("video");b&&(x.src=e),x.muted=n.muted,x.playsInline=!0,x.preload="metadata";const E=Math.min(window.devicePixelRatio||1,n.renderDpr||1),_=Math.max(1,Math.round(n.maxW*E)),C=Math.max(1,Math.round(n.maxH*E));return x.width=_,x.height=C,x.loop=!0,x};let r=t(!0),o=t(!1),i=!1,s=1,c=n.muted;o.muted=!0;const a=()=>{i||(o.src=e,i=!0)};let u=!1,l=!1,d=-1,h=0,p=!1;const w=()=>{if(u=!1,l=!1,!o.paused){o.pause();try{o.currentTime=0}catch{}}},m=()=>{const b=r;r=o,o=b,u=!1,l=!1,r.play().catch(()=>{}),r.muted=c,r.volume=s,b.pause();try{b.currentTime=0}catch{}b.muted=!0,d=-1,i=!0,v.onSwap?.(r)},g=()=>{if(p)return;h=requestAnimationFrame(g);const b=r.duration;if(!isFinite(b)||b<=0)return;const x=r.currentTime;if(d>=0&&x<d-.05){const _=l;w(),d=x,_||v.onFallback?.();return}d=x;const E=b-x;if(E>Ni+.5){(u||l)&&w();return}if(l){(E<=Ui||x<=Ui)&&m();return}if(u){o.paused?o.play().catch(()=>{}):o.currentTime>=Zc*.5&&(o.pause(),u=!1,l=!0);return}if(E<=Ni&&(a(),o.readyState>=2)){try{o.currentTime=0}catch{}o.play().catch(()=>{}),u=!0}};h=requestAnimationFrame(g);const v={get active(){return r},get standby(){return o},onSwap:void 0,onFallback:void 0,setVolume(b){s=Math.max(0,Math.min(1,b)),c=b<=0,r.muted=c,r.volume=s,o.muted=!0,o.volume=s},pause(){w(),r.pause(),h&&cancelAnimationFrame(h),h=0},resume(){p||(r.play().catch(b=>{b&&b.name}),h||(h=requestAnimationFrame(g)))},destroy(){p=!0,h&&cancelAnimationFrame(h),h=0;for(const b of[r,o]){b.pause(),b.removeAttribute("src");try{b.load()}catch{}b.remove()}}};return v}const ki=!1,Bi=!0,Ii=!1,Qc=!1,Jc=!1,Oi=4,el={"common.h":`// WE common.h\uFF08\u91CD\u5EFA\u5B50\u96C6\uFF0C\u4F9B we-scene \u6D4F\u89C8\u5668\u6E32\u67D3\uFF09
|
|
176
|
+
#define M_PI 3.14159265359
|
|
177
|
+
// M_PI_2 \u662F\u300CPI \xD7 2\u300D\u800C\u4E0D\u662F\u300CPI \xF7 2\u300D\u2014\u2014 \u540D\u5B57\u6781\u6613\u8BFB\u53CD\uFF0C\u6B64\u524D\u8BEF\u5199\u6210 1.5708\uFF0C
|
|
178
|
+
// \u5F71\u54CD\u5168\u5E93 142 \u4E2A\u6587\u4EF6\uFF0864 \u4E2A\u58C1\u7EB8\uFF09\u3002\u4E09\u6761\u72EC\u7ACB\u8BC1\u636E\uFF1A
|
|
179
|
+
// 1. shake.frag: sin(frac(t / M_PI_2) * M_PI_2) \u2014\u2014 frac(t/K)*K \u5373 mod(t,K)\uFF0C
|
|
180
|
+
// sin(mod(t,K)) == sin(t) \u4EC5\u5F53 K \u662F\u6B63\u5F26\u5468\u671F 2\u03C0\uFF1B\u5199\u6210 \u03C0/2 \u5219\u6BCF 1/4 \u5468\u671F
|
|
181
|
+
// \u51FA\u73B0\u4E00\u6B21\u65AD\u70B9\uFF08\u8868\u73B0\u4E3A shake \u6548\u679C\u89C4\u5F8B\u6027\u6296\u52A8\uFF09\uFF0C\u4E14\u4E0E\u7D27\u90BB\u7684 cos(time) \u76F8\u4F4D\u4E0D\u4E00\u81F4\uFF1B
|
|
182
|
+
// 2. circular_text.frag: (atan2(y,x) + M_PI) / M_PI_2 \u2014\u2014 \u5206\u5B50\u57DF\u4E3A [0,2\u03C0]\uFF0C
|
|
183
|
+
// \u4E0B\u4E00\u884C\u6309 mod(x, 1.0) \u53D6\u5C0F\u6570\u4E14\u8D77\u59CB\u89D2\u6765\u81EA deg \xD7 (1/360)\uFF0C\u5373\u5355\u4F4D\u662F\u300C\u5708\u300D\uFF0C
|
|
184
|
+
// \u6545\u5FC5\u987B\u9664\u4EE5 2\u03C0 \u624D\u843D\u5728 [0,1]\uFF1B\u9664\u4EE5 \u03C0/2 \u4F1A\u8BA9\u6587\u5B57\u6CBF\u73AF\u91CD\u590D 4 \u6B21\uFF1B
|
|
185
|
+
// 3. shine_cast.vert: EDGES==3 \u7528 M_PI_2 * 0.3333 / 0.6666 \u6392\u4E09\u6761\u5149\u8FB9\uFF0C
|
|
186
|
+
// \u53EA\u6709\u6574\u5708\u7684 1/3\u30012/3 \u624D\u7B49\u5206\uFF1B\u540C\u6587\u4EF6 EDGES==4 \u53CD\u800C\u4E0D\u7528\u8FD9\u4E2A\u5E38\u91CF
|
|
187
|
+
// \uFF0890\xB0 \u76F4\u63A5\u5199 vec2(-y, x)\uFF09\u2014\u2014 \u4F5C\u8005\u6E05\u695A\u5B83\u662F\u6574\u5708\u3002
|
|
188
|
+
// \u53CD\u5411\u8BC1\u636E\u4E3A 0\uFF1A\u5168\u5E93\u6CA1\u6709\u4EFB\u4F55\u6587\u4EF6\u6309 \u03C0/2 \u624D\u6210\u7ACB\u3002
|
|
189
|
+
// \u53E6\u6709\u58C1\u7EB8 3436945972 \u7684\u4F5C\u8005\u5728\u540C\u4E00\u6587\u4EF6\u91CC\u81EA\u5B9A\u4E49 \`#define M_PI_D2 1.5707963... // PI / 2\`\uFF0C
|
|
190
|
+
// \u6B63\u8BF4\u660E common.h \u7684 M_PI_2 \u4E0D\u662F \u03C0/2\uFF0C\u5426\u5219\u65E0\u9700\u53E6\u8D77\u4E00\u4E2A\u540D\u5B57\u3002
|
|
191
|
+
#define M_PI_2 6.28318530718
|
|
192
|
+
// \u771F\u6B63\u7684 \u03C0/2 \u5728 WE \u91CC\u53EB M_PI_HALF\uFF08\u672C\u673A\u5E93\u6682\u65E0\u5F15\u7528\uFF0C\u8865\u5168\u4EE5\u5BF9\u9F50\u771F\u5B9E\u5934\u7684\u7B26\u53F7\u9762\uFF09
|
|
193
|
+
#define M_PI_HALF 1.57079632679
|
|
194
|
+
vec2 rotateVec2(vec2 v, float a) {
|
|
195
|
+
float c = cos(a);
|
|
196
|
+
float s = sin(a);
|
|
197
|
+
return vec2(v.x * c - v.y * s, v.x * s + v.y * c);
|
|
198
|
+
}
|
|
199
|
+
float rand(vec2 n) { return fract(sin(dot(n, vec2(12.9898, 78.233))) * 43758.5453); }
|
|
200
|
+
float rand(vec2 n, float m) { return 0.5 + 0.5 * rand(n * m); }
|
|
201
|
+
float smoothstep01(float x) { return smoothstep(0.0, 1.0, x); }
|
|
202
|
+
vec2 smoothstep01(vec2 x) { return smoothstep(vec2(0.0), vec2(1.0), x); }
|
|
203
|
+
vec3 smoothstep01(vec3 x) { return smoothstep(vec3(0.0), vec3(1.0), x); }
|
|
204
|
+
vec4 smoothstep01(vec4 x) { return smoothstep(vec4(0.0), vec4(1.0), x); }
|
|
205
|
+
// WE shader \u91CC\u5927\u91CF\u4F7F\u7528\u7684 atan2\uFF08GLSL \u5185\u7F6E\u662F atan(y, x)\uFF0C\u65E0 atan2 \u540D\uFF09
|
|
206
|
+
float atan2(float y, float x) { return atan(y, x); }
|
|
207
|
+
// HSV \u2194 RGB\u3002\u8272\u76F8\u8303\u56F4\u662F 0..1 \u800C\u4E0D\u662F 0..360 \u2014\u2014 \u4F9D\u636E gradient_color.frag \u7684
|
|
208
|
+
// \`hsv.x = frac(hsv.x + g_Time * u_Speed)\`\uFF08\u6309 1 \u73AF\u7ED5\uFF09\u4E0E test_shader.frag \u7684
|
|
209
|
+
// \`hsv2rgb(vec3(x * 0.23 + g_Time * 0.12, 1.0, 1.0))\`\uFF08\u5582\u5165\u65E0\u754C\u5C0F\u6570\uFF09\u3002
|
|
210
|
+
vec3 rgb2hsv(vec3 c) {
|
|
211
|
+
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
|
212
|
+
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
|
213
|
+
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
|
214
|
+
float d = q.x - min(q.w, q.y);
|
|
215
|
+
float e = 1.0e-10;
|
|
216
|
+
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
|
|
217
|
+
}
|
|
218
|
+
vec3 hsv2rgb(vec3 c) {
|
|
219
|
+
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
220
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
221
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
222
|
+
}
|
|
223
|
+
`,"common_blending.h":`// WE common_blending.h\uFF08\u91CD\u5EFA\u5B50\u96C6\uFF09
|
|
224
|
+
vec3 weBlendOverlay(vec3 a, vec3 b) {
|
|
225
|
+
return vec3(
|
|
226
|
+
a.r < 0.5 ? 2.0 * a.r * b.r : 1.0 - 2.0 * (1.0 - a.r) * (1.0 - b.r),
|
|
227
|
+
a.g < 0.5 ? 2.0 * a.g * b.g : 1.0 - 2.0 * (1.0 - a.g) * (1.0 - b.g),
|
|
228
|
+
a.b < 0.5 ? 2.0 * a.b * b.b : 1.0 - 2.0 * (1.0 - a.b) * (1.0 - b.b));
|
|
229
|
+
}
|
|
230
|
+
vec3 weBlendSoftLight(vec3 a, vec3 b) {
|
|
231
|
+
return vec3(
|
|
232
|
+
b.r < 0.5 ? 2.0 * a.r * b.r + a.r * a.r * (1.0 - 2.0 * b.r) : sqrt(a.r) * (2.0 * b.r - 1.0) + 2.0 * a.r * (1.0 - b.r),
|
|
233
|
+
b.g < 0.5 ? 2.0 * a.g * b.g + a.g * a.g * (1.0 - 2.0 * b.g) : sqrt(a.g) * (2.0 * b.g - 1.0) + 2.0 * a.g * (1.0 - b.g),
|
|
234
|
+
b.b < 0.5 ? 2.0 * a.b * b.b + a.b * a.b * (1.0 - 2.0 * b.b) : sqrt(a.b) * (2.0 * b.b - 1.0) + 2.0 * a.b * (1.0 - b.b));
|
|
235
|
+
}
|
|
236
|
+
float weBlendVivid(float a, float b) {
|
|
237
|
+
if (b < 0.5) {
|
|
238
|
+
float bb = 2.0 * b;
|
|
239
|
+
return bb == 0.0 ? 0.0 : max(1.0 - (1.0 - a) / bb, 0.0);
|
|
240
|
+
}
|
|
241
|
+
float bb = 2.0 * (b - 0.5);
|
|
242
|
+
return bb == 1.0 ? 1.0 : min(a / (1.0 - bb), 1.0);
|
|
243
|
+
}
|
|
244
|
+
// Reflect \u5355\u72EC\u6210\u51FD\u6570\uFF1AGlow = Reflect(B,A)\u3002GLSL \u7981\u6B62\u9012\u5F52\uFF0C\u4E0D\u80FD\u5728 ApplyBlending
|
|
245
|
+
// \u5185\u90E8\u8C03 ApplyBlending(21, \u2026)\uFF08\u6574\u4E2A\u51FD\u6570\u4F1A\u7F16\u8BD1\u5931\u8D25\uFF0C\u6548\u679C\u88AB\u9759\u9ED8\u8DF3\u8FC7\uFF09\u3002
|
|
246
|
+
vec3 weBlendReflect(vec3 A, vec3 B) {
|
|
247
|
+
return vec3(
|
|
248
|
+
A.r == 1.0 ? 1.0 : min(B.r * B.r / (1.0 - A.r), 1.0),
|
|
249
|
+
A.g == 1.0 ? 1.0 : min(B.g * B.g / (1.0 - A.g), 1.0),
|
|
250
|
+
A.b == 1.0 ? 1.0 : min(B.b * B.b / (1.0 - A.b), 1.0));
|
|
251
|
+
}
|
|
252
|
+
vec3 RGBToHSL(vec3 c) {
|
|
253
|
+
float fmin = min(c.r, min(c.g, c.b));
|
|
254
|
+
float fmax = max(c.r, max(c.g, c.b));
|
|
255
|
+
float delta = fmax - fmin;
|
|
256
|
+
vec3 h = vec3(0.0);
|
|
257
|
+
h.z = (fmax + fmin) / 2.0;
|
|
258
|
+
if (delta == 0.0) {
|
|
259
|
+
h.x = 0.0;
|
|
260
|
+
h.y = 0.0;
|
|
261
|
+
} else {
|
|
262
|
+
h.y = h.z < 0.5 ? delta / (fmax + fmin) : delta / (2.0 - fmax - fmin);
|
|
263
|
+
float deltaR = ((fmax - c.r) / 6.0 + delta / 2.0) / delta;
|
|
264
|
+
float deltaG = ((fmax - c.g) / 6.0 + delta / 2.0) / delta;
|
|
265
|
+
float deltaB = ((fmax - c.b) / 6.0 + delta / 2.0) / delta;
|
|
266
|
+
if (c.r == fmax) h.x = deltaB - deltaG;
|
|
267
|
+
else if (c.g == fmax) h.x = 1.0 / 3.0 + deltaR - deltaB;
|
|
268
|
+
else if (c.b == fmax) h.x = 2.0 / 3.0 + deltaG - deltaB;
|
|
269
|
+
if (h.x < 0.0) h.x += 1.0;
|
|
270
|
+
else if (h.x > 1.0) h.x -= 1.0;
|
|
271
|
+
}
|
|
272
|
+
return h;
|
|
273
|
+
}
|
|
274
|
+
float weHueToRgb(float f1, float f2, float hue) {
|
|
275
|
+
if (hue < 0.0) hue += 1.0;
|
|
276
|
+
else if (hue > 1.0) hue -= 1.0;
|
|
277
|
+
if (6.0 * hue < 1.0) return f1 + (f2 - f1) * 6.0 * hue;
|
|
278
|
+
if (2.0 * hue < 1.0) return f2;
|
|
279
|
+
if (3.0 * hue < 2.0) return f1 + (f2 - f1) * ((2.0 / 3.0 - hue) * 6.0);
|
|
280
|
+
return f1;
|
|
281
|
+
}
|
|
282
|
+
vec3 HSLToRGB(vec3 h) {
|
|
283
|
+
if (h.y == 0.0) return vec3(h.z);
|
|
284
|
+
float f2 = h.z < 0.5 ? h.z * (1.0 + h.y) : h.z + h.y - h.y * h.z;
|
|
285
|
+
float f1 = 2.0 * h.z - f2;
|
|
286
|
+
return vec3(
|
|
287
|
+
weHueToRgb(f1, f2, h.x + 1.0 / 3.0),
|
|
288
|
+
weHueToRgb(f1, f2, h.x),
|
|
289
|
+
weHueToRgb(f1, f2, h.x - 1.0 / 3.0));
|
|
290
|
+
}
|
|
291
|
+
// mode \u7F16\u53F7\u540C WE common_blending.h\uFF080=Normal \u2026 32=LighterColor \u7684\u5B9E\u73B0\u5B50\u96C6\uFF09
|
|
292
|
+
vec3 ApplyBlending(int mode, vec3 A, vec3 B, float opacity) {
|
|
293
|
+
vec3 r;
|
|
294
|
+
if (mode == 1) { r = min(B, A); } // Darken
|
|
295
|
+
else if (mode == 2) { r = A * B; } // Multiply
|
|
296
|
+
else if (mode == 3) { // ColorBurn
|
|
297
|
+
r = vec3(
|
|
298
|
+
B.r == 0.0 ? 0.0 : max(1.0 - (1.0 - A.r) / B.r, 0.0),
|
|
299
|
+
B.g == 0.0 ? 0.0 : max(1.0 - (1.0 - A.g) / B.g, 0.0),
|
|
300
|
+
B.b == 0.0 ? 0.0 : max(1.0 - (1.0 - A.b) / B.b, 0.0));
|
|
301
|
+
}
|
|
302
|
+
else if (mode == 4 || mode == 20) { r = max(A + B - 1.0, vec3(0.0)); } // Substract
|
|
303
|
+
else if (mode == 5) { r = min(A, B); } // LinearBurn
|
|
304
|
+
else if (mode == 6) { r = max(B, A); } // Lighten
|
|
305
|
+
else if (mode == 7) { r = 1.0 - (1.0 - A) * (1.0 - B); } // Screen
|
|
306
|
+
else if (mode == 8) { // ColorDodge
|
|
307
|
+
r = vec3(
|
|
308
|
+
B.r == 1.0 ? 1.0 : min(A.r / (1.0 - B.r), 1.0),
|
|
309
|
+
B.g == 1.0 ? 1.0 : min(A.g / (1.0 - B.g), 1.0),
|
|
310
|
+
B.b == 1.0 ? 1.0 : min(A.b / (1.0 - B.b), 1.0));
|
|
311
|
+
}
|
|
312
|
+
else if (mode == 9) { r = min(A + B, vec3(1.0)); } // Add
|
|
313
|
+
else if (mode == 10) { r = max(A, B); } // Lighter
|
|
314
|
+
else if (mode == 11) { r = weBlendOverlay(A, B); } // Overlay
|
|
315
|
+
else if (mode == 12) { r = weBlendSoftLight(A, B); } // SoftLight
|
|
316
|
+
else if (mode == 13) { r = weBlendOverlay(B, A); } // HardLight
|
|
317
|
+
else if (mode == 14) { // VividLight
|
|
318
|
+
r = vec3(weBlendVivid(A.r, B.r), weBlendVivid(A.g, B.g), weBlendVivid(A.b, B.b));
|
|
319
|
+
}
|
|
320
|
+
else if (mode == 15) { // LinearLight
|
|
321
|
+
r = vec3(
|
|
322
|
+
B.r < 0.5 ? max(A.r + 2.0 * B.r - 1.0, 0.0) : min(A.r + 2.0 * (B.r - 0.5), 1.0),
|
|
323
|
+
B.g < 0.5 ? max(A.g + 2.0 * B.g - 1.0, 0.0) : min(A.g + 2.0 * (B.g - 0.5), 1.0),
|
|
324
|
+
B.b < 0.5 ? max(A.b + 2.0 * B.b - 1.0, 0.0) : min(A.b + 2.0 * (B.b - 0.5), 1.0));
|
|
325
|
+
}
|
|
326
|
+
else if (mode == 16) { // PinLight
|
|
327
|
+
r = vec3(
|
|
328
|
+
B.r < 0.5 ? min(A.r, 2.0 * B.r) : max(A.r, 2.0 * (B.r - 0.5)),
|
|
329
|
+
B.g < 0.5 ? min(A.g, 2.0 * B.g) : max(A.g, 2.0 * (B.g - 0.5)),
|
|
330
|
+
B.b < 0.5 ? min(A.b, 2.0 * B.b) : max(A.b, 2.0 * (B.b - 0.5)));
|
|
331
|
+
}
|
|
332
|
+
else if (mode == 17) { // HardMix
|
|
333
|
+
r = vec3(
|
|
334
|
+
weBlendVivid(A.r, B.r) < 0.5 ? 0.0 : 1.0,
|
|
335
|
+
weBlendVivid(A.g, B.g) < 0.5 ? 0.0 : 1.0,
|
|
336
|
+
weBlendVivid(A.b, B.b) < 0.5 ? 0.0 : 1.0);
|
|
337
|
+
}
|
|
338
|
+
else if (mode == 18) { r = abs(A - B); } // Difference
|
|
339
|
+
else if (mode == 19) { r = A + B - 2.0 * A * B; } // Exclusion
|
|
340
|
+
else if (mode == 21) { r = weBlendReflect(A, B); } // Reflect
|
|
341
|
+
else if (mode == 22) { r = weBlendReflect(B, A); } // Glow = Reflect(B,A)
|
|
342
|
+
else if (mode == 23) { r = min(A, B) - max(A, B) + 1.0; } // Phoenix
|
|
343
|
+
else if (mode == 24) { r = (A + B) / 2.0; } // Average
|
|
344
|
+
else if (mode == 25) { r = 1.0 - abs(1.0 - A - B); } // Negation
|
|
345
|
+
else if (mode == 26) { r = HSLToRGB(vec3(RGBToHSL(B).x, RGBToHSL(A).y, RGBToHSL(A).z)); } // Hue
|
|
346
|
+
else if (mode == 27) { r = HSLToRGB(vec3(RGBToHSL(A).x, RGBToHSL(B).y, RGBToHSL(A).z)); } // Saturation
|
|
347
|
+
else if (mode == 28) { r = HSLToRGB(vec3(RGBToHSL(B).x, RGBToHSL(B).y, RGBToHSL(A).z)); } // Color
|
|
348
|
+
else if (mode == 29) { r = HSLToRGB(vec3(RGBToHSL(A).x, RGBToHSL(A).y, RGBToHSL(B).z)); } // Luminosity
|
|
349
|
+
else if (mode == 30) { r = mix(A, max(max(A.r, max(A.g, A.b)), 0.0) * B, opacity); } // Tint
|
|
350
|
+
else if (mode == 31) { r = A + B * opacity; } // Add(\u5E26 opacity \u6743\u91CD)
|
|
351
|
+
else if (mode == 32) { r = mix(A, A + A * B, opacity); } // LinearDodge \u53D8\u4F53
|
|
352
|
+
else { r = mix(A, B, opacity); } // Normal(\u542B 0)
|
|
353
|
+
// CPU \u53C2\u8003\uFF08effects.js applyBlending\uFF09\uFF1A5/10/30/31/32 \u76F4\u63A5\u8FD4\u56DE\u4E0D\u7ECF opacity \u6743\u91CD\uFF0C
|
|
354
|
+
// \u5176\u4F59\u7EDF\u4E00 mix(A, r, opacity) \u56DE\u5F52\u539F\u8272\u3002
|
|
355
|
+
//
|
|
356
|
+
// [we-scene patch] **mode 0 \u4E5F\u5FC5\u987B\u6392\u9664**\uFF1A\u5B83\u7684\u5206\u652F\u5DF2\u7ECF\u662F mix(A, B, opacity)\uFF0C
|
|
357
|
+
// \u518D\u5957\u4E00\u5C42\u7B49\u4E8E\u6309 opacity\xB2 \u52A0\u6743\u3002effects.js \u7684 default \u5206\u652F\u662F switch \u5185\u76F4\u63A5
|
|
358
|
+
// return mix3(A, B, opacity)\u3001\u4E0D\u8D70 per() \u7684\u4E8C\u6B21\u52A0\u6743\uFF0C\u8FD9\u91CC\u6F0F\u6392\u4E86 0\u3002
|
|
359
|
+
// \u75C7\u72B6\u6781\u9690\u853D\uFF1Axray \u7684\u4E24\u5F20\u56FE\u662F\u540C\u4E00\u6784\u56FE\u7684\u4E0D\u540C\u7248\u672C\uFF08A\u2248B\uFF09\uFF0C\u5E73\u65B9\u540E\u5DEE\u5F02\u88AB\u538B\u5230
|
|
360
|
+
// \u8089\u773C\u4E0E readPixels \u90FD\u8BFB\u4E0D\u51FA\uFF08\u5B9E\u6D4B 6 \u4E2A xray \u58C1\u7EB8\u50CF\u7D20\u5DEE\u6070\u597D\u4E3A 0\uFF0C
|
|
361
|
+
// \u800C\u628A\u6700\u7EC8\u8F93\u51FA\u6362\u6210\u4E2D\u95F4\u91CF\u7684\u63A2\u9488\u663E\u793A blend=187\u3001sprite=187\u3001mask.a=255 \u5168\u90FD\u6B63\u5E38\uFF09\u3002
|
|
362
|
+
// \u6CE8\u610F\u672C\u6587\u4EF6\u662F TS \u6A21\u677F\u5B57\u7B26\u4E32\uFF0C\u6CE8\u91CA\u91CC\u4E0D\u80FD\u51FA\u73B0\u53CD\u5F15\u53F7\u3002
|
|
363
|
+
if (mode != 0 && mode != 5 && mode != 10 && mode != 30 && mode != 31 && mode != 32) {
|
|
364
|
+
r = mix(A, r, opacity);
|
|
365
|
+
}
|
|
366
|
+
return r;
|
|
367
|
+
}
|
|
368
|
+
// greyscale \u5FC5\u987B\u8FD4\u56DE **float** \u800C\u4E0D\u662F vec3 \u2014\u2014 \u8C03\u7528\u70B9\u51E0\u4E4E\u5168\u662F
|
|
369
|
+
// \`noise = CAST3(greyscale(noise))\`\uFF08filmgrain/vhs\uFF09\uFF0CCAST3 \u53EA\u80FD\u4F5C\u7528\u4E8E\u6807\u91CF\uFF1B
|
|
370
|
+
// \u82E5\u58F0\u660E\u6210 vec3 \u7248\u672C\uFF0C\u8FD9\u4E9B\u70B9\u4F1A\u53D8\u6210\u975E\u6CD5\u7684 vec3(vec3)\u3002
|
|
371
|
+
// \u552F\u4E00\u7684 \`albedo.rgb = greyscale(albedo.rgb)\`\uFF08color_grading\uFF09\u5728 HLSL \u91CC\u9760\u6807\u91CF
|
|
372
|
+
// \u81EA\u52A8\u5E7F\u64AD\u6210\u7ACB\uFF0C\u8F6C\u8BD1\u5230 GLSL \u540E\u7531\u8D4B\u503C\u7AEF\u7684 vec3 = float \u5E7F\u64AD\u627F\u63A5\u3002
|
|
373
|
+
//
|
|
374
|
+
// \u6743\u91CD\u662F **vec3(0.11, 0.59, 0.3)**\uFF0C\u5373 Rec.601 (0.30,0.59,0.11) \u7684**\u9006\u5E8F**\u2014\u2014
|
|
375
|
+
// WE \u7B2C\u4E00\u65B9 shader \u91CC\u7684\u5386\u53F2\u9057\u7559\uFF08BGR \u65F6\u4EE3\uFF09\u3002\u4F9D\u636E\u662F 4 \u4E2A\u7B2C\u4E00\u65B9\u6587\u4EF6\u628A\u5B83\u5185\u8054\u5199\u6B7B\uFF1A
|
|
376
|
+
// localcontrast_combine.frag\uFF08\u6B63\u662F blur_combine \u7684\u514D\u5934\u6587\u4EF6\u7248\uFF0C#if GREYSCALE \u4E0B
|
|
377
|
+
// \u505A\u7684\u5C31\u662F greyscale \u7684\u4E8B\uFF09\u3001shine_downsample2.frag \u7B49\uFF0C\u8DE8 6 \u4E2A\u58C1\u7EB8\u5B57\u8282\u4E00\u81F4\u3002
|
|
378
|
+
// \u6CE8\u610F\u5DE5\u574A shader \u5927\u591A\u7528 Rec.709 (0.2126,0.7152,0.0722)\uFF0C\u4F46\u5B83\u4EEC\u90FD\u662F**\u672C\u5730\u81EA\u5B9A\u4E49**
|
|
379
|
+
// \u7684\u5B8F\uFF0C\u4E0D\u7ECF\u8FC7\u8FD9\u4E2A\u5934\uFF1Bcolor_grading.frag \u751A\u81F3\u540C\u6587\u4EF6\u5185\u4E24\u79CD\u5E76\u5B58 \u2014\u2014
|
|
380
|
+
// \u5B83\u81EA\u5DF1 #define LUMINANCE_FACTOR \u4E3A 709\uFF0C\u540C\u65F6\u53C8\u8C03\u7528\u672C\u5934\u7684 greyscale\uFF0C
|
|
381
|
+
// \u6B63\u8BF4\u660E greyscale \u4E0D\u662F 709 \u90A3\u5957\u3002
|
|
382
|
+
#define LUMINANCE_FACTOR vec3(0.11, 0.59, 0.3)
|
|
383
|
+
float greyscale(vec3 color) { return dot(vec3(0.11, 0.59, 0.3), color); }
|
|
384
|
+
// BlendLinearDodge \u5FC5\u987B\u6309\u540D\u5B58\u5728\uFF1A\u5B83\u88AB\u5F53\u4F5C**\u5B9E\u53C2**\u4F20\u7ED9 BlendOpacity\uFF0C
|
|
385
|
+
// \u81EA\u8EAB\u4ECE\u4E0D\u5E26\u62EC\u53F7\u8C03\u7528\uFF08\u6545\u6309\u8C03\u7528\u626B\u63CF\u7684\u6821\u9A8C\u5668\u770B\u4E0D\u5230\u5B83\uFF0C\u4F46\u7F3A\u4E86\u4F1A\u5C55\u5F00\u5931\u8D25\uFF09\u3002
|
|
386
|
+
vec3 BlendLinearDodge(vec3 base, vec3 blend) { return min(base + blend, vec3(1.0)); }
|
|
387
|
+
// BlendSoftLight \u6309\u540D\u5BFC\u51FA\uFF08splitTone \u76F4\u63A5\u8C03\u7528\uFF0C2 \u53C2\u3001\u65E0 opacity\uFF0C0.5 \u4E3A\u6052\u7B49\uFF09
|
|
388
|
+
vec3 BlendSoftLight(vec3 a, vec3 b) { return weBlendSoftLight(a, b); }
|
|
389
|
+
// BlendOpacity \u53EA\u80FD\u662F**\u51FD\u6570\u5F0F\u5B8F**\uFF0C\u4E0D\u80FD\u662F\u51FD\u6570 \u2014\u2014 \u7B2C 3 \u4E2A\u5B9E\u53C2\u662F\u88F8\u51FD\u6570\u540D
|
|
390
|
+
// \uFF08\`BlendOpacity(albedo.rgb, smoothstep(...), BlendLinearDodge, blend)\`\uFF09\uFF0C
|
|
391
|
+
// \u800C GLSL ES \u6CA1\u6709\u51FD\u6570\u6307\u9488\u3002hlsl2glsl \u7684 expandFunctionMacro \u4F1A\u5728 JS \u4FA7\u9884\u5C55\u5F00\u3002
|
|
392
|
+
#define BlendOpacity(base, blend, F, O) mix((base), F((base), (blend)), (O))
|
|
393
|
+
// ContrastSaturationBrightness \u7684\u5B9E\u53C2\u987A\u5E8F\u4E0E\u51FD\u6570\u540D\u76F8\u53CD\uFF1A
|
|
394
|
+
// \u5B9E\u6D4B\u552F\u4E00\u8C03\u7528\u70B9\u4E3A (albedo.rgb, 1.0 + c_brightness, 1.0 + c_saturation, 1.0 + c_contrast)\uFF0C
|
|
395
|
+
// \u4E09\u4E2A uniform \u7684 range \u5747\u4E3A [-1,1]\uFF0C\u6545\u4E09\u4E2A\u53C2\u6570\u90FD\u662F [0,2] \u7684\u500D\u7387\u30011.0 \u4E3A\u6052\u7B49\u3002
|
|
396
|
+
vec3 ContrastSaturationBrightness(vec3 color, float brt, float sat, float con) {
|
|
397
|
+
vec3 brtColor = color * brt;
|
|
398
|
+
vec3 satColor = mix(vec3(dot(brtColor, LUMINANCE_FACTOR)), brtColor, sat);
|
|
399
|
+
return mix(vec3(0.5), satColor, con);
|
|
400
|
+
}
|
|
401
|
+
`,"common_perspective.h":`// WE common_perspective.h\uFF08\u91CD\u5EFA\uFF09
|
|
402
|
+
mat3 squareToQuad(vec2 p0, vec2 p1, vec2 p2, vec2 p3) {
|
|
403
|
+
float dx1 = p1.x - p2.x;
|
|
404
|
+
float dy1 = p1.y - p2.y;
|
|
405
|
+
float dx2 = p3.x - p2.x;
|
|
406
|
+
float dy2 = p3.y - p2.y;
|
|
407
|
+
float sx = p0.x - p1.x + p2.x - p3.x;
|
|
408
|
+
float sy = p0.y - p1.y + p2.y - p3.y;
|
|
409
|
+
float den = dx1 * dy2 - dx2 * dy1;
|
|
410
|
+
float g = 0.0;
|
|
411
|
+
float h = 0.0;
|
|
412
|
+
if (abs(den) > 1e-9) {
|
|
413
|
+
g = (sx * dy2 - dx2 * sy) / den;
|
|
414
|
+
h = (dx1 * sy - sx * dy1) / den;
|
|
415
|
+
}
|
|
416
|
+
float a = p1.x - p0.x + g * p1.x;
|
|
417
|
+
float b = p3.x - p0.x + h * p3.x;
|
|
418
|
+
float c = p0.x;
|
|
419
|
+
float d = p1.y - p0.y + g * p1.y;
|
|
420
|
+
float e = p3.y - p0.y + h * p3.y;
|
|
421
|
+
float f = p0.y;
|
|
422
|
+
// \u884C\u5411\u91CF\u7EA6\u5B9A\uFF1A[u v 1] * M
|
|
423
|
+
return mat3(a, d, g,
|
|
424
|
+
b, e, h,
|
|
425
|
+
c, f, 1.0);
|
|
426
|
+
}
|
|
427
|
+
`,"common_blur.h":`// WE common_blur.h\uFF08\u91CD\u5EFA\uFF09
|
|
428
|
+
uniform sampler2D g_Texture0;
|
|
429
|
+
vec4 blur13a(vec2 uv, vec2 stp) {
|
|
430
|
+
return texture(g_Texture0, uv - stp * 6.0) * 0.006299
|
|
431
|
+
+ texture(g_Texture0, uv - stp * 5.0) * 0.017298
|
|
432
|
+
+ texture(g_Texture0, uv - stp * 4.0) * 0.039533
|
|
433
|
+
+ texture(g_Texture0, uv - stp * 3.0) * 0.075189
|
|
434
|
+
+ texture(g_Texture0, uv - stp * 2.0) * 0.119007
|
|
435
|
+
+ texture(g_Texture0, uv - stp) * 0.156756
|
|
436
|
+
+ texture(g_Texture0, uv) * 0.171834
|
|
437
|
+
+ texture(g_Texture0, uv + stp) * 0.156756
|
|
438
|
+
+ texture(g_Texture0, uv + stp * 2.0) * 0.119007
|
|
439
|
+
+ texture(g_Texture0, uv + stp * 3.0) * 0.075189
|
|
440
|
+
+ texture(g_Texture0, uv + stp * 4.0) * 0.039533
|
|
441
|
+
+ texture(g_Texture0, uv + stp * 5.0) * 0.017298
|
|
442
|
+
+ texture(g_Texture0, uv + stp * 6.0) * 0.006299;
|
|
443
|
+
}
|
|
444
|
+
vec4 blur7a(vec2 uv, vec2 stp) {
|
|
445
|
+
return texture(g_Texture0, uv - stp * 3.0) * 0.071303
|
|
446
|
+
+ texture(g_Texture0, uv - stp * 2.0) * 0.131514
|
|
447
|
+
+ texture(g_Texture0, uv - stp) * 0.189879
|
|
448
|
+
+ texture(g_Texture0, uv) * 0.214607
|
|
449
|
+
+ texture(g_Texture0, uv + stp) * 0.189879
|
|
450
|
+
+ texture(g_Texture0, uv + stp * 2.0) * 0.131514
|
|
451
|
+
+ texture(g_Texture0, uv + stp * 3.0) * 0.071303;
|
|
452
|
+
}
|
|
453
|
+
vec4 blur3a(vec2 uv, vec2 stp) {
|
|
454
|
+
return texture(g_Texture0, uv - stp) * 0.27901
|
|
455
|
+
+ texture(g_Texture0, uv) * 0.44198
|
|
456
|
+
+ texture(g_Texture0, uv + stp) * 0.27901;
|
|
457
|
+
}
|
|
458
|
+
// \u5F84\u5411\u6A21\u7CCA\uFF1AblurRadialNa(uv, center, scale)\u3002\u5B83\u7684 .vert \u4E0D\u4F20\u5206\u8FA8\u7387\u4E5F\u4E0D\u4F20\u6B65\u957F\uFF0C
|
|
459
|
+
// \u6545\u6B65\u957F\u53EA\u80FD\u7531 (uv - center) \u81EA\u884C\u5BFC\u51FA \u2014\u2014 \u6309\u300C\u6CBF\u6307\u5411\u4E2D\u5FC3\u7684\u65B9\u5411\u6309\u6BD4\u4F8B\u53D6\u6837\u300D\u5B9E\u73B0\uFF0C
|
|
460
|
+
// \u7CFB\u6570\u53D6 1/64 \u4F7F scale=1 \u65F6\u7684\u6700\u5927\u4F4D\u79FB\u7EA6\u4E3A\u534A\u5F84\u7684 1/10\uFF08\u4E0E u_Scale \u7684 [0.01,2] \u91CF\u7A0B\u5339\u914D\uFF09\u3002
|
|
461
|
+
vec4 blurRadial13a(vec2 uv, vec2 center, float scale) {
|
|
462
|
+
return blur13a(uv, (uv - center) * scale * 0.015625);
|
|
463
|
+
}
|
|
464
|
+
vec4 blurRadial7a(vec2 uv, vec2 center, float scale) {
|
|
465
|
+
return blur7a(uv, (uv - center) * scale * 0.015625);
|
|
466
|
+
}
|
|
467
|
+
vec4 blurRadial3a(vec2 uv, vec2 center, float scale) {
|
|
468
|
+
return blur3a(uv, (uv - center) * scale * 0.015625);
|
|
469
|
+
}
|
|
470
|
+
`,"common_composite.h":`// WE common_composite.h\uFF08\u91CD\u5EFA\uFF09
|
|
471
|
+
vec2 ApplyCompositeOffset(vec2 uv, vec2 res) {
|
|
472
|
+
return uv;
|
|
473
|
+
}
|
|
474
|
+
vec4 ApplyComposite(vec4 backdrop, vec4 source) {
|
|
475
|
+
vec4 result = source;
|
|
476
|
+
#if COMPOSITE == 1
|
|
477
|
+
result = vec4(mix(backdrop.rgb, source.rgb, source.a), max(backdrop.a, source.a));
|
|
478
|
+
#endif
|
|
479
|
+
#if COMPOSITE == 2
|
|
480
|
+
result = vec4(mix(source.rgb, backdrop.rgb, backdrop.a), max(backdrop.a, source.a));
|
|
481
|
+
#endif
|
|
482
|
+
#if COMPOSITE == 3
|
|
483
|
+
result = vec4(backdrop.rgb, backdrop.a * (1.0 - source.a));
|
|
484
|
+
#endif
|
|
485
|
+
#if COMPOSITEMONO == 1
|
|
486
|
+
result.rgb = vec3(dot(vec3(0.11, 0.59, 0.3), result.rgb));
|
|
487
|
+
#endif
|
|
488
|
+
return result;
|
|
489
|
+
}
|
|
490
|
+
`,"common_fragment.h":`// WE common_fragment.h\uFF08\u91CD\u5EFA\uFF09
|
|
491
|
+
#define FORMAT_RG88 8
|
|
492
|
+
#define FORMAT_R8 9
|
|
493
|
+
vec3 DecompressNormal(vec4 tex) {
|
|
494
|
+
vec2 xy = tex.xy * 2.0 - 1.0;
|
|
495
|
+
return vec3(xy, sqrt(clamp(1.0 - dot(xy, xy), 0.0, 1.0)));
|
|
496
|
+
}
|
|
497
|
+
`,"common_vertex.h":`// WE common_vertex.h\uFF08\u91CD\u5EFA\uFF1A\u7A7A\u5360\u4F4D\uFF0C\u89C1 headers.ts \u6CE8\u91CA\uFF09
|
|
498
|
+
`},tl={systemfont_segoe:"'Segoe UI', 'Helvetica Neue', Arial, sans-serif",systemfont_arial:"Arial, 'Helvetica Neue', sans-serif",systemfont_verdana:"Verdana, Geneva, sans-serif",systemfont_tahoma:"Tahoma, Geneva, sans-serif",systemfont_timesnewroman:"'Times New Roman', Times, serif",systemfont_georgia:"Georgia, 'Times New Roman', serif",systemfont_couriernew:"'Courier New', Courier, monospace",systemfont_trebuchetms:"'Trebuchet MS', 'Helvetica Neue', sans-serif",systemfont_impact:"Impact, 'Arial Black', sans-serif",systemfont_comicsansms:"'Comic Sans MS', 'Comic Sans', cursive",systemfont_sylfaen:"Palatino, 'Times New Roman', serif",systemfont_calibri:"Calibri, Carlito, 'Helvetica Neue', sans-serif",systemfont_cambria:"Cambria, Georgia, serif",systemfont_consolas:"Consolas, 'Courier New', monospace",systemfont_microsoftyahei:"'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', sans-serif",systemfont_simsun:"SimSun, 'Songti SC', serif",systemfont_simhei:"SimHei, 'Heiti SC', sans-serif"},Di=new Map,Xn=new Map;async function nl(e,n,t,r){const o=t.key;if(o){const a=Xn.get(o);if(a)return a.at=Date.now(),ae(e,n,`pkg cache hit: ${a.parsed.fileSize} bytes`),a.parsed}let i;try{i=await t.scenePkg(r)}catch(a){throw r.aborted||a instanceof Error?a:new Error(String(a))}ae(e,n,`pkg body: ${i.byteLength} bytes`);const s=i instanceof Uint8Array?i:new Uint8Array(i),c=je.parsePkg(s);if(!o)return c;if(Xn.set(o,{parsed:c,at:Date.now()}),Xn.size>2){let a=null,u=1/0;for(const[l,d]of Xn)l!==o&&d.at<u&&(u=d.at,a=l);a&&Xn.delete(a)}return c}function rl(e,n){on(e);const t=n.canvas??document.createElement("canvas"),r=er(e,n),o=t.clientWidth||window.innerWidth||1,i=t.clientHeight||window.innerHeight||1;t.width=Math.max(1,Math.round(o*r)),t.height=Math.max(1,Math.round(i*r)),n.canvas||(t.style.cssText="position:absolute;inset:0;width:100%;height:100%;",e.wrap?.appendChild(t)),e.canvas=t;let s=!1;const c=new AbortController;let a;e.sceneCleanup=()=>{s=!0,c.abort(),e.sceneTextUpdate=void 0,a&&(a(),a=void 0),e.renderer&&(e.renderer.dispose?.(),e.renderer=void 0)};let u=null,l,d,h;e.sceneCtl={pause(){d?.()},resume(){h?.()},applyUserProperties(p){l?l(p):u={...u||{},...p}}},(async()=>{try{const p=n.source??Fi(`${n.mediaBase}/${n.src}`);if(!n.source&&(!n.mediaBase||!n.src))throw new Error("\u573A\u666F\u58C1\u7EB8\u7F3A\u5C11 mediaBase/src");ae(e,n,"mountScene start");const w=await nl(e,n,p,c.signal);if(s)return;let m=null;try{m=await p.project?.(c.signal)??null}catch{}if(!t.getContext("webgl2",{premultipliedAlpha:!1,antialias:!1,alpha:!1,preserveDrawingBuffer:!0}))throw new Error("WEBGL2_UNAVAILABLE");const v=je.getEntry(w,"scene.json");if(!v)throw new Error("pkg \u4E2D\u6CA1\u6709 scene.json\uFF08\u4E0D\u662F\u573A\u666F\u58C1\u7EB8\uFF1F\uFF09");const b=Qe.parseScene(JSON.parse(ut(v)),m);{const A=b.general?.zoom,L=Number(A&&typeof A=="object"?A.value:A);b.cameraTransforms={zoom:Number.isFinite(L)&&L>0?L:1}}const x=bs(b.properties||{});e.liveUserProps=x;const E=()=>Qe.recomputeLayerVisibility(b.layers);if(e.onSceneInfo){const A=b.general?.orthogonalprojection||{},L=Number(A.width)>0?Number(A.width):t.width,I=Number(A.height)>0?Number(A.height):t.height,U=b.layers||[],X={width:L,height:I,layerCount:U.length,hasModels:U.some(Y=>!!Y.model),hasParticles:U.some(Y=>!!Y.particle),hasText:U.some(Y=>!!Y.text)},ne=e.onSceneInfo;e.onSceneInfo=void 0,ne(X)}const _=[];Bi&&(b.layers=b.layers.filter(A=>!(Bi&&A.isComponent)));const C=A=>{const L=A.startsWith("shaders/")?A:"shaders/"+A,I=A.startsWith("shaders/")?A.slice(8):A,U=je.getEntry(w,L);let X=U?ut(U):el[I]??null;const ne=window.__shaderPatch;if(X&&ne){const Y=I.replace(/\.(frag|vert|h)$/,""),f=ne[Y]||ne[I];if(typeof f=="function")try{const T=f(X,I);typeof T=="string"&&(X=T)}catch{}}return Promise.resolve(X)},N=ke.createRenderer(t,{shaderResolver:C,diag:A=>ae(e,n,`renderer: ${A}`),fboCapFactor:0});if(e.renderer=N,s)return;const D=m?.general?.supportsaudioprocessing!==!1,k=_c(),O={enabled:D},j=A=>new Float32Array(A),W={left16:j(16),right16:j(16),left32:j(32),right32:j(32),left64:j(64),right64:j(64),level:0,silent:!0};N.setAudioProvider(()=>O.enabled?k.snapshot:W);const K=new Map;window.__audioStats=()=>({enabled:O.enabled,level:O.enabled?Math.round(k.snapshot.level*1e3)/1e3:0,silent:O.enabled?k.snapshot.silent:!0,bass:O.enabled?Math.round(k.snapshot.left64[2]*1e3)/1e3:0}),window.__audioMute=A=>(O.enabled=!A,O.enabled),ae(e,n,`audio: simulated stream, supportsaudioprocessing=${D}`);const V=Rt.createSimulatedMedia(),G=Ri.createSimulatedWindowTitle(),Q=Ri.createShortcutHandler(A=>{ae(e,n,`openUserShortcut: ${A}`)}),q={enabled:!0,override:null},te=[];let me=null;const ye=A=>{if(!(!A||!A.hasMediaHook||te.includes(A))&&(te.push(A),!!V.snapshot.hasMedia))for(const{name:L,event:I}of Rt.diffMediaEvents(null,V.snapshot))try{A.callMedia(L,I)}catch{}};window.__mediaStats=()=>({enabled:q.enabled,hooks:te.length,title:V.snapshot.title,artist:V.snapshot.artist,album:V.snapshot.album,state:V.snapshot.state,position:Math.round(V.snapshot.position),duration:V.snapshot.duration,hasThumbnail:V.snapshot.hasThumbnail,lyric:V.snapshot.lyricLine,primaryColor:V.snapshot.primaryColor?[V.snapshot.primaryColor.x,V.snapshot.primaryColor.y,V.snapshot.primaryColor.z]:null}),window.__mediaSet=A=>{Object.assign(V.snapshot,A||{});const L=Rt.diffMediaEvents(me,V.snapshot);for(const{name:I,event:U}of L)for(const X of te)X.callMedia(I,U);return me=Rt.cloneMediaSnapshot(V.snapshot),window.__mediaStats()};const We=()=>{const A=Rt.diffMediaEvents(me,V.snapshot);for(const{name:L,event:I}of A)for(const U of te)try{U.callMedia(L,I)}catch{}me=Rt.cloneMediaSnapshot(V.snapshot)},Ve={snapshot:V.snapshot,skipNext:()=>(V.skipNext(),We(),V.snapshot),skipPrevious:()=>(V.skipPrevious(),We(),V.snapshot),play:()=>(V.play(),We(),V.snapshot),pause:()=>(V.pause(),We(),V.snapshot),playPause:()=>(V.playPause(),We(),V.snapshot)};window.__mediaControl=Ve,window.__system={media:Ve,windowTitle:G.snapshot,shortcuts:Q.last};const Se=zc.createPointerSource(n.canvas?{target:n.canvas,viewport:()=>({w:n.canvas.clientWidth||window.innerWidth||1,h:n.canvas.clientHeight||window.innerHeight||1})}:{});N.setPointerProvider(()=>Se);{const A=a;a=()=>{A?.(),Se.dispose()}}const Je=qe.createInputView(),Xe=Dc.createEngineTimers({setTimeout:(A,L)=>window.setTimeout(A,L),clearTimeout:A=>window.clearTimeout(A),setInterval:(A,L)=>window.setInterval(A,L),clearInterval:A=>window.clearInterval(A)},{onError:(()=>{let A=!1;return L=>{A||(A=!0,ae(e,n,`engine \u5B9A\u65F6\u5668\u56DE\u8C03\u629B\u9519\uFF08\u6B64\u540E\u540C\u7C7B\u9759\u9ED8\uFF09: ${String(L?.message||L).slice(0,90)}`))}})()}),Pe={setTimeout:Xe.setTimeout,clearTimeout:Xe.clearTimeout,setInterval:Xe.setInterval,clearInterval:Xe.clearInterval};{const A=a;a=()=>{A?.(),Xe.dispose()}}window.__pointerStats=()=>{const A=Se.state,L=I=>Math.round(I*1e3)/1e3;return{normalized:{u:L(A.u),v:L(A.v)},last:{u:L(A.lastU),v:L(A.lastV)},world:{x:Math.round(A.wx),y:Math.round(A.wy)},originY:A.originY!=null?Math.round(A.originY):null,screen:{x:A.screenX,y:A.screenY,w:A.screenW,h:A.screenH},leftDown:A.leftDown,has:A.has,delta:L(Se.normalizedDelta()),counts:{move:A.moveCount,down:A.downCount,up:A.upCount}}};const Ae=new Map;Ae.set("util/white",{glTex:ke.makeTexture(N.gl,new Uint8Array([255,255,255,255]),1,1),width:1,height:1,rg88:!1}),Ae.set("util/noflow",{glTex:ke.makeTexture(N.gl,new Uint8Array([127,127,127,255]),1,1),width:1,height:1,rg88:!1}),Ae.set("util/noise",{glTex:ke.makeTexture(N.gl,Ic.generateNoiseTexture(),256,256),width:256,height:256,rg88:!1,mips:null});{const A=I=>{const U=Rt.renderThumbnail(I,512);return{glTex:ke.makeTextureMip(N.gl,[U],!1),width:U.width,height:U.height,rg88:!1,mips:[U],generated:!0}},L=V.tracks||[];L.length&&(Ae.set("$mediaThumbnail",A(L[0])),Ae.set("$mediaPreviousThumbnail",A(L[L.length-1])))}const Ye=new Map,yr=async A=>{if(Ae.has(A))return Ae.get(A);const L=je.getEntry(w,`materials/${A}.tex`);if(!L){if(hn.isBuiltinParticleTextureName(A)){const Y=hn.buildBuiltinParticleTexture(A);if(Y){const f={glTex:ke.makeTextureMip(N.gl,[Y],!1),width:Y.width,height:Y.height,rg88:!1,mips:[Y],generated:!0};return Ae.set(A,f),f}}return null}const I=vr.parseTex(L),U=vr.decodeMip0(I),X=I.format===8;let ne=null;if(U.video!==void 0){const Y=URL.createObjectURL(new Blob([U.video],{type:"video/mp4"})),f=Kc(Y,{muted:!0,renderDpr:er(e,n),maxW:t.clientWidth||window.innerWidth||1,maxH:t.clientHeight||window.innerHeight||1});for(const R of[f.active,f.standby])R.style.cssText="position:fixed;left:-9999px;top:-9999px;width:2px;height:2px;opacity:0;pointer-events:none",document.body.appendChild(R),(e.videoTextures??=[]).push(R);(e.objectUrls??=[]).push(Y),(e.videoPairs??=[]).push(f),f.active.addEventListener("loadedmetadata",()=>{ae(e,n,`video tex '${A}': ${f.active.videoWidth}x${f.active.videoHeight}`)}),f.active.addEventListener("error",()=>{ae(e,n,`video tex '${A}' ERROR: ${f.active.error?.code}`)});const T=[],y=R=>{for(const B of T)R.addEventListener("ended",B)},M={play:()=>{s||f.resume()},pause:()=>f.pause(),stop:()=>{f.pause();try{f.active.currentTime=0}catch{}},isPlaying:()=>!f.active.paused&&!f.active.ended,duration:()=>Number.isFinite(f.active.duration)?f.active.duration:0,getCurrentTime:()=>f.active.currentTime||0,setCurrentTime:R=>{try{f.active.currentTime=R}catch{}},getRate:()=>f.active.playbackRate||1,setRate:R=>{f.active.playbackRate=R,f.standby.playbackRate=R},getLoop:()=>f.active.loop,setLoop:R=>{f.active.loop=R,f.standby.loop=R},addEndedCallback:R=>{T.push(R),f.active.addEventListener("ended",R)}},S={get video(){return f.active},glTex:ke.makeTexture(N.gl,new Uint8Array([0,0,0,0]),1,1),width:U.width,height:U.height,rg88:!1,lastUploaded:-1,videoCtl:M};let P=0;return f.onSwap=R=>{S.lastUploaded=-1,y(R),P++,(P===1||P===10||P===100)&&ae(e,n,`video tex '${A}' loop swap ok x${P}`)},f.onFallback=()=>{ae(e,n,`video tex '${A}' loop fallback (native loop used)`)},Ae.set(A,S),S}else if(U.png!==void 0||U.image!==void 0&&U.fif===vr.FIF.JPEG){const Y=new Blob([U.png||U.image],{type:U.png?"image/png":"image/jpeg"}),f=await createImageBitmap(Y);ne={glTex:ke.makeTexture(N.gl,null,0,0,f),width:f.width,height:f.height,rg88:X}}else{if(U.image!==void 0)return null;{const Y=vr.decodeMip0(I);ne={glTex:ke.makeTextureMip(N.gl,[Y],X),width:Y.width,height:Y.height,rg88:X,mips:[Y]}}}if(!ne)return null;if(I.frames?.list?.length){const Y=I.frames.list;Y.atlasWidth=ne.width,Y.atlasHeight=ne.height,ne.frames=Y}return Ae.set(A,ne),ne},ot=A=>{if(Ae.has(A))return Promise.resolve(Ae.get(A));const L=Ye.get(A);if(L)return L;const I=yr(A);return Ye.set(A,I),I.finally(()=>{Ye.get(A)===I&&Ye.delete(A)}),I},He=/uniform\s+sampler2D\s+g_Texture\d+\s*;\s*\/\/[^\n]*"default"\s*:\s*"([^"]+)"/g,Hn=async A=>{for(const L of A.materialPasses||[])if(L.shader)for(const I of["frag","vert"]){const U=je.getEntry(w,`shaders/${L.shader}.${I}`);if(!U)continue;const X=ut(U);He.lastIndex=0;let ne;for(;(ne=He.exec(X))!==null;){const Y=ne[1];!Y||Y.startsWith("util/")||Y.startsWith("_rt_")||Ae.has(Y)||await ot(Y)}}};let Lt=0;const et=[];for(let A=0;A<b.layers.length;A++){const L=b.layers[A];if(L.image)try{let I;if(wt.BUILTIN_MODELS[L.image])I=wt.BUILTIN_MODELS[L.image];else{const T=je.getEntry(w,L.image);if(!T)continue;I=JSON.parse(ut(T))}if(Qe.applySolidFromModel(L,I),I&&typeof I=="object"&&"width"in I&&"height"in I){const T=I;(L.size?.[0]||0)===0&&(L.size?.[1]||0)===0&&T.width>0&&T.height>0&&(L.size=[T.width,T.height])}const U=Qe.resolveMaterial(I);if(!U)continue;let X;if(wt.BUILTIN_MATERIALS[U.materialPath])X=wt.BUILTIN_MATERIALS[U.materialPath];else{const T=je.getEntry(w,U.materialPath);if(T)X=JSON.parse(ut(T));else if(L.solid&&wt.BUILTIN_MATERIALS["materials/util/solidlayer.json"])X=wt.BUILTIN_MATERIALS["materials/util/solidlayer.json"];else continue}const ne=X.passes?.[0],Y=ne?.textures||[],f=Y[0];if(ne?.combos){for(const T of Object.keys(ne.combos))if(T.toLowerCase()==="spritesheet"&&Number(ne.combos[T])===1){L.spriteSheet=!0;break}}for(let T=0;T<Y.length;T++){const y=Y[T];typeof y!="string"||!y||y.startsWith("util/")||y.startsWith("_rt_")||et.push(ot(y).then(M=>{M&&T===0&&(L.textureName=y,Lt++,M.videoCtl&&(L.videoCtl=M.videoCtl))}))}ne?.shader&&je.getEntry(w,`shaders/${ne.shader}.frag`)&&wt.attachLayerMaterialEffect(L,ne);for(const T of L.effects||[])wt.resolveEffectChain(w,T,ut);for(const T of L.effects||[]){for(const y of T.passes||[])for(const M of y.textures||[])typeof M=="string"&&M!==""&&!M.startsWith("util/")&&!M.startsWith("_rt_")&&et.push(ot(M));et.push(Hn(T))}}catch(I){console.warn(`\u56FE\u5C42 ${L.name||A} \u52A0\u8F7D\u5931\u8D25: ${I.message}`)}}if(!Ii){for(const A of b.layers)if(!(!A.isText||!(A.effects||[]).length))try{for(const L of A.effects||[])wt.resolveEffectChain(w,L,ut);for(const L of A.effects||[])for(const I of L.passes||[])for(const U of I.textures||[])typeof U=="string"&&U!==""&&!U.startsWith("util/")&&!U.startsWith("_rt_")&&et.push(ot(U))}catch(L){console.warn(`\u6587\u5B57\u5C42\u6548\u679C ${A.name} \u89E3\u6790\u5931\u8D25: ${L.message}`)}}await Promise.all(et);for(const[A,L]of Ae){if(!L?.videoCtl)continue;b.layers.some(U=>U.textureName===A&&U.visible&&!U.destroyed)&&!e.paused&&L.videoCtl.play()}const Be=[],Mt=new Map;let mn=0;const pn=async A=>{const L=await ot(A);if(L)return L;const I=hn.buildBuiltinParticleTexture(A);if(!I)return null;const U={glTex:ke.makeTextureMip(N.gl,[I],!1),width:I.width,height:I.height,rg88:!1,mips:[I],generated:!0};return Ae.set(A,U),mn++,U},gn=A=>{if(!A)return null;const L=A.mips&&A.mips[0];if(L?.rgba&&typeof hn.prepareParticleNormalTexture=="function"){const I=hn.prepareParticleNormalTexture(L);if(I&&I!==L)return{glTex:ke.makeTextureMip(N.gl,[I],!1),width:I.width,height:I.height,rg88:!1,mips:[I],generated:!0}}return A},Gn=async(A,L,I,U)=>{if(U>3)return null;const X=je.getEntry(w,A);if(!X)return ae(e,n,`particle '${A}' \u4E0D\u5728 pkg\uFF0C\u8DF3\u8FC7`),null;const ne=JSON.parse(ut(X)),Y=new Oc.ParticleSystem(N.gl,ne,I,L);let f=null,T=null;if(ne.material){const P=je.getEntry(w,ne.material);if(P){const R=JSON.parse(ut(P));Y.setMaterial(R);const B=R?.passes?.[0]?.textures||[];f=B[0]||null,T=B[1]||null}}const y=await pn(f||"particle/halo");if(!y)return ae(e,n,`particle '${A}' \u65E0\u8D34\u56FE\u53EF\u7528\uFF0C\u8DF3\u8FC7`),null;Y.setTexture({glTex:y.glTex,width:y.width,height:y.height,frames:y.frames});const M=T||(Y.refract?hn.particleNormalNameForAlbedo(f||"particle/halo"):null);if(M){const P=gn(await pn(M));P&&Y.setNormalTexture({glTex:P.glTex,width:P.width,height:P.height})}Y.setVisible(!!L.visible),Be.push(Y);const S=L.id;if(S!==void 0){let P=Mt.get(S);P||(P=[],Mt.set(S,P)),P.push(Y)}for(const P of ne.children||[]){if(!P||typeof P.name!="string")continue;const R=String(P.origin??"0 0 0").trim().split(/\s+/).map(Number),B=String(P.scale??"1 1 1").trim().split(/\s+/).map(Number),z=String(P.angles??"0 0 0").trim().split(/\s+/).map(Number),$=P.type==="eventfollow"?"particle":!P.type||P.type==="static"?"origin":null,J=Y.localToWorld(R[0]||0,R[1]||0),re={...L,origin:[J[0],J[1],(L.origin?.[2]||0)+(R[2]||0)],scale:[(L.scale?.[0]??1)*(B[0]||1),(L.scale?.[1]??1)*(B[1]||1),(L.scale?.[2]??1)*(B[2]||1)],angles:[(L.angles?.[0]||0)+(z[0]||0),(L.angles?.[1]||0)+(z[1]||0),(L.angles?.[2]||0)+(z[2]||0)]},Z=await Gn(P.name,re,P.instanceoverride||I,U+1);Z&&$&&Z.attachFollow(Y,$,[R[0]||0,R[1]||0,R[2]||0])}return Y};if(!Qc){for(const A of b.layers)if(A.particle)try{await Gn(A.particle,A,A.instanceoverride,0)}catch(L){console.warn(`\u7C92\u5B50\u56FE\u5C42 ${A.name} \u52A0\u8F7D\u5931\u8D25: ${L.message}`),ae(e,n,`particle '${A.name}' FAIL: ${L.message.slice(0,80)}`)}}if(Be.length>0){const A=a;a=()=>{A?.();for(const L of Be)L.dispose()}}const Qt=[];for(const A of b.layers)if(!(!A.sound||!A.sound.length))try{for(const L of A.sound){const I=je.getEntry(w,L);if(!I)continue;const U=(L.split(".").pop()||"").toLowerCase(),X=U==="mp3"?"audio/mpeg":U==="ogg"?"audio/ogg":U==="flac"?"audio/flac":"audio/wav",ne=new Blob([I],{type:X}),Y=URL.createObjectURL(ne);(e.objectUrls??=[]).push(Y);const f=document.createElement("audio");f.src=Y,f.loop=A.soundprops?.playbackmode==="loop",f.volume=Math.max(0,Math.min(1,A.soundprops?.volume??1)),f.muted=n.muted!==!1,A.soundCtl={play(){if(f.ended)try{f.currentTime=0}catch{}f.play().catch(()=>{})},pause(){f.pause()},stop(){f.pause();try{f.currentTime=0}catch{}},isPlaying:()=>!f.paused&&!f.ended,getVolume:()=>f.volume,setVolume:T=>{f.volume=Math.max(0,Math.min(1,T))}},!A.soundprops?.startsilent&&!e.paused&&f.play().catch(()=>{}),Qt.push(f);break}}catch(L){console.warn(`\u58F0\u97F3\u56FE\u5C42 ${A.name} \u52A0\u8F7D\u5931\u8D25: ${L.message}`)}const Yn=A=>{for(const L of Qt)L.volume=Math.max(0,Math.min(1,A)),L.muted=A<=0};if(e.sceneAudio={setVolume:Yn,audios:Qt},s)return;let we=performance.now(),Gt=0;N.setParticleRenderer(()=>{const A=performance.now(),L=Math.min(.05,(A-we)/1e3);if(we=A,Se.state.has){const{wx:I,wy:U,originY:X}=Se.state,ne=X??U;for(const Y of Be)Y.setPointer(I,ne)}for(const I of Be)I.advance(L,O.enabled?k.snapshot:null);if(Gt<2&&(Gt++,Gt===2)){const I=Be.reduce((U,X)=>U+X.liveCount(),0);ae(e,n,`particles live: ${I} across ${Be.length} systems`)}},(A,L,I,U,X)=>{if(A===void 0)return;const ne=Mt.get(A);if(ne)for(const Y of ne)Y.render(I,U,X,L.projW,L.projH)}),ae(e,n,`particles: ${Be.length} systems, ${mn} builtin tex generated`),window.__particleStats=()=>Be.map(A=>{let L=0,I=1/0,U=-1/0,X=1/0,ne=-1/0,Y=1/0,f=-1/0;for(const T of A.pool){if(!T.alive)continue;L++;const y=A.originX+T.x*A.scaleX,M=A.originY+T.y*A.scaleY;y<I&&(I=y),y>U&&(U=y),M<X&&(X=M),M>ne&&(ne=M);const S=Math.abs(T.size)*A.sysScale;S<Y&&(Y=S),S>f&&(f=S)}return{live:L,max:A.maxCount,blend:A.blend,renderer:A.renderers.map(T=>T.kind).join("+"),origin:[Math.round(A.originX),Math.round(A.originY)],bbox:L?[Math.round(I),Math.round(X),Math.round(U),Math.round(ne)]:null,size:L?[Math.round(Y),Math.round(f)]:null}}),window.__particleToggle=(A,L)=>{for(let I=0;I<Be.length;I++)Be[I].setVisible(L===void 0?A:I===L);return Be.length};const ht=[],bn=new Map,qn=A=>{if(!A||!A.puppet)return null;let L=bn.get(A);return L||(L=new Map,bn.set(A,L)),L};for(const A of b.layers)if(A.image)try{if(wt.BUILTIN_MODELS[A.image])continue;const L=je.getEntry(w,A.image);if(!L)continue;const I=JSON.parse(ut(L));if(!I.puppet)continue;const U=je.getEntry(w,I.puppet);if(!U)continue;const X=Vn.parseMDL(new Uint8Array(U)),ne=A.textureName?Ae.get(A.textureName):null;if(!ne){ae(e,n,`puppet '${A.name}' \u65E0\u8D34\u56FE\uFF0C\u8DF3\u8FC7`);continue}A.puppet=X,ht.push({mdl:X,tex:ne,layer:A});const Y=X.animations[0];ae(e,n,`puppet '${A.name}' v=${X.vertexCount} bones=${X.bones.length}`+(Y?` anim='${Y.name}' ${Y.fps}fps\xD7${Y.frameCount}`:" \u65E0\u52A8\u753B"))}catch(L){console.warn(`puppet \u56FE\u5C42 ${A.name} \u52A0\u8F7D\u5931\u8D25: ${L.message}`),ae(e,n,`puppet '${A.name}' \u5931\u8D25: ${L.message}`)}for(const A of b.layers)if(A.model&&!A.puppet)try{const L=je.getEntry(w,A.model);if(!L)continue;const I=Vn.parseMDL(new Uint8Array(L));let U=null;if(I.materialPath){const ne=je.getEntry(w,I.materialPath);if(ne){const f=JSON.parse(ut(ne))?.passes?.[0]?.textures?.[0];typeof f=="string"&&f&&(U=f)}}U&&(await ot(U),A.textureName=U);const X=U?Ae.get(U):null;if(!X){ae(e,n,`model '${A.name}' \u65E0\u8D34\u56FE\uFF0C\u8DF3\u8FC7`);continue}A.puppet=I,ht.push({mdl:I,tex:X,layer:A}),ae(e,n,`model '${A.name}' v=${I.vertexCount} static ${I.materialPath||""}`)}catch(L){console.warn(`model \u56FE\u5C42 ${A.name} \u52A0\u8F7D\u5931\u8D25: ${L.message}`),ae(e,n,`model '${A.name}' \u5931\u8D25: ${L.message}`)}let Jt=null;if(ht.length>0)try{Jt=Vn.createMDLRenderer(N.gl);for(const L of ht)Jt.upload(L.mdl);const A=new Map;for(const L of ht)A.set(L.layer,L);N.setPuppetRenderer((L,I,U)=>{const X=A.get(L);X&&Jt.draw(I,X.mdl,{time:U.time,animLayers:L.animationLayers,boneOverrides:bn.get(L),overrideTex:U.overrideTex||null,color:[L.color[0]*L.brightness,L.color[1]*L.brightness,L.color[2]*L.brightness,L.alpha]},X.tex)})}catch(A){console.warn(`puppet \u6E32\u67D3\u5668\u521D\u59CB\u5316\u5931\u8D25: ${A.message}`),ae(e,n,`puppet renderer \u5931\u8D25: ${A.message}`),Jt=null;for(const L of ht)L.layer.puppet=null}if(s)return;ae(e,n,`puppet: ${ht.length} meshes`);const en=Vn.applyAttachmentBindOrigins(b.layers);en.length&&ae(e,n,`attachments: ${en.length} hanging layers`);const it=[],vn=new Map,Yt={};let tt=null,xn=null,yn=0;if(!Ii&&b.layers.some(A=>A.isText)){const A=b.general?.orthogonalprojection,L=A?.width||t.width,I=A?.height||t.height,U=Rr(Sn(e.cfg.fit),L,I,t.width,t.height),X=Math.min(3,Math.max(.5,t.width/Math.max(1,U.viewW))),ne=new Map,Y=new Set;for(const y of b.layers)y.isText&&y.textFont&&Y.add(y.textFont);for(const y of w.entries||[])typeof y.name=="string"&&/^fonts\/.+\.(ttf|otf|woff2?)$/i.test(y.name)&&Y.add(y.name);for(const y of Y){const M=Di.get(`${n.src}|${y}`);if(M){ne.set(y,M);continue}const S=tl[y.toLowerCase()];if(S){ne.set(y,S);continue}try{const P=je.getEntry(w,y);if(!P)continue;const R="wefont_"+y.split("/").pop().replace(/[^a-zA-Z0-9]/g,"_"),B=URL.createObjectURL(new Blob([P])),z=new FontFace(R,`url(${B})`);await z.load(),document.fonts.add(z),(e.objectUrls??=[]).push(B),ne.set(y,R),Di.set(`${n.src}|${y}`,R)}catch(P){console.warn(`\u5B57\u4F53\u52A0\u8F7D\u5931\u8D25 ${y}: ${P.message}`)}}tt=document.createElement("canvas"),xn=tt.getContext("2d");const f=2048;for(const y of b.layers)if(y.isText)try{const M={layer:y,sandbox:null,texName:"__wstext_"+y.id,entry:null,lastKey:null,quality:X};if(y.textScript&&(M.sandbox=qe.evalTextScript(y.textScript,y.textScriptProps,{text:y.text??"",font:y.textFont||"",pointsize:y.textPointsize,color:y.textColor,angles:y.angles,origin:y.origin,scale:y.scale,visible:y.visible,canvasSize:{width:L,height:I},userProperties:x,shared:Yt,audioViews:K,inputView:Je,...Pe,mediaControl:Ve,windowTitle:G.snapshot,openUserShortcut:Q.openUserShortcut,getLayerText:B=>vn.get(B),onError:B=>{ae(e,n,`text script '${y.name}' \u5931\u8D25: ${String(B.message||B).slice(0,120)}`)}}),M.sandbox&&(_.push(M.sandbox),M.sandbox.init(),M.sandbox.applyUserProperties(x),M.sandbox.hasMediaHook&&ye(M.sandbox))),vn.set(y.name||"",String(y.text??"")),y.textAnchor!=="center"&&y.size[0]>0&&y.size[1]>0){const B=y.size[0]*(y.scale[0]||1)/2,z=y.size[1]*(y.scale[1]||1)/2,$=y.textAnchor;$.includes("left")&&(y.origin[0]+=B),$.includes("right")&&(y.origin[0]-=B),$.includes("top")&&(y.origin[1]-=z),$.includes("bottom")&&(y.origin[1]+=z)}const S=Oi*Math.max(1,y.textPointsize),P=qe.textLayerHasTintMask(y)?8:256,R=Math.min(P,qe.textCanvasMargin(S,0));M.boxW=y.size[0]>0?y.size[0]:S*4,M.boxH=y.size[1]>0?y.size[1]:S*1.6,M.margin=R,y.size=[M.boxW+R*2,M.boxH+R*2],M.entry={glTex:ke.makeTexture(N.gl,new Uint8Array([0,0,0,0]),1,1),width:1,height:1,rg88:!1},Ae.set(M.texName,M.entry),y.textureName=M.texName,y.solid=!1,it.push(M)}catch(M){console.warn(`\u6587\u5B57\u5BF9\u8C61 ${y.name} \u521D\u59CB\u5316\u5931\u8D25: ${M.message}`)}if(it.length>0){const y=a;a=()=>{y?.();for(const M of it)N.gl.deleteTexture(M.entry.glTex)}}const T=y=>{if(!xn||!tt)return;const M=xn;for(const S of it){const P=S.layer;let R=String(P.text??"");if(S.sandbox&&S.sandbox.hasUpdate){S.sandbox.engine.runtime=y;const J=S.sandbox.callUpdate(R);J!=null?R=String(J):S.sandbox.thisLayer.text&&(R=String(S.sandbox.thisLayer.text))}else S.sandbox&&typeof S.sandbox.thisLayer?.text=="string"&&(R=String(S.sandbox.thisLayer.text));if(vn.set(P.name||"",R),!P.visible)continue;const B=Math.max(1,S.sandbox?S.sandbox.thisLayer.pointsize:P.textPointsize),z=S.sandbox&&S.sandbox.thisLayer.font||P.textFont||"",$=`${R}\0${B}\0${z}\0${P.alpha}\0${P.textCastshadow}`;if(S.lastKey!==$){S.lastKey=$;try{const J=Oi*B,re=S.boxW,Z=S.boxH,ce=S.margin,le=Math.abs(P.scale[0]||1),se=Math.abs(P.scale[1]||1);let ie=Math.max(1,Math.round(P.size[0]*le*S.quality)),F=Math.max(1,Math.round(P.size[1]*se*S.quality));const ee=Math.min(1,f/Math.max(ie,F));ie=Math.max(1,Math.round(ie*ee)),F=Math.max(1,Math.round(F*ee)),tt.width!==ie||tt.height!==F?(tt.width=ie,tt.height=F):(M.setTransform(1,0,0,1,0,0),M.clearRect(0,0,ie,F));const ue=Math.min(ie/P.size[0],F/P.size[1]);M.setTransform(ue,0,0,ue,0,0),M.translate(ce,ce);const ve=z&&ne.get(z)||"sans-serif";M.font=`${J}px "${ve}", sans-serif`;const Me=M.measureText(""),he=(Me.fontBoundingBoxAscent||0)+(Me.fontBoundingBoxDescent||0),Re=P.textSpacing||[0,0],Te=qe.layoutText(R,{boxW:re,boxH:Z,pointsize:J,lineHeight:(he>0?he:J*1.25)+Re[1],spacing:Re,padding:P.textPadding||0,maxwidth:P.textMaxwidth||0,limitwidth:!!P.textLimitwidth,maxrows:P.textMaxrows||0,limitrows:!!P.textLimitrows,limituseellipsis:!!P.textLimituseellipsis,halign:P.textHAlign,valign:P.textVAlign},gt=>M.measureText(gt).width);qe.drawTextLayer(M,Te,{font:M.font,color:P.textColor,alpha:P.alpha,brightness:P.brightness,spacing:Re,pointsize:J,opaquebackground:!!P.textOpaquebackground,backgroundcolor:P.textBackgroundcolor,backgroundbrightness:P.textBackgroundbrightness,castshadow:!!P.textCastshadow});const Ge=S.entry;N.gl.bindTexture(N.gl.TEXTURE_2D,Ge.glTex),N.gl.texImage2D(N.gl.TEXTURE_2D,0,N.gl.RGBA,N.gl.RGBA,N.gl.UNSIGNED_BYTE,tt),Ge.width=ie,Ge.height=F}catch(J){console.warn(`\u6587\u5B57\u5BF9\u8C61 ${P.name} \u7ED8\u5236\u5931\u8D25: ${J.message}`),S.lastKey=null}}}};e.sceneTextUpdate=T,window.__textWidgets=it,ae(e,n,`text widgets: ${it.length} (scripts ${it.filter(y=>y.sandbox).length}, fonts ${ne.size}, quality ${X.toFixed(2)})`)}if(s)return;const Ft=[],Nt=[],st=[],_e={},_t=[],qt=[],Ze=new Map,Zn=(A,L)=>{if(!L||typeof L.callCursor!="function"||!L.hasCursorHook)return;const I=Ze.get(A);I?I.push(L):Ze.set(A,[L])};for(const A of it)A.sandbox&&Zn(A.layer,A.sandbox);{const A=b.general?.orthogonalprojection,L=A?.width||t.width,I=A?.height||t.height,U=x,X=(y,M)=>{const S=b.general||{};if(y==="zoom"&&typeof M=="number"&&Number.isFinite(M)&&M>0){b.cameraTransforms.zoom=M,S.zoom&&typeof S.zoom=="object"?S.zoom.value=M:S.zoom=M;return}S[y]&&typeof S[y]=="object"&&"value"in S[y]?S[y].value=M:S[y]=M};let ne=1+Math.max(0,...b.layers.map(y=>Number(y.id)||0));const Y={recomputeVisibility:E,getSceneLayer:y=>b.layers.find(M=>M.name===y&&!M.destroyed)||null,getSceneLayerById:y=>b.layers.find(M=>M.id===y&&!M.destroyed)||null,enumerateSceneLayers:()=>b.layers.filter(y=>!y.destroyed),getSceneAnimation:y=>{if(y==null||y==="")return null;if(_e[y])return _e[y];for(const M of b.layers)if(M.animations&&M.animations[y])return M.animations[y];return null},cameraTransforms:b.cameraTransforms,getInitialLayerConfig:y=>{const M=y&&typeof y=="object"?y.name:String(y||"");return b.layers.find(S=>S.name===M)||null},createSceneLayer:y=>{let M=y&&typeof y=="object"?y:null;if(typeof y=="string"){const P=y;if(M=b.layers.find(R=>R&&!R.destroyed&&R.image===P&&R.textureName)||b.layers.find(R=>R&&!R.destroyed&&R.image===P)||null,!M)return ae(e,n,`createLayer('${P}') \u627E\u4E0D\u5230\u5DF2\u52A0\u8F7D\u7684\u540C\u6A21\u578B\u5C42`),null}M||(M={});const S={...M,id:ne++,origin:Array.isArray(M.origin)?M.origin.slice():[0,0,0],scale:Array.isArray(M.scale)?M.scale.slice():[1,1,1],angles:Array.isArray(M.angles)?M.angles.slice():[0,0,0],size:Array.isArray(M.size)?M.size.slice():[0,0],color:Array.isArray(M.color)?M.color.slice():[1,1,1],childIds:null,hasChildren:!1,destroyed:!1,animations:{},animationList:[],objectScripts:null};return delete S.textureAnimation,delete S.videoTextureApi,delete S.soundCtl,delete S.videoCtl,Array.isArray(M.effects)&&(S.effects=M.effects.map(P=>({...P,passes:Array.isArray(P.passes)?P.passes.map(R=>({...R})):P.passes}))),b.layers.push(S),S},mediaControl:Ve,windowTitle:G.snapshot,openUserShortcut:Q.openUserShortcut,isScreensaver:!1};N.setConstantScriptRuntime?.(qe.evalObjectScript,{userProperties:U,audioViews:K,shared:Yt,inputView:Je,timers:Xe,...Y,onSandbox:y=>{y&&y.hasMediaHook&&ye(y)}});for(const y of b.layers){const M=y.objectAnimations;if(M){y.animations=y.animations||{},y.animationList=y.animationList||[];for(const[S,P]of Object.entries(M))try{const R=Li.createAnimation(P.animation);R.field=S,R.baseValue=P.value;const B=y[S];R.baseNumeric=Array.isArray(B)?B.slice():B,y.animationList.push(R),R.name&&(y.animations[R.name]=R),Nt.push({layer:y,field:S,ctrl:R})}catch(R){ae(e,n,`animation '${y.name}.${S}' \u5EFA\u63A7\u5236\u5668\u5931\u8D25: ${String(R.message).slice(0,80)}`)}}}for(const y of b.layers){for(const[S,P]of(y.effects||[]).entries()){const R=P.visibleScript;if(R)try{const B=qe.evalObjectScript(R.script,R.scriptproperties,{canvasSize:{width:L,height:I},userProperties:U,audioViews:K,inputView:Je,...Pe,layer:y,targetEffect:P,...Y,shared:Yt,onError:z=>ae(e,n,`effect visible script '${y.name}#${S}' \u5931\u8D25: ${String(z.message||z).slice(0,80)}`)});if(!B)continue;_.push(B),B.init(P.visible),B.applyUserProperties(U),B.hasMediaHook&&ye(B),B.hasUpdate&&_t.push({effect:P,sandbox:B})}catch(B){console.warn(`\u6548\u679C\u5F00\u5173\u811A\u672C ${y.name}#${S} \u6C42\u503C\u5931\u8D25: ${B.message}`)}}const M=y.objectScripts;if(M)for(const[S,P]of Object.entries(M))try{const R=qe.evalObjectScript(P.script,P.scriptproperties,{canvasSize:{width:L,height:I},screenResolution:{x:t.clientWidth||window.innerWidth||1,y:t.clientHeight||window.innerHeight||1},timeOfDay:(()=>{const B=new Date;return(B.getHours()*3600+B.getMinutes()*60+B.getSeconds())/86400})(),userProperties:U,audioViews:K,inputView:Je,layer:y,...Y,getBoneOverrides:qn,shared:Yt,...Pe,onError:B=>ae(e,n,`object script '${y.name}.${S}' \u5931\u8D25: ${String(B.message||B).slice(0,90)}`)});if(R){_.push(R);const B=y[S],z=S==="angles"&&Array.isArray(B)?qe.radToScriptAngles(B):Array.isArray(B)?{x:B[0]??0,y:B[1]??0,z:B[2]??0}:B;R.init(z),R.applyUserProperties(U),Zn(y,R),R.hasMediaHook&&ye(R),R.hasUpdate&&Ft.push({layer:y,field:S,kind:S==="visible"?"bool":S==="alpha"||S==="brightness"?"scalar":"vec3",sandbox:R})}}catch(R){console.warn(`\u5BF9\u8C61\u811A\u672C ${y.name}.${S} \u6C42\u503C\u5931\u8D25: ${R.message}`)}}const f=b.generalScripts;if(f){for(const[y,M]of Object.entries(f))try{const S=qe.evalObjectScript(M.script,M.scriptproperties,{canvasSize:{width:L,height:I},userProperties:U,audioViews:K,inputView:Je,...Pe,...Y,shared:Yt,onError:R=>ae(e,n,`general script '${y}' \u5931\u8D25: ${String(R.message||R).slice(0,80)}`)});if(!S)continue;_.push(S),S.init(M.value),S.applyUserProperties(U),S.hasMediaHook&&ye(S);const P=R=>X(y,R);S.hasUpdate&&qt.push({field:y,sandbox:S,write:P})}catch(S){console.warn(`general \u811A\u672C ${y} \u6C42\u503C\u5931\u8D25: ${S.message}`)}qt.length&&ae(e,n,`general scripts: ${qt.map(y=>y.field).join(",")}`)}const T=b.generalAnimations;if(T){for(const[y,M]of Object.entries(T))try{const S=Li.createAnimation(M.animation);S.field=y,S.baseValue=M.value,S.baseNumeric=M.value,S.name&&(_e[S.name]=S),st.push({field:y,ctrl:S,write:P=>X(y,P)})}catch(S){ae(e,n,`general animation '${y}' \u5EFA\u63A7\u5236\u5668\u5931\u8D25: ${String(S.message).slice(0,80)}`)}st.length&&ae(e,n,`general animations: ${st.map(y=>y.field).join(",")}`)}}Ft.length&&(ae(e,n,`object scripts: ${Ft.length}`),window.__objScripts=Ft),window.__mediaHooks=te,window.__compositeStats=()=>N.compositeStats?.()??null,window.__compositeEnable=A=>N.setCompositeEnabled?.(A),window.__scene=b,window.__textures=Ae;const mt=Array.from(Ze.keys());mt.length&&ae(e,n,`cursor hooks: ${mt.length} layers`);let Ut=null,kt=null,wn=!1;const Kn=()=>({worldPosition:qe.makeCursorEventVec(Se.state.wx,Se.state.originY!=null?Se.state.originY:Se.state.wy,0)}),pt=(A,L,I)=>{const U=Ze.get(A);if(U)for(const X of U)X.callCursor(L,I)},Qn=()=>{if(mt.length===0)return;const A=Se.state;if(!A.has)return;const L=N.getParallaxOffset?N.getParallaxOffset():{x:0,y:0},I=b.general?.orthogonalprojection?.height||t.height,U=$c.hitTestLayers(b.layers,A.wx,A.wy,I,{parOffX:L.x,parOffY:L.y,alignTable:ke.ALIGN,filter:ne=>Ze.has(ne)}),X=Kn();U!==Ut&&(Ut&&pt(Ut,"cursorLeave",X),Ut=U,U&&pt(U,"cursorEnter",X)),U&&pt(U,"cursorMove",X),A.leftDown&&!wn?(kt=U,U&&pt(U,"cursorDown",X)):!A.leftDown&&wn&&(kt&&pt(kt,"cursorUp",X),kt&&kt===U&&pt(U,"cursorClick",X),kt=null),wn=A.leftDown},tn=performance.now();let nn=0,Ce=0;const at=[],At=[];let rn=-1/0;const Mn=A=>{if(s||e.paused)return;const I=1e3/(e.cfg.sceneFps||60);if(A-rn>=I){if(rn=A,oo(e,A),e.onFirstFrame){const f=e.onFirstFrame;e.onFirstFrame=void 0,f()}so(e,t,e.cfg);const U=(A-tn-nn)/1e3;if(Je.update(Se.state),q.enabled){V.update(U);const f=Rt.diffMediaEvents(me,V.snapshot);if(f.length){for(const{name:T,event:y}of f)for(const M of te)M.disabled||M.callMedia(T,y);me=Rt.cloneMediaSnapshot(V.snapshot)}}G.update(U);for(const f of Nt){f.ctrl.advance(I/1e3);const T=f.field,y=f.ctrl.applyTo(f.ctrl.baseNumeric);if(Array.isArray(y)){const M=f.layer[T];if(Array.isArray(M))for(let S=0;S<y.length&&S<M.length;S++)M[S]=y[S]}else Number.isFinite(y)&&(T==="visible"?f.layer[T]=!!y:f.layer[T]=y)}for(const f of st){f.ctrl.advance(I/1e3);const T=f.ctrl.applyTo(f.ctrl.baseNumeric);typeof T=="number"&&Number.isFinite(T)?f.write(T):Array.isArray(T)&&Number.isFinite(T[0])&&f.write(T[0])}for(const f of _t){if(f.sandbox.disabled)continue;f.sandbox.engine.frametime=I/1e3,f.sandbox.engine.runtime=U;const T=f.sandbox.callUpdate(!!f.effect.visible);typeof T=="boolean"&&(f.effect.visible=T)}for(const f of qt){if(f.sandbox.disabled)continue;f.sandbox.engine.frametime=I/1e3,f.sandbox.engine.runtime=U;const T=b.general||{},y=T[f.field]&&typeof T[f.field]=="object"&&"value"in T[f.field]?T[f.field].value:T[f.field],M=f.sandbox.callUpdate(y);M!==void 0&&f.write(M)}const X={x:t.clientWidth||window.innerWidth||1,y:t.clientHeight||window.innerHeight||1};let ne=!1;for(const f of Ft){if(f.sandbox.disabled)continue;f.sandbox.engine.frametime=I/1e3,f.sandbox.engine.runtime=U,f.sandbox.engine.screenResolution=X;const T=f.layer[f.field];if(f.kind==="bool"){const y=f.sandbox.callUpdate(!!T);typeof y=="boolean"&&(f.field==="visible"?f.layer.visibleSelf!==y&&(f.layer.visibleSelf=y,ne=!0):f.layer[f.field]=y)}else if(f.kind==="scalar"){const y=f.sandbox.callUpdate(Number(T)||0),M=Number(y);Number.isFinite(M)&&(f.layer[f.field]=M)}else{const y=f.field==="angles"?qe.radToScriptAngles(T):{x:T[0]||0,y:T[1]||0,z:T[2]||0},M=f.sandbox.callUpdate(y),S=M&&typeof M=="object"&&"x"in M?M:y;f.layer[f.field]=f.field==="angles"?qe.scriptAnglesToRad(S):[S.x||0,S.y||0,S.z||0]}}ne&&E(),O.enabled&&(k.update(U),Ac(K,k.snapshot)),en.length&&Vn.followAttachments(en,U,qn);const Y=e.coverAlign;N.render(b,Ae,t.width,t.height,U,Sn(e.cfg.fit),Y.x,Y.y).then(()=>{if(!(s||e.paused)){try{Qn()}catch{}Se.beginFrame();try{e.sceneTextUpdate&&A>=yn&&(yn=A+100,e.sceneTextUpdate(U))}catch{}e.raf=requestAnimationFrame(Mn)}}).catch(f=>{console.warn("scene render error:",f),ae(e,n,`render: ${String(f.message||f).slice(0,200)}`),s=!0})}else e.paused||(e.raf=requestAnimationFrame(Mn))},_n=()=>{s||e.paused||e.raf===void 0&&(e.raf=requestAnimationFrame(Mn))},Bt=A=>{if(s)return;const L=b.properties||{},I=vs(L,x,A);if(Object.keys(I).length){for(const U of b.layers){const X=U.srcObject;if(!X)continue;sn(X,L,0);const ne=xt(X.visible);ne&&ne in I&&(U.visibleSelf=Qe.parseBool(X.visible,!0));const Y=xt(X.color);Y&&Y in I&&(U.color=Qe.parseColor(X.color),U.isText&&(U.textColor=U.color));const f=xt(X.alpha);f&&f in I&&(U.alpha=Qe.parseNum(X.alpha,1));const T=xt(X.brightness);T&&T in I&&(U.brightness=Qe.parseNum(X.brightness,1));const y=xt(X.volume);if(y&&y in I){const S=Qe.parseNum(X.volume,1);U.soundprops&&(U.soundprops.volume=S),U.soundCtl?.setVolume?.(S)}for(let S=0;S<(X.animationlayers||[]).length;S++){const P=X.animationlayers[S],R=U.animationLayers?.[S];if(!P||!R)continue;const B=xt(P.visible);B&&B in I&&(R.visible=Qe.parseBool(P.visible,!0));const z=xt(P.rate);z&&z in I&&(R.rate=Qe.parseNum(P.rate,1));const $=xt(P.blend);$&&$ in I&&(R.blend=Qe.parseNum(P.blend,1))}for(let S=0;S<(X.effects||[]).length;S++){const P=X.effects[S],R=U.effects?.[S];if(!P||!R)continue;const B=xt(P.visible);B&&B in I&&!R.visibleScript&&(R.visible=Qe.parseBool(P.visible,!0))}const M=X.instanceoverride;if(M&&typeof M=="object"&&U.particle){let S=!1;for(const P of Object.keys(M)){if(P==="id")continue;const R=xt(M[P]);if(R&&R in I){S=!0;break}}if(S){const P=Mt.get(U.id);if(P)for(const R of P)R.reapplyOverride?.()}}}for(const U of _)if(!(!U||U.disabled))try{U.applyUserProperties(I)}catch{}E();for(const U of b.layers){if(!U.particle)continue;const X=Mt.get(U.id);if(X)for(const ne of X)ne.setVisible(!!U.visible)}N.applyConstUserProperties?.(I);for(const U of it)U.lastKey=null;ae(e,n,`props hot: ${Object.keys(I).join(",")}`)}};d=()=>{e.raf!==void 0&&(cancelAnimationFrame(e.raf),e.raf=void 0),Ce||(Ce=performance.now()),at.length=0;for(const A of Ae.values())A?.videoCtl?.isPlaying?.()&&(at.push(A.videoCtl),A.videoCtl.pause());At.length=0;for(const A of Qt)!A.paused&&!A.ended&&(At.push(A),A.pause())},h=()=>{Ce&&(nn+=performance.now()-Ce,Ce=0),we=performance.now();for(const A of at)try{A.play()}catch{}at.length=0;for(const A of At)A.play().catch(()=>{});At.length=0,_n()},l=Bt,u&&(Bt(u),u=null),_n();{const A=b.general?.orthogonalprojection,L=A?.width||t.width,I=A?.height||t.height,U=Sn(e.cfg.fit),X=Rr(U,L,I,t.width,t.height);ae(e,n,`fit ${U}: view ${Math.round(X.viewW)}x${Math.round(X.viewH)} scene ${L}x${I} canvas ${t.width}x${t.height}`)}ae(e,n,`renderer started: ${b.layers.length} layers`)}catch(p){if(s||p&&p.name==="AbortError")return;console.warn("scene render failed:",p);const w=p instanceof Error?p:new Error(String(p));ae(e,n,`failed: ${String(w.message||w).slice(0,200)}`),e.onError?e.onError(w):e.fallbackPage?.()}})()}function xr(e,n){(n.type==="video"||n.type==="gif"||n.type==="image")&&n.src?Vc(e,n):n.type==="scene"&&(n.source||n.src)?rl(e,n):e.onUnhandledType?.(n)}function ol(e){return e==="fit"?"contain":e==="fill"?"cover":e==="contain"||e==="stretch"?e:"cover"}function il(e,n){return{type:"scene",canvas:e,source:n.source,fit:ol(n.fit),renderDpr:n.renderDpr??1,sceneFps:n.fps??60,muted:(n.volume??0)<=0,loop:!0}}function zi(e,n){const t=Wi(),r={ready:[],error:[],diagnostic:[]};let o={...n??{},source:null};const i=d=>{for(const h of r.error)try{h(d)}catch{}},s=d=>{t.onDiagnostic=(h,p)=>{try{d.onDiagnostic?.(h,p)}catch{}for(const w of r.diagnostic)try{w(h,p)}catch{}},t.onError=h=>{try{d.onError?.(h)}catch{}i(h)},t.onSceneInfo=h=>{t.info=h}},c=()=>new Promise(d=>{const h=t.onFirstFrame;t.onFirstFrame=()=>{t.onFirstFrame=void 0,h?.(),d()}}),a=()=>{let d=()=>{};return{promise:new Promise((p,w)=>{d=u.on("error",m=>w(m))}),off:d}},u={canvas:e,pause(){t.paused=!0,t.sceneCtl?.pause()},resume(){t.paused=!1,io(t),t.sceneCtl?.resume()},get paused(){return!!t.paused},setFit(d){t.cfg.fit=d,Mr(t)},setFps(d){t.cfg.sceneFps=d},setVolume(d){const h=Math.max(0,Math.min(1,d));t.cfg.muted=h<=0,t.sceneAudio?.setVolume(h)},setRenderDpr(d){t.cfg.renderDpr=d,xr(t,t.cfg)},setProperties(d){const h={};for(const[p,w]of Object.entries(d))h[p]={value:w};t.sceneCtl?.applyUserProperties(h)},getProperties(){return{...t.liveUserProps??{}}},async load(d){o={...o,source:d},s(o);const h={...t.cfg,type:"scene",source:d,src:void 0,mediaBase:void 0};t.cfg=h,t.paused=!1,t.info=void 0,Mr(t);const p=c(),w=a();xr(t,h);try{await Promise.race([p,w.promise])}finally{w.off()}},release(){on(t)},restore(){xr(t,t.cfg)},destroy(){Vi(t),t.onDiagnostic=void 0,t.onError=void 0,t.onFirstFrame=void 0,t.onSceneInfo=void 0,r.ready.length=0,r.error.length=0,r.diagnostic.length=0},get stats(){return Hi(t)},get info(){return t.info??null},on(d,h){const p=r[d];return p.push(h),()=>{const w=p.indexOf(h);w>=0&&p.splice(w,1)}}},l=async d=>{o=d,s(d),t.cfg=il(e,d),t.paused=d.autoplay===!1,t.info=void 0,Mr(t);const h=c(),p=a();xr(t,t.cfg);try{await Promise.race([h,p.promise])}finally{p.off()}(d.volume??0)>0&&u.setVolume(d.volume),d.properties&&Object.keys(d.properties).length&&u.setProperties(d.properties)};return u.__applyOptions=l,u}async function sl(e,n){const t=zi(e,n);return await t.__applyOptions(n),t}export{qc as bytesSource,zi as createScene,Yc as fileSource,Fi as httpSource,sl as mount};
|
|
499
|
+
|
|
500
|
+
//# sourceMappingURL=webwallgl.min.mjs.map
|