beyond-simulator-web 0.4.1 → 0.5.1
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/README.md +13 -1
- package/dist/public/app.js +54 -43
- package/dist/public/editor.html +1 -1
- package/dist/public/editor.js +18 -14
- package/dist/public/index.html +43 -42
- package/dist/public/play-renderer.js +72 -71
- package/dist/public/play.html +9 -9
- package/dist/public/play.js +47 -31
- package/dist/server.js +21 -18
- package/dist/worker.js +13 -10
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{spawn as Td}from"node:child_process";import{createServer as Rd}from"node:http";import{readFileSync as Md,realpathSync as bl}from"node:fs";import{extname as Nd,resolve as Sl}from"node:path";import{fileURLToPath as wl}from"node:url";import{createHash as Od,timingSafeEqual as Fd}from"node:crypto";import{statSync as Sd}from"node:fs";var vo={name:"beyond-simulator-web",version:"0.4.1",description:"Self-hosted editor, preview and play surface for Qianxing simulator saves",type:"module",main:"dist/server.js",bin:{"beyond-simulator-web":"dist/server.js"},files:["dist","README.md"],scripts:{build:"node ../scripts/build.mjs web",pretest:"node ../scripts/build.mjs web",prepack:"node ../scripts/build.mjs web",start:"node dist/server.js",dev:"node ../scripts/build.mjs web && node server.js",test:"node --test test/*.test.mjs"},engines:{node:">=20"},dependencies:{"@napi-rs/canvas":"0.1.100",fengari:"0.1.5",protobufjs:"8.7.2"},devDependencies:{react:"19.1.1","react-dom":"19.1.1","qxqy-editor-ui":"workspace:*","qxqy-studio":"workspace:*"},license:"GPL-3.0-only",repository:{type:"git",url:"git+https://github.com/1475505/miliastra-beyond-simulator.git",directory:"web"}};var So="https://oss.070077.xyz/prefabs/",oi="prefab-v1",jl=[[10003004,10003004],[10005001,10005142],[10006001,10006002],[10007002,10007002],[10008001,10008001],[10009001,10009011],[20001001,20001074],[20001076,20001121],[20001123,20001156],[20001158,20001302],[20001304,20001568],[20001570,20001999],[20002001,20002755],[20002757,20002999],[20003001,20003455],[30001001,30001016],[30002001,30002017],[30003001,30003011],[30004001,30004001],[30005001,30005020],[30006001,30006026],[30007001,30007013],[30008001,30008011]];function Di(e){return!Number.isSafeInteger(e)||!jl.some(([t,i])=>e>=t&&e<=i)?null:e===10003004||e===10008001?128:256}var zi="https://oss.070077.xyz/images/",Vr="sprite-v1",$i="/qxqy-assets/",Hl=[[100001,100006],[100101,100213],[101001,101018],[101020,101028],[101030,101046],[101048,101048],[101050,101054],[101056,101080],[102001,102052],[103001,103148],[104001,104010],[105001,105140],[105142,105219],[105221,105317],[106001,106047],[106049,106096],[107001,107007],[107010,107020],[107031,107092],[107094,107180],[107183,107201],[107203,107205],[107207,107228],[107231,107278],[107280,107402],[108001,108017],[108019,108020],[109001,109031],[109033,109034],[109036,109075],[110001,110053],[111001,111139],[112001,112042]];function ke(e){return e==null||e===""?"StaticReference":typeof e=="string"?e:typeof e.Name=="string"?e.Name:"Unknown"}function Gi(e,t){return`${ke(t)}:${e}`}function wo(e,t){return ke(t)==="StaticReference"&&Qe(e,t)}function Qe(e,t){let i=ke(t);return i==="Prefab"?Di(e)!==null:i==="StaticReference"&&Number.isSafeInteger(e)&&e>100006&&Hl.some(([r,n])=>e>=r&&e<=n)}var Vi="7.1.0",ue=Object.freeze(["KEYBOARD","TOUCHSCREEN","CONTROLLER_CONSOLE","CONTROLLER_MOBILE"]),K=Object.freeze({"pc-16-9":{id:"pc-16-9",device:"pc",platform:"KEYBOARD",width:1600,height:900,ratio:"16:9",luaDevice:"KeyboardAndMouse",label:"PC 1600\xD7900"},"pc-21-9":{id:"pc-21-9",device:"pc",platform:"KEYBOARD",width:2100,height:900,ratio:"21:9",luaDevice:"KeyboardAndMouse",label:"PC 2100\xD7900"},"mobile-16-9":{id:"mobile-16-9",device:"mobile",platform:"TOUCHSCREEN",width:1280,height:720,ratio:"16:9",luaDevice:"Mobile",label:"\u624B\u673A 1280\xD7720"},"mobile-19.5-9":{id:"mobile-19.5-9",device:"mobile",platform:"TOUCHSCREEN",width:1560,height:720,ratio:"19.5:9",luaDevice:"Mobile",label:"\u624B\u673A 1560\xD7720"},"mobile-4-3":{id:"mobile-4-3",device:"mobile",platform:"TOUCHSCREEN",width:1280,height:960,ratio:"4:3",luaDevice:"Mobile",label:"\u624B\u673A 1280\xD7960"}}),Yi="pc-16-9",ve=2,Tt=Object.freeze({KEYBOARD:"pc-16-9",TOUCHSCREEN:"mobile-16-9",CONTROLLER_CONSOLE:"pc-16-9",CONTROLLER_MOBILE:"mobile-16-9"}),Rt=Object.freeze({"server-container":"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668",container:"\u5BB9\u5668\u8282\u70B9",textbox:"\u6587\u672C\u6846",image:"\u56FE\u7247",button:"\u9884\u8BBE\u6309\u94AE",cursor:"\u5149\u6807\u68C0\u6D4B\u533A\u57DF",grid:"\u7F51\u683C\u89C6\u7A97",reference:"\u6A21\u677F\u5F15\u7528\u63A7\u4EF6",textwindow:"\u6587\u672C\u89C6\u7A97",keyhint:"\u6309\u952E\u63D0\u793A",animation:"\u754C\u9762\u52A8\u6548",fullscreen:"\u5168\u5C4F\u52A8\u6548"}),Bi=Object.freeze(["server-container","container","textbox","cursor","reference","grid","image","button","textwindow","keyhint","animation","fullscreen"]),xo=Object.freeze({"server-container":null,container:[150,150],textbox:[100,40],image:[80,80],button:[150,50],cursor:[150,50],grid:[80,80],reference:[80,80],textwindow:[100,40],keyhint:[40,40],animation:[100,100],fullscreen:null}),Ul=Object.freeze({100001:"rect",100002:"circle",100003:"triangle",100004:"fourstar",100005:"fivestar",100006:"ring"});function Mt(e,t){return ke(t)==="StaticReference"&&Ul[e]||(Qe(e,t)?"sprite":"missing")}var Io=50888,ai=Object.freeze({font:4294967295,bg:16777215,outline:858993459,image:4294967295});import{Worker as dd}from"node:worker_threads";import{existsSync as hd,mkdirSync as pd,readFileSync as ho,writeFileSync as md}from"node:fs";import{basename as gd,dirname as yd}from"node:path";import{existsSync as Ai,readFileSync as ju}from"node:fs";import{randomUUID as Es}from"node:crypto";import{isAbsolute as Co,win32 as ko}from"node:path";function ji(e,t=!1){let i=String(e??"").trim().replaceAll("\\","/");if(t&&(!i||i==="."))return"";if(!i||Co(i)||ko.isAbsolute(i)||i.split("/").some(r=>!r||r==="."||r===".."||/[<>:"|?*\x00-\x1f]/.test(r)||/[. ]$/.test(r)||/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(r)))throw new Error("\u811A\u672C\u76EE\u5F55/\u8DEF\u5F84\u5FC5\u987B\u662F\u6709\u6548\u7684\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u80FD\u5305\u542B .. \u6216 Windows \u7279\u6B8A\u6587\u4EF6\u540D");return i}function si(e){if(e==null)return null;if(e.version!==1)throw new Error("unsupported scriptSync version");let t=String(e.clientImportRoot||"").trim();if(!Co(t)&&!ko.isAbsolute(t))throw new Error("\u5B9E\u673A\u5BFC\u5165\u6839\u76EE\u5F55\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84");return{version:1,workspaceDir:ji(e.workspaceDir,!0),clientImportRoot:t,clientSubdir:ji(e.clientSubdir,!0)}}import{basename as Xt,dirname as Hu,isAbsolute as Uu,join as As,resolve as _s}from"node:path";function Nt(e,t="$",i=new Set){if(e===void 0)throw new Error(`undefined at ${t}`);if(typeof e=="number"&&!Number.isFinite(e))throw new Error(`non-finite number at ${t}`);if(typeof e=="bigint"||typeof e=="function"||typeof e=="symbol")throw new Error(`non-JSON value at ${t}`);if(!(e===null||typeof e!="object")){if(i.has(e))throw new Error(`circular value at ${t}`);if(i.add(e),Array.isArray(e))e.forEach((r,n)=>Nt(r,`${t}[${n}]`,i));else for(let[r,n]of Object.entries(e))Nt(n,`${t}.${r}`,i);i.delete(e)}}function Y(e){return Nt(e),JSON.parse(JSON.stringify(e))}function Eo(e,t="$"){Nt(e,t)}function Ao(e){return K[e]||K[Yi]}function li(e,t=0,i=0){return!e||typeof e!="object"?{x:t,y:i}:{x:Number(e.x??t),y:Number(e.y??i)}}function Ll(e){return!e||typeof e!="object"?{x:1,y:1,z:1}:{x:Number(e.x??1),y:Number(e.y??1),z:Number(e.z??1)}}function Xl(e){return!e||typeof e!="object"?{x:0,y:0,z:0}:{x:Number(e.x??0),y:Number(e.y??0),z:Number(e.z??0)}}function Hi({layout:e="center",size:t=[100,40],offset:i=[0,0]}={}){return e==="stretch"?{scale:{x:1,y:1,z:1},rotation:{x:0,y:0,z:0},anchorMin:{x:0,y:0},anchorMax:{x:1,y:1},offset:{x:0,y:0},size:{x:0,y:0},pivot:{x:.5,y:.5}}:{scale:{x:1,y:1,z:1},rotation:{x:0,y:0,z:0},anchorMin:{x:.5,y:.5},anchorMax:{x:.5,y:.5},offset:{x:Number(i[0]??0),y:Number(i[1]??0)},size:{x:Number(t[0]??0),y:Number(t[1]??0)},pivot:{x:.5,y:.5}}}function Ye(e){let t=e||Hi();return{scale:Ll(t.scale),rotation:Xl(t.rotation),anchorMin:li(t.anchorMin??t.anchor_min,.5,.5),anchorMax:li(t.anchorMax??t.anchor_max,.5,.5),offset:li(t.offset,0,0),size:li(t.size,0,0),pivot:li(t.pivot,.5,.5)}}function he(e,t=0){let i=Number(e);return Number.isFinite(i)?i:t}function Ue(e,t){let i=e.width,r=e.height,n=e.left,o=e.bottom,a=t.anchorMin||{x:t.anchorMinX,y:t.anchorMinY},s=t.anchorMax||{x:t.anchorMaxX,y:t.anchorMaxY},c=t.offset||{x:t.anchoredPositionX,y:t.anchoredPositionY},l=t.size||{x:t.sizeDeltaX,y:t.sizeDeltaY},u=t.pivot||{x:t.pivotX,y:t.pivotY},f=he(a?.x,.5)*i,h=he(a?.y,.5)*r,p=he(s?.x,.5)*i,m=he(s?.y,.5)*r,g=he(l?.x),v=he(l?.y),C=he(u?.x,.5),w=he(u?.y,.5),P=p-f+g,M=m-h+v,V=n+f+he(c?.x)-g*C,H=o+h+he(c?.y)-v*w;return{left:V,bottom:H,width:P,height:M,right:V+P,top:H+M,centerX:V+P/2,centerY:H+M/2}}function Ot(){return{a:1,b:0,c:0,d:1,tx:0,ty:0}}function Wl(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,tx:e.a*t.tx+e.c*t.ty+e.tx,ty:e.b*t.tx+e.d*t.ty+e.ty}}function Ie(e,t,i){return{x:e.a*t+e.c*i+e.tx,y:e.b*t+e.d*i+e.ty}}function Le(e){let t=e.a*e.d-e.b*e.c;return!Number.isFinite(t)||Math.abs(t)<1e-8?null:{a:e.d/t,b:-e.b/t,c:-e.c/t,d:e.a/t,tx:(e.c*e.ty-e.d*e.tx)/t,ty:(e.b*e.tx-e.a*e.ty)/t}}function Yr(e,t){let i=t.rotation||{x:t.localRotationX,y:t.localRotationY,z:t.localRotationZ},r=t.scale||{x:t.localScaleX,y:t.localScaleY},n=t.pivot||{x:t.pivotX,y:t.pivotY},o=he(i?.z)*Math.PI/180,a=Math.cos(o),s=Math.sin(o),c=he(i?.x)*Math.PI/180,l=he(i?.y)*Math.PI/180,u=Math.cos(c),f=Math.sin(c),h=Math.cos(l),p=Math.sin(l),m=B=>Math.abs(B)<1e-12?0:B,g=he(r?.x,1),v=he(r?.y,1),C=e.left+e.width*he(n?.x,.5),w=e.bottom+e.height*he(n?.y,.5),P=m(h*a+p*f*s)*g,M=m(u*s)*g,V=m(-h*s+p*f*a)*v,H=m(u*a)*v;return{a:P,b:M,c:V,d:H,tx:C-P*C-V*w,ty:w-M*C-H*w}}function ci(e,t,i){return Wl(e||Ot(),Yr(t,i))}function _o(e,t){let i=Ie(t,e.centerX,e.centerY),r=Math.abs(e.width*Math.hypot(t.a,t.b)),n=Math.abs(e.height*Math.hypot(t.c,t.d));return{left:i.x-r/2,bottom:i.y-n/2,width:r,height:n,centerX:i.x,centerY:i.y,rotationZ:Math.atan2(t.b,t.a)*180/Math.PI}}function Se(e){let t=typeof e=="string"?Ao(e):e;return{left:0,bottom:0,width:t.width,height:t.height,right:t.width,top:t.height,centerX:t.width/2,centerY:t.height/2}}function Br(e){return{posX:e.centerX,posY:e.centerY,width:e.width,height:e.height}}function ft(e,t,i){let r=Ye(t),n=e.width,o=e.height,a=r.anchorMin.x*n,s=r.anchorMin.y*o,c=r.anchorMax.x*n,l=r.anchorMax.y*o,u=Number(i.width),f=Number(i.height),h=Number(i.posX),p=Number(i.posY),m=h-u/2,g=p-f/2;return r.size={x:u-(c-a),y:f-(l-s)},r.offset={x:m-e.left-a+r.size.x*r.pivot.x,y:g-e.bottom-s+r.size.y*r.pivot.y},r}function Po(e,t){let i=Ye(e),n={"bottom-left":[[0,0],[0,0],[0,0]],bottom:[[.5,0],[.5,0],[.5,0]],"bottom-right":[[1,0],[1,0],[1,0]],left:[[0,.5],[0,.5],[0,.5]],center:[[.5,.5],[.5,.5],[.5,.5]],right:[[1,.5],[1,.5],[1,.5]],"top-left":[[0,1],[0,1],[0,1]],top:[[.5,1],[.5,1],[.5,1]],"top-right":[[1,1],[1,1],[1,1]],stretch:[[0,0],[1,1],[.5,.5]],"stretch-horizontal":[[0,.5],[1,.5],[.5,.5]],"stretch-vertical":[[.5,0],[.5,1],[.5,.5]]}[t];return n&&(i.anchorMin={x:n[0][0],y:n[0][1]},i.anchorMax={x:n[1][0],y:n[1][1]},i.pivot={x:n[2][0],y:n[2][1]}),i}function To(e){let t=Ye(e),i=(r,n)=>Math.abs(r-n)<1e-4;if(i(t.anchorMin.x,0)&&i(t.anchorMin.y,0)&&i(t.anchorMax.x,1)&&i(t.anchorMax.y,1))return"stretch";if(i(t.anchorMin.x,t.anchorMax.x)&&i(t.anchorMin.y,t.anchorMax.y)){let r=t.anchorMin.x,n=t.anchorMin.y,o=[[0,0,"bottom-left"],[.5,0,"bottom"],[1,0,"bottom-right"],[0,.5,"left"],[.5,.5,"center"],[1,.5,"right"],[0,1,"top-left"],[.5,1,"top"],[1,1,"top-right"]];for(let a of o)if(i(r,a[0])&&i(n,a[1]))return a[2]}return"custom"}function dt(e){return Ao(e).platform}function Ro(e){let t={};for(let i of ue)t[i]=e(i);return t}var Kl={scale:["x","y","z"],rotation:["x","y","z"],anchorMin:["x","y"],anchorMax:["x","y"],offset:["x","y"],size:["x","y"],pivot:["x","y"]};function Mo(e,t){for(let[i,r]of Object.entries(Kl))for(let n of r)if(!Number.isFinite(e?.[i]?.[n]))throw new Error(`${t}.${i}.${n} must be a finite number`)}function Ze(e,t="transformByPlatform"){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t}: \u9700\u8981\u5B8C\u6574\u7684\u56DB\u5E73\u53F0\u5E03\u5C40`);for(let i of Object.keys(e))if(!ue.includes(i))throw new Error(`${t}: unknown platform ${i}`);for(let i of ue)Mo(e[i],`${t}.${i}`)}function ht(e){if(Object.hasOwn(e,"transformByCanvas"))throw new Error(`${e.name||e.id||"\u63A7\u4EF6"}: \u4E0D\u518D\u652F\u6301 transformByCanvas\uFF1B\u8BF7\u4F7F\u7528\u56DB\u5E73\u53F0 transformByPlatform \u5E03\u5C40`);Ze(e.transformByPlatform,`${e.name||e.id||"\u63A7\u4EF6"}.transformByPlatform`)}function pt(e,t){if(!ue.includes(t))throw new Error(`unknown platform ${t}`);return Mo(e?.[t],`transformByPlatform.${t}`),Ye(e[t])}var ql=Object.freeze([{key:"genericField501",label:"\u901A\u7528\u69FD field501",type:"number",defaultValue:0,wire:"GenericSlot.field501"},{key:"footerField505",label:"\u5C3E\u90E8\u69FD field505",type:"number",defaultValue:0,wire:"FooterSlot.field505"}]),Jl=Object.freeze({container:[],textbox:[{key:"textField501",label:"\u6587\u672C\u914D\u7F6E field501",type:"number",defaultValue:20,wire:"TextConfig.field501"},{key:"textField503",label:"\u6587\u672C\u914D\u7F6E field503",type:"number",defaultValue:12,wire:"TextConfig.field503"},{key:"textAlign",label:"\u6C34\u5E73\u5BF9\u9F50\u679A\u4E3E\u539F\u59CB\u503C",type:"enum",defaultValue:0,wire:"TextConfig.align",options:[{value:0,label:"0 \xB7 \u5DE6\u5BF9\u9F50"},{value:1,label:"1 \xB7 \u5C45\u4E2D"},{value:2,label:"2 \xB7 \u53F3\u5BF9\u9F50"}]}],textwindow:[{key:"textField501",label:"\u6587\u672C\u914D\u7F6E field501",type:"number",defaultValue:20,wire:"TextConfig.field501"},{key:"textField503",label:"\u6587\u672C\u914D\u7F6E field503",type:"number",defaultValue:12,wire:"TextConfig.field503"},{key:"textAlign",label:"\u6C34\u5E73\u5BF9\u9F50\u679A\u4E3E\u539F\u59CB\u503C",type:"enum",defaultValue:0,wire:"TextConfig.align",options:[{value:0,label:"0 \xB7 \u5DE6\u5BF9\u9F50"},{value:1,label:"1 \xB7 \u5C45\u4E2D"},{value:2,label:"2 \xB7 \u53F3\u5BF9\u9F50"}]},{key:"textField511",label:"\u6587\u672C\u89C6\u7A97 field511",type:"number",defaultValue:1,wire:"TextConfig.field511"},{key:"textViewField502",label:"\u89C6\u7A97\u6807\u8BB0 field502",type:"number",defaultValue:1,wire:"TextConfig.viewFlags.field502"},{key:"textViewField503",label:"\u89C6\u7A97\u6807\u8BB0 field503",type:"number",defaultValue:1,wire:"TextConfig.viewFlags.field503"}],cursor:[{key:"cursorField501",label:"\u5149\u6807\u68C0\u6D4B field501",type:"number",defaultValue:1,wire:"CursorConfig.field501"}],reference:[{key:"templateRefSlot",label:"\u6A21\u677F\u5F15\u7528\u69FD\u539F\u59CB\u503C",type:"string",defaultValue:"",wire:"Details.templateRefSlot"}],grid:[{key:"gridField501",label:"\u7F51\u683C\u6807\u8BB0 field501",type:"number",defaultValue:1,wire:"GridViewConfig.field501"},{key:"gridField507",label:"\u7F51\u683C\u6807\u8BB0 field507",type:"number",defaultValue:1,wire:"GridViewConfig.field507"},{key:"gridField508",label:"\u7F51\u683C\u6807\u8BB0 field508",type:"number",defaultValue:1,wire:"GridViewConfig.field508"},{key:"gridField509",label:"\u7F51\u683C\u6807\u8BB0 field509",type:"number",defaultValue:1,wire:"GridViewConfig.field509"},{key:"gridField511",label:"\u7F51\u683C\u6807\u8BB0 field511",type:"number",defaultValue:5,wire:"GridViewConfig.field511"},{key:"gridField512",label:"\u7F51\u683C\u6807\u8BB0 field512",type:"number",defaultValue:1,wire:"GridViewConfig.field512"}],keyhint:[{key:"keyHintField501",label:"\u6309\u952E\u63D0\u793A field501",type:"number",defaultValue:1,wire:"KeyHintConfig.field501"},{key:"keyHintField502",label:"\u952E\u9F20\u952E\u4F4D\u539F\u59CB\u503C",type:"number",defaultValue:1,wire:"KeyHintConfig.field502"}],image:[{key:"imageSlotType",label:"\u56FE\u7247\u7C7B\u578B\u539F\u59CB\u503C",type:"number",defaultValue:0,wire:"ImageSlotConfig.imageType"},{key:"imageField502",label:"\u56FE\u7247\u6807\u8BB0 field502",type:"number",defaultValue:1,wire:"ImageConfig.field502"},{key:"imageField504",label:"\u56FE\u7247\u6807\u8BB0 field504",type:"number",defaultValue:1,wire:"ImageConfig.field504"},{key:"imageField505",label:"\u56FE\u7247\u6807\u8BB0 field505",type:"number",defaultValue:1,wire:"ImageConfig.field505"},{key:"imageField507",label:"\u56FE\u7247\u6807\u8BB0 field507",type:"number",defaultValue:2,wire:"ImageConfig.field507"},{key:"imageFillType",label:"\u586B\u5145\u5F62\u72B6\u679A\u4E3E\u539F\u59CB\u503C",type:"enum",defaultValue:1,wire:"ImageConfig.fillType",options:[{value:1,label:"1 \xB7 \u6A2A\u5411"},{value:2,label:"2 \xB7 \u7EB5\u5411"},{value:3,label:"3 \xB7 90\u5EA6\u73AF\u7ED5"},{value:4,label:"4 \xB7 180\u5EA6\u73AF\u7ED5"},{value:5,label:"5 \xB7 360\u5EA6\u73AF\u7ED5"}]}],animation:[{key:"effectSlot",label:"\u754C\u9762\u52A8\u6548\u69FD\u539F\u59CB\u503C",type:"string",defaultValue:"",wire:"Details.effectSlot"}],fullscreen:[{key:"fullscreenEffectSlot",label:"\u5168\u5C4F\u52A8\u6548\u69FD\u539F\u59CB\u503C",type:"string",defaultValue:"",wire:"Details.fullscreenEffectSlot"}]});function No(e){return[...ql,...Jl[e]||[]]}function Oo(e,t){return No(e).find(i=>i.key===t)||null}function jr(e,t){if(!e)throw new Error("unknown raw GIA field");if(e.type==="string")return String(t??"");let i=Number(t);if(!Number.isFinite(i))throw new Error(`${e.wire} must be a finite number`);return Math.trunc(i)}function Fo(e,t={}){let i={};for(let r of No(e)){let n=Object.hasOwn(t||{},r.key)?t[r.key]:r.defaultValue;i[r.key]=jr(r,n)}return i}function Oe(e){let t=Number(e);return Number.isSafeInteger(t)&&t>0&&t<=2147483647}function Hr(e,t){if(e){t(e);for(let i of e.children||[])Hr(i,t)}}function Ft(e,t=new Set,{skipServerContainer:i=!1}={}){return Hr(e,r=>{i&&r.kind==="server-container"||Oe(r.guid)&&t.add(Number(r.guid))}),t}function et(e,t=1073741850){let i=Number.isSafeInteger(t)&&t>0?t:1073741850;i<1073741850&&(i=1073741850);for(let r of e)Oe(r)&&r>=i&&(i=Number(r)+1);for(;e.has(i);)i+=1;if(i>2147483647)throw new Error("GUID space exhausted");return i}function Do(e,t=new Set,{skipServerContainer:i=!1}={}){let r=[];Hr(e,n=>{if(i&&n.kind==="server-container")return;let o=Number(n.guid);if(Oe(o)&&!t.has(o)){t.add(o),n.guid=o;return}r.push(n)});for(let n of r){let o=et(t);n.guid=o,t.add(o)}return t}function Pe(e){return Number.isSafeInteger(e)&&e>0&&e<=2147483647}function Xe(e,{warnings:t=[]}={}){if(e.meta?.assetType!=="client-control-template")return;if(e.meta.giaAssetIndexSchemaVersion>1)throw new Error(`\u4E0D\u652F\u6301\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7\u7248\u672C ${e.meta.giaAssetIndexSchemaVersion}`);let i=[],r=m=>{m.kind!=="server-container"&&i.push(m);for(let g of m.children||[])r(g)};r(e.root);let n=new Map,o=new Map;for(let m of i){if(!Pe(m.giaInfoIndex))continue;let g=n.get(m.giaInfoIndex)||[];g.push(m),n.set(m.giaInfoIndex,g);let v=o.get(m.kind)||new Set;v.add(m.giaInfoIndex),o.set(m.kind,v)}let a=(e.root.children||[]).filter(m=>m.kind!=="server-container"),s=new Set(a),c=a.some((m,g)=>Pe(m.giaInfoIndex)&&a.slice(0,g).some(v=>v.giaInfoIndex===m.giaInfoIndex)),l=!e.meta.giaAssetIndexSchemaVersion&&c&&i.every(m=>m.giaInfoIndexSource!=="authoring")&&[...o.values()].every(m=>m.size===1)&&[...n.values()].every(m=>m.every(g=>g.kind===m[0].kind)),u=new Set;if(l)for(let m of n.values()){let g=m.find(v=>s.has(v))||m[0];for(let v of m)v!==g&&u.add(v)}let f=new Map,h=Number.isSafeInteger(e.meta.giaNextAssetIndex)&&e.meta.giaNextAssetIndex>=2?e.meta.giaNextAssetIndex:2;for(let m of i){if(!Pe(m.giaInfoIndex)||(h=Math.max(h,m.giaInfoIndex+1),u.has(m)))continue;let g=f.get(m.giaInfoIndex);if(g&&(g.giaInfoIndexSource==="authoring"||m.giaInfoIndexSource==="authoring"))throw new Error(`\u65B0\u5EFA\u8D44\u4EA7\u7F16\u53F7 ${m.giaInfoIndex} \u91CD\u590D\uFF1A${g.name} / ${m.name}`);f.set(m.giaInfoIndex,m)}l&&(h=Math.max(h,13));let p=l?[...a,...i.filter(m=>!s.has(m))].filter(m=>u.has(m)||!Pe(m.giaInfoIndex)):i.filter(m=>!Pe(m.giaInfoIndex));if(p.length&&h+p.length-1>2147483647)throw new Error("\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7\u7A7A\u95F4\u5DF2\u8017\u5C3D");for(let m of p)m.giaInfoIndex=h++,m.giaInfoIndexSource="authoring";e.meta.giaNextAssetIndex=h,e.meta.giaAssetIndexSchemaVersion=1,u.size&&t.push(`\u65E7\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7\u81EA\u52A8\u8FC1\u79FB\uFF1A\u4FEE\u590D ${u.size} \u6761\u6309\u63A7\u4EF6\u7C7B\u578B\u590D\u7528\u7684\u7F16\u53F7\uFF1BGUID\u3001Lua \u5F15\u7528\u548C\u63A7\u4EF6\u5C5E\u6027\u4FDD\u6301\u4E0D\u53D8\u3002`)}var Ur=1;function Lr(e="n"){let t=`${e}${Ur}`;return Ur+=1,t}function Ui(e=1){Ur=e}function Xr(e,{isRootContainer:t=!1}={}){if(e==="server-container"||e==="fullscreen"||e==="container"&&t)return Hi({layout:"stretch"});let i=xo[e]||[80,80];return Hi({layout:"center",size:i})}function Ql(e,t){return Ro(()=>Xr(e,t))}function Zl(e){Ze(e);let t={};for(let i of ue)t[i]=pt(e,i);return t}function q(e,t={}){if(!Rt[e])throw new Error(`unknown kind: ${e}`);Object.hasOwn(t,"transformByCanvas")&&ht(t);let i=t.isRootContainer===!0,r=t.id||Lr(e==="server-container"?"sc":"n"),n=Object.hasOwn(t,"transformByPlatform")?Zl(t.transformByPlatform):Ql(e,{isRootContainer:i}),o={id:r,kind:e,name:t.name||Rt[e],guid:t.guid??0,giaRelatedGuids:Array.isArray(t.giaRelatedGuids)?t.giaRelatedGuids.filter(a=>Number.isSafeInteger(Number(a))&&Number(a)>0).map(Number):[],...Pe(Number(t.giaInfoIndex))?{giaInfoIndex:Number(t.giaInfoIndex),giaInfoIndexSource:t.giaInfoIndexSource==="authoring"?"authoring":"imported"}:{},active:t.active!==!1,visible:t.visible!==!1,canControllerFocus:t.canControllerFocus??t.giaRaw?.footerField505===1,syncAllDevices:t.syncAllDevices!==!1,giaRaw:Fo(e,t.giaRaw),transformByPlatform:n,children:[],scriptMappingIds:Array.isArray(t.scriptMappingIds)?t.scriptMappingIds.filter(a=>Number.isSafeInteger(Number(a))&&Number(a)>0).map(Number):[]};if(e==="container"&&(o.isolateNavigation=t.isolateNavigation===!0,o.disableKeyEventPassthrough=t.disableKeyEventPassthrough===!0,o.disableCursorEventPassthrough=t.disableCursorEventPassthrough===!0,o.showCursor=t.showCursor===!0),(e==="textbox"||e==="textwindow")&&(o.fontSize=t.fontSize??20,o.adaptiveFontSize=t.adaptiveFontSize===!0,o.minimumFontSize=t.minimumFontSize??20,o.fontColor=t.fontColor??ai.font,o.bgColor=t.bgColor??ai.bg,o.enableOutline=t.enableOutline!==!1,o.outlineColor=t.outlineColor??ai.outline,o.horizontalAlignment=t.horizontalAlignment||"Left",o.verticalAlignment=t.verticalAlignment||"Top",Number.isInteger(t.giaRaw?.textVerticalAlign)&&![0,1,2].includes(t.giaRaw.textVerticalAlign)&&(o.giaRaw.textVerticalAlign=t.giaRaw.textVerticalAlign),o.text=t.text??"",Object.hasOwn(t.giaRaw||{},"textAlign")||(o.giaRaw.textAlign={Left:0,Middle:1,Right:2}[o.horizontalAlignment]??o.giaRaw.textAlign),e==="textwindow"&&(o.interactable=t.interactable!==!1,o.showScrollBar=t.showScrollBar!==!1)),e==="image"&&(o.imageSource=t.imageSource||"StaticReference",o.imageType=["Basic","Stretch"].includes(t.imageType)?t.imageType:null,o.imageId=t.imageId??100001,o.imageColor=t.imageColor??ai.image,o.enableMask=t.enableMask===!0,o.enableSoftEdge=t.enableSoftEdge===!0,o.softEdgeMode=t.softEdgeMode||"Percentage",o.softEdgeWidthX=t.softEdgeWidthX??8,o.softEdgeWidthY=t.softEdgeWidthY??8,o.horizontalSoftRange=t.horizontalSoftRange??85,o.verticalSoftRange=t.verticalSoftRange??85,o.enableFill=t.enableFill===!0,o.fillType=t.fillType||"Horizontal",o.fillHorizontalType=t.fillHorizontalType||"Left",o.fillVerticalType=t.fillVerticalType||"Bottom",o.fillRadial90Type=t.fillRadial90Type||"BottomLeft",o.fillRadialType=t.fillRadialType||"Bottom",o.fillAmount=t.fillAmount??1,o.reverseMaskArea=t.reverseMaskArea===!0||t.reverseMask===!0,Object.hasOwn(t.giaRaw||{},"imageFillType")||(o.giaRaw.imageFillType={Horizontal:1,Vertical:2,Radial90:3,Radial180:4,Radial360:5}[o.fillType]??o.giaRaw.imageFillType)),e==="button"&&(o.raycastTarget=t.raycastTarget!==!1,o.interactable=t.interactable!==!1,o.clickAudioId=t.clickAudioId??Io,o.unavailableChildId=t.unavailableChildId??null,o.hoverChildId=t.hoverChildId??null,o.pressedChildId=t.pressedChildId??null,o.selectedChildId=t.selectedChildId??null),e==="cursor"&&(o.raycastTarget=t.raycastTarget??t.giaRaw?.cursorField501!==0),e==="reference"&&(o.referencedPrefabId=t.referencedPrefabId??t.giaRaw?.templateRefSlot??null,Object.hasOwn(t.giaRaw||{},"templateRefSlot")||(o.giaRaw.templateRefSlot=String(o.referencedPrefabId??""))),e==="grid"&&(o.itemPrefabId=t.itemPrefabId??null,o.raycastTarget=t.raycastTarget!==!1,o.interactable=t.interactable!==!1,o.showScrollBar=t.showScrollBar!==!1,o.scrollDirection=t.scrollDirection||"Vertical",o.layoutConstraint=t.layoutConstraint||"AutoWrap",o.layoutConstraintFixedCount=t.layoutConstraintFixedCount??null,o.cellSizeX=t.cellSizeX??50,o.cellSizeY=t.cellSizeY??50,o.spacingX=t.spacingX??8,o.spacingY=t.spacingY??8,o.padding1X=t.padding1X??20,o.padding1Y=t.padding1Y??20,o.padding2X=t.padding2X??20,o.padding2Y=t.padding2Y??20,o.previewCount=t.previewCount??t.giaRaw?.gridField511??5,Object.hasOwn(t.giaRaw||{},"gridField511")||(o.giaRaw.gridField511=Math.trunc(o.previewCount))),e==="keyhint"&&(o.keyboardKeyCode=t.keyboardKeyCode??t.giaRaw?.keyHintField502??null,o.controllerKeyCode=t.controllerKeyCode??t.giaRaw?.keyHintField501??null,Object.hasOwn(t.giaRaw||{},"keyHintField502")||(o.giaRaw.keyHintField502=Math.trunc(o.keyboardKeyCode??1)),Object.hasOwn(t.giaRaw||{},"keyHintField501")||(o.giaRaw.keyHintField501=Math.trunc(o.controllerKeyCode??1))),e==="animation"||e==="fullscreen"){let a=e==="animation"?t.giaRaw?.effectSlot:t.giaRaw?.fullscreenEffectSlot;o.animationId=t.animationId??a??null,o.playSoundEffect=t.playSoundEffect??null,e==="animation"&&(o.layer=t.layer??null);let s=e==="animation"?"effectSlot":"fullscreenEffectSlot";Object.hasOwn(t.giaRaw||{},s)||(o.giaRaw[s]=String(o.animationId??""))}if(t.children)for(let a of t.children)o.children.push(a);return o}function mt(){Ui(1);let e=q("server-container",{id:"sc1",name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668"}),t=q("container",{id:"n1",name:"\u5BB9\u5668\u8282\u70B9",isRootContainer:!0}),i=q("textbox",{id:"n2",name:"\u6587\u672C\u6846",text:"\u6587\u672C"}),r=q("cursor",{id:"n3",name:"\u5149\u6807\u68C0\u6D4B\u533A\u57DF"}),n=q("reference",{id:"n4",name:"\u6A21\u677F\u5F15\u7528\u63A7\u4EF6"}),o=q("grid",{id:"n5",name:"\u7F51\u683C\u89C6\u7A97"}),a=q("button",{id:"n6",name:"\u9884\u8BBE\u6309\u94AE"}),s=q("textwindow",{id:"n7",name:"\u6587\u672C\u89C6\u7A97"}),c=q("keyhint",{id:"n8",name:"\u6309\u952E\u63D0\u793A"}),l=q("image",{id:"n9",name:"\u56FE\u7247",imageId:100005}),u=q("animation",{id:"n10",name:"\u754C\u9762\u52A8\u6548"}),f=q("fullscreen",{id:"n11",name:"\u5168\u5C4F\u52A8\u6548"}),h=(p,m,g)=>{for(let v of Object.values(p.transformByPlatform))v.offset={x:m,y:g}};return h(i,-300,250),h(r,-300,140),h(n,-300,30),h(o,-300,-100),h(a,0,0),h(s,300,250),h(c,300,140),h(l,300,30),h(u,300,-100),t.children.push(i,r,n,o,a,s,c,l,u,f),e.children.push(t),Ui(12),Do(e),{version:1,layoutSchemaVersion:ve,meta:{name:"\u672A\u547D\u540D\u754C\u9762\u63A7\u4EF6\u7EC4",assetType:"server-control-template",sourceFormat:"authoring",sourceFile:""},canvasId:"pc-16-9",selectedId:"n2",root:e}}function Dt(){Ui(1);let e=q("server-container",{id:"sc1",name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"}),t=q("container",{id:"n1",guid:1073742100,name:"Lua\u5B9E\u4F8B\u5316\u9762\u677F"}),i=q("textbox",{id:"n2",guid:1073742101,name:"\u6A21\u677F\u6807\u9898",text:"\u5BA2\u6237\u7AEF\u6A21\u677F\u5DF2\u5B9E\u4F8B\u5316",fontSize:28,horizontalAlignment:"Middle"}),r=q("image",{id:"n3",guid:1073742102,name:"\u6A21\u677F\u56FE\u6807",imageId:100005}),n=q("button",{id:"n4",guid:1073742103,name:"\u786E\u8BA4\u6309\u94AE"}),o=q("textbox",{id:"n5",guid:1073742104,name:"\u6309\u94AE\u6587\u5B57",text:"\u786E\u8BA4",horizontalAlignment:"Middle",verticalAlignment:"Top"}),a=(l,u,f)=>{for(let h of Object.values(l.transformByPlatform))h.offset={x:u,y:f}};((l,u,f)=>{for(let h of Object.values(l.transformByPlatform))h.size={x:u,y:f}})(t,520,320),a(i,0,110),a(r,0,0),a(n,0,-110),n.children.push(o),t.children.push(i,r,n),e.children.push(t),Ui(6);let c={version:1,layoutSchemaVersion:ve,meta:{name:"Lua\u5B9E\u4F8B\u5316\u9762\u677F",assetType:"client-control-template",sourceFormat:"authoring",sourceFile:"",gameVersion:Vi,giaOwnerUid:114514,giaFileId:1073741829,giaFileName:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868.gia"},canvasId:"pc-16-9",selectedId:"n1",root:e};return Xe(c),c}function Z(e,t,i=null){t(e,i);for(let r of e.children||[])Z(r,t,e)}function pe(e,t){let i=null;return Z(e,r=>{r.id===t&&(i=r)}),i}function Wr(e,t="n"){let i=Lr(t);for(;pe(e,i);)i=Lr(t);return i}function tt(e,t){let i=null;return Z(e,(r,n)=>{r.id===t&&(i=n)}),i}function Kr(e){let t=e.root||e;return t.kind==="container"?t:(t.children||[]).find(i=>i.kind==="container")||(t.children||[])[0]||t}function ui(e){if(e.meta?.assetType!=="client-control-template")return Kr(e);let t=pe(e.root,e.selectedId);if(!t||t.kind==="server-container")return e.root.children?.[0]||e.root;let i=tt(e.root,t.id);for(;i&&i.kind!=="server-container";)t=i,i=tt(e.root,t.id);return t}function qr(e){ht(e);let t={id:e.id,name:e.name,guid:e.guid,giaRelatedGuids:e.giaRelatedGuids,giaInfoIndex:e.giaInfoIndex,giaInfoIndexSource:e.giaInfoIndexSource,scriptMappingIds:e.scriptMappingIds,giaRaw:e.giaRaw,active:e.active,visible:e.visible,canControllerFocus:e.canControllerFocus,syncAllDevices:e.syncAllDevices,transformByPlatform:e.transformByPlatform};e.kind==="container"&&(t.isolateNavigation=e.isolateNavigation,t.disableKeyEventPassthrough=e.disableKeyEventPassthrough,t.disableCursorEventPassthrough=e.disableCursorEventPassthrough,t.showCursor=e.showCursor),(e.kind==="textbox"||e.kind==="textwindow")&&(t.fontSize=e.fontSize,t.adaptiveFontSize=e.adaptiveFontSize,t.minimumFontSize=e.minimumFontSize,t.fontColor=e.fontColor,t.bgColor=e.bgColor,t.enableOutline=e.enableOutline,t.outlineColor=e.outlineColor,t.horizontalAlignment=e.horizontalAlignment,t.verticalAlignment=e.verticalAlignment,t.text=e.text??"",e.kind==="textwindow"&&(t.interactable=e.interactable,t.showScrollBar=e.showScrollBar)),e.kind==="image"&&(t.imageSource=e.imageSource,t.imageType=e.imageType,t.imageId=e.imageId,t.imageColor=e.imageColor,t.enableMask=e.enableMask,t.enableSoftEdge=e.enableSoftEdge,t.softEdgeMode=e.softEdgeMode,t.softEdgeWidthX=e.softEdgeWidthX,t.softEdgeWidthY=e.softEdgeWidthY,t.horizontalSoftRange=e.horizontalSoftRange,t.verticalSoftRange=e.verticalSoftRange,t.enableFill=e.enableFill,t.fillType=e.fillType,t.fillHorizontalType=e.fillHorizontalType,t.fillVerticalType=e.fillVerticalType,t.fillRadial90Type=e.fillRadial90Type,t.fillRadialType=e.fillRadialType,t.fillAmount=e.fillAmount,t.reverseMaskArea=e.reverseMaskArea??e.reverseMask),e.kind==="button"&&(t.raycastTarget=e.raycastTarget,t.interactable=e.interactable,t.clickAudioId=e.clickAudioId,t.unavailableChildId=e.unavailableChildId??null,t.hoverChildId=e.hoverChildId??null,t.pressedChildId=e.pressedChildId??null,t.selectedChildId=e.selectedChildId??null),e.kind==="cursor"&&(t.raycastTarget=e.raycastTarget),e.kind==="reference"&&(t.referencedPrefabId=e.referencedPrefabId??null),e.kind==="grid"&&(t.itemPrefabId=e.itemPrefabId??null,t.raycastTarget=e.raycastTarget,t.interactable=e.interactable,t.showScrollBar=e.showScrollBar,t.scrollDirection=e.scrollDirection,t.layoutConstraint=e.layoutConstraint,t.layoutConstraintFixedCount=e.layoutConstraintFixedCount??null,t.cellSizeX=e.cellSizeX,t.cellSizeY=e.cellSizeY,t.spacingX=e.spacingX,t.spacingY=e.spacingY,t.padding1X=e.padding1X,t.padding1Y=e.padding1Y,t.padding2X=e.padding2X,t.padding2Y=e.padding2Y,t.previewCount=e.previewCount),e.kind==="keyhint"&&(t.keyboardKeyCode=e.keyboardKeyCode??null,t.controllerKeyCode=e.controllerKeyCode??null),(e.kind==="animation"||e.kind==="fullscreen")&&(t.animationId=e.animationId??null,t.playSoundEffect=e.playSoundEffect??null,e.kind==="animation"&&(t.layer=e.layer??null)),t.isRootContainer=e.kind==="container"&&ec(e.transformByPlatform);let i=q(e.kind,t);return i.children=(e.children||[]).map(r=>qr(r)),i}function ec(e){let t=e&&(e.KEYBOARD||Object.values(e)[0]);return t?Math.abs(t.anchorMin?.x??.5)<1e-4&&Math.abs(t.anchorMin?.y??.5)<1e-4&&Math.abs((t.anchorMax?.x??.5)-1)<1e-4&&Math.abs((t.anchorMax?.y??.5)-1)<1e-4:!1}function zo(e,t,i={}){if(e.kind==="server-container"&&t!=="container")throw new Error("server container only accepts container nodes");let r=q(t,i);return e.children.push(r),r}function $o(e,t){if(e.id===t)throw new Error("cannot remove root");let i=tt(e,t);if(!i)return!1;let r=i.children.findIndex(n=>n.id===t);return r<0?!1:(i.children.splice(r,1),!0)}var Go=1e-4;function tc(e,t){return Math.abs(e.anchorMax[t]-e.anchorMin[t])>Go&&Math.abs(e.size[t])<=Go}function ic(e,t,i){if(!(t.width>0)||!(t.height>0))throw new Error("source parent must have positive size");if(!(i.width>0)||!(i.height>0))throw new Error("target parent must have positive size");let r=Ue(t,e),n=(r.centerX-t.left)/t.width,o=(r.centerY-t.bottom)/t.height,a=ft(i,e,{posX:i.left+n*i.width,posY:i.bottom+o*i.height,width:r.width,height:r.height});for(let s of["x","y"])tc(e,s)&&(a.offset[s]=e.offset[s],a.size[s]=e.size[s]);return a}function Vo({transformByPlatform:e,source:t,canvasId:i,syncAllDevices:r,sourceParentBox:n=Se(i),targetParentBoxByPlatform:o={}}){Ze(e);let a=dt(i),s={};for(let c of ue)c===a?s[c]=Ye(t):r!==!1?s[c]=ic(t,n,o[c]||Se(Tt[c])):s[c]=pt(e,c);return Ze(s),s}function it(e,t){return pt(e,dt(t))}function Yo(e,t){let i=[];function r(n){t[n.id]&&i.push(t[n.id]);let o=n.children||[];for(let a=o.length-1;a>=0;a-=1)r(o[a])}return r(e),i}function rt(e,t,i=dt(t)){let r=Se(t),n={};function o(a,s,c){let l=pt(a.transformByPlatform,i),u=Ue(s,l),f=a.kind==="server-container"?c:ci(c,u,l),h=_o(u,f);n[a.id]={...u,...Br(u),id:a.id,kind:a.kind,name:a.name,visible:a.visible!==!1,active:a.active!==!1,rotationX:l.rotation.x,rotationY:l.rotation.y,rotationZ:l.rotation.z,renderLeft:h.left,renderBottom:h.bottom,renderWidth:h.width,renderHeight:h.height,renderRotationZ:h.rotationZ,renderMatrix:f,primitive:a.kind==="image"?Mt(a.imageId,a.imageSource):null,...a.kind==="textbox"||a.kind==="textwindow"?{text:a.text??"",fontSize:a.fontSize,fontColor:a.fontColor,bgColor:a.bgColor,enableOutline:a.enableOutline!==!1,outlineColor:a.outlineColor,horizontalAlignment:a.horizontalAlignment,verticalAlignment:a.verticalAlignment}:{},...a.kind==="image"?{imageSource:a.imageSource,imageType:a.imageType??null,imageId:a.imageId,imageColor:a.imageColor,enableMask:a.enableMask===!0,enableSoftEdge:a.enableSoftEdge===!0,softEdgeMode:a.softEdgeMode,softEdgeWidthX:a.softEdgeWidthX,softEdgeWidthY:a.softEdgeWidthY,horizontalSoftRange:a.horizontalSoftRange,verticalSoftRange:a.verticalSoftRange,enableFill:a.enableFill===!0,fillType:a.fillType,fillHorizontalType:a.fillHorizontalType,fillVerticalType:a.fillVerticalType,fillRadial90Type:a.fillRadial90Type,fillRadialType:a.fillRadialType,fillAmount:a.fillAmount,reverseMaskArea:a.reverseMaskArea===!0}:{},...a.kind==="button"?{raycastTarget:a.raycastTarget!==!1,interactable:a.interactable!==!1,clickAudioId:a.clickAudioId,unavailableChildId:a.unavailableChildId??null,hoverChildId:a.hoverChildId??null,pressedChildId:a.pressedChildId??null,selectedChildId:a.selectedChildId??null}:{}};let p=a.kind==="server-container"?s:u;for(let m of a.children||[])o(m,p,f)}return o(e,r,Ot()),{canvas:r,boxes:n}}function Jr(e,t){let i=[];function r(n,o,a=null,s=[],c=0,l=1,u=e.id){i.push({id:n.id,guid:t?.get(n.id)??(n.guid||0),kind:n.kind,name:n.name,label:Rt[n.kind]||n.kind,depth:o,parentId:a,ancestorIds:s,siblingIndex:c,siblingCount:l,templateId:u,childCount:(n.children||[]).length,incomplete:!Bi.includes(n.kind)});let f=n.children||[];for(let h=0;h<f.length;h+=1)r(f[h],o+1,n.id,[...s,n.id],h,f.length,u)}return r(e,0),i}function T(e,t,i,r,n={}){return{key:e,label:t,type:i,value:r,...n}}function Bo(e,t,i,r){if(!e)return null;let n=it(e.transformByPlatform,t),o=Br(i),a=[T("name","\u540D\u79F0","string",e.name),T("active","\u521D\u59CB\u6FC0\u6D3B","bool",e.active!==!1),T("visible","\u521D\u59CB\u53EF\u89C1\u6027","bool",e.visible!==!1),T("canControllerFocus","\u53EF\u88AB\u624B\u67C4\u6447\u6746\u5BFC\u822A\u9009\u4E2D","bool",e.canControllerFocus===!0),T("posX","\u4F4D\u7F6E X","number",o.posX,{computed:!0}),T("posY","\u4F4D\u7F6E Y","number",o.posY,{computed:!0}),T("width","\u5927\u5C0F W","number",o.width,{computed:!0}),T("height","\u5927\u5C0F H","number",o.height,{computed:!0}),T("rotationX","\u65CB\u8F6C X","number",n.rotation.x),T("rotationY","\u65CB\u8F6C Y","number",n.rotation.y),T("rotationZ","\u65CB\u8F6C Z","number",n.rotation.z),T("syncAllDevices","\u540C\u6B65\u4FE1\u606F\u81F3\u6240\u6709\u8BBE\u5907","bool",e.syncAllDevices!==!1),T("anchorType","\u951A\u70B9\u7C7B\u578B","enum",To(n),{options:[{value:"center",label:"\u5C45\u4E2D"},{value:"top-left",label:"\u5DE6\u4E0A"},{value:"top",label:"\u4E0A\u65B9"},{value:"top-right",label:"\u53F3\u4E0A"},{value:"left",label:"\u5DE6\u4FA7"},{value:"right",label:"\u53F3\u4FA7"},{value:"bottom-left",label:"\u5DE6\u4E0B"},{value:"bottom",label:"\u4E0B\u65B9"},{value:"bottom-right",label:"\u53F3\u4E0B"},{value:"stretch",label:"\u53CC\u5411\u62C9\u4F38"},{value:"stretch-horizontal",label:"\u6C34\u5E73\u62C9\u4F38"},{value:"stretch-vertical",label:"\u5782\u76F4\u62C9\u4F38"},{value:"custom",label:"\u81EA\u5B9A\u4E49"}]}),T("anchorMinX","\u951A\u70B9 Min X","number",n.anchorMin.x),T("anchorMinY","\u951A\u70B9 Min Y","number",n.anchorMin.y),T("anchorMaxX","\u951A\u70B9 Max X","number",n.anchorMax.x),T("anchorMaxY","\u951A\u70B9 Max Y","number",n.anchorMax.y),T("pivotX","\u4E2D\u5FC3 X","number",n.pivot.x),T("pivotY","\u4E2D\u5FC3 Y","number",n.pivot.y)];if(e.kind==="container"&&a.push(T("isolateNavigation","\u9694\u79BB\u624B\u67C4\u5BFC\u822A","bool",e.isolateNavigation===!0),T("disableKeyEventPassthrough","\u5C4F\u853D\u6309\u952E\u4E8B\u4EF6\u7A7F\u900F","bool",e.disableKeyEventPassthrough===!0),T("disableCursorEventPassthrough","\u5C4F\u853D\u533A\u57DF\u5185\u70B9\u51FB\u4E8B\u4EF6\u7A7F\u900F","bool",e.disableCursorEventPassthrough===!0),T("showCursor","\u663E\u793A\u5E38\u9A7B\u5149\u6807","bool",e.showCursor===!0)),e.kind==="textbox"||e.kind==="textwindow"){let s=e.giaRaw?.textAlign,c=[0,1,2].includes(s)?e.horizontalAlignment||"Left":`__unrecognized:${s}`;a.push(T("fontSize","\u5B57\u53F7","number",e.fontSize),T("adaptiveFontSize","\u5B57\u53F7\u81EA\u9002\u5E94","bool",e.adaptiveFontSize===!0),T("minimumFontSize","\u6700\u5C0F\u5B57\u53F7","number",e.minimumFontSize),T("fontColor","\u6587\u672C\u8272","color",e.fontColor),T("bgColor","\u80CC\u666F\u8272","color",e.bgColor),T("enableOutline","\u542F\u7528\u63CF\u8FB9","bool",e.enableOutline!==!1),T("outlineColor","\u63CF\u8FB9\u8272","color",e.outlineColor),T("horizontalAlignment","\u6C34\u5E73\u5BF9\u9F50","enum",c,{...[0,1,2].includes(s)?{}:{unknownValue:s},options:[{value:"Left",label:"\u5DE6\u5BF9\u9F50"},{value:"Middle",label:"\u5C45\u4E2D"},{value:"Right",label:"\u53F3\u5BF9\u9F50"}]}),T("verticalAlignment","\u5782\u76F4\u5BF9\u9F50","enum",e.verticalAlignment||"Top",{options:[{value:"Top",label:"\u9876\u90E8"},{value:"Middle",label:"\u5C45\u4E2D"},{value:"Bottom",label:"\u5E95\u90E8"}]}),T("text","\u6587\u672C","text",e.text??""))}if(e.kind==="image"){let s=e.giaRaw?.imageFillType,c=[1,2,3,4,5].includes(s)?e.fillType:`__unrecognized:${s}`;a.push(T("imageSource","\u56FE\u7247\u6E90","enum",e.imageSource,{options:[{value:"StaticReference",label:"\u9759\u6001\u5F15\u7528"},{value:"Prefab",label:"\u5143\u4EF6"}]}),T("imageId","imageId","number",e.imageId??0),T("imageType","\u56FE\u7247\u7C7B\u578B","enum",e.imageType??null,{options:[{value:"Basic",label:"\u57FA\u7840"},{value:"Stretch",label:"\u62C9\u4F38"}]}),T("imageColor","\u586B\u5145\u8272","color",e.imageColor),T("enableMask","\u5F00\u542F\u906E\u7F69","bool",e.enableMask===!0),T("enableSoftEdge","\u8FB9\u7F18\u7FBD\u5316","bool",e.enableSoftEdge===!0,{gia:"W"}),T("softEdgeMode","\u7FBD\u5316\u6A21\u5F0F","enum",e.softEdgeMode,{options:[{value:"Percentage",label:"\u767E\u5206\u6BD4"},{value:"Pixel",label:"\u50CF\u7D20"}]}),T("softEdgeWidthX","\u7FBD\u5316\u5BBD\u5EA6 X","number",e.softEdgeWidthX),T("softEdgeWidthY","\u7FBD\u5316\u5BBD\u5EA6 Y","number",e.softEdgeWidthY),T("horizontalSoftRange","\u6C34\u5E73\u7FBD\u5316\u8303\u56F4","number",e.horizontalSoftRange),T("verticalSoftRange","\u5782\u76F4\u7FBD\u5316\u8303\u56F4","number",e.verticalSoftRange),T("enableFill","\u6309\u8FDB\u5EA6\u586B\u5145","bool",e.enableFill===!0,{gia:"W"}),T("fillType","\u5F62\u72B6","enum",c,{...[1,2,3,4,5].includes(s)?{}:{unknownValue:s},options:[{value:"Horizontal",label:"\u6A2A\u5411"},{value:"Vertical",label:"\u7EB5\u5411"},{value:"Radial90",label:"90\u5EA6\u73AF\u7ED5"},{value:"Radial180",label:"180\u5EA6\u73AF\u7ED5"},{value:"Radial360",label:"360\u5EA6\u73AF\u7ED5"}]}),T("fillHorizontalType","\u65B9\u5411","enum",e.fillHorizontalType,{options:[{value:"Left",label:"\u4ECE\u5DE6\u81F3\u53F3"},{value:"Right",label:"\u4ECE\u53F3\u81F3\u5DE6"}]}),T("fillVerticalType","\u65B9\u5411","enum",e.fillVerticalType,{options:[{value:"Bottom",label:"\u4ECE\u4E0B\u81F3\u4E0A"},{value:"Top",label:"\u4ECE\u4E0A\u81F3\u4E0B"}]}),T("fillRadial90Type","\u8D77\u70B9","enum",e.fillRadial90Type,{options:[{value:"BottomLeft",label:"\u5DE6\u4E0B"},{value:"TopLeft",label:"\u5DE6\u4E0A"},{value:"TopRight",label:"\u53F3\u4E0A"},{value:"BottomRight",label:"\u53F3\u4E0B"}]}),T("fillRadialType","\u8D77\u70B9","enum",e.fillRadialType,{options:[{value:"Bottom",label:"\u4E0B\u65B9"},{value:"Left",label:"\u5DE6\u4FA7"},{value:"Top",label:"\u4E0A\u65B9"},{value:"Right",label:"\u53F3\u4FA7"}]}),T("fillAmount","\u8FDB\u5EA6","percent",e.fillAmount),T("reverseMaskArea","\u906E\u7F69\u533A\u57DF\u53CD\u8F6C","bool",e.reverseMaskArea===!0,{gia:"W"}))}if(e.kind==="button"){let s=[{value:"",label:"\u672A\u8BBE\u7F6E"},...(e.children||[]).map(c=>({value:c.id,label:`${c.name} \xB7 ${c.id}`}))];a.push(T("raycastTarget","\u53EF\u88AB\u5149\u6807\u5C04\u7EBF\u68C0\u6D4B","bool",e.raycastTarget!==!1),T("interactable","\u6309\u94AE\u662F\u5426\u53EF\u7528","bool",e.interactable!==!1),T("unavailableChildId","\u4E0D\u53EF\u7528\u72B6\u6001\u8282\u70B9","node",e.unavailableChildId,{options:s,gia:"W"}),T("hoverChildId","\u60AC\u505C\u72B6\u6001\u8282\u70B9","node",e.hoverChildId,{options:s,gia:"W"}),T("pressedChildId","\u6309\u4E0B\u72B6\u6001\u8282\u70B9","node",e.pressedChildId,{options:s,gia:"W"}),T("selectedChildId","\u9009\u4E2D\u72B6\u6001\u8282\u70B9","node",e.selectedChildId,{options:s,gia:"W"}),T("clickAudioId","\u70B9\u51FB\u97F3\u6548","number",e.clickAudioId))}return e.kind==="reference"&&a.push(T("referencedPrefabId","\u5F15\u7528\u63A7\u4EF6\u6A21\u677F\u7D22\u5F15","string",e.referencedPrefabId??"")),(e.kind==="textwindow"||e.kind==="grid")&&a.push(T("interactable","\u5141\u8BB8\u6EDA\u52A8\u4EA4\u4E92","bool",e.interactable!==!1),T("showScrollBar","\u663E\u793A\u6EDA\u52A8\u6761","bool",e.showScrollBar!==!1)),e.kind==="grid"&&a.push(T("itemPrefabId","\u5217\u8868\u9879\u6A21\u677F\u7D22\u5F15","number",e.itemPrefabId??0),T("raycastTarget","\u53EF\u88AB\u5149\u6807\u5C04\u7EBF\u68C0\u6D4B","bool",e.raycastTarget!==!1),T("scrollDirection","\u6EDA\u52A8\u65B9\u5411","enum",e.scrollDirection,{options:[{value:"Vertical",label:"\u7EB5\u5411"},{value:"Horizontal",label:"\u6A2A\u5411"}]}),T("layoutConstraint","\u6392\u5217\u9650\u5236","enum",e.layoutConstraint,{options:[{value:"AutoWrap",label:"\u81EA\u52A8\u6362\u884C"},{value:"Fixed",label:"\u56FA\u5B9A\u884C\u5217\u6570"}]}),T("layoutConstraintFixedCount","\u6BCF\u884C\u6216\u6BCF\u5217\u6570\u91CF","number",e.layoutConstraintFixedCount??1),T("cellSizeX","\u5217\u8868\u9879\u5927\u5C0F W","number",e.cellSizeX,{evidence:"W"}),T("cellSizeY","\u5217\u8868\u9879\u5927\u5C0F H","number",e.cellSizeY,{evidence:"W"}),T("spacingX","\u5217\u8868\u9879\u95F4\u9694 X","number",e.spacingX,{evidence:"W"}),T("spacingY","\u5217\u8868\u9879\u95F4\u9694 Y","number",e.spacingY,{evidence:"W"}),T("padding1X","\u8FB9\u8DDD\u5411\u91CF 1 X","number",e.padding1X,{evidence:"W"}),T("padding1Y","\u8FB9\u8DDD\u5411\u91CF 1 Y","number",e.padding1Y,{evidence:"W"}),T("padding2X","\u8FB9\u8DDD\u5411\u91CF 2 X","number",e.padding2X,{evidence:"W"}),T("padding2Y","\u8FB9\u8DDD\u5411\u91CF 2 Y","number",e.padding2Y,{evidence:"W"}),T("previewCount","\u9884\u89C8\u6570\u91CF","number",e.previewCount)),e.kind==="keyhint"&&a.push(T("keyboardKeyCode","\u952E\u9F20\u6309\u952E","number",e.keyboardKeyCode??e.giaRaw?.keyHintField502??1,{gia:"W"}),T("controllerKeyCode","\u624B\u67C4\u6309\u952E","number",e.controllerKeyCode??e.giaRaw?.keyHintField501??1)),(e.kind==="animation"||e.kind==="fullscreen")&&a.push(T("animationId",e.kind==="animation"?"\u52A8\u6548\u7D22\u5F15":"\u5168\u5C4F\u52A8\u6548\u7D22\u5F15","string",e.animationId??"")),(!Bi.includes(e.kind)||e.kind==="textwindow"||e.kind==="grid")&&a.push(T("incomplete","\u5B8C\u6574\u5EA6","note",e.kind==="textwindow"||e.kind==="grid"?"\u8BD5\u73A9\u652F\u6301\u57FA\u7840\u6EDA\u52A8\uFF1B\u6EDA\u52A8\u4EA4\u4E92\u3001\u6EDA\u52A8\u6761\u53CA\u5217\u8868\u914D\u7F6E\u4EE5 JSON/Lua \u4E3A\u51C6\uFF0C\u76F8\u5173 GIA \u5F00\u5173\u6620\u5C04\u5C1A\u672A\u6838\u5B9E\u3002":"\u672C\u9636\u6BB5\u4EC5\u516C\u5171\u53D8\u6362\uFF0C\u4E1A\u52A1\u69FD\u4E0D\u5B8C\u6574")),{id:e.id,guid:r?.get(e.id)??(e.guid||0),kind:e.kind,label:Rt[e.kind]||e.kind,incomplete:!Bi.includes(e.kind),fields:a}}function jo(e,t,i){let r=(Array.isArray(e)?e:Object.values(e)).filter(n=>n.kind!=="server-container");for(let n=r.length-1;n>=0;n-=1){let o=r[n];if(!o.visible||!o.active)continue;let a=o.renderMatrix&&Le(o.renderMatrix),s=a&&Ie(a,t,i);if(s&&s.x>=o.left&&s.x<=o.right&&s.y>=o.bottom&&s.y<=o.top)return o.id}return null}import rc from"protobufjs";function zt(e,t=!1){let i=[],r=(n,o)=>{n.kind!=="server-container"&&i.push({node:n,parent:o});let a=t&&n.kind!=="server-container"?[...n.children||[]].reverse():n.children||[];for(let s of a)r(s,n)};return r(e.root,null),i}var nc=String.raw`
|
|
2
|
+
import{spawn as ep}from"node:child_process";import{createServer as tp}from"node:http";import{readFileSync as ip,realpathSync as fc}from"node:fs";import{extname as rp,resolve as hc}from"node:path";import{fileURLToPath as pc}from"node:url";import{createHash as np,timingSafeEqual as op}from"node:crypto";import{statSync as Oh}from"node:fs";var hi={name:"beyond-simulator-web",version:"0.5.1",description:"Self-hosted editor, preview and play surface for Qianxing simulator saves",type:"module",main:"dist/server.js",bin:{"beyond-simulator-web":"dist/server.js"},files:["dist","README.md"],scripts:{build:"node ../scripts/build.mjs web",pretest:"node ../scripts/build.mjs web",prepack:"node ../scripts/build.mjs web",start:"node dist/server.js",dev:"node ../scripts/build.mjs web && node server.js",test:"node --test test/*.test.mjs"},engines:{node:">=20"},dependencies:{"@napi-rs/canvas":"0.1.100",fengari:"0.1.5",protobufjs:"8.7.2"},devDependencies:{react:"19.1.1","react-dom":"19.1.1","qxqy-editor-ui":"workspace:*","qxqy-studio":"workspace:*"},license:"GPL-3.0-only",repository:{type:"git",url:"git+https://github.com/1475505/miliastra-beyond-simulator.git",directory:"web"}};var Xo="https://oss.070077.xyz/prefabs/",pi="prefab-v1",zc=[[10003004,10003004],[10005001,10005142],[10006001,10006002],[10007002,10007002],[10008001,10008001],[10009001,10009011],[20001001,20001074],[20001076,20001121],[20001123,20001156],[20001158,20001302],[20001304,20001568],[20001570,20001999],[20002001,20002755],[20002757,20002999],[20003001,20003455],[30001001,30001016],[30002001,30002017],[30003001,30003011],[30004001,30004001],[30005001,30005020],[30006001,30006026],[30007001,30007013],[30008001,30008011]];function Xi(e){return!Number.isSafeInteger(e)||!zc.some(([t,i])=>e>=t&&e<=i)?null:e===10003004||e===10008001?128:256}var Wi="https://oss.070077.xyz/images/",rn="sprite-v1",Ki="/qxqy-assets/",$c=[[100001,100006],[100101,100213],[101001,101018],[101020,101028],[101030,101046],[101048,101048],[101050,101054],[101056,101080],[102001,102052],[103001,103148],[104001,104010],[105001,105140],[105142,105219],[105221,105317],[106001,106047],[106049,106096],[107001,107007],[107010,107020],[107031,107092],[107094,107180],[107183,107201],[107203,107205],[107207,107228],[107231,107278],[107280,107402],[108001,108017],[108019,108020],[109001,109031],[109033,109034],[109036,109075],[110001,110053],[111001,111139],[112001,112042]];function ke(e){return e==null||e===""?"StaticReference":typeof e=="string"?e:typeof e.Name=="string"?e.Name:"Unknown"}function qi(e,t){return`${ke(t)}:${e}`}function Wo(e,t){return ke(t)==="StaticReference"&&rt(e,t)}function rt(e,t){let i=ke(t);return i==="Prefab"?Xi(e)!==null:i==="StaticReference"&&Number.isSafeInteger(e)&&e>100006&&$c.some(([r,n])=>e>=r&&e<=n)}var Ji="7.1.0",ue=Object.freeze(["KEYBOARD","TOUCHSCREEN","CONTROLLER_CONSOLE","CONTROLLER_MOBILE"]),K=Object.freeze({"pc-16-9":{id:"pc-16-9",device:"pc",platform:"KEYBOARD",width:1600,height:900,ratio:"16:9",luaDevice:"KeyboardAndMouse",label:"PC 1600\xD7900"},"pc-21-9":{id:"pc-21-9",device:"pc",platform:"KEYBOARD",width:2100,height:900,ratio:"21:9",luaDevice:"KeyboardAndMouse",label:"PC 2100\xD7900"},"mobile-16-9":{id:"mobile-16-9",device:"mobile",platform:"TOUCHSCREEN",width:1280,height:720,ratio:"16:9",luaDevice:"Mobile",label:"\u624B\u673A 1280\xD7720"},"mobile-19.5-9":{id:"mobile-19.5-9",device:"mobile",platform:"TOUCHSCREEN",width:1560,height:720,ratio:"19.5:9",luaDevice:"Mobile",label:"\u624B\u673A 1560\xD7720"},"mobile-4-3":{id:"mobile-4-3",device:"mobile",platform:"TOUCHSCREEN",width:1280,height:960,ratio:"4:3",luaDevice:"Mobile",label:"\u624B\u673A 1280\xD7960"}}),Qi="pc-16-9",ve=2,zt=Object.freeze({KEYBOARD:"pc-16-9",TOUCHSCREEN:"mobile-16-9",CONTROLLER_CONSOLE:"pc-16-9",CONTROLLER_MOBILE:"mobile-16-9"}),$t=Object.freeze({"server-container":"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668",container:"\u5BB9\u5668\u8282\u70B9",textbox:"\u6587\u672C\u6846",image:"\u56FE\u7247",button:"\u9884\u8BBE\u6309\u94AE",cursor:"\u5149\u6807\u68C0\u6D4B\u533A\u57DF",grid:"\u7F51\u683C\u89C6\u7A97",reference:"\u6A21\u677F\u5F15\u7528\u63A7\u4EF6",textwindow:"\u6587\u672C\u89C6\u7A97",keyhint:"\u6309\u952E\u63D0\u793A",animation:"\u754C\u9762\u52A8\u6548",fullscreen:"\u5168\u5C4F\u52A8\u6548"}),Zi=Object.freeze(["server-container","container","textbox","cursor","reference","grid","image","button","textwindow","keyhint","animation","fullscreen"]),Ko=Object.freeze({"server-container":null,container:[150,150],textbox:[100,40],image:[80,80],button:[150,50],cursor:[150,50],grid:[80,80],reference:[80,80],textwindow:[100,40],keyhint:[40,40],animation:[100,100],fullscreen:null}),Dc=Object.freeze({100001:"rect",100002:"circle",100003:"triangle",100004:"fourstar",100005:"fivestar",100006:"ring"});function Dt(e,t){return ke(t)==="StaticReference"&&Dc[e]||(rt(e,t)?"sprite":"missing")}var qo=50888,mi=Object.freeze({font:4294967295,bg:16777215,outline:858993459,image:4294967295});import{Worker as Ah}from"node:worker_threads";import{existsSync as _h,mkdirSync as Th,readFileSync as Vo,writeFileSync as Ph}from"node:fs";import{basename as Rh,dirname as Mh}from"node:path";import{existsSync as $i,readFileSync as od}from"node:fs";import{randomUUID as fl}from"node:crypto";import{isAbsolute as Jo,win32 as Qo}from"node:path";function er(e,t=!1){let i=String(e??"").trim().replaceAll("\\","/");if(t&&(!i||i==="."))return"";if(!i||Jo(i)||Qo.isAbsolute(i)||i.split("/").some(r=>!r||r==="."||r===".."||/[<>:"|?*\x00-\x1f]/.test(r)||/[. ]$/.test(r)||/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(r)))throw new Error("\u811A\u672C\u76EE\u5F55/\u8DEF\u5F84\u5FC5\u987B\u662F\u6709\u6548\u7684\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u80FD\u5305\u542B .. \u6216 Windows \u7279\u6B8A\u6587\u4EF6\u540D");return i}function gi(e){if(e==null)return null;if(e.version!==1)throw new Error("unsupported scriptSync version");let t=String(e.clientImportRoot||"").trim();if(!Jo(t)&&!Qo.isAbsolute(t))throw new Error("\u5B9E\u673A\u5BFC\u5165\u6839\u76EE\u5F55\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84");return{version:1,workspaceDir:er(e.workspaceDir,!0),clientImportRoot:t,clientSubdir:er(e.clientSubdir,!0)}}import{basename as ii,dirname as ad,isAbsolute as sd,join as dl,resolve as hl}from"node:path";function Gt(e,t="$",i=new Set){if(e===void 0)throw new Error(`undefined at ${t}`);if(typeof e=="number"&&!Number.isFinite(e))throw new Error(`non-finite number at ${t}`);if(typeof e=="bigint"||typeof e=="function"||typeof e=="symbol")throw new Error(`non-JSON value at ${t}`);if(!(e===null||typeof e!="object")){if(i.has(e))throw new Error(`circular value at ${t}`);if(i.add(e),Array.isArray(e))e.forEach((r,n)=>Gt(r,`${t}[${n}]`,i));else for(let[r,n]of Object.entries(e))Gt(n,`${t}.${r}`,i);i.delete(e)}}function H(e){return Gt(e),JSON.parse(JSON.stringify(e))}function Zo(e,t="$"){Gt(e,t)}function ea(e){return K[e]||K[Qi]}function yi(e,t=0,i=0){return!e||typeof e!="object"?{x:t,y:i}:{x:Number(e.x??t),y:Number(e.y??i)}}function Gc(e){return!e||typeof e!="object"?{x:1,y:1,z:1}:{x:Number(e.x??1),y:Number(e.y??1),z:Number(e.z??1)}}function Vc(e){return!e||typeof e!="object"?{x:0,y:0,z:0}:{x:Number(e.x??0),y:Number(e.y??0),z:Number(e.z??0)}}function tr({layout:e="center",size:t=[100,40],offset:i=[0,0]}={}){return e==="stretch"?{scale:{x:1,y:1,z:1},rotation:{x:0,y:0,z:0},anchorMin:{x:0,y:0},anchorMax:{x:1,y:1},offset:{x:0,y:0},size:{x:0,y:0},pivot:{x:.5,y:.5}}:{scale:{x:1,y:1,z:1},rotation:{x:0,y:0,z:0},anchorMin:{x:.5,y:.5},anchorMax:{x:.5,y:.5},offset:{x:Number(i[0]??0),y:Number(i[1]??0)},size:{x:Number(t[0]??0),y:Number(t[1]??0)},pivot:{x:.5,y:.5}}}function Le(e){let t=e||tr();return{scale:Gc(t.scale),rotation:Vc(t.rotation),anchorMin:yi(t.anchorMin??t.anchor_min,.5,.5),anchorMax:yi(t.anchorMax??t.anchor_max,.5,.5),offset:yi(t.offset,0,0),size:yi(t.size,0,0),pivot:yi(t.pivot,.5,.5)}}function de(e,t=0){let i=Number(e);return Number.isFinite(i)?i:t}function Ue(e,t){let i=e.width,r=e.height,n=e.left,o=e.bottom,a=t.anchorMin||{x:t.anchorMinX,y:t.anchorMinY},s=t.anchorMax||{x:t.anchorMaxX,y:t.anchorMaxY},c=t.offset||{x:t.anchoredPositionX,y:t.anchoredPositionY},l=t.size||{x:t.sizeDeltaX,y:t.sizeDeltaY},u=t.pivot||{x:t.pivotX,y:t.pivotY},f=de(a?.x,.5)*i,h=de(a?.y,.5)*r,p=de(s?.x,.5)*i,m=de(s?.y,.5)*r,b=de(l?.x),w=de(l?.y),y=de(u?.x,.5),v=de(u?.y,.5),_=p-f+b,P=m-h+w,M=n+f+de(c?.x)-b*y,O=o+h+de(c?.y)-w*v;return{left:M,bottom:O,width:_,height:P,right:M+_,top:O+P,centerX:M+_/2,centerY:O+P/2}}function Vt(){return{a:1,b:0,c:0,d:1,tx:0,ty:0}}function Lc(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,tx:e.a*t.tx+e.c*t.ty+e.tx,ty:e.b*t.tx+e.d*t.ty+e.ty}}function Ie(e,t,i){return{x:e.a*t+e.c*i+e.tx,y:e.b*t+e.d*i+e.ty}}function Xe(e){let t=e.a*e.d-e.b*e.c;return!Number.isFinite(t)||Math.abs(t)<1e-8?null:{a:e.d/t,b:-e.b/t,c:-e.c/t,d:e.a/t,tx:(e.c*e.ty-e.d*e.tx)/t,ty:(e.b*e.tx-e.a*e.ty)/t}}function nn(e,t){let i=t.rotation||{x:t.localRotationX,y:t.localRotationY,z:t.localRotationZ},r=t.scale||{x:t.localScaleX,y:t.localScaleY},n=t.pivot||{x:t.pivotX,y:t.pivotY},o=de(i?.z)*Math.PI/180,a=Math.cos(o),s=Math.sin(o),c=de(i?.x)*Math.PI/180,l=de(i?.y)*Math.PI/180,u=Math.cos(c),f=Math.sin(c),h=Math.cos(l),p=Math.sin(l),m=L=>Math.abs(L)<1e-12?0:L,b=de(r?.x,1),w=de(r?.y,1),y=e.left+e.width*de(n?.x,.5),v=e.bottom+e.height*de(n?.y,.5),_=m(h*a+p*f*s)*b,P=m(u*s)*b,M=m(-h*s+p*f*a)*w,O=m(u*a)*w;return{a:_,b:P,c:M,d:O,tx:y-_*y-M*v,ty:v-P*y-O*v}}function bi(e,t,i){return Lc(e||Vt(),nn(t,i))}function ta(e,t){let i=Ie(t,e.centerX,e.centerY),r=Math.abs(e.width*Math.hypot(t.a,t.b)),n=Math.abs(e.height*Math.hypot(t.c,t.d));return{left:i.x-r/2,bottom:i.y-n/2,width:r,height:n,centerX:i.x,centerY:i.y,rotationZ:Math.atan2(t.b,t.a)*180/Math.PI}}function we(e){let t=typeof e=="string"?ea(e):e;return{left:0,bottom:0,width:t.width,height:t.height,right:t.width,top:t.height,centerX:t.width/2,centerY:t.height/2}}function on(e){return{posX:e.centerX,posY:e.centerY,width:e.width,height:e.height}}function gt(e,t,i){let r=Le(t),n=e.width,o=e.height,a=r.anchorMin.x*n,s=r.anchorMin.y*o,c=r.anchorMax.x*n,l=r.anchorMax.y*o,u=Number(i.width),f=Number(i.height),h=Number(i.posX),p=Number(i.posY),m=h-u/2,b=p-f/2;return r.size={x:u-(c-a),y:f-(l-s)},r.offset={x:m-e.left-a+r.size.x*r.pivot.x,y:b-e.bottom-s+r.size.y*r.pivot.y},r}function ia(e,t){let i=Le(e),n={"bottom-left":[[0,0],[0,0],[0,0]],bottom:[[.5,0],[.5,0],[.5,0]],"bottom-right":[[1,0],[1,0],[1,0]],left:[[0,.5],[0,.5],[0,.5]],center:[[.5,.5],[.5,.5],[.5,.5]],right:[[1,.5],[1,.5],[1,.5]],"top-left":[[0,1],[0,1],[0,1]],top:[[.5,1],[.5,1],[.5,1]],"top-right":[[1,1],[1,1],[1,1]],stretch:[[0,0],[1,1],[.5,.5]],"stretch-horizontal":[[0,.5],[1,.5],[.5,.5]],"stretch-vertical":[[.5,0],[.5,1],[.5,.5]]}[t];return n&&(i.anchorMin={x:n[0][0],y:n[0][1]},i.anchorMax={x:n[1][0],y:n[1][1]},i.pivot={x:n[2][0],y:n[2][1]}),i}function ra(e){let t=Le(e),i=(r,n)=>Math.abs(r-n)<1e-4;if(i(t.anchorMin.x,0)&&i(t.anchorMin.y,0)&&i(t.anchorMax.x,1)&&i(t.anchorMax.y,1))return"stretch";if(i(t.anchorMin.x,t.anchorMax.x)&&i(t.anchorMin.y,t.anchorMax.y)){let r=t.anchorMin.x,n=t.anchorMin.y,o=[[0,0,"bottom-left"],[.5,0,"bottom"],[1,0,"bottom-right"],[0,.5,"left"],[.5,.5,"center"],[1,.5,"right"],[0,1,"top-left"],[.5,1,"top"],[1,1,"top-right"]];for(let a of o)if(i(r,a[0])&&i(n,a[1]))return a[2]}return"custom"}function yt(e){return ea(e).platform}function na(e){let t={};for(let i of ue)t[i]=e(i);return t}var Bc={scale:["x","y","z"],rotation:["x","y","z"],anchorMin:["x","y"],anchorMax:["x","y"],offset:["x","y"],size:["x","y"],pivot:["x","y"]};function oa(e,t){for(let[i,r]of Object.entries(Bc))for(let n of r)if(!Number.isFinite(e?.[i]?.[n]))throw new Error(`${t}.${i}.${n} must be a finite number`)}function nt(e,t="transformByPlatform"){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${t}: \u9700\u8981\u5B8C\u6574\u7684\u56DB\u5E73\u53F0\u5E03\u5C40`);for(let i of Object.keys(e))if(!ue.includes(i))throw new Error(`${t}: unknown platform ${i}`);for(let i of ue)oa(e[i],`${t}.${i}`)}function bt(e){if(Object.hasOwn(e,"transformByCanvas"))throw new Error(`${e.name||e.id||"\u63A7\u4EF6"}: \u4E0D\u518D\u652F\u6301 transformByCanvas\uFF1B\u8BF7\u4F7F\u7528\u56DB\u5E73\u53F0 transformByPlatform \u5E03\u5C40`);nt(e.transformByPlatform,`${e.name||e.id||"\u63A7\u4EF6"}.transformByPlatform`)}function vt(e,t){if(!ue.includes(t))throw new Error(`unknown platform ${t}`);return oa(e?.[t],`transformByPlatform.${t}`),Le(e[t])}var Hc=Object.freeze([{key:"genericField501",label:"\u901A\u7528\u69FD field501",type:"number",defaultValue:0,wire:"GenericSlot.field501"},{key:"footerField505",label:"\u5C3E\u90E8\u69FD field505",type:"number",defaultValue:0,wire:"FooterSlot.field505"}]),Yc=Object.freeze({container:[],textbox:[{key:"textField501",label:"\u6587\u672C\u914D\u7F6E field501",type:"number",defaultValue:20,wire:"TextConfig.field501"},{key:"textField503",label:"\u6587\u672C\u914D\u7F6E field503",type:"number",defaultValue:12,wire:"TextConfig.field503"},{key:"textAlign",label:"\u6C34\u5E73\u5BF9\u9F50\u679A\u4E3E\u539F\u59CB\u503C",type:"enum",defaultValue:0,wire:"TextConfig.align",options:[{value:0,label:"0 \xB7 \u5DE6\u5BF9\u9F50"},{value:1,label:"1 \xB7 \u5C45\u4E2D"},{value:2,label:"2 \xB7 \u53F3\u5BF9\u9F50"}]}],textwindow:[{key:"textField501",label:"\u6587\u672C\u914D\u7F6E field501",type:"number",defaultValue:20,wire:"TextConfig.field501"},{key:"textField503",label:"\u6587\u672C\u914D\u7F6E field503",type:"number",defaultValue:12,wire:"TextConfig.field503"},{key:"textAlign",label:"\u6C34\u5E73\u5BF9\u9F50\u679A\u4E3E\u539F\u59CB\u503C",type:"enum",defaultValue:0,wire:"TextConfig.align",options:[{value:0,label:"0 \xB7 \u5DE6\u5BF9\u9F50"},{value:1,label:"1 \xB7 \u5C45\u4E2D"},{value:2,label:"2 \xB7 \u53F3\u5BF9\u9F50"}]},{key:"textField511",label:"\u6587\u672C\u89C6\u7A97 field511",type:"number",defaultValue:1,wire:"TextConfig.field511"},{key:"textViewField502",label:"\u89C6\u7A97\u6807\u8BB0 field502",type:"number",defaultValue:1,wire:"TextConfig.viewFlags.field502"},{key:"textViewField503",label:"\u89C6\u7A97\u6807\u8BB0 field503",type:"number",defaultValue:1,wire:"TextConfig.viewFlags.field503"}],cursor:[{key:"cursorField501",label:"\u5149\u6807\u68C0\u6D4B field501",type:"number",defaultValue:1,wire:"CursorConfig.field501"}],reference:[{key:"templateRefSlot",label:"\u6A21\u677F\u5F15\u7528\u69FD\u539F\u59CB\u503C",type:"string",defaultValue:"",wire:"Details.templateRefSlot"}],grid:[{key:"gridField501",label:"\u7F51\u683C\u6807\u8BB0 field501",type:"number",defaultValue:1,wire:"GridViewConfig.field501"},{key:"gridField507",label:"\u7F51\u683C\u6807\u8BB0 field507",type:"number",defaultValue:1,wire:"GridViewConfig.field507"},{key:"gridField508",label:"\u7F51\u683C\u6807\u8BB0 field508",type:"number",defaultValue:1,wire:"GridViewConfig.field508"},{key:"gridField509",label:"\u7F51\u683C\u6807\u8BB0 field509",type:"number",defaultValue:1,wire:"GridViewConfig.field509"},{key:"gridField511",label:"\u7F51\u683C\u6807\u8BB0 field511",type:"number",defaultValue:5,wire:"GridViewConfig.field511"},{key:"gridField512",label:"\u7F51\u683C\u6807\u8BB0 field512",type:"number",defaultValue:1,wire:"GridViewConfig.field512"}],keyhint:[{key:"keyHintField501",label:"\u6309\u952E\u63D0\u793A field501",type:"number",defaultValue:1,wire:"KeyHintConfig.field501"},{key:"keyHintField502",label:"\u952E\u9F20\u952E\u4F4D\u539F\u59CB\u503C",type:"number",defaultValue:1,wire:"KeyHintConfig.field502"}],image:[{key:"imageSlotType",label:"\u56FE\u7247\u7C7B\u578B\u539F\u59CB\u503C",type:"number",defaultValue:0,wire:"ImageSlotConfig.imageType"},{key:"imageField502",label:"\u56FE\u7247\u6807\u8BB0 field502",type:"number",defaultValue:1,wire:"ImageConfig.field502"},{key:"imageField504",label:"\u56FE\u7247\u6807\u8BB0 field504",type:"number",defaultValue:1,wire:"ImageConfig.field504"},{key:"imageField505",label:"\u56FE\u7247\u6807\u8BB0 field505",type:"number",defaultValue:1,wire:"ImageConfig.field505"},{key:"imageField507",label:"\u56FE\u7247\u6807\u8BB0 field507",type:"number",defaultValue:2,wire:"ImageConfig.field507"},{key:"imageFillType",label:"\u586B\u5145\u5F62\u72B6\u679A\u4E3E\u539F\u59CB\u503C",type:"enum",defaultValue:1,wire:"ImageConfig.fillType",options:[{value:1,label:"1 \xB7 \u6A2A\u5411"},{value:2,label:"2 \xB7 \u7EB5\u5411"},{value:3,label:"3 \xB7 90\u5EA6\u73AF\u7ED5"},{value:4,label:"4 \xB7 180\u5EA6\u73AF\u7ED5"},{value:5,label:"5 \xB7 360\u5EA6\u73AF\u7ED5"}]}],animation:[{key:"effectSlot",label:"\u754C\u9762\u52A8\u6548\u69FD\u539F\u59CB\u503C",type:"string",defaultValue:"",wire:"Details.effectSlot"}],fullscreen:[{key:"fullscreenEffectSlot",label:"\u5168\u5C4F\u52A8\u6548\u69FD\u539F\u59CB\u503C",type:"string",defaultValue:"",wire:"Details.fullscreenEffectSlot"}]});function aa(e){return[...Hc,...Yc[e]||[]]}function sa(e,t){return aa(e).find(i=>i.key===t)||null}function an(e,t){if(!e)throw new Error("unknown raw GIA field");if(e.type==="string")return String(t??"");let i=Number(t);if(!Number.isFinite(i))throw new Error(`${e.wire} must be a finite number`);return Math.trunc(i)}function la(e,t={}){let i={};for(let r of aa(e)){let n=Object.hasOwn(t||{},r.key)?t[r.key]:r.defaultValue;i[r.key]=an(r,n)}if(e==="reference")for(let r of["templateRefSlotBase64","templateRefOuterBase64"]){if(!Object.hasOwn(t||{},r))continue;let n=t[r];if(typeof n!="string"||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(n))throw new Error(`${r} must be base64`);n&&(i[r]=n)}return i}function _e(e){let t=Number(e);return Number.isSafeInteger(t)&&t>=1073741824&&t<=1077936127}function We(e){let t=Number(e);return Number.isSafeInteger(t)&&t>0&&t<=2147483647}function sn(e,t){if(We(e)&&!_e(e))throw new Error(`${t||"\u8D44\u4EA7"}: \u7D22\u5F15 ${e} \u8D85\u51FA 1073741824\u20131077936127\uFF1B\u8BF7\u5148\u6821\u51C6\u7D22\u5F15\u5E76\u6838\u5BF9 Lua \u5F15\u7528\uFF0C\u5BFC\u51FA\u4E0D\u4F1A\u81EA\u52A8\u91CD\u7F16\u53F7\u3002`)}function ln(e,t){if(e){t(e);for(let i of e.children||[])ln(i,t)}}function Lt(e,t=new Set,{skipServerContainer:i=!1}={}){return ln(e,r=>{i&&r.kind==="server-container"||_e(r.guid)&&t.add(Number(r.guid))}),t}function ot(e,t=1073741850){let i=Number.isSafeInteger(t)&&t>0?t:1073741850;i<1073741850&&(i=1073741850);for(let r of e)_e(r)&&r>=i&&(i=Number(r)+1);for(;e.has(i);)i+=1;if(i>1077936127)throw new Error("GUID space exhausted");return i}function ca(e,t=new Set,{skipServerContainer:i=!1}={}){let r=[];ln(e,n=>{if(i&&n.kind==="server-container")return;let o=Number(n.guid);if(_e(o)&&!t.has(o)){t.add(o),n.guid=o;return}r.push(n)});for(let n of r){let o=ot(t);n.guid=o,t.add(o)}return t}function Te(e){return Number.isSafeInteger(e)&&e>0&&e<=2147483647}function Ke(e,{warnings:t=[]}={}){if(e.meta?.assetType!=="client-control-template")return;if(e.meta.giaAssetIndexSchemaVersion>1)throw new Error(`\u4E0D\u652F\u6301\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7\u7248\u672C ${e.meta.giaAssetIndexSchemaVersion}`);let i=[],r=m=>{m.kind!=="server-container"&&i.push(m);for(let b of m.children||[])r(b)};r(e.root);let n=new Map,o=new Map;for(let m of i){if(!Te(m.giaInfoIndex))continue;let b=n.get(m.giaInfoIndex)||[];b.push(m),n.set(m.giaInfoIndex,b);let w=o.get(m.kind)||new Set;w.add(m.giaInfoIndex),o.set(m.kind,w)}let a=(e.root.children||[]).filter(m=>m.kind!=="server-container"),s=new Set(a),c=a.some((m,b)=>Te(m.giaInfoIndex)&&a.slice(0,b).some(w=>w.giaInfoIndex===m.giaInfoIndex)),l=!e.meta.giaAssetIndexSchemaVersion&&c&&i.every(m=>m.giaInfoIndexSource!=="authoring")&&[...o.values()].every(m=>m.size===1)&&[...n.values()].every(m=>m.every(b=>b.kind===m[0].kind)),u=new Set;if(l)for(let m of n.values()){let b=m.find(w=>s.has(w))||m[0];for(let w of m)w!==b&&u.add(w)}let f=new Map,h=Number.isSafeInteger(e.meta.giaNextAssetIndex)&&e.meta.giaNextAssetIndex>=2?e.meta.giaNextAssetIndex:2;for(let m of i){if(!Te(m.giaInfoIndex)||(h=Math.max(h,m.giaInfoIndex+1),u.has(m)))continue;let b=f.get(m.giaInfoIndex);if(b&&(b.giaInfoIndexSource==="authoring"||m.giaInfoIndexSource==="authoring"))throw new Error(`\u65B0\u5EFA\u8D44\u4EA7\u7F16\u53F7 ${m.giaInfoIndex} \u91CD\u590D\uFF1A${b.name} / ${m.name}`);f.set(m.giaInfoIndex,m)}l&&(h=Math.max(h,13));let p=l?[...a,...i.filter(m=>!s.has(m))].filter(m=>u.has(m)||!Te(m.giaInfoIndex)):i.filter(m=>!Te(m.giaInfoIndex));if(p.length&&h+p.length-1>2147483647)throw new Error("\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7\u7A7A\u95F4\u5DF2\u8017\u5C3D");for(let m of p)m.giaInfoIndex=h++,m.giaInfoIndexSource="authoring";e.meta.giaNextAssetIndex=h,e.meta.giaAssetIndexSchemaVersion=1,u.size&&t.push(`\u65E7\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7\u81EA\u52A8\u8FC1\u79FB\uFF1A\u4FEE\u590D ${u.size} \u6761\u6309\u63A7\u4EF6\u7C7B\u578B\u590D\u7528\u7684\u7F16\u53F7\uFF1BGUID\u3001Lua \u5F15\u7528\u548C\u63A7\u4EF6\u5C5E\u6027\u4FDD\u6301\u4E0D\u53D8\u3002`)}var cn=1;function un(e="n"){let t=`${e}${cn}`;return cn+=1,t}function ir(e=1){cn=e}function fn(e,{isRootContainer:t=!1}={}){if(e==="server-container"||e==="fullscreen"||e==="container"&&t)return tr({layout:"stretch"});let i=Ko[e]||[80,80];return tr({layout:"center",size:i})}function jc(e,t){return na(()=>fn(e,t))}function Uc(e){nt(e);let t={};for(let i of ue)t[i]=vt(e,i);return t}function q(e,t={}){if(!$t[e])throw new Error(`unknown kind: ${e}`);Object.hasOwn(t,"transformByCanvas")&&bt(t);let i=t.isRootContainer===!0,r=t.id||un(e==="server-container"?"sc":"n"),n=Object.hasOwn(t,"transformByPlatform")?Uc(t.transformByPlatform):jc(e,{isRootContainer:i}),o={id:r,kind:e,name:t.name||$t[e],guid:t.guid??0,giaRelatedGuids:Array.isArray(t.giaRelatedGuids)?t.giaRelatedGuids.filter(a=>Number.isSafeInteger(Number(a))&&Number(a)>0).map(Number):[],...Te(Number(t.giaInfoIndex))?{giaInfoIndex:Number(t.giaInfoIndex),giaInfoIndexSource:t.giaInfoIndexSource==="authoring"?"authoring":"imported"}:{},active:t.active!==!1,visible:t.visible!==!1,canControllerFocus:t.canControllerFocus??t.giaRaw?.footerField505===1,syncAllDevices:t.syncAllDevices!==!1,giaRaw:la(e,t.giaRaw),transformByPlatform:n,children:[],scriptMappingIds:Array.isArray(t.scriptMappingIds)?t.scriptMappingIds.filter(a=>Number.isSafeInteger(Number(a))&&Number(a)>0).map(Number):[]};if(e==="container"&&(o.isolateNavigation=t.isolateNavigation===!0,o.disableKeyEventPassthrough=t.disableKeyEventPassthrough===!0,o.disableCursorEventPassthrough=t.disableCursorEventPassthrough===!0,o.showCursor=t.showCursor===!0),(e==="textbox"||e==="textwindow")&&(o.fontSize=t.fontSize??20,o.adaptiveFontSize=t.adaptiveFontSize===!0,o.minimumFontSize=t.minimumFontSize??20,o.fontColor=t.fontColor??mi.font,o.bgColor=t.bgColor??mi.bg,o.enableOutline=t.enableOutline!==!1,o.outlineColor=t.outlineColor??mi.outline,o.horizontalAlignment=t.horizontalAlignment||"Left",o.verticalAlignment=t.verticalAlignment||"Top",Number.isInteger(t.giaRaw?.textVerticalAlign)&&![0,1,2].includes(t.giaRaw.textVerticalAlign)&&(o.giaRaw.textVerticalAlign=t.giaRaw.textVerticalAlign),o.text=t.text??"",Object.hasOwn(t.giaRaw||{},"textAlign")||(o.giaRaw.textAlign={Left:0,Middle:1,Right:2}[o.horizontalAlignment]??o.giaRaw.textAlign),e==="textwindow"&&(o.interactable=t.interactable!==!1,o.showScrollBar=t.showScrollBar!==!1)),e==="image"&&(o.imageSource=t.imageSource||"StaticReference",o.imageType=["Basic","Stretch"].includes(t.imageType)?t.imageType:null,o.imageId=t.imageId??100001,o.imageColor=t.imageColor??mi.image,o.enableMask=t.enableMask===!0,o.enableSoftEdge=t.enableSoftEdge===!0,o.softEdgeMode=t.softEdgeMode||"Percentage",o.softEdgeWidthX=t.softEdgeWidthX??8,o.softEdgeWidthY=t.softEdgeWidthY??8,o.horizontalSoftRange=t.horizontalSoftRange??85,o.verticalSoftRange=t.verticalSoftRange??85,o.enableFill=t.enableFill===!0,o.fillType=t.fillType||"Horizontal",o.fillHorizontalType=t.fillHorizontalType||"Left",o.fillVerticalType=t.fillVerticalType||"Bottom",o.fillRadial90Type=t.fillRadial90Type||"BottomLeft",o.fillRadialType=t.fillRadialType||"Bottom",o.fillAmount=t.fillAmount??1,o.reverseMaskArea=t.reverseMaskArea===!0||t.reverseMask===!0,Object.hasOwn(t.giaRaw||{},"imageFillType")||(o.giaRaw.imageFillType={Horizontal:1,Vertical:2,Radial90:3,Radial180:4,Radial360:5}[o.fillType]??o.giaRaw.imageFillType)),e==="button"&&(o.raycastTarget=t.raycastTarget!==!1,o.interactable=t.interactable!==!1,o.clickAudioId=t.clickAudioId??qo,o.unavailableChildId=t.unavailableChildId??null,o.hoverChildId=t.hoverChildId??null,o.pressedChildId=t.pressedChildId??null,o.selectedChildId=t.selectedChildId??null),e==="cursor"&&(o.raycastTarget=t.raycastTarget??t.giaRaw?.cursorField501!==0),e==="reference"&&(o.referencedPrefabId=t.referencedPrefabId??t.giaRaw?.templateRefSlot??null,Object.hasOwn(t.giaRaw||{},"templateRefSlot")||(o.giaRaw.templateRefSlot=String(o.referencedPrefabId??""))),e==="grid"&&(o.itemPrefabId=t.itemPrefabId??null,o.raycastTarget=t.raycastTarget!==!1,o.interactable=t.interactable!==!1,o.showScrollBar=t.showScrollBar!==!1,o.scrollDirection=t.scrollDirection||"Vertical",o.layoutConstraint=t.layoutConstraint||"AutoWrap",o.layoutConstraintFixedCount=t.layoutConstraintFixedCount??null,o.cellSizeX=t.cellSizeX??50,o.cellSizeY=t.cellSizeY??50,o.spacingX=t.spacingX??8,o.spacingY=t.spacingY??8,o.padding1X=t.padding1X??20,o.padding1Y=t.padding1Y??20,o.padding2X=t.padding2X??20,o.padding2Y=t.padding2Y??20,o.previewCount=t.previewCount??t.giaRaw?.gridField511??5,Object.hasOwn(t.giaRaw||{},"gridField511")||(o.giaRaw.gridField511=Math.trunc(o.previewCount))),e==="keyhint"&&(o.keyboardKeyCode=t.keyboardKeyCode??t.giaRaw?.keyHintField502??null,o.controllerKeyCode=t.controllerKeyCode??t.giaRaw?.keyHintField501??null,Object.hasOwn(t.giaRaw||{},"keyHintField502")||(o.giaRaw.keyHintField502=Math.trunc(o.keyboardKeyCode??1)),Object.hasOwn(t.giaRaw||{},"keyHintField501")||(o.giaRaw.keyHintField501=Math.trunc(o.controllerKeyCode??1))),e==="animation"||e==="fullscreen"){let a=e==="animation"?t.giaRaw?.effectSlot:t.giaRaw?.fullscreenEffectSlot;o.animationId=t.animationId??a??null,o.playSoundEffect=t.playSoundEffect??null,e==="animation"&&(o.layer=t.layer??null);let s=e==="animation"?"effectSlot":"fullscreenEffectSlot";Object.hasOwn(t.giaRaw||{},s)||(o.giaRaw[s]=String(o.animationId??""))}if(t.children)for(let a of t.children)o.children.push(a);return o}function wt(){ir(1);let e=q("server-container",{id:"sc1",name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668"}),t=q("container",{id:"n1",name:"\u5BB9\u5668\u8282\u70B9",isRootContainer:!0}),i=q("textbox",{id:"n2",name:"\u6587\u672C\u6846",text:"\u6587\u672C"}),r=q("cursor",{id:"n3",name:"\u5149\u6807\u68C0\u6D4B\u533A\u57DF"}),n=q("reference",{id:"n4",name:"\u6A21\u677F\u5F15\u7528\u63A7\u4EF6"}),o=q("grid",{id:"n5",name:"\u7F51\u683C\u89C6\u7A97"}),a=q("button",{id:"n6",name:"\u9884\u8BBE\u6309\u94AE"}),s=q("textwindow",{id:"n7",name:"\u6587\u672C\u89C6\u7A97"}),c=q("keyhint",{id:"n8",name:"\u6309\u952E\u63D0\u793A"}),l=q("image",{id:"n9",name:"\u56FE\u7247",imageId:100005}),u=q("animation",{id:"n10",name:"\u754C\u9762\u52A8\u6548"}),f=q("fullscreen",{id:"n11",name:"\u5168\u5C4F\u52A8\u6548"}),h=(p,m,b)=>{for(let w of Object.values(p.transformByPlatform))w.offset={x:m,y:b}};return h(i,-300,250),h(r,-300,140),h(n,-300,30),h(o,-300,-100),h(a,0,0),h(s,300,250),h(c,300,140),h(l,300,30),h(u,300,-100),t.children.push(i,r,n,o,a,s,c,l,u,f),e.children.push(t),ir(12),ca(e),{version:1,layoutSchemaVersion:ve,meta:{name:"\u672A\u547D\u540D\u754C\u9762\u63A7\u4EF6\u7EC4",assetType:"server-control-template",sourceFormat:"authoring",sourceFile:""},canvasId:"pc-16-9",selectedId:"n2",root:e}}function Bt(){ir(1);let e=q("server-container",{id:"sc1",name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"}),t=q("container",{id:"n1",guid:1073742100,name:"Lua\u5B9E\u4F8B\u5316\u9762\u677F"}),i=q("textbox",{id:"n2",guid:1073742101,name:"\u6A21\u677F\u6807\u9898",text:"\u5BA2\u6237\u7AEF\u6A21\u677F\u5DF2\u5B9E\u4F8B\u5316",fontSize:28,horizontalAlignment:"Middle"}),r=q("image",{id:"n3",guid:1073742102,name:"\u6A21\u677F\u56FE\u6807",imageId:100005}),n=q("button",{id:"n4",guid:1073742103,name:"\u786E\u8BA4\u6309\u94AE"}),o=q("textbox",{id:"n5",guid:1073742104,name:"\u6309\u94AE\u6587\u5B57",text:"\u786E\u8BA4",horizontalAlignment:"Middle",verticalAlignment:"Top"}),a=(l,u,f)=>{for(let h of Object.values(l.transformByPlatform))h.offset={x:u,y:f}};((l,u,f)=>{for(let h of Object.values(l.transformByPlatform))h.size={x:u,y:f}})(t,520,320),a(i,0,110),a(r,0,0),a(n,0,-110),n.children.push(o),t.children.push(i,r,n),e.children.push(t),ir(6);let c={version:1,layoutSchemaVersion:ve,meta:{name:"Lua\u5B9E\u4F8B\u5316\u9762\u677F",assetType:"client-control-template",sourceFormat:"authoring",sourceFile:"",gameVersion:Ji,giaOwnerUid:114514,giaFileId:1073741829,giaFileName:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868.gia"},canvasId:"pc-16-9",selectedId:"n1",root:e};return Ke(c),c}function te(e,t,i=null){t(e,i);for(let r of e.children||[])te(r,t,e)}function he(e,t){let i=null;return te(e,r=>{r.id===t&&(i=r)}),i}function dn(e,t="n"){let i=un(t);for(;he(e,i);)i=un(t);return i}function at(e,t){let i=null;return te(e,(r,n)=>{r.id===t&&(i=n)}),i}function hn(e){let t=e.root||e;return t.kind==="container"?t:(t.children||[]).find(i=>i.kind==="container")||(t.children||[])[0]||t}function vi(e){if(e.meta?.assetType!=="client-control-template")return hn(e);let t=he(e.root,e.selectedId);if(!t||t.kind==="server-container")return e.root.children?.[0]||e.root;let i=at(e.root,t.id);for(;i&&i.kind!=="server-container";)t=i,i=at(e.root,t.id);return t}function pn(e){bt(e);let t={id:e.id,name:e.name,guid:e.guid,giaRelatedGuids:e.giaRelatedGuids,giaInfoIndex:e.giaInfoIndex,giaInfoIndexSource:e.giaInfoIndexSource,scriptMappingIds:e.scriptMappingIds,giaRaw:e.giaRaw,active:e.active,visible:e.visible,canControllerFocus:e.canControllerFocus,syncAllDevices:e.syncAllDevices,transformByPlatform:e.transformByPlatform};e.kind==="container"&&(t.isolateNavigation=e.isolateNavigation,t.disableKeyEventPassthrough=e.disableKeyEventPassthrough,t.disableCursorEventPassthrough=e.disableCursorEventPassthrough,t.showCursor=e.showCursor),(e.kind==="textbox"||e.kind==="textwindow")&&(t.fontSize=e.fontSize,t.adaptiveFontSize=e.adaptiveFontSize,t.minimumFontSize=e.minimumFontSize,t.fontColor=e.fontColor,t.bgColor=e.bgColor,t.enableOutline=e.enableOutline,t.outlineColor=e.outlineColor,t.horizontalAlignment=e.horizontalAlignment,t.verticalAlignment=e.verticalAlignment,t.text=e.text??"",e.kind==="textwindow"&&(t.interactable=e.interactable,t.showScrollBar=e.showScrollBar)),e.kind==="image"&&(t.imageSource=e.imageSource,t.imageType=e.imageType,t.imageId=e.imageId,t.imageColor=e.imageColor,t.enableMask=e.enableMask,t.enableSoftEdge=e.enableSoftEdge,t.softEdgeMode=e.softEdgeMode,t.softEdgeWidthX=e.softEdgeWidthX,t.softEdgeWidthY=e.softEdgeWidthY,t.horizontalSoftRange=e.horizontalSoftRange,t.verticalSoftRange=e.verticalSoftRange,t.enableFill=e.enableFill,t.fillType=e.fillType,t.fillHorizontalType=e.fillHorizontalType,t.fillVerticalType=e.fillVerticalType,t.fillRadial90Type=e.fillRadial90Type,t.fillRadialType=e.fillRadialType,t.fillAmount=e.fillAmount,t.reverseMaskArea=e.reverseMaskArea??e.reverseMask),e.kind==="button"&&(t.raycastTarget=e.raycastTarget,t.interactable=e.interactable,t.clickAudioId=e.clickAudioId,t.unavailableChildId=e.unavailableChildId??null,t.hoverChildId=e.hoverChildId??null,t.pressedChildId=e.pressedChildId??null,t.selectedChildId=e.selectedChildId??null),e.kind==="cursor"&&(t.raycastTarget=e.raycastTarget),e.kind==="reference"&&(t.referencedPrefabId=e.referencedPrefabId??null),e.kind==="grid"&&(t.itemPrefabId=e.itemPrefabId??null,t.raycastTarget=e.raycastTarget,t.interactable=e.interactable,t.showScrollBar=e.showScrollBar,t.scrollDirection=e.scrollDirection,t.layoutConstraint=e.layoutConstraint,t.layoutConstraintFixedCount=e.layoutConstraintFixedCount??null,t.cellSizeX=e.cellSizeX,t.cellSizeY=e.cellSizeY,t.spacingX=e.spacingX,t.spacingY=e.spacingY,t.padding1X=e.padding1X,t.padding1Y=e.padding1Y,t.padding2X=e.padding2X,t.padding2Y=e.padding2Y,t.previewCount=e.previewCount),e.kind==="keyhint"&&(t.keyboardKeyCode=e.keyboardKeyCode??null,t.controllerKeyCode=e.controllerKeyCode??null),(e.kind==="animation"||e.kind==="fullscreen")&&(t.animationId=e.animationId??null,t.playSoundEffect=e.playSoundEffect??null,e.kind==="animation"&&(t.layer=e.layer??null)),t.isRootContainer=e.kind==="container"&&Xc(e.transformByPlatform);let i=q(e.kind,t);return i.children=(e.children||[]).map(r=>pn(r)),i}function Xc(e){let t=e&&(e.KEYBOARD||Object.values(e)[0]);return t?Math.abs(t.anchorMin?.x??.5)<1e-4&&Math.abs(t.anchorMin?.y??.5)<1e-4&&Math.abs((t.anchorMax?.x??.5)-1)<1e-4&&Math.abs((t.anchorMax?.y??.5)-1)<1e-4:!1}function ua(e,t,i={}){if(e.kind==="server-container"&&t!=="container")throw new Error("server container only accepts container nodes");let r=q(t,i);return e.children.push(r),r}function fa(e,t){if(e.id===t)throw new Error("cannot remove root");let i=at(e,t);if(!i)return!1;let r=i.children.findIndex(n=>n.id===t);return r<0?!1:(i.children.splice(r,1),!0)}var da=1e-4;function Wc(e,t){return Math.abs(e.anchorMax[t]-e.anchorMin[t])>da&&Math.abs(e.size[t])<=da}function Kc(e,t,i){if(!(t.width>0)||!(t.height>0))throw new Error("source parent must have positive size");if(!(i.width>0)||!(i.height>0))throw new Error("target parent must have positive size");let r=Ue(t,e),n=(r.centerX-t.left)/t.width,o=(r.centerY-t.bottom)/t.height,a=gt(i,e,{posX:i.left+n*i.width,posY:i.bottom+o*i.height,width:r.width,height:r.height});for(let s of["x","y"])Wc(e,s)&&(a.offset[s]=e.offset[s],a.size[s]=e.size[s]);return a}function ha({transformByPlatform:e,source:t,canvasId:i,syncAllDevices:r,sourceParentBox:n=we(i),targetParentBoxByPlatform:o={}}){nt(e);let a=yt(i),s={};for(let c of ue)c===a?s[c]=Le(t):r!==!1?s[c]=Kc(t,n,o[c]||we(zt[c])):s[c]=vt(e,c);return nt(s),s}function st(e,t){return vt(e,yt(t))}import{createCanvas as mu}from"@napi-rs/canvas";import{existsSync as nu,openSync as ou,closeSync as au,fstatSync as su,readFileSync as lu}from"node:fs";import{extname as cu,isAbsolute as uu}from"node:path";import{createHash as fu}from"node:crypto";import{workerData as or}from"node:worker_threads";import{GlobalFonts as ya}from"@napi-rs/canvas";var wi='"Microsoft YaHei UI","Microsoft YaHei","HarmonyOS Sans SC","Noto Sans CJK SC",sans-serif',Ht="/qxqy-font";var mn=e=>`QxqyLocal_${e}`,pa=e=>e?`"${mn(e)}",${wi}`:wi;import{existsSync as qc,mkdirSync as Jc,readFileSync as Qc,renameSync as Zc,rmSync as eu,writeFileSync as tu}from"node:fs";import{randomUUID as iu}from"node:crypto";import{homedir as gn}from"node:os";import{dirname as ru,join as rr,win32 as nr}from"node:path";function yn(e=process.platform,t=process.env){if(e!=="win32")return[];let i=t.SystemDrive||"C:",r=t.ProgramFiles||`${i}\\Program Files`,n="YuanShen_Data\\StreamingAssets\\MiHoYoSDKRes\\HttpServerResources\\font\\zh-cn.ttf";return[...new Set([nr.join(r,"Genshin Impact","Genshin Impact Game",n),nr.join(i+"\\","Mihoyo","Genshin Impact","Genshin Impact Game",n),nr.join(r,"HoYoPlay","games","Genshin Impact game",n),nr.join(r,"miHoYo Launcher","games","Genshin Impact Game",n)])]}function ma(){if(process.env.QXQY_FONT_CONFIG_PATH)return process.env.QXQY_FONT_CONFIG_PATH;let e=process.platform==="win32"?process.env.APPDATA||rr(gn(),"AppData","Roaming"):process.platform==="darwin"?rr(gn(),"Library","Application Support"):process.env.XDG_CONFIG_HOME||rr(gn(),".config");return rr(e,"beyond-simulator","font.json")}function bn(e){if(!e||!["auto","custom","system"].includes(e.mode))throw new Error("\u8BF7\u9009\u62E9\u81EA\u52A8\u67E5\u627E\u3001\u6307\u5B9A\u6587\u4EF6\u6216\u7CFB\u7EDF\u5B57\u4F53");let t=e.scope===void 0?"all":e.scope;if(!["game","all"].includes(t))throw new Error("\u8BF7\u9009\u62E9\u5B57\u4F53\u5E94\u7528\u8303\u56F4");let i=typeof e.path=="string"?e.path.trim():"";if(i.length>4096)throw new Error("\u5B57\u4F53\u8DEF\u5F84\u8FC7\u957F");if((i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),e.mode==="custom"&&!i)throw new Error("\u8BF7\u586B\u5199\u5B57\u4F53\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84");return{mode:e.mode,path:e.mode==="custom"?i:"",scope:t}}function vn(e=ma()){if(!qc(e))return{mode:"auto",path:"",scope:"all"};try{return bn(JSON.parse(Qc(e,"utf8")))}catch{throw new Error("\u672C\u673A\u5B57\u4F53\u8BBE\u7F6E\u65E0\u6CD5\u8BFB\u53D6\uFF0C\u8BF7\u5728\u300C\u5B57\u4F53\u8BBE\u7F6E\u300D\u4E2D\u91CD\u65B0\u4FDD\u5B58")}}function ga(e,t=ma()){let i=`${t}.${iu()}.tmp`;try{Jc(ru(t),{recursive:!0}),tu(i,JSON.stringify(e,null,2)+`
|
|
3
|
+
`,{flag:"wx",mode:384}),Zc(i,t)}catch(r){throw new Error("\u65E0\u6CD5\u4FDD\u5B58\u672C\u673A\u5B57\u4F53\u8BBE\u7F6E\uFF0C\u8BF7\u68C0\u67E5\u914D\u7F6E\u76EE\u5F55\u7684\u5199\u5165\u6743\u9650",{cause:r})}finally{eu(i,{force:!0})}}function xa(e){let t=Buffer.from(e),i=t.subarray(0,4).toString("hex");if(t.length<12||t.length>33554432||!["00010000","4f54544f"].includes(i))throw new Error("QXQY_FONT_PATH must contain a valid TTF or OTF font (at most 32 MiB)");let r=fu("sha256").update(t).digest("hex"),n=mn(r);try{if(!ya.has(n)&&!ya.register(t,n))throw new Error("invalid font")}catch{throw new Error("QXQY_FONT_PATH font could not be registered")}return{id:r,data:t,type:i==="4f54544f"?"font/otf":"font/ttf"}}function wn(e){if(!e)return null;if(!uu(e)||![".ttf",".otf"].includes(cu(e).toLowerCase()))throw new Error("QXQY_FONT_PATH must be an absolute path to a TTF or OTF font");let t,i;try{t=ou(e,"r");let r=su(t);if(!r.isFile()||r.size<12||r.size>33554432)throw new Error("invalid size");i=lu(t)}catch{throw new Error("QXQY_FONT_PATH must point to a readable font file of at most 32 MiB")}finally{t!==void 0&&au(t)}return xa(i)}var ba=!1,ar=null,St={path:"",source:"system",scope:"all"},Yt=null,Sn="",Ia=!1;function Ca(e){if(e.mode==="custom")return{font:wn(e.path),path:e.path,source:"custom"};if(e.mode==="auto"){let t;for(let i of yn())if(nu(i))try{return{font:wn(i),path:i,source:"auto"}}catch(r){t=r}if(t)throw t}return{font:null,path:"",source:"system"}}function qe(){if(!ba){if(or&&Object.hasOwn(or,"localFont"))ar=or.localFont?xa(or.localFont):null;else{try{Yt=vn()}catch(e){Sn=e.message}if(St.scope=Yt?.scope||"all",process.env.QXQY_FONT_PATH)ar=wn(process.env.QXQY_FONT_PATH),St={...St,path:process.env.QXQY_FONT_PATH,source:"environment"};else if(Yt)try{let e=Ca(Yt);ar=e.font,St={...St,path:e.path,source:e.source}}catch(e){Sn=e.message}}ba=!0}return ar}function xn(){qe();let e={mode:"auto",path:"",scope:"all"},t=Sn;try{e=vn()}catch(i){t=i.message}return{...e,active:{...St},error:t,environmentPath:process.env.QXQY_FONT_PATH||"",defaultPaths:yn(),restartRequired:Ia||Yt!==null&&JSON.stringify(Yt)!==JSON.stringify(e)}}function du(e){qe();let t=process.env.QXQY_FONT_PATH;if(t&&(!e||!Object.hasOwn(e,"scope")||Object.hasOwn(e,"mode")||Object.hasOwn(e,"path")))throw new Error("\u5F53\u524D\u5B57\u4F53\u7531 QXQY_FONT_PATH \u56FA\u5B9A\uFF0C\u8BF7\u79FB\u9664\u8BE5\u73AF\u5883\u53D8\u91CF\u5E76\u91CD\u542F\u540E\u518D\u4F7F\u7528\u524D\u7AEF\u8BBE\u7F6E");let i=bn(t?{...xn(),scope:e.scope}:e),r=t?{path:t,source:"environment"}:Ca(i);return ga(i),Ia=!0,{...xn(),nextFont:{path:r.path,source:r.source}}}var jt=()=>pa(qe()?.id),va=e=>["127.0.0.1","localhost","::1","[::1]","::ffff:127.0.0.1"].includes(e);function wa(e){try{let t=e.headers.host;return va(e.socket.remoteAddress)&&va(new URL(`http://${t}`).hostname)&&!e.headers.forwarded&&!e.headers["x-forwarded-for"]&&!e.headers["x-forwarded-host"]&&!e.headers.via&&e.headers["sec-fetch-site"]!=="cross-site"&&(!e.headers.origin||new URL(e.headers.origin).host===t)}catch{return!1}}function ka(e,t,{settingsEnabled:i=!0}={}){let r=new URL(e.url||"/","http://localhost");if(r.pathname!==Ht&&!r.pathname.startsWith(`${Ht}/`))return!1;let n=(o,a,s)=>(t.writeHead(o,{"content-type":a,"cache-control":"no-store","x-content-type-options":"nosniff","cross-origin-resource-policy":"same-origin"}),t.end(e.method==="HEAD"?void 0:s),!0);if(r.pathname===`${Ht}/settings`)return!i||!wa(e)?n(403,"text/plain","\u5B57\u4F53\u8BBE\u7F6E\u4EC5\u9650\u672C\u673A\u76F4\u63A5\u8BBF\u95EE"):(async()=>{try{let o;if(e.method==="GET")o=xn();else if(e.method==="POST"){if(!/^application\/json(?:;|$)/i.test(e.headers["content-type"]||""))return n(415,"text/plain","application/json required");let a=[],s=0;for await(let c of e){if(s+=c.length,s>8192)return n(413,"text/plain","\u5B57\u4F53\u8BBE\u7F6E\u8FC7\u5927");a.push(c)}o=du(JSON.parse(Buffer.concat(a).toString("utf8")))}else return n(405,"text/plain","GET or POST required");return n(200,"application/json",JSON.stringify(o))}catch(o){return n(400,"text/plain",o.message)}})();if(!["GET","HEAD"].includes(e.method))return n(405,"text/plain","Method not allowed");try{let o=qe();return o&&!wa(e)?n(403,"text/plain","Local font access requires a direct loopback connection"):r.pathname===`${Ht}/manifest`?n(200,"application/json",JSON.stringify({id:o?.id??null,scope:St.scope})):o&&r.pathname===`${Ht}/file/${o.id}`?n(200,o.type,o.data):n(404,"text/plain","Font not found")}catch{return n(500,"text/plain","Local font configuration failed; check QXQY_FONT_PATH and restart the host")}}var In=Object.freeze({aqua:"00ffff",black:"000000",blue:"0000ff",brown:"a52a2a",cyan:"00ffff",darkblue:"0000a0",fuchsia:"ff00ff",green:"008000",grey:"808080",lightblue:"add8e6",lime:"00ff00",magenta:"ff00ff",maroon:"800000",navy:"000080",olive:"808000",orange:"ffa500",purple:"800080",red:"ff0000",silver:"c0c0c0",teal:"008080",white:"ffffff",yellow:"ffff00"});function hu(e){let t=Object.hasOwn(In,e.toLowerCase())?In[e.toLowerCase()]:e.slice(1);return!Object.hasOwn(In,e.toLowerCase())&&!/^#[\da-f]{6}([\da-f]{2})?$/i.test(e)?null:(parseInt(t.slice(6)||"ff",16)<<24|parseInt(t.slice(0,6),16))>>>0}function pu(e){let t=/^<\/(b|i|color|size)>$/i.exec(e);if(t)return{name:t[1].toLowerCase(),close:!0};let i=/^<(b|i)>$/i.exec(e);if(i)return{name:i[1].toLowerCase(),value:!0};let r=/^<(color|size)=(?:"([^"\s<>]+)"|'([^'\s<>]+)'|([^\s'"<>]+))>$/i.exec(e);if(!r)return null;let n=r[1].toLowerCase(),o=r[2]??r[3]??r[4];if(n==="color"){let s=hu(o);return s===null?null:{name:n,value:s}}let a=Number(o);return/^\d+$/.test(o)&&Number.isSafeInteger(a)&&a>0?{name:n,value:a}:null}function Ea(e){let t=String(e??"").replace(/\r\n?/g,`
|
|
4
|
+
`),i=[],r=[],n=0;for(let c of t.matchAll(/<[^<>\r\n]*>/g)){c.index>n&&i.push({text:t.slice(n,c.index)});let l={text:c[0],tag:pu(c[0]),paired:!1};i.push(l),n=c.index+c[0].length,l.tag&&(l.tag.close?r.at(-1)?.tag.name===l.tag.name?r.pop().paired=l.paired=!0:r.length=0:r.push(l))}n<t.length&&i.push({text:t.slice(n)});let o=[],a=[{bold:!1,italic:!1,size:null,color:null}],s=!1;for(let c of i)if(c.paired)if(s=!0,c.tag.close)a.pop();else{let l={b:"bold",i:"italic",size:"size",color:"color"}[c.tag.name];a.push({...a.at(-1),[l]:c.tag.value})}else if(c.text){let l=a.at(-1),u=o.at(-1);u&&["bold","italic","size","color"].every(f=>u[f]===l[f])?u.text+=c.text:o.push({text:c.text,...l})}return{rich:s,text:o.map(c=>c.text).join(""),runs:o}}function sr(e,t){return`${e.italic?"italic ":""}${e.bold?"bold ":""}${e.fontSize}px ${t}`}var xt=mu(1,1).getContext("2d"),Aa=new WeakMap,_a=(e,t)=>Math.max(1,Math.trunc(Number.isFinite(Number(e))?Number(e):t));function gu(e,t,i,r,n,o){let a=[],s=[],c=0,l=t,u=0,f=()=>{let w=s.length?s.reduce((M,O)=>Math.max(M,O.fontSize),0):l,y=w*1.2,v=s.length?s.reduce((M,O)=>Math.max(M,O.ascent),0):w*.8,_=s.length?s.reduce((M,O)=>Math.max(M,O.descent),0):w*.2,P=(y-v-_)/2+v;a.push({runs:s,width:c,top:u,height:y,baseline:P,fontSize:w}),u+=y,s=[],c=0};for(let w of e.runs){let y={fontSize:w.size??t,bold:w.bold,italic:w.italic,color:w.color};xt.font=sr(y,r);let v=xt.measureText("Mg"),_=v.fontBoundingBoxAscent??v.emHeightAscent??y.fontSize*.8,P=v.fontBoundingBoxDescent??v.emHeightDescent??y.fontSize*.2;l=y.fontSize;for(let M of w.text){if(M===`
|
|
5
|
+
`){f();continue}let O=s.at(-1),L=O&&["fontSize","bold","italic","color"].every(A=>O[A]===y[A]),z=xt.measureText((L?O.text:"")+M).width,S=c+z-(L?O.width:0);s.length&&S>i&&(f(),O=null,z=xt.measureText(M).width,S=z),O&&L?(O.text+=M,O.width=z):s.push({text:M,...y,x:c,width:z,ascent:_,descent:P}),c=S}}f();let h=a.map(w=>w.runs.map(y=>y.text).join("")),p=a.reduce((w,y)=>Math.max(w,y.fontSize),0),m=n==="textbox"&&e.text?p*.25+4:0,b=e.text?u+m:0;return{fontSize:t,lines:h,lineHeight:t*1.2,contentHeight:u,blockInset:m,requiredHeight:b,textWidth:i,fits:b<=o+1e-6&&a.every(w=>w.width<=i+1e-6),richLines:a}}function Je(e,t,i){let r=String(e.text??"").replace(/\r\n?/g,`
|
|
6
|
+
`),n=_a(e.fontSize,20),o=Math.min(n,_a(e.minimumFontSize,10)),a=e.adaptiveFontSize===!0,s=jt(),c=JSON.stringify([r,t,i,n,o,a,e.kind,e.showScrollBar,s]),l=Aa.get(e);if(l?.key===c)return l.value;let u=Ea(r),f=(w,y)=>{if(u.rich)return gu(u,w,y,s,e.kind,i);xt.font=`${w}px ${s}`;let v=[];for(let z of r.split(`
|
|
7
|
+
`)){let S="";for(let A of z)S&&xt.measureText(S+A).width>y&&(v.push(S),S=""),S+=A;v.push(S)}let _=w*1.2,P=v.length*_,M=e.kind==="textbox"&&r?w*.25+4:0,O=r?P+M:0,L=O<=i+1e-6&&v.every(z=>xt.measureText(z).width<=y+1e-6);return{fontSize:w,lines:v,lineHeight:_,contentHeight:P,blockInset:M,requiredHeight:O,textWidth:y,fits:L}},h=Math.max(0,t-4),p=f(n,h);if(a&&!p.fits&&o<n){p=f(o,h);let w=o+1,y=n-1;for(;w<=y;){let v=Math.floor((w+y)/2),_=f(v,h);_.fits?(p=_,w=v+1):y=v-1}}e.kind==="textwindow"&&e.showScrollBar!==!1&&p.contentHeight>i&&(p=f(p.fontSize,Math.max(0,h-12)));let m=p.lines.length,b=p.contentHeight;if(e.kind==="textbox"&&(m=0,b=0,p.lines.join(`
|
|
8
|
+
`)))for(let w=0;w<p.lines.length;w++){let y=p.richLines?.[w],v=y?y.top+y.height:(w+1)*p.lineHeight;if(v+p.blockInset>i+1e-6)break;m=w+1,b=v}return p={...p,visibleLineCount:m,visibleContentHeight:b},Aa.set(e,{key:c,value:p}),p}var lr=e=>Number.isFinite(Number(e))?Math.max(0,Number(e)):0;function Ut(e,t){if(!e||e.kind!=="image"||e.enableMask!==!0||!t)return null;let i=lr(e.sourceWidth??e.width),r=lr(e.sourceHeight??e.height),n=e.enableSoftEdge===!0,o=e.softEdgeMode!=="Pixel",a=n?lr(e.softEdgeWidthX):0,s=n?lr(e.softEdgeWidthY):0;return{id:e.id,matrix:t,width:i,height:r,featherX:o?i*a/100:a,featherY:o?r*s/100:s}}function cr(e,t,i){let r=Ie(e,t,i);return{a:e.a,b:e.b,c:e.c,d:e.d,tx:r.x,ty:r.y}}function Ta(e,t,i){let r=(n,o)=>n<=0?0:!(o>0)||n>=o?1:n/o;return Math.min(r(e+i.width/2,i.featherX),r(i.width/2-e,i.featherX),r(t+i.height/2,i.featherY),r(i.height/2-t,i.featherY))}function Cn(e){let t={children:[]},i=[t],r=[];for(let n of e||[]){if(!n||n.id==null)continue;let o=n.masks||[],a=o.map(c=>JSON.stringify([c.id,c.matrix,c.width,c.height,c.featherX,c.featherY])),s=0;for(;s<r.length&&s<a.length&&r[s]===a[s];)s++;i.length=s+1;for(let c=s;c<o.length;c++){let l={mask:o[c],children:[]};i.at(-1).children.push(l),i.push(l)}i.at(-1).children.push({item:n}),r=a}return t.children}function Pa(e,t){let i=[];function r(n){t[n.id]&&i.push(t[n.id]);let o=n.children||[];for(let a=o.length-1;a>=0;a-=1)r(o[a])}return r(e),i}function lt(e,t,i=yt(t)){let r=we(t),n={};function o(a,s,c,l=!0,u=[]){let f=vt(a.transformByPlatform,i),h=Ue(s,f),p=a.kind==="server-container"?c:bi(c,h,f),m=ta(h,p),b=l&&a.visible!==!1,w=a.kind==="image"&&a.enableMask===!0?Ut({...a,width:h.width,height:h.height},cr(p,h.centerX,h.centerY)):null,y=w?[...u,w]:u;n[a.id]={...h,...on(h),id:a.id,kind:a.kind,name:a.name,visible:a.visible!==!1,visibleInHierarchy:b,active:a.active!==!1,rotationX:f.rotation.x,rotationY:f.rotation.y,rotationZ:f.rotation.z,renderLeft:m.left,renderBottom:m.bottom,renderWidth:m.width,renderHeight:m.height,renderRotationZ:m.rotationZ,renderMatrix:p,...y.length?{masks:y}:{},primitive:a.kind==="image"?Dt(a.imageId,a.imageSource):null,...a.kind==="textbox"||a.kind==="textwindow"?{text:a.text??"",fontSize:a.fontSize,adaptiveFontSize:a.adaptiveFontSize===!0,minimumFontSize:a.minimumFontSize,textLayout:Je(a,h.width,h.height),fontColor:a.fontColor,bgColor:a.bgColor,enableOutline:a.enableOutline!==!1,outlineColor:a.outlineColor,horizontalAlignment:a.horizontalAlignment,verticalAlignment:a.verticalAlignment}:{},...a.kind==="image"?{imageSource:a.imageSource,imageType:a.imageType??null,imageId:a.imageId,imageColor:a.imageColor,enableMask:a.enableMask===!0,enableSoftEdge:a.enableSoftEdge===!0,softEdgeMode:a.softEdgeMode,softEdgeWidthX:a.softEdgeWidthX,softEdgeWidthY:a.softEdgeWidthY,horizontalSoftRange:a.horizontalSoftRange,verticalSoftRange:a.verticalSoftRange,enableFill:a.enableFill===!0,fillType:a.fillType,fillHorizontalType:a.fillHorizontalType,fillVerticalType:a.fillVerticalType,fillRadial90Type:a.fillRadial90Type,fillRadialType:a.fillRadialType,fillAmount:a.fillAmount,reverseMaskArea:a.reverseMaskArea===!0}:{},...a.kind==="button"?{raycastTarget:a.raycastTarget!==!1,interactable:a.interactable!==!1,clickAudioId:a.clickAudioId,unavailableChildId:a.unavailableChildId??null,hoverChildId:a.hoverChildId??null,pressedChildId:a.pressedChildId??null,selectedChildId:a.selectedChildId??null}:{}};let v=a.kind==="server-container"?s:h;for(let _ of a.children||[])o(_,v,p,b,y)}return o(e,r,Vt()),{canvas:r,boxes:n}}function kn(e,t){let i=[];function r(n,o,a=null,s=[],c=0,l=1,u=e.id){i.push({id:n.id,guid:t?.get(n.id)??(n.guid||0),kind:n.kind,name:n.name,label:$t[n.kind]||n.kind,depth:o,parentId:a,ancestorIds:s,siblingIndex:c,siblingCount:l,templateId:u,childCount:(n.children||[]).length,incomplete:!Zi.includes(n.kind)});let f=n.children||[];for(let h=0;h<f.length;h+=1)r(f[h],o+1,n.id,[...s,n.id],h,f.length,u)}return r(e,0),i}function R(e,t,i,r,n={}){return{key:e,label:t,type:i,value:r,...n}}function Ra(e,t,i,r){if(!e)return null;let n=st(e.transformByPlatform,t),o=on(i),a=[R("name","\u540D\u79F0","string",e.name),R("active","\u521D\u59CB\u6FC0\u6D3B","bool",e.active!==!1),R("visible","\u521D\u59CB\u53EF\u89C1\u6027","bool",e.visible!==!1),R("canControllerFocus","\u53EF\u88AB\u624B\u67C4\u6447\u6746\u5BFC\u822A\u9009\u4E2D","bool",e.canControllerFocus===!0),R("posX","\u4F4D\u7F6E X","number",o.posX,{computed:!0}),R("posY","\u4F4D\u7F6E Y","number",o.posY,{computed:!0}),R("width","\u5927\u5C0F W","number",o.width,{computed:!0}),R("height","\u5927\u5C0F H","number",o.height,{computed:!0}),R("rotationX","\u65CB\u8F6C X","number",n.rotation.x),R("rotationY","\u65CB\u8F6C Y","number",n.rotation.y),R("rotationZ","\u65CB\u8F6C Z","number",n.rotation.z),R("syncAllDevices","\u540C\u6B65\u4FE1\u606F\u81F3\u6240\u6709\u8BBE\u5907","bool",e.syncAllDevices!==!1),R("anchorType","\u951A\u70B9\u7C7B\u578B","enum",ra(n),{options:[{value:"center",label:"\u5C45\u4E2D"},{value:"top-left",label:"\u5DE6\u4E0A"},{value:"top",label:"\u4E0A\u65B9"},{value:"top-right",label:"\u53F3\u4E0A"},{value:"left",label:"\u5DE6\u4FA7"},{value:"right",label:"\u53F3\u4FA7"},{value:"bottom-left",label:"\u5DE6\u4E0B"},{value:"bottom",label:"\u4E0B\u65B9"},{value:"bottom-right",label:"\u53F3\u4E0B"},{value:"stretch",label:"\u53CC\u5411\u62C9\u4F38"},{value:"stretch-horizontal",label:"\u6C34\u5E73\u62C9\u4F38"},{value:"stretch-vertical",label:"\u5782\u76F4\u62C9\u4F38"},{value:"custom",label:"\u81EA\u5B9A\u4E49"}]}),R("anchorMinX","\u951A\u70B9 Min X","number",n.anchorMin.x),R("anchorMinY","\u951A\u70B9 Min Y","number",n.anchorMin.y),R("anchorMaxX","\u951A\u70B9 Max X","number",n.anchorMax.x),R("anchorMaxY","\u951A\u70B9 Max Y","number",n.anchorMax.y),R("pivotX","\u4E2D\u5FC3 X","number",n.pivot.x),R("pivotY","\u4E2D\u5FC3 Y","number",n.pivot.y)];if(e.kind==="container"&&a.push(R("isolateNavigation","\u9694\u79BB\u624B\u67C4\u5BFC\u822A","bool",e.isolateNavigation===!0),R("disableKeyEventPassthrough","\u5C4F\u853D\u6309\u952E\u4E8B\u4EF6\u7A7F\u900F","bool",e.disableKeyEventPassthrough===!0),R("disableCursorEventPassthrough","\u5C4F\u853D\u533A\u57DF\u5185\u70B9\u51FB\u4E8B\u4EF6\u7A7F\u900F","bool",e.disableCursorEventPassthrough===!0),R("showCursor","\u663E\u793A\u5E38\u9A7B\u5149\u6807","bool",e.showCursor===!0)),e.kind==="textbox"||e.kind==="textwindow"){let s=e.giaRaw?.textAlign,c=[0,1,2].includes(s)?e.horizontalAlignment||"Left":`__unrecognized:${s}`;a.push(R("fontSize","\u5B57\u53F7","number",e.fontSize),R("adaptiveFontSize","\u5B57\u53F7\u81EA\u9002\u5E94","bool",e.adaptiveFontSize===!0),R("minimumFontSize","\u6700\u5C0F\u5B57\u53F7","number",e.minimumFontSize),R("fontColor","\u6587\u672C\u8272","color",e.fontColor),R("bgColor","\u80CC\u666F\u8272","color",e.bgColor),R("enableOutline","\u542F\u7528\u63CF\u8FB9","bool",e.enableOutline!==!1),R("outlineColor","\u63CF\u8FB9\u8272","color",e.outlineColor),R("horizontalAlignment","\u6C34\u5E73\u5BF9\u9F50","enum",c,{...[0,1,2].includes(s)?{}:{unknownValue:s},options:[{value:"Left",label:"\u5DE6\u5BF9\u9F50"},{value:"Middle",label:"\u5C45\u4E2D"},{value:"Right",label:"\u53F3\u5BF9\u9F50"}]}),R("verticalAlignment","\u5782\u76F4\u5BF9\u9F50","enum",e.verticalAlignment||"Top",{options:[{value:"Top",label:"\u9876\u90E8"},{value:"Middle",label:"\u5C45\u4E2D"},{value:"Bottom",label:"\u5E95\u90E8"}]}),R("text","\u6587\u672C","text",e.text??""))}if(e.kind==="image"){let s=e.giaRaw?.imageFillType,c=[1,2,3,4,5].includes(s)?e.fillType:`__unrecognized:${s}`;a.push(R("imageSource","\u56FE\u7247\u6E90","enum",e.imageSource,{options:[{value:"StaticReference",label:"\u9759\u6001\u5F15\u7528"},{value:"Prefab",label:"\u5143\u4EF6"}]}),R("imageId","imageId","number",e.imageId??0),R("imageType","\u56FE\u7247\u7C7B\u578B","enum",e.imageType??null,{options:[{value:"Basic",label:"\u57FA\u7840"},{value:"Stretch",label:"\u62C9\u4F38"}]}),R("imageColor","\u586B\u5145\u8272","color",e.imageColor),R("enableMask","\u5F00\u542F\u906E\u7F69","bool",e.enableMask===!0),R("enableSoftEdge","\u8FB9\u7F18\u7FBD\u5316","bool",e.enableSoftEdge===!0,{gia:"W"}),R("softEdgeMode","\u7FBD\u5316\u6A21\u5F0F","enum",e.softEdgeMode,{options:[{value:"Percentage",label:"\u767E\u5206\u6BD4"},{value:"Pixel",label:"\u50CF\u7D20"}]}),R("softEdgeWidthX","\u7FBD\u5316\u5BBD\u5EA6 X","number",e.softEdgeWidthX),R("softEdgeWidthY","\u7FBD\u5316\u5BBD\u5EA6 Y","number",e.softEdgeWidthY),R("horizontalSoftRange","\u6C34\u5E73\u7FBD\u5316\u8303\u56F4","number",e.horizontalSoftRange),R("verticalSoftRange","\u5782\u76F4\u7FBD\u5316\u8303\u56F4","number",e.verticalSoftRange),R("enableFill","\u6309\u8FDB\u5EA6\u586B\u5145","bool",e.enableFill===!0,{gia:"W"}),R("fillType","\u5F62\u72B6","enum",c,{...[1,2,3,4,5].includes(s)?{}:{unknownValue:s},options:[{value:"Horizontal",label:"\u6A2A\u5411"},{value:"Vertical",label:"\u7EB5\u5411"},{value:"Radial90",label:"90\u5EA6\u73AF\u7ED5"},{value:"Radial180",label:"180\u5EA6\u73AF\u7ED5"},{value:"Radial360",label:"360\u5EA6\u73AF\u7ED5"}]}),R("fillHorizontalType","\u65B9\u5411","enum",e.fillHorizontalType,{options:[{value:"Left",label:"\u4ECE\u5DE6\u81F3\u53F3"},{value:"Right",label:"\u4ECE\u53F3\u81F3\u5DE6"}]}),R("fillVerticalType","\u65B9\u5411","enum",e.fillVerticalType,{options:[{value:"Bottom",label:"\u4ECE\u4E0B\u81F3\u4E0A"},{value:"Top",label:"\u4ECE\u4E0A\u81F3\u4E0B"}]}),R("fillRadial90Type","\u8D77\u70B9","enum",e.fillRadial90Type,{options:[{value:"BottomLeft",label:"\u5DE6\u4E0B"},{value:"TopLeft",label:"\u5DE6\u4E0A"},{value:"TopRight",label:"\u53F3\u4E0A"},{value:"BottomRight",label:"\u53F3\u4E0B"}]}),R("fillRadialType","\u8D77\u70B9","enum",e.fillRadialType,{options:[{value:"Bottom",label:"\u4E0B\u65B9"},{value:"Left",label:"\u5DE6\u4FA7"},{value:"Top",label:"\u4E0A\u65B9"},{value:"Right",label:"\u53F3\u4FA7"}]}),R("fillAmount","\u8FDB\u5EA6","percent",e.fillAmount),R("reverseMaskArea","\u906E\u7F69\u533A\u57DF\u53CD\u8F6C","bool",e.reverseMaskArea===!0,{gia:"W"}))}if(e.kind==="button"){let s=[{value:"",label:"\u672A\u8BBE\u7F6E"},...(e.children||[]).map(c=>({value:c.id,label:`${c.name} \xB7 ${c.id}`}))];a.push(R("raycastTarget","\u53EF\u88AB\u5149\u6807\u5C04\u7EBF\u68C0\u6D4B","bool",e.raycastTarget!==!1),R("interactable","\u6309\u94AE\u662F\u5426\u53EF\u7528","bool",e.interactable!==!1),R("unavailableChildId","\u4E0D\u53EF\u7528\u72B6\u6001\u8282\u70B9","node",e.unavailableChildId,{options:s,gia:"W"}),R("hoverChildId","\u60AC\u505C\u72B6\u6001\u8282\u70B9","node",e.hoverChildId,{options:s,gia:"W"}),R("pressedChildId","\u6309\u4E0B\u72B6\u6001\u8282\u70B9","node",e.pressedChildId,{options:s,gia:"W"}),R("selectedChildId","\u9009\u4E2D\u72B6\u6001\u8282\u70B9","node",e.selectedChildId,{options:s,gia:"W"}),R("clickAudioId","\u70B9\u51FB\u97F3\u6548","number",e.clickAudioId))}return e.kind==="reference"&&a.push(R("referencedPrefabId","\u5F15\u7528\u63A7\u4EF6\u6A21\u677F\u7D22\u5F15","string",e.referencedPrefabId??"")),(e.kind==="textwindow"||e.kind==="grid")&&a.push(R("interactable","\u5141\u8BB8\u6EDA\u52A8\u4EA4\u4E92","bool",e.interactable!==!1),R("showScrollBar","\u663E\u793A\u6EDA\u52A8\u6761","bool",e.showScrollBar!==!1)),e.kind==="grid"&&a.push(R("itemPrefabId","\u5217\u8868\u9879\u6A21\u677F\u7D22\u5F15","number",e.itemPrefabId??0),R("raycastTarget","\u53EF\u88AB\u5149\u6807\u5C04\u7EBF\u68C0\u6D4B","bool",e.raycastTarget!==!1),R("scrollDirection","\u6EDA\u52A8\u65B9\u5411","enum",e.scrollDirection,{options:[{value:"Vertical",label:"\u7EB5\u5411"},{value:"Horizontal",label:"\u6A2A\u5411"}]}),R("layoutConstraint","\u6392\u5217\u9650\u5236","enum",e.layoutConstraint,{options:[{value:"AutoWrap",label:"\u81EA\u52A8\u6362\u884C"},{value:"Fixed",label:"\u56FA\u5B9A\u884C\u5217\u6570"}]}),R("layoutConstraintFixedCount","\u6BCF\u884C\u6216\u6BCF\u5217\u6570\u91CF","number",e.layoutConstraintFixedCount??1),R("cellSizeX","\u5217\u8868\u9879\u5927\u5C0F W","number",e.cellSizeX,{evidence:"W"}),R("cellSizeY","\u5217\u8868\u9879\u5927\u5C0F H","number",e.cellSizeY,{evidence:"W"}),R("spacingX","\u5217\u8868\u9879\u95F4\u9694 X","number",e.spacingX,{evidence:"W"}),R("spacingY","\u5217\u8868\u9879\u95F4\u9694 Y","number",e.spacingY,{evidence:"W"}),R("padding1X","\u8FB9\u8DDD\u5411\u91CF 1 X","number",e.padding1X,{evidence:"W"}),R("padding1Y","\u8FB9\u8DDD\u5411\u91CF 1 Y","number",e.padding1Y,{evidence:"W"}),R("padding2X","\u8FB9\u8DDD\u5411\u91CF 2 X","number",e.padding2X,{evidence:"W"}),R("padding2Y","\u8FB9\u8DDD\u5411\u91CF 2 Y","number",e.padding2Y,{evidence:"W"}),R("previewCount","\u9884\u89C8\u6570\u91CF","number",e.previewCount)),e.kind==="keyhint"&&a.push(R("keyboardKeyCode","\u952E\u9F20\u6309\u952E","number",e.keyboardKeyCode??e.giaRaw?.keyHintField502??1,{gia:"W"}),R("controllerKeyCode","\u624B\u67C4\u6309\u952E","number",e.controllerKeyCode??e.giaRaw?.keyHintField501??1)),(e.kind==="animation"||e.kind==="fullscreen")&&a.push(R("animationId",e.kind==="animation"?"\u52A8\u6548\u7D22\u5F15":"\u5168\u5C4F\u52A8\u6548\u7D22\u5F15","string",e.animationId??"")),(!Zi.includes(e.kind)||e.kind==="textwindow"||e.kind==="grid")&&a.push(R("incomplete","\u5B8C\u6574\u5EA6","note",e.kind==="textwindow"||e.kind==="grid"?"\u8BD5\u73A9\u652F\u6301\u57FA\u7840\u6EDA\u52A8\uFF1B\u6EDA\u52A8\u4EA4\u4E92\u3001\u6EDA\u52A8\u6761\u53CA\u5217\u8868\u914D\u7F6E\u4EE5 JSON/Lua \u4E3A\u51C6\uFF0C\u76F8\u5173 GIA \u5F00\u5173\u6620\u5C04\u5C1A\u672A\u6838\u5B9E\u3002":"\u672C\u9636\u6BB5\u4EC5\u516C\u5171\u53D8\u6362\uFF0C\u4E1A\u52A1\u69FD\u4E0D\u5B8C\u6574")),{id:e.id,guid:r?.get(e.id)??(e.guid||0),kind:e.kind,label:$t[e.kind]||e.kind,incomplete:!Zi.includes(e.kind),fields:a}}function Ma(e,t,i){let r=(Array.isArray(e)?e:Object.values(e)).filter(n=>n.kind!=="server-container");for(let n=r.length-1;n>=0;n-=1){let o=r[n];if(!o.visible||o.visibleInHierarchy===!1||!o.active)continue;let a=o.renderMatrix&&Xe(o.renderMatrix),s=a&&Ie(a,t,i);if(s&&s.x>=o.left&&s.x<=o.right&&s.y>=o.bottom&&s.y<=o.top)return o.id}return null}import yu from"protobufjs";function Xt(e,t=!1){let i=[],r=(n,o)=>{n.kind!=="server-container"&&i.push({node:n,parent:o});let a=t&&n.kind!=="server-container"?[...n.children||[]].reverse():n.children||[];for(let s of a)r(s,n)};return r(e.root,null),i}var bu=String.raw`
|
|
3
9
|
syntax = "proto3";
|
|
4
10
|
// Root.graph is singular in the game's canonical schema, but template-list
|
|
5
11
|
// assets legally emit field 1 more than once. Model it as repeated here so
|
|
@@ -25,7 +31,7 @@ message UiControlGroup {
|
|
|
25
31
|
oneof value {
|
|
26
32
|
Transform transform = 11; WrapperString name = 12; Field14 field14 = 14;
|
|
27
33
|
string empty72 = 72; string empty73 = 73; string empty74 = 74; string empty75 = 75;
|
|
28
|
-
|
|
34
|
+
bytes empty76 = 76; string empty77 = 77; string empty78 = 78; string empty79 = 79;
|
|
29
35
|
string empty80 = 80; string empty81 = 81; string empty82 = 82; string empty83 = 83;
|
|
30
36
|
string empty84 = 84; string empty85 = 85; string empty86 = 86;
|
|
31
37
|
}
|
|
@@ -35,7 +41,7 @@ message UiControlGroup {
|
|
|
35
41
|
oneof value {
|
|
36
42
|
Transform transform = 13; Field14 field14 = 14; RootChildRef rootChildRef = 73;
|
|
37
43
|
GenericSlot genericSlot = 74; TextConfig textConfig = 75; CursorConfig cursorConfig = 76;
|
|
38
|
-
|
|
44
|
+
bytes templateRefSlot = 77; FooterSlot footerSlot = 78; ContainerNodeConfig containerNodeSlot = 79;
|
|
39
45
|
GridViewConfig gridView = 80; ButtonPresetConfig buttonPreset = 81; KeyHintConfig keyHint = 83;
|
|
40
46
|
ImageSlotConfig imageSlot = 84; ImageConfig image = 85; string effectSlot = 86;
|
|
41
47
|
string fullscreenEffectSlot = 87;
|
|
@@ -100,23 +106,20 @@ message ImageConfig {
|
|
|
100
106
|
message SliceVector { float field501 = 501; float field502 = 502; }
|
|
101
107
|
}
|
|
102
108
|
message FooterSlot { int32 field505 = 505; }
|
|
103
|
-
`,{root:oc}=rc.parse(nc,{keepCase:!1}),Fe=oc.lookupType("Root"),nt=20,Qr=4,Uo=806,Lo=1657,fi={image:23,"server-container":24,container:25,grid:26,reference:27,button:28,animation:29,fullscreen:30,textbox:31,textwindow:32,cursor:33,keyhint:34},Xo={KEYBOARD:0,TOUCHSCREEN:1,CONTROLLER_CONSOLE:2,CONTROLLER_MOBILE:3},ac="server-control-template",Xi="client-control-template";function Li(e,t){let i=Number(e);return Number.isFinite(i)?i:t}var sc=Object.fromEntries(Object.entries(Xo).map(([e,t])=>[t,e])),Wo=Object.freeze({container:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["68/91","empty78","containerNodeSlot"],["67/90","empty77","footerSlot"]],textbox:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["64/84","empty74","textConfig"],["67/90","empty77","footerSlot"]],cursor:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["65/85","empty75","cursorConfig"],["67/90","empty77","footerSlot"]],reference:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["66/89","empty76","templateRefSlot"],["67/90","empty77","footerSlot"]],grid:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["69/92","empty79","gridView"],["67/90","empty77","footerSlot"]],button:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["70/93","empty80","buttonPreset"],["67/90","empty77","footerSlot"]],textwindow:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["71/94","empty81","textConfig"],["67/90","empty77","footerSlot"]],keyhint:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["72/95","empty82","keyHint"],["67/90","empty77","footerSlot"]],image:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["73/96","empty83","imageSlot"],["74/97","empty84","image"],["67/90","empty77","footerSlot"]],animation:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["75/98","empty85","effectSlot"],["67/90","empty77","footerSlot"]],fullscreen:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["76/99","empty86","fullscreenEffectSlot"],["67/90","empty77","footerSlot"]]}),Ko=Object.freeze({"4/23":5,"4/86":5,"1/12":4,"62/82":64,"63/83":65,"64/84":66,"65/85":67,"66/89":68,"67/90":69,"68/91":70,"69/92":71,"70/93":72,"71/94":66,"72/95":74,"73/96":75,"74/97":76,"75/98":77,"76/99":78}),lc=Object.freeze([["2/15","name",null],["4/23","field14","field14"],["1/12","transform","transform"],["62/82","empty72","rootChildRef"]]);function Zr(e){return{class:1,type:8,id:e}}function di(e,t,i,r){return{...r,field501:t,field502:i,field503:1,nodeRef:Zr(e)}}function cc(e){let t=[],i=e.meta?.assetType==="client-control-template";return Z(e.root,r=>{i&&r.kind==="server-container"||t.push(r)}),t}function hi(e,t=new Set){let i=new Map,r=[];for(let n of cc(e)){let o=Number(n.guid);Oe(o)&&!t.has(o)?(t.add(o),n.guid=o,i.set(n.id,o)):r.push(n)}for(let n of r){let o=et(t);t.add(o),n.guid=o,i.set(n.id,o)}return i}function uc(e){return{scale:{x:e.scale.x,y:e.scale.y,z:e.scale.z},anchorMin:{x:e.anchorMin.x,y:e.anchorMin.y},anchorMax:{x:e.anchorMax.x,y:e.anchorMax.y},offset:{x:e.offset.x,y:e.offset.y},size:{x:e.size.x,y:e.size.y},pivot:{x:e.pivot.x,y:e.pivot.y},field508:Object.fromEntries(Object.entries(e.rotation).filter(([,t])=>t!==0))}}function fc(e,t){let r={multiPlatform:{platforms:ue.map(n=>({platformType:Xo[n],transform:uc(e.transformByPlatform[n])})),field502:fi[e.kind]||25,...e.syncAllDevices===!1?{}:{field504:1}},type:2};return{transform:{multiPlatform:{},type:2},field501:1,field502:12,details:di(t,4,12,{transform:r})}}function dc(e,t,i){let r=i?{empty15:"",field501:5}:{field17:{},field501:7},n=i?r:{...r,...e.visible===!1?{field17:{initiallyHidden:!0}}:{},...e.active===!1?{initiallyInactive:!0}:{}};return[{name:{value:e.name},field501:2,field502:15},{field14:r,field501:4,field502:i?23:86,details:di(t,5,i?23:86,{field14:n})},fc(e,t)]}function hc(e,t,i,r){let n=(l,u,f,h,p)=>({[f]:"",field501:l,field502:u,details:di(t,l+2,u,{[h]:p})}),o=e.giaRaw||{},a=Array.isArray(e.scriptMappingIds)&&e.scriptMappingIds.length?{field501:o.genericField501||1,field502:e.scriptMappingIds.map(l=>({field1:{id:Number(l)}}))}:{field501:o.genericField501??0},s=n(63,83,"empty73","genericSlot",a),c=n(67,90,"empty77","footerSlot",{field505:[void 0,0,1].includes(o.footerField505)?e.canControllerFocus?1:0:o.footerField505});if(e.kind==="container")return[s,n(68,91,"empty78","containerNodeSlot",{...e.isolateNavigation?{isolateNavigation:!0}:{},...e.disableKeyEventPassthrough?{disableKeyEventPassthrough:!0}:{},...e.disableCursorEventPassthrough?{disableCursorEventPassthrough:!0}:{},...e.showCursor?{showCursor:!0}:{}}),c];if(e.kind==="textbox"||e.kind==="textwindow"){e.verticalAlignment==="Middle"&&r.push(`${e.name}: \u5782\u76F4\u5C45\u4E2D\u6309\u63A8\u5B9A\u503C\u5BFC\u51FA\uFF0C\u5C1A\u5F85\u5B9E\u673A\u786E\u8BA4\u3002`);let l={Left:0,Middle:1,Right:2}[e.horizontalAlignment]??0,u=Number.isFinite(o.textAlign)?Math.trunc(o.textAlign):l,f={field501:o.textField501??20,field503:o.textField503??12,color:e.fontColor>>>0,color2:e.bgColor>>>0,color3:e.outlineColor>>>0,text:{value:e.text||""},fontSize:Math.trunc(e.fontSize),minimumFontSize:Math.trunc(e.minimumFontSize),...e.adaptiveFontSize?{adaptive:1}:{},...e.enableOutline===!1?{outlineOff:1}:{},...u?{align:u}:{},verticalAlign:o.textVerticalAlign??{Top:0,Middle:1,Bottom:2}[e.verticalAlignment]??0};return e.kind==="textwindow"?((e.interactable===!1||e.showScrollBar===!1)&&r.push(`${e.name}: \u6587\u672C\u89C6\u7A97\u4EA4\u4E92/\u6EDA\u52A8\u6761\u5F00\u5173\u4EC5\u4FDD\u5B58\u5728 JSON\uFF0CGIA \u672A\u6620\u5C04\u8FD9\u4E9B\u6539\u52A8\u3002`),f.field511=o.textField511??1,f.viewFlags={field502:o.textViewField502??1,field503:o.textViewField503??1},[s,{empty81:"",field501:71,field502:94,details:di(t,66,94,{textConfig:f})},c]):[s,n(64,84,"empty74","textConfig",f),c]}if(e.kind==="image"){let l=[0,1].includes(o.imageSlotType??0)?e.imageType==="Stretch"?1:0:o.imageSlotType;e.imageType==null&&e.imageSource==="StaticReference"&&e.imageId>100006&&r.push(`${e.name}: \u56FE\u7247\u7C7B\u578B\u968F\u7D20\u6750\u8FB9\u754C\u81EA\u52A8\u9009\u62E9\uFF0CGIA \u6309\u57FA\u7840\u5BFC\u51FA\uFF1B\u9700\u8981\u62C9\u4F38\u8BF7\u5148\u660E\u786E\u9009\u62E9\u6216\u5728 Lua \u8BBE\u7F6E imageType\u3002`),e.imageSource&&e.imageSource!=="StaticReference"&&r.push(`${e.name}: \u56FE\u7247\u6765\u6E90 ${e.imageSource} \u4EC5\u4FDD\u5B58\u5728 JSON\uFF0C\u5C1A\u672A\u6620\u5C04\u5230 GIA\uFF1B\u8BF7\u5728 Lua \u4E2D\u7528 SetImage(Enum.ImageSource.${e.imageSource}, ${e.imageId}) \u8BBE\u7F6E\u3002`);let u={Horizontal:1,Vertical:2,Radial90:3,Radial180:4,Radial360:5}[e.fillType],f=Number.isFinite(o.imageFillType)?Math.trunc(o.imageFillType):u||1;e.enableFill&&!f&&r.push(`${e.name}: \u586B\u5145\u5F62\u72B6\u539F\u59CB\u679A\u4E3E\u4E3A 0\uFF0C\u5DF2\u5173\u95ED\u5BFC\u51FA\u6587\u4EF6\u4E2D\u7684\u8FDB\u5EA6\u586B\u5145\u3002`),e.fillType==="Horizontal"&&e.fillHorizontalType!=="Left"&&r.push(`${e.name}: \u5F53\u524D\u6A2A\u5411\u586B\u5145\u65B9\u5411\u6682\u4E0D\u652F\u6301\u5199\u5165 GIA\u3002`),e.fillType==="Radial180"&&e.fillRadialType!=="Bottom"&&r.push(`${e.name}: \u5F53\u524D 180 \u5EA6\u586B\u5145\u8D77\u70B9\u6682\u4E0D\u652F\u6301\u5199\u5165 GIA\u3002`);let h={field502:o.imageField502??1,field504:o.imageField504??1,field505:o.imageField505??1,field507:o.imageField507??2,field508:Math.round(Math.max(0,Math.min(1,Number(e.fillAmount)||0))*100),border:{field501:Li(e.softEdgeWidthX,8),field502:Li(e.softEdgeWidthY,8)},field512:Li(e.horizontalSoftRange,85),field513:Li(e.verticalSoftRange,85),fillType:f,...e.enableMask?{enableMask:1}:{},...e.enableSoftEdge?{enableSoftEdge:1}:{},...e.softEdgeMode==="Pixel"?{softEdgePixel:1}:{},...e.enableFill&&f?{enableFill:1}:{},...e.reverseMaskArea?{reverseMask:1}:{}};return[s,n(73,96,"empty83","imageSlot",{field502:Number.isFinite(e.imageColor)?e.imageColor>>>0:4294967295,assetId:e.imageId>>>0,...l?{imageType:l}:{}}),n(74,97,"empty84","image",h),c]}if(e.kind==="button"){let l=(m,g)=>{let v=e[m];return v?(e.children||[]).some(C=>C.id===v)?i.get(v)||0:(r.push(`${e.name}: ${g}\u72B6\u6001\u8282\u70B9\u4E0D\u662F\u6309\u94AE\u7684\u76F4\u63A5\u5B50\u63A7\u4EF6\uFF0CGIA \u672A\u5199\u5165\u8BE5\u72B6\u6001\u3002`),0):0},u=l("unavailableChildId","\u4E0D\u53EF\u7528"),f=l("hoverChildId","\u60AC\u505C"),h=l("pressedChildId","\u6309\u4E0B"),p=l("selectedChildId","\u9009\u4E2D");return[s,n(70,93,"empty80","buttonPreset",{clickAudioId:Math.trunc(e.clickAudioId),...u?{disabledChild:u}:{},...f?{hoverChild:f}:{},...h?{pressedChild:h}:{},...p?{selectedChild:p}:{},...e.interactable?{interactable:1}:{},...e.raycastTarget?{raycastTarget:1}:{}}),c]}return e.kind==="cursor"?[s,n(65,85,"empty75","cursorConfig",{field501:[void 0,0,1].includes(o.cursorField501)?e.raycastTarget!==!1?1:0:o.cursorField501}),c]:e.kind==="reference"?[s,n(66,89,"empty76","templateRefSlot",o.templateRefSlot??""),c]:e.kind==="grid"?((e.itemPrefabId||e.interactable===!1||e.showScrollBar===!1||e.raycastTarget===!1||e.scrollDirection!=="Vertical"||e.layoutConstraint!=="AutoWrap")&&r.push(`${e.name}: \u7F51\u683C\u5217\u8868\u9879\u6A21\u677F\u3001\u4EA4\u4E92/\u6EDA\u52A8\u6761\u5F00\u5173\u3001\u6EDA\u52A8\u65B9\u5411\u53CA\u6392\u5217\u9650\u5236\u4EC5\u4FDD\u5B58\u5728 JSON\uFF0CGIA \u672A\u6620\u5C04\u8FD9\u4E9B\u6539\u52A8\u3002`),[s,n(69,92,"empty79","gridView",{field501:o.gridField501??1,cellSize:{field501:e.cellSizeX,field502:e.cellSizeY},gap:{field501:e.spacingX,field502:e.spacingY},padding1:{field501:e.padding1X,field502:e.padding1Y},padding2:{field501:e.padding2X,field502:e.padding2Y},field507:o.gridField507??1,field508:o.gridField508??1,field509:o.gridField509??1,field511:o.gridField511??5,field512:o.gridField512??1}),c]):e.kind==="keyhint"?[s,n(72,95,"empty82","keyHint",{field501:Number.isFinite(o.keyHintField501)?Math.trunc(o.keyHintField501):e.controllerKeyCode??1,field502:Number.isFinite(o.keyHintField502)?Math.trunc(o.keyHintField502):e.keyboardKeyCode??1}),c]:e.kind==="animation"?[s,n(75,98,"empty85","effectSlot",o.effectSlot??""),c]:e.kind==="fullscreen"?[s,n(76,99,"empty86","fullscreenEffectSlot",o.fullscreenEffectSlot??""),c]:(r.push(`${e.name}: ${e.kind} \u4E0D\u662F\u5DF2\u77E5 GIA \u63A7\u4EF6\u7C7B\u578B\uFF0C\u5DF2\u4EC5\u5199\u516C\u5171\u53D8\u6362\u3002`),[s,c])}function pc(e,t){if(t)return 1;if(!Pe(e.giaInfoIndex))throw new Error(`${e.name}: \u7F3A\u5C11\u5408\u6CD5\u7684\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7`);return e.giaInfoIndex}function mc(e,t,i){let r=Array.isArray(e.giaRelatedGuids)?e.giaRelatedGuids.filter(n=>Number.isSafeInteger(n)&&n>0&&n<=2147483647):[];return r.length?r:(t.push(`${e.name}: \u65B0${i}\u5199\u5165\u663E\u5F0F\u7A7A Info.related\uFF0C\u907F\u514D\u8DE8\u6C99\u7BB1\u590D\u7528\u4F34\u751F\u8D44\u6E90 GUID \u4EA7\u751F\u65E0\u6CD5\u52A0\u8F7D\u7684\u7D22\u5F15\u3002`),[])}function en(e,t){let i=String(e.meta?.giaFilePath||"").trim();if(/^\d+-\d+-\d+-\\.+\.gia$/iu.test(i))return i;let r=(l,u)=>Number.isSafeInteger(Number(l))&&Number(l)>0?Number(l):u,n=r(e.meta?.giaOwnerUid,114514),o=r(e.meta?.giaTimestamp,Math.floor(Date.now()/1e3)),a=r(e.meta?.giaFileId,t?1073741829:1073741830),s=t?"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868.gia":"\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F-\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668.gia",c=String(e.meta?.giaFileName||s).replace(/[\\/:*?"<>|]/gu,"-").replace(/\.gia$/iu,"").trim()||s.replace(/\.gia$/iu,"");return`${n}-${o}-${a}-\\${c}.gia`}function Wi(e,t,i,r,n,o=!1,a=!1,s=a,c=!1){let l=i.get(e.id),f=(c?[...e.children||[]].reverse():e.children||[]).map(m=>i.get(m.id)),h=o?r:f,p=dc(e,l,o);if(o){let m=e.children?.[0];m&&p.push({empty72:"",field501:62,field502:82,details:di(l,64,82,{rootChildRef:{guid:i.get(m.id)}})})}else p.push(...hc(e,l,i,n));return{id:Zr(l),relatedIds:h.map(m=>Zr(m)),name:e.name,which:o?21:a?70:15,ui:{content:{guid:l,info:[{guid:{value:l},field501:1,field502:5},...o||s?[{index:{value:pc(e,o)},field501:2,field502:6}]:[],...o||a?[{related:{value:mc(e,n,o?"\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F":"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F")},field501:4,field502:4}]:[]],children:o?[]:f,parent:t&&t.kind!=="server-container"?i.get(t.id):0,data:p}}}}function gc(e,t){let i=new Map;for(let r of e||[]){if(!r.controlId||!(t===Xi?r.controlAsset===Xi:r.controlAsset!==Xi))continue;let o=i.get(r.controlId)||[];o.push(r.guid),i.set(r.controlId,o)}return i}function qo(e,t,i,r){let n=gc(t,i),o=new Map;Z(e.root,a=>{n.has(a.id)&&(o.set(a,a.scriptMappingIds),a.scriptMappingIds=n.get(a.id))});try{return r()}finally{for(let[a,s]of o)s===void 0?delete a.scriptMappingIds:a.scriptMappingIds=s}}function tn(e){let t=Number(e.meta?.giaModeFlag);return Number.isSafeInteger(t)&&t>=0?{modeFlag:t}:{}}function rn(e){let t=e.meta?.gameVersion;return!t||t==="7.0.50"?Vi:t}function Jo(e,t,i,r,n=[]){let o=zt(e,!0),a=o.filter(({parent:u})=>u?.kind==="server-container");if(!a.length)throw new Error("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868\u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u6A21\u677F");let s=new Set(a.map(({node:u})=>u.id)),c=o.filter(({node:u})=>!s.has(u.id)),l=o.map(({node:u})=>t.get(u.id));return qo(e,n,Xi,()=>({graph:a.map(({node:u,parent:f})=>Wi(u,f,t,l,i,!1,!0,!0,!0)),accessories:c.map(({node:u,parent:f})=>Wi(u,f,t,l,i,!1,!1,!0,!0)),filePath:r||en(e,!0),gameVersion:rn(e),...tn(e)}))}function Qo(e,t,i,r,n){let o=zt(e),a=[o[0],...o.slice(1).reverse()],s=a.map(({node:c})=>t.get(c.id));return qo(e,i.scripts,ac,()=>({graph:[Wi(e.root,null,t,s,r,!0,!1,!1,!0),...i.units||[]],accessories:a.map(({node:c,parent:l})=>Wi(c,l,t,s,r,!1,!1,!1,!0)),filePath:n||en(e,!1),gameVersion:rn(e),...tn(e)}))}function Zo(e,t){let i=nn(e),r=t(i);if(!r.valid)throw new Error(`GIA compatibility validation failed:
|
|
109
|
+
`,{root:vu}=yu.parse(bu,{keepCase:!1}),Fe=vu.lookupType("Root"),ct=20,En=4,Fa=806,Oa=1657,Si={image:23,"server-container":24,container:25,grid:26,reference:27,button:28,animation:29,fullscreen:30,textbox:31,textwindow:32,cursor:33,keyhint:34},za={KEYBOARD:0,TOUCHSCREEN:1,CONTROLLER_CONSOLE:2,CONTROLLER_MOBILE:3},wu="server-control-template",fr="client-control-template";function ur(e,t){let i=Number(e);return Number.isFinite(i)?i:t}var Su=Object.fromEntries(Object.entries(za).map(([e,t])=>[t,e])),$a=Object.freeze({container:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["68/91","empty78","containerNodeSlot"],["67/90","empty77","footerSlot"]],textbox:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["64/84","empty74","textConfig"],["67/90","empty77","footerSlot"]],cursor:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["65/85","empty75","cursorConfig"],["67/90","empty77","footerSlot"]],reference:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["66/89","empty76","templateRefSlot"],["67/90","empty77","footerSlot"]],grid:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["69/92","empty79","gridView"],["67/90","empty77","footerSlot"]],button:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["70/93","empty80","buttonPreset"],["67/90","empty77","footerSlot"]],textwindow:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["71/94","empty81","textConfig"],["67/90","empty77","footerSlot"]],keyhint:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["72/95","empty82","keyHint"],["67/90","empty77","footerSlot"]],image:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["73/96","empty83","imageSlot"],["74/97","empty84","image"],["67/90","empty77","footerSlot"]],animation:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["75/98","empty85","effectSlot"],["67/90","empty77","footerSlot"]],fullscreen:[["2/15","name",null],["4/86","field14","field14"],["1/12","transform","transform"],["63/83","empty73","genericSlot"],["76/99","empty86","fullscreenEffectSlot"],["67/90","empty77","footerSlot"]]}),Da=Object.freeze({"4/23":5,"4/86":5,"1/12":4,"62/82":64,"63/83":65,"64/84":66,"65/85":67,"66/89":68,"67/90":69,"68/91":70,"69/92":71,"70/93":72,"71/94":66,"72/95":74,"73/96":75,"74/97":76,"75/98":77,"76/99":78}),xu=Object.freeze([["2/15","name",null],["4/23","field14","field14"],["1/12","transform","transform"],["62/82","empty72","rootChildRef"]]);function An(e){return{class:1,type:8,id:e}}function xi(e,t,i,r){return{...r,field501:t,field502:i,field503:1,nodeRef:An(e)}}function Iu(e){let t=[],i=e.meta?.assetType==="client-control-template";return te(e.root,r=>{i&&r.kind==="server-container"||t.push(r)}),t}function Ii(e,t=new Set,{preserveLegacy:i=!1}={}){let r=new Map,n=[],o=Iu(e);if(!i)for(let a of o)sn(a.guid,a.name);for(let a of o){let s=Number(a.guid);(i?We(s):_e(s))&&!t.has(s)?(t.add(s),a.guid=s,r.set(a.id,s)):n.push(a)}for(let a of n){let s=ot(t);t.add(s),a.guid=s,r.set(a.id,s)}return r}function Cu(e){return{scale:{x:e.scale.x,y:e.scale.y,z:e.scale.z},anchorMin:{x:e.anchorMin.x,y:e.anchorMin.y},anchorMax:{x:e.anchorMax.x,y:e.anchorMax.y},offset:{x:e.offset.x,y:e.offset.y},size:{x:e.size.x,y:e.size.y},pivot:{x:e.pivot.x,y:e.pivot.y},field508:Object.fromEntries(Object.entries(e.rotation).filter(([,t])=>t!==0))}}function ku(e,t){let r={multiPlatform:{platforms:ue.map(n=>({platformType:za[n],transform:Cu(e.transformByPlatform[n])})),field502:Si[e.kind]||25,...e.syncAllDevices===!1?{}:{field504:1}},type:2};return{transform:{multiPlatform:{},type:2},field501:1,field502:12,details:xi(t,4,12,{transform:r})}}function Eu(e,t,i){let r=i?{empty15:"",field501:5}:{field17:{},field501:7},n=i?r:{...r,...e.visible===!1?{field17:{initiallyHidden:!0}}:{},...e.active===!1?{initiallyInactive:!0}:{}};return[{name:{value:e.name},field501:2,field502:15},{field14:r,field501:4,field502:i?23:86,details:xi(t,5,i?23:86,{field14:n})},ku(e,t)]}function Au(e,t,i,r){let n=(l,u,f,h,p)=>({[f]:"",field501:l,field502:u,details:xi(t,l+2,u,{[h]:p})}),o=e.giaRaw||{},a=Array.isArray(e.scriptMappingIds)&&e.scriptMappingIds.length?{field501:o.genericField501||1,field502:e.scriptMappingIds.map(l=>({field1:{id:Number(l)}}))}:{field501:o.genericField501??0},s=n(63,83,"empty73","genericSlot",a),c=n(67,90,"empty77","footerSlot",{field505:[void 0,0,1].includes(o.footerField505)?e.canControllerFocus?1:0:o.footerField505});if(e.kind==="container")return[s,n(68,91,"empty78","containerNodeSlot",{...e.isolateNavigation?{isolateNavigation:!0}:{},...e.disableKeyEventPassthrough?{disableKeyEventPassthrough:!0}:{},...e.disableCursorEventPassthrough?{disableCursorEventPassthrough:!0}:{},...e.showCursor?{showCursor:!0}:{}}),c];if(e.kind==="textbox"||e.kind==="textwindow"){e.verticalAlignment==="Middle"&&r.push(`${e.name}: \u5782\u76F4\u5C45\u4E2D\u6309\u63A8\u5B9A\u503C\u5BFC\u51FA\uFF0C\u5C1A\u5F85\u5B9E\u673A\u786E\u8BA4\u3002`);let l={Left:0,Middle:1,Right:2}[e.horizontalAlignment]??0,u=Number.isFinite(o.textAlign)?Math.trunc(o.textAlign):l,f={field501:o.textField501??20,field503:o.textField503??12,color:e.fontColor>>>0,color2:e.bgColor>>>0,color3:e.outlineColor>>>0,text:{value:e.text||""},fontSize:Math.trunc(e.fontSize),minimumFontSize:Math.trunc(e.minimumFontSize),...e.adaptiveFontSize?{adaptive:1}:{},...e.enableOutline===!1?{outlineOff:1}:{},...u?{align:u}:{},verticalAlign:o.textVerticalAlign??{Top:0,Middle:1,Bottom:2}[e.verticalAlignment]??0};return e.kind==="textwindow"?((e.interactable===!1||e.showScrollBar===!1)&&r.push(`${e.name}: \u6587\u672C\u89C6\u7A97\u4EA4\u4E92/\u6EDA\u52A8\u6761\u5F00\u5173\u4EC5\u4FDD\u5B58\u5728 JSON\uFF0CGIA \u672A\u6620\u5C04\u8FD9\u4E9B\u6539\u52A8\u3002`),f.field511=o.textField511??1,f.viewFlags={field502:o.textViewField502??1,field503:o.textViewField503??1},[s,{empty81:"",field501:71,field502:94,details:xi(t,66,94,{textConfig:f})},c]):[s,n(64,84,"empty74","textConfig",f),c]}if(e.kind==="image"){let l=[0,1].includes(o.imageSlotType??0)?e.imageType==="Stretch"?1:0:o.imageSlotType;e.imageType==null&&e.imageSource==="StaticReference"&&e.imageId>100006&&r.push(`${e.name}: \u56FE\u7247\u7C7B\u578B\u968F\u7D20\u6750\u8FB9\u754C\u81EA\u52A8\u9009\u62E9\uFF0CGIA \u6309\u57FA\u7840\u5BFC\u51FA\uFF1B\u9700\u8981\u62C9\u4F38\u8BF7\u5148\u660E\u786E\u9009\u62E9\u6216\u5728 Lua \u8BBE\u7F6E imageType\u3002`),e.imageSource&&e.imageSource!=="StaticReference"&&r.push(`${e.name}: \u56FE\u7247\u6765\u6E90 ${e.imageSource} \u4EC5\u4FDD\u5B58\u5728 JSON\uFF0C\u5C1A\u672A\u6620\u5C04\u5230 GIA\uFF1B\u8BF7\u5728 Lua \u4E2D\u7528 SetImage(Enum.ImageSource.${e.imageSource}, ${e.imageId}) \u8BBE\u7F6E\u3002`);let u={Horizontal:1,Vertical:2,Radial90:3,Radial180:4,Radial360:5}[e.fillType],f=Number.isFinite(o.imageFillType)?Math.trunc(o.imageFillType):u||1;e.enableFill&&!f&&r.push(`${e.name}: \u586B\u5145\u5F62\u72B6\u539F\u59CB\u679A\u4E3E\u4E3A 0\uFF0C\u5DF2\u5173\u95ED\u5BFC\u51FA\u6587\u4EF6\u4E2D\u7684\u8FDB\u5EA6\u586B\u5145\u3002`),e.fillType==="Horizontal"&&e.fillHorizontalType!=="Left"&&r.push(`${e.name}: \u5F53\u524D\u6A2A\u5411\u586B\u5145\u65B9\u5411\u6682\u4E0D\u652F\u6301\u5199\u5165 GIA\u3002`),e.fillType==="Radial180"&&e.fillRadialType!=="Bottom"&&r.push(`${e.name}: \u5F53\u524D 180 \u5EA6\u586B\u5145\u8D77\u70B9\u6682\u4E0D\u652F\u6301\u5199\u5165 GIA\u3002`);let h={field502:o.imageField502??1,field504:o.imageField504??1,field505:o.imageField505??1,field507:o.imageField507??2,field508:Math.round(Math.max(0,Math.min(1,Number(e.fillAmount)||0))*100),border:{field501:ur(e.softEdgeWidthX,8),field502:ur(e.softEdgeWidthY,8)},field512:ur(e.horizontalSoftRange,85),field513:ur(e.verticalSoftRange,85),fillType:f,...e.enableMask?{enableMask:1}:{},...e.enableSoftEdge?{enableSoftEdge:1}:{},...e.softEdgeMode==="Pixel"?{softEdgePixel:1}:{},...e.enableFill&&f?{enableFill:1}:{},...e.reverseMaskArea?{reverseMask:1}:{}};return[s,n(73,96,"empty83","imageSlot",{field502:Number.isFinite(e.imageColor)?e.imageColor>>>0:4294967295,assetId:e.imageId>>>0,...l?{imageType:l}:{}}),n(74,97,"empty84","image",h),c]}if(e.kind==="button"){let l=(m,b)=>{let w=e[m];return w?(e.children||[]).some(y=>y.id===w)?i.get(w)||0:(r.push(`${e.name}: ${b}\u72B6\u6001\u8282\u70B9\u4E0D\u662F\u6309\u94AE\u7684\u76F4\u63A5\u5B50\u63A7\u4EF6\uFF0CGIA \u672A\u5199\u5165\u8BE5\u72B6\u6001\u3002`),0):0},u=l("unavailableChildId","\u4E0D\u53EF\u7528"),f=l("hoverChildId","\u60AC\u505C"),h=l("pressedChildId","\u6309\u4E0B"),p=l("selectedChildId","\u9009\u4E2D");return[s,n(70,93,"empty80","buttonPreset",{clickAudioId:Math.trunc(e.clickAudioId),...u?{disabledChild:u}:{},...f?{hoverChild:f}:{},...h?{pressedChild:h}:{},...p?{selectedChild:p}:{},...e.interactable?{interactable:1}:{},...e.raycastTarget?{raycastTarget:1}:{}}),c]}if(e.kind==="cursor")return[s,n(65,85,"empty75","cursorConfig",{field501:[void 0,0,1].includes(o.cursorField501)?e.raycastTarget!==!1?1:0:o.cursorField501}),c];if(e.kind==="reference"){let l=o.templateRefSlotBase64;(l||o.templateRefOuterBase64)&&r.push(`${e.name}: \u6A21\u677F\u5F15\u7528\u7684\u975E\u7A7A\u4E8C\u8FDB\u5236\u914D\u7F6E\u5C1A\u672A\u89E3\u6790\uFF0C\u5DF2\u539F\u6837\u4FDD\u7559\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u5C55\u5F00\u88AB\u5F15\u7528\u6A21\u677F\u3002`);let u=n(66,89,"empty76","templateRefSlot",l?Buffer.from(l,"base64"):Buffer.from(o.templateRefSlot??"","utf8"));return u.empty76=Buffer.from(o.templateRefOuterBase64||"","base64"),[s,u,c]}return e.kind==="grid"?((e.itemPrefabId||e.interactable===!1||e.showScrollBar===!1||e.raycastTarget===!1||e.scrollDirection!=="Vertical"||e.layoutConstraint!=="AutoWrap")&&r.push(`${e.name}: \u7F51\u683C\u5217\u8868\u9879\u6A21\u677F\u3001\u4EA4\u4E92/\u6EDA\u52A8\u6761\u5F00\u5173\u3001\u6EDA\u52A8\u65B9\u5411\u53CA\u6392\u5217\u9650\u5236\u4EC5\u4FDD\u5B58\u5728 JSON\uFF0CGIA \u672A\u6620\u5C04\u8FD9\u4E9B\u6539\u52A8\u3002`),[s,n(69,92,"empty79","gridView",{field501:o.gridField501??1,cellSize:{field501:e.cellSizeX,field502:e.cellSizeY},gap:{field501:e.spacingX,field502:e.spacingY},padding1:{field501:e.padding1X,field502:e.padding1Y},padding2:{field501:e.padding2X,field502:e.padding2Y},field507:o.gridField507??1,field508:o.gridField508??1,field509:o.gridField509??1,field511:o.gridField511??5,field512:o.gridField512??1}),c]):e.kind==="keyhint"?[s,n(72,95,"empty82","keyHint",{field501:Number.isFinite(o.keyHintField501)?Math.trunc(o.keyHintField501):e.controllerKeyCode??1,field502:Number.isFinite(o.keyHintField502)?Math.trunc(o.keyHintField502):e.keyboardKeyCode??1}),c]:e.kind==="animation"?[s,n(75,98,"empty85","effectSlot",o.effectSlot??""),c]:e.kind==="fullscreen"?[s,n(76,99,"empty86","fullscreenEffectSlot",o.fullscreenEffectSlot??""),c]:(r.push(`${e.name}: ${e.kind} \u4E0D\u662F\u5DF2\u77E5 GIA \u63A7\u4EF6\u7C7B\u578B\uFF0C\u5DF2\u4EC5\u5199\u516C\u5171\u53D8\u6362\u3002`),[s,c])}function _u(e,t){if(t)return 1;if(!Te(e.giaInfoIndex))throw new Error(`${e.name}: \u7F3A\u5C11\u5408\u6CD5\u7684\u5BA2\u6237\u7AEF\u8D44\u4EA7\u7F16\u53F7`);return e.giaInfoIndex}function Tu(e,t,i){let r=Array.isArray(e.giaRelatedGuids)?e.giaRelatedGuids.filter(n=>Number.isSafeInteger(n)&&n>0&&n<=2147483647):[];return r.length?r:(t.push(`${e.name}: \u65B0${i}\u5199\u5165\u663E\u5F0F\u7A7A Info.related\uFF0C\u907F\u514D\u8DE8\u6C99\u7BB1\u590D\u7528\u4F34\u751F\u8D44\u6E90 GUID \u4EA7\u751F\u65E0\u6CD5\u52A0\u8F7D\u7684\u7D22\u5F15\u3002`),[])}function _n(e,t){let i=String(e.meta?.giaFilePath||"").trim();if(/^\d+-\d+-\d+-\\.+\.gia$/iu.test(i))return i;let r=(l,u)=>Number.isSafeInteger(Number(l))&&Number(l)>0?Number(l):u,n=r(e.meta?.giaOwnerUid,114514),o=r(e.meta?.giaTimestamp,Math.floor(Date.now()/1e3)),a=r(e.meta?.giaFileId,t?1073741829:1073741830),s=t?"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868.gia":"\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F-\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668.gia",c=String(e.meta?.giaFileName||s).replace(/[\\/:*?"<>|]/gu,"-").replace(/\.gia$/iu,"").trim()||s.replace(/\.gia$/iu,"");return`${n}-${o}-${a}-\\${c}.gia`}function dr(e,t,i,r,n,o=!1,a=!1,s=a,c=!1){let l=i.get(e.id),f=(c?[...e.children||[]].reverse():e.children||[]).map(m=>i.get(m.id)),h=o?r:f,p=Eu(e,l,o);if(o){let m=e.children?.[0];m&&p.push({empty72:"",field501:62,field502:82,details:xi(l,64,82,{rootChildRef:{guid:i.get(m.id)}})})}else p.push(...Au(e,l,i,n));return{id:An(l),relatedIds:h.map(m=>An(m)),name:e.name,which:o?21:a?70:15,ui:{content:{guid:l,info:[{guid:{value:l},field501:1,field502:5},...o||s?[{index:{value:_u(e,o)},field501:2,field502:6}]:[],...o||a?[{related:{value:Tu(e,n,o?"\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F":"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F")},field501:4,field502:4}]:[]],children:o?[]:f,parent:t&&t.kind!=="server-container"?i.get(t.id):0,data:p}}}}function Pu(e,t){let i=new Map;for(let r of e||[]){if(!r.controlId||!(t===fr?r.controlAsset===fr:r.controlAsset!==fr))continue;let o=i.get(r.controlId)||[];o.push(r.guid),i.set(r.controlId,o)}return i}function Ga(e,t,i,r){let n=Pu(t,i),o=new Map;te(e.root,a=>{n.has(a.id)&&(o.set(a,a.scriptMappingIds),a.scriptMappingIds=n.get(a.id))});try{return r()}finally{for(let[a,s]of o)s===void 0?delete a.scriptMappingIds:a.scriptMappingIds=s}}function Tn(e){let t=Number(e.meta?.giaModeFlag);return Number.isSafeInteger(t)&&t>=0?{modeFlag:t}:{}}function Pn(e){let t=e.meta?.gameVersion;return!t||t==="7.0.50"?Ji:t}function Va(e,t,i,r,n=[]){let o=Xt(e,!0),a=o.filter(({parent:u})=>u?.kind==="server-container");if(!a.length)throw new Error("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868\u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u6A21\u677F");let s=new Set(a.map(({node:u})=>u.id)),c=o.filter(({node:u})=>!s.has(u.id)),l=o.map(({node:u})=>t.get(u.id));return Ga(e,n,fr,()=>({graph:a.map(({node:u,parent:f})=>dr(u,f,t,l,i,!1,!0,!0,!0)),accessories:c.map(({node:u,parent:f})=>dr(u,f,t,l,i,!1,!1,!0,!0)),filePath:r||_n(e,!0),gameVersion:Pn(e),...Tn(e)}))}function La(e,t,i,r,n){let o=Xt(e),a=[o[0],...o.slice(1).reverse()],s=a.map(({node:c})=>t.get(c.id));return Ga(e,i.scripts,wu,()=>({graph:[dr(e.root,null,t,s,r,!0,!1,!1,!0),...i.units||[]],accessories:a.map(({node:c,parent:l})=>dr(c,l,t,s,r,!1,!1,!1,!0)),filePath:n||_n(e,!1),gameVersion:Pn(e),...Tn(e)}))}function Ba(e,t){let i=Rn(e),r=t(i);if(!r.valid)throw new Error(`GIA compatibility validation failed:
|
|
104
110
|
${r.errors.join(`
|
|
105
|
-
`)}`);return i}function
|
|
111
|
+
`)}`);return i}function Ha(e,t={}){te(e.root,bt);let i=[];Ke(e,{warnings:i});let r=Ii(H(e)),n=e.meta?.assetType==="client-control-template",o;if(n)o=Va(e,r,i,void 0,t.scripts||[]);else{let s=Mn(t.scripts||[],new Set(r.values()));i.push(...s.warnings),o=La(e,r,s,i)}return{buffer:Ba(o,n?Fn:On),warnings:[...new Set(i)]}}function Ya(e,t,i={}){te(e.root,bt),t&&te(t.root,bt);let r=["\u6574\u5408\u5305\u628A\u670D\u52A1\u7AEF UIControlGroup \u4E0E\u5BA2\u6237\u7AEF UIControlTemplate \u5E76\u6392\u5199\u5165\u540C\u4E00 GIA \u7684 Root.graph\uFF1B\u5BFC\u5165\u65F6\u62C6\u56DE\u4E24\u7C7B\u8D44\u4EA7\uFF0C\u6A21\u677F\u8FB9\u754C\u3001\u811A\u672C\u6620\u5C04\u4E0E\u63A7\u4EF6\u6302\u8F7D\u5173\u7CFB\u4F1A\u4FDD\u7559\u3002"];t&&Ke(t,{warnings:r});let n=t?.root?.children||[];n.length||r.push("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u4E3A\u7A7A\uFF0C\u6574\u5408\u5305\u53EA\u5305\u542B\u670D\u52A1\u7AEF\u63A7\u4EF6\u4E0E\u811A\u672C\u3002");let o=new Set,a=H(e),s=t?H(t):null,c=Ii(a,o),l=Mn(i.scripts||[],o);r.push(...l.warnings.filter(w=>w!==Ua));let u=String(i.fileName||`${a.meta?.name||"\u6574\u5408\u5305"} \xB7 \u6574\u5408\u5305.gia`),f=_n({...a,meta:{...a.meta,giaFileName:u}},!1),h=La(a,c,l,r,f),p={graph:[],accessories:[]};if(n.length&&s){let w=Ii({...s,meta:{...s.meta,assetType:"client-control-template"}},o);p=Va(s,w,r,f,l.scripts)}let m={graph:[...h.graph,...p.graph],accessories:[...h.accessories,...p.accessories],filePath:f,gameVersion:Pn({meta:{gameVersion:e.meta?.gameVersion||t?.meta?.gameVersion}}),...Tn(e)};return{buffer:Ba(m,On),warnings:[...new Set(r)]}}var It=69,ja=30,Ua="\u811A\u672C\u6302\u8F7D\u5173\u7CFB\u4E0D\u8FDB\u5165 GIA\uFF1A\u5B98\u65B9 script.gia \u53EA\u542B\u6620\u5C04\uFF08ID/\u540D\u79F0/\u8DEF\u5F84/\u6E90\u7801\uFF09\uFF0C\u5BFC\u5165\u540E\u9700\u91CD\u65B0\u6302\u8F7D\u3002";function Ru(e){return(String(e.path||"").replace(/\\/g,"/").split("/").pop()||"").replace(/\.lua$/iu,"")||`\u811A\u672C${e.id||""}`}function Rn(e){let t=Fe.verify(e);if(t)throw new Error(`GIA encode validation failed: ${t}`);let i=Fe.encode(Fe.create(e)).finish(),r=Buffer.alloc(ct+i.length+En);return r.writeUInt32BE(r.length-4,0),r.writeUInt32BE(1,4),r.writeUInt32BE(Fa,8),r.writeUInt32BE(3,12),r.writeUInt32BE(i.length,16),Buffer.from(i).copy(r,ct),r.writeUInt32BE(Oa,ct+i.length),r}function Mn(e,t=new Set){let i=(e||[]).filter(a=>a.path||a.source).map(a=>({...a})),r=[];for(let a of i)sn(a.guid,a.path||a.id);for(let a of i){let s=Number(a.guid);_e(s)&&!t.has(s)?(t.add(s),a.guid=s):r.push(a)}for(let a of r){let s=ot(t);t.add(s),a.guid=s}let n=[];return(e||[]).some(a=>a.controlId)&&n.push(Ua),{units:i.map(a=>{let s=Ru(a),c=String(a.path||"").replace(/\\/g,"/"),l=/\.lua$/iu.test(c)?c:`${c||s}.lua`,u={id:a.guid,name:s,filePath:l};return String(a.source||"")&&(u.source=String(a.source)),{id:{class:ja,id:a.guid},name:s,which:It,script:{mapping:u}}}),warnings:n,scripts:i}}function Xa(e){let t=Mn(e);if(!t.units.length)throw new Error("\u6CA1\u6709\u53EF\u5BFC\u51FA\u7684 Lua \u811A\u672C\uFF0C\u8BF7\u5148\u5728\u201CLua \u811A\u672C\u201D\u9875\u521B\u5EFA");let i={graph:t.units,filePath:`114514-${Math.floor(Date.now()/1e3)}-1073741832-\\script.gia`,gameVersion:"7.0.51"},r=Rn(i),n=Mu(r);if(!n.valid)throw new Error(`GIA compatibility validation failed:
|
|
106
112
|
${n.errors.join(`
|
|
107
|
-
`)}`);return{buffer:r,warnings:[...new Set(t.warnings)]}}function an(e){return Fe.toObject(Fe.decode(qi(e)),{longs:Number,enums:Number,bytes:Buffer,defaults:!1,arrays:!0,objects:!0})}function oa(e){try{let i=an(e).graph||[];return i.length>0&&i.every(r=>Number(r.which)===$t)}catch{return!1}}function aa(e){let t=(e.graph||[]).filter(n=>Number(n.which)===$t),i=[],r=t.map((n,o)=>{let a=n.script?.mapping||{},s=Number(n.id?.id)||0;s<=0&&i.push(`\u7B2C ${o+1} \u6761\u811A\u672C\u6620\u5C04\u7F3A\u5C11 GraphUnit.id.id\uFF0C\u5DF2\u6309 0 \u5904\u7406\uFF08\u5BFC\u51FA\u65F6\u4F1A\u91CD\u65B0\u5206\u914D\uFF09\u3002`);let c=Number(a.id)||0;return c&&c!==s&&i.push(`\u7B2C ${o+1} \u6761\u811A\u672C\u6620\u5C04 id(${c}) \u4E0E\u5355\u5143 id(${s}) \u4E0D\u4E00\u81F4\uFF0C\u4EE5\u5355\u5143 id \u4E3A\u51C6\u3002`),{guid:s,path:String(a.filePath||""),source:String(a.source||"")}});for(let[n,o]of r.entries())o.path&&!/\.lua$/iu.test(o.path)&&i.push(`\u7B2C ${n+1} \u6761\u811A\u672C\u6620\u5C04 file_path \u7F3A\u5C11 .lua \u540E\u7F00\uFF08${o.path}\uFF09\uFF0C\u771F\u673A\u53EF\u80FD\u62D2\u7EDD\u5BFC\u5165\uFF1B\u6A21\u62DF\u5668\u5185\u6309\u5F52\u4E00\u5316\u8DEF\u5F84\u7167\u5E38 require\u3002`);return{scripts:r,warnings:i}}function sa(e){let t=an(e),i=aa(t);if(!i.scripts.length)throw new Error("GIA \u5185\u6CA1\u6709\u811A\u672C\u6620\u5C04\u5355\u5143\uFF08which=69\uFF09");return{scripts:i.scripts,warnings:i.warnings,metadata:{assetType:"lua-script"}}}function bc(e){let t=[],i;try{i=an(e)}catch(n){return{valid:!1,errors:[n?.message||String(n)],scriptCount:0}}let r=i.graph||[];return r.length||t.push("Root.graph \u4E3A\u7A7A"),(i.accessories||[]).length&&t.push("script.gia \u4E0D\u5E94\u5305\u542B accessories"),r.forEach((n,o)=>{let a=`\u5355\u5143 ${o+1}`;Number(n.which)!==$t&&t.push(`${a}: which \u5E94\u4E3A 69\uFF0C\u5B9E\u9645 ${n.which}`),Number(n.id?.class)!==ia&&t.push(`${a}: id.class \u5E94\u4E3A 30\uFF0C\u5B9E\u9645 ${n.id?.class}`),Number(n.id?.type??0)!==0&&t.push(`${a}: id.type \u5E94\u7F3A\u7701`);let s=n.script?.mapping;if(!s){t.push(`${a}: \u7F3A\u5C11 field35 ScriptMappingWrapper`);return}Number(n.id?.id)<=0&&t.push(`${a}: GraphUnit.id.id \u975E\u6CD5`),Number(s.id)!==Number(n.id?.id)&&t.push(`${a}: mapping.id \u5E94\u7B49\u4E8E GraphUnit.id.id`),String(s.name||"")!==String(n.name||"")&&t.push(`${a}: mapping.name \u5E94\u7B49\u4E8E GraphUnit.name`),String(s.filePath||"").trim()?/\.lua$/iu.test(String(s.filePath))||t.push(`${a}: file_path \u5E94\u4EE5 .lua \u7ED3\u5C3E\uFF08\u5B98\u65B9 script.gia \u6837\u672C\u5747\u4E3A \u540D\u79F0.lua\uFF0C\u771F\u673A require \u65F6\u624D\u53BB\u6269\u5C55\u540D\uFF09`):t.push(`${a}: file_path \u4E3A\u7A7A`)}),{valid:t.length===0,errors:t,scriptCount:r.length}}function qi(e){let t=Buffer.isBuffer(e)?e:Buffer.from(e);if(t.length<nt+Qr)throw new Error("GIA \u6587\u4EF6\u8FC7\u77ED");if(t.readUInt32BE(4)!==1||t.readUInt32BE(8)!==Uo||t.readUInt32BE(12)!==3)throw new Error("\u4E0D\u662F\u53D7\u652F\u6301\u7684 GIA v1 \u6587\u4EF6");let i=t.readUInt32BE(16);if(i!==t.length-nt-Qr)throw new Error("GIA payload \u957F\u5EA6\u4E0D\u4E00\u81F4");if(t.readUInt32BE(nt+i)!==Lo)throw new Error("GIA \u5C3E\u6807\u8BB0\u65E0\u6548");return t.subarray(nt,nt+i)}function me(e,t){return e.ui?.content?.data?.find(i=>i.details?.[t])?.details?.[t]||null}function vc(e){let t=me(e,"transform")?.multiPlatform,i={};for(let n of t?.platforms||[]){let o=sc[n.platformType||0],a=n.transform||{};i[o]={scale:a.scale?{x:a.scale.x??0,y:a.scale.y??0,z:a.scale.z??0}:{x:1,y:1,z:1},rotation:{x:a.field508?.x??0,y:a.field508?.y??0,z:a.field508?.z??0},anchorMin:{x:a.anchorMin?.x??0,y:a.anchorMin?.y??0},anchorMax:{x:a.anchorMax?.x??0,y:a.anchorMax?.y??0},offset:{x:a.offset?.x??0,y:a.offset?.y??0},size:{x:a.size?.x??0,y:a.size?.y??0},pivot:a.pivot?{x:a.pivot.x??0,y:a.pivot.y??0}:{x:.5,y:.5}}}let r=i.KEYBOARD||i[Object.keys(i)[0]];if(!r)throw new Error(`GIA \u63A7\u4EF6 ${e.name||e.id?.id} \u7F3A\u5C11\u591A\u5E73\u53F0\u53D8\u6362`);for(let n of ue)i[n]||(i[n]=structuredClone(r));return i}function Ki(e){let t=e.ui?.content?.data||[];return t.some(i=>i.details?.textConfig)?t.some(i=>i.field501===71)?"textwindow":"textbox":t.some(i=>i.details?.cursorConfig)?"cursor":t.some(i=>Object.hasOwn(i.details||{},"templateRefSlot"))?"reference":t.some(i=>i.details?.gridView)?"grid":t.some(i=>i.details?.buttonPreset)?"button":t.some(i=>i.details?.keyHint)?"keyhint":t.some(i=>i.details?.image||i.details?.imageSlot)?"image":t.some(i=>Object.hasOwn(i.details||{},"effectSlot"))?"animation":t.some(i=>Object.hasOwn(i.details||{},"fullscreenEffectSlot"))?"fullscreen":(t.some(i=>Object.hasOwn(i.details||{},"containerNodeSlot")),"container")}function Ho(e,{reverseSiblings:t=!1,idOffset:i=0}={}){if(!e.length)return{nodes:new Map,rootCandidates:[],warnings:[]};let r=new Map(e.map((l,u)=>[l.id?.id,`n${i+u+1}`])),n=new Map,o=new Map,a=[];for(let l of e){let u=Ki(l),f=me(l,"textConfig"),h=me(l,"imageSlot"),p=me(l,"image"),m=me(l,"buttonPreset"),g=me(l,"gridView"),v=me(l,"genericSlot"),C=me(l,"footerSlot"),w=me(l,"cursorConfig"),P=me(l,"keyHint"),M=me(l,"containerNodeSlot"),V=me(l,"templateRefSlot"),H=me(l,"effectSlot"),B=me(l,"fullscreenEffectSlot"),$=q(u,{id:r.get(l.id?.id),guid:l.id?.id||0,giaInfoIndex:(l.ui?.content?.info||[]).find(b=>b.field501===2&&b.field502===6)?.index?.value,giaRelatedGuids:(l.ui?.content?.info||[]).find(b=>b.field501===4&&b.field502===4)?.related?.value||[],name:l.name||u,visible:me(l,"field14")?.field17?.initiallyHidden!==!0,active:me(l,"field14")?.initiallyInactive!==!0,canControllerFocus:C?.field505===1,scriptMappingIds:(v?.field502||[]).map(b=>Number(b?.field1?.id)).filter(b=>Number.isSafeInteger(b)&&b>0),transformByPlatform:vc(l),syncAllDevices:me(l,"transform")?.multiPlatform?.field504===1,giaRaw:{genericField501:v?.field501??0,footerField505:C?.field505??0,...u==="textbox"||u==="textwindow"?{textField501:f?.field501??20,textField503:f?.field503??12,textAlign:f?.align??0,...[void 0,0,1,2].includes(f?.verticalAlign)?{}:{textVerticalAlign:f.verticalAlign},...u==="textwindow"?{textField511:f?.field511??1,textViewField502:f?.viewFlags?.field502??1,textViewField503:f?.viewFlags?.field503??1}:{}}:{},...u==="cursor"?{cursorField501:w?.field501??0}:{},...u==="reference"?{templateRefSlot:V??""}:{},...u==="grid"?{gridField501:g?.field501??1,gridField507:g?.field507??1,gridField508:g?.field508??1,gridField509:g?.field509??1,gridField511:g?.field511??5,gridField512:g?.field512??1}:{},...u==="keyhint"?{keyHintField501:P?.field501??1,keyHintField502:P?.field502??1}:{},...u==="image"?{imageSlotType:h?.imageType??0,imageField502:p?.field502??1,imageField504:p?.field504??1,imageField505:p?.field505??1,imageField507:p?.field507??2,imageFillType:p?.fillType??1}:{},...u==="animation"?{effectSlot:H??""}:{},...u==="fullscreen"?{fullscreenEffectSlot:B??""}:{}},...u==="container"?{isolateNavigation:M?.isolateNavigation===!0,disableKeyEventPassthrough:M?.disableKeyEventPassthrough===!0,disableCursorEventPassthrough:M?.disableCursorEventPassthrough===!0,showCursor:M?.showCursor===!0}:{},...u==="cursor"?{raycastTarget:w?.field501===1}:{},...u==="textbox"||u==="textwindow"?{text:f?.text?.value??"",fontSize:f?.fontSize??20,minimumFontSize:f?.minimumFontSize??20,adaptiveFontSize:f?.adaptive===1,fontColor:f?.color??4294967295,bgColor:f?.color2??0,enableOutline:f?.outlineOff!==1,outlineColor:f?.color3??858993459,horizontalAlignment:f?.align===1?"Middle":f?.align===2?"Right":"Left",verticalAlignment:{0:"Top",1:"Middle",2:"Bottom"}[f?.verticalAlign??0]||"Top",...u==="textwindow"?{interactable:!0,showScrollBar:!0}:{}}:{},...u==="image"?{imageSource:"StaticReference",imageId:h?.assetId??0,imageType:h?.imageType===1?"Stretch":"Basic",imageColor:Number.isFinite(h?.field502)?h.field502>>>0:4294967295,enableMask:p?.enableMask===1,enableSoftEdge:p?.enableSoftEdge===1,enableFill:p?.enableFill===1,softEdgeMode:p?.softEdgePixel===1?"Pixel":"Percentage",softEdgeWidthX:p?.border?.field501??8,softEdgeWidthY:p?.border?.field502??8,horizontalSoftRange:p?.field512??85,verticalSoftRange:p?.field513??85,fillType:{1:"Horizontal",2:"Vertical",3:"Radial90",4:"Radial180",5:"Radial360"}[p?.fillType]||"Horizontal",fillAmount:Number.isFinite(p?.field508)?Math.max(0,Math.min(1,p.field508/100)):p?.enableFill===1?0:1,reverseMaskArea:p?.reverseMask===1}:{},...u==="button"?{interactable:m?.interactable===1,raycastTarget:m?.raycastTarget===1,clickAudioId:m?.clickAudioId??50888}:{},...u==="grid"?{cellSizeX:g?.cellSize?.field501??50,cellSizeY:g?.cellSize?.field502??50,spacingX:g?.gap?.field501??8,spacingY:g?.gap?.field502??8,padding1X:g?.padding1?.field501??20,padding1Y:g?.padding1?.field502??20,padding2X:g?.padding2?.field501??20,padding2Y:g?.padding2?.field502??20,previewCount:g?.field511??5}:{},...u==="reference"?{referencedPrefabId:V??""}:{},...u==="keyhint"?{keyboardKeyCode:P?.field502??null,controllerKeyCode:P?.field501??null}:{},...u==="animation"?{animationId:H??""}:{},...u==="fullscreen"?{animationId:B??""}:{}});n.set(l.id?.id,$),(u==="textbox"||u==="textwindow")&&![void 0,0,1,2].includes(f?.align)&&a.push(`${$.name}: \u6C34\u5E73\u5BF9\u9F50\u679A\u4E3E ${f.align} \u7684\u542B\u4E49\u672A\u77E5\uFF0C\u5DF2\u539F\u6837\u4FDD\u7559\u3002`),(u==="textbox"||u==="textwindow")&&![void 0,0,1,2].includes(f?.verticalAlign)&&a.push(`${$.name}: \u5782\u76F4\u5BF9\u9F50\u679A\u4E3E ${f.verticalAlign} \u7684\u542B\u4E49\u672A\u77E5\uFF0C\u5DF2\u539F\u6837\u4FDD\u7559\u3002`),u==="image"&&![void 0,0,1,2,3,4,5].includes(p?.fillType)&&a.push(`${$.name}: \u586B\u5145\u5F62\u72B6\u679A\u4E3E ${p.fillType} \u672A\u8BC6\u522B\uFF0C\u5DF2\u4FDD\u7559\u539F\u503C\u3002`),u==="button"&&o.set($.id,{unavailableChildId:m?.disabledChild,hoverChildId:m?.hoverChild,pressedChildId:m?.pressedChild,selectedChildId:m?.selectedChild})}let s=[],c=new Set;for(let l of e){let u=n.get(l.id?.id),f=(l.ui?.content?.children||[]).map(h=>n.get(h)).filter(Boolean);if(f.length){u.children=t?f.slice().reverse():f;for(let h of f)c.add(h.id)}}for(let l of e){let u=n.get(l.id?.id),f=l.ui?.content?.parent||0,h=n.get(f);h?c.has(u.id)||(t?h.children.unshift(u):h.children.push(u)):s.push(u)}for(let[l,u]of o){let f=[...n.values()].find(h=>h.id===l);for(let[h,p]of Object.entries(u))f[h]=r.get(p)||null}return{nodes:n,rootCandidates:s,warnings:a}}function la(e){let t=qi(e),i=Fe.toObject(Fe.decode(t),{longs:Number,enums:Number,bytes:Buffer,defaults:!1,arrays:!0,objects:!0}),r=i.graph||[];if(!r.some(m=>m.ui?.content))throw new Error("GIA \u4E0D\u542B\u53EF\u8BC6\u522B\u7684 UIControlGroup \u4E3B\u56FE");let n=r.find(m=>m.which===21)||null,o=r.filter(m=>Number(m.which)===70),a=i.accessories||[],s=new Set((n?.relatedIds||[]).map(m=>m.id||0)),c=n?s.size?a.filter(m=>s.has(m.id?.id||0)):a:[],l=o.length?[...o,...a.filter(m=>!s.has(m.id?.id||0))]:n?[]:[...r,...a];if(!c.length&&!l.length)throw new Error("GIA \u4E0D\u542B\u5BA2\u6237\u7AEF\u63A7\u4EF6");let u=["GIA \u5BFC\u5165\u4E3A\u5DF2\u9A8C\u8BC1 UI \u5B57\u6BB5\u7684\u8BED\u4E49\u5BFC\u5165\uFF1B\u672A\u77E5 protobuf \u5B57\u6BB5\u4E0D\u4F1A\u8FDB\u5165 Authoring JSON\u3002"],f=aa(i);u.push(...f.warnings);let h=null,p=null;if(c.length){let m=Ho(c,{reverseSiblings:!0,idOffset:0});u.push(...m.warnings);let g=m.rootCandidates.find(C=>C.kind==="container")||m.rootCandidates[0];if(!g)throw new Error("GIA \u672A\u627E\u5230\u5BA2\u6237\u7AEF\u6839\u63A7\u4EF6");let v=q("server-container",{id:"sc1",guid:n?.id?.id||0,name:n?.name||"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668",giaRelatedGuids:(n?.ui?.content?.info||[]).find(C=>C.field501===4&&C.field502===4)?.related?.value||[]});v.children=[g],m.rootCandidates.length>1&&u.push(`\u68C0\u6D4B\u5230 ${m.rootCandidates.length} \u4E2A\u65E0\u7236\u8282\u70B9\u63A7\u4EF6\uFF0C\u4EC5\u5BFC\u5165\u4EE5\u201C${g.name}\u201D\u4E3A\u6839\u7684\u6811\u3002`),h={version:1,layoutSchemaVersion:ve,meta:{name:n?.name||"\u5BFC\u5165\u7684\u754C\u9762\u63A7\u4EF6\u7EC4",assetType:"server-control-template",sourceFormat:"gia",sourceFile:"",gameVersion:i.gameVersion||"",giaFilePath:i.filePath||"",...Number.isSafeInteger(Number(i.modeFlag))?{giaModeFlag:Number(i.modeFlag)}:{}},canvasId:"pc-16-9",selectedId:g.id,script:{controlId:g.id,path:"",source:""},root:v}}if(l.length){let m=Ho(l,{reverseSiblings:!1,idOffset:1e3});if(u.push(...m.warnings),!m.rootCandidates.length)throw new Error("GIA \u672A\u627E\u5230\u5BA2\u6237\u7AEF\u6A21\u677F");let g=q("server-container",{id:"sc1",guid:0,name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"});g.children=m.rootCandidates,p={version:1,layoutSchemaVersion:ve,meta:{name:m.rootCandidates.length===1?m.rootCandidates[0].name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868",assetType:"client-control-template",sourceFormat:"gia",sourceFile:"",gameVersion:i.gameVersion||"",giaFilePath:i.filePath||"",...Number.isSafeInteger(Number(i.modeFlag))?{giaModeFlag:Number(i.modeFlag)}:{}},canvasId:"pc-16-9",selectedId:m.rootCandidates[0].id,script:{controlId:m.rootCandidates[0].id,path:"",source:""},root:g},Xe(p,{warnings:u});for(let v of m.rootCandidates)Z(v,C=>C.children.reverse());h||(h=p)}return{project:h,clientProject:p&&h!==p?p:void 0,scripts:f.scripts,warnings:u,metadata:{gameVersion:i.gameVersion||"",filePath:i.filePath||"",...Number.isSafeInteger(Number(i.modeFlag))?{modeFlag:Number(i.modeFlag)}:{},combined:!!(n&&o.length)}}}function sn(e){let t=qi(e),i=Fe.toObject(Fe.decode(t),{longs:Number,enums:Number,defaults:!1,arrays:!0,objects:!0}),r=i.graph||[],n=i.accessories||[],o=[],a=(p,m)=>p!=null&&Object.prototype.hasOwnProperty.call(p,m),s=new Map,c=[];/^\d+-\d+-\d+-\\.+\.gia$/iu.test(i.filePath||"")||o.push(`Root.filePath \u4E0D\u662F UID-TIME-ID-\\\u6587\u4EF6\u540D.gia\uFF1A${i.filePath||"<missing>"}`);let l=r.filter(p=>p.which===70).map(p=>{let m=Ki(p),g=p.ui?.content?.info||[],v=g.find(P=>P.field501===2&&P.field502===6)?.index?.value,C=g.find(P=>P.field501===4&&P.field502===4),w=C?.related?.value||[];return Pe(v)||o.push(`${p.name}: Info.index=${v??"<missing>"}\uFF0C\u5FC5\u987B\u662F\u6B63\u6574\u6570`),C||o.push(`${p.name}: \u9876\u5C42 UIControlTemplate \u7F3A\u5C11 Info.related \u8BB0\u5F55`),{id:p.id?.id||0,name:p.name||"",kind:m,actualIndex:v,relatedPresent:!!C,relatedGuids:w}}),u=new Map;for(let p of l){if(!Pe(p.actualIndex))continue;let m=u.get(p.actualIndex);m?o.push(`${p.name}: \u72EC\u7ACB\u6A21\u677F\u8D44\u4EA7\u7F16\u53F7 ${p.actualIndex} \u4E0E ${m.name} \u91CD\u590D`):u.set(p.actualIndex,p)}l.length||o.push("Root.graph \u4E0D\u542B UIControlTemplate(70)");let f=0,h=0;for(let p of[...r,...n]){if(!p.ui?.content)continue;let m=p.id?.id||0,g=p.ui.content,v=Ki(p),C=r.includes(p)&&p.which===70,w=`${p.name||"<unnamed>"}(${m||"<missing-guid>"})`;!Number.isSafeInteger(m)||m<=0||m>2147483647?o.push(`${w}: GraphUnit GUID \u975E\u6CD5`):s.has(m)?o.push(`${w}: GUID \u4E0E ${s.get(m).name||"<unnamed>"} \u91CD\u590D`):s.set(m,p),(p.id?.class!==1||p.id?.type!==8)&&o.push(`${w}: GraphUnit.id \u5FC5\u987B\u4E3A class=1,type=8`),g.guid!==m&&o.push(`${w}: content.guid=${g.guid??"<missing>"} \u4E0E GraphUnit.id.id \u4E0D\u4E00\u81F4`),C&&p.which!==70&&o.push(`${w}: \u6A21\u677F\u6839 which \u5FC5\u987B\u4E3A UIControlTemplate(70)`),!C&&p.which!==15&&o.push(`${w}: \u9644\u4EF6\u63A7\u4EF6 which \u5FC5\u987B\u4E3A UIControl(15)`);let P=g.info||[],M=P.find(_=>_.field501===1&&_.field502===5),V=P.find(_=>_.field501===2&&_.field502===6);M?.guid?.value!==m&&o.push(`${w}: Info.self GUID \u7F3A\u5931\u6216\u4E0E\u81EA\u8EAB\u4E0D\u4E00\u81F4`),Pe(V?.index?.value)||o.push(`${w}: Info.index=${V?.index?.value??"<missing>"}\uFF0C\u5FC5\u987B\u662F\u6B63\u6574\u6570`);let H=P.find(_=>_.field501===4&&_.field502===4);C&&!H&&o.push(`${w}: \u9876\u5C42\u6A21\u677F\u7F3A\u5C11 Info.related \u8BB0\u5F55`),!C&&H&&o.push(`${w}: \u9644\u4EF6\u63A7\u4EF6\u4E0D\u5E94\u5199 Info.related`);let B=Wo[v],$=g.data||[],b=$.map(_=>`${_.field501}/${_.field502}`),A=B?.map(([_])=>_)||[];B?JSON.stringify(b)!==JSON.stringify(A)&&o.push(`${w}: Data \u69FD\u4F4D\u987A\u5E8F ${b.join(",")}\uFF0C\u5E94\u4E3A ${A.join(",")}`):o.push(`${w}: \u672A\u77E5\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7C7B\u578B ${v}`);for(let _=0;_<Math.min($.length,B?.length||0);_+=1){let G=$[_],[j,ie,L]=B[_];if(a(G,ie)||o.push(`${w}: Data ${j} \u7F3A\u5C11 ${ie} \u5206\u652F`),!L)continue;a(G.details,L)||o.push(`${w}: Details ${j} \u7F3A\u5C11 ${L} \u5206\u652F`);let te=Ko[j];(G.details?.field501!==te||G.details?.field502!==G.field502||G.details?.field503!==1)&&o.push(`${w}: Details ${j} \u6807\u8BB0\u5E94\u4E3A ${te}/${G.field502}/1`);let Me=G.details?.nodeRef;(Me?.class!==1||Me?.type!==8||Me?.id!==m)&&o.push(`${w}: Details ${j} node_ref \u672A\u6307\u5411\u81EA\u8EAB`)}let x=(p.ui.content.data||[]).find(_=>_.field501===4&&_.field502===86);x&&(a(x.field14,"field17")?f+=1:o.push(`${w}: \u7C7B\u578B Data \u7F3A\u5C11\u663E\u5F0F Field14.field17 \u7A7A\u4E32`),a(x.details?.field14,"field17")?f+=1:o.push(`${w}: \u7C7B\u578B Details \u7F3A\u5C11\u663E\u5F0F Field14.field17 \u7A7A\u4E32`));let k=(p.ui.content.data||[]).find(_=>_.details?.transform)?.details?.transform?.multiPlatform?.platforms||[];k.length!==4&&o.push(`${w}: \u591A\u5E73\u53F0\u53D8\u6362\u6570\u91CF=${k.length}\uFF0C\u5E94\u4E3A 4`);let F=k.map(_=>_.platformType||0);JSON.stringify(F)!==JSON.stringify([0,1,2,3])&&o.push(`${w}: \u5E73\u53F0\u987A\u5E8F ${F.join(",")}\uFF0C\u5E94\u4E3A 0,1,2,3`);let E=(p.ui.content.data||[]).find(_=>_.details?.transform)?.details?.transform;E?.multiPlatform?.field502!==fi[v]&&o.push(`${w}: \u53D8\u6362 preset=${E?.multiPlatform?.field502??"<missing>"}\uFF0C${v} \u5E94\u4E3A ${fi[v]}`);for(let _ of k)a(_.transform,"field508")?h+=1:o.push(`${w}: RectTransform \u7F3A\u5C11\u663E\u5F0F field508 \u7A7A\u4E32`);c.push({id:m,name:p.name||"",kind:v,template:C,parent:g.parent||0,children:[...g.children||[]],relatedIds:(p.relatedIds||[]).map(_=>_.id||0),dataSignatures:b})}for(let p of c){let m=`${p.name||"<unnamed>"}(${p.id})`;if(JSON.stringify(p.relatedIds)!==JSON.stringify(p.children)&&o.push(`${m}: GraphUnit.relatedIds \u4E0E content.children \u4E0D\u4E00\u81F4`),p.template&&p.parent&&o.push(`${m}: \u9876\u5C42\u6A21\u677F\u4E0D\u5E94\u6709 parent`),!p.template){let g=s.get(p.parent);g?(g.ui?.content?.children||[]).includes(p.id)||o.push(`${m}: \u7236\u63A7\u4EF6 children \u672A\u53CD\u5411\u5305\u542B\u81EA\u8EAB`):o.push(`${m}: parent=${p.parent||"<missing>"} \u4E0D\u5B58\u5728`)}for(let g of p.children){let v=s.get(g);v?(v.ui?.content?.parent||0)!==p.id&&o.push(`${m}: child=${g} \u7684 parent \u672A\u6307\u56DE\u81EA\u8EAB`):o.push(`${m}: child=${g} \u4E0D\u5B58\u5728`)}}return{valid:o.length===0,errors:o,filePath:i.filePath||"",gameVersion:i.gameVersion||"",templateCount:l.length,accessoryCount:n.length,templates:l,units:c,explicitEmpty:{field17:f,rectField508:h}}}function ln(e){let t=qi(e),i=Fe.toObject(Fe.decode(t),{longs:Number,enums:Number,defaults:!1,arrays:!0,objects:!0}),r=(i.graph||[]).filter(E=>E.ui?.content&&Number(E.which)===21),n=(i.graph||[]).filter(E=>Number(E.which)===70),o=(i.graph||[]).filter(E=>Number(E.which)===$t),a=(i.accessories||[]).filter(E=>E.ui?.content),s=[],c=(E,_)=>E!=null&&Object.prototype.hasOwnProperty.call(E,_);/^\d+-\d+-\d+-\\.+\.gia$/iu.test(i.filePath||"")||s.push(`Root.filePath \u4E0D\u662F UID-TIME-ID-\\\u6587\u4EF6\u540D.gia\uFF1A${i.filePath||"<missing>"}`),r.length!==1&&s.push(`\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F UIControlGroup \u6570\u91CF=${r.length}\uFF0C\u5E94\u4E3A 1`);let l=(i.graph||[]).filter(E=>{let _=Number(E.which);return _===$t||_===70||_===21?!1:!E.ui?.content});l.length&&s.push(`Root.graph \u542B ${l.length} \u4E2A\u65E0\u6CD5\u8BC6\u522B\u7684\u975E\u63A7\u4EF6/\u975E\u811A\u672C\u5355\u5143`);let u=r[0];if(!u)return{valid:!1,errors:s,filePath:i.filePath||"",gameVersion:i.gameVersion||"",accessoryCount:a.length,controls:[],scriptCount:o.length,explicitEmpty:{field17:0,rectField508:0}};let f=[u,...n,...a],h=new Map;for(let E of f){let _=E.id?.id||0,G=`${E.name||"<unnamed>"}(${_||"<missing-guid>"})`;!Number.isSafeInteger(_)||_<=0||_>2147483647?s.push(`${G}: GraphUnit GUID \u975E\u6CD5`):h.has(_)?s.push(`${G}: GUID \u91CD\u590D`):h.set(_,E),(E.id?.class!==1||E.id?.type!==8)&&s.push(`${G}: GraphUnit.id \u5FC5\u987B\u4E3A class=1,type=8`),E.ui?.content?.guid!==_&&s.push(`${G}: content.guid \u4E0E GraphUnit.id.id \u4E0D\u4E00\u81F4`)}let p=u.id?.id||0,m=u.ui.content,g=`${u.name||"<unnamed>"}(${p})`;u.which!==21&&s.push(`${g}: which \u5FC5\u987B\u4E3A UIControlGroup(21)`);let v=m.info||[];v.find(E=>E.field501===1&&E.field502===5)?.guid?.value!==p&&s.push(`${g}: Info.self GUID \u7F3A\u5931\u6216\u4E0D\u4E00\u81F4`),v.find(E=>E.field501===2&&E.field502===6)?.index?.value!==1&&s.push(`${g}: Info.index \u5FC5\u987B\u4E3A 1`);let C=v.find(E=>E.field501===4&&E.field502===4);C||s.push(`${g}: \u7F3A\u5C11\u663E\u5F0F Info.related \u8BB0\u5F55`);let w=0,P=0,M=(E,_,G,j=!1)=>{let ie=E.id?.id||0,L=`${E.name||"<unnamed>"}(${ie})`,te=E.ui.content.data||[],Me=te.map(oe=>`${oe.field501}/${oe.field502}`),At=G.map(([oe])=>oe);JSON.stringify(Me)!==JSON.stringify(At)&&s.push(`${L}: Data \u69FD\u4F4D\u987A\u5E8F ${Me.join(",")}\uFF0C\u5E94\u4E3A ${At.join(",")}`);for(let oe=0;oe<Math.min(te.length,G.length);oe+=1){let Ve=te[oe],[je,Zt,ei]=G[oe];if(c(Ve,Zt)||s.push(`${L}: Data ${je} \u7F3A\u5C11 ${Zt} \u5206\u652F`),!ei)continue;c(Ve.details,ei)||s.push(`${L}: Details ${je} \u7F3A\u5C11 ${ei} \u5206\u652F`);let Je=Ko[je];(Ve.details?.field501!==Je||Ve.details?.field502!==Ve.field502||Ve.details?.field503!==1)&&s.push(`${L}: Details ${je} \u6807\u8BB0\u5E94\u4E3A ${Je}/${Ve.field502}/1`);let ti=Ve.details?.nodeRef;(ti?.class!==1||ti?.type!==8||ti?.id!==ie)&&s.push(`${L}: Details ${je} node_ref \u672A\u6307\u5411\u81EA\u8EAB`)}let Qt=te.find(oe=>oe.field501===4&&oe.field502===(j?23:86)),re=j?"empty15":"field17";c(Qt?.field14,re)?j||(w+=1):s.push(`${L}: \u7C7B\u578B Data \u7F3A\u5C11\u663E\u5F0F Field14.${re} \u7A7A\u4E32`),c(Qt?.details?.field14,re)?j||(w+=1):s.push(`${L}: \u7C7B\u578B Details \u7F3A\u5C11\u663E\u5F0F Field14.${re} \u7A7A\u4E32`);let Ge=te.find(oe=>oe.details?.transform)?.details?.transform,ct=Ge?.multiPlatform?.platforms||[];ct.length!==4&&s.push(`${L}: \u591A\u5E73\u53F0\u53D8\u6362\u6570\u91CF=${ct.length}\uFF0C\u5E94\u4E3A 4`);let Oi=ct.map(oe=>oe.platformType||0);JSON.stringify(Oi)!==JSON.stringify([0,1,2,3])&&s.push(`${L}: \u5E73\u53F0\u987A\u5E8F ${Oi.join(",")}\uFF0C\u5E94\u4E3A 0,1,2,3`);let Fi=j?fi["server-container"]:fi[_];Ge?.multiPlatform?.field502!==Fi&&s.push(`${L}: \u53D8\u6362 preset=${Ge?.multiPlatform?.field502??"<missing>"}\uFF0C\u5E94\u4E3A ${Fi}`);for(let oe of ct)c(oe.transform,"field508")?P+=1:s.push(`${L}: RectTransform \u7F3A\u5C11\u663E\u5F0F field508 \u7A7A\u4E32`);return Me};M(u,"server-container",lc,!0);let V=(u.relatedIds||[]).map(E=>E.id||0),H=new Set(V),B=a.filter(E=>H.has(E.id?.id||0)),$=B.map(E=>E.id?.id||0);JSON.stringify(V)!==JSON.stringify($)&&s.push(`${g}: \u4E3B\u56FE relatedIds \u5FC5\u987B\u6309\u987A\u5E8F\u8986\u76D6\u672C\u7EC4 accessories`);let b=m.data?.find(E=>E.details?.rootChildRef)?.details?.rootChildRef?.guid||0,A=h.get(b);(!A||!B.includes(A))&&s.push(`${g}: 62/82 \u6839\u8282\u70B9\u5F15\u7528\u4E0D\u5B58\u5728`),$[0]!==b&&s.push(`${g}: \u6839\u5BB9\u5668\u8282\u70B9\u5FC5\u987B\u662F\u672C\u7EC4 accessories[0]`);let x=[];for(let E of B){let _=E.id?.id||0,G=E.ui.content,j=`${E.name||"<unnamed>"}(${_})`,ie=Ki(E);E.which!==15&&s.push(`${j}: which \u5FC5\u987B\u4E3A UIControl(15)`);let L=G.info||[];(L.length!==1||L[0]?.field501!==1||L[0]?.field502!==5||L[0]?.guid?.value!==_)&&s.push(`${j}: \u670D\u52A1\u7AEF\u5BB9\u5668\u5185\u63A7\u4EF6 Info \u5FC5\u987B\u53EA\u542B\u81EA\u8EAB GUID`);let te=Wo[ie];te||s.push(`${j}: \u672A\u77E5\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7C7B\u578B ${ie}`);let Me=te?M(E,ie,te):[];x.push({id:_,name:E.name||"",kind:ie,parent:G.parent||0,children:[...G.children||[]],relatedIds:(E.relatedIds||[]).map(At=>At.id||0),dataSignatures:Me})}let k=x.find(E=>E.id===b);k&&(k.kind!=="container"&&s.push(`${k.name}(${b}): \u6839\u63A7\u4EF6\u5FC5\u987B\u4E3A\u5BB9\u5668\u8282\u70B9`),k.parent&&s.push(`${k.name}(${b}): \u6839\u63A7\u4EF6\u4E0D\u5E94\u6709 parent`));let F=new Map(x.map(E=>[E.id,E]));for(let E of x){let _=`${E.name}(${E.id})`;if(JSON.stringify(E.relatedIds)!==JSON.stringify(E.children)&&s.push(`${_}: relatedIds \u5FC5\u987B\u4E0E\u76F4\u63A5 children \u4E00\u81F4`),E.id!==b){let G=F.get(E.parent);G?G.children.includes(E.id)||s.push(`${_}: \u7236\u63A7\u4EF6 children \u672A\u53CD\u5411\u5305\u542B\u81EA\u8EAB`):s.push(`${_}: parent=${E.parent||"<missing>"} \u4E0D\u5B58\u5728`)}for(let G of E.children){let j=F.get(G);j?j.parent!==E.id&&s.push(`${_}: child=${G} \u7684 parent \u672A\u6307\u56DE\u81EA\u8EAB`):s.push(`${_}: child=${G} \u4E0D\u5B58\u5728`)}}if(n.length){let E=sn(nn({...i,graph:n,accessories:a.filter(_=>!H.has(_.id?.id||0))}));s.push(...E.errors.map(_=>`\u5BA2\u6237\u7AEF\u6A21\u677F: ${_}`))}return{valid:s.length===0,errors:s,filePath:i.filePath||"",gameVersion:i.gameVersion||"",graph:{id:p,name:u.name||"",relatedGuids:C?.related?.value||[],rootGuid:b},accessoryCount:a.length,controls:x,scriptCount:o.length,explicitEmpty:{field17:w,rectField508:P}}}function ca(e,t=[]){if(!e||e.layoutSchemaVersion===ve)return e;if(e.layoutSchemaVersion!==void 0&&e.layoutSchemaVersion!==1)throw new Error(`\u4EC5\u652F\u6301 layoutSchemaVersion=2 \u6216\u53EF\u8FC1\u79FB\u7684\u65E7\u5E03\u5C40\uFF0C\u6536\u5230 ${e.layoutSchemaVersion}`);if(!e.root)return{...e,layoutSchemaVersion:ve};let i=structuredClone(e),r=0;return Z(i.root,n=>{let o=n.transformByPlatform||{},a=n.transformByCanvas||{},s=n.name||n.id;for(let l of Object.keys(o))if(!ue.includes(l))throw new Error(`${s}: unknown platform ${l}`);let c={};for(let l of ue){let u=Tt[l],f=K[u].platform,h=Object.keys(K).filter(v=>K[v].platform===f&&a[v]),p=a[u]?u:h[0],m=l==="CONTROLLER_CONSOLE"?c.KEYBOARD:l==="CONTROLLER_MOBILE"?c.TOUCHSCREEN:null,g=o[l]??m??(p?a[p]:null);if(c[l]=g?Ye(g):Xr(n.kind),g||t.push(`${s}: ${l} \u65E0\u65E7\u5E03\u5C40\uFF0C\u5DF2\u4F7F\u7528\u63A7\u4EF6\u9ED8\u8BA4\u503C`),!o[l]&&!m&&p&&p!==u&&t.push(`${s}: \u7F3A\u5C11 ${u}\uFF0C\u5DF2\u91C7\u7528 ${p} \u7684\u951A\u70B9\u548C\u5C3A\u5BF8\u53C2\u6570`),!m)for(let v of h)JSON.stringify(c[l])!==JSON.stringify(Ye(a[v]))&&t.push(`${s}: ${v} \u4E0E ${l} \u5E03\u5C40\u51B2\u7A81\uFF0C\u4FDD\u7559${o[l]?"\u5DF2\u6709\u5E73\u53F0":p}\u53C2\u6570`)}Ze(c,`${s}.transformByPlatform`),n.transformByPlatform=c,delete n.transformByCanvas,r++}),i.layoutSchemaVersion=ve,t.unshift(`\u5DF2\u81EA\u52A8\u8FC1\u79FB\u65E7\u5E03\u5C40\uFF1A${r} \u4E2A\u63A7\u4EF6\u8F6C\u6362\u4E3A\u56DB\u5E73\u53F0\u53C2\u6570\uFF1B\u518D\u6B21\u4FDD\u5B58\u5C06\u4F7F\u7528\u65B0\u7248\u683C\u5F0F`),i}function cn(e){if(![1,2,3,4].includes(e))throw new Error(`\u4EC5\u652F\u6301 version=1\u20134 \u7684\u5B58\u6863\uFF0C\u6536\u5230 ${e}`)}function fn(e,t,i,r=e.canvasId){let n=tt(e.root,t);return!n||n.kind==="server-container"?Se(r):i[n.id]||Se(r)}function ot(e,{warnings:t=[]}={}){if(!e)return mt();if(e=ca(e,t),(e.root||e.layoutSchemaVersion!==void 0)&&e.layoutSchemaVersion!==ve)throw new Error(`\u4EC5\u652F\u6301 layoutSchemaVersion=${ve} \u7684\u56DB\u5E73\u53F0\u5E03\u5C40\uFF0C\u4E0D\u652F\u6301\u65E7\u753B\u5E03\u5E03\u5C40\u6216\u5176\u4ED6\u7248\u672C`);let i=e.meta?.assetType==="client-control-template"?"client-control-template":"server-control-template",r=i==="client-control-template"?Dt():mt(),n={layoutSchemaVersion:ve,version:Number.isSafeInteger(e.version)&&e.version>0?e.version:1,meta:{name:String(e.meta?.name||r.meta.name),assetType:i,sourceFormat:String(e.meta?.sourceFormat||r.meta.sourceFormat),sourceFile:String(e.meta?.sourceFile||""),...e.meta?.gameVersion?{gameVersion:String(e.meta.gameVersion)}:{},...e.meta?.giaFilePath?{giaFilePath:String(e.meta.giaFilePath)}:{},...Number.isSafeInteger(Number(e.meta?.giaOwnerUid))?{giaOwnerUid:Number(e.meta.giaOwnerUid)}:{},...Number.isSafeInteger(Number(e.meta?.giaTimestamp))?{giaTimestamp:Number(e.meta.giaTimestamp)}:{},...Number.isSafeInteger(Number(e.meta?.giaFileId))?{giaFileId:Number(e.meta.giaFileId)}:{},...e.meta?.giaFileName?{giaFileName:String(e.meta.giaFileName)}:{},...Number.isSafeInteger(e.meta?.giaNextAssetIndex)&&e.meta.giaNextAssetIndex>=2?{giaNextAssetIndex:e.meta.giaNextAssetIndex}:{},...Number.isSafeInteger(e.meta?.giaAssetIndexSchemaVersion)&&e.meta.giaAssetIndexSchemaVersion>0?{giaAssetIndexSchemaVersion:e.meta.giaAssetIndexSchemaVersion}:{},...Number.isSafeInteger(Number(e.meta?.giaModeFlag))&&Number(e.meta.giaModeFlag)>=0?{giaModeFlag:Number(e.meta.giaModeFlag)}:{}},canvasId:e.canvasId&&K[e.canvasId]?e.canvasId:Yi,selectedId:e.selectedId||r.selectedId,root:qr(e.root||r.root)};return pa(n),Xe(n,{warnings:t}),n}function pa(e){let t=new Set;Z(e.root,i=>{if(typeof i.id!="string"||!i.id)throw new Error("node id must be a non-empty string");if(t.has(i.id))throw new Error(`duplicate node id: ${i.id}`);t.add(i.id)}),t.has(e.selectedId)||(e.selectedId=Kr(e.root).id)}function ua(e){return et(Ft(e))}function Sc(e,t){let i=!1;return Z(e,r=>{r.id===t&&(i=!0)}),i}function wc(e,t,i,r){let o=rt(e.root,e.canvasId).boxes[t.id],a=i.children.findIndex(f=>f.id===t.id);if(a<0)throw new Error("reparent: source node is not attached");if(i.children.splice(a,1),r.children.push(t),!o)return;let s=rt(e.root,e.canvasId),c=r.kind==="server-container"?Se(e.canvasId):s.boxes[r.id]||Se(e.canvasId),l=it(t.transformByPlatform,e.canvasId),u=ft(c,l,{posX:o.centerX,posY:o.centerY,width:o.width,height:o.height});Gt(e,t,u)}function xc(e,t){return e.meta.assetType!=="client-control-template"?Jr(e.root,t):(e.root.children||[]).flatMap(i=>Jr(i,t))}function ma(e,t){let i=Yo(e.root,t);if(e.meta.assetType!=="client-control-template")return i;let r=ui(e),n=new Set;return r&&r.kind!=="server-container"&&Z(r,o=>n.add(o.id)),i.filter(o=>n.has(o.id))}function ga(e){let{canvas:t,boxes:i}=rt(e.root,e.canvasId),r=hi(e),n=pe(e.root,e.selectedId),o=n?i[n.id]:null;return Y({layoutSchemaVersion:ve,version:e.version,meta:{...e.meta},canvasId:e.canvasId,canvas:{id:e.canvasId,width:t.width,height:t.height,platform:K[e.canvasId].platform,label:K[e.canvasId].label,presets:Object.values(K).map(a=>({id:a.id,label:a.label,width:a.width,height:a.height,platform:a.platform}))},selectedId:e.selectedId,asset:{type:e.meta.assetType,label:e.meta.assetType==="client-control-template"?"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F":"\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F",templateCount:e.meta.assetType==="client-control-template"?e.root.children.length:1,currentTemplateId:e.meta.assetType==="client-control-template"&&ui(e)?.id||""},tree:xc(e,r),boxes:ma(e,i),inspector:Bo(n,e.canvasId,o||t,r),root:e.root})}function Gt(e,t,i){let r=rt(e.root,e.canvasId),n=fn(e,t.id,r.boxes),o={};if(t.syncAllDevices!==!1)for(let a of ue){if(a===dt(e.canvasId))continue;let s=Tt[a],c=rt(e.root,s,a);o[a]=fn(e,t.id,c.boxes,s)}t.transformByPlatform=Vo({transformByPlatform:t.transformByPlatform,source:i,canvasId:e.canvasId,syncAllDevices:t.syncAllDevices!==!1,sourceParentBox:n,targetParentBoxByPlatform:o})}var Ic=new Set(["name","active","visible","canControllerFocus","isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor","fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text","imageSource","imageType","imageId","imageColor","enableMask","enableSoftEdge","softEdgeMode","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","enableFill","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","fillAmount","reverseMaskArea","raycastTarget","interactable","clickAudioId","unavailableChildId","hoverChildId","pressedChildId","selectedChildId","showScrollBar","cellSizeX","cellSizeY","spacingX","spacingY","padding1X","padding1Y","padding2X","padding2Y","previewCount","scrollDirection","layoutConstraint","referencedPrefabId","animationId","keyboardKeyCode","controllerKeyCode","itemPrefabId","layoutConstraintFixedCount"]),Cc=new Set(["posX","posY","width","height"]),kc=new Set(["anchorMinX","anchorMinY","anchorMaxX","anchorMaxY","pivotX","pivotY"]);function Ec(e){if(typeof e=="number"&&Number.isFinite(e))return e>>>0;if(typeof e=="string"){let t=e.trim();if(t.startsWith("#")){let r=t.slice(1);if(r.length===6)return(4278190080|parseInt(r,16))>>>0;if(r.length===8)return parseInt(r,16)>>>0}let i=Number(t);if(Number.isFinite(i))return i>>>0}throw new Error("color must be an ARGB integer or #RRGGBB/#AARRGGBB string")}function We(e,t){let i=Number(e);if(!Number.isFinite(i))throw new Error(`${t} must be a finite number`);return i}function fa(e){if(e===!0||e===1||e==="1"||e==="true")return!0;if(e===!1||e===0||e==="0"||e==="false")return!1;throw new Error("boolean field requires true or false")}var Ac=new Set(["fontSize","minimumFontSize","imageId","clickAudioId","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","fillAmount","cellSizeX","cellSizeY","spacingX","spacingY","padding1X","padding1Y","padding2X","padding2Y","previewCount","keyboardKeyCode","controllerKeyCode","itemPrefabId","layoutConstraintFixedCount"]),_c=new Set(["active","visible","canControllerFocus","isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor","adaptiveFontSize","enableOutline","enableMask","enableSoftEdge","enableFill","reverseMaskArea","raycastTarget","interactable","showScrollBar"]),Pc=new Set(["name","imageSource","horizontalAlignment","verticalAlignment","text","softEdgeMode","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","scrollDirection","layoutConstraint","referencedPrefabId","animationId"]),da=new Set(["unavailableChildId","hoverChildId","pressedChildId","selectedChildId"]),ha={imageSource:["StaticReference","Prefab"],imageType:["Basic","Stretch",null],scrollDirection:["Horizontal","Vertical"],layoutConstraint:["AutoWrap","Fixed"],softEdgeMode:["Percentage","Pixel"],fillType:["Horizontal","Vertical","Radial90","Radial180","Radial360"],fillHorizontalType:["Left","Right"],fillVerticalType:["Bottom","Top"],fillRadial90Type:["BottomLeft","TopLeft","TopRight","BottomRight"],fillRadialType:["Bottom","Left","Top","Right"]};function Tc(e,t){if(!t||typeof t!="object")throw new Error("patch requires op");let i=t.op;if(i==="select")return t.id&&pe(e.root,t.id)&&(e.selectedId=t.id),e;if(i==="pick"){let{boxes:r}=rt(e.root,e.canvasId),n=ma(e,r),o=jo(n,Number(t.x),Number(t.y));return o&&(e.selectedId=o),e}if(i==="setCanvas")return t.canvasId&&K[t.canvasId]&&(e.canvasId=t.canvasId),e;if(i==="setScript")throw new Error("\u811A\u672C\u7531\u5B58\u6863\u7EDF\u4E00\u7BA1\u7406\uFF0C\u8BF7\u4F7F\u7528 addScript / updateScript / removeScript \u64CD\u4F5C");if(i==="newAsset"){let r=t.assetType==="client-control-template"?Dt():mt();return e.version=r.version,e.meta=r.meta,e.canvasId=r.canvasId,e.selectedId=r.selectedId,e.root=r.root,e}if(i==="addTemplate"){if(e.meta.assetType!=="client-control-template")throw new Error("\u53EA\u6709\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5DE5\u7A0B\u53EF\u4EE5\u65B0\u589E\u6A21\u677F");let r=q(t.kind,{id:Wr(e.root),guid:ua(e.root),name:t.name||`\u65B0${t.kind==="container"?"\u5BB9\u5668\u8282\u70B9":t.kind}\u6A21\u677F`});return e.root.children.push(r),e.selectedId=r.id,e}if(i==="add"){let r=pe(e.root,t.parentId||e.selectedId);if(!r)throw new Error("add: parent not found");let n=zo(r,t.kind,{id:Wr(e.root),guid:ua(e.root),name:t.name});return e.selectedId=n.id,e}if(i==="reparent"){if(e.meta.assetType!=="client-control-template")throw new Error("\u5C42\u7EA7\u8C03\u6574\u4EC5\u9002\u7528\u4E8E\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5DE5\u7A0B");let r=pe(e.root,t.id||e.selectedId),n=r?tt(e.root,r.id):null,o=pe(e.root,t.parentId);if(!r||r.kind==="server-container"||!n)throw new Error("reparent: node not found");if(!o)throw new Error("reparent: parent not found");if(o.id===r.id||Sc(r,o.id))throw new Error("\u63A7\u4EF6\u4E0D\u80FD\u79FB\u52A8\u5230\u81EA\u8EAB\u6216\u5176\u540E\u4EE3\u4E0B\u9762");if(o.kind==="server-container"&&n.kind==="server-container")return e;if(n.kind==="server-container"&&o.kind!=="server-container"&&e.root.children.length<=1)throw new Error("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A\u9876\u5C42\u6A21\u677F");return wc(e,r,n,o),e.selectedId=r.id,e}if(i==="moveSibling"){let r=pe(e.root,t.id||e.selectedId),n=r?tt(e.root,r.id):null;if(!r||!n)throw new Error("moveSibling: node not found");let o=n.children.findIndex(c=>c.id===r.id),a=t.direction==="up"?-1:t.direction==="down"?1:0,s=o+a;return!a||s<0||s>=n.children.length||(n.children.splice(o,1),n.children.splice(s,0,r),e.selectedId=r.id),e}if(i==="remove"){let r=t.id||e.selectedId,n=tt(e.root,r);if(n?.kind==="server-container"){if(e.meta.assetType!=="client-control-template")throw new Error("\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F\u7684\u5BA2\u6237\u7AEF\u6839\u8282\u70B9\u4E0D\u80FD\u5220\u9664");if((e.root.children||[]).length<=1)throw new Error("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A\u6A21\u677F")}return $o(e.root,r)&&(Z(e.root,o=>{if(o.kind==="button")for(let a of da)o[a]&&!pe(e.root,o[a])&&(o[a]=null)}),e.selectedId=n?n.id:e.root.id),e}if(i==="set"){let r=pe(e.root,t.id||e.selectedId);if(!r)throw new Error("set: node not found");let n=t.key;n==="reverseMask"&&(n="reverseMaskArea");let o=t.value;if(n.startsWith("giaRaw.")){let l=n.slice(7);if(!l||l.includes("."))throw new Error("invalid raw GIA field path");let u=Oo(r.kind,l);if(!u)throw new Error(`unknown raw GIA field for ${r.kind}: ${l}`);if(r.giaRaw||={},r.giaRaw[l]=jr(u,o),l==="footerField505"&&[0,1].includes(r.giaRaw[l])&&(r.canControllerFocus=r.giaRaw[l]===1),r.kind==="cursor"&&l==="cursorField501"&&[0,1].includes(r.giaRaw[l])&&(r.raycastTarget=r.giaRaw[l]===1),(r.kind==="textbox"||r.kind==="textwindow")&&l==="textAlign"){let f={0:"Left",1:"Middle",2:"Right"}[r.giaRaw[l]];f&&(r.horizontalAlignment=f)}if(r.kind==="image"&&l==="imageFillType"){let f={1:"Horizontal",2:"Vertical",3:"Radial90",4:"Radial180",5:"Radial360"}[r.giaRaw[l]];f&&(r.fillType=f)}return r.kind==="keyhint"&&l==="keyHintField502"&&(r.keyboardKeyCode=r.giaRaw[l]),r.kind==="keyhint"&&l==="keyHintField501"&&(r.controllerKeyCode=r.giaRaw[l]),e}if(n==="syncAllDevices"){if(r.syncAllDevices=fa(o),r.syncAllDevices){let l=it(r.transformByPlatform,e.canvasId);Gt(e,r,l)}return e}if(Ic.has(n)){if(n.endsWith("Color")&&(o=Ec(o)),Ac.has(n)){if(o=We(o,n),o<0)throw new Error(`${n} must not be negative`);if((n==="imageId"||n==="clickAudioId"||n==="keyboardKeyCode"||n==="controllerKeyCode")&&(o=Math.trunc(o)),n==="fillAmount"&&o>1)throw new Error("fillAmount must be between 0 and 1")}if(_c.has(n)&&(o=fa(o)),Pc.has(n)&&(o=String(o??"")),n==="horizontalAlignment"&&!["Left","Middle","Right"].includes(o))throw new Error("invalid horizontalAlignment");if(n==="verticalAlignment"&&!["Top","Middle","Bottom"].includes(o))throw new Error("invalid verticalAlignment");if(ha[n]&&!ha[n].includes(o))throw new Error(`invalid ${n}`);if(da.has(n))if(o===""||o===void 0||o===null)o=null;else{o=String(o);let l=pe(e.root,o);if(!l||l===r||l.kind==="server-container"||!(r.children||[]).some(u=>u.id===o))throw new Error(`${n} must reference a direct child of this button`)}if(r.kind==="image"&&(n==="imageSource"||n==="imageId")&&r[n]!==o&&(r.imageType=null,r.giaRaw.imageSlotType=0),r[n]=o,r.kind==="image"&&n==="imageType"&&(r.giaRaw.imageSlotType=o==="Stretch"?1:0),n==="canControllerFocus"&&(r.giaRaw.footerField505=o?1:0),r.kind==="cursor"&&n==="raycastTarget"&&(r.giaRaw.cursorField501=o?1:0),(r.kind==="textbox"||r.kind==="textwindow")&&n==="horizontalAlignment"&&(r.giaRaw.textAlign={Left:0,Middle:1,Right:2}[o]),(r.kind==="textbox"||r.kind==="textwindow")&&n==="verticalAlignment"&&delete r.giaRaw.textVerticalAlign,r.kind==="image"&&n==="fillType"){let l={Horizontal:1,Vertical:2,Radial90:3,Radial180:4,Radial360:5}[o];l&&(r.giaRaw.imageFillType=l)}return r.kind==="reference"&&n==="referencedPrefabId"&&(r.giaRaw.templateRefSlot=o),r.kind==="grid"&&n==="previewCount"&&(r.giaRaw.gridField511=Math.trunc(o)),r.kind==="keyhint"&&n==="keyboardKeyCode"&&(r.giaRaw.keyHintField502=Math.trunc(o)),r.kind==="keyhint"&&n==="controllerKeyCode"&&(r.giaRaw.keyHintField501=Math.trunc(o)),(r.kind==="animation"||r.kind==="fullscreen")&&n==="animationId"&&(r.giaRaw[r.kind==="animation"?"effectSlot":"fullscreenEffectSlot"]=o),e}let{boxes:a}=rt(e.root,e.canvasId),s=fn(e,r.id,a),c=it(r.transformByPlatform,e.canvasId);if(n==="anchorType"){let l=un(a[r.id]),u=Po(c,o);return u=ft(s,u,l),Gt(e,r,u),e}if(["rotationX","rotationY","rotationZ"].includes(n)){let l={...c,rotation:{...c.rotation,[n.slice(-1).toLowerCase()]:We(o,n)}};return Gt(e,r,l),e}if(kc.has(n)){let l=un(a[r.id]),u={...c,anchorMin:{...c.anchorMin},anchorMax:{...c.anchorMax},pivot:{...c.pivot}};return n==="anchorMinX"&&(u.anchorMin.x=We(o,n)),n==="anchorMinY"&&(u.anchorMin.y=We(o,n)),n==="anchorMaxX"&&(u.anchorMax.x=We(o,n)),n==="anchorMaxY"&&(u.anchorMax.y=We(o,n)),n==="pivotX"&&(u.pivot.x=We(o,n)),n==="pivotY"&&(u.pivot.y=We(o,n)),Gt(e,r,ft(s,u,l)),e}if(Cc.has(n)){let l=un(a[r.id]),u=We(o,n);if((n==="width"||n==="height")&&u<0)throw new Error(`${n} must not be negative`);return l[n]=u,Gt(e,r,ft(s,c,l)),e}throw new Error(`set: unknown key ${n}`)}if(i==="replace"){let r=ot(t.project);return e.version=r.version,e.meta=r.meta,e.canvasId=r.canvasId,e.selectedId=r.selectedId,e.root=r.root,e}throw new Error(`unknown op ${i}`)}function dn(e,t){if(!t||typeof t!="object")throw new Error("patch requires op");if(t.expectedRevision!==void 0&&Number(t.expectedRevision)!==e.version)throw new Error(`revision conflict: expected ${t.expectedRevision}, current ${e.version}`);let i=e.version,r=JSON.parse(JSON.stringify(e));return Tc(r,t),pa(r),Xe(r),r.version=i+1,Object.keys(e).forEach(n=>{delete e[n]}),Object.assign(e,r),e}function un(e){return e?{posX:e.centerX,posY:e.centerY,width:e.width,height:e.height}:{posX:0,posY:0,width:0,height:0}}import Rc from"fengari";var{lua:d,lauxlib:ee,lualib:ya,to_luastring:Ji,to_jsstring:Mc}=Rc,Nc=d.LUA_TNIL,Oc=d.LUA_TBOOLEAN,Fc=d.LUA_TNUMBER,Dc=d.LUA_TSTRING,ba=d.LUA_TTABLE,zc=d.LUA_TFUNCTION,hn=d.LUA_TUSERDATA,De=d.LUA_OK,va=new WeakMap,pn=Symbol("luaTableEntries"),mn={__scriptHostKey:!0};function R(e){return Ji(String(e))}function gt(e,t){va.set(e,t)}function Ee(e){return va.get(e)}var pi=class{constructor(t){this.value=t}};function le(e,t,i){if(i instanceof pi){d.lua_pushnumber(e,i.value);return}if(i==null){d.lua_pushnil(e);return}let r=typeof i;if(r==="boolean"){d.lua_pushboolean(e,i);return}if(r==="number"){Number.isInteger(i)&&Math.abs(i)<=2147483647?d.lua_pushinteger(e,i):d.lua_pushnumber(e,i);return}if(r==="string"){d.lua_pushstring(e,R(i));return}if(r==="function"){Vc(e,t,i);return}if(i&&i[pn]){let n=i[pn];d.lua_createtable(e,Array.isArray(i)?i.length:0,n.length);for(let[o,a]of n)le(e,t,o),le(e,t,a),d.lua_settable(e,-3);return}if(Array.isArray(i)){d.lua_createtable(e,i.length,0);for(let n=0;n<i.length;n++)le(e,t,i[n]),d.lua_rawseti(e,-2,n+1);return}if(i&&i.__kind==="EnumItem"){t.pushEnumItem(e,i);return}if(i&&i.__kind==="CursorEventData"){t.pushCursor(e,i);return}if(i&&i.__kind==="Script"){t.pushScript(e,i);return}if(i&&i.typeofName){t.pushControl(e,i);return}if(i&&i.__kind==="ServerSignal"){t.pushSignal(e,i);return}if(i&&(i.SetEase||i.Append)){t.pushTween(e,i);return}if(r==="object"){d.lua_createtable(e,0,Object.keys(i).length);for(let[n,o]of Object.entries(i))le(e,t,o),d.lua_setfield(e,-2,R(n));return}d.lua_pushnil(e)}function Q(e,t){if(d.lua_isnil(e,t)||d.lua_type(e,t)===d.LUA_TNONE)return"";if(!d.lua_isstring(e,t)&&d.lua_type(e,t)!==d.LUA_TNUMBER)return`lua_type=${d.lua_type(e,t)}`;let i=d.lua_tostring(e,t);return i==null?"":Mc(i)}function Ke(e,t){t=d.lua_absindex(e,t);let i=d.lua_type(e,t);if(i===hn)return Ee(d.lua_touserdata(e,t));if(i===ba){d.lua_pushlightuserdata(e,mn),d.lua_rawget(e,t);let r=d.lua_type(e,-1)===hn?d.lua_touserdata(e,-1):null;return d.lua_pop(e,1),r?Ee(r):null}return null}function be(e,t,i){i=d.lua_absindex(e,i);let r=d.lua_type(e,i);if(r===Nc)return null;if(r===Oc)return!!d.lua_toboolean(e,i);if(r===Fc)return d.lua_isinteger(e,i)?d.lua_tointeger(e,i):d.lua_tonumber(e,i);if(r===Dc)return Q(e,i);if(r===hn){let n=d.lua_touserdata(e,i);return Ee(n)??n}if(r===zc)return $c(e,t,i);if(r===ba){let n=Ke(e,i);if(n)return n;let o=[];for(d.lua_pushnil(e);d.lua_next(e,i)!==0;){let l=be(e,t,-2),u=be(e,t,-1);o.push([l,u]),d.lua_pop(e,1)}let a=new Map(o.filter(([l])=>Number.isInteger(l)&&l>=1)),s=0;for(;a.has(s+1);)s+=1;let c=s>0?[]:{};for(let[l,u]of o)Array.isArray(c)&&Number.isInteger(l)&&l>=1?c[l-1]=u:(typeof l=="string"||typeof l=="number")&&(c[l]=u);return Object.defineProperty(c,pn,{value:o}),c}return null}function $c(e,t,i){t.luaFunctions||(t.luaFunctions=new Map);let r=typeof d.lua_topointer=="function"?d.lua_topointer(e,i):null;if(r!=null&&t.luaFunctions.has(r))return t.luaFunctions.get(r);d.lua_pushvalue(e,i);let n=ee.luaL_ref(e,d.LUA_REGISTRYINDEX),o=Gc(e,t,n);return r!=null&&t.luaFunctions.set(r,o),o}function Gc(e,t,i){let r=(...n)=>{if(r.__luaRef==null)throw new Error("attempt to call a released Lua callback");let o=d.lua_gettop(e);d.lua_rawgeti(e,d.LUA_REGISTRYINDEX,r.__luaRef);for(let l of n)le(e,t,l);if(d.lua_pcall(e,n.length,d.LUA_MULTRET,0)!==De){let l=Q(e,-1);throw d.lua_settop(e,o),new Error(l)}let s=d.lua_gettop(e)-o,c=[];for(let l=1;l<=s;l++)c.push(be(e,t,o+l));if(d.lua_settop(e,o),c.length!==0)return c.length===1?c[0]:c};return r.__luaRef=i,r.__luaState=e,r}function Sa(e){e?.__luaRef!=null&&(e.__luaHolds=(e.__luaHolds||0)+1)}function wa(e,t){if(!t||t.__luaRef==null||!t.__luaState)return;if(t.__luaHolds>1){t.__luaHolds-=1;return}let i=t.__luaState;if((!e?.luaStates||e.luaStates.has(i))&&ee.luaL_unref(i,d.LUA_REGISTRYINDEX,t.__luaRef),t.__luaRef=null,t.__luaState=null,e?.luaFunctions)for(let[r,n]of e.luaFunctions)n===t&&e.luaFunctions.delete(r)}function Vc(e,t,i){d.lua_pushlightuserdata(e,i),d.lua_pushlightuserdata(e,t),d.lua_pushcclosure(e,function(n){let o=d.lua_touserdata(n,d.lua_upvalueindex(1)),a=d.lua_touserdata(n,d.lua_upvalueindex(2)),s=d.lua_gettop(n),c=[];for(let l=1;l<=s;l++)c.push(be(n,a,l));try{let l=o(...c);if(Array.isArray(l)&&l.__multi){for(let u of l)le(n,a,u);return l.length}return l===void 0?0:(le(n,a,l),1)}catch(l){return d.lua_pushstring(n,R(String(l&&l.message?l.message:l))),d.lua_error(n)}},2)}function xa(e){!e||typeof d.lua_close!="function"||d.lua_close(e)}function Ia(e){if(ee.luaL_loadstring(e,R(["local nativeGetMetatable = getmetatable","getmetatable = function(value)",' if type(value) == "string" then return nil end'," return nativeGetMetatable(value)","end"].join(`
|
|
108
|
-
`)))===De&&d.lua_pcall(e,0,0,0),d.lua_settop(e,0),d.lua_pushnil(e),d.lua_setglobal(e,R("_VERSION")),d.lua_getglobal(e,R("string")),!d.lua_isnil(e,-1))for(let i of["dump","pack","unpack"])d.lua_pushnil(e),d.lua_setfield(e,-2,R(i));if(d.lua_pop(e,1),d.lua_pushnil(e),d.lua_setglobal(e,R("io")),d.lua_getglobal(e,R("os")),!d.lua_isnil(e,-1))for(let i of Object.keys({execute:1,getenv:1,remove:1,rename:1,tmpname:1,setlocale:1,exit:1}))d.lua_pushnil(e),d.lua_setfield(e,-2,R(i));d.lua_pop(e,1),d.lua_getglobal(e,R("debug")),d.lua_isnil(e,-1)?d.lua_pop(e,1):(d.lua_getfield(e,-1,R("traceback")),d.lua_newtable(e),d.lua_pushvalue(e,-2),d.lua_setfield(e,-2,R("traceback")),d.lua_setglobal(e,R("debug")),d.lua_pop(e,2)),d.lua_getglobal(e,R("math")),d.lua_isnil(e,-1)||(d.lua_pushcfunction(e,i=>{let r=d.lua_tonumber(i,1);return d.lua_pushboolean(i,Number.isNaN(r)),1}),d.lua_setfield(e,-2,R("isnan")),d.lua_pushcfunction(e,i=>{let r=d.lua_tonumber(i,1);return d.lua_pushboolean(i,r===1/0||r===-1/0),1}),d.lua_setfield(e,-2,R("isinf"))),d.lua_pop(e,1),d.lua_pushnil(e),d.lua_setglobal(e,R("package")),d.lua_pushnil(e),d.lua_setglobal(e,R("load")),d.lua_pushnil(e),d.lua_setglobal(e,R("loadfile")),d.lua_pushnil(e),d.lua_setglobal(e,R("dofile")),d.lua_pushnil(e),d.lua_setglobal(e,R("collectgarbage")),d.lua_pushnil(e),d.lua_setglobal(e,R("coroutine")),d.lua_pushnil(e),d.lua_setglobal(e,R("fengari"))}var Te=(e,t=0)=>Number.isFinite(Number(e))?Number(e):t,Ca=e=>e?.Name||e,Qi=e=>Math.max(0,Math.min(1,Te(e)));function mi(e){let t=e.parent?mi(e.parent):[e.runtime.canvasWidth,e.runtime.canvasHeight];return[Math.max(0,(e.anchorMaxX-e.anchorMinX)*t[0]+Te(e.sizeDeltaX)),Math.max(0,(e.anchorMaxY-e.anchorMinY)*t[1]+Te(e.sizeDeltaY))]}function gi(e){let[t,i]=mi(e),r=Ca(e.scrollDirection)==="Horizontal",n=Math.max(1,Te(e.cellSizeX,50)),o=Math.max(1,Te(e.cellSizeY,50)),a=Math.max(0,Te(e.spacingX)),s=Math.max(0,Te(e.spacingY)),c=Math.max(0,Te(e.padding1X)),l=Math.max(0,Te(e.padding1Y)),u=Math.max(0,Te(e.padding2X)),f=Math.max(0,Te(e.padding2Y)),h=r?i-l-f:t-c-u,p=r?o:n,m=r?s:a,g=Ca(e.layoutConstraint)==="Fixed"?Math.max(1,Math.floor(Te(e.layoutConstraintFixedCount,1))):Math.max(1,Math.floor((h+m)/(p+m))),v=Math.ceil(e.itemCount/g),C=v?r?c+u+v*n+(v-1)*a:l+f+v*o+(v-1)*s:0,w=r?t:i,P=Math.max(0,C-w);return{width:t,height:i,horizontal:r,cellW:n,cellH:o,gapX:a,gapY:s,left:c,top:l,right:u,bottom:f,lanes:g,length:C,viewport:w,max:P,offset:Qi(e.scrollProgress)*P}}function Vt(e){let t=gi(e);for(let i=0;i<(e._gridItems?.length||0);i+=1){let r=e._gridItems[i];if(!r.alive||r.parent!==e)continue;let n=Math.floor(i/t.lanes),o=i%t.lanes,a=t.horizontal?n:o,s=t.horizontal?o:n,c=t.left+a*(t.cellW+t.gapX)+t.cellW/2-(t.horizontal?t.offset:0),l=-t.top-s*(t.cellH+t.gapY)-t.cellH/2+(t.horizontal?0:t.offset),u={anchorMinX:0,anchorMaxX:0,anchorMinY:1,anchorMaxY:1,pivotX:.5,pivotY:.5,sizeDeltaX:t.cellW,sizeDeltaY:t.cellH,anchoredPositionX:c,anchoredPositionY:l};Object.entries(u).some(([f,h])=>r[f]!==h)&&(Object.assign(r,u),r.markPlayDirty(!0))}return t}var ka={container:"ClientUIContainerControl",textbox:"ClientUITextBoxControl",textwindow:"ClientUITextWindowControl",image:"ClientUIImageControl",button:"ClientUIPresetButtonControl",cursor:"ClientUICursorEventAreaControl",grid:"ClientUIGridScrollerControl",keyhint:"ClientUIKeyHintControl",animation:"ClientUIAnimationControl",fullscreen:"ClientUIFullscreenAnimationControl",reference:"ClientUIReferenceControl"},Yc=["alive","Id","prefabIndex","active","activeInHierarchy","visible"],Zi=new Set(["active","visible","parent","sizeDeltaX","sizeDeltaY","anchorMinX","anchorMinY","anchorMaxX","anchorMaxY","pivotX","pivotY"]),Bc=["name","parent","anchoredPositionX","anchoredPositionY","sizeDeltaX","sizeDeltaY","anchorMinX","anchorMinY","anchorMaxX","anchorMaxY","pivotX","pivotY","localScaleX","localScaleY","localScaleZ","localRotationX","localRotationY","localRotationZ","canControllerFocus"],jc={image:["imageSource","imageId"],grid:["itemCount","scrollDirection","layoutConstraint","layoutConstraintFixedCount"],reference:["referencedPrefabIndex"]},Hc={container:["isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor"],textbox:["text","fontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","adaptiveFontSize","minimumFontSize"],textwindow:["interactable","showScrollBar","text","fontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","adaptiveFontSize","minimumFontSize"],image:["imageColor","enableMask","enableSoftEdge","softEdgeMode","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","reverseMaskArea","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","fillAmount"],button:["interactable","clickAudioId","raycastTarget"],cursor:["raycastTarget"],grid:["itemPrefabIndex","raycastTarget","showScrollBar","interactable","scrollProgress"],keyhint:["keyboardKeyCode","controllerKeyCode"],animation:["animationId","playSoundEffect","layer"],fullscreen:["animationId","playSoundEffect"]},Uc=["GetChildren","GetChild","FindChild","SetActive","SetVisible","GetSiblingIndex","SetSiblingIndex","SetAsFirstSibling","SetAsLastSibling","GetAnchoredPosition","SetAnchoredPosition","GetSizeDelta","SetSizeDelta","GetAnchorMin","SetAnchorMin","GetAnchorMax","SetAnchorMax","GetPivot","SetPivot","GetLocalScale","SetLocalScale","GetLocalRotation","SetLocalRotation","GetScriptByPath","GetScript","GetScripts","AddKeyEventListener","RemoveKeyEventListener","RemoveKeyEventListeners","RemoveAllKeyEventListeners","AddNavigationEventListener","RemoveNavigationEventListener","RemoveNavigationEventListeners","RemoveAllNavigationEventListeners","SetControllerNavigation","GetControllerNavigation"],Ea=["AddCursorEventListener","RemoveCursorEventListener","RemoveCursorEventListeners","RemoveAllCursorEventListeners","SimulateCursorClick"],Lc={image:["SetImage","SetSoftEdgeWidth","SetFillUnused","SetFillHorizontal","SetFillVertical","SetFillRadial90","SetFillRadial180","SetFillRadial360"],button:Ea,cursor:Ea,animation:["PlayAnimation","StopAnimation"],grid:["RefreshItems","GetItemIndex","GetItemSize","GetItemSpacing","GetPadding","ScrollToItemAt","GetContentLength"]};function yn(e,t){return e.kind==="image"&&t==="imageType"&&e.runtime.canSelectImageType(e.imageId,e.imageSource)?"rw":Yc.includes(t)||(jc[e.kind]||[]).includes(t)?"ro":Bc.includes(t)||(Hc[e.kind]||[]).includes(t)?"rw":null}var Xc=["localRotationX","localRotationY","localRotationZ"],Yt=Math.PI/180;function Aa(e,t){return[e[3]*t[0]+e[0]*t[3]+e[1]*t[2]-e[2]*t[1],e[3]*t[1]-e[0]*t[2]+e[1]*t[3]+e[2]*t[0],e[3]*t[2]+e[0]*t[1]-e[1]*t[0]+e[2]*t[3],e[3]*t[3]-e[0]*t[0]-e[1]*t[1]-e[2]*t[2]]}function gn(e){if(Object.is(e,-0))return e;let t=(e%360+360)%360,i=Math.round(t*1e6)/1e6;return i>=360?0:i}function _a(e,t,i){let r=w=>[Math.sin(w*Yt/2),Math.cos(w*Yt/2)],[n,o]=r(e),[a,s]=r(t),[c,l]=r(i),[u,f,h,p]=Aa(Aa([0,a,0,s],[n,0,0,o]),[0,0,c,l]),m=Math.max(-1,Math.min(1,-2*(f*h-p*u))),g,v,C;return Math.abs(m)>.999999?(g=Math.sign(m)*90,v=2*Math.atan2(f,p)/Yt,C=0):(g=Math.asin(m)/Yt,v=Math.atan2(2*(p*f+u*h),1-2*(u*u+f*f))/Yt,C=Math.atan2(2*(p*h+u*f),1-2*(u*u+h*h))/Yt),[gn(g),gn(v),gn(C)]}function Pa(e,t){return Uc.includes(t)||(Lc[e.kind]||[]).includes(t)}var Wc={container:{isolateNavigation:!1,disableKeyEventPassthrough:!1,disableCursorEventPassthrough:!1,showCursor:!1},textbox:{text:"",fontSize:20,fontColor:4294967295,bgColor:0,enableOutline:!1,outlineColor:0,horizontalAlignment:null,verticalAlignment:null,adaptiveFontSize:!1,minimumFontSize:10},textwindow:{interactable:!0,showScrollBar:!0,text:"",fontSize:20,fontColor:4294967295,bgColor:0,enableOutline:!1,outlineColor:0,horizontalAlignment:null,verticalAlignment:null,adaptiveFontSize:!1,minimumFontSize:10},image:{imageSource:null,imageId:0,imageColor:4294967295,imageType:null,enableMask:!1,enableSoftEdge:!1,softEdgeMode:"Percentage",softEdgeWidthX:8,softEdgeWidthY:8,horizontalSoftRange:85,verticalSoftRange:85,enableFill:!1,fillType:"Unused",fillHorizontalType:"Left",fillVerticalType:"Bottom",fillRadial90Type:"BottomLeft",fillRadialType:"Bottom",reverseMaskArea:!1,fillAmount:1},button:{interactable:!0,clickAudioId:0,raycastTarget:!0,unavailableChildId:null,hoverChildId:null,pressedChildId:null,selectedChildId:null,pressed:!1},cursor:{raycastTarget:!0},grid:{itemCount:0,itemPrefabIndex:null,raycastTarget:!0,interactable:!0,showScrollBar:!0,scrollDirection:"Vertical",layoutConstraint:"AutoWrap",layoutConstraintFixedCount:null,scrollProgress:0,cellSizeX:50,cellSizeY:50,spacingX:8,spacingY:8,padding1X:20,padding1Y:20,padding2X:20,padding2Y:20,previewCount:5},keyhint:{keyboardKeyCode:null,controllerKeyCode:null},animation:{animationId:null,playSoundEffect:null,layer:null,raycastTarget:!1},fullscreen:{animationId:null,playSoundEffect:null,raycastTarget:!1},reference:{referencedPrefabIndex:null}},at=class e{constructor(t,i){this.runtime=t,this.kind=i.kind||"container",this.typeofName=ka[this.kind]||ka.container,this.alive=!0,this.Id=i.Id??t.nextControlId(),this.authoringId=i.authoringId??null,this.prefabIndex=i.prefabIndex??0,this.name=i.name??"",this.active=i.active===!0,this.visible=i.visible!==!1,this._parent=null,this.children=[],this.scripts=[],this.cursorListeners=new Map,this.keyListeners=new Map,this.navListeners=new Map,this.navConfig=new Map,this.anchoredPositionX=i.anchoredPositionX??0,this.anchoredPositionY=i.anchoredPositionY??0,this.sizeDeltaX=i.sizeDeltaX??0,this.sizeDeltaY=i.sizeDeltaY??0,this.anchorMinX=i.anchorMinX??.5,this.anchorMinY=i.anchorMinY??.5,this.anchorMaxX=i.anchorMaxX??.5,this.anchorMaxY=i.anchorMaxY??.5,this.pivotX=i.pivotX??.5,this.pivotY=i.pivotY??.5,this.localScaleX=i.localScaleX??1,this.localScaleY=i.localScaleY??1,this.localScaleZ=i.localScaleZ??1,this.localRotationX=i.localRotationX??0,this.localRotationY=i.localRotationY??0,this.localRotationZ=i.localRotationZ??0,this.canControllerFocus=i.canControllerFocus??!1,this._playDirty=!0,this._playDeepDirty=!0,this._playChildDirty=!1,(this.kind==="grid"||this.kind==="textwindow")&&(this.runtime.scrollControls||=new Set,this.runtime.scrollControls.add(this));let r=Wc[this.kind]||{};for(let[n,o]of Object.entries(r))this[n]===void 0&&(this[n]=i[n]!==void 0?i[n]:o);if(this.kind==="grid"&&(this.scrollProgress=i.scrollProgress??0),i.children)for(let n of i.children){let o=n instanceof e?n:new e(t,n);this.addChild(o)}}get parent(){return this._parent}set parent(t){if(this._parent===t)return;if(t!==null&&!(t instanceof e))throw new Error("parent must be a Control or nil");if(t&&t.runtime!==this.runtime)throw new Error("parent must belong to the same runtime");if(t===this)throw new Error("cannot parent a control to itself or its descendant");for(let r=t;r;r=r._parent)if(r===this)throw new Error("cannot parent a control to itself or its descendant");let i=this._parent;if(i){let r=i.children.indexOf(this);r>=0&&i.children.splice(r,1),i.markPlayDirty(!0)}else{let r=this.runtime.roots.indexOf(this);r>=0&&this.runtime.roots.splice(r,1)}this._parent=t,this.markPlayDirty(!0),t&&!t.children.includes(this)?(t.children.push(this),t.markPlayDirty(!0)):!t&&this.alive&&!this.runtime.roots.includes(this)&&this.runtime.roots.push(this)}markPlayDirty(t=!1){this._playDirty=!0,t&&(this._playDeepDirty=!0);for(let i=this._parent;i&&!i._playChildDirty;i=i._parent)i._playChildDirty=!0}get activeInHierarchy(){return this.active?this._parent?this._parent.activeInHierarchy:!0:!1}get scrollProgress(){return this._scrollProgress??0}set scrollProgress(t){if(typeof t!="number"||!Number.isFinite(t))throw new Error("scrollProgress must be a finite number");this._scrollProgress=Qi(t),this.markPlayDirty()}addChild(t){return t.parent=this,t}GetChildren(){return this.children.slice()}GetChild(t){return this.children.find(i=>i.name===t)||null}FindChild(t){if(!t)return null;if(!t.includes("/"))return this.GetChild(t);let i=t.split("/").filter(Boolean),r=this;for(let n of i)if(r=r.GetChild(n),!r)return null;return r}SetActive(t){let i=!!t;if(this.active!==i){if(typeof this.runtime?.onControlActiveChanging=="function"){this.runtime.onControlActiveChanging(this,i);return}this.active=i,this.markPlayDirty(!0)}}SetVisible(t){this.visible=!!t,this.markPlayDirty(!0)}GetSiblingIndex(){if(!this._parent)return-1;let t=this._parent.children,i=t.indexOf(this);return i<0?-1:t.length-1-i}SetSiblingIndex(t){if(!this._parent)return!1;let i=this._parent.children,r=i.indexOf(this);if(r<0)return!1;let n=i.length-1;return!Number.isInteger(t)||t<0||t>n?!1:(i.splice(r,1),i.splice(n-t,0,this),this._parent.markPlayDirty(!0),this.markPlayDirty(),!0)}SetAsFirstSibling(){return this.SetSiblingIndex(0)}SetAsLastSibling(){return this._parent?this.SetSiblingIndex(this._parent.children.length-1):!1}GetAnchoredPosition(){return[this.anchoredPositionX,this.anchoredPositionY]}SetAnchoredPosition(t,i){this.anchoredPositionX=t,this.anchoredPositionY=i,this.markPlayDirty()}GetSizeDelta(){return[this.sizeDeltaX,this.sizeDeltaY]}SetSizeDelta(t,i){this.sizeDeltaX=t,this.sizeDeltaY=i,this.markPlayDirty(!0)}GetAnchorMin(){return[this.anchorMinX,this.anchorMinY]}SetAnchorMin(t,i){this.anchorMinX=t,this.anchorMinY=i,this.markPlayDirty(!0)}GetAnchorMax(){return[this.anchorMaxX,this.anchorMaxY]}SetAnchorMax(t,i){this.anchorMaxX=t,this.anchorMaxY=i,this.markPlayDirty(!0)}GetPivot(){return[this.pivotX,this.pivotY]}SetPivot(t,i){this.pivotX=t,this.pivotY=i,this.markPlayDirty(!0)}GetLocalScale(){return[this.localScaleX,this.localScaleY,this.localScaleZ]}SetLocalScale(t,i,r){this.localScaleX=t,this.localScaleY=i,this.localScaleZ=r,this.markPlayDirty()}GetLocalRotation(){return _a(this.localRotationX,this.localRotationY,this.localRotationZ)}luaFieldValue(t){if(t==="imageType")return this.imageType??"Stretch";let i=Xc.indexOf(t);return i<0?this[t]:_a(this.localRotationX,this.localRotationY,this.localRotationZ)[i]}SetLocalRotation(t,i,r){this.localRotationX=t,this.localRotationY=i,this.localRotationZ=r,this.markPlayDirty()}GetScriptByPath(t){return this.scripts.find(i=>i.path===t)||null}GetScript(t){return this.scripts.find(i=>i.scriptMappingId===t)||null}GetScripts(){return this.scripts.slice()}_addListener(t,i,r){let n=t.get(i)||[];n.push(r),t.set(i,n),this.runtime.retainLuaCallback?.(r)}_removeListener(t,i,r){let n=t.get(i);if(!n)return;let o=n.filter(a=>a!==r);t.set(i,o);for(let a=o.length;a<n.length;a++)this.runtime.unrefLuaCallback?.(r)}_removeListeners(t,i){let r=t.get(i)||[];for(let n of r)this.runtime.unrefLuaCallback?.(n);t.delete(i)}_removeAllListeners(t){for(let i of t.values())for(let r of i)this.runtime.unrefLuaCallback?.(r);t.clear()}AddCursorEventListener(t,i){this._addListener(this.cursorListeners,t,i)}RemoveCursorEventListener(t,i){this._removeListener(this.cursorListeners,t,i)}RemoveCursorEventListeners(t){this._removeListeners(this.cursorListeners,t)}RemoveAllCursorEventListeners(){this._removeAllListeners(this.cursorListeners)}SimulateCursorClick(){let t=this.runtime.makeCursorEventData({x:0,y:0,pressX:0,pressY:0});this.emitCursor("CursorDown",t),this.emitCursor("CursorUp",t),this.emitCursor("CursorClick",t)}emitCursor(t,i){if(!this.runtime.cursorEventsEnabled(this))return;let r=this.cursorListeners.get(t)||[];for(let n of r)n(i)}AddKeyEventListener(t,i){this._addListener(this.keyListeners,t,i)}RemoveKeyEventListener(t,i){this._removeListener(this.keyListeners,t,i)}RemoveKeyEventListeners(t){this._removeListeners(this.keyListeners,t)}RemoveAllKeyEventListeners(){this._removeAllListeners(this.keyListeners)}emitKey(t){let i=this.keyListeners.get(t)||[];for(let r of i)if(r()===!0)return!0;return!1}AddNavigationEventListener(t,i){this._addListener(this.navListeners,t,i)}RemoveNavigationEventListener(t,i){this._removeListener(this.navListeners,t,i)}RemoveNavigationEventListeners(t){this._removeListeners(this.navListeners,t)}RemoveAllNavigationEventListeners(){this._removeAllListeners(this.navListeners)}SetControllerNavigation(t,i,r){this.navConfig.set(t,{mode:i,target:r})}GetControllerNavigation(t){let i=this.navConfig.get(t),r=i?[i.mode,i.target]:[null,null];return r.__multi=!0,r}SetImage(t,i){let r=this.imageSource?.Name||this.imageSource,n=t?.Name||t;(i!==this.imageId||r!==n)&&(this.imageType=null),this.imageSource=t,this.imageId=i,this.markPlayDirty()}SetSoftEdgeWidth(t,i){this.softEdgeWidthX=t,this.softEdgeWidthY=i,this.markPlayDirty()}SetFillUnused(){this.fillType="Unused",this.markPlayDirty()}SetFillHorizontal(t,i){this.fillType="Horizontal",this.fillHorizontalType=t,this.fillAmount=i,this.markPlayDirty()}SetFillVertical(t,i){this.fillType="Vertical",this.fillVerticalType=t,this.fillAmount=i,this.markPlayDirty()}SetFillRadial90(t,i){this.fillType="Radial90",this.fillRadial90Type=t,this.fillAmount=i,this.markPlayDirty()}SetFillRadial180(t,i){this.fillType="Radial180",this.fillRadialType=t,this.fillAmount=i,this.markPlayDirty()}SetFillRadial360(t,i){this.fillType="Radial360",this.fillRadialType=t,this.fillAmount=i,this.markPlayDirty()}PlayAnimation(){}StopAnimation(){}RefreshItems(t,i){if(!Number.isInteger(t)||t<0||t>2e3)throw new Error("RefreshItems: simulator supports 0..2000 items");if(typeof i!="function")throw new Error("RefreshItems: callback must be a function");if(!this.alive||this._refreshingGrid)throw new Error("RefreshItems: destroyed control or recursive refresh");if(t&&!this.runtime.templates.has(Number(this.itemPrefabIndex)))throw new Error("RefreshItems: item template not found");if(t&&["OnInit","OnDestroy"].includes(this.runtime.lifecyclePhase))throw new Error("RefreshItems: items cannot be created during OnInit/OnDestroy");this._refreshingGrid=!0;try{this._gridItems||=[];let r=[];for(let n of this._gridItems)n.alive&&n.parent===this&&n.prefabIndex===Number(this.itemPrefabIndex)&&r.length<t?r.push(n):n.alive&&n.parent===this&&this.runtime.destroyControl(n);for(this._gridItems=r;r.length<t;){let n=this.runtime.instantiate(this.itemPrefabIndex,this,this.runtime.lifecyclePhase);if(!n)throw new Error("RefreshItems: could not instantiate item");r.push(n),n.SetActive(!0)}this.itemCount=t,Vt(this),this.markPlayDirty(!0);for(let n=0;n<r.length&&this.alive;n+=1)i(r[n],n)}finally{this._refreshingGrid=!1}}GetItemIndex(t){return t?.alive&&t.parent===this?this._gridItems?.indexOf(t)??-1:-1}GetItemSize(){return[this.cellSizeX,this.cellSizeY]}GetItemSpacing(){return[this.spacingX,this.spacingY]}GetPadding(){return[this.padding1Y,this.padding2Y,this.padding1X,this.padding2X]}ScrollToItemAt(t,i){if(!Number.isInteger(t)||t<0||t>=this.itemCount)throw new Error("ScrollToItemAt: item index out of range");let r=gi(this),n=r.horizontal?r.cellW:r.cellH,o=r.horizontal?r.gapX:r.gapY,a=(r.horizontal?r.left:r.top)+Math.floor(t/r.lanes)*(n+o),s=i?.Name||i;if(!["Top","Center","Bottom"].includes(s))throw new Error("ScrollToItemAt: invalid alignment");let c=a-(s==="Center"?(r.viewport-n)/2:s==="Bottom"?r.viewport-n:0);this.scrollProgress=r.max?Qi(c/r.max):0,Vt(this),this.markPlayDirty(!0)}GetContentLength(){return gi(this).length}};function Be(e,t){t(e);for(let i of e.children)Be(i,t)}function bn(e,t=[],i=""){t.push(`${i}${e.name||"(unnamed)"} [${e.typeofName}] Id=${e.Id}`);for(let r of e.children)bn(r,t,i+" ");return t}function er(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}var Ta={Linear:e=>e,InSine:e=>1-Math.cos(e*Math.PI/2),OutSine:e=>Math.sin(e*Math.PI/2),InOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,InQuad:e=>e*e,OutQuad:e=>1-(1-e)*(1-e),InOutQuad:e=>e<.5?2*e*e:1-(-2*e+2)**2/2,InCubic:e=>e*e*e,OutCubic:e=>1-(1-e)**3,InOutCubic:e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2,InQuart:e=>e**4,OutQuart:e=>1-(1-e)**4,InOutQuart:e=>e<.5?8*e**4:1-(-2*e+2)**4/2,InQuint:e=>e**5,OutQuint:e=>1-(1-e)**5,InOutQuint:e=>e<.5?16*e**5:1-(-2*e+2)**5/2,InExpo:e=>e===0?0:2**(10*e-10),OutExpo:e=>e===1?1:1-2**(-10*e),InOutExpo:e=>e===0||e===1?e:e<.5?2**(20*e-10)/2:(2-2**(-20*e+10))/2,InCirc:e=>1-Math.sqrt(1-e**2),OutCirc:e=>Math.sqrt(1-(e-1)**2),InOutCirc:e=>e<.5?(1-Math.sqrt(1-(2*e)**2))/2:(Math.sqrt(1-(-2*e+2)**2)+1)/2,InBack:e=>(1.70158+1)*e*e*e-1.70158*e*e,OutBack:e=>1+2.70158*(e-1)**3+1.70158*(e-1)**2,InOutBack:e=>{let i=2.5949095;return e<.5?(2*e)**2*((i+1)*2*e-i)/2:((2*e-2)**2*((i+1)*(e*2-2)+i)+2)/2},InElastic:e=>e===0||e===1?e:-(2**(10*e-10))*Math.sin((e*10-10.75)*(2*Math.PI/3)),OutElastic:e=>e===0||e===1?e:2**(-10*e)*Math.sin((e*10-.75)*(2*Math.PI/3))+1,InOutElastic:e=>{if(e===0||e===1)return e;let t=2*Math.PI/4.5;return e<.5?-(2**(20*e-10)*Math.sin((20*e-11.125)*t))/2:2**(-20*e+10)*Math.sin((20*e-11.125)*t)/2+1},InBounce:e=>1-er(1-e),OutBounce:er,InOutBounce:e=>e<.5?(1-er(1-2*e))/2:(1+er(2*e-1))/2};function Ra(e,t){let i=Ta[e]||Ta.Linear;return t<=0?0:t>=1?1:i(t)}function Bt(e,t,i,r=255){let n=tr(e),o=tr(t),a=tr(i);return((r==null?255:tr(r))<<24|n<<16|o<<8|a)>>>0}function yi(e){let t=e>>>0;return[t>>>16&255,t>>>8&255,t&255,t>>>24&255]}function tr(e){let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(255,Math.trunc(t))):0}function Ma(e,t,i){let r=yi(e),n=yi(t);return Bt(r[0]+(n[0]-r[0])*i,r[1]+(n[1]-r[1])*i,r[2]+(n[2]-r[2])*i,r[3]+(n[3]-r[3])*i)}var Kc=new Set(["fontColor","bgColor","outlineColor","imageColor"]),qc=new Set(["fontSize","minimumFontSize"]),vn=1e-9;function Jc(e,t){return typeof e?.luaFieldValue=="function"?e.luaFieldValue(t):e[t]}var bi=class{constructor(t,i,r,n){this.runtime=t,this.object=i,this.data={...r},this.duration=Math.max(0,Number(n)||0),this.easeName="Linear",this.relative=!1,this.playing=!1,this.paused=!1,this.elapsed=0,this.loops=1,this.loopIndex=0,this.from={},this.to={},this.initialFrom=null,this.initialTo=null,this.onComplete=null,this.onStepComplete=null,this.killed=!1,this.dead=!1,this.completed=!1}capture(){this.from={},this.to={};for(let[t,i]of Object.entries(this.data)){let r=Jc(this.object,t);this.from[t]=r,this.to[t]=this.relative?Number(r)+Number(i):i}}restoreInitial(){this.from={...this.initialFrom},this.to={...this.initialTo}}SetEase(t){return this.easeName=typeof t=="string"?t:t?.Name||"Linear",this}SetRelative(t){return this.relative=!!t,this}Play(){return this.dead?this:this.playing?(this.paused=!1,this):this._start(!1)}_begin(t){this.playing=!0,this.paused=!1,this.elapsed=0,this.loopIndex=0,this.killed=!1,this.completed=!1,t&&this.initialFrom?this.restoreInitial():(this.capture(),this.initialFrom={...this.from},this.initialTo={...this.to})}_start(t){return this._begin(t),this.runtime.tweens.add(this),this.runtime.animations.add(this),this}get loopCount(){return this.loops>0?this.loops:1}Pause(){this.paused=!0}Resume(){this.paused=!1}Restart(){return this.dead?this:this._start(!0)}Complete(){this.dead||this.completed||(this.initialFrom||this._begin(!1),this.apply(1),this.finish(!0))}Kill(t){t?this.Complete():this.finish(!1),this.dead=!0}SetOnComplete(t){return this.onComplete=t,this}SetOnStepComplete(t){return this.onStepComplete=t,this}SetLoops(t){return this.loops=t,this}apply(t){if(this.object?.alive===!1)return;let i=Ra(this.easeName,t),r=!1,n=!1;for(let o of Object.keys(this.to)){let a=this.from[o],s=this.to[o];if(Kc.has(o)&&typeof a=="number"&&typeof s=="number")this.object[o]=Ma(a,s,i);else if(typeof a=="number"&&typeof s=="number"){let c=a+(s-a)*i;this.object[o]=qc.has(o)?Math.trunc(c):c}else this.object[o]=i>=1?s:a;r=!0,Zi.has(o)&&(n=!0)}r&&typeof this.object?.markPlayDirty=="function"&&this.object.markPlayDirty(n)}_advance(t,i){this.elapsed+=t;let r=this.duration<=0?1:Math.min(1,this.elapsed/this.duration);return this.apply(r),r<1?!1:i>=0&&this.loopIndex+1>=i?!0:(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.loopIndex++,this.elapsed=0,this.restoreInitial(),!1)}step(t){!this.playing||this.paused||this.killed||this._advance(t,this.loops<0?-1:this.loopCount)&&(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.finish(!0))}finish(t){this.playing=!1,this.killed=!0,t&&(this.completed=!0),this.runtime.tweens.delete(this),this.runtime.animations.delete(this),t&&this.onComplete&&this.runtime.safeCall(this.onComplete)}},jt=class{constructor(t){this.runtime=t,this.steps=[],this.playing=!1,this.paused=!1,this.killed=!1,this.dead=!1,this.completed=!1,this.elapsed=0,this.loops=1,this.loopIndex=0,this.onComplete=null,this.onStepComplete=null,this._entries=null}Append(t){return this.steps.push({kind:"tween",tween:t,parallel:!1}),this}AppendInterval(t){return this.steps.push({kind:"interval",duration:t}),this}AppendCallback(t){return this.steps.push({kind:"callback",fn:t}),this}Join(t){return this.steps.push({kind:"tween",tween:t,parallel:!0}),this}Insert(t,i){return this.steps.push({kind:"insert",time:t,tween:i}),this}InsertCallback(t,i){return this.steps.push({kind:"insertCb",time:t,fn:i}),this}Play(){return this.dead?this:this.playing?(this.paused=!1,this):this._play()}_play(){return this.playing=!0,this.paused=!1,this.killed=!1,this.completed=!1,this.elapsed=0,this.loopIndex=0,this._schedule(),this.runtime.sequences.add(this),this.runtime.animations.add(this),this}_schedule(){let t=0,i=0,r=!1,n=[],o=a=>a.duration*a.loopCount;for(let a of this.steps)if(a.kind==="tween"&&a.parallel){let s=r?i:t;n.push({at:s,tween:a.tween}),t=Math.max(t,s+o(a.tween))}else a.kind==="tween"?(n.push({at:t,tween:a.tween}),i=t,r=!0,t+=o(a.tween)):a.kind==="interval"?(i=t,r=!0,t+=a.duration):a.kind==="callback"?n.push({at:t,fn:a.fn}):a.kind==="insert"?(n.push({at:a.time,tween:a.tween}),t=Math.max(t,a.time+o(a.tween))):a.kind==="insertCb"&&(n.push({at:a.time,fn:a.fn}),t=Math.max(t,a.time));this._entries=n.map((a,s)=>({...a,index:s,end:a.tween?a.at+o(a.tween):a.at})),this._end=t,this._resetEntries()}_resetEntries(){for(let t of this._entries)t.started=!1,t.done=!1}_startChild(t){t.started=!0,t.tween._begin(!!t.tween.initialFrom)}_finishChild(t){t.done=!0,t.tween.apply(1),t.tween.onStepComplete&&this.runtime.safeCall(t.tween.onStepComplete),t.tween.finish(!0)}_advanceTo(t,i){let r=this._entries,n=[];for(let a of r)!a.started&&a.at<=t+vn&&n.push({at:a.at,rank:a.fn?1:2,entry:a}),a.tween&&!a.done&&a.end<=t+vn&&n.push({at:a.end,rank:0,entry:a});n.sort((a,s)=>a.at-s.at||a.rank-s.rank||a.entry.index-s.entry.index);let o=new Set;for(let{rank:a,entry:s}of n)if(a===1){if(s.started=!0,this.runtime.safeCall(s.fn),!this.playing||this.killed||this._entries!==r)return!1}else s.started||(this._startChild(s),o.add(s)),a===0&&!s.done&&this._finishChild(s);for(let a of r)!a.tween||!a.started||a.done||(o.has(a)?a.tween._advance(t-a.at,a.tween.loopCount):a.tween._advance(i,a.tween.loopCount));return!0}step(t){!this.playing||this.paused||this.killed||(this.elapsed+=t,this._advanceTo(this.elapsed,t)&&(this.elapsed+vn<this._end||(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.loopIndex++,this.loops<0||this.loopIndex<this.loops?(this.elapsed=0,this._resetEntries()):this.finish(!0))))}Pause(){this.paused=!0}Resume(){this.paused=!1}Restart(){this.dead||this._play()}Complete(){this.dead||this.completed||(this._entries||this._schedule(),this.playing=!0,this.killed=!1,this._advanceTo(1/0,0)&&(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.finish(!0)))}Kill(t){t?this.Complete():this.finish(!1),this.dead=!0}SetOnComplete(t){return this.onComplete=t,this}SetOnStepComplete(t){return this.onStepComplete=t,this}SetLoops(t){return this.loops=t,this}finish(t){this.playing=!1,this.killed=!0,t&&(this.completed=!0),this.runtime.sequences.delete(this),this.runtime.animations.delete(this),t&&this.onComplete&&this.runtime.safeCall(this.onComplete)}};var ir={EaseType:["Linear","InSine","OutSine","InOutSine","InQuad","OutQuad","InOutQuad","InCubic","OutCubic","InOutCubic","InQuart","OutQuart","InOutQuart","InQuint","OutQuint","InOutQuint","InExpo","OutExpo","InOutExpo","InCirc","OutCirc","InOutCirc","InBack","OutBack","InOutBack","InElastic","OutElastic","InOutElastic","InBounce","OutBounce","InOutBounce"],CustomVariableEntityType:["Level","PlayerSelf","AvatarSelf"],Device:["KeyboardAndMouse","Mobile","Controller","MobileController"],StageMode:["Beyond","Classic"],LanguageType:["LanguageNone","LanguageEng","LanguageChs","LanguageCht","LanguageFra","LanguageDeu","LanguageSpa","LanguagePor","LanguageRus","LanguageJpn","LanguageKor","LanguageTha","LanguageVie","LanguageInd","LanguageTur","LanguageIta"],ParamType:["Entity","EntityList","Int","IntList","Bool","BoolList","Float","FloatList","String","StringList","Vector3","Vector3List","Guid","GuidList","ConfigId","PrefabId","ConfigIdList","PrefabIdList"],CursorEventType:["CursorDown","CursorUp","CursorEnter","CursorExit","CursorDrag","CursorBeginDrag","CursorEndDrag","CursorClick"],ScrollDirection:["Horizontal","Vertical"],ScrollLayoutConstraint:["AutoWrap","Fixed"],ScrollAlignType:["Bottom","Center","Top"],ControllerNavigationDir:["Up","Down","Left","Right"],ControllerNavigationEventType:["Confirm","Cancel","Focus","LostFocus","RightStickUp","RightStickDown","RightStickRight","RightStickLeft","LeftStickUp","LeftStickDown","LeftStickRight","LeftStickLeft"],ControllerNavigationMode:["None","NearestControl","Specified"],TextHorizontalAlignment:["Left","Middle","Right"],TextVerticalAlignment:["Top","Middle","Bottom"],ImageType:["Basic","Stretch"],ImageSource:["StaticReference","Item","Equipment","Skill","UnitStatus","Faction","Currency","Prefab"],ImageFillType:["Unused","Horizontal","Vertical","Radial90","Radial180","Radial360"],ImageFillHorizontalType:["Left","Right"],ImageFillVerticalType:["Bottom","Top"],ImageFillRadial90Type:["BottomLeft","TopLeft","TopRight","BottomRight"],ImageFillRadialType:["Bottom","Left","Top","Right"],ImageMaskSoftEdgeMode:["Percentage","Pixel"],UIAnimationLayer:["AboveAllControls","BelowAllControls"]},Qc=[...Array.from({length:43},(e,t)=>`CraftspersonKey${t+1}`),"MoveForwardKey","MoveBackwardKey","MoveLeftKey","MoveRightKey","SwitchToWalkOrRunKey","SprintKey","JumpKey","DropKey","OpenShortcutWheelKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key","None"],Zc=[...Array.from({length:14},(e,t)=>`CraftspersonKey${t+1}`),"SprintKey","JumpKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key","MenuConfirmKey","MenuBackKey","None"];function eu(){let e=[];for(let t of["Down","Up"]){for(let i=1;i<=43;i++)e.push(`KeyboardCraftspersonKey${i}${t}`);for(let i of["MoveForwardKey","MoveBackwardKey","MoveLeftKey","MoveRightKey","SwitchToWalkOrRunKey","SprintKey","JumpKey","DropKey","OpenShortcutWheelKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key"])e.push(`Keyboard${i}${t}`);for(let i=1;i<=14;i++)e.push(`ControllerCraftspersonKey${i}${t}`);for(let i of["SprintKey","JumpKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key","MenuConfirmKey","MenuBackKey"])e.push(`Controller${i}${t}`)}return e}ir.KeyboardKeyCode=Qc;ir.ControllerKeyCode=Zc;ir.KeyEventType=eu();var Na=new Map;function yt(e,t){let i=`${e}\0${t}`,r=Na.get(i);return r||(r={__kind:"EnumItem",Name:t,FullName:`Enum.${e}.${t}`,EnumType:e},Na.set(i,r)),r}function Sn(e,t){return t==null?t:t.__kind==="EnumItem"?yt(t.EnumType||e,t.Name):typeof t=="string"&&t?yt(e,t):t}function wn(){let e={};for(let[t,i]of Object.entries(ir)){let r={};for(let n of i)r[n]=yt(t,n);e[t]=r}return e}var tu=new Set(["Id","prefabIndex","imageId","fontSize","minimumFontSize","clickAudioId","itemCount","itemPrefabIndex","animationId","referencedPrefabIndex"]),iu=new Set(["imageColor","fontColor","bgColor","outlineColor"]),Oa={horizontalAlignment:"TextHorizontalAlignment",verticalAlignment:"TextVerticalAlignment",imageSource:"ImageSource",imageType:"ImageType",fillType:"ImageFillType",fillHorizontalType:"ImageFillHorizontalType",fillVerticalType:"ImageFillVerticalType",fillRadial90Type:"ImageFillRadial90Type",fillRadialType:"ImageFillRadialType",softEdgeMode:"ImageMaskSoftEdgeMode",layer:"UIAnimationLayer",scrollDirection:"ScrollDirection",layoutConstraint:"ScrollLayoutConstraint"},bt=d.LUA_REGISTRYINDEX,Fa=d.LUA_MULTRET,ru=Object.freeze({InstantiateClientUIControl:2,DestroyClientUIControl:1,GetClientUIControl:1,FindClientUIRoot:1,GetClientUIRoots:0,GetUICanvasSize:0,GetCursorUIPos:0,GetDevice:0,SetControllerFocus:1,GetControllerFocus:0,GetControllerLeftStickAxis:0,GetControllerRightStickAxis:0,Tween:3,TweenSequence:0,ServerSignal:1,GetGlobalCustomVariableValue:2,PauseLevelTime:1,IsLevelTimePaused:0,PlayAudio2D:1,StopAudio:1,IsAudioAlive:1,GetLanguageType:0,GetStageMode:0,IsTestPlay:0,GetText:1,PrintClientUITree:0});function we(e){return e==null?"":typeof e=="string"?e:e.Name||e.FullName||String(e)}var rr=class{constructor(t={}){this.canvasWidth=t.canvasWidth??1600,this.canvasHeight=t.canvasHeight??900,this.device=t.device??"KeyboardAndMouse",this.language=t.language??"LanguageChs",this.stageMode=t.stageMode??"Classic",this.testPlay=t.testPlay!==!1,this.canSelectImageType=t.canSelectImageType||(()=>!1),this.clock={time:0,levelTime:0,paused:!1,frame:0},this.logs=[],this.mountErrors=[],this.tweens=new Set,this.sequences=new Set,this.animations=new Set,this.audios=new Map,this.nextAudioId=1,this.audioDuration=t.audioDuration||(()=>null),this.audioHistory=[],this.audioWarnings=new Set,this.audioRevision=0,this._nextControlId=1,this._playRemoved=[],this._nextScriptMappingId=1,this.lifecyclePhase="idle",this.controlsById=new Map,this.roots=[],this.templates=new Map,this.scriptFiles=new Map,this.requireAliases=new Map,this.requireCache=new Map,this.moduleBaseEnvironments=new Map,this.luaFunctions=new Map,this.mountedScripts=[],this.serverVars={Level:Object.create(null),PlayerSelf:Object.create(null),AvatarSelf:Object.create(null)},this.serverBridge=null,this.varHandlers=[],this.signalHandlers=[],this.cursor={x:0,y:0},this.focus=null,this.stick={left:[0,0],right:[0,0]},this.enumTree=wn(),this.luaStates=new Set,this.L=null}nextControlId(){let t=this._nextControlId;return this._nextControlId+=1,t}resolveScriptMappingId(t){let i=Number(t);if(Number.isSafeInteger(i)&&i>0)return this._nextScriptMappingId=Math.max(this._nextScriptMappingId,i+1),i;let r=this._nextScriptMappingId;return this._nextScriptMappingId+=1,r}pushPackedColor(t,i){let r=i>>>0;(r|0)===r?d.lua_pushinteger(t,r):d.lua_pushnumber(t,r)}retainLuaCallback(t){Sa(t)}unrefLuaCallback(t){wa(this,t)}log(t,...i){let r=i.map(n=>n==null?"nil":typeof n=="object"&&n!==null&&n.__kind==="EnumItem"?n.Name:String(n)).join(" ");this.logs.push({level:t,text:r,time:this.clock.time})}safeCall(t,...i){try{return t(...i)}catch(r){this.log("lua-error",r&&r.message?r.message:String(r))}}scriptCanRun(t){if(!t?.alive||!t.enabled)return!1;let i=t.object;return!i||i.alive&&i.activeInHierarchy}cursorEventsEnabled(t){for(let i=t;i;i=i.parent)if(i.kind==="container"&&i.showCursor===!0)return!0;return!1}registerTemplate(t,i){this.templates.set(Number(t),i)}registerScriptFile(t,i){let r=this.normalizeRequirePath(t);this.scriptFiles.set(r,i),r.startsWith("default_import_file/")||this.requireAliases.set(`default_import_file/${r}`,r)}normalizeRequirePath(t){let i=String(t).replace(/\\/g,"/");return i.endsWith(".lua")&&(i=i.slice(0,-4)),i}addRoot(t){let i=t instanceof at?t:new at(this,t);return this.roots.push(i),Be(i,r=>this.controlsById.set(r.Id,r)),this.mountSpecScripts(t,i),i}mountSpecScripts(t,i){if(t instanceof at)return;let r=o=>(o.scripts?.length||0)>0||(o.children||[]).some(r);if(!t||!r(t))return;let n=this.lifecyclePhase;try{let o=(a,s)=>{for(let l of a.scripts||[])try{this.mountScript({path:l.path,source:l.source,control:s,scriptMappingId:l.scriptMappingId})}catch(u){let f=u&&u.message?u.message:String(u);this.mountErrors.push(f),this.log("lua-error",f)}let c=a.children||[];for(let l=0;l<c.length;l+=1)o(c[l],s?.children?.[l])};o(t,i)}finally{this.lifecyclePhase=n}}makeCursorEventData({x:t=0,y:i=0,pressX:r=t,pressY:n=i,deltaX:o=t-r,deltaY:a=i-n,dragging:s=!1,touchId:c=-1}={}){let l=this;return{__kind:"CursorEventData",typeofName:"CursorEventData",dragging:s,touchId:c,x:t,y:i,pressX:r,pressY:n,GetUIPos(){return[t,i]},GetPressUIPos(){return[r,n]},GetUIPosDelta(){return[o,a]}}}boot(){let t=this.newLuaThread();this.L=t}installGlobals(t){let i=this;d.lua_pushcfunction(t,r=>{let n=d.lua_gettop(r),o=[];for(let a=1;a<=n;a++)o.push(be(r,i,a));return i.log("info",...o),0}),d.lua_setglobal(t,R("print")),d.lua_pushcfunction(t,r=>{let n=d.lua_gettop(r),o=[];for(let a=1;a<=n;a++)o.push(be(r,i,a));return i.log("error",...o),0}),d.lua_setglobal(t,R("printerr")),d.lua_pushcfunction(t,r=>{if(d.lua_type(r,1)===d.LUA_TTABLE&&!Ke(r,1))return d.lua_pushstring(r,R("table")),1;let n=be(r,i,1);return d.lua_pushstring(r,R(i.typeofOf(n))),1}),d.lua_setglobal(t,R("typeof")),this.pushColorLib(t),this.pushEnumLib(t),this.pushGameLib(t),d.lua_pushcfunction(t,r=>i.luaRequire(r)),d.lua_setglobal(t,R("require"))}typeofOf(t){return t==null?"nil":t.__kind==="Script"?"Script":t.__kind==="EnumItem"?"EnumItem":t.__kind==="CursorEventData"?"CursorEventData":t.__kind==="ServerSignal"?"ServerSignal":t instanceof jt?"TweenSequence":t instanceof bi?"Tween":t.typeofName?t.typeofName:typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t}pushColorLib(t){d.lua_newtable(t),d.lua_pushcfunction(t,i=>(this.pushPackedColor(i,Bt(d.lua_tonumber(i,1),d.lua_tonumber(i,2),d.lua_tonumber(i,3),255)),1)),d.lua_setfield(t,-2,R("FromRGB")),d.lua_pushcfunction(t,i=>{let r=d.lua_isnoneornil(i,4)?255:d.lua_tonumber(i,4);return this.pushPackedColor(i,Bt(d.lua_tonumber(i,1),d.lua_tonumber(i,2),d.lua_tonumber(i,3),r)),1}),d.lua_setfield(t,-2,R("FromRGBA")),d.lua_pushcfunction(t,i=>{let r=d.lua_tonumber(i,1)>>>0;for(let n of yi(r))d.lua_pushinteger(i,n);return 4}),d.lua_setfield(t,-2,R("ToRGBA")),d.lua_newtable(t),d.lua_pushcfunction(t,i=>{let r=d.lua_tonumber(i,2),n=d.lua_tonumber(i,3),o=d.lua_tonumber(i,4),a=d.lua_isnoneornil(i,5)?255:d.lua_tonumber(i,5);return this.pushPackedColor(i,Bt(r,n,o,a)),1}),d.lua_setfield(t,-2,R("__call")),d.lua_setmetatable(t,-2),d.lua_setglobal(t,R("Color"))}pushEnumLib(t){d.lua_newtable(t);for(let[i,r]of Object.entries(this.enumTree)){d.lua_newtable(t);for(let[n,o]of Object.entries(r))this.pushEnumItem(t,o),d.lua_setfield(t,-2,R(n));d.lua_setfield(t,-2,R(i))}d.lua_setglobal(t,R("Enum"))}pushEnumItem(t,i){let r=d.lua_newuserdata(t,0);gt(r,i),ee.luaL_setmetatable(t,R("EnumItem"))}pushControl(t,i){let r=d.lua_newuserdata(t,0);gt(r,i),ee.luaL_setmetatable(t,R("Control"))}pushScript(t,i){d.lua_newtable(t),d.lua_pushlightuserdata(t,mn);let r=d.lua_newuserdata(t,0);gt(r,i),d.lua_rawset(t,-3),ee.luaL_getmetatable(t,R("Script")),d.lua_setmetatable(t,-2)}pushTween(t,i){let r=d.lua_newuserdata(t,0);gt(r,i);let n=i instanceof jt?"TweenSequence":"Tween";ee.luaL_setmetatable(t,R(n))}pushSignal(t,i){let r=d.lua_newuserdata(t,0);gt(r,i),ee.luaL_setmetatable(t,R("ServerSignal"))}pushCursor(t,i){let r=d.lua_newuserdata(t,0);gt(r,i),ee.luaL_setmetatable(t,R("CursorEventData"))}pushGameLib(t){let i=this;d.lua_newtable(t);let r={InstantiateClientUIControl:n=>{let o=d.lua_tointeger(n,1),a=Ee(d.lua_touserdata(n,2)),s=i.instantiate(o,a,i.lifecyclePhase);return s?(i.pushControl(n,s),1):(d.lua_pushnil(n),1)},DestroyClientUIControl:n=>{let o=Ee(d.lua_touserdata(n,1));return o&&i.destroyControl(o),0},GetClientUIControl:n=>{let o=d.lua_tointeger(n,1),a=i.controlsById.get(o);return a?i.pushControl(n,a):d.lua_pushnil(n),1},FindClientUIRoot:n=>{let o=Q(n,1),a=i.roots.find(s=>s.name===o);return a?i.pushControl(n,a):d.lua_pushnil(n),1},GetClientUIRoots:n=>(d.lua_createtable(n,i.roots.length,0),i.roots.forEach((o,a)=>{i.pushControl(n,o),d.lua_rawseti(n,-2,a+1)}),1),GetUICanvasSize:n=>(d.lua_pushnumber(n,i.canvasWidth),d.lua_pushnumber(n,i.canvasHeight),2),GetCursorUIPos:n=>(d.lua_pushnumber(n,i.cursor.x),d.lua_pushnumber(n,i.cursor.y),2),GetDevice:n=>(i.pushEnumItem(n,yt("Device",i.device)),1),SetControllerFocus:n=>(i.focus=Ee(d.lua_touserdata(n,1)),0),GetControllerFocus:n=>(i.focus?i.pushControl(n,i.focus):d.lua_pushnil(n),1),GetControllerLeftStickAxis:n=>(d.lua_pushnumber(n,i.stick.left[0]),d.lua_pushnumber(n,i.stick.left[1]),2),GetControllerRightStickAxis:n=>(d.lua_pushnumber(n,i.stick.right[0]),d.lua_pushnumber(n,i.stick.right[1]),2),Tween:n=>{let o=Ee(d.lua_touserdata(n,1))||be(n,i,1),a=be(n,i,2)||{},s=d.lua_tonumber(n,3),c=new bi(i,o,a,s);return i.pushTween(n,c),1},TweenSequence:n=>(i.pushTween(n,new jt(i)),1),ServerSignal:n=>{let o=Q(n,1);return i.pushSignal(n,i.makeServerSignal(o)),1},GetGlobalCustomVariableValue:n=>{let o=we(be(n,i,1)),a=Q(n,2);return le(n,i,i.getVar(o,a)),1},PauseLevelTime:n=>(i.clock.paused=!!d.lua_toboolean(n,1),0),IsLevelTimePaused:n=>(d.lua_pushboolean(n,i.clock.paused),1),PlayAudio2D:n=>{let o=i.playAudio(i.audioInteger(n));return d.lua_pushinteger(n,o),1},StopAudio:n=>(i.stopAudio(i.audioInteger(n)),0),IsAudioAlive:n=>{let o=i.audios.get(i.audioInteger(n));return d.lua_pushboolean(n,!!(o&&o.alive)),1},GetLanguageType:n=>(i.pushEnumItem(n,yt("LanguageType",i.language)),1),GetStageMode:n=>(i.pushEnumItem(n,yt("StageMode",i.stageMode)),1),IsTestPlay:n=>(d.lua_pushboolean(n,i.testPlay),1),GetText:n=>{let o=Q(n,1);return d.lua_pushstring(n,R(o)),1},PrintClientUITree:n=>{for(let o of i.roots)i.log("info",bn(o).join(`
|
|
109
|
-
`));return 0}};for(let[n,o]of Object.entries(r)){let a=ru[n];if(a===void 0)throw new Error(`missing game arity for ${n}`);d.lua_pushcfunction(t,s=>{let c=d.lua_gettop(s);return c!==a?ee.luaL_error(s,R(`bad argument count to '${n}' (${a} expected, got ${c})`)):o(s)}),d.lua_setfield(t,-2,R(n))}d.lua_setglobal(t,R("game"))}makeServerSignal(t){let i=[],r=this;return{__kind:"ServerSignal",name:t,AddParam(n,o){i.push({type:we(n),value:o})},AddInt(n){i.push({type:"Int",value:n})},AddIntList(n){i.push({type:"IntList",value:n})},AddFloat(n){i.push({type:"Float",value:n})},AddFloatList(n){i.push({type:"FloatList",value:n})},AddString(n){i.push({type:"String",value:n})},AddStringList(n){i.push({type:"StringList",value:n})},AddVector3(n){i.push({type:"Vector3",value:n})},AddVector3List(n){i.push({type:"Vector3List",value:n})},AddBool(n){i.push({type:"Bool",value:n})},AddBoolList(n){i.push({type:"BoolList",value:n})},AddGuid(n){i.push({type:"Guid",value:n})},AddGuidList(n){i.push({type:"GuidList",value:n})},AddEntity(n){i.push({type:"Entity",value:n})},AddEntityList(n){i.push({type:"EntityList",value:n})},AddPrefabId(n){i.push({type:"PrefabId",value:n})},AddPrefabIdList(n){i.push({type:"PrefabIdList",value:n})},AddConfigId(n){i.push({type:"ConfigId",value:n})},AddConfigIdList(n){i.push({type:"ConfigIdList",value:n})},SendSignal(){let n=i.slice();r.serverBridge&&typeof r.serverBridge.receiveFromClient=="function"&&r.serverBridge.receiveFromClient(t,n)}}}audioInteger(t){let i=d.lua_tonumber(t,1);return d.lua_type(t,1)!==d.LUA_TNUMBER||!Number.isSafeInteger(i)?ee.luaL_error(t,R("audio argument must be an integer")):i}playAudio(t){this.audioRevision++;let i=this.nextAudioId++,r=this.audioDuration(t),n=Number.isFinite(r)&&r>0,o={instanceId:i,audioId:t,startedAt:this.clock.time,duration:n?r:0,alive:n,stopped:!1};return this.audioHistory.push(o),this.audioHistory.length>128&&this.audioHistory.shift(),n?(this.audios.size>=128&&this.stopAudio(this.audios.keys().next().value),this.audios.set(i,o)):this.audioWarnings.has(t)||(this.audioWarnings.size>=128&&this.audioWarnings.delete(this.audioWarnings.values().next().value),this.audioWarnings.add(t),this.log("warn",`\u97F3\u6548 ${t} \u672A\u5217\u5165\u6A21\u62DF\u5668\u97F3\u9891\u767D\u540D\u5355`)),i}stopAudio(t){let i=this.audios.get(t)||this.audioHistory.find(r=>r.instanceId===t);i&&!i.stopped&&(i.alive=!1,i.stopped=!0,this.audioRevision++),this.audios.delete(t)}audioSnapshot(){return{sequence:this.nextAudioId-1,revision:this.audioRevision,active:[...this.audios.values()].map(t=>({...t})),recent:this.audioHistory.map(t=>({...t}))}}instantiate(t,i,r){if(r==="OnInit"||r==="OnDestroy")return null;let n=this.templates.get(Number(t));if(!n||!i)return null;let o=new at(this,{...n,Id:this.nextControlId(),authoringId:null,prefabIndex:Number(t)});return i.addChild(o),o.SetAsLastSibling(),Be(o,a=>this.controlsById.set(a.Id,a)),this.mountSpecScripts(n,o),o}destroyControl(t){if(!(!t||!t.alive)){if(t._destroying)throw new Error(`\u5BA2\u6237\u7AEF\u63A7\u4EF6\u751F\u547D\u5468\u671F\u5904\u4E8E\u521B\u5EFA\u6216\u9500\u6BC1\u65F6\uFF0C\u65E0\u6CD5\u8C03\u7528DestroyClientUIControl, ID:${t.name}`);Be(t,i=>{i._destroying=!0}),this._destroyControlTree(t)}}_destroyControlTree(t){this.releaseControlListeners(t);for(let i of t.scripts.slice())this.unmountScript(i);for(let i of t.children.slice())this._destroyControlTree(i);if(t.alive=!1,this.scrollControls?.delete(t),this._playRemoved.push(t.Id),t.parent){let i=t.parent,r=i.children.indexOf(t);r>=0&&i.children.splice(r,1),t._parent=null,i.markPlayDirty(!0)}else{let i=this.roots.indexOf(t);i>=0&&this.roots.splice(i,1)}this.controlsById.delete(t.Id),this.focus===t&&(this.focus=null);for(let i of[...this.tweens])i.object===t&&i.Kill(!1)}releaseControlListeners(t){for(let i of t.cursorListeners.values())for(let r of i)this.unrefLuaCallback(r);for(let i of t.keyListeners.values())for(let r of i)this.unrefLuaCallback(r);for(let i of t.navListeners.values())for(let r of i)this.unrefLuaCallback(r);t.cursorListeners.clear(),t.keyListeners.clear(),t.navListeners.clear(),t.navConfig.clear()}onControlActiveChanging(t,i){let r=[];Be(t,n=>r.push({control:n,was:n.activeInHierarchy})),t.active=!!i,t.markPlayDirty(!0);for(let n of r){let o=n.control.activeInHierarchy;if(n.was!==o)for(let a of n.control.scripts.slice())o?this.enableScript(a):this.disableScript(a)}}bindScriptEnv(t){let i=t.env;return i?(this.pushScript(i,t),d.lua_setglobal(i,R("script")),i):null}disableScript(t){if(!t?.alive||!t.env||t.lifecyclePhase!=="running")return;let i=this.lifecyclePhase;this.lifecyclePhase="OnDisable",t.lifecyclePhase="OnDisable",this.bindScriptEnv(t),this.callGlobal(t.env,"OnDisable"),t.lifecyclePhase="disabled",this.lifecyclePhase=i}enableScript(t){if(!t?.alive||!t.env||t.lifecyclePhase!=="disabled")return;let i=this.lifecyclePhase;this.lifecyclePhase="OnEnable",t.lifecyclePhase="OnEnable",this.bindScriptEnv(t),this.callGlobal(t.env,"OnEnable"),t.lifecyclePhase="running",this.lifecyclePhase=i}unmountScript(t){if(!t||!t.alive)return;let i=t.env,r=this.lifecyclePhase;i&&(t.lifecyclePhase==="running"&&(this.lifecyclePhase="OnDisable",t.lifecyclePhase="OnDisable",this.bindScriptEnv(t),this.callGlobal(i,"OnDisable")),this.lifecyclePhase="OnDestroy",t.lifecyclePhase="OnDestroy",this.bindScriptEnv(t),this.callGlobal(i,"OnDestroy")),t.alive=!1,t.lifecyclePhase="destroyed",this.lifecyclePhase=r,this.mountedScripts=this.mountedScripts.filter(n=>n!==t),t.object&&(t.object.scripts=t.object.scripts.filter(n=>n!==t)),this.varHandlers=this.varHandlers.filter(n=>n.script!==t),this.signalHandlers=this.signalHandlers.filter(n=>n.script!==t),i&&i!==this.L&&this.closeTrackedLuaState(i),t.env=null}installMetatables(t){this.mtEnum(t),this.mtControl(t),this.mtScript(t),this.mtTween(t),this.mtSeq(t),this.mtSignal(t),this.mtCursor(t)}mtIndexNewindex(t,i,r,n,o,a){ee.luaL_newmetatable(t,R(i)),d.lua_pushcfunction(t,s=>{let c=Ke(s,1)||Ee(d.lua_touserdata(s,1)),l=Q(s,2);if(o[l]&&(!a||a(c,l)))return d.lua_pushcfunction(s,o[l]),1;let u;try{u=r(c,l)}catch(f){return ee.luaL_error(s,R(String(f.message||f)))}return u===void 0?(d.lua_pushnil(s),1):(le(s,this,u),1)}),d.lua_setfield(t,-2,R("__index")),d.lua_pushcfunction(t,s=>{try{let c=Ke(s,1)||Ee(d.lua_touserdata(s,1)),l=Q(s,2),u=be(s,this,3);return n(c,l,u),0}catch(c){return d.lua_pushstring(s,R(String(c.message||c))),d.lua_error(s)}}),d.lua_setfield(t,-2,R("__newindex")),d.lua_pushcfunction(t,s=>{let c=Ke(s,1)||Ee(d.lua_touserdata(s,1)),l=Ke(s,2)||Ee(d.lua_touserdata(s,2));return d.lua_pushboolean(s,c===l),1}),d.lua_setfield(t,-2,R("__eq")),d.lua_pop(t,1)}method(t){let i=this;return r=>{let n=Ke(r,1)||Ee(d.lua_touserdata(r,1)),o=d.lua_gettop(r),a=[];for(let s=2;s<=o;s++)a.push(be(r,i,s));try{let s=t(n,...a);if(s===n)return d.lua_pushvalue(r,1),1;if(s===void 0)return 0;if(Array.isArray(s)&&s.__multi){for(let c of s)le(r,i,c);return s.length}if(Array.isArray(s)&&!(s.length&&typeof s[0]=="object"&&s[0]?.typeofName)){if(s.__controls)return d.lua_createtable(r,s.length,0),s.forEach((c,l)=>{i.pushControl(r,c),d.lua_rawseti(r,-2,l+1)}),1;if(s.__scripts)return d.lua_createtable(r,s.length,0),s.forEach((c,l)=>{i.pushScript(r,c),d.lua_rawseti(r,-2,l+1)}),1;if(typeof s[0]=="number"&&s.length<=4){for(let c of s)d.lua_pushnumber(r,c);return s.length}}return le(r,i,s),1}catch(s){return d.lua_pushstring(r,R(String(s.message||s))),d.lua_error(r)}}}mtEnum(t){let i=new Set(["Name","FullName","EnumType"]);this.mtIndexNewindex(t,"EnumItem",(r,n)=>i.has(n)?r[n]:void 0,(r,n)=>{throw new Error(`cannot set ${n}, no such field`)},{})}mtCursor(t){let i=new Set(["dragging","touchId"]);this.mtIndexNewindex(t,"CursorEventData",(r,n)=>i.has(n)?r[n]:void 0,(r,n)=>{throw new Error(`cannot set ${n}, no such field`)},{GetUIPos:this.method(r=>r.GetUIPos()),GetPressUIPos:this.method(r=>r.GetPressUIPos()),GetUIPosDelta:this.method(r=>r.GetUIPosDelta())})}mtControl(t){let i={GetChildren:this.method(r=>{let n=r.GetChildren();return n.__controls=!0,n}),GetChild:this.method((r,n)=>r.GetChild(n)),FindChild:this.method((r,n)=>r.FindChild(n)),SetActive:this.method((r,n)=>r.SetActive(n)),SetVisible:this.method((r,n)=>r.SetVisible(n)),GetSiblingIndex:this.method(r=>r.GetSiblingIndex()),SetSiblingIndex:this.method((r,n)=>r.SetSiblingIndex(n)),SetAsFirstSibling:this.method(r=>r.SetAsFirstSibling()),SetAsLastSibling:this.method(r=>r.SetAsLastSibling()),GetAnchoredPosition:this.method(r=>r.GetAnchoredPosition()),SetAnchoredPosition:this.method((r,n,o)=>r.SetAnchoredPosition(n,o)),GetSizeDelta:this.method(r=>r.GetSizeDelta()),SetSizeDelta:this.method((r,n,o)=>r.SetSizeDelta(n,o)),GetAnchorMin:this.method(r=>r.GetAnchorMin()),SetAnchorMin:this.method((r,n,o)=>r.SetAnchorMin(n,o)),GetAnchorMax:this.method(r=>r.GetAnchorMax()),SetAnchorMax:this.method((r,n,o)=>r.SetAnchorMax(n,o)),GetPivot:this.method(r=>r.GetPivot()),SetPivot:this.method((r,n,o)=>r.SetPivot(n,o)),GetLocalScale:this.method(r=>r.GetLocalScale()),SetLocalScale:this.method((r,n,o,a)=>r.SetLocalScale(n,o,a)),GetLocalRotation:this.method(r=>r.GetLocalRotation()),SetLocalRotation:this.method((r,n,o,a)=>r.SetLocalRotation(n,o,a)),GetScriptByPath:this.method((r,n)=>r.GetScriptByPath(n)),GetScript:this.method((r,n)=>r.GetScript(n)),GetScripts:this.method(r=>{let n=r.GetScripts();return n.__scripts=!0,n}),AddCursorEventListener:this.method((r,n,o)=>r.AddCursorEventListener(we(n),o)),RemoveCursorEventListener:this.method((r,n,o)=>r.RemoveCursorEventListener(we(n),o)),RemoveCursorEventListeners:this.method((r,n)=>r.RemoveCursorEventListeners(we(n))),RemoveAllCursorEventListeners:this.method(r=>r.RemoveAllCursorEventListeners()),SimulateCursorClick:this.method(r=>r.SimulateCursorClick()),AddKeyEventListener:this.method((r,n,o)=>r.AddKeyEventListener(we(n),o)),RemoveKeyEventListener:this.method((r,n,o)=>r.RemoveKeyEventListener(we(n),o)),RemoveKeyEventListeners:this.method((r,n)=>r.RemoveKeyEventListeners(we(n))),RemoveAllKeyEventListeners:this.method(r=>r.RemoveAllKeyEventListeners()),AddNavigationEventListener:this.method((r,n,o)=>r.AddNavigationEventListener(we(n),o)),RemoveNavigationEventListener:this.method((r,n,o)=>r.RemoveNavigationEventListener(we(n),o)),RemoveNavigationEventListeners:this.method((r,n)=>r.RemoveNavigationEventListeners(we(n))),RemoveAllNavigationEventListeners:this.method(r=>r.RemoveAllNavigationEventListeners()),SetControllerNavigation:this.method((r,n,o,a)=>r.SetControllerNavigation(we(n),o,a)),GetControllerNavigation:this.method((r,n)=>r.GetControllerNavigation(we(n))),SetImage:this.method((r,n,o)=>r.SetImage(n,o)),SetSoftEdgeWidth:this.method((r,n,o)=>r.SetSoftEdgeWidth(n,o)),SetFillUnused:this.method(r=>r.SetFillUnused()),SetFillHorizontal:this.method((r,n,o)=>r.SetFillHorizontal(n,o)),SetFillVertical:this.method((r,n,o)=>r.SetFillVertical(n,o)),SetFillRadial90:this.method((r,n,o)=>r.SetFillRadial90(n,o)),SetFillRadial180:this.method((r,n,o)=>r.SetFillRadial180(n,o)),SetFillRadial360:this.method((r,n,o)=>r.SetFillRadial360(n,o)),PlayAnimation:this.method(r=>r.PlayAnimation()),StopAnimation:this.method(r=>r.StopAnimation()),RefreshItems:this.method((r,n,o)=>{this.retainLuaCallback(o);try{r.RefreshItems(n,o)}finally{this.unrefLuaCallback(o)}}),GetItemIndex:this.method((r,n)=>r.GetItemIndex(n)),GetItemSize:this.method(r=>r.GetItemSize()),GetItemSpacing:this.method(r=>r.GetItemSpacing()),GetPadding:this.method(r=>r.GetPadding()),ScrollToItemAt:this.method((r,n,o)=>r.ScrollToItemAt(n,o)),GetContentLength:this.method(r=>r.GetContentLength())};this.mtIndexNewindex(t,"Control",(r,n)=>{if(!yn(r,n))return;if(!r.alive&&n!=="alive")throw new Error(`attempt to read '${n}' of a destroyed control`);let o=r.luaFieldValue(n),a=Oa[n];return a?Sn(a,o):typeof o=="number"&&!tu.has(n)&&!iu.has(n)?new pi(o):o},(r,n,o)=>{if(yn(r,n)==="rw"){if((n==="fontSize"||n==="minimumFontSize")&&!Number.isInteger(o)){let c=o===null?"nil":typeof o;throw new Error(`bad argument #2 to '${n}' (integer expected, got ${c})`)}let s=Oa[n];if(n==="imageType"&&(o?.EnumType!=="ImageType"||!["Basic","Stretch"].includes(o.Name)))throw new Error("imageType requires Enum.ImageType.Basic or Stretch");r[n]=s?Sn(s,o):o,typeof r.markPlayDirty=="function"&&r.markPlayDirty(Zi.has(n));return}throw new Error(`cannot set ${n}, no such field`)},i,Pa)}mtScript(t){let i=this,r=new Set(["alive","scriptMappingId","object","path","enabled"]);this.mtIndexNewindex(t,"Script",(n,o)=>r.has(o)?n[o]:void 0,(n,o,a)=>{if(o==="enabled"){n.enabled=!!a;return}throw new Error(`cannot set ${o}, no such field`)},{GetParam:this.method((n,o)=>Object.prototype.hasOwnProperty.call(n.params,o)?n.params[o]:null),Invoke:n=>i.luaInvoke(n),EnableUpdate:this.method((n,o)=>{n.updateEnabled=!!o}),RegisterServerSignalHandler:this.method((n,o,a)=>{i.signalHandlers.push({script:n,name:o,fn:a})}),UnregisterServerSignalHandler:this.method((n,o)=>{i.signalHandlers=i.signalHandlers.filter(a=>!(a.script===n&&a.name===o))}),RegisterCustomVariableChangedHandler:this.method((n,o,a,s)=>{i.varHandlers.push({script:n,entityType:we(o),name:a,fn:s})}),UnregisterCustomVariableChangedHandler:this.method((n,o,a)=>{let s=we(o);i.varHandlers=i.varHandlers.filter(c=>!(c.script===n&&c.entityType===s&&c.name===a))})})}mtTween(t){this.mtIndexNewindex(t,"Tween",()=>{},()=>{},{SetEase:this.method((i,r)=>i.SetEase(r)),SetRelative:this.method((i,r)=>i.SetRelative(r)),Play:this.method(i=>i.Play()),Pause:this.method(i=>i.Pause()),Resume:this.method(i=>i.Resume()),Restart:this.method(i=>i.Restart()),Complete:this.method(i=>i.Complete()),Kill:this.method((i,r)=>i.Kill(r)),SetOnComplete:this.method((i,r)=>i.SetOnComplete(r)),SetOnStepComplete:this.method((i,r)=>i.SetOnStepComplete(r)),SetLoops:this.method((i,r)=>i.SetLoops(r))})}mtSeq(t){this.mtIndexNewindex(t,"TweenSequence",()=>{},()=>{},{Append:this.method((i,r)=>i.Append(r)),AppendInterval:this.method((i,r)=>i.AppendInterval(r)),AppendCallback:this.method((i,r)=>i.AppendCallback(r)),Join:this.method((i,r)=>i.Join(r)),Insert:this.method((i,r,n)=>i.Insert(r,n)),InsertCallback:this.method((i,r,n)=>i.InsertCallback(r,n)),Play:this.method(i=>i.Play()),Pause:this.method(i=>i.Pause()),Resume:this.method(i=>i.Resume()),Restart:this.method(i=>i.Restart()),Complete:this.method(i=>i.Complete()),Kill:this.method((i,r)=>i.Kill(r)),SetOnComplete:this.method((i,r)=>i.SetOnComplete(r)),SetOnStepComplete:this.method((i,r)=>i.SetOnStepComplete(r)),SetLoops:this.method((i,r)=>i.SetLoops(r))})}mtSignal(t){this.mtIndexNewindex(t,"ServerSignal",()=>{},()=>{},{AddParam:this.method((i,r,n)=>i.AddParam(r,n)),SendSignal:this.method(i=>i.SendSignal()),AddInt:this.method((i,r)=>i.AddInt(r)),AddIntList:this.method((i,r)=>i.AddIntList(r)),AddFloat:this.method((i,r)=>i.AddFloat(r)),AddFloatList:this.method((i,r)=>i.AddFloatList(r)),AddString:this.method((i,r)=>i.AddString(r)),AddStringList:this.method((i,r)=>i.AddStringList(r)),AddVector3:this.method((i,r)=>i.AddVector3(r)),AddVector3List:this.method((i,r)=>i.AddVector3List(r)),AddBool:this.method((i,r)=>i.AddBool(r)),AddBoolList:this.method((i,r)=>i.AddBoolList(r)),AddGuid:this.method((i,r)=>i.AddGuid(r)),AddGuidList:this.method((i,r)=>i.AddGuidList(r)),AddEntity:this.method((i,r)=>i.AddEntity(r)),AddEntityList:this.method((i,r)=>i.AddEntityList(r)),AddPrefabId:this.method((i,r)=>i.AddPrefabId(r)),AddPrefabIdList:this.method((i,r)=>i.AddPrefabIdList(r)),AddConfigId:this.method((i,r)=>i.AddConfigId(r)),AddConfigIdList:this.method((i,r)=>i.AddConfigIdList(r))})}luaRequire(t){let i=Q(t,1),r=this.normalizeRequirePath(i),n=this.requireAliases.get(r)||r;d.lua_rawgeti(t,bt,d.LUA_RIDX_MAINTHREAD);let o=d.lua_tothread(t,-1);d.lua_pop(t,1);let a=this.requireCache.get(o);a||(a=new Map,this.requireCache.set(o,a));let s=a.get(n);if(s?.loading)return d.lua_pushstring(t,R(`failed to load script '${r}': cyclic require`)),d.lua_error(t);if(s&&s.ref!=null)return d.lua_rawgeti(t,bt,s.ref),1;let c=this.scriptFiles.get(n);if(c==null)return d.lua_pushstring(t,R(`failed to load script '${r}'`)),d.lua_error(t);let l=d.lua_gettop(t);a.set(n,{loading:!0});try{this.loadModule(t,o,n,c),d.lua_pushvalue(t,-1);let u=ee.luaL_ref(t,bt);return a.set(n,{ref:u}),1}catch(u){return a.delete(n),d.lua_settop(t,l),d.lua_pushstring(t,R(`failed to load script '${r}': ${u.message||u}`)),d.lua_error(t)}}newLuaThread(){let t=ee.luaL_newstate();return ya.luaL_openlibs(t),Ia(t),this.installMetatables(t),this.installGlobals(t),this.luaStates.add(t),d.lua_pushglobaltable(t),this.copyLuaEnvironment(t,-1),d.lua_remove(t,-2),this.moduleBaseEnvironments.set(t,ee.luaL_ref(t,bt)),t}copyLuaEnvironment(t,i){let r=d.lua_absindex(t,i);d.lua_newtable(t);let n=d.lua_absindex(t,-1);for(d.lua_pushnil(t);d.lua_next(t,r)!==0;)d.lua_pushvalue(t,-2),d.lua_pushvalue(t,-2),d.lua_rawset(t,n),d.lua_pop(t,1);d.lua_pushvalue(t,n),d.lua_setfield(t,n,R("_G"))}closeTrackedLuaState(t){if(!t||!this.luaStates.has(t))return;for(let r of this.requireCache.get(t)?.values()||[])r.ref!=null&&ee.luaL_unref(t,bt,r.ref);this.requireCache.delete(t);let i=this.moduleBaseEnvironments.get(t);if(i!=null&&ee.luaL_unref(t,bt,i),this.moduleBaseEnvironments.delete(t),this.luaStates.delete(t),this.luaFunctions)for(let[r,n]of this.luaFunctions)n.__luaState===t&&this.luaFunctions.delete(r);xa(t)}loadModule(t,i,r,n){let o={__kind:"Script",alive:!0,scriptMappingId:this.resolveScriptMappingId(),object:null,path:r,enabled:!0,updateEnabled:!1,params:{},env:t,invoke(){}},a=String(n).replace(/^\uFEFF/,""),s=Ji(a);if(ee.luaL_loadbuffer(t,s,s.length,R(`@${r}`))!==De)throw new Error(Q(t,-1));let l=d.lua_absindex(t,-1);if(d.lua_rawgeti(t,bt,this.moduleBaseEnvironments.get(i)),this.copyLuaEnvironment(t,-1),d.lua_remove(t,-2),this.pushScript(t,o),d.lua_setfield(t,-2,R("script")),d.lua_setupvalue(t,l,1),d.lua_pcall(t,0,1,0)!==De)throw new Error(Q(t,-1))}mountScript({path:t,source:i,control:r,params:n={},scriptMappingId:o=void 0}){this.L||this.boot();let a=this.newLuaThread(),s={__kind:"Script",alive:!0,scriptMappingId:this.resolveScriptMappingId(o),object:r,path:this.normalizeRequirePath(t),enabled:!0,updateEnabled:!1,params:n,env:a,lifecyclePhase:"idle"};s.invoke=(l,u)=>this.invokeOn(a,l,u),r&&r.scripts.push(s),this.mountedScripts.push(s),this.pushScript(a,s),d.lua_setglobal(a,R("script"));let c=this.lifecyclePhase;try{this.lifecyclePhase="OnInit",s.lifecyclePhase="OnInit",this.runChunk(a,i,t);let l=this.callGlobal(a,"OnInit");l&&this.mountErrors.push(l),this.lifecyclePhase="OnEnable",s.lifecyclePhase="OnEnable";let u=this.callGlobal(a,"OnEnable");u&&this.mountErrors.push(u),this.lifecyclePhase="OnStart",s.lifecyclePhase="OnStart";let f=this.callGlobal(a,"OnStart");return f&&this.mountErrors.push(f),this.lifecyclePhase="running",s.lifecyclePhase="running",s}catch(l){throw s.alive=!1,s.lifecyclePhase="failed",this.mountedScripts=this.mountedScripts.filter(u=>u!==s),r&&(r.scripts=r.scripts.filter(u=>u!==s)),this.varHandlers=this.varHandlers.filter(u=>u.script!==s),this.signalHandlers=this.signalHandlers.filter(u=>u.script!==s),this.lifecyclePhase=c,a&&a!==this.L&&this.closeTrackedLuaState(a),s.env=null,l}}runChunk(t,i,r){let n=String(i).replace(/^\uFEFF/,""),o=Ji(n),a=ee.luaL_loadbuffer(t,o,o.length,R(`@${r}`));if(a!==De){let c=Q(t,-1)||`luaL_loadbuffer status ${a}`;throw d.lua_pop(t,1),new Error(c)}let s=d.lua_pcall(t,0,0,0);if(s!==De){let c=Q(t,-1)||`lua_pcall status ${s}`;throw d.lua_pop(t,1),new Error(c)}}callGlobal(t,i){if(d.lua_getglobal(t,R(i)),d.lua_isfunction(t,-1)){if(d.lua_pcall(t,0,0,0)!==De){let n=Q(t,-1);d.lua_pop(t,1);let o=`${i}: ${n}`;return this.log("lua-error",o),o}}else d.lua_pop(t,1);return null}callGlobalDt(t,i,r){if(d.lua_getglobal(t,R(i)),d.lua_isfunction(t,-1)){if(d.lua_pushnumber(t,r),d.lua_pcall(t,1,0,0)!==De){let o=Q(t,-1);d.lua_pop(t,1),this.log("lua-error",`${i}: ${o}`)}}else d.lua_pop(t,1)}luaInvoke(t){let i=Ke(t,1);if(!i||i.__kind!=="Script")return ee.luaL_error(t,R("bad self to 'Invoke' (Script expected)"));let r=Q(t,2),n=i.env;if(!n||n.l_G!==t.l_G){let c=[];for(let f=3;f<=d.lua_gettop(t);f++)c.push(be(t,this,f));let l;try{l=i.invoke(r,c)}catch(f){return ee.luaL_error(t,R(String(f.message||f)))}if(l===void 0)return 0;let u=Array.isArray(l)&&l.__multi?l:[l];for(let f of u)le(t,this,f);return u.length}let o=2;if(d.lua_getglobal(t,R(r)),!d.lua_isfunction(t,-1))return 0;d.lua_replace(t,o),d.lua_remove(t,1);let a=d.lua_gettop(t)-1;return d.lua_pcall(t,a,Fa,0)!==De?d.lua_error(t):d.lua_gettop(t)}invokeOn(t,i,r){let n=d.lua_gettop(t);if(d.lua_getglobal(t,R(i)),!d.lua_isfunction(t,-1)){d.lua_settop(t,n);return}for(let c of r)le(t,this,c);if(d.lua_pcall(t,r.length,Fa,0)!==De){let c=Q(t,-1);throw d.lua_settop(t,n),new Error(c)}let a=d.lua_gettop(t)-n;if(a<=0){d.lua_settop(t,n);return}if(a===1){let c=be(t,this,-1);return d.lua_settop(t,n),c}let s=[];for(let c=1;c<=a;c++)s.push(be(t,this,n+c));return d.lua_settop(t,n),s.__multi=!0,s}runScriptPhase(t,i){for(let r of this.mountedScripts){if(!this.scriptCanRun(r))continue;let n=r.env;n&&(this.pushScript(n,r),d.lua_setglobal(n,R("script")),!(t==="OnUpdate"&&!r.updateEnabled)&&this.callGlobalDt(n,t,i))}}step(t=1/30){if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new TypeError("dt must be a finite non-negative number");this.clock.frame++,this.clock.time+=t;for(let[r,n]of this.audios)this.clock.time+1e-9>=n.startedAt+n.duration&&(n.alive=!1,this.audios.delete(r),this.audioRevision++);let i=!this.clock.paused;for(let r of[...this.animations])r.step(t);this.runScriptPhase("OnUpdate",t),i&&(this.clock.levelTime+=t,this.runScriptPhase("OnLevelUpdate",t))}injectKey(t){let i=r=>{if(!r.alive||!r.activeInHierarchy)return!1;if(r.keyListeners.has(t)&&r.emitKey(t))return!0;for(let n of[...r.children])if(i(n))return!0;return!1};for(let r of[...this.roots])i(r)}injectCursor(t,i,r){let n=r||this.makeCursorEventData({});Number.isFinite(n.x)&&Number.isFinite(n.y)&&(this.cursor.x=n.x,this.cursor.y=n.y),t.emitCursor(i,n)}getVar(t,i){if(this.serverBridge&&typeof this.serverBridge.getVar=="function")return this.serverBridge.getVar(t,i);let r=this.serverVars[t];return r?r[i]:void 0}notifyVarHandlers(t,i){for(let r of this.varHandlers)this.scriptCanRun(r.script)&&r.entityType===t&&r.name===i&&this.safeCall(r.fn,this.enumTree.CustomVariableEntityType[t],i)}setVar(t,i,r){if(this.serverBridge&&typeof this.serverBridge.setVar=="function"){this.serverBridge.setVar(t,i,r);return}let n=this.serverVars[t]||(this.serverVars[t]=Object.create(null));n[i]=r,this.notifyVarHandlers(t,i)}sendClientSignal(t,i){for(let r of this.signalHandlers)this.scriptCanRun(r.script)&&r.name===t&&this.safeCall(r.fn,t,i)}evalQueryScript(t,i){this.L||this.boot();let r=this.L;d.lua_createtable(r,0,5);let n=(o,a)=>{d.lua_pushcfunction(r,a),d.lua_setfield(r,-2,R(o))};return n("var",o=>(le(o,this,i.var(Q(o,1),Q(o,2))),1)),n("logContains",o=>(d.lua_pushboolean(o,i.logContains(Q(o,1))),1)),n("control",o=>(le(o,this,i.control(Q(o,1))),1)),n("logs",o=>(le(o,this,i.logs()),1)),n("signals",o=>(le(o,this,i.signals(Q(o,1))),1)),n("serverLogs",o=>(le(o,this,i.serverLogs?i.serverLogs():[]),1)),n("serverLogContains",o=>{let a=i.serverLogContains;return d.lua_pushboolean(o,a?!!a(Q(o,1)):!1),1}),d.lua_setglobal(r,R("query")),this.runChunk(r,t,"autotest-assert"),!0}destroy(){for(let t of this.roots.slice())this.destroyControl(t);for(let t of this.mountedScripts.slice())this.unmountScript(t);this.lifecyclePhase="idle",this.mountedScripts=[],this.luaFunctions.clear();for(let t of[...this.luaStates])this.closeTrackedLuaState(t);this.L=null,this.audios.clear(),this.audioHistory.length=0,this.audioWarnings.clear()}};function vi(e){let t=new rr(e);return t.boot(),t}var St=Object.freeze(Array.from({length:8},(e,t)=>`Player${t+1}`)),Cn=Object.freeze(Array.from({length:8},(e,t)=>`Avatar${t+1}`)),ja=Object.freeze(["Level","PlayerSelf","AvatarSelf"]);var xn=Object.freeze([...ja,...St,...Cn]),Ha=Object.freeze(["PlayerSelf","AllPlayers",...St]),nu=Object.freeze(["Level","PlayerSelf",...St]),Da=Object.freeze(["Int","Float","String","Bool","Vector3","Entity","Guid","PrefabId","ConfigId","IntList","FloatList","StringList","BoolList","Vector3List","EntityList","GuidList","PrefabIdList","ConfigIdList","Dict","Struct"]),ou=-2147483648,au=2147483647,su=new Set(["set-custom-variable","get-custom-variable","custom-variable-changed","\u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF","\u83B7\u53D6\u81EA\u5B9A\u4E49\u53D8\u91CF","\u81EA\u5B9A\u4E49\u53D8\u91CF\u53D8\u5316\u65F6","send-signal","listen-signal","send-client-script-signal","\u53D1\u9001\u4FE1\u53F7","\u76D1\u542C\u4FE1\u53F7","\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7","setVar","getVar","signal","var"]);function Si(e){return`Player${Number(e)}`}function nr(e){return`Avatar${Number(e)}`}function za(e){let t=String(e||"").match(/^(?:Player|Avatar)([1-8])$/);return t?Number(t[1]):0}function vt(e){if(e==null||e==="")return 1;let t=Number(e);if(!Number.isInteger(t)||t<1||t>8)throw new Error("playerCount must be an integer 1-8");return t}function qe(e,t=8){let i=vt(t);if(e==null||e==="")return 1;let r=Number(e);if(!Number.isInteger(r)||r<1||r>i)throw new Error(`playerIndex must be an integer 1-${i}`);return r}function $a(){let e={Level:Object.create(null),PlayerSelf:Object.create(null),AvatarSelf:Object.create(null)};for(let t of St)e[t]=Object.create(null);for(let t of Cn)e[t]=Object.create(null);return e}function Ua(e){let t=String(e||"");if(!xn.includes(t))throw new Error(`unknown CustomVariableEntityType: ${e}`);return t}function lu(e,t){let i=Ua(e);if(!nu.includes(i))throw new Error(`${t}.entityType must be Level, PlayerSelf, or Player1-8`);return i}function wi(e){let t=String(e??"");if(!t)throw new Error("custom variable name is required");return t}function or(e){let t=String(e??"");if(!t)throw new Error("signal name is required");return t}function In(e){let t=String(e||"PlayerSelf");if(!Ha.includes(t))throw new Error(`unsupported client signal target: ${e}. use PlayerSelf, AllPlayers, or Player1-8`);return t}function xi(e){if(e==null)return"";if(typeof e=="boolean")return"Bool";if(typeof e=="string")return"String";if(typeof e=="number")return Number.isInteger(e)?"Int":"Float";if(Array.isArray(e)){if(e.length===0)return"IntList";let t=xi(e[0]);return t&&!t.endsWith("List")&&t!=="Dict"&&t!=="Struct"?`${t}List`:"IntList"}return e&&typeof e=="object"?"x"in e||"y"in e||"z"in e?"Vector3":"Dict":""}function Ce(e){return e===void 0?null:JSON.parse(JSON.stringify(e))}function Ga(e){return Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"value")&&"type"in t?t.value:t):[]}function Va(e){return Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"value")&&"type"in t?{type:String(t.type||""),value:t.value}:{type:xi(t),value:t}):[]}function cu(e){return String(e?.kind||e?.type||e?.name||e?.id||"")}function ar(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function La(e,t){if(!ar(e)||!Object.prototype.hasOwnProperty.call(e,"fromSignalParam"))return null;if(Object.keys(e).some(r=>r!=="fromSignalParam"))throw new Error(`${t}.fromSignalParam cannot be combined with literal fields`);let i=Number(e.fromSignalParam);if(!Number.isSafeInteger(i)||i<0)throw new Error(`${t}.fromSignalParam must be a non-negative integer`);return{fromSignalParam:i}}function Ya(e,t){return La(e,t)||Ce(e)}function uu(e,t,i){if(!ar(e))throw new Error(`serverLogic.rules[${t}].actions[${i}] must be an object`);let r=String(e.kind||e.type||""),n=`serverLogic.rules[${t}].actions[${i}]`;if(r==="setCustomVariable"){let o=lu(e.entityType,n);if(!Object.prototype.hasOwnProperty.call(e,"value"))throw new Error(`${n}.value is required`);return{kind:r,entityType:o,name:wi(e.name),value:Ya(e.value,`${n}.value`),...e.variableType?{variableType:String(e.variableType)}:{}}}if(r==="sendClientScriptSignal"){if(!Array.isArray(e.params))throw new Error(`${n}.params must be an array`);return{kind:r,target:In(e.target),signalName:or(e.signalName),params:e.params.map((o,a)=>Ya(o,`${n}.params[${a}]`))}}throw new Error(`${n}.kind must be setCustomVariable or sendClientScriptSignal`)}function Ii(e){if(e==null)return{version:1,rules:[]};if(!ar(e))throw new Error("serverLogic must be an object");let t=e.rules===void 0?[]:e.rules;if(!Array.isArray(t))throw new Error("serverLogic.rules must be an array");return{version:1,rules:t.map((i,r)=>{if(!ar(i))throw new Error(`serverLogic.rules[${r}] must be an object`);if(!Array.isArray(i.actions)||i.actions.length===0)throw new Error(`serverLogic.rules[${r}].actions must be a non-empty array`);return{id:String(i.id||`signal-${r+1}`),signalName:or(i.signalName),actions:i.actions.map((n,o)=>uu(n,r,o))}})}}function Ba(e,t,{typed:i=!1}={}){let r=La(e,"server logic value");if(r){let n=i?t.params:t.values;if(r.fromSignalParam>=n.length)throw new Error(`signal ${t.name} has no parameter at index ${r.fromSignalParam}`);return Ce(n[r.fromSignalParam])}return Ce(e)}function fu(e){return e==="Level"?"Level":St.includes(e)?"PlayerSelf":Cn.includes(e)?"AvatarSelf":e}function Xa(e={}){let t=$a(),i=$a(),r=[],n=[],o=[],a=[],s=Array.from({length:9},()=>null),c=1,l=0,u=Number(e.onlineLatencyMs||0);(!Number.isFinite(u)||u<0)&&(u=0);let f=Ii(e.logic),h=vt(e.playerCount),p=qe(e.viewPlayerIndex,h);function m(b,A){a.push({source:"server",level:String(b||"engine"),text:String(A),time:l})}function g(b){let A=s[b||p],x=Number(A?.clock?.time);Number.isFinite(x)&&(l=x)}function v(b,A,x,k){t[b][A]=x,i[b][A]={type:k||xi(x)||i[b][A]?.type||""}}function C(b,A,x){return typeof x!="number"||!Number.isInteger(x)?{ok:!0,value:x}:x>=ou&&x<=au?{ok:!0,value:x}:(m("engine",`Int custom variable ${b}.${A} out of range ${x}; keeping previous legal value`),{ok:!1,value:t[b][A]})}function w(b,A){let x=Ua(b),k=A||p;return x==="PlayerSelf"?Si(k):x==="AvatarSelf"?nr(k):x}function P(b,A){let x=fu(b);if(b==="Level"){for(let E=1;E<=h;E+=1){let _=s[E];_&&typeof _.notifyVarHandlers=="function"&&_.notifyVarHandlers("Level",A)}return}let k=za(b);if(!k)return;let F=s[k];F&&typeof F.notifyVarHandlers=="function"&&F.notifyVarHandlers(x,A)}function M(b,A){let x=In(b);return x==="AllPlayers"?Array.from({length:h},(k,F)=>F+1):x==="PlayerSelf"?[A||p]:[za(x)]}function V(b){for(let A of f.rules)if(A.signalName===b.name)for(let x of A.actions){if(x.kind==="setCustomVariable"){let k=Ba(x.value,b);$.setVar(x.entityType,x.name,k,{type:x.variableType,playerIndex:b.playerIndex}),m("info",`logic ${A.id}: set ${x.entityType}.${x.name}`);continue}if(x.kind==="sendClientScriptSignal"){let k=x.params.map(F=>Ba(F,b,{typed:!0}));$.sendToClient(x.signalName,k,{target:x.target,playerIndex:b.playerIndex}),m("info",`logic ${A.id}: sent ${x.signalName} to ${x.target}`)}}}function H(b,A){b&&(b.serverBridge={getVar:(x,k)=>$.getVar(x,k,{playerIndex:A}),setVar:(x,k,F)=>$.setVar(x,k,F,{playerIndex:A}),receiveFromClient:(x,k)=>$.receiveFromClient(x,k,{playerIndex:A})})}function B(b){b&&(b.serverBridge=null)}let $={ENTITY_TYPES:ja,ALL_ENTITY_TYPES:xn,CLIENT_SIGNAL_TARGETS:Ha,get clock(){return l},get playerCount(){return h},get viewPlayerIndex(){return p},setClock(b){l=Number(b)||0},setPlayerCount(b){return h=vt(b),p>h&&(p=h),h},setViewPlayerIndex(b){return p=qe(b,h),p},log(b,A){m(b,A)},defineVar(b,A,x={},{playerIndex:k}={}){let F=w(b,k),E=wi(A);if(Object.prototype.hasOwnProperty.call(t[F],E))throw new Error(`custom variable already exists: ${F}.${E}`);let _=x.type?String(x.type):xi(x.value??x.defaultValue);if(_&&!Da.includes(_))throw new Error(`unsupported custom variable type: ${_}`);let G=x.value!==void 0?x.value:x.defaultValue!==void 0?x.defaultValue:null;return v(F,E,G,_),$.getVar(F,E)},getVar(b,A,{playerIndex:x}={}){let k=w(b,x),F=wi(A);if(!Object.prototype.hasOwnProperty.call(t[k],F)){m("engine",`GetGlobalCustomVariableValue missing ${k}.${F}; returning nil (simulator policy)`);return}return t[k][F]},setVar(b,A,x,{notify:k=!0,type:F,playerIndex:E}={}){let _=w(b,E),G=wi(A),j=F||i[_][G]?.type||xi(x);if(j&&!Da.includes(j)&&j!=="")throw new Error(`unsupported custom variable type: ${j}`);let ie=x;if(!((j==="Int"||j===""&&typeof x=="number"&&Number.isInteger(x))&&(ie=C(_,G,x).value,ie===void 0)))return v(_,G,ie,j),k&&P(_,G),ie},listVars(b){let A=b?[w(b)]:["Level",...Array.from({length:h},(k,F)=>Si(F+1)),...Array.from({length:h},(k,F)=>nr(F+1))],x=[];for(let k of A)for(let F of Object.keys(t[k]))x.push({entityType:k,name:F,type:i[k][F]?.type||"",value:Ce(t[k][F])});return x},receiveFromClient(b,A=[],{playerIndex:x}={}){let k=qe(x||p,h);g(k);let F=or(b),E={id:c++,direction:"inbound",name:F,params:Va(A),values:Ga(A),time:l,playerIndex:k,from:Si(k)};return r.push(E),V(E),E},sendToClient(b,A=[],{target:x="PlayerSelf",playerIndex:k}={}){let F=or(b),E=In(x),G=M(E,k||p),j={id:c++,direction:"outbound",name:F,params:Va(A),values:Ga(A),time:l,target:E,players:G,deliverAt:l+u/1e3,delivered:!1};return n.push(j),u===0?$.deliver(j):o.push(j),j},getLogic(){return Ce(f)},setLogic(b){return f=Ii(b),$.getLogic()},deliver(b){if(!b||b.delivered)return;b.delivered=!0;let A=Array.isArray(b.players)&&b.players.length?b.players:M(b.target);for(let x of A){let k=s[x];k&&typeof k.sendClientSignal=="function"&&k.sendClientSignal(b.name,b.values)}},flush(b){b!==void 0&&(l=Number(b)||0);let A=[];for(let x=o.length-1;x>=0;x-=1)o[x].deliverAt<=l&&A.push(o.splice(x,1)[0]);A.sort((x,k)=>x.id-k.id);for(let x of A)$.deliver(x);return A},inbound(){return r.slice()},outbound(){return n.slice()},loadConfig(b){if(b!=null){if(typeof b!="object")throw new Error("server config must be an object");if(b.graph&&!Array.isArray(b.nodes))throw new Error("unsupported server node graph: v1 only accepts custom variables and signals");for(let A of b.nodes||[]){let x=cu(A);if(!su.has(x))throw new Error(`unsupported server node: ${x||JSON.stringify(A)}. v1 only supports custom variables and signals`)}if(b.onlineLatencyMs!==void 0){let A=Number(b.onlineLatencyMs);if(!Number.isFinite(A)||A<0)throw new Error("onlineLatencyMs must be a non-negative finite number");u=A}b.playerCount!==void 0&&$.setPlayerCount(b.playerCount),b.viewPlayerIndex!==void 0&&$.setViewPlayerIndex(b.viewPlayerIndex),(b.logic!==void 0||b.serverLogic!==void 0)&&$.setLogic(b.logic??b.serverLogic);for(let A of b.vars||[]){let x=w(A.entityType),k=wi(A.name);Object.prototype.hasOwnProperty.call(t[x],k)?$.setVar(x,k,A.value??A.defaultValue,{notify:!1,type:A.type}):$.defineVar(x,k,A)}}},attachRuntime(b,{playerIndex:A=1}={}){let x=qe(A,8);return s[x]&&s[x]!==b&&B(s[x]),s[x]=b||null,H(s[x],x),$},attachRuntimes(b){$.detachRuntime();let A=Array.isArray(b)?b:[];for(let x=0;x<A.length&&x<8;x+=1)s[x+1]=A[x]||null,H(s[x+1],x+1);return $},detachRuntime(){for(let b=1;b<=8;b+=1)B(s[b]),s[b]=null},snapshot(){let b=Si(p),A=nr(p),x={Level:{},PlayerSelf:{},AvatarSelf:{}};for(let k of Object.keys(t.Level))x.Level[k]={type:i.Level[k]?.type||"",value:Ce(t.Level[k])};for(let k of Object.keys(t[b]))x.PlayerSelf[k]={type:i[b][k]?.type||"",value:Ce(t[b][k])};for(let k of Object.keys(t[A]))x.AvatarSelf[k]={type:i[A][k]?.type||"",value:Ce(t[A][k])};for(let k=1;k<=h;k+=1){let F=Si(k),E=nr(k);x[F]={},x[E]={};for(let _ of Object.keys(t[F]))x[F][_]={type:i[F][_]?.type||"",value:Ce(t[F][_])};for(let _ of Object.keys(t[E]))x[E][_]={type:i[E][_]?.type||"",value:Ce(t[E][_])}}return{clock:l,onlineLatencyMs:u,playerCount:h,viewPlayerIndex:p,logic:$.getLogic(),vars:x,inbound:r.map(k=>({id:k.id,name:k.name,params:Ce(k.params),values:Ce(k.values),time:k.time,playerIndex:k.playerIndex,from:k.from})),outbound:n.map(k=>({id:k.id,name:k.name,params:Ce(k.params),values:Ce(k.values),time:k.time,target:k.target,players:Array.isArray(k.players)?k.players.slice():[],deliverAt:k.deliverAt,delivered:!!k.delivered})),logs:a.map(k=>({source:"server",level:k.level,text:k.text,time:k.time}))}},reset(){for(let b of xn){for(let A of Object.keys(t[b]))delete t[b][A];for(let A of Object.keys(i[b]))delete i[b][A]}r.length=0,n.length=0,o.length=0,a.length=0,c=1,l=0},destroy(){$.detachRuntime(),$.reset()}};e.config&&$.loadConfig(e.config);for(let b of e.vars||[])$.defineVar(b.entityType,b.name,b);return $}var du={container:"container",textbox:"textbox",image:"image",button:"button",cursor:"cursor",grid:"grid",reference:"reference",textwindow:"textwindow",keyhint:"keyhint",animation:"animation",fullscreen:"fullscreen"};function kn(e,t,i=null){let r=it(e.transformByPlatform,t),n={authoringId:e.id,kind:du[e.kind]||"container",name:e.name,prefabIndex:e.guid||0,active:e.active!==!1,visible:e.visible!==!1,canControllerFocus:e.canControllerFocus===!0,anchoredPositionX:r.offset.x,anchoredPositionY:r.offset.y,sizeDeltaX:r.size.x,sizeDeltaY:r.size.y,anchorMinX:r.anchorMin.x,anchorMinY:r.anchorMin.y,anchorMaxX:r.anchorMax.x,anchorMaxY:r.anchorMax.y,pivotX:r.pivot.x,pivotY:r.pivot.y,localScaleX:r.scale.x,localScaleY:r.scale.y,localScaleZ:r.scale.z,localRotationX:r.rotation.x,localRotationY:r.rotation.y,localRotationZ:r.rotation.z,children:(e.children||[]).map(a=>kn(a,t,i))},o=i?.get(e.id);return o?.length&&(n.scripts=o.map(a=>{let s=Number(a.guid);return{path:a.path||a.id,source:a.source||"",...Number.isSafeInteger(s)&&s>0?{scriptMappingId:s}:{}}})),e.kind==="container"&&(n.isolateNavigation=e.isolateNavigation===!0,n.disableKeyEventPassthrough=e.disableKeyEventPassthrough===!0,n.disableCursorEventPassthrough=e.disableCursorEventPassthrough===!0,n.showCursor=e.showCursor===!0),(e.kind==="textbox"||e.kind==="textwindow")&&(n.text=e.text??"",n.fontSize=e.fontSize,n.adaptiveFontSize=e.adaptiveFontSize===!0,n.minimumFontSize=e.minimumFontSize,n.fontColor=e.fontColor,n.bgColor=e.bgColor,n.enableOutline=e.enableOutline!==!1,n.outlineColor=e.outlineColor,n.horizontalAlignment=e.horizontalAlignment||"Left",n.verticalAlignment=e.verticalAlignment||"Top",e.kind==="textwindow"&&(n.interactable=e.interactable!==!1,n.showScrollBar=e.showScrollBar!==!1)),e.kind==="image"&&(n.imageSource=e.imageSource,n.imageType=e.imageType??null,n.imageId=e.imageId??0,n.imageColor=e.imageColor,n.raycastTarget=e.raycastTarget===!0,n.enableMask=e.enableMask===!0,n.enableSoftEdge=e.enableSoftEdge===!0,n.softEdgeMode=e.softEdgeMode,n.softEdgeWidthX=e.softEdgeWidthX,n.softEdgeWidthY=e.softEdgeWidthY,n.horizontalSoftRange=e.horizontalSoftRange,n.verticalSoftRange=e.verticalSoftRange,n.enableFill=e.enableFill===!0,n.fillType=e.enableFill?e.fillType:"Unused",n.fillHorizontalType=e.fillHorizontalType,n.fillVerticalType=e.fillVerticalType,n.fillRadial90Type=e.fillRadial90Type,n.fillRadialType=e.fillRadialType,n.fillAmount=e.fillAmount,n.reverseMaskArea=e.reverseMaskArea===!0),e.kind==="button"&&(n.raycastTarget=e.raycastTarget!==!1,n.interactable=e.interactable!==!1,n.clickAudioId=e.clickAudioId,n.unavailableChildId=e.unavailableChildId??null,n.hoverChildId=e.hoverChildId??null,n.pressedChildId=e.pressedChildId??null,n.selectedChildId=e.selectedChildId??null),e.kind==="cursor"&&(n.raycastTarget=e.raycastTarget!==!1),e.kind==="reference"&&(n.referencedPrefabIndex=e.referencedPrefabId),e.kind==="grid"&&(n.itemPrefabIndex=e.itemPrefabId,n.raycastTarget=e.raycastTarget!==!1,n.interactable=e.interactable!==!1,n.showScrollBar=e.showScrollBar!==!1,n.scrollDirection=e.scrollDirection,n.layoutConstraint=e.layoutConstraint,n.layoutConstraintFixedCount=e.layoutConstraintFixedCount,n.cellSizeX=e.cellSizeX,n.cellSizeY=e.cellSizeY,n.spacingX=e.spacingX,n.spacingY=e.spacingY,n.padding1X=e.padding1X,n.padding1Y=e.padding1Y,n.padding2X=e.padding2X,n.padding2Y=e.padding2Y,n.previewCount=e.previewCount),e.kind==="keyhint"&&(n.keyboardKeyCode=e.keyboardKeyCode,n.controllerKeyCode=e.controllerKeyCode),(e.kind==="animation"||e.kind==="fullscreen")&&(n.raycastTarget=!1,n.animationId=e.animationId,n.playSoundEffect=e.playSoundEffect,e.kind==="animation"&&(n.layer=e.layer)),n}function En(e,t=[],i=""){let r=i&&K[i]?i:e.canvasId,n=K[r],o=ui(e),a=new Map;for(let c of t){if(!c.controlId)continue;let l=a.get(c.controlId)||[];l.push(c),a.set(c.controlId,l)}let s=e.meta?.assetType==="client-control-template"?(e.root.children||[]).map(c=>kn(c,r,a)):[];return{canvasId:r,platform:n.platform,device:n.luaDevice,canvasWidth:n.width,canvasHeight:n.height,root:kn(o,r,a),templates:s}}var sr="qxqy-autotest";var xt=.03333333333333333,hu=new Set(["pointer","key","click","pause","resume","serverSet","serverSend","view"]),pu=new Set(["log","control","var","signal","tree","lua"]);function wt(e,t){let i=Number(e);if(!Number.isFinite(i))throw new Error(`${t} must be a finite number`);return i}function An(e){return JSON.parse(JSON.stringify(e??null))}function lr(e,t){if(!e||typeof e!="object")throw new Error(`events[${t}] must be an object`);let i=String(e.kind||e.do||"");if(!hu.has(i))throw new Error(`unsupported event kind: ${i||"(empty)"}`);let r=e.payload&&typeof e.payload=="object"?{...e.payload}:{};if(i==="pointer")!r.type&&e.type&&(r.type=e.type),r.x===void 0&&(r.x=e.x),r.y===void 0&&(r.y=e.y),r.x=wt(r.x,"pointer.x"),r.y=wt(r.y,"pointer.y"),r.type=String(r.type||"click"),r.type==="wheel"&&(r.deltaX=wt(r.deltaX??e.deltaX??0,"pointer.deltaX"),r.deltaY=wt(r.deltaY??e.deltaY??0,"pointer.deltaY"));else if(i==="key"){if(r.typeName=String(r.typeName||r.key||e.typeName||e.key||""),!r.typeName)throw new Error("key event requires typeName")}else if(i==="click"){if(r.name=String(r.name||e.name||""),!r.name)throw new Error("click event requires control name")}else if(i==="serverSet"){if(r.entityType=String(r.entityType||e.entityType||""),r.name=String(r.name||e.name||""),r.value===void 0&&(r.value=e.value),r.value===void 0&&(r.value=null),!r.entityType||!r.name)throw new Error("serverSet requires entityType and name")}else if(i==="serverSend"){if(r.name=String(r.name||e.name||""),r.params=Array.isArray(r.params)?r.params:Array.isArray(e.params)?e.params:[],r.target=String(r.target||e.target||"PlayerSelf"),!r.name)throw new Error("serverSend requires signal name")}else if(i==="view"&&(r.playerIndex=Number(r.playerIndex||r.viewPlayerIndex||e.playerIndex||e.viewPlayerIndex||0),!Number.isInteger(r.playerIndex)||r.playerIndex<1))throw new Error("view event requires playerIndex 1-8");return{t:wt(e.t??0,"event.t"),source:String(e.source||"user"),kind:i,payload:r}}function _n(e,t){if(!e||typeof e!="object")throw new Error(`asserts[${t}] must be an object`);let i=String(e.kind||(e.check?"log":""));if(!pu.has(i))throw new Error(`unsupported assert kind: ${i||"(empty)"}`);let r={kind:i};if(e.at!==void 0&&(r.at=wt(e.at,"assert.at")),i==="log"){if(r.contains=String(e.contains||e.check||e.text||""),r.source=e.source==="server"?"server":"client",e.level&&(r.level=String(e.level)),!r.contains)throw new Error("log assert requires contains")}else if(i==="control"){if(r.id=e.id?String(e.id):"",r.name=e.name?String(e.name):"",r.field=String(e.field||""),!r.field)throw new Error("control assert requires field");if(!r.id&&!r.name)throw new Error("control assert requires id or name");if(!Object.prototype.hasOwnProperty.call(e,"equals"))throw new Error("control assert requires equals");r.equals=An(e.equals)}else if(i==="var"){if(r.entityType=String(e.entityType||""),r.name=String(e.name||""),!r.entityType||!r.name)throw new Error("var assert requires entityType and name");if(!Object.prototype.hasOwnProperty.call(e,"equals"))throw new Error("var assert requires equals");r.equals=An(e.equals)}else if(i==="signal"){if(r.direction=e.direction==="outbound"?"outbound":"inbound",r.name=String(e.name||""),!r.name)throw new Error("signal assert requires name");e.values!==void 0&&(r.values=An(e.values))}else if(i==="tree"){if(r.name=String(e.name||""),r.exists=e.exists!==!1,!r.name)throw new Error("tree assert requires name")}else if(i==="lua"&&(r.source=String(e.source||""),!r.source.trim()))throw new Error("lua assert requires source");return r}function Wa(e){let t=0,i=[],r=[];for(let n of e){if(!n||typeof n!="object")throw new Error("queue step must be an object");if(n.do!=="start"){if(n.do==="step"){t+=wt(n.dt??xt,"step.dt");continue}if(n.do==="pointer"||n.do==="key"||n.do==="click"||n.do==="pause"||n.do==="resume"||n.do==="serverSet"||n.do==="serverSend"||n.do==="view"){i.push(lr({...n,kind:n.do,t},i.length));continue}if(n.assert||n.check||n.kind){r.push(_n({...n.assert||n,at:n.at??t},r.length));continue}throw new Error(`unsupported queue step: ${JSON.stringify(n)}`)}}return{events:i,asserts:r,dt:xt}}function Ci(e){if(Array.isArray(e)){let r=Wa(e);return{format:sr,version:1,name:"",dt:r.dt,events:r.events,asserts:r.asserts}}if(!e||typeof e!="object")throw new Error("autotest case must be an object or step array");if(Array.isArray(e.queue)||Array.isArray(e.steps)){let r=Wa(e.queue||e.steps);return{format:sr,version:1,name:String(e.name||""),dt:Number(e.dt)>0?Number(e.dt):r.dt,events:r.events,asserts:r.asserts}}let t=(e.events||[]).map((r,n)=>lr(r,n)),i=(e.asserts||[]).map((r,n)=>_n(r,n));return t.sort((r,n)=>r.t-n.t||0),{format:sr,version:1,name:String(e.name||""),dt:Number(e.dt)>0?Number(e.dt):xt,playerCount:Number(e.playerCount)>0?Number(e.playerCount):1,events:t,asserts:i}}function Ka(e,t={}){let i=(e||[]).map((r,n)=>lr(r,n));return{format:sr,version:1,name:String(t.name||""),dt:Number(t.dt)>0?Number(t.dt):xt,playerCount:Number(t.playerCount)>0?Number(t.playerCount):1,events:i,asserts:(t.asserts||[]).map((r,n)=>_n(r,n))}}function qa(e,t,i){if(!e)return null;let r=lr({...t,t:t.t??i??0},e.events.length);return e.events.push(r),r}import{createCanvas as mu}from"@napi-rs/canvas";var Ja=mu(1,1).getContext("2d"),gu='"Microsoft YaHei UI","Microsoft YaHei",sans-serif',cr=(e,t)=>Math.max(0,Math.min(t,Number.isFinite(e)?e:0));function Qa(e,t,i){let r=Math.max(8,Number(e.fontSize)||12),n=String(e.text??"").replace(/\r\n?/g,`
|
|
110
|
-
`),o=JSON.stringify([n,t,i,r,e.showScrollBar]),a=e._textWindowLayout;if(a?.key!==o){Ja.font=`${r}px ${gu}`;let l=p=>{let m=[];for(let g of n.split(`
|
|
111
|
-
`)){let v="";for(let C of g)v&&Ja.measureText(v+C).width>p&&(m.push(v),v=""),v+=C;m.push(v)}return m},u=l(Math.max(1,t-4)),f=e.showScrollBar!==!1&&u.length*r*1.2>i,h=Math.max(1,t-4-(f?12:0));f&&(u=l(h)),a=e._textWindowLayout={key:o,lines:u,font:r,textWidth:h,lineHeight:r*1.2,length:u.length*r*1.2}}let s=Math.max(0,a.length-i),c=cr(e._scrollOffset||0,s);return e._scrollOffset=c,{...a,max:s,offset:c,viewport:i,horizontal:!1,width:t,height:i}}function Ht(e,t,i){if(!e?.showBar||e.max<=0||t<=0||i<=0)return null;let r=e.horizontal===!0,n=r?t:i,o=Math.max(0,n-4),a=Math.min(o,Math.max(18,o*n/(n+e.max))),s=o-a,c=s*e.offset/e.max,l=Math.min(8,r?i:t),u=r?{x:-t/2+2,y:i/2-l-2,width:o,height:l}:{x:t/2-l-2,y:-i/2+2,width:l,height:o},f=r?{...u,x:u.x+c,width:a}:{...u,y:u.y+c,height:a};return{track:u,thumb:f,travel:s}}var Za="https://oss.070077.xyz/",Pn="mp3-v1",ur="/qxqy-audio/",yu=[[10001,"ura.1ht4.2ag9.1hh5.jbb.k02.jcw.2tv.2wn.2xk.2r3.d5s.94l.ebv.kcr.b40.77k.9gp.97w.1hb5.jag.btu.jc9.hp5.bmj.blq.blq.ff9.ffk.o74.1owl.rp.mg.l3.lf.lh.qy.1a3z.2xk.2xk.2xk.2xk.2xk.17dc.1f2b.2bc.2bc.2bc.2bc.2bc.ffo.ffo.126.1fk.4mo.4mo.15e.1h2.237.2ba.2kd.2bc.4mo.4mo.4mo.4mo.1mc.1n6.2cu.1ud.2b1.2ee.1tj.1tk"],[20001,"o6.fh.kb.cr.og.sm.6x.8c.87.o7.vz.kt.qo.lg.ob.9w.mg.1kz.zc.1ex.1d5.ps.uu.su.qs.ys.zp.10k.15a.xc.uk.mx.1ax.nt.tu.19m.uj.1ku.tt.100.ie.d3.fp.ie.ie.d3.fp.ie.8p.7k.fw.h0.qc.ot.uc.ot.rk.gb.1c2.ff.cl.9v.wg.1ir.1lr.1b8.1ri.1p0.104.10n.mw.j6.jb.f1.dv.84.a0.cp.bx.1ko.1au.1ia.rs.rt.rs.t7.x6.wi.zc.16f.1i6.2jh.28d.qh.k8.1gz.1ko.2iv.1xp.1l4.1gk.10j.yo.1jk.1jk.xv.104.15o.1xg.1xg.1xi.25i.p1.t1.yh.1ak.1i6.1y2.xt.32u.3g6.1bz.2mn.14l.14c.1e1.op.s8.p2.v5.2ix.1a0.ry.16m.17n.13c.134.ys.yu.xr.sl.sr.sd.yh.z5.gd.gl.hx.h2.g8.fj.iy.hz.jj.th.12n.16r.d3.j9.dg.lj.fl.a7.f9.iw.el.27f.1dh.1rh.2ph.yd.w5.x5.tr.pq.zf.16h.1a5.17t.wy.vn.y8.wl.yv.2ye.2qt.1ah.163.19t.uf.119.2vv.1bm.13h.14p.1so.c3.as.9z.19w.1l4.1nl.rj.we"],[30001,"jo.my.ss.dw.c1.b4.hl.hl.hl.cz.dw.dw.b4.dw.fr.kd.qv.px.px.74.6u.8h.60.8q.8b.eo.eo.eo.8k.a5.99.12v.13y.lg.m4.qr.dw.ex.g0.ef.cd.br.11n.17h.1b8.1c9.9p.ag.9z.l9.m8.m8.lw.m8.cz.99.b4.8c.63.7f.6h.99.re.pp.pi.cq.c9.cp.ck.c6.b0.bd.al.f6.gl.ed.fs.lc.k6.kh.i6.cx.j1.hk.gb.d7.h7.g2.em.kj.kn.k4.j5.rh.t0.qt.mj.i7.ih.i2.hd.3r.8d.6u.6z.by.de.dg.cr.1a5.1ab.16c.18g.n2.ly.no.nt.f9.de.lr.fe.f0.fj.el.fo.t1.g9.ly.h3.g6.de.2ak.2f3.wf.kg.qn.11p.rg.uj.u6.11c.22o.2cs.3dp.3dq.3d5.3d6.1zx.18v"],[40001,"19x.215.2zt.1ex.2pj.7hy.1ur.1gn.1g7.1b1.u9.1tw.108.1ew.rs.1qu.w9.lk.244.qi.b6.tk.jg.jg.jg.y4.c1.b4.iv.hi.r4.n7.gy.ev.qe.12z.18n.dw.1l6.ou.wz.1un.19t.18k.yy.1hs.sl.dw.1vl.100.14k.1q8.209.1jk.1xr.ua.1j2.pr.26h.1gs.s9.px.15v.pf.1jk.xc.1hb.111.172.ut.285.1oh.149.zj.22r.2l9.14a.ok.23y.1eh.xe.1j0.1rp.1cz.wf.1mh.22k.334.1z2.1xo.1br.4ji.5nq.5nf.2za.18r.h3.eo.ia.1kn.dc.ss.s0.1bl.1oc.is.km.177.1ec.1ao.h4.hp.dx.l9.iw.i3.12w.n1.yq.12w.1ju.yx.14s.18b.22t.u3.my.2rb.36w.13u.z8.20r.18g.19r.2x9.w4.q2.1d2.wo.13a.v6.17w.ur.288.1b6.14m.1fi.1xx.1ee.kj.121.j2.1d2.2ad.1ri.2lc.1vk.138.12r.xj.1h5.1c5.2qx.1gj.t2.lv.rf.18q.1kz.dw.2aq.ia.1i9.k5.199.f4.10y.18a.xf.rk.1g9.1q3.10h.sj.15o.e3.dz.sv.135.w9.yg.aw.2a2.19m.22w.1c8.272.13o.104.1sr.rs.1pb.d5.df.kp.jq.1a7.s8.1ao.ba.rb.in.pz.q8.140.ij.1e7.jl.yk.117.10i.1tn.1oj.1sv.sj.1e3.2so.1c7.1gv.178.107.10n.1dx.1qi.1wp.2bc.218.16r.105.xc.z6.11w.1mc.1y9.17p.1cs.2ij.18c.1ie.nn.16c.1ce.xb.1ei.3j0.ve.14x.1sx.285.1b8.1at.v4.rv.rs.10z.xq.11o.15k.xq.u1.i2.pu.i4.l3.9u.oh.mc.nm.pw.1i3.1h4.pj.111.l4.lb.qq.qf.u0.h4.nk.yf.6h.ij.ds.oy.re.m8.1gl.cz.16z.a1.1f8.1x6.vp.dz.gp.g6.fr.vl.fr.gg.qc.aj.99.go.ij.fz.11a.x5.mo.1u9.h0.m8.10m.1an.2bc.3uw.2gk.124.xb.1uk.1b6.2xj.1os.11a.vs.1i9.1lr.2gv.265.668.1xg.45j.404.2x1.1io.3om.4q2.4mo.1d4.2bp.1pr.166.2y6.2bv.361.2nc.2bc.3g0.7g4.334.2bc.2xo.3uw.6ic.4ig.3uw.23v.1la.2zr.1jt.1cq.27a.1n1.19x.1qg.1jn.1ca.26y.2d6.4v4.4mo.4mo.7ps.1jk.153.1fo.1dm.1s2.1w1.oe.1lb.319.2eg.58p.4mo.3dw.2y2.2xm.1u8.1ko.12n.1e0.2sd.1md.2cl.1q2.372.4mo.48s.b14.3fu.334.334.34i.4nf.4ji.5eg.3uw.2u8.1g1.110.37x.2jo.su.334.3aj.3uw.63f.2bc.2bc.8v4.1ts.ax5.5du.34d.3oc.34j.4si.174.rt.1rp.2b0.37d.1ta.2gh.28a.22z.1nc.1a5.1pa.4dd.3ha.2cs.5mv.4mq.5c2.3uw.1gf.4md.113.10x.21o.2hj.1b3.1cx.1ol.3ar.1fv.17t.1a7.2uj.2we.1jk"],[50001,"1o8.1k1.mo.1wu.2c9.22d.1kb.23n.1b8.1ic.24c.2wz.1mq.1mu.1jx.1z1.o3.190.vp.1h7.th.4mo.1rp.4mo.4mo.7ps.zz.143.21v.1nf.34s.1s3.r9.18t.s1.r9.21w.277.ls.25k.5v1.2bc.1kh.wt.14i.1eq.15o.668.sh.rl.3wi.3vc.43c.3yn.17c.f5.xu.jg.176.19v.1xy.23m.18x.30c.10l.13k.v8.vp.17t.qj.17m.1wr.1la.8t.s7.18d.1l2.152.mx.1c8.1l4.1f5.1xe.rz.2hz.1et.13t.xb.14r.15o.z0.1zo.ur.257.1gb.li.12d.15a.132.1m1.3vu.296.1mg.11m.z0.159.mp.hd.x4.1go.ns.xh.2a7.tt.2vb.1bx.1kh.u3.11i.1y1.24e.2hp.2mn.1w6.3zm.166.14g.1mo.2v9.2rg.2f9.1r0.139.m1.k3.ys.1dy.29k.1mm.22m.3zx.4dr.2h7.22o.tv.rm.1et.2wv.2ar.1t7.ku.12s.10b.1v9.1gu.12m.1b3.tv.1c8.tk.10s.ul.1tt.ka.oi.qb.13f.13f.13k.17h.1uh.ez.en.2x7.2ln.2h8.3h8.ig.n9.27o.18b.hl.nm.uk.11a.1ta.1k4.1eh.wv.1go.1gg.sc.18u.1dz.2aq.vt.2l7.25h.1l5.1kn.1vc.1b4.28i.17t.1d6.1k2.18z.jy.jw.dh.1mx.fr.vp.35w.34z.35w.34z.4so.vf.yx.1bg.1d3.2yc.1tg.8q3.99g.am.2du.rm.rg.xa.2cw.xc.1j6.1if.18z.13a.yz.142.1z5.262.1bj.1y8.ur.u5.16j.1pf.1bi.l8.1il.3vz.2dr.jo.ls.18s.16l.18c.141.219.1yz.1fc.24t.27e.481.1vp.25h.1yq.1zn.1uw.11u.1jp.1pz.39o.t6.1mj.1u5.11l.1vd.1dk.1zb.1ic.3ql.14p.1wq.25x.267.zn.zn.1pf.13z.1j7.r9.1hb.4yp.1lt.1cw.1z4.19z.1og.1j4.1cl.1eg.u8.16s.1en.zu.1hr.1js.19g.303.22j.2oa.180.1v7.2ud.2d7.21s.3g9.vh.v1.284.3lg.3lg.17q.1h3.4mo.1cm.1rv.22i.2mc.2j3.27o.333.1q8.237.2ll.23b.2sp.2ll.2ox.2cf.2f8.2hz.1uo.y4.s9.w6.2dg.2q9.up.1m1.1vz.2n8.192.1eb.z7.2em.2q3.1sd.1gj.348.3vf.2iu.29x.1dc.7oj.4pq.5vb.4mx.5me.5sf.5yf.7ps.yj.q0.10w.13p.18b.2wd.11q.2vx.dd.iv.12p.jh.u9.1uy.w0.3f0.3bj.126.qo.1gj.11k.pu.22h.1z6.rp.y4.y0.xl.1d0.11s.wa.1a6.127.10m.12r.1nh.1fy.yo.1js.162.n4.174.1aj.y4.o8.qz.rh.qa.18s.mr.j3.ii.sr.sx.1jk.17l.mj.zr.uy.wa.19t.2bt.xe.1od.hs.xr.5b.12c.1ab.we.gz.mz.4y.sf.11s.e0.1l7.ew.h6.jz.l0.e8.1cx.p6.17u.bw.1ah.10r.10e.o9.1bc.uv.lq.tl.zb.100.jy.b8.bj.336.10n.na.sq.14r.yr.nm.123.tf.l1.zp.1xc.1vk.31l.zl.2bj.2b9.2fv.17p.y0.so.1ln.29c.1eh.nh.xn.131.qc.186.ff.fc.xq.1bm.la.l8.14f.243.111.xi.qw.1qn.11v.1ur.1jx.1ks.s9.nz.269.1zj.2zd.1pv.18n.2vk.p3.1fh.13v.1lf.1lu.2db.1sr.1k3.26o.1dl.1f3.187.2lh.166.v9.xh.1e3.119.s2.mt.1iu.1k6.1o2.12s.u4.2br.1q3.qv.1e4.1zu.1v4.1vk.1t3.3p7.1ob.14d.1ns.1ef.1e4.12w.2kk.1ba.2jx.1e0.1s5.12w.17r.14s.wz.1qp.183.3fb.188.1gr.2ot.168.1u7.w8.28o.1zd.32z.230.w7.vq.x8.1qh.19f.14o.2r9.qg.1ey.1qr.1p6.3a3.1ov.13d.tz.wk.22v.1qa.2l9.yw.yf.nw.p6.1ly.1jk.1nh.x9.q0.17r.17h.ux.uw.12y.p7.g7.kt.14c.ze.1kh.1eo.18a.1d8.26j.15k.19f.1ym.1j5.1c6.11k.1sd.1jp.1ws.13s.1o5.214.sx.px.20x.14h.1ja.s6.1q8.w8.1ks.so.ub.121.202.1ej.1g1.1s8.2bc.4t1.bih.3uw.3pb.avp.6c7.bko.5eg.79c.6wh.3wd.4pn.55j.4a5.3gg.bko.5ei.52p.578.bcv.6gr.2bc.4j9.5y7.9d2.2bb.2bc.668.73z.5pg.50f.5m7.788.267.642.8h2.8h2.49s.64g.5e8.5e8.2bb.3ih.5ur.6bk.578.4ck.3sg.5fe.23i.e9w.2b8.5oj.6bw.2al.2rk.2rk.5pj.n6e.350.6v9.70t.639.3uw.3uw.2bg.639.2bb.2bd.6gj.2bh.660.578.3bk.65e.359.3o0.44i.4tn.1zq.5ee.4a5.3zu.rs.639.33q.5eg.1k1.15o.dw.3uw.b7p.7qd.898.4l4.5uu.5uu.b4g.2yh.2yh.3uw.51a.51a.5kk.66f.iq9.3n7.4nb.46a.1wb.20p.bih.8xa.7ps.70t.70t.4rv.5p1.6aq.ts.63z.668.5v2.5nu.563.55s.55s.5p3.2ga.32x.42x.5cr.4c2.71b.5zp.5c2.66t.4c8.2bc.2bc.2gn.3ea.2kp.fz6.8hz.3e8.4an.bko.j7e.jag.7sr.2bc.3zx.7qd.5ut.5jp.2wk.5q7.3uw.334.4i3.3uw.4bd.5eu.46h.4i2.6t4.446.5s7.5cg.4bk.5nd.7bf.4rt.23b.2bc.2bc.2bc.2bc.2ba.4mo.4dv.3wn.2bc.1we.4he.2bc.4gz.3wn.3km.4xy.4hi.4mr.2bc.247.3yj.2c6.2bc.3aj.446.4ub.3uw.51.e0.86.is.i1.hg.mn.m4.2c.7h.sg.e3.jb.7r.eq.nf.u0.60.4o.ke.47.47.47.47.b8.4x.dr.dy.rw.rw.59.8j.5z.a5.l3.c0.ik.f7.li.lr.7x.dv.du.dd.5e.91.1b.ce.cc.59.bh.e6.8m.9n.cl.lt.7ip.4mr.4si.4kf.vo.we.13e.17n.1iw.2pi.lp.r6.gw.7x.xz.qt.bq.ls.q1.eh.bx.cr.3c.j7.b8.fz.4k.8p.bg.5w.iy.j3.12o.rs.cz.dp.yz.jk.63.63.7ps.7ps.7ps.40g.3jp.4tw.89k.88a.7s0.83d.668.7ps.2fw.2ev.2fp.7ps.2jb.2dh.2ud.25i.24c.2bt.1pa.17r.1a7.7ps.7pt.5rg.4nl.3vv.7qo.31a.2p0.2k0.49a.3v4.3nl.1ug.1ug.1l6.7s1.7ps.2cp.2f8.2i7.7ps.28q.2be.275.1ma.1oz.1q7.16s.1iq.1e0.78m.7ps.2bc.2bc.2bc.bko.2wu.2wu.2wu.3b4.38f.3uw.3uw.3uw.3uw.7ps.7qa.32n.2gg.2wk.7rv.1v3.1qq.1rb.1zk.1my.1zp.1yn.1oh.1uh.7st.9q.9q.9q.9q.9q.kk.kk.kk.kk.kk.dw.dp.dw.rs.rs.rs.rs.s4.sd.54j.5n8.2n6.21r.1nu.1o5.14u.t6.3f7.2j0.32c.304.189.1gf.18w.18j.1st.1vq.116.kw.3uw.3uw.vr.zx.xc.tc.7d.7r.9d.9w.8s.9p.3b.3b"]].map(([e,t])=>[e,t.split(".").map(i=>parseInt(i,36)/1e3)]);function fr(e){if(!Number.isSafeInteger(e))return null;for(let[t,i]of yu)if(e>=t&&e<t+i.length)return i[e-t];return null}var dr=e=>Number.isFinite(Number(e))?Math.max(0,Number(e)):0;function hr(e,t){if(!e||e.kind!=="image"||e.enableMask!==!0||!t)return null;let i=dr(e.sourceWidth??e.width),r=dr(e.sourceHeight??e.height),n=e.enableSoftEdge===!0,o=e.softEdgeMode!=="Pixel",a=n?dr(e.softEdgeWidthX):0,s=n?dr(e.softEdgeWidthY):0;return{id:e.id,matrix:t,width:i,height:r,featherX:o?i*a/100:a,featherY:o?r*s/100:s}}function es(e,t,i){let r=Ie(e,t,i);return{a:e.a,b:e.b,c:e.c,d:e.d,tx:r.x,ty:r.y}}function ts(e,t,i){let r=(n,o)=>n<=0?0:!(o>0)||n>=o?1:n/o;return Math.min(r(e+i.width/2,i.featherX),r(i.width/2-e,i.featherX),r(t+i.height/2,i.featherY),r(i.height/2-t,i.featherY))}function is(e){let t={children:[]},i=[t],r=[];for(let n of e||[]){if(!n||n.id==null)continue;let o=n.masks||[],a=o.map(c=>JSON.stringify([c.id,c.matrix,c.width,c.height,c.featherX,c.featherY])),s=0;for(;s<r.length&&s<a.length&&r[s]===a[s];)s++;i.length=s+1;for(let c=s;c<o.length;c++){let l={mask:o[c],children:[]};i.at(-1).children.push(l),i.push(l)}i.at(-1).children.push({item:n}),r=a}return t.children}import{randomUUID as as}from"node:crypto";function gr(e){for(let t of e.runtime.scrollControls||[]){let[i,r]=mi(t),n=t.kind==="grid"?Vt(t):Qa(t,i,r),o={offset:n.offset,max:n.max,horizontal:n.horizontal,showBar:t.showScrollBar!==!1,textWidth:n.textWidth??0,lines:n.lines||[],lineHeight:n.lineHeight||0,contentLength:n.length},a=JSON.stringify(o);t._scrollKey!==a&&(t._scrollKey=a,t._scroll=o,t.markPlayDirty())}}function ss(e){return{...e._scroll?{scroll:e._scroll}:{},...e.parent?._gridItems?.includes(e)?{clipToParent:!0}:{}}}function Tn(e,t){let i=e._scroll?.max||0;e.kind==="grid"?e.scrollProgress=i?cr(t,i)/i:0:e._scrollOffset=cr(t,i),e.markPlayDirty()}var bu=Object.freeze(Object.values(K).map(e=>Object.freeze({id:e.id,label:e.label,platform:e.platform,width:e.width,height:e.height})));function yr(e){gr(e);let t=Se({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),i=new Map;function r(n,o,a){let s=Ue(o,n);s.activeInHierarchy=a&&n.active!==!1,i.set(n.Id,s);let c=s.activeInHierarchy;for(let l of n.children)r(l,s,c)}for(let n of e.runtime.roots)r(n,t,!0);return i}function ls(e,t=yr(e)){let i=new Map;function r(n,o){let a=t.get(n.Id);if(!a)return;let s=ci(o,a,n);i.set(n.Id,s);for(let c of n.children)r(c,s)}for(let n of e.runtime.roots)r(n,Ot());return i}function cs(e,t){let i=t.get(e.Id);return{id:e.Id,prefabId:e.prefabIndex,authoringId:e.authoringId,name:e.name,kind:e.kind,typeofName:e.typeofName,instantiated:!e.authoringId,active:!!e.active,visible:!!e.visible,activeInHierarchy:!!i?.activeInHierarchy,raycastTarget:e.raycastTarget!==!1,interactable:e.interactable!==!1,pressed:e.pressed===!0,...e._scroll?{scrollOffset:e._scroll.offset,scrollMax:e._scroll.max}:{},...e.kind==="grid"?{itemCount:e.itemCount,scrollProgress:e.scrollProgress}:{},anchoredPositionX:e.anchoredPositionX,anchoredPositionY:e.anchoredPositionY,sizeDeltaX:e.sizeDeltaX,sizeDeltaY:e.sizeDeltaY,localScaleX:e.localScaleX,localScaleY:e.localScaleY,localScaleZ:e.localScaleZ,localRotationZ:e.localRotationZ,text:e.kind==="textbox"||e.kind==="textwindow"?e.text??"":null,fontSize:e.kind==="textbox"||e.kind==="textwindow"?e.fontSize:null,fontColor:e.kind==="textbox"||e.kind==="textwindow"?e.fontColor:null,bgColor:e.kind==="textbox"||e.kind==="textwindow"?e.bgColor:null,enableOutline:e.kind==="textbox"||e.kind==="textwindow"?e.enableOutline===!0:null,outlineColor:e.kind==="textbox"||e.kind==="textwindow"?e.outlineColor:null,imageId:e.kind==="image"?e.imageId??0:null,imageSource:e.kind==="image"?ke(e.imageSource):null,imageType:e.kind==="image"?e.imageType==null?null:ze(e.imageType):null,primitive:e.kind==="image"?Mt(e.imageId,e.imageSource):null,imageColor:e.kind==="image"?e.imageColor:null,enableMask:e.kind==="image"?e.enableMask===!0:null,enableSoftEdge:e.kind==="image"?e.enableSoftEdge===!0:null,softEdgeMode:e.kind==="image"?e.softEdgeMode:null,softEdgeWidthX:e.kind==="image"?e.softEdgeWidthX:null,softEdgeWidthY:e.kind==="image"?e.softEdgeWidthY:null,horizontalSoftRange:e.kind==="image"?e.horizontalSoftRange:null,verticalSoftRange:e.kind==="image"?e.verticalSoftRange:null,enableFill:e.kind==="image"?e.enableFill===!0:null,fillType:e.kind==="image"?e.fillType:null,fillHorizontalType:e.kind==="image"?e.fillHorizontalType:null,fillVerticalType:e.kind==="image"?e.fillVerticalType:null,fillRadial90Type:e.kind==="image"?e.fillRadial90Type:null,fillRadialType:e.kind==="image"?e.fillRadialType:null,reverseMaskArea:e.kind==="image"?e.reverseMaskArea===!0:null,fillAmount:e.kind==="image"?e.fillAmount:null,box:i?{left:i.left,bottom:i.bottom,width:i.width,height:i.height}:null,children:e.children.map(r=>cs(r,t))}}function vu(){return{pointerDownControl:null,pointerDownPosition:null,pointerLastPosition:null,pointerDragging:!1,pointerHoverControl:null,pointerScroll:null,hoveredControl:null,selectedControl:null,stateRestores:new Map,viewCache:null}}function Su(e,t,i,r){let n=vi({canvasWidth:e.canvasWidth,canvasHeight:e.canvasHeight,device:e.device,audioDuration:fr,canSelectImageType:wo,...r?{language:r}:{}});for(let o of[...e.templates||[],...t?.templates||[]])Number.isSafeInteger(o.prefabIndex)&&o.prefabIndex>0&&n.registerTemplate(o.prefabIndex,o);for(let o of i){let a=o.path||o.id,s=o.source||"";a&&s&&n.registerScriptFile(a,s)}return n}var wu=["pointerDownControl","pointerDownPosition","pointerLastPosition","pointerDragging","pointerHoverControl","pointerScroll","hoveredControl","selectedControl","stateRestores","viewCache"];function xu(e){Object.defineProperty(e,"runtime",{configurable:!0,enumerable:!0,get(){return e.runtimes[e.viewPlayerIndex-1]}});for(let t of wu)Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){return e.views[e.viewPlayerIndex-1][t]},set(i){e.views[e.viewPlayerIndex-1][t]=i}})}function us(e,{templatesProject:t=null,scripts:i=[],sceneScripts:r=null,templateScripts:n=null,serverConfig:o=null,canvasId:a="",playerCount:s=1,viewPlayerIndex:c=1,language:l=""}={}){let u=r||i,f=n||i,h=En(e,u,a),p=t?En(t,f,a):null,m=vt(s),g=qe(c,m),v=Xa({playerCount:m,viewPlayerIndex:g});o&&v.loadConfig({...o,playerCount:m,viewPlayerIndex:g});let C=[];for(let M=0;M<m;M+=1)C.push(Su(h,p,i,l));v.attachRuntimes(C);for(let M of C)M.addRoot(h.root);let w={audioSessionId:as(),runtimes:C,views:C.map(()=>vu()),playerCount:m,viewPlayerIndex:g,server:v,compiled:h,mountError:C.find(M=>M.mountErrors[0])?.mountErrors[0]||null,debugPaused:!1,history:{events:[]},recording:!0};xu(w);let P=w.viewPlayerIndex;for(let M=1;M<=m;M+=1)w.viewPlayerIndex=M,Nu(w);return w.viewPlayerIndex=P,w}function On(e,t){if(!e)throw new Error("play session has not started");let i=qe(t,e.playerCount);return i===e.viewPlayerIndex||(st(e,{kind:"view",payload:{playerIndex:i}}),e.viewPlayerIndex=i,e.viewCache=null,e.server&&e.server.setViewPlayerIndex(i)),i}function st(e,t){!e?.recording||!e.history||qa(e.history,{...t,source:t.source||"user"},e.runtime.clock.time)}function Iu(e){return e?.history?.events||[]}var Fn=new Set(["image","textbox","textwindow","button","grid"]);function Cu(e,t){let i=Ie(t,e.centerX,e.centerY);return{centerX:i.x,centerY:i.y,scaleX:Math.hypot(t.a,t.b),scaleY:Math.hypot(t.c,t.d),rotationZ:Math.atan2(t.b,t.a)*180/Math.PI,matrix:{a:t.a,b:t.b,c:t.c,d:t.d,tx:i.x,ty:i.y}}}function ze(e){return typeof e=="string"?e:e?.Name}function fs(e){return{fillType:ze(e.fillType),fillHorizontalType:ze(e.fillHorizontalType),fillVerticalType:ze(e.fillVerticalType),fillAmount:e.fillAmount}}function ku(e,t,i){let r=Math.abs(t.width*i.scaleX),n=Math.abs(t.height*i.scaleY),o={id:e.Id,kind:e.kind,name:e.name,left:i.centerX-r/2,bottom:i.centerY-n/2,width:r,height:n,sourceWidth:t.width,sourceHeight:t.height,rotationZ:i.rotationZ,matrix:i.matrix,pressed:e.pressed===!0,...ss(e)};return e.kind==="image"&&(o.imageSource=ke(e.imageSource),o.imageType=e.imageType==null?null:ze(e.imageType),o.primitive=Mt(e.imageId,o.imageSource),o.imageColor=e.imageColor,o.imageId=e.imageId,Object.assign(o,fs(e))),(e.kind==="textbox"||e.kind==="textwindow")&&(o.text=e.text??"",o.fontSize=e.fontSize,o.fontColor=e.fontColor,o.bgColor=e.bgColor,o.enableOutline=e.enableOutline===!0,o.outlineColor=e.outlineColor,o.horizontalAlignment=ze(e.horizontalAlignment),o.verticalAlignment=ze(e.verticalAlignment)),o}function Eu(e,t=yr(e)){let i=[],r=ls(e,t);function n(o,a=[],s=[]){let c=t.get(o.Id);if(!c||o.visible===!1||!c.activeInHierarchy)return;let l=r.get(o.Id);if(!l)return;let u=Cu(c,l),f=o.kind==="image"&&o.enableMask===!0?hr({...ds(o,c),id:o.Id},es(l,c.centerX,c.centerY)):null,h=f?[...s,f]:s,p=()=>i.push({...ku(o,c,u),...a.length?{clipPolygons:a}:{},...h.length?{masks:h}:{}});Fn.has(o.kind)&&o.kind!=="grid"&&p();let m=o.children||[];for(let g=m.length-1;g>=0;g-=1){let v=o._gridItems?.includes(m[g])?[...a,[[c.left,c.bottom],[c.right,c.bottom],[c.right,c.top],[c.left,c.top]].map(([C,w])=>Ie(l,C,w))]:a;n(m[g],v,h)}o.kind==="grid"&&p()}for(let o of e.runtime.roots)n(o);return i}function ds(e,t){let i={kind:e.kind,name:e.name,sourceWidth:t.width,sourceHeight:t.height,pressed:e.pressed===!0,...ss(e)};return e.kind==="image"&&(i.imageSource=ke(e.imageSource),i.imageType=e.imageType==null?null:ze(e.imageType),i.primitive=Mt(e.imageId,i.imageSource),i.imageColor=e.imageColor,i.imageId=e.imageId,Object.assign(i,fs(e),{enableMask:e.enableMask===!0,enableSoftEdge:e.enableSoftEdge===!0,softEdgeMode:ze(e.softEdgeMode)||"Percentage",softEdgeWidthX:e.softEdgeWidthX,softEdgeWidthY:e.softEdgeWidthY})),(e.kind==="textbox"||e.kind==="textwindow")&&(i.text=e.text??"",i.fontSize=e.fontSize,i.fontColor=e.fontColor,i.bgColor=e.bgColor,i.enableOutline=e.enableOutline===!0,i.outlineColor=e.outlineColor,i.horizontalAlignment=ze(e.horizontalAlignment),i.verticalAlignment=ze(e.verticalAlignment)),i}function Au(e,t,i){let r=Yr(e,t),n=Ie(r,e.centerX,e.centerY);return{a:r.a,b:r.b,c:r.c,d:r.d,tx:n.x-(i?i.centerX:0),ty:n.y-(i?i.centerY:0)}}function hs(e){let t=e.matrix;return[e.parent,e.z,e.group?1:0,t.a,t.b,t.c,t.d,t.tx,t.ty,e.kind,e.name,e.sourceWidth,e.sourceHeight,e.pressed,e.primitive,e.imageColor,e.imageId,e.imageSource,e.imageType,e.fillType,e.fillHorizontalType,e.fillVerticalType,e.fillAmount,e.enableMask,e.enableSoftEdge,e.softEdgeMode,e.softEdgeWidthX,e.softEdgeWidthY,e.text,e.fontSize,e.fontColor,e.bgColor,e.enableOutline,e.outlineColor,e.horizontalAlignment,e.verticalAlignment,JSON.stringify(e.scroll),e.clipToParent].join(" ")}function ps(e,t,i,r,n,o){return{id:e.Id,parent:t,z:n,group:o>=16,matrix:Au(r,e,i),...ds(e,r)}}function _u(e){let t=Se({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),i=new Set,r=new Map,n=new Map;function o(c,l,u){let f=Ue(l,c);if(f.activeInHierarchy=u&&c.active!==!1,n.set(c.Id,f),c.visible===!1||!f.activeInHierarchy)return!1;let h=c.children||[],p=Fn.has(c.kind),m=0;for(let g=0;g<h.length;g+=1)o(h[g],f,f.activeInHierarchy)&&(p=!0,m+=1);return p?(i.add(c.Id),r.set(c.Id,m),!0):!1}function a(c,l,u,f){if(!i.has(c.Id))return;let h=n.get(c.Id);s.push(ps(c,l,u,h,f,r.get(c.Id)||0));let p=c.children||[];for(let m=0;m<p.length;m+=1)a(p[m],c.Id,h,m)}let s=[];for(let c=0;c<e.runtime.roots.length;c+=1)o(e.runtime.roots[c],t,!0),a(e.runtime.roots[c],null,null,c);return{nodes:s,childCounts:r}}function Mn(e){let t=e._playChildDirty===!0||e._playDeepDirty===!0;if(e._playDirty=!1,e._playChildDirty=!1,e._playDeepDirty=!1,!t)return;let i=e.children;for(let r=0;r<i.length;r+=1)Mn(i[r])}function Pu(e,t){let i=Se({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),r=[],n=[],o=t.count,a=e.runtime._playRemoved||[];for(let l=0;l<a.length;l+=1){let u=a[l];t.fingerprints.has(u)&&(n.push(u),t.fingerprints.delete(u),t.childCounts.delete(u),o-=1)}e.runtime._playRemoved=[];function s(l){t.fingerprints.has(l.Id)&&(n.push(l.Id),t.fingerprints.delete(l.Id),t.childCounts.delete(l.Id),o-=1);let u=l.children;for(let f=0;f<u.length;f+=1)s(u[f])}function c(l,u,f,h,p,m){let g=m||l._playDeepDirty===!0,v=g||l._playDirty===!0,C=g||l._playChildDirty===!0;if(!v&&!C)return;if(!(p&&l.active!==!1)||l.visible===!1){s(l);return}let P=Ue(u,l),M=t.childCounts.get(l.Id)||0;if(C){M=0;let A=l.children;for(let x=0;x<A.length;x+=1)c(A[x],P,l.Id,x,!0,g),t.fingerprints.has(A[x].Id)&&(M+=1)}if(!(Fn.has(l.kind)||M>0)){t.fingerprints.has(l.Id)&&(n.push(l.Id),t.fingerprints.delete(l.Id),t.childCounts.delete(l.Id),o-=1);return}let H=t.childCounts.get(l.Id);t.childCounts.set(l.Id,M);let B=M>=16!=(H||0)>=16;if(!v&&!B&&t.fingerprints.has(l.Id))return;let $=ps(l,f,u===i?null:u,P,h,M),b=hs($);t.fingerprints.get($.id)!==b&&(t.fingerprints.has($.id)||(o+=1),t.fingerprints.set($.id,b),r.push($))}for(let l=0;l<e.runtime.roots.length;l+=1)c(e.runtime.roots[l],i,null,l,!0,!1);return t.count=o,{changed:r,removed:n,count:o}}function Tu(e,t){let i=e.viewCache||(e.viewCache={rev:0,fingerprints:new Map,childCounts:new Map,count:0}),r=Number(t);if(!(Number.isFinite(r)&&r===i.rev&&i.fingerprints.size>0)){let{nodes:c,childCounts:l}=_u(e);i.rev+=1,i.fingerprints=new Map(c.map(u=>[u.id,hs(u)])),i.childCounts=l,i.count=c.length;for(let u of e.runtime.roots)Mn(u);return{format:"tree-v1",revision:i.rev,reset:!0,count:c.length,nodes:c}}let{changed:o,removed:a,count:s}=Pu(e,i);i.rev+=1;for(let c of e.runtime.roots)Mn(c);return{format:"tree-v1",revision:i.rev,reset:!1,count:s,changed:o,removed:a}}function Dn(e,{inspect:t=!1,view:i=!1,paint:r=!1,sceneRev:n,compact:o=!1}={}){gr(e),e.audioSessionId||=as();let a=e.runtime,s=e.compiled,[c,l]=[a.canvasWidth,a.canvasHeight];e.server&&e.server.setClock(a.clock.time);let u=o?a.logs.slice(-100):a.logs,f=Iu(e),h=e.server?e.server.snapshot():{vars:{},inbound:[],outbound:[],logs:[]};o&&(h.inbound=h.inbound.slice(-100),h.outbound=h.outbound.slice(-100),h.logs=h.logs.slice(-100));let p={canvasId:s.canvasId,platform:s.platform,device:a.device,canvasWidth:c,canvasHeight:l,canvasPresets:bu,playerCount:e.playerCount||1,viewPlayerIndex:e.viewPlayerIndex||1,players:Array.from({length:e.playerCount||1},(m,g)=>({index:g+1,label:`\u73A9\u5BB6${g+1}`,entityType:`Player${g+1}`})),time:a.clock.time,frame:a.clock.frame,paused:!!e.debugPaused,levelTimePaused:!!a.clock.paused,audio:{sessionId:e.audioSessionId,playerIndex:e.viewPlayerIndex||1,...a.audioSnapshot()},mountError:e.mountError||a.mountErrors[0]||null,logs:u.map(m=>({source:"client",level:m.level,text:m.text,time:m.time})),tree:[],paint:[],scene:null,server:h,history:(o?f.slice(-100):f).map(m=>({t:m.t,source:m.source||"user",kind:m.kind,payload:m.payload||{}}))};if(t||r){let m=yr(e);t&&(p.tree=a.roots.map(g=>cs(g,m))),r&&(p.paint=Eu(e,m))}return i&&(p.scene=Tu(e,n)),Nt(p),p}function br(e,t=1/30){let i=e.runtimes||(e.runtime?[e.runtime]:[]);for(let r of i)r.step(t);e.server&&(e.server.setClock(e.runtime.clock.time),e.server.flush())}function zn(e,t){st(e,{kind:"key",payload:{typeName:String(t)}}),e.runtime.injectKey(t)}function Ru(e,t){let i=null;for(let r of e.runtime.roots)Be(r,n=>{!i&&n.name===t&&(i=n)});return i}function $n(e,t){st(e,{kind:"click",payload:{name:String(t)}});let i=Ru(e,t);i&&Gn(i)&&(i.kind==="button"||i.kind==="cursor")&&i.SimulateCursorClick()}function Mu(e,t){return!e||!t?null:e.children.find(i=>i.authoringId===t||i.Id===t)||null}var ms={unavailable:"unavailableChildId",hover:"hoverChildId",pressed:"pressedChildId",selected:"selectedChildId"};function gs(e,t){let i=[];for(let[r,n]of Object.entries(ms)){let o=t[n]?Mu(t,t[n]):null;o&&i.push({state:r,child:o})}return i}function Nu(e){for(let t of e.runtime.roots)Be(t,i=>{if(i.kind==="button"){for(let{child:r}of gs(e,i))e.stateRestores.has(r.Id)||e.stateRestores.set(r.Id,{child:r,active:r.active,visible:r.visible}),r.active=!0,r.visible=!1,typeof r.markPlayDirty=="function"&&r.markPlayDirty(!0);ki(e,i)}})}function ki(e,t){if(!t||t.kind!=="button")return;let i=null;t.interactable===!1?i="unavailable":t.pressed===!0?i="pressed":e.hoveredControl===t?i="hover":e.selectedControl===t&&(i="selected");for(let r of gs(e,t))r.child.active=!0,r.child.visible=r.state===i,typeof r.child.markPlayDirty=="function"&&r.child.markPlayDirty(!0)}function Rn(e){if(!e)return null;let t=e.parent;return t?.kind==="button"&&Object.values(ms).map(r=>t[r]).filter(Boolean).includes(e.authoringId)?t:e}function Gn(e){return e.kind==="button"?e.raycastTarget!==!1&&e.interactable!==!1:e.kind==="cursor"||e.kind==="grid"?e.raycastTarget!==!1:e.kind==="textwindow"?e.interactable!==!1:e.raycastTarget===!0}function ys(e){return e.kind==="container"||e.kind==="grid"||e.kind==="textwindow"||e.kind==="reference"||e.kind==="button"}function bs(e,t){let i=e.Id,r=t.get(i);if(r!==void 0)return r;let n=Gn(e);if(!n&&ys(e)){let o=e.children;for(let a=0;a<o.length;a+=1)if(bs(o[a],t)){n=!0;break}}return t.set(i,n),n}function pr(e,t,i){gr(e);let r=Se({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),n=new Map;function o(s,c,l,u){if(!u||s.active===!1||s.visible===!1||!bs(s,n))return null;let f=Ue(c,s),h=ci(l,f,s),p=Le(h);if(!p)return null;let m=Ie(p,t,i);if(m.x<f.left||m.x>f.right||m.y<f.bottom||m.y>f.top)return null;if(mr(s)){let g=Ht(s._scroll,f.width,f.height)?.track,v=m.x-f.centerX,C=f.centerY-m.y;if(g&&v>=g.x&&v<=g.x+g.width&&C>=g.y&&C<=g.y+g.height)return s}if(ys(s))for(let g=0;g<s.children.length;g+=1){let v=o(s.children[g],f,h,!0);if(v)return v}return Gn(s)?s:null}let a=Ot();for(let s=e.runtime.roots.length-1;s>=0;s-=1){let c=o(e.runtime.roots[s],r,a,!0);if(c)return c}return null}function Ut(e,t,i,{dragging:r=!1,press:n=null,previous:o=null}={}){let a=n||{x:t,y:i},s=o||{x:t,y:i};return e.runtime.makeCursorEventData({x:t,y:i,pressX:a.x,pressY:a.y,deltaX:t-s.x,deltaY:i-s.y,dragging:r})}function Nn(e,t,i){t.kind==="grid"||t.kind==="textwindow"||(t.pressed=i,typeof t.markPlayDirty=="function"&&t.markPlayDirty(),ki(e,t))}function mr(e){if(!e?.alive||!e.activeInHierarchy||e.interactable===!1||e.raycastTarget===!1)return!1;for(let t=e;t;t=t.parent)if(t.visible===!1)return!1;return e._scroll?.max>0}function rs(e){for(let t=e;t;t=t.parent)if(mr(t))return t;return null}function ns(e,t,i,r){let n=yr(e),o=n.get(t.Id),a=ls(e,n).get(t.Id),s=a&&Le(a);if(!o||!s)return null;let c=Ie(s,i,r);return{x:c.x-o.centerX,y:o.centerY-c.y,width:o.width,height:o.height}}function os(e,t,i){let r=e.pointerDownControl;if(r?.alive){let n=Ut(e,t,i,{dragging:e.pointerDragging,press:e.pointerDownPosition,previous:e.pointerLastPosition});e.runtime.injectCursor(r,"CursorUp",n),e.pointerDragging&&!e.pointerScroll&&e.runtime.injectCursor(r,"CursorEndDrag",n),Nn(e,r,!1)}e.pointerDownControl=null,e.pointerScroll=null,e.pointerDownPosition=null,e.pointerDragging=!1,e.pointerLastPosition={x:t,y:i}}function Ei(e,t,i,r,n={}){let o=Number(i),a=Number(r);if(!Number.isFinite(o)||!Number.isFinite(a))throw new Error("pointer coordinates must be finite");e.runtime.cursor.x=o,e.runtime.cursor.y=a;let s=Number(n.deltaX??0),c=Number(n.deltaY??0);if(t==="wheel"&&(!Number.isFinite(s)||!Number.isFinite(c)))throw new Error("wheel deltas must be finite");if(n.silent||st(e,{kind:"pointer",payload:{type:t,x:o,y:a,...t==="wheel"?{deltaX:s,deltaY:c}:{}}}),t==="wheel"){let l=pr(e,o,a),u=rs(l);if(u){let f=u._scroll.horizontal&&s||c;Tn(u,u._scroll.offset+f)}return l}if(t==="cancel")return os(e,o,a),null;if((t==="move"||t==="up")&&e.pointerScroll&&!mr(e.pointerScroll.control)&&os(e,o,a),t==="move"){let l=e.pointerLastPosition||{x:o,y:a},u=e.pointerHoverControl,f=Rn(pr(e,o,a)),h=Ut(e,o,a,{previous:l});u&&u!==f&&e.runtime.injectCursor(u,"CursorExit",h),f&&u!==f&&e.runtime.injectCursor(f,"CursorEnter",h),e.pointerHoverControl=f;let p=e.hoveredControl;e.hoveredControl=f?.kind==="button"?f:null,p&&p!==e.hoveredControl&&ki(e,p),e.hoveredControl&&ki(e,e.hoveredControl);let m=e.pointerDownControl,g=e.pointerScroll;if(g)if(!mr(g.control))e.pointerScroll=null;else{let v=ns(e,g.control,o,a);if(v){let C=g.control._scroll,w=C.horizontal?v.x-g.start.x:v.y-g.start.y,P=Ht(C,v.width,v.height)?.travel||0,M=g.bar?P?w*C.max/P:0:-w;Tn(g.control,g.offset+M)}}if(m?.alive){let v=e.pointerDownPosition||l,C=o!==l.x||a!==l.y;!e.pointerDragging&&C&&(g||e.runtime.injectCursor(m,"CursorBeginDrag",Ut(e,o,a,{press:v,previous:l,dragging:!1})),e.pointerDragging=!0),e.pointerDragging&&!g&&e.runtime.injectCursor(m,"CursorDrag",Ut(e,o,a,{press:v,previous:l,dragging:!0}))}return e.pointerLastPosition={x:o,y:a},f}if(t==="down"){let l=Rn(pr(e,o,a));e.pointerDownControl=l,e.pointerDownPosition={x:o,y:a},e.pointerLastPosition={x:o,y:a},e.pointerDragging=!1,e.pointerScroll=null;let u=rs(l);if(u){let f=ns(e,u,o,a),h=f&&Ht(u._scroll,f.width,f.height),p=g=>f.x>=g.x&&f.x<=g.x+g.width&&f.y>=g.y&&f.y<=g.y+g.height,m=h&&p(h.track);if(m&&!p(h.thumb)){let g=u._scroll.horizontal?f.x-h.track.x-h.thumb.width/2:f.y-h.track.y-h.thumb.height/2;Tn(u,h.travel?g/h.travel*u._scroll.max:0),gr(e)}f&&(e.pointerScroll={control:u,start:f,offset:u._scroll.offset,bar:!!m})}return l&&(Nn(e,l,!0),e.runtime.injectCursor(l,"CursorDown",Ut(e,o,a))),l}if(t==="up"){let l=e.pointerDownControl,u=Rn(pr(e,o,a));if(l?.alive){let f=Ut(e,o,a,{press:e.pointerDownPosition,previous:e.pointerLastPosition,dragging:e.pointerDragging});if(e.runtime.injectCursor(l,"CursorUp",f),e.pointerDragging)e.pointerScroll||e.runtime.injectCursor(l,"CursorEndDrag",f);else if(u===l&&!e.pointerScroll?.bar){e.runtime.injectCursor(l,"CursorClick",f);let h=e.selectedControl;e.selectedControl=l.kind==="button"?l:null,h&&h!==e.selectedControl&&ki(e,h)}Nn(e,l,!1)}return e.pointerDownControl=null,e.pointerDownPosition=null,e.pointerLastPosition={x:o,y:a},e.pointerDragging=!1,e.pointerScroll=null,u}if(t==="click")return Ei(e,"down",o,a,{silent:!0}),Ei(e,"up",o,a,{silent:!0});throw new Error(`unknown pointer type ${t}`)}function Vn(e,t,i,r){if(!e?.server)throw new Error("play session has no server");return st(e,{kind:"serverSet",payload:{entityType:t,name:i,value:r,playerIndex:e.viewPlayerIndex}}),e.server.setVar(t,i,r,{playerIndex:e.viewPlayerIndex})}function vs(e,t,i){if(!e?.server)throw new Error("play session has no server");let r=e.server.getVar(t,i,{playerIndex:e.viewPlayerIndex});return r===void 0?null:r}function Yn(e,t,i=[],r="PlayerSelf"){if(!e?.server)throw new Error("play session has no server");return st(e,{kind:"serverSend",payload:{name:t,params:i,target:r,playerIndex:e.viewPlayerIndex}}),e.server.sendToClient(t,i,{target:r,playerIndex:e.viewPlayerIndex})}function vr(e){return{snapshot:t=>Dn(e,t),step:t=>br(e,t),pointer:(t,i,r,n)=>Ei(e,t,i,r,n),key:t=>zn(e,t),click:t=>$n(e,t),view:t=>On(e,t),pause:()=>{st(e,{kind:"pause",payload:{}}),e.debugPaused=!0},resume:()=>{st(e,{kind:"resume",payload:{}}),e.debugPaused=!1},serverSet:(t,i,r)=>Vn(e,t,i,r),serverSend:(t,i,r)=>Yn(e,t,i,r)}}function Bn(e){e?.server&&e.server.destroy();let t=e?.runtimes||(e?.runtime?[e.runtime]:[]);for(let i of t)i.destroy()}function jn(e,t){return JSON.stringify(e)===JSON.stringify(t)}function Ss(e,t){for(let i of e||[])t(i),i.children?.length&&Ss(i.children,t)}function Hn(e,{id:t,name:i}){let r=null;return Ss(e,n=>{r||(t&&String(n.id)===String(t)||!t&&i&&n.name===i)&&(r=n)}),r}function Ou(e,t){if(e){if(Object.prototype.hasOwnProperty.call(e,t))return e[t];if(e.box&&Object.prototype.hasOwnProperty.call(e.box,t))return e.box[t]}}function Fu(e){return{var(t,i){return e.server?.vars?.[t]?.[i]?.value??null},logs(){return(e.logs||[]).map(t=>t.text)},logContains(t){return(e.logs||[]).some(i=>String(i.text||"").includes(String(t)))},serverLogs(){return(e.server?.logs||e.serverLogs||[]).map(t=>t.text)},serverLogContains(t){return(e.server?.logs||e.serverLogs||[]).some(i=>String(i.text||"").includes(String(t)))},control(t){let i=Hn(e.tree,{name:String(t)});return i?{id:i.id,name:i.name,kind:i.kind,active:i.active,visible:i.visible,pressed:i.pressed,text:i.text,interactable:i.interactable}:null},signals(t){let i=t==="outbound"?"outbound":"inbound";return(e.server?.[i]||[]).map(r=>({name:r.name,values:r.values}))}}}function Du(e,t){if(e.kind==="log"){let i=e.source==="server"?t.server?.logs||t.serverLogs||[]:t.logs||[];return i.some(n=>e.level&&n.level!==e.level?!1:String(n.text||"").includes(e.contains))?{ok:!0,actual:e.contains}:{ok:!1,actual:i.map(n=>n.text).slice(-8),expected:e.contains}}if(e.kind==="control"){let i=Hn(t.tree,e);if(!i)return{ok:!1,actual:null,expected:e.equals,message:`control not found: ${e.id||e.name}`};let r=Ou(i,e.field);return jn(r,e.equals)?{ok:!0,actual:r}:{ok:!1,actual:r,expected:e.equals}}if(e.kind==="var"){let i=t.server?.vars?.[e.entityType],n=!i||!Object.prototype.hasOwnProperty.call(i,e.name)?null:i[e.name].value;return jn(n,e.equals)?{ok:!0,actual:n}:{ok:!1,actual:n,expected:e.equals}}if(e.kind==="signal"){let i=e.direction==="outbound"?t.server?.outbound||[]:t.server?.inbound||[],r=i.find(n=>n.name===e.name&&(e.values===void 0||jn(n.values,e.values)));return r?{ok:!0,actual:r.values}:{ok:!1,actual:i.map(n=>({name:n.name,values:n.values})),expected:{name:e.name,values:e.values??null}}}if(e.kind==="tree"){let i=!!Hn(t.tree,{name:e.name});return i===e.exists?{ok:!0,actual:i}:{ok:!1,actual:i,expected:e.exists}}return{ok:!1,message:`unsupported assert kind ${e.kind}`}}function zu(e,t){let i=vi();try{return i.evalQueryScript(e,Fu(t)),{ok:!0,actual:!0}}catch(r){return{ok:!1,message:r?.message||String(r)}}finally{i.destroy()}}function ws(e,t){return e.kind==="lua"?zu(e.source,t):Du(e,t)}function $u(e,t){let i=t>0?t:xt;return Math.round((e+i)*1e9)/1e9}function Gu(e,t){let i=t.payload||{};if(t.kind==="pointer")e.pointer(i.type,i.x,i.y,i);else if(t.kind==="key")e.key(i.typeName);else if(t.kind==="click")e.click(i.name);else if(t.kind==="pause")e.pause();else if(t.kind==="resume")e.resume();else if(t.kind==="serverSet")e.serverSet(i.entityType,i.name,i.value);else if(t.kind==="serverSend")e.serverSend(i.name,i.params,i.target);else if(t.kind==="view")e.view(i.playerIndex);else throw new Error(`unsupported event kind: ${t.kind}`)}function Vu(e,t){let i=ws(e,t);return{kind:e.kind,at:Number(e.at||0),ok:!!i.ok,actual:i.actual??null,expected:i.expected??null,message:i.message||""}}function xs(e,t){let i=Ci(t),r=i.events.slice().sort((C,w)=>C.t-w.t),n=i.asserts.slice(),o=i.dt||xt,a=r.reduce((C,w)=>Math.max(C,w.t),0),s=n.reduce((C,w)=>Math.max(C,Number(w.at||0)),0),c=Math.max(a,s),l=0,u=[],f=0,h=n.some(C=>C.kind==="control"||C.kind==="tree"||C.kind==="lua"),p=e.snapshot({inspect:h}),m=()=>{for(;l<r.length&&r[l].t<=f+1e-9;)Gu(e,r[l]),l+=1,p=e.snapshot({inspect:h})},g=()=>{for(let C of n)if(!C._done&&Number(C.at||0)<=f+1e-9){let w=Vu(C,p);if(u.push(w),C._done=!0,!w.ok)return{passed:!1,failedAt:f,frame:p.frame||0,results:u,snapshot:p}}return null};m();let v=g();if(v)return Un(i,v);for(;f+1e-9<c;){e.step(o),f=$u(f,o),p=e.snapshot({inspect:h}),m();let C=g();if(C)return Un(i,C)}return Un(i,{passed:u.every(C=>C.ok),failedAt:null,frame:p.frame||0,results:u,snapshot:p})}function Un(e,t){return Y({format:e.format,name:e.name,passed:t.passed,failedAt:t.failedAt,frame:t.frame,results:t.results,snapshot:{time:t.snapshot?.time??0,frame:t.snapshot?.frame??0,logs:t.snapshot?.logs||[],serverLogs:t.snapshot?.serverLogs||t.snapshot?.server?.logs||[],server:t.snapshot?.server||{vars:{},inbound:[],outbound:[],logs:[]}}})}function Ln(e){return Array.isArray(e)?e.slice():[]}import{createHash as Yu}from"node:crypto";var Is=e=>Yu("sha256").update(JSON.stringify(e.map(({id:t,path:i,source:r})=>({id:t,path:i,source:r})))).digest("hex");function Cs(e){let t=new Map;for(let r of e){let n=`${r.controlAsset}:${r.controlId}`,o=t.get(n);if(o&&o.newGuid!==r.oldGuid)throw new Error("\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u4E0D\u8FDE\u7EED\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9");t.set(n,{oldGuid:o?.oldGuid??r.oldGuid,newGuid:r.newGuid})}let i=new Map;for(let{oldGuid:r,newGuid:n}of t.values()){if(i.has(r))throw new Error("\u591A\u4E2A\u63A7\u4EF6\u5171\u7528\u65E7\u7D22\u5F15\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6309\u63A7\u4EF6\u8EAB\u4EFD\u6838\u5BF9");i.set(r,n)}return new Map([...i].filter(([r,n])=>r!==n))}function ks(e,t){let i=[],r=new Map([...t].map(([c,l])=>[String(c),l])),n=1,o=0,a=0;return{source:e.replace(/\d+/g,(c,l)=>{if(!r.has(c))return c;for(;o<l;o++)e[o]===`
|
|
113
|
+
`)}`);return{buffer:r,warnings:[...new Set(t.warnings)]}}function Nn(e){return Fe.toObject(Fe.decode(pr(e)),{longs:Number,enums:Number,bytes:Buffer,defaults:!1,arrays:!0,objects:!0})}function Wa(e){try{let i=Nn(e).graph||[];return i.length>0&&i.every(r=>Number(r.which)===It)}catch{return!1}}function Ka(e){let t=[...e.graph||[],...e.accessories||[]].filter(n=>Number(n.which)===It),i=[],r=t.map((n,o)=>{let a=n.script?.mapping||{},s=Number(n.id?.id)||0;s<=0&&i.push(`\u7B2C ${o+1} \u6761\u811A\u672C\u6620\u5C04\u7F3A\u5C11 GraphUnit.id.id\uFF0C\u5DF2\u6309 0 \u5904\u7406\uFF08\u5BFC\u51FA\u65F6\u4F1A\u91CD\u65B0\u5206\u914D\uFF09\u3002`);let c=Number(a.id)||0;return c&&c!==s&&i.push(`\u7B2C ${o+1} \u6761\u811A\u672C\u6620\u5C04 id(${c}) \u4E0E\u5355\u5143 id(${s}) \u4E0D\u4E00\u81F4\uFF0C\u4EE5\u5355\u5143 id \u4E3A\u51C6\u3002`),{guid:s,path:String(a.filePath||""),source:String(a.source||"")}});for(let[n,o]of r.entries())o.path&&!/\.lua$/iu.test(o.path)&&i.push(`\u7B2C ${n+1} \u6761\u811A\u672C\u6620\u5C04 file_path \u7F3A\u5C11 .lua \u540E\u7F00\uFF08${o.path}\uFF09\uFF0C\u771F\u673A\u53EF\u80FD\u62D2\u7EDD\u5BFC\u5165\uFF1B\u6A21\u62DF\u5668\u5185\u6309\u5F52\u4E00\u5316\u8DEF\u5F84\u7167\u5E38 require\u3002`);return{scripts:r,warnings:i}}function qa(e){let t=Nn(e),i=Ka(t);if(!i.scripts.length)throw new Error("GIA \u5185\u6CA1\u6709\u811A\u672C\u6620\u5C04\u5355\u5143\uFF08which=69\uFF09");return{scripts:i.scripts,warnings:i.warnings,metadata:{assetType:"lua-script"}}}function Mu(e){let t=[],i;try{i=Nn(e)}catch(n){return{valid:!1,errors:[n?.message||String(n)],scriptCount:0}}let r=i.graph||[];return r.length||t.push("Root.graph \u4E3A\u7A7A"),(i.accessories||[]).length&&t.push("script.gia \u4E0D\u5E94\u5305\u542B accessories"),r.forEach((n,o)=>{let a=`\u5355\u5143 ${o+1}`;Number(n.which)!==It&&t.push(`${a}: which \u5E94\u4E3A 69\uFF0C\u5B9E\u9645 ${n.which}`),Number(n.id?.class)!==ja&&t.push(`${a}: id.class \u5E94\u4E3A 30\uFF0C\u5B9E\u9645 ${n.id?.class}`),Number(n.id?.type??0)!==0&&t.push(`${a}: id.type \u5E94\u7F3A\u7701`);let s=n.script?.mapping;if(!s){t.push(`${a}: \u7F3A\u5C11 field35 ScriptMappingWrapper`);return}_e(n.id?.id)||t.push(`${a}: GraphUnit.id.id \u975E\u6CD5\uFF08\u5141\u8BB8 0x40000000\u20130x403FFFFF\uFF09`),Number(s.id)!==Number(n.id?.id)&&t.push(`${a}: mapping.id \u5E94\u7B49\u4E8E GraphUnit.id.id`),String(s.name||"")!==String(n.name||"")&&t.push(`${a}: mapping.name \u5E94\u7B49\u4E8E GraphUnit.name`),String(s.filePath||"").trim()?/\.lua$/iu.test(String(s.filePath))||t.push(`${a}: file_path \u5E94\u4EE5 .lua \u7ED3\u5C3E\uFF08\u5B98\u65B9 script.gia \u6837\u672C\u5747\u4E3A \u540D\u79F0.lua\uFF0C\u771F\u673A require \u65F6\u624D\u53BB\u6269\u5C55\u540D\uFF09`):t.push(`${a}: file_path \u4E3A\u7A7A`)}),{valid:t.length===0,errors:t,scriptCount:r.length}}function pr(e){let t=Buffer.isBuffer(e)?e:Buffer.from(e);if(t.length<ct+En)throw new Error("GIA \u6587\u4EF6\u8FC7\u77ED");if(t.readUInt32BE(4)!==1||t.readUInt32BE(8)!==Fa||t.readUInt32BE(12)!==3)throw new Error("\u4E0D\u662F\u53D7\u652F\u6301\u7684 GIA v1 \u6587\u4EF6");let i=t.readUInt32BE(16);if(i!==t.length-ct-En)throw new Error("GIA payload \u957F\u5EA6\u4E0D\u4E00\u81F4");if(t.readUInt32BE(ct+i)!==Oa)throw new Error("GIA \u5C3E\u6807\u8BB0\u65E0\u6548");return t.subarray(ct,ct+i)}function pe(e,t){return e.ui?.content?.data?.find(i=>i.details?.[t])?.details?.[t]||null}function Nu(e){let t=e.ui?.content?.data?.find(o=>o.field501===66&&o.field502===89||Object.hasOwn(o.details||{},"templateRefSlot")),i=Buffer.from(t?.details?.templateRefSlot||[]),r=i.toString("utf8"),n=Buffer.from(r,"utf8").equals(i)&&!/[\u0000-\u001f\u007f-\u009f]/u.test(r);return{referencedPrefabId:n?r:"",raw:{templateRefSlot:n?r:"",...n?{}:{templateRefSlotBase64:i.toString("base64")},...t?.empty76?.length?{templateRefOuterBase64:Buffer.from(t.empty76).toString("base64")}:{}}}}function Fu(e){let t=pe(e,"transform")?.multiPlatform,i={};for(let n of t?.platforms||[]){let o=Su[n.platformType||0],a=n.transform||{};i[o]={scale:a.scale?{x:a.scale.x??0,y:a.scale.y??0,z:a.scale.z??0}:{x:1,y:1,z:1},rotation:{x:a.field508?.x??0,y:a.field508?.y??0,z:a.field508?.z??0},anchorMin:{x:a.anchorMin?.x??0,y:a.anchorMin?.y??0},anchorMax:{x:a.anchorMax?.x??0,y:a.anchorMax?.y??0},offset:{x:a.offset?.x??0,y:a.offset?.y??0},size:{x:a.size?.x??0,y:a.size?.y??0},pivot:a.pivot?{x:a.pivot.x??0,y:a.pivot.y??0}:{x:.5,y:.5}}}let r=i.KEYBOARD||i[Object.keys(i)[0]];if(!r)throw new Error(`GIA \u63A7\u4EF6 ${e.name||e.id?.id} \u7F3A\u5C11\u591A\u5E73\u53F0\u53D8\u6362`);for(let n of ue)i[n]||(i[n]=structuredClone(r));return i}function hr(e){let t=e.ui?.content?.data||[];return t.some(i=>i.details?.textConfig)?t.some(i=>i.field501===71)?"textwindow":"textbox":t.some(i=>i.details?.cursorConfig)?"cursor":t.some(i=>Object.hasOwn(i.details||{},"templateRefSlot")||i.field501===66&&i.field502===89)?"reference":t.some(i=>i.details?.gridView)?"grid":t.some(i=>i.details?.buttonPreset)?"button":t.some(i=>i.details?.keyHint)?"keyhint":t.some(i=>i.details?.image||i.details?.imageSlot)?"image":t.some(i=>Object.hasOwn(i.details||{},"effectSlot"))?"animation":t.some(i=>Object.hasOwn(i.details||{},"fullscreenEffectSlot"))?"fullscreen":(t.some(i=>Object.hasOwn(i.details||{},"containerNodeSlot")),"container")}function Na(e,{reverseSiblings:t=!1,idOffset:i=0}={}){if(!e.length)return{nodes:new Map,rootCandidates:[],warnings:[]};let r=new Map(e.map((l,u)=>[l.id?.id,`n${i+u+1}`])),n=new Map,o=new Map,a=[];for(let l of e){let u=hr(l),f=pe(l,"textConfig"),h=pe(l,"imageSlot"),p=pe(l,"image"),m=pe(l,"buttonPreset"),b=pe(l,"gridView"),w=pe(l,"genericSlot"),y=pe(l,"footerSlot"),v=pe(l,"cursorConfig"),_=pe(l,"keyHint"),P=pe(l,"containerNodeSlot"),M=u==="reference"?Nu(l):null,O=pe(l,"effectSlot"),L=pe(l,"fullscreenEffectSlot"),z=q(u,{id:r.get(l.id?.id),guid:l.id?.id||0,giaInfoIndex:(l.ui?.content?.info||[]).find(S=>S.field501===2&&S.field502===6)?.index?.value,giaRelatedGuids:(l.ui?.content?.info||[]).find(S=>S.field501===4&&S.field502===4)?.related?.value||[],name:l.name||u,visible:pe(l,"field14")?.field17?.initiallyHidden!==!0,active:pe(l,"field14")?.initiallyInactive!==!0,canControllerFocus:y?.field505===1,scriptMappingIds:(w?.field502||[]).map(S=>Number(S?.field1?.id)).filter(S=>Number.isSafeInteger(S)&&S>0),transformByPlatform:Fu(l),syncAllDevices:pe(l,"transform")?.multiPlatform?.field504===1,giaRaw:{genericField501:w?.field501??0,footerField505:y?.field505??0,...u==="textbox"||u==="textwindow"?{textField501:f?.field501??20,textField503:f?.field503??12,textAlign:f?.align??0,...[void 0,0,1,2].includes(f?.verticalAlign)?{}:{textVerticalAlign:f.verticalAlign},...u==="textwindow"?{textField511:f?.field511??1,textViewField502:f?.viewFlags?.field502??1,textViewField503:f?.viewFlags?.field503??1}:{}}:{},...u==="cursor"?{cursorField501:v?.field501??0}:{},...M?.raw||{},...u==="grid"?{gridField501:b?.field501??1,gridField507:b?.field507??1,gridField508:b?.field508??1,gridField509:b?.field509??1,gridField511:b?.field511??5,gridField512:b?.field512??1}:{},...u==="keyhint"?{keyHintField501:_?.field501??1,keyHintField502:_?.field502??1}:{},...u==="image"?{imageSlotType:h?.imageType??0,imageField502:p?.field502??1,imageField504:p?.field504??1,imageField505:p?.field505??1,imageField507:p?.field507??2,imageFillType:p?.fillType??1}:{},...u==="animation"?{effectSlot:O??""}:{},...u==="fullscreen"?{fullscreenEffectSlot:L??""}:{}},...u==="container"?{isolateNavigation:P?.isolateNavigation===!0,disableKeyEventPassthrough:P?.disableKeyEventPassthrough===!0,disableCursorEventPassthrough:P?.disableCursorEventPassthrough===!0,showCursor:P?.showCursor===!0}:{},...u==="cursor"?{raycastTarget:v?.field501===1}:{},...u==="textbox"||u==="textwindow"?{text:f?.text?.value??"",fontSize:f?.fontSize??20,minimumFontSize:f?.minimumFontSize??20,adaptiveFontSize:f?.adaptive===1,fontColor:f?.color??4294967295,bgColor:f?.color2??0,enableOutline:f?.outlineOff!==1,outlineColor:f?.color3??858993459,horizontalAlignment:f?.align===1?"Middle":f?.align===2?"Right":"Left",verticalAlignment:{0:"Top",1:"Middle",2:"Bottom"}[f?.verticalAlign??0]||"Top",...u==="textwindow"?{interactable:!0,showScrollBar:!0}:{}}:{},...u==="image"?{imageSource:"StaticReference",imageId:h?.assetId??0,imageType:h?.imageType===1?"Stretch":"Basic",imageColor:Number.isFinite(h?.field502)?h.field502>>>0:4294967295,enableMask:p?.enableMask===1,enableSoftEdge:p?.enableSoftEdge===1,enableFill:p?.enableFill===1,softEdgeMode:p?.softEdgePixel===1?"Pixel":"Percentage",softEdgeWidthX:p?.border?.field501??8,softEdgeWidthY:p?.border?.field502??8,horizontalSoftRange:p?.field512??85,verticalSoftRange:p?.field513??85,fillType:{1:"Horizontal",2:"Vertical",3:"Radial90",4:"Radial180",5:"Radial360"}[p?.fillType]||"Horizontal",fillAmount:Number.isFinite(p?.field508)?Math.max(0,Math.min(1,p.field508/100)):p?.enableFill===1?0:1,reverseMaskArea:p?.reverseMask===1}:{},...u==="button"?{interactable:m?.interactable===1,raycastTarget:m?.raycastTarget===1,clickAudioId:m?.clickAudioId??50888}:{},...u==="grid"?{cellSizeX:b?.cellSize?.field501??50,cellSizeY:b?.cellSize?.field502??50,spacingX:b?.gap?.field501??8,spacingY:b?.gap?.field502??8,padding1X:b?.padding1?.field501??20,padding1Y:b?.padding1?.field502??20,padding2X:b?.padding2?.field501??20,padding2Y:b?.padding2?.field502??20,previewCount:b?.field511??5}:{},...M?{referencedPrefabId:M.referencedPrefabId}:{},...u==="keyhint"?{keyboardKeyCode:_?.field502??null,controllerKeyCode:_?.field501??null}:{},...u==="animation"?{animationId:O??""}:{},...u==="fullscreen"?{animationId:L??""}:{}});n.set(l.id?.id,z),(M?.raw.templateRefSlotBase64||M?.raw.templateRefOuterBase64)&&a.push(`${z.name}: \u6A21\u677F\u5F15\u7528\u914D\u7F6E\u542B\u5C1A\u672A\u89E3\u6790\u7684\u4E8C\u8FDB\u5236\u5B57\u6BB5\uFF0C\u5DF2\u539F\u6837\u4FDD\u5B58\uFF1B\u5F15\u7528\u76EE\u6807\u672A\u63A8\u65AD\uFF0C\u9884\u89C8\u4E0D\u4F1A\u81EA\u52A8\u5C55\u5F00\u3002`),(u==="textbox"||u==="textwindow")&&![void 0,0,1,2].includes(f?.align)&&a.push(`${z.name}: \u6C34\u5E73\u5BF9\u9F50\u679A\u4E3E ${f.align} \u7684\u542B\u4E49\u672A\u77E5\uFF0C\u5DF2\u539F\u6837\u4FDD\u7559\u3002`),(u==="textbox"||u==="textwindow")&&![void 0,0,1,2].includes(f?.verticalAlign)&&a.push(`${z.name}: \u5782\u76F4\u5BF9\u9F50\u679A\u4E3E ${f.verticalAlign} \u7684\u542B\u4E49\u672A\u77E5\uFF0C\u5DF2\u539F\u6837\u4FDD\u7559\u3002`),u==="image"&&![void 0,0,1,2,3,4,5].includes(p?.fillType)&&a.push(`${z.name}: \u586B\u5145\u5F62\u72B6\u679A\u4E3E ${p.fillType} \u672A\u8BC6\u522B\uFF0C\u5DF2\u4FDD\u7559\u539F\u503C\u3002`),u==="button"&&o.set(z.id,{unavailableChildId:m?.disabledChild,hoverChildId:m?.hoverChild,pressedChildId:m?.pressedChild,selectedChildId:m?.selectedChild})}let s=[],c=new Set;for(let l of e){let u=n.get(l.id?.id),f=(l.ui?.content?.children||[]).map(h=>n.get(h)).filter(Boolean);if(f.length){u.children=t?f.slice().reverse():f;for(let h of f)c.add(h.id)}}for(let l of e){let u=n.get(l.id?.id),f=l.ui?.content?.parent||0,h=n.get(f);h?c.has(u.id)||(t?h.children.unshift(u):h.children.push(u)):s.push(u)}for(let[l,u]of o){let f=[...n.values()].find(h=>h.id===l);for(let[h,p]of Object.entries(u))f[h]=r.get(p)||null}return{nodes:n,rootCandidates:s,warnings:a}}function Ja(e){let t=pr(e),i=Fe.toObject(Fe.decode(t),{longs:Number,enums:Number,bytes:Buffer,defaults:!1,arrays:!0,objects:!0}),r=[...i.graph||[],...i.accessories||[]],n=y=>!!y.ui?.content&&[15,21,70].includes(Number(y.which)),o=(i.graph||[]).filter(n);if(!o.some(y=>y.ui?.content))throw new Error("GIA \u4E0D\u542B\u53EF\u8BC6\u522B\u7684 UIControlGroup \u4E3B\u56FE");let a=o.find(y=>y.which===21)||null,s=o.filter(y=>Number(y.which)===70),c=(i.accessories||[]).filter(n),l=new Set((a?.relatedIds||[]).map(y=>y.id||0)),u=a?l.size?c.filter(y=>l.has(y.id?.id||0)):c:[],f=s.length?[...s,...c.filter(y=>!l.has(y.id?.id||0))]:a?[]:[...o,...c];if(!u.length&&!f.length)throw new Error("GIA \u4E0D\u542B\u5BA2\u6237\u7AEF\u63A7\u4EF6");let h=["GIA \u5BFC\u5165\u4E3A\u5DF2\u9A8C\u8BC1 UI \u5B57\u6BB5\u7684\u8BED\u4E49\u5BFC\u5165\uFF1B\u672A\u77E5 protobuf \u5B57\u6BB5\u4E0D\u4F1A\u8FDB\u5165 Authoring JSON\u3002"],p=r.filter(y=>!n(y)&&Number(y.which)!==It);p.length&&h.push(`\u8DF3\u8FC7 ${p.length} \u4E2A\u975E UI / \u975E\u811A\u672C\u4F9D\u8D56\u5355\u5143\uFF1B\u8FD9\u4E9B\u8D44\u6E90\u4E0D\u4F1A\u8FDB\u5165\u5B58\u6863\u6216\u91CD\u65B0\u5BFC\u51FA\u3002`);let m=Ka(i);h.push(...m.warnings);let b=null,w=null;if(u.length){let y=Na(u,{reverseSiblings:!0,idOffset:0});h.push(...y.warnings);let v=y.rootCandidates.find(P=>P.kind==="container")||y.rootCandidates[0];if(!v)throw new Error("GIA \u672A\u627E\u5230\u5BA2\u6237\u7AEF\u6839\u63A7\u4EF6");let _=q("server-container",{id:"sc1",guid:a?.id?.id||0,name:a?.name||"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668",giaRelatedGuids:(a?.ui?.content?.info||[]).find(P=>P.field501===4&&P.field502===4)?.related?.value||[]});_.children=[v],y.rootCandidates.length>1&&h.push(`\u68C0\u6D4B\u5230 ${y.rootCandidates.length} \u4E2A\u65E0\u7236\u8282\u70B9\u63A7\u4EF6\uFF0C\u4EC5\u5BFC\u5165\u4EE5\u201C${v.name}\u201D\u4E3A\u6839\u7684\u6811\u3002`),b={version:1,layoutSchemaVersion:ve,meta:{name:a?.name||"\u5BFC\u5165\u7684\u754C\u9762\u63A7\u4EF6\u7EC4",assetType:"server-control-template",sourceFormat:"gia",sourceFile:"",gameVersion:i.gameVersion||"",giaFilePath:i.filePath||"",...Number.isSafeInteger(Number(i.modeFlag))?{giaModeFlag:Number(i.modeFlag)}:{}},canvasId:"pc-16-9",selectedId:v.id,script:{controlId:v.id,path:"",source:""},root:_}}if(f.length){let y=Na(f,{reverseSiblings:!1,idOffset:1e3});if(h.push(...y.warnings),!y.rootCandidates.length)throw new Error("GIA \u672A\u627E\u5230\u5BA2\u6237\u7AEF\u6A21\u677F");let v=q("server-container",{id:"sc1",guid:0,name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"});v.children=y.rootCandidates,w={version:1,layoutSchemaVersion:ve,meta:{name:y.rootCandidates.length===1?y.rootCandidates[0].name:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868",assetType:"client-control-template",sourceFormat:"gia",sourceFile:"",gameVersion:i.gameVersion||"",giaFilePath:i.filePath||"",...Number.isSafeInteger(Number(i.modeFlag))?{giaModeFlag:Number(i.modeFlag)}:{}},canvasId:"pc-16-9",selectedId:y.rootCandidates[0].id,script:{controlId:y.rootCandidates[0].id,path:"",source:""},root:v},Ke(w,{warnings:h});for(let _ of y.rootCandidates)te(_,P=>P.children.reverse());b||(b=w)}return{project:b,clientProject:w&&b!==w?w:void 0,scripts:m.scripts,warnings:h,metadata:{gameVersion:i.gameVersion||"",filePath:i.filePath||"",...Number.isSafeInteger(Number(i.modeFlag))?{modeFlag:Number(i.modeFlag)}:{},combined:!!(a&&s.length)}}}function Fn(e){let t=pr(e),i=Fe.toObject(Fe.decode(t),{longs:Number,enums:Number,defaults:!1,arrays:!0,objects:!0}),r=i.graph||[],n=i.accessories||[],o=[],a=(p,m)=>p!=null&&Object.prototype.hasOwnProperty.call(p,m),s=new Map,c=[];/^\d+-\d+-\d+-\\.+\.gia$/iu.test(i.filePath||"")||o.push(`Root.filePath \u4E0D\u662F UID-TIME-ID-\\\u6587\u4EF6\u540D.gia\uFF1A${i.filePath||"<missing>"}`);let l=r.filter(p=>p.which===70).map(p=>{let m=hr(p),b=p.ui?.content?.info||[],w=b.find(_=>_.field501===2&&_.field502===6)?.index?.value,y=b.find(_=>_.field501===4&&_.field502===4),v=y?.related?.value||[];return Te(w)||o.push(`${p.name}: Info.index=${w??"<missing>"}\uFF0C\u5FC5\u987B\u662F\u6B63\u6574\u6570`),y||o.push(`${p.name}: \u9876\u5C42 UIControlTemplate \u7F3A\u5C11 Info.related \u8BB0\u5F55`),{id:p.id?.id||0,name:p.name||"",kind:m,actualIndex:w,relatedPresent:!!y,relatedGuids:v}}),u=new Map;for(let p of l){if(!Te(p.actualIndex))continue;let m=u.get(p.actualIndex);m?o.push(`${p.name}: \u72EC\u7ACB\u6A21\u677F\u8D44\u4EA7\u7F16\u53F7 ${p.actualIndex} \u4E0E ${m.name} \u91CD\u590D`):u.set(p.actualIndex,p)}l.length||o.push("Root.graph \u4E0D\u542B UIControlTemplate(70)");let f=0,h=0;for(let p of[...r,...n]){if(!p.ui?.content)continue;let m=p.id?.id||0,b=p.ui.content,w=hr(p),y=r.includes(p)&&p.which===70,v=`${p.name||"<unnamed>"}(${m||"<missing-guid>"})`;_e(m)?s.has(m)?o.push(`${v}: GUID \u4E0E ${s.get(m).name||"<unnamed>"} \u91CD\u590D`):s.set(m,p):o.push(`${v}: GraphUnit GUID \u975E\u6CD5\uFF08\u5141\u8BB8 0x40000000\u20130x403FFFFF\uFF09`),(p.id?.class!==1||p.id?.type!==8)&&o.push(`${v}: GraphUnit.id \u5FC5\u987B\u4E3A class=1,type=8`),b.guid!==m&&o.push(`${v}: content.guid=${b.guid??"<missing>"} \u4E0E GraphUnit.id.id \u4E0D\u4E00\u81F4`),y&&p.which!==70&&o.push(`${v}: \u6A21\u677F\u6839 which \u5FC5\u987B\u4E3A UIControlTemplate(70)`),!y&&p.which!==15&&o.push(`${v}: \u9644\u4EF6\u63A7\u4EF6 which \u5FC5\u987B\u4E3A UIControl(15)`);let _=b.info||[],P=_.find(T=>T.field501===1&&T.field502===5),M=_.find(T=>T.field501===2&&T.field502===6);P?.guid?.value!==m&&o.push(`${v}: Info.self GUID \u7F3A\u5931\u6216\u4E0E\u81EA\u8EAB\u4E0D\u4E00\u81F4`),Te(M?.index?.value)||o.push(`${v}: Info.index=${M?.index?.value??"<missing>"}\uFF0C\u5FC5\u987B\u662F\u6B63\u6574\u6570`);let O=_.find(T=>T.field501===4&&T.field502===4);y&&!O&&o.push(`${v}: \u9876\u5C42\u6A21\u677F\u7F3A\u5C11 Info.related \u8BB0\u5F55`),!y&&O&&o.push(`${v}: \u9644\u4EF6\u63A7\u4EF6\u4E0D\u5E94\u5199 Info.related`);let L=$a[w],z=b.data||[],S=z.map(T=>`${T.field501}/${T.field502}`),A=L?.map(([T])=>T)||[];L?JSON.stringify(S)!==JSON.stringify(A)&&o.push(`${v}: Data \u69FD\u4F4D\u987A\u5E8F ${S.join(",")}\uFF0C\u5E94\u4E3A ${A.join(",")}`):o.push(`${v}: \u672A\u77E5\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7C7B\u578B ${w}`);for(let T=0;T<Math.min(z.length,L?.length||0);T+=1){let B=z[T],[Y,re,U]=L[T];if(a(B,re)||o.push(`${v}: Data ${Y} \u7F3A\u5C11 ${re} \u5206\u652F`),!U)continue;a(B.details,U)||o.push(`${v}: Details ${Y} \u7F3A\u5C11 ${U} \u5206\u652F`);let ie=Da[Y];(B.details?.field501!==ie||B.details?.field502!==B.field502||B.details?.field503!==1)&&o.push(`${v}: Details ${Y} \u6807\u8BB0\u5E94\u4E3A ${ie}/${B.field502}/1`);let Me=B.details?.nodeRef;(Me?.class!==1||Me?.type!==8||Me?.id!==m)&&o.push(`${v}: Details ${Y} node_ref \u672A\u6307\u5411\u81EA\u8EAB`)}let I=(p.ui.content.data||[]).find(T=>T.field501===4&&T.field502===86);I&&(a(I.field14,"field17")?f+=1:o.push(`${v}: \u7C7B\u578B Data \u7F3A\u5C11\u663E\u5F0F Field14.field17 \u7A7A\u4E32`),a(I.details?.field14,"field17")?f+=1:o.push(`${v}: \u7C7B\u578B Details \u7F3A\u5C11\u663E\u5F0F Field14.field17 \u7A7A\u4E32`));let k=(p.ui.content.data||[]).find(T=>T.details?.transform)?.details?.transform?.multiPlatform?.platforms||[];k.length!==4&&o.push(`${v}: \u591A\u5E73\u53F0\u53D8\u6362\u6570\u91CF=${k.length}\uFF0C\u5E94\u4E3A 4`);let D=k.map(T=>T.platformType||0);JSON.stringify(D)!==JSON.stringify([0,1,2,3])&&o.push(`${v}: \u5E73\u53F0\u987A\u5E8F ${D.join(",")}\uFF0C\u5E94\u4E3A 0,1,2,3`);let E=(p.ui.content.data||[]).find(T=>T.details?.transform)?.details?.transform;E?.multiPlatform?.field502!==Si[w]&&o.push(`${v}: \u53D8\u6362 preset=${E?.multiPlatform?.field502??"<missing>"}\uFF0C${w} \u5E94\u4E3A ${Si[w]}`);for(let T of k)a(T.transform,"field508")?h+=1:o.push(`${v}: RectTransform \u7F3A\u5C11\u663E\u5F0F field508 \u7A7A\u4E32`);c.push({id:m,name:p.name||"",kind:w,template:y,parent:b.parent||0,children:[...b.children||[]],relatedIds:(p.relatedIds||[]).map(T=>T.id||0),dataSignatures:S})}for(let p of c){let m=`${p.name||"<unnamed>"}(${p.id})`;if(JSON.stringify(p.relatedIds)!==JSON.stringify(p.children)&&o.push(`${m}: GraphUnit.relatedIds \u4E0E content.children \u4E0D\u4E00\u81F4`),p.template&&p.parent&&o.push(`${m}: \u9876\u5C42\u6A21\u677F\u4E0D\u5E94\u6709 parent`),!p.template){let b=s.get(p.parent);b?(b.ui?.content?.children||[]).includes(p.id)||o.push(`${m}: \u7236\u63A7\u4EF6 children \u672A\u53CD\u5411\u5305\u542B\u81EA\u8EAB`):o.push(`${m}: parent=${p.parent||"<missing>"} \u4E0D\u5B58\u5728`)}for(let b of p.children){let w=s.get(b);w?(w.ui?.content?.parent||0)!==p.id&&o.push(`${m}: child=${b} \u7684 parent \u672A\u6307\u56DE\u81EA\u8EAB`):o.push(`${m}: child=${b} \u4E0D\u5B58\u5728`)}}return{valid:o.length===0,errors:o,filePath:i.filePath||"",gameVersion:i.gameVersion||"",templateCount:l.length,accessoryCount:n.length,templates:l,units:c,explicitEmpty:{field17:f,rectField508:h}}}function On(e){let t=pr(e),i=Fe.toObject(Fe.decode(t),{longs:Number,enums:Number,defaults:!1,arrays:!0,objects:!0}),r=(i.graph||[]).filter(E=>E.ui?.content&&Number(E.which)===21),n=(i.graph||[]).filter(E=>Number(E.which)===70),o=(i.graph||[]).filter(E=>Number(E.which)===It),a=(i.accessories||[]).filter(E=>E.ui?.content),s=[],c=(E,T)=>E!=null&&Object.prototype.hasOwnProperty.call(E,T);/^\d+-\d+-\d+-\\.+\.gia$/iu.test(i.filePath||"")||s.push(`Root.filePath \u4E0D\u662F UID-TIME-ID-\\\u6587\u4EF6\u540D.gia\uFF1A${i.filePath||"<missing>"}`),r.length!==1&&s.push(`\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F UIControlGroup \u6570\u91CF=${r.length}\uFF0C\u5E94\u4E3A 1`);let l=(i.graph||[]).filter(E=>{let T=Number(E.which);return T===It||T===70||T===21?!1:!E.ui?.content});l.length&&s.push(`Root.graph \u542B ${l.length} \u4E2A\u65E0\u6CD5\u8BC6\u522B\u7684\u975E\u63A7\u4EF6/\u975E\u811A\u672C\u5355\u5143`);let u=r[0];if(!u)return{valid:!1,errors:s,filePath:i.filePath||"",gameVersion:i.gameVersion||"",accessoryCount:a.length,controls:[],scriptCount:o.length,explicitEmpty:{field17:0,rectField508:0}};let f=[u,...n,...a],h=new Map;for(let E of f){let T=E.id?.id||0,B=`${E.name||"<unnamed>"}(${T||"<missing-guid>"})`;_e(T)?h.has(T)?s.push(`${B}: GUID \u91CD\u590D`):h.set(T,E):s.push(`${B}: GraphUnit GUID \u975E\u6CD5\uFF08\u5141\u8BB8 0x40000000\u20130x403FFFFF\uFF09`),(E.id?.class!==1||E.id?.type!==8)&&s.push(`${B}: GraphUnit.id \u5FC5\u987B\u4E3A class=1,type=8`),E.ui?.content?.guid!==T&&s.push(`${B}: content.guid \u4E0E GraphUnit.id.id \u4E0D\u4E00\u81F4`)}let p=u.id?.id||0,m=u.ui.content,b=`${u.name||"<unnamed>"}(${p})`;u.which!==21&&s.push(`${b}: which \u5FC5\u987B\u4E3A UIControlGroup(21)`);let w=m.info||[];w.find(E=>E.field501===1&&E.field502===5)?.guid?.value!==p&&s.push(`${b}: Info.self GUID \u7F3A\u5931\u6216\u4E0D\u4E00\u81F4`),w.find(E=>E.field501===2&&E.field502===6)?.index?.value!==1&&s.push(`${b}: Info.index \u5FC5\u987B\u4E3A 1`);let y=w.find(E=>E.field501===4&&E.field502===4);y||s.push(`${b}: \u7F3A\u5C11\u663E\u5F0F Info.related \u8BB0\u5F55`);let v=0,_=0,P=(E,T,B,Y=!1)=>{let re=E.id?.id||0,U=`${E.name||"<unnamed>"}(${re})`,ie=E.ui.content.data||[],Me=ie.map(oe=>`${oe.field501}/${oe.field502}`),Ot=B.map(([oe])=>oe);JSON.stringify(Me)!==JSON.stringify(Ot)&&s.push(`${U}: Data \u69FD\u4F4D\u987A\u5E8F ${Me.join(",")}\uFF0C\u5E94\u4E3A ${Ot.join(",")}`);for(let oe=0;oe<Math.min(ie.length,B.length);oe+=1){let Ge=ie[oe],[He,si,li]=B[oe];if(c(Ge,si)||s.push(`${U}: Data ${He} \u7F3A\u5C11 ${si} \u5206\u652F`),!li)continue;c(Ge.details,li)||s.push(`${U}: Details ${He} \u7F3A\u5C11 ${li} \u5206\u652F`);let tt=Da[He];(Ge.details?.field501!==tt||Ge.details?.field502!==Ge.field502||Ge.details?.field503!==1)&&s.push(`${U}: Details ${He} \u6807\u8BB0\u5E94\u4E3A ${tt}/${Ge.field502}/1`);let ci=Ge.details?.nodeRef;(ci?.class!==1||ci?.type!==8||ci?.id!==re)&&s.push(`${U}: Details ${He} node_ref \u672A\u6307\u5411\u81EA\u8EAB`)}let ai=ie.find(oe=>oe.field501===4&&oe.field502===(Y?23:86)),ne=Y?"empty15":"field17";c(ai?.field14,ne)?Y||(v+=1):s.push(`${U}: \u7C7B\u578B Data \u7F3A\u5C11\u663E\u5F0F Field14.${ne} \u7A7A\u4E32`),c(ai?.details?.field14,ne)?Y||(v+=1):s.push(`${U}: \u7C7B\u578B Details \u7F3A\u5C11\u663E\u5F0F Field14.${ne} \u7A7A\u4E32`);let De=ie.find(oe=>oe.details?.transform)?.details?.transform,pt=De?.multiPlatform?.platforms||[];pt.length!==4&&s.push(`${U}: \u591A\u5E73\u53F0\u53D8\u6362\u6570\u91CF=${pt.length}\uFF0C\u5E94\u4E3A 4`);let Yi=pt.map(oe=>oe.platformType||0);JSON.stringify(Yi)!==JSON.stringify([0,1,2,3])&&s.push(`${U}: \u5E73\u53F0\u987A\u5E8F ${Yi.join(",")}\uFF0C\u5E94\u4E3A 0,1,2,3`);let ji=Y?Si["server-container"]:Si[T];De?.multiPlatform?.field502!==ji&&s.push(`${U}: \u53D8\u6362 preset=${De?.multiPlatform?.field502??"<missing>"}\uFF0C\u5E94\u4E3A ${ji}`);for(let oe of pt)c(oe.transform,"field508")?_+=1:s.push(`${U}: RectTransform \u7F3A\u5C11\u663E\u5F0F field508 \u7A7A\u4E32`);return Me};P(u,"server-container",xu,!0);let M=(u.relatedIds||[]).map(E=>E.id||0),O=new Set(M),L=a.filter(E=>O.has(E.id?.id||0)),z=L.map(E=>E.id?.id||0);JSON.stringify(M)!==JSON.stringify(z)&&s.push(`${b}: \u4E3B\u56FE relatedIds \u5FC5\u987B\u6309\u987A\u5E8F\u8986\u76D6\u672C\u7EC4 accessories`);let S=m.data?.find(E=>E.details?.rootChildRef)?.details?.rootChildRef?.guid||0,A=h.get(S);(!A||!L.includes(A))&&s.push(`${b}: 62/82 \u6839\u8282\u70B9\u5F15\u7528\u4E0D\u5B58\u5728`),z[0]!==S&&s.push(`${b}: \u6839\u5BB9\u5668\u8282\u70B9\u5FC5\u987B\u662F\u672C\u7EC4 accessories[0]`);let I=[];for(let E of L){let T=E.id?.id||0,B=E.ui.content,Y=`${E.name||"<unnamed>"}(${T})`,re=hr(E);E.which!==15&&s.push(`${Y}: which \u5FC5\u987B\u4E3A UIControl(15)`);let U=B.info||[];(U.length!==1||U[0]?.field501!==1||U[0]?.field502!==5||U[0]?.guid?.value!==T)&&s.push(`${Y}: \u670D\u52A1\u7AEF\u5BB9\u5668\u5185\u63A7\u4EF6 Info \u5FC5\u987B\u53EA\u542B\u81EA\u8EAB GUID`);let ie=$a[re];ie||s.push(`${Y}: \u672A\u77E5\u5BA2\u6237\u7AEF\u63A7\u4EF6\u7C7B\u578B ${re}`);let Me=ie?P(E,re,ie):[];I.push({id:T,name:E.name||"",kind:re,parent:B.parent||0,children:[...B.children||[]],relatedIds:(E.relatedIds||[]).map(Ot=>Ot.id||0),dataSignatures:Me})}let k=I.find(E=>E.id===S);k&&(k.kind!=="container"&&s.push(`${k.name}(${S}): \u6839\u63A7\u4EF6\u5FC5\u987B\u4E3A\u5BB9\u5668\u8282\u70B9`),k.parent&&s.push(`${k.name}(${S}): \u6839\u63A7\u4EF6\u4E0D\u5E94\u6709 parent`));let D=new Map(I.map(E=>[E.id,E]));for(let E of I){let T=`${E.name}(${E.id})`;if(JSON.stringify(E.relatedIds)!==JSON.stringify(E.children)&&s.push(`${T}: relatedIds \u5FC5\u987B\u4E0E\u76F4\u63A5 children \u4E00\u81F4`),E.id!==S){let B=D.get(E.parent);B?B.children.includes(E.id)||s.push(`${T}: \u7236\u63A7\u4EF6 children \u672A\u53CD\u5411\u5305\u542B\u81EA\u8EAB`):s.push(`${T}: parent=${E.parent||"<missing>"} \u4E0D\u5B58\u5728`)}for(let B of E.children){let Y=D.get(B);Y?Y.parent!==E.id&&s.push(`${T}: child=${B} \u7684 parent \u672A\u6307\u56DE\u81EA\u8EAB`):s.push(`${T}: child=${B} \u4E0D\u5B58\u5728`)}}if(n.length){let E=Fn(Rn({...i,graph:n,accessories:a.filter(T=>!O.has(T.id?.id||0))}));s.push(...E.errors.map(T=>`\u5BA2\u6237\u7AEF\u6A21\u677F: ${T}`))}return{valid:s.length===0,errors:s,filePath:i.filePath||"",gameVersion:i.gameVersion||"",graph:{id:p,name:u.name||"",relatedGuids:y?.related?.value||[],rootGuid:S},accessoryCount:a.length,controls:I,scriptCount:o.length,explicitEmpty:{field17:v,rectField508:_}}}function Qa(e,t=[]){if(!e||e.layoutSchemaVersion===ve)return e;if(e.layoutSchemaVersion!==void 0&&e.layoutSchemaVersion!==1)throw new Error(`\u4EC5\u652F\u6301 layoutSchemaVersion=2 \u6216\u53EF\u8FC1\u79FB\u7684\u65E7\u5E03\u5C40\uFF0C\u6536\u5230 ${e.layoutSchemaVersion}`);if(!e.root)return{...e,layoutSchemaVersion:ve};let i=structuredClone(e),r=0;return te(i.root,n=>{let o=n.transformByPlatform||{},a=n.transformByCanvas||{},s=n.name||n.id;for(let l of Object.keys(o))if(!ue.includes(l))throw new Error(`${s}: unknown platform ${l}`);let c={};for(let l of ue){let u=zt[l],f=K[u].platform,h=Object.keys(K).filter(w=>K[w].platform===f&&a[w]),p=a[u]?u:h[0],m=l==="CONTROLLER_CONSOLE"?c.KEYBOARD:l==="CONTROLLER_MOBILE"?c.TOUCHSCREEN:null,b=o[l]??m??(p?a[p]:null);if(c[l]=b?Le(b):fn(n.kind),b||t.push(`${s}: ${l} \u65E0\u65E7\u5E03\u5C40\uFF0C\u5DF2\u4F7F\u7528\u63A7\u4EF6\u9ED8\u8BA4\u503C`),!o[l]&&!m&&p&&p!==u&&t.push(`${s}: \u7F3A\u5C11 ${u}\uFF0C\u5DF2\u91C7\u7528 ${p} \u7684\u951A\u70B9\u548C\u5C3A\u5BF8\u53C2\u6570`),!m)for(let w of h)JSON.stringify(c[l])!==JSON.stringify(Le(a[w]))&&t.push(`${s}: ${w} \u4E0E ${l} \u5E03\u5C40\u51B2\u7A81\uFF0C\u4FDD\u7559${o[l]?"\u5DF2\u6709\u5E73\u53F0":p}\u53C2\u6570`)}nt(c,`${s}.transformByPlatform`),n.transformByPlatform=c,delete n.transformByCanvas,r++}),i.layoutSchemaVersion=ve,t.unshift(`\u5DF2\u81EA\u52A8\u8FC1\u79FB\u65E7\u5E03\u5C40\uFF1A${r} \u4E2A\u63A7\u4EF6\u8F6C\u6362\u4E3A\u56DB\u5E73\u53F0\u53C2\u6570\uFF1B\u518D\u6B21\u4FDD\u5B58\u5C06\u4F7F\u7528\u65B0\u7248\u683C\u5F0F`),i}function zn(e){if(![1,2,3,4].includes(e))throw new Error(`\u4EC5\u652F\u6301 version=1\u20134 \u7684\u5B58\u6863\uFF0C\u6536\u5230 ${e}`)}function Dn(e,t,i,r=e.canvasId){let n=at(e.root,t);return!n||n.kind==="server-container"?we(r):i[n.id]||we(r)}function ut(e,{warnings:t=[]}={}){if(!e)return wt();if(e=Qa(e,t),(e.root||e.layoutSchemaVersion!==void 0)&&e.layoutSchemaVersion!==ve)throw new Error(`\u4EC5\u652F\u6301 layoutSchemaVersion=${ve} \u7684\u56DB\u5E73\u53F0\u5E03\u5C40\uFF0C\u4E0D\u652F\u6301\u65E7\u753B\u5E03\u5E03\u5C40\u6216\u5176\u4ED6\u7248\u672C`);let i=e.meta?.assetType==="client-control-template"?"client-control-template":"server-control-template",r=i==="client-control-template"?Bt():wt(),n={layoutSchemaVersion:ve,version:Number.isSafeInteger(e.version)&&e.version>0?e.version:1,meta:{name:String(e.meta?.name||r.meta.name),assetType:i,sourceFormat:String(e.meta?.sourceFormat||r.meta.sourceFormat),sourceFile:String(e.meta?.sourceFile||""),...e.meta?.gameVersion?{gameVersion:String(e.meta.gameVersion)}:{},...e.meta?.giaFilePath?{giaFilePath:String(e.meta.giaFilePath)}:{},...Number.isSafeInteger(Number(e.meta?.giaOwnerUid))?{giaOwnerUid:Number(e.meta.giaOwnerUid)}:{},...Number.isSafeInteger(Number(e.meta?.giaTimestamp))?{giaTimestamp:Number(e.meta.giaTimestamp)}:{},...Number.isSafeInteger(Number(e.meta?.giaFileId))?{giaFileId:Number(e.meta.giaFileId)}:{},...e.meta?.giaFileName?{giaFileName:String(e.meta.giaFileName)}:{},...Number.isSafeInteger(e.meta?.giaNextAssetIndex)&&e.meta.giaNextAssetIndex>=2?{giaNextAssetIndex:e.meta.giaNextAssetIndex}:{},...Number.isSafeInteger(e.meta?.giaAssetIndexSchemaVersion)&&e.meta.giaAssetIndexSchemaVersion>0?{giaAssetIndexSchemaVersion:e.meta.giaAssetIndexSchemaVersion}:{},...Number.isSafeInteger(Number(e.meta?.giaModeFlag))&&Number(e.meta.giaModeFlag)>=0?{giaModeFlag:Number(e.meta.giaModeFlag)}:{}},canvasId:e.canvasId&&K[e.canvasId]?e.canvasId:Qi,selectedId:e.selectedId||r.selectedId,root:pn(e.root||r.root)};return rs(n),Ke(n,{warnings:t}),n}function rs(e){let t=new Set;te(e.root,i=>{if(typeof i.id!="string"||!i.id)throw new Error("node id must be a non-empty string");if(t.has(i.id))throw new Error(`duplicate node id: ${i.id}`);t.add(i.id)}),t.has(e.selectedId)||(e.selectedId=hn(e.root).id)}function Za(e){return ot(Lt(e))}function Ou(e,t){let i=!1;return te(e,r=>{r.id===t&&(i=!0)}),i}function zu(e,t,i,r){let o=lt(e.root,e.canvasId).boxes[t.id],a=i.children.findIndex(f=>f.id===t.id);if(a<0)throw new Error("reparent: source node is not attached");if(i.children.splice(a,1),r.children.push(t),!o)return;let s=lt(e.root,e.canvasId),c=r.kind==="server-container"?we(e.canvasId):s.boxes[r.id]||we(e.canvasId),l=st(t.transformByPlatform,e.canvasId),u=gt(c,l,{posX:o.centerX,posY:o.centerY,width:o.width,height:o.height});Wt(e,t,u)}function $u(e,t){return e.meta.assetType!=="client-control-template"?kn(e.root,t):(e.root.children||[]).flatMap(i=>kn(i,t))}function ns(e,t){let i=Pa(e.root,t);if(e.meta.assetType!=="client-control-template")return i;let r=vi(e),n=new Set;return r&&r.kind!=="server-container"&&te(r,o=>n.add(o.id)),i.filter(o=>n.has(o.id))}function os(e){let{canvas:t,boxes:i}=lt(e.root,e.canvasId),r=Ii(e,new Set,{preserveLegacy:!0}),n=he(e.root,e.selectedId),o=n?i[n.id]:null;return H({layoutSchemaVersion:ve,version:e.version,meta:{...e.meta},canvasId:e.canvasId,canvas:{id:e.canvasId,width:t.width,height:t.height,platform:K[e.canvasId].platform,label:K[e.canvasId].label,presets:Object.values(K).map(a=>({id:a.id,label:a.label,width:a.width,height:a.height,platform:a.platform}))},selectedId:e.selectedId,asset:{type:e.meta.assetType,label:e.meta.assetType==="client-control-template"?"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F":"\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F",templateCount:e.meta.assetType==="client-control-template"?e.root.children.length:1,currentTemplateId:e.meta.assetType==="client-control-template"&&vi(e)?.id||""},tree:$u(e,r),boxes:ns(e,i),inspector:Ra(n,e.canvasId,o||t,r),root:e.root})}function Wt(e,t,i){let r=lt(e.root,e.canvasId),n=Dn(e,t.id,r.boxes),o={};if(t.syncAllDevices!==!1)for(let a of ue){if(a===yt(e.canvasId))continue;let s=zt[a],c=lt(e.root,s,a);o[a]=Dn(e,t.id,c.boxes,s)}t.transformByPlatform=ha({transformByPlatform:t.transformByPlatform,source:i,canvasId:e.canvasId,syncAllDevices:t.syncAllDevices!==!1,sourceParentBox:n,targetParentBoxByPlatform:o})}var Du=new Set(["name","active","visible","canControllerFocus","isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor","fontSize","adaptiveFontSize","minimumFontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","text","imageSource","imageType","imageId","imageColor","enableMask","enableSoftEdge","softEdgeMode","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","enableFill","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","fillAmount","reverseMaskArea","raycastTarget","interactable","clickAudioId","unavailableChildId","hoverChildId","pressedChildId","selectedChildId","showScrollBar","cellSizeX","cellSizeY","spacingX","spacingY","padding1X","padding1Y","padding2X","padding2Y","previewCount","scrollDirection","layoutConstraint","referencedPrefabId","animationId","keyboardKeyCode","controllerKeyCode","itemPrefabId","layoutConstraintFixedCount"]),Gu=new Set(["posX","posY","width","height"]),Vu=new Set(["anchorMinX","anchorMinY","anchorMaxX","anchorMaxY","pivotX","pivotY"]);function Lu(e){if(typeof e=="number"&&Number.isFinite(e))return e>>>0;if(typeof e=="string"){let t=e.trim();if(t.startsWith("#")){let r=t.slice(1);if(r.length===6)return(4278190080|parseInt(r,16))>>>0;if(r.length===8)return parseInt(r,16)>>>0}let i=Number(t);if(Number.isFinite(i))return i>>>0}throw new Error("color must be an ARGB integer or #RRGGBB/#AARRGGBB string")}function Qe(e,t){let i=Number(e);if(!Number.isFinite(i))throw new Error(`${t} must be a finite number`);return i}function es(e){if(e===!0||e===1||e==="1"||e==="true")return!0;if(e===!1||e===0||e==="0"||e==="false")return!1;throw new Error("boolean field requires true or false")}var Bu=new Set(["fontSize","minimumFontSize","imageId","clickAudioId","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","fillAmount","cellSizeX","cellSizeY","spacingX","spacingY","padding1X","padding1Y","padding2X","padding2Y","previewCount","keyboardKeyCode","controllerKeyCode","itemPrefabId","layoutConstraintFixedCount"]),Hu=new Set(["active","visible","canControllerFocus","isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor","adaptiveFontSize","enableOutline","enableMask","enableSoftEdge","enableFill","reverseMaskArea","raycastTarget","interactable","showScrollBar"]),Yu=new Set(["name","imageSource","horizontalAlignment","verticalAlignment","text","softEdgeMode","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","scrollDirection","layoutConstraint","referencedPrefabId","animationId"]),ts=new Set(["unavailableChildId","hoverChildId","pressedChildId","selectedChildId"]),is={imageSource:["StaticReference","Prefab"],imageType:["Basic","Stretch",null],scrollDirection:["Horizontal","Vertical"],layoutConstraint:["AutoWrap","Fixed"],softEdgeMode:["Percentage","Pixel"],fillType:["Horizontal","Vertical","Radial90","Radial180","Radial360"],fillHorizontalType:["Left","Right"],fillVerticalType:["Bottom","Top"],fillRadial90Type:["BottomLeft","TopLeft","TopRight","BottomRight"],fillRadialType:["Bottom","Left","Top","Right"]};function ju(e,t){if(!t||typeof t!="object")throw new Error("patch requires op");let i=t.op;if(i==="select")return t.id&&he(e.root,t.id)&&(e.selectedId=t.id),e;if(i==="pick"){let{boxes:r}=lt(e.root,e.canvasId),n=ns(e,r),o=Ma(n,Number(t.x),Number(t.y));return o&&(e.selectedId=o),e}if(i==="setCanvas")return t.canvasId&&K[t.canvasId]&&(e.canvasId=t.canvasId),e;if(i==="setScript")throw new Error("\u811A\u672C\u7531\u5B58\u6863\u7EDF\u4E00\u7BA1\u7406\uFF0C\u8BF7\u4F7F\u7528 addScript / updateScript / removeScript \u64CD\u4F5C");if(i==="newAsset"){let r=t.assetType==="client-control-template"?Bt():wt();return e.version=r.version,e.meta=r.meta,e.canvasId=r.canvasId,e.selectedId=r.selectedId,e.root=r.root,e}if(i==="addTemplate"){if(e.meta.assetType!=="client-control-template")throw new Error("\u53EA\u6709\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5DE5\u7A0B\u53EF\u4EE5\u65B0\u589E\u6A21\u677F");let r=q(t.kind,{id:dn(e.root),guid:Za(e.root),name:t.name||`\u65B0${t.kind==="container"?"\u5BB9\u5668\u8282\u70B9":t.kind}\u6A21\u677F`});return e.root.children.push(r),e.selectedId=r.id,e}if(i==="add"){let r=he(e.root,t.parentId||e.selectedId);if(!r)throw new Error("add: parent not found");let n=ua(r,t.kind,{id:dn(e.root),guid:Za(e.root),name:t.name});return e.selectedId=n.id,e}if(i==="reparent"){if(e.meta.assetType!=="client-control-template")throw new Error("\u5C42\u7EA7\u8C03\u6574\u4EC5\u9002\u7528\u4E8E\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5DE5\u7A0B");let r=he(e.root,t.id||e.selectedId),n=r?at(e.root,r.id):null,o=he(e.root,t.parentId);if(!r||r.kind==="server-container"||!n)throw new Error("reparent: node not found");if(!o)throw new Error("reparent: parent not found");if(o.id===r.id||Ou(r,o.id))throw new Error("\u63A7\u4EF6\u4E0D\u80FD\u79FB\u52A8\u5230\u81EA\u8EAB\u6216\u5176\u540E\u4EE3\u4E0B\u9762");if(o.kind==="server-container"&&n.kind==="server-container")return e;if(n.kind==="server-container"&&o.kind!=="server-container"&&e.root.children.length<=1)throw new Error("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A\u9876\u5C42\u6A21\u677F");return zu(e,r,n,o),e.selectedId=r.id,e}if(i==="moveSibling"){let r=he(e.root,t.id||e.selectedId),n=r?at(e.root,r.id):null;if(!r||!n)throw new Error("moveSibling: node not found");let o=n.children.findIndex(c=>c.id===r.id),a=t.direction==="up"?-1:t.direction==="down"?1:0,s=o+a;return!a||s<0||s>=n.children.length||(n.children.splice(o,1),n.children.splice(s,0,r),e.selectedId=r.id),e}if(i==="remove"){let r=t.id||e.selectedId,n=at(e.root,r);if(n?.kind==="server-container"){if(e.meta.assetType!=="client-control-template")throw new Error("\u670D\u52A1\u7AEF\u63A7\u4EF6\u6A21\u677F\u7684\u5BA2\u6237\u7AEF\u6839\u8282\u70B9\u4E0D\u80FD\u5220\u9664");if((e.root.children||[]).length<=1)throw new Error("\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5217\u8868\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A\u6A21\u677F")}return fa(e.root,r)&&(te(e.root,o=>{if(o.kind==="button")for(let a of ts)o[a]&&!he(e.root,o[a])&&(o[a]=null)}),e.selectedId=n?n.id:e.root.id),e}if(i==="set"){let r=he(e.root,t.id||e.selectedId);if(!r)throw new Error("set: node not found");let n=t.key;n==="reverseMask"&&(n="reverseMaskArea");let o=t.value;if(r.kind==="reference"&&["referencedPrefabId","giaRaw.templateRefSlot"].includes(n)&&(r.giaRaw.templateRefSlotBase64||r.giaRaw.templateRefOuterBase64))throw new Error("\u8BE5\u6A21\u677F\u5F15\u7528\u542B\u5C1A\u672A\u89E3\u6790\u7684\u539F\u59CB\u914D\u7F6E\uFF0C\u6682\u4E0D\u80FD\u6539\u5199\u76EE\u6807\u7D22\u5F15\uFF1B\u8BF7\u5728\u5B98\u65B9\u7F16\u8F91\u5668\u4FEE\u6539\u540E\u91CD\u65B0\u5BFC\u5165");if(n.startsWith("giaRaw.")){let l=n.slice(7);if(!l||l.includes("."))throw new Error("invalid raw GIA field path");let u=sa(r.kind,l);if(!u)throw new Error(`unknown raw GIA field for ${r.kind}: ${l}`);if(r.giaRaw||={},r.giaRaw[l]=an(u,o),l==="footerField505"&&[0,1].includes(r.giaRaw[l])&&(r.canControllerFocus=r.giaRaw[l]===1),r.kind==="cursor"&&l==="cursorField501"&&[0,1].includes(r.giaRaw[l])&&(r.raycastTarget=r.giaRaw[l]===1),(r.kind==="textbox"||r.kind==="textwindow")&&l==="textAlign"){let f={0:"Left",1:"Middle",2:"Right"}[r.giaRaw[l]];f&&(r.horizontalAlignment=f)}if(r.kind==="image"&&l==="imageFillType"){let f={1:"Horizontal",2:"Vertical",3:"Radial90",4:"Radial180",5:"Radial360"}[r.giaRaw[l]];f&&(r.fillType=f)}return r.kind==="keyhint"&&l==="keyHintField502"&&(r.keyboardKeyCode=r.giaRaw[l]),r.kind==="keyhint"&&l==="keyHintField501"&&(r.controllerKeyCode=r.giaRaw[l]),e}if(n==="syncAllDevices"){if(r.syncAllDevices=es(o),r.syncAllDevices){let l=st(r.transformByPlatform,e.canvasId);Wt(e,r,l)}return e}if(Du.has(n)){if(n.endsWith("Color")&&(o=Lu(o)),Bu.has(n)){if(o=Qe(o,n),o<0)throw new Error(`${n} must not be negative`);if((n==="imageId"||n==="clickAudioId"||n==="keyboardKeyCode"||n==="controllerKeyCode")&&(o=Math.trunc(o)),n==="fillAmount"&&o>1)throw new Error("fillAmount must be between 0 and 1")}if(Hu.has(n)&&(o=es(o)),Yu.has(n)&&(o=String(o??"")),n==="horizontalAlignment"&&!["Left","Middle","Right"].includes(o))throw new Error("invalid horizontalAlignment");if(n==="verticalAlignment"&&!["Top","Middle","Bottom"].includes(o))throw new Error("invalid verticalAlignment");if(is[n]&&!is[n].includes(o))throw new Error(`invalid ${n}`);if(ts.has(n))if(o===""||o===void 0||o===null)o=null;else{o=String(o);let l=he(e.root,o);if(!l||l===r||l.kind==="server-container"||!(r.children||[]).some(u=>u.id===o))throw new Error(`${n} must reference a direct child of this button`)}if(r.kind==="image"&&(n==="imageSource"||n==="imageId")&&r[n]!==o&&(r.imageType=null,r.giaRaw.imageSlotType=0),r[n]=o,r.kind==="image"&&n==="imageType"&&(r.giaRaw.imageSlotType=o==="Stretch"?1:0),n==="canControllerFocus"&&(r.giaRaw.footerField505=o?1:0),r.kind==="cursor"&&n==="raycastTarget"&&(r.giaRaw.cursorField501=o?1:0),(r.kind==="textbox"||r.kind==="textwindow")&&n==="horizontalAlignment"&&(r.giaRaw.textAlign={Left:0,Middle:1,Right:2}[o]),(r.kind==="textbox"||r.kind==="textwindow")&&n==="verticalAlignment"&&delete r.giaRaw.textVerticalAlign,r.kind==="image"&&n==="fillType"){let l={Horizontal:1,Vertical:2,Radial90:3,Radial180:4,Radial360:5}[o];l&&(r.giaRaw.imageFillType=l)}return r.kind==="reference"&&n==="referencedPrefabId"&&(r.giaRaw.templateRefSlot=o),r.kind==="grid"&&n==="previewCount"&&(r.giaRaw.gridField511=Math.trunc(o)),r.kind==="keyhint"&&n==="keyboardKeyCode"&&(r.giaRaw.keyHintField502=Math.trunc(o)),r.kind==="keyhint"&&n==="controllerKeyCode"&&(r.giaRaw.keyHintField501=Math.trunc(o)),(r.kind==="animation"||r.kind==="fullscreen")&&n==="animationId"&&(r.giaRaw[r.kind==="animation"?"effectSlot":"fullscreenEffectSlot"]=o),e}let{boxes:a}=lt(e.root,e.canvasId),s=Dn(e,r.id,a),c=st(r.transformByPlatform,e.canvasId);if(n==="anchorType"){let l=$n(a[r.id]),u=ia(c,o);return u=gt(s,u,l),Wt(e,r,u),e}if(["rotationX","rotationY","rotationZ"].includes(n)){let l={...c,rotation:{...c.rotation,[n.slice(-1).toLowerCase()]:Qe(o,n)}};return Wt(e,r,l),e}if(Vu.has(n)){let l=$n(a[r.id]),u={...c,anchorMin:{...c.anchorMin},anchorMax:{...c.anchorMax},pivot:{...c.pivot}};return n==="anchorMinX"&&(u.anchorMin.x=Qe(o,n)),n==="anchorMinY"&&(u.anchorMin.y=Qe(o,n)),n==="anchorMaxX"&&(u.anchorMax.x=Qe(o,n)),n==="anchorMaxY"&&(u.anchorMax.y=Qe(o,n)),n==="pivotX"&&(u.pivot.x=Qe(o,n)),n==="pivotY"&&(u.pivot.y=Qe(o,n)),Wt(e,r,gt(s,u,l)),e}if(Gu.has(n)){let l=$n(a[r.id]),u=Qe(o,n);if((n==="width"||n==="height")&&u<0)throw new Error(`${n} must not be negative`);return l[n]=u,Wt(e,r,gt(s,c,l)),e}throw new Error(`set: unknown key ${n}`)}if(i==="replace"){let r=ut(t.project);return e.version=r.version,e.meta=r.meta,e.canvasId=r.canvasId,e.selectedId=r.selectedId,e.root=r.root,e}throw new Error(`unknown op ${i}`)}function Gn(e,t){if(!t||typeof t!="object")throw new Error("patch requires op");if(t.expectedRevision!==void 0&&Number(t.expectedRevision)!==e.version)throw new Error(`revision conflict: expected ${t.expectedRevision}, current ${e.version}`);let i=e.version,r=JSON.parse(JSON.stringify(e));return ju(r,t),rs(r),Ke(r),r.version=i+1,Object.keys(e).forEach(n=>{delete e[n]}),Object.assign(e,r),e}function $n(e){return e?{posX:e.centerX,posY:e.centerY,width:e.width,height:e.height}:{posX:0,posY:0,width:0,height:0}}import Uu from"fengari";var{lua:d,lauxlib:Q,lualib:as,to_luastring:mr,to_jsstring:Xu}=Uu,Wu=d.LUA_TNIL,Ku=d.LUA_TBOOLEAN,qu=d.LUA_TNUMBER,Ju=d.LUA_TSTRING,ss=d.LUA_TTABLE,Qu=d.LUA_TFUNCTION,Vn=d.LUA_TUSERDATA,Oe=d.LUA_OK,ls=new WeakMap,Ln=Symbol("luaTableEntries"),Bn={__scriptHostKey:!0};function N(e){return mr(String(e))}function Ct(e,t){ls.set(e,t)}function Ee(e){return ls.get(e)}var Ci=class{constructor(t){this.value=t}};function le(e,t,i){if(i instanceof Ci){d.lua_pushnumber(e,i.value);return}if(i==null){d.lua_pushnil(e);return}let r=typeof i;if(r==="boolean"){d.lua_pushboolean(e,i);return}if(r==="number"){Number.isInteger(i)&&Math.abs(i)<=2147483647?d.lua_pushinteger(e,i):d.lua_pushnumber(e,i);return}if(r==="string"){d.lua_pushstring(e,N(i));return}if(r==="function"){tf(e,t,i);return}if(i&&i[Ln]){let n=i[Ln];d.lua_createtable(e,Array.isArray(i)?i.length:0,n.length);for(let[o,a]of n)le(e,t,o),le(e,t,a),d.lua_settable(e,-3);return}if(Array.isArray(i)){d.lua_createtable(e,i.length,0);for(let n=0;n<i.length;n++)le(e,t,i[n]),d.lua_rawseti(e,-2,n+1);return}if(i&&i.__kind==="EnumItem"){t.pushEnumItem(e,i);return}if(i&&i.__kind==="CursorEventData"){t.pushCursor(e,i);return}if(i&&i.__kind==="Script"){t.pushScript(e,i);return}if(i&&i.typeofName){t.pushControl(e,i);return}if(i&&i.__kind==="ServerSignal"){t.pushSignal(e,i);return}if(i&&(i.SetEase||i.Append)){t.pushTween(e,i);return}if(r==="object"){d.lua_createtable(e,0,Object.keys(i).length);for(let[n,o]of Object.entries(i))le(e,t,o),d.lua_setfield(e,-2,N(n));return}d.lua_pushnil(e)}function Z(e,t){if(d.lua_isnil(e,t)||d.lua_type(e,t)===d.LUA_TNONE)return"";if(!d.lua_isstring(e,t)&&d.lua_type(e,t)!==d.LUA_TNUMBER)return`lua_type=${d.lua_type(e,t)}`;let i=d.lua_tostring(e,t);return i==null?"":Xu(i)}function Ze(e,t){t=d.lua_absindex(e,t);let i=d.lua_type(e,t);if(i===Vn)return Ee(d.lua_touserdata(e,t));if(i===ss){d.lua_pushlightuserdata(e,Bn),d.lua_rawget(e,t);let r=d.lua_type(e,-1)===Vn?d.lua_touserdata(e,-1):null;return d.lua_pop(e,1),r?Ee(r):null}return null}function me(e,t,i){i=d.lua_absindex(e,i);let r=d.lua_type(e,i);if(r===Wu)return null;if(r===Ku)return!!d.lua_toboolean(e,i);if(r===qu)return d.lua_isinteger(e,i)?d.lua_tointeger(e,i):d.lua_tonumber(e,i);if(r===Ju)return Z(e,i);if(r===Vn){let n=d.lua_touserdata(e,i);return Ee(n)??n}if(r===Qu)return Zu(e,t,i);if(r===ss){let n=Ze(e,i);if(n)return n;let o=[];for(d.lua_pushnil(e);d.lua_next(e,i)!==0;){let l=me(e,t,-2),u=me(e,t,-1);o.push([l,u]),d.lua_pop(e,1)}let a=new Map(o.filter(([l])=>Number.isInteger(l)&&l>=1)),s=0;for(;a.has(s+1);)s+=1;let c=s>0?[]:{};for(let[l,u]of o)Array.isArray(c)&&Number.isInteger(l)&&l>=1?c[l-1]=u:(typeof l=="string"||typeof l=="number")&&(c[l]=u);return Object.defineProperty(c,Ln,{value:o}),c}return null}function Zu(e,t,i){t.luaFunctions||(t.luaFunctions=new Map);let r=typeof d.lua_topointer=="function"?d.lua_topointer(e,i):null;if(r!=null&&t.luaFunctions.has(r))return t.luaFunctions.get(r);d.lua_pushvalue(e,i);let n=Q.luaL_ref(e,d.LUA_REGISTRYINDEX),o=ef(e,t,n);return r!=null&&t.luaFunctions.set(r,o),o}function ef(e,t,i){let r=(...n)=>{if(r.__luaRef==null)throw new Error("attempt to call a released Lua callback");let o=d.lua_gettop(e);d.lua_rawgeti(e,d.LUA_REGISTRYINDEX,r.__luaRef);for(let l of n)le(e,t,l);if(d.lua_pcall(e,n.length,d.LUA_MULTRET,0)!==Oe){let l=Z(e,-1);throw d.lua_settop(e,o),new Error(l)}let s=d.lua_gettop(e)-o,c=[];for(let l=1;l<=s;l++)c.push(me(e,t,o+l));if(d.lua_settop(e,o),c.length!==0)return c.length===1?c[0]:c};return r.__luaRef=i,r.__luaState=e,r}function cs(e){e?.__luaRef!=null&&(e.__luaHolds=(e.__luaHolds||0)+1)}function us(e,t){if(!t||t.__luaRef==null||!t.__luaState)return;if(t.__luaHolds>1){t.__luaHolds-=1;return}let i=t.__luaState;if((!e?.luaStates||e.luaStates.has(i))&&Q.luaL_unref(i,d.LUA_REGISTRYINDEX,t.__luaRef),t.__luaRef=null,t.__luaState=null,e?.luaFunctions)for(let[r,n]of e.luaFunctions)n===t&&e.luaFunctions.delete(r)}function tf(e,t,i){d.lua_pushlightuserdata(e,i),d.lua_pushlightuserdata(e,t),d.lua_pushcclosure(e,function(n){let o=d.lua_touserdata(n,d.lua_upvalueindex(1)),a=d.lua_touserdata(n,d.lua_upvalueindex(2)),s=d.lua_gettop(n),c=[];for(let l=1;l<=s;l++)c.push(me(n,a,l));try{let l=o(...c);if(Array.isArray(l)&&l.__multi){for(let u of l)le(n,a,u);return l.length}return l===void 0?0:(le(n,a,l),1)}catch(l){return d.lua_pushstring(n,N(String(l&&l.message?l.message:l))),d.lua_error(n)}},2)}function fs(e){!e||typeof d.lua_close!="function"||d.lua_close(e)}function ds(e){if(Q.luaL_loadstring(e,N(["local nativeGetMetatable = getmetatable","getmetatable = function(value)",' if type(value) == "string" then return nil end'," return nativeGetMetatable(value)","end"].join(`
|
|
114
|
+
`)))===Oe&&d.lua_pcall(e,0,0,0),d.lua_settop(e,0),d.lua_pushnil(e),d.lua_setglobal(e,N("_VERSION")),d.lua_getglobal(e,N("string")),!d.lua_isnil(e,-1))for(let i of["dump","pack","unpack"])d.lua_pushnil(e),d.lua_setfield(e,-2,N(i));if(d.lua_pop(e,1),d.lua_pushnil(e),d.lua_setglobal(e,N("io")),d.lua_getglobal(e,N("os")),!d.lua_isnil(e,-1))for(let i of Object.keys({execute:1,getenv:1,remove:1,rename:1,tmpname:1,setlocale:1,exit:1}))d.lua_pushnil(e),d.lua_setfield(e,-2,N(i));d.lua_pop(e,1),d.lua_getglobal(e,N("debug")),d.lua_isnil(e,-1)?d.lua_pop(e,1):(d.lua_getfield(e,-1,N("traceback")),d.lua_newtable(e),d.lua_pushvalue(e,-2),d.lua_setfield(e,-2,N("traceback")),d.lua_setglobal(e,N("debug")),d.lua_pop(e,2)),d.lua_getglobal(e,N("math")),d.lua_isnil(e,-1)||(d.lua_pushcfunction(e,i=>{let r=d.lua_tonumber(i,1);return d.lua_pushboolean(i,Number.isNaN(r)),1}),d.lua_setfield(e,-2,N("isnan")),d.lua_pushcfunction(e,i=>{let r=d.lua_tonumber(i,1);return d.lua_pushboolean(i,r===1/0||r===-1/0),1}),d.lua_setfield(e,-2,N("isinf"))),d.lua_pop(e,1),d.lua_pushnil(e),d.lua_setglobal(e,N("package")),d.lua_pushnil(e),d.lua_setglobal(e,N("load")),d.lua_pushnil(e),d.lua_setglobal(e,N("loadfile")),d.lua_pushnil(e),d.lua_setglobal(e,N("dofile")),d.lua_pushnil(e),d.lua_setglobal(e,N("collectgarbage")),d.lua_pushnil(e),d.lua_setglobal(e,N("coroutine")),d.lua_pushnil(e),d.lua_setglobal(e,N("fengari"))}var Pe=(e,t=0)=>Number.isFinite(Number(e))?Number(e):t,hs=e=>e?.Name||e,gr=e=>Math.max(0,Math.min(1,Pe(e)));function ki(e){let t=e.parent?ki(e.parent):[e.runtime.canvasWidth,e.runtime.canvasHeight];return[Math.max(0,(e.anchorMaxX-e.anchorMinX)*t[0]+Pe(e.sizeDeltaX)),Math.max(0,(e.anchorMaxY-e.anchorMinY)*t[1]+Pe(e.sizeDeltaY))]}function Ei(e){let[t,i]=ki(e),r=hs(e.scrollDirection)==="Horizontal",n=Math.max(1,Pe(e.cellSizeX,50)),o=Math.max(1,Pe(e.cellSizeY,50)),a=Math.max(0,Pe(e.spacingX)),s=Math.max(0,Pe(e.spacingY)),c=Math.max(0,Pe(e.padding1X)),l=Math.max(0,Pe(e.padding1Y)),u=Math.max(0,Pe(e.padding2X)),f=Math.max(0,Pe(e.padding2Y)),h=r?i-l-f:t-c-u,p=r?o:n,m=r?s:a,b=hs(e.layoutConstraint)==="Fixed"?Math.max(1,Math.floor(Pe(e.layoutConstraintFixedCount,1))):Math.max(1,Math.floor((h+m)/(p+m))),w=Math.ceil(e.itemCount/b),y=w?r?c+u+w*n+(w-1)*a:l+f+w*o+(w-1)*s:0,v=r?t:i,_=Math.max(0,y-v);return{width:t,height:i,horizontal:r,cellW:n,cellH:o,gapX:a,gapY:s,left:c,top:l,right:u,bottom:f,lanes:b,length:y,viewport:v,max:_,offset:gr(e.scrollProgress)*_}}function Kt(e){let t=Ei(e);for(let i=0;i<(e._gridItems?.length||0);i+=1){let r=e._gridItems[i];if(!r.alive||r.parent!==e)continue;let n=Math.floor(i/t.lanes),o=i%t.lanes,a=t.horizontal?n:o,s=t.horizontal?o:n,c=t.left+a*(t.cellW+t.gapX)+t.cellW/2-(t.horizontal?t.offset:0),l=-t.top-s*(t.cellH+t.gapY)-t.cellH/2+(t.horizontal?0:t.offset),u={anchorMinX:0,anchorMaxX:0,anchorMinY:1,anchorMaxY:1,pivotX:.5,pivotY:.5,sizeDeltaX:t.cellW,sizeDeltaY:t.cellH,anchoredPositionX:c,anchoredPositionY:l};Object.entries(u).some(([f,h])=>r[f]!==h)&&(Object.assign(r,u),r.markPlayDirty(!0))}return t}var ps={container:"ClientUIContainerControl",textbox:"ClientUITextBoxControl",textwindow:"ClientUITextWindowControl",image:"ClientUIImageControl",button:"ClientUIPresetButtonControl",cursor:"ClientUICursorEventAreaControl",grid:"ClientUIGridScrollerControl",keyhint:"ClientUIKeyHintControl",animation:"ClientUIAnimationControl",fullscreen:"ClientUIFullscreenAnimationControl",reference:"ClientUIReferenceControl"},rf=["alive","Id","prefabIndex","active","activeInHierarchy","visible"],yr=new Set(["active","visible","parent","sizeDeltaX","sizeDeltaY","anchorMinX","anchorMinY","anchorMaxX","anchorMaxY","pivotX","pivotY"]),nf=["name","parent","anchoredPositionX","anchoredPositionY","sizeDeltaX","sizeDeltaY","anchorMinX","anchorMinY","anchorMaxX","anchorMaxY","pivotX","pivotY","localScaleX","localScaleY","localScaleZ","localRotationX","localRotationY","localRotationZ","canControllerFocus"],of={image:["imageSource","imageId"],grid:["itemCount","scrollDirection","layoutConstraint","layoutConstraintFixedCount"],reference:["referencedPrefabIndex"]},af={container:["isolateNavigation","disableKeyEventPassthrough","disableCursorEventPassthrough","showCursor"],textbox:["text","fontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","adaptiveFontSize","minimumFontSize"],textwindow:["interactable","showScrollBar","text","fontSize","fontColor","bgColor","enableOutline","outlineColor","horizontalAlignment","verticalAlignment","adaptiveFontSize","minimumFontSize"],image:["imageColor","enableMask","enableSoftEdge","softEdgeMode","softEdgeWidthX","softEdgeWidthY","horizontalSoftRange","verticalSoftRange","reverseMaskArea","fillType","fillHorizontalType","fillVerticalType","fillRadial90Type","fillRadialType","fillAmount"],button:["interactable","clickAudioId","raycastTarget"],cursor:["raycastTarget"],grid:["itemPrefabIndex","raycastTarget","showScrollBar","interactable","scrollProgress"],keyhint:["keyboardKeyCode","controllerKeyCode"],animation:["animationId","playSoundEffect","layer"],fullscreen:["animationId","playSoundEffect"]},sf=["GetChildren","GetChild","FindChild","SetActive","SetVisible","GetSiblingIndex","SetSiblingIndex","SetAsFirstSibling","SetAsLastSibling","GetAnchoredPosition","SetAnchoredPosition","GetSizeDelta","SetSizeDelta","GetAnchorMin","SetAnchorMin","GetAnchorMax","SetAnchorMax","GetPivot","SetPivot","GetLocalScale","SetLocalScale","GetLocalRotation","SetLocalRotation","GetScriptByPath","GetScript","GetScripts","AddKeyEventListener","RemoveKeyEventListener","RemoveKeyEventListeners","RemoveAllKeyEventListeners","AddNavigationEventListener","RemoveNavigationEventListener","RemoveNavigationEventListeners","RemoveAllNavigationEventListeners","SetControllerNavigation","GetControllerNavigation"],ms=["AddCursorEventListener","RemoveCursorEventListener","RemoveCursorEventListeners","RemoveAllCursorEventListeners","SimulateCursorClick"],lf={image:["SetImage","SetSoftEdgeWidth","SetFillUnused","SetFillHorizontal","SetFillVertical","SetFillRadial90","SetFillRadial180","SetFillRadial360"],button:ms,cursor:ms,animation:["PlayAnimation","StopAnimation"],grid:["RefreshItems","GetItemIndex","GetItemSize","GetItemSpacing","GetPadding","ScrollToItemAt","GetContentLength"]};function Yn(e,t){return e.kind==="image"&&t==="imageType"&&e.runtime.canSelectImageType(e.imageId,e.imageSource)?"rw":rf.includes(t)||(of[e.kind]||[]).includes(t)?"ro":nf.includes(t)||(af[e.kind]||[]).includes(t)?"rw":null}var cf=["localRotationX","localRotationY","localRotationZ"],qt=Math.PI/180;function gs(e,t){return[e[3]*t[0]+e[0]*t[3]+e[1]*t[2]-e[2]*t[1],e[3]*t[1]-e[0]*t[2]+e[1]*t[3]+e[2]*t[0],e[3]*t[2]+e[0]*t[1]-e[1]*t[0]+e[2]*t[3],e[3]*t[3]-e[0]*t[0]-e[1]*t[1]-e[2]*t[2]]}function Hn(e){if(Object.is(e,-0))return e;let t=(e%360+360)%360,i=Math.round(t*1e6)/1e6;return i>=360?0:i}function ys(e,t,i){let r=v=>[Math.sin(v*qt/2),Math.cos(v*qt/2)],[n,o]=r(e),[a,s]=r(t),[c,l]=r(i),[u,f,h,p]=gs(gs([0,a,0,s],[n,0,0,o]),[0,0,c,l]),m=Math.max(-1,Math.min(1,-2*(f*h-p*u))),b,w,y;return Math.abs(m)>.999999?(b=Math.sign(m)*90,w=2*Math.atan2(f,p)/qt,y=0):(b=Math.asin(m)/qt,w=Math.atan2(2*(p*f+u*h),1-2*(u*u+f*f))/qt,y=Math.atan2(2*(p*h+u*f),1-2*(u*u+h*h))/qt),[Hn(b),Hn(w),Hn(y)]}function bs(e,t){return sf.includes(t)||(lf[e.kind]||[]).includes(t)}var uf={container:{isolateNavigation:!1,disableKeyEventPassthrough:!1,disableCursorEventPassthrough:!1,showCursor:!1},textbox:{text:"",fontSize:20,fontColor:4294967295,bgColor:0,enableOutline:!1,outlineColor:0,horizontalAlignment:null,verticalAlignment:null,adaptiveFontSize:!1,minimumFontSize:10},textwindow:{interactable:!0,showScrollBar:!0,text:"",fontSize:20,fontColor:4294967295,bgColor:0,enableOutline:!1,outlineColor:0,horizontalAlignment:null,verticalAlignment:null,adaptiveFontSize:!1,minimumFontSize:10},image:{imageSource:null,imageId:0,imageColor:4294967295,imageType:null,enableMask:!1,enableSoftEdge:!1,softEdgeMode:"Percentage",softEdgeWidthX:8,softEdgeWidthY:8,horizontalSoftRange:85,verticalSoftRange:85,enableFill:!1,fillType:"Unused",fillHorizontalType:"Left",fillVerticalType:"Bottom",fillRadial90Type:"BottomLeft",fillRadialType:"Bottom",reverseMaskArea:!1,fillAmount:1},button:{interactable:!0,clickAudioId:0,raycastTarget:!0,unavailableChildId:null,hoverChildId:null,pressedChildId:null,selectedChildId:null,pressed:!1},cursor:{raycastTarget:!0},grid:{itemCount:0,itemPrefabIndex:null,raycastTarget:!0,interactable:!0,showScrollBar:!0,scrollDirection:"Vertical",layoutConstraint:"AutoWrap",layoutConstraintFixedCount:null,scrollProgress:0,cellSizeX:50,cellSizeY:50,spacingX:8,spacingY:8,padding1X:20,padding1Y:20,padding2X:20,padding2Y:20,previewCount:5},keyhint:{keyboardKeyCode:null,controllerKeyCode:null},animation:{animationId:null,playSoundEffect:null,layer:null,raycastTarget:!1},fullscreen:{animationId:null,playSoundEffect:null,raycastTarget:!1},reference:{referencedPrefabIndex:null}},ft=class e{constructor(t,i){this.runtime=t,this.kind=i.kind||"container",this.typeofName=ps[this.kind]||ps.container,this.alive=!0,this.Id=i.Id??t.nextControlId(),this.authoringId=i.authoringId??null,this.prefabIndex=i.prefabIndex??0,this.name=i.name??"",this.active=i.active===!0,this.visible=i.visible!==!1,this._parent=null,this.children=[],this.scripts=[],this.cursorListeners=new Map,this.keyListeners=new Map,this.navListeners=new Map,this.navConfig=new Map,this.anchoredPositionX=i.anchoredPositionX??0,this.anchoredPositionY=i.anchoredPositionY??0,this.sizeDeltaX=i.sizeDeltaX??0,this.sizeDeltaY=i.sizeDeltaY??0,this.anchorMinX=i.anchorMinX??.5,this.anchorMinY=i.anchorMinY??.5,this.anchorMaxX=i.anchorMaxX??.5,this.anchorMaxY=i.anchorMaxY??.5,this.pivotX=i.pivotX??.5,this.pivotY=i.pivotY??.5,this.localScaleX=i.localScaleX??1,this.localScaleY=i.localScaleY??1,this.localScaleZ=i.localScaleZ??1,this.localRotationX=i.localRotationX??0,this.localRotationY=i.localRotationY??0,this.localRotationZ=i.localRotationZ??0,this.canControllerFocus=i.canControllerFocus??!1,this._playDirty=!0,this._playDeepDirty=!0,this._playChildDirty=!1,(this.kind==="grid"||this.kind==="textwindow")&&(this.runtime.scrollControls||=new Set,this.runtime.scrollControls.add(this));let r=uf[this.kind]||{};for(let[n,o]of Object.entries(r))this[n]===void 0&&(this[n]=i[n]!==void 0?i[n]:o);if(this.kind==="grid"&&(this.scrollProgress=i.scrollProgress??0),i.children)for(let n of i.children){let o=n instanceof e?n:new e(t,n);this.addChild(o)}}get parent(){return this._parent}set parent(t){if(this._parent===t)return;if(t!==null&&!(t instanceof e))throw new Error("parent must be a Control or nil");if(t&&t.runtime!==this.runtime)throw new Error("parent must belong to the same runtime");if(t===this)throw new Error("cannot parent a control to itself or its descendant");for(let r=t;r;r=r._parent)if(r===this)throw new Error("cannot parent a control to itself or its descendant");let i=this._parent;if(i){let r=i.children.indexOf(this);r>=0&&i.children.splice(r,1),i.markPlayDirty(!0)}else{let r=this.runtime.roots.indexOf(this);r>=0&&this.runtime.roots.splice(r,1)}this._parent=t,this.markPlayDirty(!0),t&&!t.children.includes(this)?(t.children.push(this),t.markPlayDirty(!0)):!t&&this.alive&&!this.runtime.roots.includes(this)&&this.runtime.roots.push(this)}markPlayDirty(t=!1){this._playDirty=!0,t&&(this._playDeepDirty=!0);for(let i=this._parent;i&&!i._playChildDirty;i=i._parent)i._playChildDirty=!0}get activeInHierarchy(){return this.active?this._parent?this._parent.activeInHierarchy:!0:!1}get scrollProgress(){return this._scrollProgress??0}set scrollProgress(t){if(typeof t!="number"||!Number.isFinite(t))throw new Error("scrollProgress must be a finite number");this._scrollProgress=gr(t),this.markPlayDirty()}addChild(t){return t.parent=this,t}GetChildren(){return this.children.slice()}GetChild(t){return this.children.find(i=>i.name===t)||null}FindChild(t){if(!t)return null;if(!t.includes("/"))return this.GetChild(t);let i=t.split("/").filter(Boolean),r=this;for(let n of i)if(r=r.GetChild(n),!r)return null;return r}SetActive(t){let i=!!t;if(this.active!==i){if(typeof this.runtime?.onControlActiveChanging=="function"){this.runtime.onControlActiveChanging(this,i);return}this.active=i,this.markPlayDirty(!0)}}SetVisible(t){this.visible=!!t,this.markPlayDirty(!0)}GetSiblingIndex(){if(!this._parent)return-1;let t=this._parent.children,i=t.indexOf(this);return i<0?-1:t.length-1-i}SetSiblingIndex(t){if(!this._parent)return!1;let i=this._parent.children,r=i.indexOf(this);if(r<0)return!1;let n=i.length-1;return!Number.isInteger(t)||t<0||t>n?!1:(i.splice(r,1),i.splice(n-t,0,this),this._parent.markPlayDirty(!0),this.markPlayDirty(),!0)}SetAsFirstSibling(){return this.SetSiblingIndex(0)}SetAsLastSibling(){return this._parent?this.SetSiblingIndex(this._parent.children.length-1):!1}GetAnchoredPosition(){return[this.anchoredPositionX,this.anchoredPositionY]}SetAnchoredPosition(t,i){this.anchoredPositionX=t,this.anchoredPositionY=i,this.markPlayDirty()}GetSizeDelta(){return[this.sizeDeltaX,this.sizeDeltaY]}SetSizeDelta(t,i){this.sizeDeltaX=t,this.sizeDeltaY=i,this.markPlayDirty(!0)}GetAnchorMin(){return[this.anchorMinX,this.anchorMinY]}SetAnchorMin(t,i){this.anchorMinX=t,this.anchorMinY=i,this.markPlayDirty(!0)}GetAnchorMax(){return[this.anchorMaxX,this.anchorMaxY]}SetAnchorMax(t,i){this.anchorMaxX=t,this.anchorMaxY=i,this.markPlayDirty(!0)}GetPivot(){return[this.pivotX,this.pivotY]}SetPivot(t,i){this.pivotX=t,this.pivotY=i,this.markPlayDirty(!0)}GetLocalScale(){return[this.localScaleX,this.localScaleY,this.localScaleZ]}SetLocalScale(t,i,r){this.localScaleX=t,this.localScaleY=i,this.localScaleZ=r,this.markPlayDirty()}GetLocalRotation(){return ys(this.localRotationX,this.localRotationY,this.localRotationZ)}luaFieldValue(t){if(t==="imageType")return this.imageType??"Stretch";let i=cf.indexOf(t);return i<0?this[t]:ys(this.localRotationX,this.localRotationY,this.localRotationZ)[i]}SetLocalRotation(t,i,r){this.localRotationX=t,this.localRotationY=i,this.localRotationZ=r,this.markPlayDirty()}GetScriptByPath(t){return this.scripts.find(i=>i.path===t)||null}GetScript(t){return this.scripts.find(i=>i.scriptMappingId===t)||null}GetScripts(){return this.scripts.slice()}_addListener(t,i,r){let n=t.get(i)||[];n.push(r),t.set(i,n),this.runtime.retainLuaCallback?.(r)}_removeListener(t,i,r){let n=t.get(i);if(!n)return;let o=n.filter(a=>a!==r);t.set(i,o);for(let a=o.length;a<n.length;a++)this.runtime.unrefLuaCallback?.(r)}_removeListeners(t,i){let r=t.get(i)||[];for(let n of r)this.runtime.unrefLuaCallback?.(n);t.delete(i)}_removeAllListeners(t){for(let i of t.values())for(let r of i)this.runtime.unrefLuaCallback?.(r);t.clear()}AddCursorEventListener(t,i){this._addListener(this.cursorListeners,t,i)}RemoveCursorEventListener(t,i){this._removeListener(this.cursorListeners,t,i)}RemoveCursorEventListeners(t){this._removeListeners(this.cursorListeners,t)}RemoveAllCursorEventListeners(){this._removeAllListeners(this.cursorListeners)}SimulateCursorClick(){let t=this.runtime.makeCursorEventData({x:0,y:0,pressX:0,pressY:0});this.emitCursor("CursorDown",t),this.emitCursor("CursorUp",t),this.emitCursor("CursorClick",t)}emitCursor(t,i){if(!this.runtime.cursorEventsEnabled(this))return;let r=this.cursorListeners.get(t)||[];for(let n of r)n(i)}AddKeyEventListener(t,i){this._addListener(this.keyListeners,t,i)}RemoveKeyEventListener(t,i){this._removeListener(this.keyListeners,t,i)}RemoveKeyEventListeners(t){this._removeListeners(this.keyListeners,t)}RemoveAllKeyEventListeners(){this._removeAllListeners(this.keyListeners)}emitKey(t){let i=this.keyListeners.get(t)||[];for(let r of i)if(r()===!0)return!0;return!1}AddNavigationEventListener(t,i){this._addListener(this.navListeners,t,i)}RemoveNavigationEventListener(t,i){this._removeListener(this.navListeners,t,i)}RemoveNavigationEventListeners(t){this._removeListeners(this.navListeners,t)}RemoveAllNavigationEventListeners(){this._removeAllListeners(this.navListeners)}SetControllerNavigation(t,i,r){this.navConfig.set(t,{mode:i,target:r})}GetControllerNavigation(t){let i=this.navConfig.get(t),r=i?[i.mode,i.target]:[null,null];return r.__multi=!0,r}SetImage(t,i){let r=this.imageSource?.Name||this.imageSource,n=t?.Name||t;(i!==this.imageId||r!==n)&&(this.imageType=null),this.imageSource=t,this.imageId=i,this.markPlayDirty()}SetSoftEdgeWidth(t,i){this.softEdgeWidthX=t,this.softEdgeWidthY=i,this.markPlayDirty()}SetFillUnused(){this.fillType="Unused",this.markPlayDirty()}SetFillHorizontal(t,i){this.fillType="Horizontal",this.fillHorizontalType=t,this.fillAmount=i,this.markPlayDirty()}SetFillVertical(t,i){this.fillType="Vertical",this.fillVerticalType=t,this.fillAmount=i,this.markPlayDirty()}SetFillRadial90(t,i){this.fillType="Radial90",this.fillRadial90Type=t,this.fillAmount=i,this.markPlayDirty()}SetFillRadial180(t,i){this.fillType="Radial180",this.fillRadialType=t,this.fillAmount=i,this.markPlayDirty()}SetFillRadial360(t,i){this.fillType="Radial360",this.fillRadialType=t,this.fillAmount=i,this.markPlayDirty()}PlayAnimation(){}StopAnimation(){}RefreshItems(t,i){if(!Number.isInteger(t)||t<0||t>2e3)throw new Error("RefreshItems: simulator supports 0..2000 items");if(typeof i!="function")throw new Error("RefreshItems: callback must be a function");if(!this.alive||this._refreshingGrid)throw new Error("RefreshItems: destroyed control or recursive refresh");if(t&&!this.runtime.templates.has(Number(this.itemPrefabIndex)))throw new Error("RefreshItems: item template not found");if(t&&["OnInit","OnDestroy"].includes(this.runtime.lifecyclePhase))throw new Error("RefreshItems: items cannot be created during OnInit/OnDestroy");this._refreshingGrid=!0;try{this._gridItems||=[];let r=[];for(let n of this._gridItems)n.alive&&n.parent===this&&n.prefabIndex===Number(this.itemPrefabIndex)&&r.length<t?r.push(n):n.alive&&n.parent===this&&this.runtime.destroyControl(n);for(this._gridItems=r;r.length<t;){let n=this.runtime.instantiate(this.itemPrefabIndex,this,this.runtime.lifecyclePhase);if(!n)throw new Error("RefreshItems: could not instantiate item");r.push(n),n.SetActive(!0)}this.itemCount=t,Kt(this),this.markPlayDirty(!0);for(let n=0;n<r.length&&this.alive;n+=1)i(r[n],n)}finally{this._refreshingGrid=!1}}GetItemIndex(t){return t?.alive&&t.parent===this?this._gridItems?.indexOf(t)??-1:-1}GetItemSize(){return[this.cellSizeX,this.cellSizeY]}GetItemSpacing(){return[this.spacingX,this.spacingY]}GetPadding(){return[this.padding1Y,this.padding2Y,this.padding1X,this.padding2X]}ScrollToItemAt(t,i){if(!Number.isInteger(t)||t<0||t>=this.itemCount)throw new Error("ScrollToItemAt: item index out of range");let r=Ei(this),n=r.horizontal?r.cellW:r.cellH,o=r.horizontal?r.gapX:r.gapY,a=(r.horizontal?r.left:r.top)+Math.floor(t/r.lanes)*(n+o),s=i?.Name||i;if(!["Top","Center","Bottom"].includes(s))throw new Error("ScrollToItemAt: invalid alignment");let c=a-(s==="Center"?(r.viewport-n)/2:s==="Bottom"?r.viewport-n:0);this.scrollProgress=r.max?gr(c/r.max):0,Kt(this),this.markPlayDirty(!0)}GetContentLength(){return Ei(this).length}};function Be(e,t){t(e);for(let i of e.children)Be(i,t)}function jn(e,t=[],i=""){t.push(`${i}${e.name||"(unnamed)"} [${e.typeofName}] Id=${e.Id}`);for(let r of e.children)jn(r,t,i+" ");return t}function br(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}var vs={Linear:e=>e,InSine:e=>1-Math.cos(e*Math.PI/2),OutSine:e=>Math.sin(e*Math.PI/2),InOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,InQuad:e=>e*e,OutQuad:e=>1-(1-e)*(1-e),InOutQuad:e=>e<.5?2*e*e:1-(-2*e+2)**2/2,InCubic:e=>e*e*e,OutCubic:e=>1-(1-e)**3,InOutCubic:e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2,InQuart:e=>e**4,OutQuart:e=>1-(1-e)**4,InOutQuart:e=>e<.5?8*e**4:1-(-2*e+2)**4/2,InQuint:e=>e**5,OutQuint:e=>1-(1-e)**5,InOutQuint:e=>e<.5?16*e**5:1-(-2*e+2)**5/2,InExpo:e=>e===0?0:2**(10*e-10),OutExpo:e=>e===1?1:1-2**(-10*e),InOutExpo:e=>e===0||e===1?e:e<.5?2**(20*e-10)/2:(2-2**(-20*e+10))/2,InCirc:e=>1-Math.sqrt(1-e**2),OutCirc:e=>Math.sqrt(1-(e-1)**2),InOutCirc:e=>e<.5?(1-Math.sqrt(1-(2*e)**2))/2:(Math.sqrt(1-(-2*e+2)**2)+1)/2,InBack:e=>(1.70158+1)*e*e*e-1.70158*e*e,OutBack:e=>1+2.70158*(e-1)**3+1.70158*(e-1)**2,InOutBack:e=>{let i=2.5949095;return e<.5?(2*e)**2*((i+1)*2*e-i)/2:((2*e-2)**2*((i+1)*(e*2-2)+i)+2)/2},InElastic:e=>e===0||e===1?e:-(2**(10*e-10))*Math.sin((e*10-10.75)*(2*Math.PI/3)),OutElastic:e=>e===0||e===1?e:2**(-10*e)*Math.sin((e*10-.75)*(2*Math.PI/3))+1,InOutElastic:e=>{if(e===0||e===1)return e;let t=2*Math.PI/4.5;return e<.5?-(2**(20*e-10)*Math.sin((20*e-11.125)*t))/2:2**(-20*e+10)*Math.sin((20*e-11.125)*t)/2+1},InBounce:e=>1-br(1-e),OutBounce:br,InOutBounce:e=>e<.5?(1-br(1-2*e))/2:(1+br(2*e-1))/2};function ws(e,t){let i=vs[e]||vs.Linear;return t<=0?0:t>=1?1:i(t)}function Jt(e,t,i,r=255){let n=vr(e),o=vr(t),a=vr(i);return((r==null?255:vr(r))<<24|n<<16|o<<8|a)>>>0}function Ai(e){let t=e>>>0;return[t>>>16&255,t>>>8&255,t&255,t>>>24&255]}function vr(e){let t=Number(e);return Number.isFinite(t)?Math.max(0,Math.min(255,Math.trunc(t))):0}function Ss(e,t,i){let r=Ai(e),n=Ai(t);return Jt(r[0]+(n[0]-r[0])*i,r[1]+(n[1]-r[1])*i,r[2]+(n[2]-r[2])*i,r[3]+(n[3]-r[3])*i)}var ff=new Set(["fontColor","bgColor","outlineColor","imageColor"]),df=new Set(["fontSize","minimumFontSize"]),Un=1e-9;function hf(e,t){return typeof e?.luaFieldValue=="function"?e.luaFieldValue(t):e[t]}var _i=class{constructor(t,i,r,n){this.runtime=t,this.object=i,this.data={...r},this.duration=Math.max(0,Number(n)||0),this.easeName="Linear",this.relative=!1,this.playing=!1,this.paused=!1,this.elapsed=0,this.loops=1,this.loopIndex=0,this.from={},this.to={},this.initialFrom=null,this.initialTo=null,this.onComplete=null,this.onStepComplete=null,this.killed=!1,this.dead=!1,this.completed=!1}capture(){this.from={},this.to={};for(let[t,i]of Object.entries(this.data)){let r=hf(this.object,t);this.from[t]=r,this.to[t]=this.relative?Number(r)+Number(i):i}}restoreInitial(){this.from={...this.initialFrom},this.to={...this.initialTo}}SetEase(t){return this.easeName=typeof t=="string"?t:t?.Name||"Linear",this}SetRelative(t){return this.relative=!!t,this}Play(){return this.dead?this:this.playing?(this.paused=!1,this):this._start(!1)}_begin(t){this.playing=!0,this.paused=!1,this.elapsed=0,this.loopIndex=0,this.killed=!1,this.completed=!1,t&&this.initialFrom?this.restoreInitial():(this.capture(),this.initialFrom={...this.from},this.initialTo={...this.to})}_start(t){return this._begin(t),this.runtime.tweens.add(this),this.runtime.animations.add(this),this}get loopCount(){return this.loops>0?this.loops:1}Pause(){this.paused=!0}Resume(){this.paused=!1}Restart(){return this.dead?this:this._start(!0)}Complete(){this.dead||this.completed||(this.initialFrom||this._begin(!1),this.apply(1),this.finish(!0))}Kill(t){t?this.Complete():this.finish(!1),this.dead=!0}SetOnComplete(t){return this.onComplete=t,this}SetOnStepComplete(t){return this.onStepComplete=t,this}SetLoops(t){return this.loops=t,this}apply(t){if(this.object?.alive===!1)return;let i=ws(this.easeName,t),r=!1,n=!1;for(let o of Object.keys(this.to)){let a=this.from[o],s=this.to[o];if(ff.has(o)&&typeof a=="number"&&typeof s=="number")this.object[o]=Ss(a,s,i);else if(typeof a=="number"&&typeof s=="number"){let c=a+(s-a)*i;this.object[o]=df.has(o)?Math.trunc(c):c}else this.object[o]=i>=1?s:a;r=!0,yr.has(o)&&(n=!0)}r&&typeof this.object?.markPlayDirty=="function"&&this.object.markPlayDirty(n)}_advance(t,i){this.elapsed+=t;let r=this.duration<=0?1:Math.min(1,this.elapsed/this.duration);return this.apply(r),r<1?!1:i>=0&&this.loopIndex+1>=i?!0:(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.loopIndex++,this.elapsed=0,this.restoreInitial(),!1)}step(t){!this.playing||this.paused||this.killed||this._advance(t,this.loops<0?-1:this.loopCount)&&(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.finish(!0))}finish(t){this.playing=!1,this.killed=!0,t&&(this.completed=!0),this.runtime.tweens.delete(this),this.runtime.animations.delete(this),t&&this.onComplete&&this.runtime.safeCall(this.onComplete)}},Qt=class{constructor(t){this.runtime=t,this.steps=[],this.playing=!1,this.paused=!1,this.killed=!1,this.dead=!1,this.completed=!1,this.elapsed=0,this.loops=1,this.loopIndex=0,this.onComplete=null,this.onStepComplete=null,this._entries=null}Append(t){return this.steps.push({kind:"tween",tween:t,parallel:!1}),this}AppendInterval(t){return this.steps.push({kind:"interval",duration:t}),this}AppendCallback(t){return this.steps.push({kind:"callback",fn:t}),this}Join(t){return this.steps.push({kind:"tween",tween:t,parallel:!0}),this}Insert(t,i){return this.steps.push({kind:"insert",time:t,tween:i}),this}InsertCallback(t,i){return this.steps.push({kind:"insertCb",time:t,fn:i}),this}Play(){return this.dead?this:this.playing?(this.paused=!1,this):this._play()}_play(){return this.playing=!0,this.paused=!1,this.killed=!1,this.completed=!1,this.elapsed=0,this.loopIndex=0,this._schedule(),this.runtime.sequences.add(this),this.runtime.animations.add(this),this}_schedule(){let t=0,i=0,r=!1,n=[],o=a=>a.duration*a.loopCount;for(let a of this.steps)if(a.kind==="tween"&&a.parallel){let s=r?i:t;n.push({at:s,tween:a.tween}),t=Math.max(t,s+o(a.tween))}else a.kind==="tween"?(n.push({at:t,tween:a.tween}),i=t,r=!0,t+=o(a.tween)):a.kind==="interval"?(i=t,r=!0,t+=a.duration):a.kind==="callback"?n.push({at:t,fn:a.fn}):a.kind==="insert"?(n.push({at:a.time,tween:a.tween}),t=Math.max(t,a.time+o(a.tween))):a.kind==="insertCb"&&(n.push({at:a.time,fn:a.fn}),t=Math.max(t,a.time));this._entries=n.map((a,s)=>({...a,index:s,end:a.tween?a.at+o(a.tween):a.at})),this._end=t,this._resetEntries()}_resetEntries(){for(let t of this._entries)t.started=!1,t.done=!1}_startChild(t){t.started=!0,t.tween._begin(!!t.tween.initialFrom)}_finishChild(t){t.done=!0,t.tween.apply(1),t.tween.onStepComplete&&this.runtime.safeCall(t.tween.onStepComplete),t.tween.finish(!0)}_advanceTo(t,i){let r=this._entries,n=[];for(let a of r)!a.started&&a.at<=t+Un&&n.push({at:a.at,rank:a.fn?1:2,entry:a}),a.tween&&!a.done&&a.end<=t+Un&&n.push({at:a.end,rank:0,entry:a});n.sort((a,s)=>a.at-s.at||a.rank-s.rank||a.entry.index-s.entry.index);let o=new Set;for(let{rank:a,entry:s}of n)if(a===1){if(s.started=!0,this.runtime.safeCall(s.fn),!this.playing||this.killed||this._entries!==r)return!1}else s.started||(this._startChild(s),o.add(s)),a===0&&!s.done&&this._finishChild(s);for(let a of r)!a.tween||!a.started||a.done||(o.has(a)?a.tween._advance(t-a.at,a.tween.loopCount):a.tween._advance(i,a.tween.loopCount));return!0}step(t){!this.playing||this.paused||this.killed||(this.elapsed+=t,this._advanceTo(this.elapsed,t)&&(this.elapsed+Un<this._end||(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.loopIndex++,this.loops<0||this.loopIndex<this.loops?(this.elapsed=0,this._resetEntries()):this.finish(!0))))}Pause(){this.paused=!0}Resume(){this.paused=!1}Restart(){this.dead||this._play()}Complete(){this.dead||this.completed||(this._entries||this._schedule(),this.playing=!0,this.killed=!1,this._advanceTo(1/0,0)&&(this.onStepComplete&&this.runtime.safeCall(this.onStepComplete),this.finish(!0)))}Kill(t){t?this.Complete():this.finish(!1),this.dead=!0}SetOnComplete(t){return this.onComplete=t,this}SetOnStepComplete(t){return this.onStepComplete=t,this}SetLoops(t){return this.loops=t,this}finish(t){this.playing=!1,this.killed=!0,t&&(this.completed=!0),this.runtime.sequences.delete(this),this.runtime.animations.delete(this),t&&this.onComplete&&this.runtime.safeCall(this.onComplete)}};var wr={EaseType:["Linear","InSine","OutSine","InOutSine","InQuad","OutQuad","InOutQuad","InCubic","OutCubic","InOutCubic","InQuart","OutQuart","InOutQuart","InQuint","OutQuint","InOutQuint","InExpo","OutExpo","InOutExpo","InCirc","OutCirc","InOutCirc","InBack","OutBack","InOutBack","InElastic","OutElastic","InOutElastic","InBounce","OutBounce","InOutBounce"],CustomVariableEntityType:["Level","PlayerSelf","AvatarSelf"],Device:["KeyboardAndMouse","Mobile","Controller","MobileController"],StageMode:["Beyond","Classic"],LanguageType:["LanguageNone","LanguageEng","LanguageChs","LanguageCht","LanguageFra","LanguageDeu","LanguageSpa","LanguagePor","LanguageRus","LanguageJpn","LanguageKor","LanguageTha","LanguageVie","LanguageInd","LanguageTur","LanguageIta"],ParamType:["Entity","EntityList","Int","IntList","Bool","BoolList","Float","FloatList","String","StringList","Vector3","Vector3List","Guid","GuidList","ConfigId","PrefabId","ConfigIdList","PrefabIdList"],CursorEventType:["CursorDown","CursorUp","CursorEnter","CursorExit","CursorDrag","CursorBeginDrag","CursorEndDrag","CursorClick"],ScrollDirection:["Horizontal","Vertical"],ScrollLayoutConstraint:["AutoWrap","Fixed"],ScrollAlignType:["Bottom","Center","Top"],ControllerNavigationDir:["Up","Down","Left","Right"],ControllerNavigationEventType:["Confirm","Cancel","Focus","LostFocus","RightStickUp","RightStickDown","RightStickRight","RightStickLeft","LeftStickUp","LeftStickDown","LeftStickRight","LeftStickLeft"],ControllerNavigationMode:["None","NearestControl","Specified"],TextHorizontalAlignment:["Left","Middle","Right"],TextVerticalAlignment:["Top","Middle","Bottom"],ImageType:["Basic","Stretch"],ImageSource:["StaticReference","Item","Equipment","Skill","UnitStatus","Faction","Currency","Prefab"],ImageFillType:["Unused","Horizontal","Vertical","Radial90","Radial180","Radial360"],ImageFillHorizontalType:["Left","Right"],ImageFillVerticalType:["Bottom","Top"],ImageFillRadial90Type:["BottomLeft","TopLeft","TopRight","BottomRight"],ImageFillRadialType:["Bottom","Left","Top","Right"],ImageMaskSoftEdgeMode:["Percentage","Pixel"],UIAnimationLayer:["AboveAllControls","BelowAllControls"]},pf=[...Array.from({length:43},(e,t)=>`CraftspersonKey${t+1}`),"MoveForwardKey","MoveBackwardKey","MoveLeftKey","MoveRightKey","SwitchToWalkOrRunKey","SprintKey","JumpKey","DropKey","OpenShortcutWheelKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key","None"],mf=[...Array.from({length:14},(e,t)=>`CraftspersonKey${t+1}`),"SprintKey","JumpKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key","MenuConfirmKey","MenuBackKey","None"];function gf(){let e=[];for(let t of["Down","Up"]){for(let i=1;i<=43;i++)e.push(`KeyboardCraftspersonKey${i}${t}`);for(let i of["MoveForwardKey","MoveBackwardKey","MoveLeftKey","MoveRightKey","SwitchToWalkOrRunKey","SprintKey","JumpKey","DropKey","OpenShortcutWheelKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key"])e.push(`Keyboard${i}${t}`);for(let i=1;i<=14;i++)e.push(`ControllerCraftspersonKey${i}${t}`);for(let i of["SprintKey","JumpKey","InteractKey","NormalAttackKey","CharacterSkill1Key","CharacterSkill2Key","CharacterSkill3Key","CharacterSkill4Key","MenuConfirmKey","MenuBackKey"])e.push(`Controller${i}${t}`)}return e}wr.KeyboardKeyCode=pf;wr.ControllerKeyCode=mf;wr.KeyEventType=gf();var xs=new Map;function kt(e,t){let i=`${e}\0${t}`,r=xs.get(i);return r||(r={__kind:"EnumItem",Name:t,FullName:`Enum.${e}.${t}`,EnumType:e},xs.set(i,r)),r}function Xn(e,t){return t==null?t:t.__kind==="EnumItem"?kt(t.EnumType||e,t.Name):typeof t=="string"&&t?kt(e,t):t}function Wn(){let e={};for(let[t,i]of Object.entries(wr)){let r={};for(let n of i)r[n]=kt(t,n);e[t]=r}return e}var yf=new Set(["Id","prefabIndex","imageId","fontSize","minimumFontSize","clickAudioId","itemCount","itemPrefabIndex","animationId","referencedPrefabIndex"]),bf=new Set(["imageColor","fontColor","bgColor","outlineColor"]),Is={horizontalAlignment:"TextHorizontalAlignment",verticalAlignment:"TextVerticalAlignment",imageSource:"ImageSource",imageType:"ImageType",fillType:"ImageFillType",fillHorizontalType:"ImageFillHorizontalType",fillVerticalType:"ImageFillVerticalType",fillRadial90Type:"ImageFillRadial90Type",fillRadialType:"ImageFillRadialType",softEdgeMode:"ImageMaskSoftEdgeMode",layer:"UIAnimationLayer",scrollDirection:"ScrollDirection",layoutConstraint:"ScrollLayoutConstraint"},Et=d.LUA_REGISTRYINDEX,Cs=d.LUA_MULTRET,vf=Object.freeze({InstantiateClientUIControl:2,DestroyClientUIControl:1,GetClientUIControl:1,FindClientUIRoot:1,GetClientUIRoots:0,GetUICanvasSize:0,GetCursorUIPos:0,GetDevice:0,SetControllerFocus:1,GetControllerFocus:0,GetControllerLeftStickAxis:0,GetControllerRightStickAxis:0,Tween:3,TweenSequence:0,ServerSignal:1,GetGlobalCustomVariableValue:2,PauseLevelTime:1,IsLevelTimePaused:0,PlayAudio2D:1,StopAudio:1,IsAudioAlive:1,GetLanguageType:0,GetStageMode:0,IsTestPlay:0,GetText:1,PrintClientUITree:0});function Se(e){return e==null?"":typeof e=="string"?e:e.Name||e.FullName||String(e)}var Sr=class{constructor(t={}){this.canvasWidth=t.canvasWidth??1600,this.canvasHeight=t.canvasHeight??900,this.device=t.device??"KeyboardAndMouse",this.language=t.language??"LanguageChs",this.stageMode=t.stageMode??"Classic",this.testPlay=t.testPlay!==!1,this.canSelectImageType=t.canSelectImageType||(()=>!1),this.clock={time:0,levelTime:0,paused:!1,frame:0},this.logs=[],this.mountErrors=[],this.tweens=new Set,this.sequences=new Set,this.animations=new Set,this.audios=new Map,this.nextAudioId=1,this.audioDuration=t.audioDuration||(()=>null),this.audioHistory=[],this.audioWarnings=new Set,this.audioRevision=0,this._nextControlId=1,this._playRemoved=[],this._nextScriptMappingId=1,this.lifecyclePhase="idle",this.controlsById=new Map,this.roots=[],this.templates=new Map,this.scriptFiles=new Map,this.requireAliases=new Map,this.requireCache=new Map,this.moduleBaseEnvironments=new Map,this.luaFunctions=new Map,this.mountedScripts=[],this.serverVars={Level:Object.create(null),PlayerSelf:Object.create(null),AvatarSelf:Object.create(null)},this.serverBridge=null,this.varHandlers=[],this.signalHandlers=[],this.cursor={x:0,y:0},this.focus=null,this.stick={left:[0,0],right:[0,0]},this.enumTree=Wn(),this.luaStates=new Set,this.L=null}nextControlId(){let t=this._nextControlId;return this._nextControlId+=1,t}resolveScriptMappingId(t){let i=Number(t);if(Number.isSafeInteger(i)&&i>0)return this._nextScriptMappingId=Math.max(this._nextScriptMappingId,i+1),i;let r=this._nextScriptMappingId;return this._nextScriptMappingId+=1,r}pushPackedColor(t,i){let r=i>>>0;(r|0)===r?d.lua_pushinteger(t,r):d.lua_pushnumber(t,r)}retainLuaCallback(t){cs(t)}unrefLuaCallback(t){us(this,t)}log(t,...i){let r=i.map(n=>n==null?"nil":typeof n=="object"&&n!==null&&n.__kind==="EnumItem"?n.Name:String(n)).join(" ");this.logs.push({level:t,text:r,time:this.clock.time})}safeCall(t,...i){try{return t(...i)}catch(r){this.log("lua-error",r&&r.message?r.message:String(r))}}scriptCanRun(t){if(!t?.alive||!t.enabled)return!1;let i=t.object;return!i||i.alive&&i.activeInHierarchy}cursorEventsEnabled(t){for(let i=t;i;i=i.parent)if(i.kind==="container"&&i.showCursor===!0)return!0;return!1}registerTemplate(t,i){this.templates.set(Number(t),i)}registerScriptFile(t,i){let r=this.normalizeRequirePath(t);this.scriptFiles.set(r,i),r.startsWith("default_import_file/")||this.requireAliases.set(`default_import_file/${r}`,r)}normalizeRequirePath(t){let i=String(t).replace(/\\/g,"/");return i.endsWith(".lua")&&(i=i.slice(0,-4)),i=i.replace(/\./g,"/"),i}addRoot(t){let i=t instanceof ft?t:new ft(this,t);return this.roots.push(i),Be(i,r=>this.controlsById.set(r.Id,r)),this.mountSpecScripts(t,i),i}mountSpecScripts(t,i){if(t instanceof ft)return;let r=o=>(o.scripts?.length||0)>0||(o.children||[]).some(r);if(!t||!r(t))return;let n=this.lifecyclePhase;try{let o=(a,s)=>{for(let l of a.scripts||[])try{this.mountScript({path:l.path,source:l.source,control:s,scriptMappingId:l.scriptMappingId})}catch(u){let f=u&&u.message?u.message:String(u);this.mountErrors.push(f),this.log("lua-error",f)}let c=a.children||[];for(let l=0;l<c.length;l+=1)o(c[l],s?.children?.[l])};o(t,i)}finally{this.lifecyclePhase=n}}makeCursorEventData({x:t=0,y:i=0,pressX:r=t,pressY:n=i,deltaX:o=t-r,deltaY:a=i-n,dragging:s=!1,touchId:c=-1}={}){let l=this;return{__kind:"CursorEventData",typeofName:"CursorEventData",dragging:s,touchId:c,x:t,y:i,pressX:r,pressY:n,GetUIPos(){return[t,i]},GetPressUIPos(){return[r,n]},GetUIPosDelta(){return[o,a]}}}boot(){let t=this.newLuaThread();this.L=t}installGlobals(t){let i=this;d.lua_pushcfunction(t,r=>{let n=d.lua_gettop(r),o=[];for(let a=1;a<=n;a++)o.push(me(r,i,a));return i.log("info",...o),0}),d.lua_setglobal(t,N("print")),d.lua_pushcfunction(t,r=>{let n=d.lua_gettop(r),o=[];for(let a=1;a<=n;a++)o.push(me(r,i,a));return i.log("error",...o),0}),d.lua_setglobal(t,N("printerr")),d.lua_pushcfunction(t,r=>{if(d.lua_type(r,1)===d.LUA_TTABLE&&!Ze(r,1))return d.lua_pushstring(r,N("table")),1;let n=me(r,i,1);return d.lua_pushstring(r,N(i.typeofOf(n))),1}),d.lua_setglobal(t,N("typeof")),this.pushColorLib(t),this.pushEnumLib(t),this.pushGameLib(t),d.lua_pushcfunction(t,r=>i.luaRequire(r)),d.lua_setglobal(t,N("require"))}typeofOf(t){return t==null?"nil":t.__kind==="Script"?"Script":t.__kind==="EnumItem"?"EnumItem":t.__kind==="CursorEventData"?"CursorEventData":t.__kind==="ServerSignal"?"ServerSignal":t instanceof Qt?"TweenSequence":t instanceof _i?"Tween":t.typeofName?t.typeofName:typeof t=="number"?"number":typeof t=="string"?"string":typeof t=="boolean"?"boolean":typeof t}pushColorLib(t){d.lua_newtable(t),d.lua_pushcfunction(t,i=>(this.pushPackedColor(i,Jt(d.lua_tonumber(i,1),d.lua_tonumber(i,2),d.lua_tonumber(i,3),255)),1)),d.lua_setfield(t,-2,N("FromRGB")),d.lua_pushcfunction(t,i=>{let r=d.lua_isnoneornil(i,4)?255:d.lua_tonumber(i,4);return this.pushPackedColor(i,Jt(d.lua_tonumber(i,1),d.lua_tonumber(i,2),d.lua_tonumber(i,3),r)),1}),d.lua_setfield(t,-2,N("FromRGBA")),d.lua_pushcfunction(t,i=>{let r=d.lua_tonumber(i,1)>>>0;for(let n of Ai(r))d.lua_pushinteger(i,n);return 4}),d.lua_setfield(t,-2,N("ToRGBA")),d.lua_newtable(t),d.lua_pushcfunction(t,i=>{let r=d.lua_tonumber(i,2),n=d.lua_tonumber(i,3),o=d.lua_tonumber(i,4),a=d.lua_isnoneornil(i,5)?255:d.lua_tonumber(i,5);return this.pushPackedColor(i,Jt(r,n,o,a)),1}),d.lua_setfield(t,-2,N("__call")),d.lua_setmetatable(t,-2),d.lua_setglobal(t,N("Color"))}pushEnumLib(t){d.lua_newtable(t);for(let[i,r]of Object.entries(this.enumTree)){d.lua_newtable(t);for(let[n,o]of Object.entries(r))this.pushEnumItem(t,o),d.lua_setfield(t,-2,N(n));d.lua_setfield(t,-2,N(i))}d.lua_setglobal(t,N("Enum"))}pushEnumItem(t,i){let r=d.lua_newuserdata(t,0);Ct(r,i),Q.luaL_setmetatable(t,N("EnumItem"))}pushControl(t,i){let r=d.lua_newuserdata(t,0);Ct(r,i),Q.luaL_setmetatable(t,N("Control"))}pushScript(t,i){d.lua_newtable(t),d.lua_pushlightuserdata(t,Bn);let r=d.lua_newuserdata(t,0);Ct(r,i),d.lua_rawset(t,-3),Q.luaL_getmetatable(t,N("Script")),d.lua_setmetatable(t,-2)}pushTween(t,i){let r=d.lua_newuserdata(t,0);Ct(r,i);let n=i instanceof Qt?"TweenSequence":"Tween";Q.luaL_setmetatable(t,N(n))}pushSignal(t,i){let r=d.lua_newuserdata(t,0);Ct(r,i),Q.luaL_setmetatable(t,N("ServerSignal"))}pushCursor(t,i){let r=d.lua_newuserdata(t,0);Ct(r,i),Q.luaL_setmetatable(t,N("CursorEventData"))}pushGameLib(t){let i=this;d.lua_newtable(t);let r={InstantiateClientUIControl:n=>{let o=d.lua_tointeger(n,1),a=Ee(d.lua_touserdata(n,2)),s=i.instantiate(o,a,i.lifecyclePhase);return s?(i.pushControl(n,s),1):(d.lua_pushnil(n),1)},DestroyClientUIControl:n=>{let o=Ee(d.lua_touserdata(n,1));return o&&i.destroyControl(o),0},GetClientUIControl:n=>{let o=d.lua_tointeger(n,1),a=i.controlsById.get(o);return a?i.pushControl(n,a):d.lua_pushnil(n),1},FindClientUIRoot:n=>{let o=Z(n,1),a=i.roots.find(s=>s.name===o);return a?i.pushControl(n,a):d.lua_pushnil(n),1},GetClientUIRoots:n=>(d.lua_createtable(n,i.roots.length,0),i.roots.forEach((o,a)=>{i.pushControl(n,o),d.lua_rawseti(n,-2,a+1)}),1),GetUICanvasSize:n=>(d.lua_pushnumber(n,i.canvasWidth),d.lua_pushnumber(n,i.canvasHeight),2),GetCursorUIPos:n=>(d.lua_pushnumber(n,i.cursor.x),d.lua_pushnumber(n,i.cursor.y),2),GetDevice:n=>(i.pushEnumItem(n,kt("Device",i.device)),1),SetControllerFocus:n=>(i.focus=Ee(d.lua_touserdata(n,1)),0),GetControllerFocus:n=>(i.focus?i.pushControl(n,i.focus):d.lua_pushnil(n),1),GetControllerLeftStickAxis:n=>(d.lua_pushnumber(n,i.stick.left[0]),d.lua_pushnumber(n,i.stick.left[1]),2),GetControllerRightStickAxis:n=>(d.lua_pushnumber(n,i.stick.right[0]),d.lua_pushnumber(n,i.stick.right[1]),2),Tween:n=>{let o=Ee(d.lua_touserdata(n,1))||me(n,i,1),a=me(n,i,2)||{},s=d.lua_tonumber(n,3),c=new _i(i,o,a,s);return i.pushTween(n,c),1},TweenSequence:n=>(i.pushTween(n,new Qt(i)),1),ServerSignal:n=>{let o=Z(n,1);return i.pushSignal(n,i.makeServerSignal(o)),1},GetGlobalCustomVariableValue:n=>{let o=Se(me(n,i,1)),a=Z(n,2);return le(n,i,i.getVar(o,a)),1},PauseLevelTime:n=>(i.clock.paused=!!d.lua_toboolean(n,1),0),IsLevelTimePaused:n=>(d.lua_pushboolean(n,i.clock.paused),1),PlayAudio2D:n=>{let o=i.playAudio(i.audioInteger(n));return d.lua_pushinteger(n,o),1},StopAudio:n=>(i.stopAudio(i.audioInteger(n)),0),IsAudioAlive:n=>{let o=i.audios.get(i.audioInteger(n));return d.lua_pushboolean(n,!!(o&&o.alive)),1},GetLanguageType:n=>(i.pushEnumItem(n,kt("LanguageType",i.language)),1),GetStageMode:n=>(i.pushEnumItem(n,kt("StageMode",i.stageMode)),1),IsTestPlay:n=>(d.lua_pushboolean(n,i.testPlay),1),GetText:n=>{let o=Z(n,1);return d.lua_pushstring(n,N(o)),1},PrintClientUITree:n=>{for(let o of i.roots)i.log("info",jn(o).join(`
|
|
115
|
+
`));return 0}};for(let[n,o]of Object.entries(r)){let a=vf[n];if(a===void 0)throw new Error(`missing game arity for ${n}`);d.lua_pushcfunction(t,s=>{let c=d.lua_gettop(s);return c!==a?Q.luaL_error(s,N(`bad argument count to '${n}' (${a} expected, got ${c})`)):o(s)}),d.lua_setfield(t,-2,N(n))}d.lua_setglobal(t,N("game"))}makeServerSignal(t){let i=[],r=this;return{__kind:"ServerSignal",name:t,AddParam(n,o){i.push({type:Se(n),value:o})},AddInt(n){i.push({type:"Int",value:n})},AddIntList(n){i.push({type:"IntList",value:n})},AddFloat(n){i.push({type:"Float",value:n})},AddFloatList(n){i.push({type:"FloatList",value:n})},AddString(n){i.push({type:"String",value:n})},AddStringList(n){i.push({type:"StringList",value:n})},AddVector3(n){i.push({type:"Vector3",value:n})},AddVector3List(n){i.push({type:"Vector3List",value:n})},AddBool(n){i.push({type:"Bool",value:n})},AddBoolList(n){i.push({type:"BoolList",value:n})},AddGuid(n){i.push({type:"Guid",value:n})},AddGuidList(n){i.push({type:"GuidList",value:n})},AddEntity(n){i.push({type:"Entity",value:n})},AddEntityList(n){i.push({type:"EntityList",value:n})},AddPrefabId(n){i.push({type:"PrefabId",value:n})},AddPrefabIdList(n){i.push({type:"PrefabIdList",value:n})},AddConfigId(n){i.push({type:"ConfigId",value:n})},AddConfigIdList(n){i.push({type:"ConfigIdList",value:n})},SendSignal(){let n=i.slice();r.serverBridge&&typeof r.serverBridge.receiveFromClient=="function"&&r.serverBridge.receiveFromClient(t,n)}}}audioInteger(t){let i=d.lua_tonumber(t,1);return d.lua_type(t,1)!==d.LUA_TNUMBER||!Number.isSafeInteger(i)?Q.luaL_error(t,N("audio argument must be an integer")):i}playAudio(t){this.audioRevision++;let i=this.nextAudioId++,r=this.audioDuration(t),n=Number.isFinite(r)&&r>0,o={instanceId:i,audioId:t,startedAt:this.clock.time,duration:n?r:0,alive:n,stopped:!1};return this.audioHistory.push(o),this.audioHistory.length>128&&this.audioHistory.shift(),n?(this.audios.size>=128&&this.stopAudio(this.audios.keys().next().value),this.audios.set(i,o)):this.audioWarnings.has(t)||(this.audioWarnings.size>=128&&this.audioWarnings.delete(this.audioWarnings.values().next().value),this.audioWarnings.add(t),this.log("warn",`\u97F3\u6548 ${t} \u672A\u5217\u5165\u6A21\u62DF\u5668\u97F3\u9891\u767D\u540D\u5355`)),i}stopAudio(t){let i=this.audios.get(t)||this.audioHistory.find(r=>r.instanceId===t);i&&!i.stopped&&(i.alive=!1,i.stopped=!0,this.audioRevision++),this.audios.delete(t)}audioSnapshot(){return{sequence:this.nextAudioId-1,revision:this.audioRevision,active:[...this.audios.values()].map(t=>({...t})),recent:this.audioHistory.map(t=>({...t}))}}instantiate(t,i,r){if(r==="OnInit"||r==="OnDestroy")return null;let n=this.templates.get(Number(t));if(!n||!i)return null;let o=new ft(this,{...n,Id:this.nextControlId(),authoringId:null,prefabIndex:Number(t)});return i.addChild(o),o.SetAsLastSibling(),Be(o,a=>this.controlsById.set(a.Id,a)),this.mountSpecScripts(n,o),o}destroyControl(t){if(!(!t||!t.alive)){if(t._destroying)throw new Error(`\u5BA2\u6237\u7AEF\u63A7\u4EF6\u751F\u547D\u5468\u671F\u5904\u4E8E\u521B\u5EFA\u6216\u9500\u6BC1\u65F6\uFF0C\u65E0\u6CD5\u8C03\u7528DestroyClientUIControl, ID:${t.name}`);Be(t,i=>{i._destroying=!0}),this._destroyControlTree(t)}}_destroyControlTree(t){this.releaseControlListeners(t);for(let i of t.scripts.slice())this.unmountScript(i);for(let i of t.children.slice())this._destroyControlTree(i);if(t.alive=!1,this.scrollControls?.delete(t),this._playRemoved.push(t.Id),t.parent){let i=t.parent,r=i.children.indexOf(t);r>=0&&i.children.splice(r,1),t._parent=null,i.markPlayDirty(!0)}else{let i=this.roots.indexOf(t);i>=0&&this.roots.splice(i,1)}this.controlsById.delete(t.Id),this.focus===t&&(this.focus=null);for(let i of[...this.tweens])i.object===t&&i.Kill(!1)}releaseControlListeners(t){for(let i of t.cursorListeners.values())for(let r of i)this.unrefLuaCallback(r);for(let i of t.keyListeners.values())for(let r of i)this.unrefLuaCallback(r);for(let i of t.navListeners.values())for(let r of i)this.unrefLuaCallback(r);t.cursorListeners.clear(),t.keyListeners.clear(),t.navListeners.clear(),t.navConfig.clear()}onControlActiveChanging(t,i){let r=[];Be(t,n=>r.push({control:n,was:n.activeInHierarchy})),t.active=!!i,t.markPlayDirty(!0);for(let n of r){let o=n.control.activeInHierarchy;if(n.was!==o)for(let a of n.control.scripts.slice())o?this.enableScript(a):this.disableScript(a)}}bindScriptEnv(t){let i=t.env;return i?(this.pushScript(i,t),d.lua_setglobal(i,N("script")),i):null}disableScript(t){if(!t?.alive||!t.env||t.lifecyclePhase!=="running")return;let i=this.lifecyclePhase;this.lifecyclePhase="OnDisable",t.lifecyclePhase="OnDisable",this.bindScriptEnv(t),this.callGlobal(t.env,"OnDisable"),t.lifecyclePhase="disabled",this.lifecyclePhase=i}enableScript(t){if(!t?.alive||!t.env||t.lifecyclePhase!=="disabled")return;let i=this.lifecyclePhase;this.lifecyclePhase="OnEnable",t.lifecyclePhase="OnEnable",this.bindScriptEnv(t),this.callGlobal(t.env,"OnEnable"),t.lifecyclePhase="running",this.lifecyclePhase=i}unmountScript(t){if(!t||!t.alive)return;let i=t.env,r=this.lifecyclePhase;i&&(t.lifecyclePhase==="running"&&(this.lifecyclePhase="OnDisable",t.lifecyclePhase="OnDisable",this.bindScriptEnv(t),this.callGlobal(i,"OnDisable")),this.lifecyclePhase="OnDestroy",t.lifecyclePhase="OnDestroy",this.bindScriptEnv(t),this.callGlobal(i,"OnDestroy")),t.alive=!1,t.lifecyclePhase="destroyed",this.lifecyclePhase=r,this.mountedScripts=this.mountedScripts.filter(n=>n!==t),t.object&&(t.object.scripts=t.object.scripts.filter(n=>n!==t)),this.varHandlers=this.varHandlers.filter(n=>n.script!==t),this.signalHandlers=this.signalHandlers.filter(n=>n.script!==t),i&&i!==this.L&&this.closeTrackedLuaState(i),t.env=null}installMetatables(t){this.mtEnum(t),this.mtControl(t),this.mtScript(t),this.mtTween(t),this.mtSeq(t),this.mtSignal(t),this.mtCursor(t)}mtIndexNewindex(t,i,r,n,o,a){Q.luaL_newmetatable(t,N(i)),d.lua_pushcfunction(t,s=>{let c=Ze(s,1)||Ee(d.lua_touserdata(s,1)),l=Z(s,2);if(o[l]&&(!a||a(c,l)))return d.lua_pushcfunction(s,o[l]),1;let u;try{u=r(c,l)}catch(f){return Q.luaL_error(s,N(String(f.message||f)))}return u===void 0?(d.lua_pushnil(s),1):(le(s,this,u),1)}),d.lua_setfield(t,-2,N("__index")),d.lua_pushcfunction(t,s=>{try{let c=Ze(s,1)||Ee(d.lua_touserdata(s,1)),l=Z(s,2),u=me(s,this,3);return n(c,l,u),0}catch(c){return d.lua_pushstring(s,N(String(c.message||c))),d.lua_error(s)}}),d.lua_setfield(t,-2,N("__newindex")),d.lua_pushcfunction(t,s=>{let c=Ze(s,1)||Ee(d.lua_touserdata(s,1)),l=Ze(s,2)||Ee(d.lua_touserdata(s,2));return d.lua_pushboolean(s,c===l),1}),d.lua_setfield(t,-2,N("__eq")),d.lua_pop(t,1)}method(t){let i=this;return r=>{let n=Ze(r,1)||Ee(d.lua_touserdata(r,1)),o=d.lua_gettop(r),a=[];for(let s=2;s<=o;s++)a.push(me(r,i,s));try{let s=t(n,...a);if(s===n)return d.lua_pushvalue(r,1),1;if(s===void 0)return 0;if(Array.isArray(s)&&s.__multi){for(let c of s)le(r,i,c);return s.length}if(Array.isArray(s)&&!(s.length&&typeof s[0]=="object"&&s[0]?.typeofName)){if(s.__controls)return d.lua_createtable(r,s.length,0),s.forEach((c,l)=>{i.pushControl(r,c),d.lua_rawseti(r,-2,l+1)}),1;if(s.__scripts)return d.lua_createtable(r,s.length,0),s.forEach((c,l)=>{i.pushScript(r,c),d.lua_rawseti(r,-2,l+1)}),1;if(typeof s[0]=="number"&&s.length<=4){for(let c of s)d.lua_pushnumber(r,c);return s.length}}return le(r,i,s),1}catch(s){return d.lua_pushstring(r,N(String(s.message||s))),d.lua_error(r)}}}mtEnum(t){let i=new Set(["Name","FullName","EnumType"]);this.mtIndexNewindex(t,"EnumItem",(r,n)=>i.has(n)?r[n]:void 0,(r,n)=>{throw new Error(`cannot set ${n}, no such field`)},{})}mtCursor(t){let i=new Set(["dragging","touchId"]);this.mtIndexNewindex(t,"CursorEventData",(r,n)=>i.has(n)?r[n]:void 0,(r,n)=>{throw new Error(`cannot set ${n}, no such field`)},{GetUIPos:this.method(r=>r.GetUIPos()),GetPressUIPos:this.method(r=>r.GetPressUIPos()),GetUIPosDelta:this.method(r=>r.GetUIPosDelta())})}mtControl(t){let i=this.method((n,o)=>n.SetVisible(o)),r={GetChildren:this.method(n=>{let o=n.GetChildren();return o.__controls=!0,o}),GetChild:this.method((n,o)=>n.GetChild(o)),FindChild:this.method((n,o)=>n.FindChild(o)),SetActive:this.method((n,o)=>n.SetActive(o)),SetVisible:n=>d.lua_isboolean(n,2)?i(n):Q.luaL_error(n,N("bad argument #2 to 'SetVisible' (boolean expected, got %s)"),Q.luaL_typename(n,2)),GetSiblingIndex:this.method(n=>n.GetSiblingIndex()),SetSiblingIndex:this.method((n,o)=>n.SetSiblingIndex(o)),SetAsFirstSibling:this.method(n=>n.SetAsFirstSibling()),SetAsLastSibling:this.method(n=>n.SetAsLastSibling()),GetAnchoredPosition:this.method(n=>n.GetAnchoredPosition()),SetAnchoredPosition:this.method((n,o,a)=>n.SetAnchoredPosition(o,a)),GetSizeDelta:this.method(n=>n.GetSizeDelta()),SetSizeDelta:this.method((n,o,a)=>n.SetSizeDelta(o,a)),GetAnchorMin:this.method(n=>n.GetAnchorMin()),SetAnchorMin:this.method((n,o,a)=>n.SetAnchorMin(o,a)),GetAnchorMax:this.method(n=>n.GetAnchorMax()),SetAnchorMax:this.method((n,o,a)=>n.SetAnchorMax(o,a)),GetPivot:this.method(n=>n.GetPivot()),SetPivot:this.method((n,o,a)=>n.SetPivot(o,a)),GetLocalScale:this.method(n=>n.GetLocalScale()),SetLocalScale:this.method((n,o,a,s)=>n.SetLocalScale(o,a,s)),GetLocalRotation:this.method(n=>n.GetLocalRotation()),SetLocalRotation:this.method((n,o,a,s)=>n.SetLocalRotation(o,a,s)),GetScriptByPath:this.method((n,o)=>n.GetScriptByPath(o)),GetScript:this.method((n,o)=>n.GetScript(o)),GetScripts:this.method(n=>{let o=n.GetScripts();return o.__scripts=!0,o}),AddCursorEventListener:this.method((n,o,a)=>n.AddCursorEventListener(Se(o),a)),RemoveCursorEventListener:this.method((n,o,a)=>n.RemoveCursorEventListener(Se(o),a)),RemoveCursorEventListeners:this.method((n,o)=>n.RemoveCursorEventListeners(Se(o))),RemoveAllCursorEventListeners:this.method(n=>n.RemoveAllCursorEventListeners()),SimulateCursorClick:this.method(n=>n.SimulateCursorClick()),AddKeyEventListener:this.method((n,o,a)=>n.AddKeyEventListener(Se(o),a)),RemoveKeyEventListener:this.method((n,o,a)=>n.RemoveKeyEventListener(Se(o),a)),RemoveKeyEventListeners:this.method((n,o)=>n.RemoveKeyEventListeners(Se(o))),RemoveAllKeyEventListeners:this.method(n=>n.RemoveAllKeyEventListeners()),AddNavigationEventListener:this.method((n,o,a)=>n.AddNavigationEventListener(Se(o),a)),RemoveNavigationEventListener:this.method((n,o,a)=>n.RemoveNavigationEventListener(Se(o),a)),RemoveNavigationEventListeners:this.method((n,o)=>n.RemoveNavigationEventListeners(Se(o))),RemoveAllNavigationEventListeners:this.method(n=>n.RemoveAllNavigationEventListeners()),SetControllerNavigation:this.method((n,o,a,s)=>n.SetControllerNavigation(Se(o),a,s)),GetControllerNavigation:this.method((n,o)=>n.GetControllerNavigation(Se(o))),SetImage:this.method((n,o,a)=>n.SetImage(o,a)),SetSoftEdgeWidth:this.method((n,o,a)=>n.SetSoftEdgeWidth(o,a)),SetFillUnused:this.method(n=>n.SetFillUnused()),SetFillHorizontal:this.method((n,o,a)=>n.SetFillHorizontal(o,a)),SetFillVertical:this.method((n,o,a)=>n.SetFillVertical(o,a)),SetFillRadial90:this.method((n,o,a)=>n.SetFillRadial90(o,a)),SetFillRadial180:this.method((n,o,a)=>n.SetFillRadial180(o,a)),SetFillRadial360:this.method((n,o,a)=>n.SetFillRadial360(o,a)),PlayAnimation:this.method(n=>n.PlayAnimation()),StopAnimation:this.method(n=>n.StopAnimation()),RefreshItems:this.method((n,o,a)=>{this.retainLuaCallback(a);try{n.RefreshItems(o,a)}finally{this.unrefLuaCallback(a)}}),GetItemIndex:this.method((n,o)=>n.GetItemIndex(o)),GetItemSize:this.method(n=>n.GetItemSize()),GetItemSpacing:this.method(n=>n.GetItemSpacing()),GetPadding:this.method(n=>n.GetPadding()),ScrollToItemAt:this.method((n,o,a)=>n.ScrollToItemAt(o,a)),GetContentLength:this.method(n=>n.GetContentLength())};this.mtIndexNewindex(t,"Control",(n,o)=>{if(!Yn(n,o))return;if(!n.alive&&o!=="alive")throw new Error(`attempt to read '${o}' of a destroyed control`);let a=n.luaFieldValue(o),s=Is[o];return s?Xn(s,a):typeof a=="number"&&!yf.has(o)&&!bf.has(o)?new Ci(a):a},(n,o,a)=>{if(Yn(n,o)==="rw"){if((o==="fontSize"||o==="minimumFontSize")&&!Number.isInteger(a)){let l=a===null?"nil":typeof a;throw new Error(`bad argument #2 to '${o}' (integer expected, got ${l})`)}let c=Is[o];if(o==="imageType"&&(a?.EnumType!=="ImageType"||!["Basic","Stretch"].includes(a.Name)))throw new Error("imageType requires Enum.ImageType.Basic or Stretch");n[o]=c?Xn(c,a):a,typeof n.markPlayDirty=="function"&&n.markPlayDirty(yr.has(o));return}throw new Error(`cannot set ${o}, no such field`)},r,bs)}mtScript(t){let i=this,r=new Set(["alive","scriptMappingId","object","path","enabled"]);this.mtIndexNewindex(t,"Script",(n,o)=>r.has(o)?n[o]:void 0,(n,o,a)=>{if(o==="enabled"){n.enabled=!!a;return}throw new Error(`cannot set ${o}, no such field`)},{GetParam:this.method((n,o)=>Object.prototype.hasOwnProperty.call(n.params,o)?n.params[o]:null),Invoke:n=>i.luaInvoke(n),EnableUpdate:this.method((n,o)=>{n.updateEnabled=!!o}),RegisterServerSignalHandler:this.method((n,o,a)=>{i.signalHandlers.push({script:n,name:o,fn:a})}),UnregisterServerSignalHandler:this.method((n,o)=>{i.signalHandlers=i.signalHandlers.filter(a=>!(a.script===n&&a.name===o))}),RegisterCustomVariableChangedHandler:this.method((n,o,a,s)=>{i.varHandlers.push({script:n,entityType:Se(o),name:a,fn:s})}),UnregisterCustomVariableChangedHandler:this.method((n,o,a)=>{let s=Se(o);i.varHandlers=i.varHandlers.filter(c=>!(c.script===n&&c.entityType===s&&c.name===a))})})}mtTween(t){this.mtIndexNewindex(t,"Tween",()=>{},()=>{},{SetEase:this.method((i,r)=>i.SetEase(r)),SetRelative:this.method((i,r)=>i.SetRelative(r)),Play:this.method(i=>i.Play()),Pause:this.method(i=>i.Pause()),Resume:this.method(i=>i.Resume()),Restart:this.method(i=>i.Restart()),Complete:this.method(i=>i.Complete()),Kill:this.method((i,r)=>i.Kill(r)),SetOnComplete:this.method((i,r)=>i.SetOnComplete(r)),SetOnStepComplete:this.method((i,r)=>i.SetOnStepComplete(r)),SetLoops:this.method((i,r)=>i.SetLoops(r))})}mtSeq(t){this.mtIndexNewindex(t,"TweenSequence",()=>{},()=>{},{Append:this.method((i,r)=>i.Append(r)),AppendInterval:this.method((i,r)=>i.AppendInterval(r)),AppendCallback:this.method((i,r)=>i.AppendCallback(r)),Join:this.method((i,r)=>i.Join(r)),Insert:this.method((i,r,n)=>i.Insert(r,n)),InsertCallback:this.method((i,r,n)=>i.InsertCallback(r,n)),Play:this.method(i=>i.Play()),Pause:this.method(i=>i.Pause()),Resume:this.method(i=>i.Resume()),Restart:this.method(i=>i.Restart()),Complete:this.method(i=>i.Complete()),Kill:this.method((i,r)=>i.Kill(r)),SetOnComplete:this.method((i,r)=>i.SetOnComplete(r)),SetOnStepComplete:this.method((i,r)=>i.SetOnStepComplete(r)),SetLoops:this.method((i,r)=>i.SetLoops(r))})}mtSignal(t){this.mtIndexNewindex(t,"ServerSignal",()=>{},()=>{},{AddParam:this.method((i,r,n)=>i.AddParam(r,n)),SendSignal:this.method(i=>i.SendSignal()),AddInt:this.method((i,r)=>i.AddInt(r)),AddIntList:this.method((i,r)=>i.AddIntList(r)),AddFloat:this.method((i,r)=>i.AddFloat(r)),AddFloatList:this.method((i,r)=>i.AddFloatList(r)),AddString:this.method((i,r)=>i.AddString(r)),AddStringList:this.method((i,r)=>i.AddStringList(r)),AddVector3:this.method((i,r)=>i.AddVector3(r)),AddVector3List:this.method((i,r)=>i.AddVector3List(r)),AddBool:this.method((i,r)=>i.AddBool(r)),AddBoolList:this.method((i,r)=>i.AddBoolList(r)),AddGuid:this.method((i,r)=>i.AddGuid(r)),AddGuidList:this.method((i,r)=>i.AddGuidList(r)),AddEntity:this.method((i,r)=>i.AddEntity(r)),AddEntityList:this.method((i,r)=>i.AddEntityList(r)),AddPrefabId:this.method((i,r)=>i.AddPrefabId(r)),AddPrefabIdList:this.method((i,r)=>i.AddPrefabIdList(r)),AddConfigId:this.method((i,r)=>i.AddConfigId(r)),AddConfigIdList:this.method((i,r)=>i.AddConfigIdList(r))})}luaRequire(t){let i=Z(t,1),r=this.normalizeRequirePath(i),n=this.requireAliases.get(r)||r;d.lua_rawgeti(t,Et,d.LUA_RIDX_MAINTHREAD);let o=d.lua_tothread(t,-1);d.lua_pop(t,1);let a=this.requireCache.get(o);a||(a=new Map,this.requireCache.set(o,a));let s=a.get(n);if(s?.loading)return d.lua_pushstring(t,N(`failed to load script '${r}': cyclic require`)),d.lua_error(t);if(s&&s.ref!=null)return d.lua_rawgeti(t,Et,s.ref),1;let c=this.scriptFiles.get(n);if(c==null)return d.lua_pushstring(t,N(`failed to load script '${r}'`)),d.lua_error(t);let l=d.lua_gettop(t);a.set(n,{loading:!0});try{this.loadModule(t,o,n,c),d.lua_pushvalue(t,-1);let u=Q.luaL_ref(t,Et);return a.set(n,{ref:u}),1}catch(u){return a.delete(n),d.lua_settop(t,l),d.lua_pushstring(t,N(`failed to load script '${r}': ${u.message||u}`)),d.lua_error(t)}}newLuaThread(){let t=Q.luaL_newstate();return as.luaL_openlibs(t),ds(t),this.installMetatables(t),this.installGlobals(t),this.luaStates.add(t),d.lua_pushglobaltable(t),this.copyLuaEnvironment(t,-1),d.lua_remove(t,-2),this.moduleBaseEnvironments.set(t,Q.luaL_ref(t,Et)),t}copyLuaEnvironment(t,i){let r=d.lua_absindex(t,i);d.lua_newtable(t);let n=d.lua_absindex(t,-1);for(d.lua_pushnil(t);d.lua_next(t,r)!==0;)d.lua_pushvalue(t,-2),d.lua_pushvalue(t,-2),d.lua_rawset(t,n),d.lua_pop(t,1);d.lua_pushvalue(t,n),d.lua_setfield(t,n,N("_G"))}closeTrackedLuaState(t){if(!t||!this.luaStates.has(t))return;for(let r of this.requireCache.get(t)?.values()||[])r.ref!=null&&Q.luaL_unref(t,Et,r.ref);this.requireCache.delete(t);let i=this.moduleBaseEnvironments.get(t);if(i!=null&&Q.luaL_unref(t,Et,i),this.moduleBaseEnvironments.delete(t),this.luaStates.delete(t),this.luaFunctions)for(let[r,n]of this.luaFunctions)n.__luaState===t&&this.luaFunctions.delete(r);fs(t)}loadModule(t,i,r,n){let o={__kind:"Script",alive:!0,scriptMappingId:this.resolveScriptMappingId(),object:null,path:r,enabled:!0,updateEnabled:!1,params:{},env:t,invoke(){}},a=String(n).replace(/^\uFEFF/,""),s=mr(a);if(Q.luaL_loadbuffer(t,s,s.length,N(`@${r}`))!==Oe)throw new Error(Z(t,-1));let l=d.lua_absindex(t,-1);if(d.lua_rawgeti(t,Et,this.moduleBaseEnvironments.get(i)),this.copyLuaEnvironment(t,-1),d.lua_remove(t,-2),this.pushScript(t,o),d.lua_setfield(t,-2,N("script")),d.lua_setupvalue(t,l,1),d.lua_pcall(t,0,1,0)!==Oe)throw new Error(Z(t,-1))}mountScript({path:t,source:i,control:r,params:n={},scriptMappingId:o=void 0}){this.L||this.boot();let a=this.newLuaThread(),s={__kind:"Script",alive:!0,scriptMappingId:this.resolveScriptMappingId(o),object:r,path:this.normalizeRequirePath(t),enabled:!0,updateEnabled:!1,params:n,env:a,lifecyclePhase:"idle"};s.invoke=(l,u)=>this.invokeOn(a,l,u),r&&r.scripts.push(s),this.mountedScripts.push(s),this.pushScript(a,s),d.lua_setglobal(a,N("script"));let c=this.lifecyclePhase;try{this.lifecyclePhase="OnInit",s.lifecyclePhase="OnInit",this.runChunk(a,i,t);let l=this.callGlobal(a,"OnInit");l&&this.mountErrors.push(l),this.lifecyclePhase="OnEnable",s.lifecyclePhase="OnEnable";let u=this.callGlobal(a,"OnEnable");u&&this.mountErrors.push(u),this.lifecyclePhase="OnStart",s.lifecyclePhase="OnStart";let f=this.callGlobal(a,"OnStart");return f&&this.mountErrors.push(f),this.lifecyclePhase="running",s.lifecyclePhase="running",s}catch(l){throw s.alive=!1,s.lifecyclePhase="failed",this.mountedScripts=this.mountedScripts.filter(u=>u!==s),r&&(r.scripts=r.scripts.filter(u=>u!==s)),this.varHandlers=this.varHandlers.filter(u=>u.script!==s),this.signalHandlers=this.signalHandlers.filter(u=>u.script!==s),this.lifecyclePhase=c,a&&a!==this.L&&this.closeTrackedLuaState(a),s.env=null,l}}runChunk(t,i,r){let n=String(i).replace(/^\uFEFF/,""),o=mr(n),a=Q.luaL_loadbuffer(t,o,o.length,N(`@${r}`));if(a!==Oe){let c=Z(t,-1)||`luaL_loadbuffer status ${a}`;throw d.lua_pop(t,1),new Error(c)}let s=d.lua_pcall(t,0,0,0);if(s!==Oe){let c=Z(t,-1)||`lua_pcall status ${s}`;throw d.lua_pop(t,1),new Error(c)}}callGlobal(t,i){if(d.lua_getglobal(t,N(i)),d.lua_isfunction(t,-1)){if(d.lua_pcall(t,0,0,0)!==Oe){let n=Z(t,-1);d.lua_pop(t,1);let o=`${i}: ${n}`;return this.log("lua-error",o),o}}else d.lua_pop(t,1);return null}callGlobalDt(t,i,r){if(d.lua_getglobal(t,N(i)),d.lua_isfunction(t,-1)){if(d.lua_pushnumber(t,r),d.lua_pcall(t,1,0,0)!==Oe){let o=Z(t,-1);d.lua_pop(t,1),this.log("lua-error",`${i}: ${o}`)}}else d.lua_pop(t,1)}luaInvoke(t){let i=Ze(t,1);if(!i||i.__kind!=="Script")return Q.luaL_error(t,N("bad self to 'Invoke' (Script expected)"));let r=Z(t,2),n=i.env;if(!n||n.l_G!==t.l_G){let c=[];for(let f=3;f<=d.lua_gettop(t);f++)c.push(me(t,this,f));let l;try{l=i.invoke(r,c)}catch(f){return Q.luaL_error(t,N(String(f.message||f)))}if(l===void 0)return 0;let u=Array.isArray(l)&&l.__multi?l:[l];for(let f of u)le(t,this,f);return u.length}let o=2;if(d.lua_getglobal(t,N(r)),!d.lua_isfunction(t,-1))return 0;d.lua_replace(t,o),d.lua_remove(t,1);let a=d.lua_gettop(t)-1;return d.lua_pcall(t,a,Cs,0)!==Oe?d.lua_error(t):d.lua_gettop(t)}invokeOn(t,i,r){let n=d.lua_gettop(t);if(d.lua_getglobal(t,N(i)),!d.lua_isfunction(t,-1)){d.lua_settop(t,n);return}for(let c of r)le(t,this,c);if(d.lua_pcall(t,r.length,Cs,0)!==Oe){let c=Z(t,-1);throw d.lua_settop(t,n),new Error(c)}let a=d.lua_gettop(t)-n;if(a<=0){d.lua_settop(t,n);return}if(a===1){let c=me(t,this,-1);return d.lua_settop(t,n),c}let s=[];for(let c=1;c<=a;c++)s.push(me(t,this,n+c));return d.lua_settop(t,n),s.__multi=!0,s}runScriptPhase(t,i){for(let r of this.mountedScripts){if(!this.scriptCanRun(r))continue;let n=r.env;n&&(this.pushScript(n,r),d.lua_setglobal(n,N("script")),!(t==="OnUpdate"&&!r.updateEnabled)&&this.callGlobalDt(n,t,i))}}step(t=1/30){if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new TypeError("dt must be a finite non-negative number");this.clock.frame++,this.clock.time+=t;for(let[r,n]of this.audios)this.clock.time+1e-9>=n.startedAt+n.duration&&(n.alive=!1,this.audios.delete(r),this.audioRevision++);let i=!this.clock.paused;for(let r of[...this.animations])r.step(t);this.runScriptPhase("OnUpdate",t),i&&(this.clock.levelTime+=t,this.runScriptPhase("OnLevelUpdate",t))}injectKey(t){let i=r=>{if(!r.alive||!r.activeInHierarchy)return!1;if(r.keyListeners.has(t)&&r.emitKey(t))return!0;for(let n of[...r.children])if(i(n))return!0;return!1};for(let r of[...this.roots])i(r)}injectCursor(t,i,r){let n=r||this.makeCursorEventData({});Number.isFinite(n.x)&&Number.isFinite(n.y)&&(this.cursor.x=n.x,this.cursor.y=n.y),t.emitCursor(i,n)}getVar(t,i){if(this.serverBridge&&typeof this.serverBridge.getVar=="function")return this.serverBridge.getVar(t,i);let r=this.serverVars[t];return r?r[i]:void 0}notifyVarHandlers(t,i){for(let r of this.varHandlers)this.scriptCanRun(r.script)&&r.entityType===t&&r.name===i&&this.safeCall(r.fn,this.enumTree.CustomVariableEntityType[t],i)}setVar(t,i,r){if(this.serverBridge&&typeof this.serverBridge.setVar=="function"){this.serverBridge.setVar(t,i,r);return}let n=this.serverVars[t]||(this.serverVars[t]=Object.create(null));n[i]=r,this.notifyVarHandlers(t,i)}sendClientSignal(t,i){for(let r of this.signalHandlers)this.scriptCanRun(r.script)&&r.name===t&&this.safeCall(r.fn,t,i)}evalQueryScript(t,i){this.L||this.boot();let r=this.L;d.lua_createtable(r,0,5);let n=(o,a)=>{d.lua_pushcfunction(r,a),d.lua_setfield(r,-2,N(o))};return n("var",o=>(le(o,this,i.var(Z(o,1),Z(o,2))),1)),n("logContains",o=>(d.lua_pushboolean(o,i.logContains(Z(o,1))),1)),n("control",o=>(le(o,this,i.control(Z(o,1))),1)),n("logs",o=>(le(o,this,i.logs()),1)),n("signals",o=>(le(o,this,i.signals(Z(o,1))),1)),n("serverLogs",o=>(le(o,this,i.serverLogs?i.serverLogs():[]),1)),n("serverLogContains",o=>{let a=i.serverLogContains;return d.lua_pushboolean(o,a?!!a(Z(o,1)):!1),1}),d.lua_setglobal(r,N("query")),this.runChunk(r,t,"autotest-assert"),!0}destroy(){for(let t of this.roots.slice())this.destroyControl(t);for(let t of this.mountedScripts.slice())this.unmountScript(t);this.lifecyclePhase="idle",this.mountedScripts=[],this.luaFunctions.clear();for(let t of[...this.luaStates])this.closeTrackedLuaState(t);this.L=null,this.audios.clear(),this.audioHistory.length=0,this.audioWarnings.clear()}};function Ti(e){let t=new Sr(e);return t.boot(),t}var _t=Object.freeze(Array.from({length:8},(e,t)=>`Player${t+1}`)),Jn=Object.freeze(Array.from({length:8},(e,t)=>`Avatar${t+1}`)),Ms=Object.freeze(["Level","PlayerSelf","AvatarSelf"]);var Kn=Object.freeze([...Ms,..._t,...Jn]),Ns=Object.freeze(["PlayerSelf","AllPlayers",..._t]),wf=Object.freeze(["Level","PlayerSelf",..._t]),ks=Object.freeze(["Int","Float","String","Bool","Vector3","Entity","Guid","PrefabId","ConfigId","IntList","FloatList","StringList","BoolList","Vector3List","EntityList","GuidList","PrefabIdList","ConfigIdList","Dict","Struct"]),Sf=-2147483648,xf=2147483647,If=new Set(["set-custom-variable","get-custom-variable","custom-variable-changed","\u8BBE\u7F6E\u81EA\u5B9A\u4E49\u53D8\u91CF","\u83B7\u53D6\u81EA\u5B9A\u4E49\u53D8\u91CF","\u81EA\u5B9A\u4E49\u53D8\u91CF\u53D8\u5316\u65F6","send-signal","listen-signal","send-client-script-signal","\u53D1\u9001\u4FE1\u53F7","\u76D1\u542C\u4FE1\u53F7","\u53D1\u9001\u5BA2\u6237\u7AEF\u811A\u672C\u4FE1\u53F7","setVar","getVar","signal","var"]);function Pi(e){return`Player${Number(e)}`}function xr(e){return`Avatar${Number(e)}`}function Es(e){let t=String(e||"").match(/^(?:Player|Avatar)([1-8])$/);return t?Number(t[1]):0}function At(e){if(e==null||e==="")return 1;let t=Number(e);if(!Number.isInteger(t)||t<1||t>8)throw new Error("playerCount must be an integer 1-8");return t}function et(e,t=8){let i=At(t);if(e==null||e==="")return 1;let r=Number(e);if(!Number.isInteger(r)||r<1||r>i)throw new Error(`playerIndex must be an integer 1-${i}`);return r}function As(){let e={Level:Object.create(null),PlayerSelf:Object.create(null),AvatarSelf:Object.create(null)};for(let t of _t)e[t]=Object.create(null);for(let t of Jn)e[t]=Object.create(null);return e}function Fs(e){let t=String(e||"");if(!Kn.includes(t))throw new Error(`unknown CustomVariableEntityType: ${e}`);return t}function Cf(e,t){let i=Fs(e);if(!wf.includes(i))throw new Error(`${t}.entityType must be Level, PlayerSelf, or Player1-8`);return i}function Ri(e){let t=String(e??"");if(!t)throw new Error("custom variable name is required");return t}function Ir(e){let t=String(e??"");if(!t)throw new Error("signal name is required");return t}function qn(e){let t=String(e||"PlayerSelf");if(!Ns.includes(t))throw new Error(`unsupported client signal target: ${e}. use PlayerSelf, AllPlayers, or Player1-8`);return t}function Mi(e){if(e==null)return"";if(typeof e=="boolean")return"Bool";if(typeof e=="string")return"String";if(typeof e=="number")return Number.isInteger(e)?"Int":"Float";if(Array.isArray(e)){if(e.length===0)return"IntList";let t=Mi(e[0]);return t&&!t.endsWith("List")&&t!=="Dict"&&t!=="Struct"?`${t}List`:"IntList"}return e&&typeof e=="object"?"x"in e||"y"in e||"z"in e?"Vector3":"Dict":""}function Ce(e){return e===void 0?null:JSON.parse(JSON.stringify(e))}function _s(e){return Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"value")&&"type"in t?t.value:t):[]}function Ts(e){return Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"value")&&"type"in t?{type:String(t.type||""),value:t.value}:{type:Mi(t),value:t}):[]}function kf(e){return String(e?.kind||e?.type||e?.name||e?.id||"")}function Cr(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Os(e,t){if(!Cr(e)||!Object.prototype.hasOwnProperty.call(e,"fromSignalParam"))return null;if(Object.keys(e).some(r=>r!=="fromSignalParam"))throw new Error(`${t}.fromSignalParam cannot be combined with literal fields`);let i=Number(e.fromSignalParam);if(!Number.isSafeInteger(i)||i<0)throw new Error(`${t}.fromSignalParam must be a non-negative integer`);return{fromSignalParam:i}}function Ps(e,t){return Os(e,t)||Ce(e)}function Ef(e,t,i){if(!Cr(e))throw new Error(`serverLogic.rules[${t}].actions[${i}] must be an object`);let r=String(e.kind||e.type||""),n=`serverLogic.rules[${t}].actions[${i}]`;if(r==="setCustomVariable"){let o=Cf(e.entityType,n);if(!Object.prototype.hasOwnProperty.call(e,"value"))throw new Error(`${n}.value is required`);return{kind:r,entityType:o,name:Ri(e.name),value:Ps(e.value,`${n}.value`),...e.variableType?{variableType:String(e.variableType)}:{}}}if(r==="sendClientScriptSignal"){if(!Array.isArray(e.params))throw new Error(`${n}.params must be an array`);return{kind:r,target:qn(e.target),signalName:Ir(e.signalName),params:e.params.map((o,a)=>Ps(o,`${n}.params[${a}]`))}}throw new Error(`${n}.kind must be setCustomVariable or sendClientScriptSignal`)}function Ni(e){if(e==null)return{version:1,rules:[]};if(!Cr(e))throw new Error("serverLogic must be an object");let t=e.rules===void 0?[]:e.rules;if(!Array.isArray(t))throw new Error("serverLogic.rules must be an array");return{version:1,rules:t.map((i,r)=>{if(!Cr(i))throw new Error(`serverLogic.rules[${r}] must be an object`);if(!Array.isArray(i.actions)||i.actions.length===0)throw new Error(`serverLogic.rules[${r}].actions must be a non-empty array`);return{id:String(i.id||`signal-${r+1}`),signalName:Ir(i.signalName),actions:i.actions.map((n,o)=>Ef(n,r,o))}})}}function Rs(e,t,{typed:i=!1}={}){let r=Os(e,"server logic value");if(r){let n=i?t.params:t.values;if(r.fromSignalParam>=n.length)throw new Error(`signal ${t.name} has no parameter at index ${r.fromSignalParam}`);return Ce(n[r.fromSignalParam])}return Ce(e)}function Af(e){return e==="Level"?"Level":_t.includes(e)?"PlayerSelf":Jn.includes(e)?"AvatarSelf":e}function zs(e={}){let t=As(),i=As(),r=[],n=[],o=[],a=[],s=Array.from({length:9},()=>null),c=1,l=0,u=Number(e.onlineLatencyMs||0);(!Number.isFinite(u)||u<0)&&(u=0);let f=Ni(e.logic),h=At(e.playerCount),p=et(e.viewPlayerIndex,h);function m(S,A){a.push({source:"server",level:String(S||"engine"),text:String(A),time:l})}function b(S){let A=s[S||p],I=Number(A?.clock?.time);Number.isFinite(I)&&(l=I)}function w(S,A,I,k){t[S][A]=I,i[S][A]={type:k||Mi(I)||i[S][A]?.type||""}}function y(S,A,I){return typeof I!="number"||!Number.isInteger(I)?{ok:!0,value:I}:I>=Sf&&I<=xf?{ok:!0,value:I}:(m("engine",`Int custom variable ${S}.${A} out of range ${I}; keeping previous legal value`),{ok:!1,value:t[S][A]})}function v(S,A){let I=Fs(S),k=A||p;return I==="PlayerSelf"?Pi(k):I==="AvatarSelf"?xr(k):I}function _(S,A){let I=Af(S);if(S==="Level"){for(let E=1;E<=h;E+=1){let T=s[E];T&&typeof T.notifyVarHandlers=="function"&&T.notifyVarHandlers("Level",A)}return}let k=Es(S);if(!k)return;let D=s[k];D&&typeof D.notifyVarHandlers=="function"&&D.notifyVarHandlers(I,A)}function P(S,A){let I=qn(S);return I==="AllPlayers"?Array.from({length:h},(k,D)=>D+1):I==="PlayerSelf"?[A||p]:[Es(I)]}function M(S){for(let A of f.rules)if(A.signalName===S.name)for(let I of A.actions){if(I.kind==="setCustomVariable"){let k=Rs(I.value,S);z.setVar(I.entityType,I.name,k,{type:I.variableType,playerIndex:S.playerIndex}),m("info",`logic ${A.id}: set ${I.entityType}.${I.name}`);continue}if(I.kind==="sendClientScriptSignal"){let k=I.params.map(D=>Rs(D,S,{typed:!0}));z.sendToClient(I.signalName,k,{target:I.target,playerIndex:S.playerIndex}),m("info",`logic ${A.id}: sent ${I.signalName} to ${I.target}`)}}}function O(S,A){S&&(S.serverBridge={getVar:(I,k)=>z.getVar(I,k,{playerIndex:A}),setVar:(I,k,D)=>z.setVar(I,k,D,{playerIndex:A}),receiveFromClient:(I,k)=>z.receiveFromClient(I,k,{playerIndex:A})})}function L(S){S&&(S.serverBridge=null)}let z={ENTITY_TYPES:Ms,ALL_ENTITY_TYPES:Kn,CLIENT_SIGNAL_TARGETS:Ns,get clock(){return l},get playerCount(){return h},get viewPlayerIndex(){return p},setClock(S){l=Number(S)||0},setPlayerCount(S){return h=At(S),p>h&&(p=h),h},setViewPlayerIndex(S){return p=et(S,h),p},log(S,A){m(S,A)},defineVar(S,A,I={},{playerIndex:k}={}){let D=v(S,k),E=Ri(A);if(Object.prototype.hasOwnProperty.call(t[D],E))throw new Error(`custom variable already exists: ${D}.${E}`);let T=I.type?String(I.type):Mi(I.value??I.defaultValue);if(T&&!ks.includes(T))throw new Error(`unsupported custom variable type: ${T}`);let B=I.value!==void 0?I.value:I.defaultValue!==void 0?I.defaultValue:null;return w(D,E,B,T),z.getVar(D,E)},getVar(S,A,{playerIndex:I}={}){let k=v(S,I),D=Ri(A);if(!Object.prototype.hasOwnProperty.call(t[k],D)){m("engine",`GetGlobalCustomVariableValue missing ${k}.${D}; returning nil (simulator policy)`);return}return t[k][D]},setVar(S,A,I,{notify:k=!0,type:D,playerIndex:E}={}){let T=v(S,E),B=Ri(A),Y=D||i[T][B]?.type||Mi(I);if(Y&&!ks.includes(Y)&&Y!=="")throw new Error(`unsupported custom variable type: ${Y}`);let re=I;if(!((Y==="Int"||Y===""&&typeof I=="number"&&Number.isInteger(I))&&(re=y(T,B,I).value,re===void 0)))return w(T,B,re,Y),k&&_(T,B),re},listVars(S){let A=S?[v(S)]:["Level",...Array.from({length:h},(k,D)=>Pi(D+1)),...Array.from({length:h},(k,D)=>xr(D+1))],I=[];for(let k of A)for(let D of Object.keys(t[k]))I.push({entityType:k,name:D,type:i[k][D]?.type||"",value:Ce(t[k][D])});return I},receiveFromClient(S,A=[],{playerIndex:I}={}){let k=et(I||p,h);b(k);let D=Ir(S),E={id:c++,direction:"inbound",name:D,params:Ts(A),values:_s(A),time:l,playerIndex:k,from:Pi(k)};return r.push(E),M(E),E},sendToClient(S,A=[],{target:I="PlayerSelf",playerIndex:k}={}){let D=Ir(S),E=qn(I),B=P(E,k||p),Y={id:c++,direction:"outbound",name:D,params:Ts(A),values:_s(A),time:l,target:E,players:B,deliverAt:l+u/1e3,delivered:!1};return n.push(Y),u===0?z.deliver(Y):o.push(Y),Y},getLogic(){return Ce(f)},setLogic(S){return f=Ni(S),z.getLogic()},deliver(S){if(!S||S.delivered)return;S.delivered=!0;let A=Array.isArray(S.players)&&S.players.length?S.players:P(S.target);for(let I of A){let k=s[I];k&&typeof k.sendClientSignal=="function"&&k.sendClientSignal(S.name,S.values)}},flush(S){S!==void 0&&(l=Number(S)||0);let A=[];for(let I=o.length-1;I>=0;I-=1)o[I].deliverAt<=l&&A.push(o.splice(I,1)[0]);A.sort((I,k)=>I.id-k.id);for(let I of A)z.deliver(I);return A},inbound(){return r.slice()},outbound(){return n.slice()},loadConfig(S){if(S!=null){if(typeof S!="object")throw new Error("server config must be an object");if(S.graph&&!Array.isArray(S.nodes))throw new Error("unsupported server node graph: v1 only accepts custom variables and signals");for(let A of S.nodes||[]){let I=kf(A);if(!If.has(I))throw new Error(`unsupported server node: ${I||JSON.stringify(A)}. v1 only supports custom variables and signals`)}if(S.onlineLatencyMs!==void 0){let A=Number(S.onlineLatencyMs);if(!Number.isFinite(A)||A<0)throw new Error("onlineLatencyMs must be a non-negative finite number");u=A}S.playerCount!==void 0&&z.setPlayerCount(S.playerCount),S.viewPlayerIndex!==void 0&&z.setViewPlayerIndex(S.viewPlayerIndex),(S.logic!==void 0||S.serverLogic!==void 0)&&z.setLogic(S.logic??S.serverLogic);for(let A of S.vars||[]){let I=v(A.entityType),k=Ri(A.name);Object.prototype.hasOwnProperty.call(t[I],k)?z.setVar(I,k,A.value??A.defaultValue,{notify:!1,type:A.type}):z.defineVar(I,k,A)}}},attachRuntime(S,{playerIndex:A=1}={}){let I=et(A,8);return s[I]&&s[I]!==S&&L(s[I]),s[I]=S||null,O(s[I],I),z},attachRuntimes(S){z.detachRuntime();let A=Array.isArray(S)?S:[];for(let I=0;I<A.length&&I<8;I+=1)s[I+1]=A[I]||null,O(s[I+1],I+1);return z},detachRuntime(){for(let S=1;S<=8;S+=1)L(s[S]),s[S]=null},snapshot(){let S=Pi(p),A=xr(p),I={Level:{},PlayerSelf:{},AvatarSelf:{}};for(let k of Object.keys(t.Level))I.Level[k]={type:i.Level[k]?.type||"",value:Ce(t.Level[k])};for(let k of Object.keys(t[S]))I.PlayerSelf[k]={type:i[S][k]?.type||"",value:Ce(t[S][k])};for(let k of Object.keys(t[A]))I.AvatarSelf[k]={type:i[A][k]?.type||"",value:Ce(t[A][k])};for(let k=1;k<=h;k+=1){let D=Pi(k),E=xr(k);I[D]={},I[E]={};for(let T of Object.keys(t[D]))I[D][T]={type:i[D][T]?.type||"",value:Ce(t[D][T])};for(let T of Object.keys(t[E]))I[E][T]={type:i[E][T]?.type||"",value:Ce(t[E][T])}}return{clock:l,onlineLatencyMs:u,playerCount:h,viewPlayerIndex:p,logic:z.getLogic(),vars:I,inbound:r.map(k=>({id:k.id,name:k.name,params:Ce(k.params),values:Ce(k.values),time:k.time,playerIndex:k.playerIndex,from:k.from})),outbound:n.map(k=>({id:k.id,name:k.name,params:Ce(k.params),values:Ce(k.values),time:k.time,target:k.target,players:Array.isArray(k.players)?k.players.slice():[],deliverAt:k.deliverAt,delivered:!!k.delivered})),logs:a.map(k=>({source:"server",level:k.level,text:k.text,time:k.time}))}},reset(){for(let S of Kn){for(let A of Object.keys(t[S]))delete t[S][A];for(let A of Object.keys(i[S]))delete i[S][A]}r.length=0,n.length=0,o.length=0,a.length=0,c=1,l=0},destroy(){z.detachRuntime(),z.reset()}};e.config&&z.loadConfig(e.config);for(let S of e.vars||[])z.defineVar(S.entityType,S.name,S);return z}var _f={container:"container",textbox:"textbox",image:"image",button:"button",cursor:"cursor",grid:"grid",reference:"reference",textwindow:"textwindow",keyhint:"keyhint",animation:"animation",fullscreen:"fullscreen"};function Qn(e,t,i=null){let r=st(e.transformByPlatform,t),n={authoringId:e.id,kind:_f[e.kind]||"container",name:e.name,prefabIndex:e.guid||0,active:e.active!==!1,visible:e.visible!==!1,canControllerFocus:e.canControllerFocus===!0,anchoredPositionX:r.offset.x,anchoredPositionY:r.offset.y,sizeDeltaX:r.size.x,sizeDeltaY:r.size.y,anchorMinX:r.anchorMin.x,anchorMinY:r.anchorMin.y,anchorMaxX:r.anchorMax.x,anchorMaxY:r.anchorMax.y,pivotX:r.pivot.x,pivotY:r.pivot.y,localScaleX:r.scale.x,localScaleY:r.scale.y,localScaleZ:r.scale.z,localRotationX:r.rotation.x,localRotationY:r.rotation.y,localRotationZ:r.rotation.z,children:(e.children||[]).map(a=>Qn(a,t,i))},o=i?.get(e.id);return o?.length&&(n.scripts=o.map(a=>{let s=Number(a.guid);return{path:a.path||a.id,source:a.source||"",...Number.isSafeInteger(s)&&s>0?{scriptMappingId:s}:{}}})),e.kind==="container"&&(n.isolateNavigation=e.isolateNavigation===!0,n.disableKeyEventPassthrough=e.disableKeyEventPassthrough===!0,n.disableCursorEventPassthrough=e.disableCursorEventPassthrough===!0,n.showCursor=e.showCursor===!0),(e.kind==="textbox"||e.kind==="textwindow")&&(n.text=e.text??"",n.fontSize=e.fontSize,n.adaptiveFontSize=e.adaptiveFontSize===!0,n.minimumFontSize=e.minimumFontSize,n.fontColor=e.fontColor,n.bgColor=e.bgColor,n.enableOutline=e.enableOutline!==!1,n.outlineColor=e.outlineColor,n.horizontalAlignment=e.horizontalAlignment||"Left",n.verticalAlignment=e.verticalAlignment||"Top",e.kind==="textwindow"&&(n.interactable=e.interactable!==!1,n.showScrollBar=e.showScrollBar!==!1)),e.kind==="image"&&(n.imageSource=e.imageSource,n.imageType=e.imageType??null,n.imageId=e.imageId??0,n.imageColor=e.imageColor,n.raycastTarget=e.raycastTarget===!0,n.enableMask=e.enableMask===!0,n.enableSoftEdge=e.enableSoftEdge===!0,n.softEdgeMode=e.softEdgeMode,n.softEdgeWidthX=e.softEdgeWidthX,n.softEdgeWidthY=e.softEdgeWidthY,n.horizontalSoftRange=e.horizontalSoftRange,n.verticalSoftRange=e.verticalSoftRange,n.enableFill=e.enableFill===!0,n.fillType=e.enableFill?e.fillType:"Unused",n.fillHorizontalType=e.fillHorizontalType,n.fillVerticalType=e.fillVerticalType,n.fillRadial90Type=e.fillRadial90Type,n.fillRadialType=e.fillRadialType,n.fillAmount=e.fillAmount,n.reverseMaskArea=e.reverseMaskArea===!0),e.kind==="button"&&(n.raycastTarget=e.raycastTarget!==!1,n.interactable=e.interactable!==!1,n.clickAudioId=e.clickAudioId,n.unavailableChildId=e.unavailableChildId??null,n.hoverChildId=e.hoverChildId??null,n.pressedChildId=e.pressedChildId??null,n.selectedChildId=e.selectedChildId??null),e.kind==="cursor"&&(n.raycastTarget=e.raycastTarget!==!1),e.kind==="reference"&&(n.referencedPrefabIndex=e.referencedPrefabId),e.kind==="grid"&&(n.itemPrefabIndex=e.itemPrefabId,n.raycastTarget=e.raycastTarget!==!1,n.interactable=e.interactable!==!1,n.showScrollBar=e.showScrollBar!==!1,n.scrollDirection=e.scrollDirection,n.layoutConstraint=e.layoutConstraint,n.layoutConstraintFixedCount=e.layoutConstraintFixedCount,n.cellSizeX=e.cellSizeX,n.cellSizeY=e.cellSizeY,n.spacingX=e.spacingX,n.spacingY=e.spacingY,n.padding1X=e.padding1X,n.padding1Y=e.padding1Y,n.padding2X=e.padding2X,n.padding2Y=e.padding2Y,n.previewCount=e.previewCount),e.kind==="keyhint"&&(n.keyboardKeyCode=e.keyboardKeyCode,n.controllerKeyCode=e.controllerKeyCode),(e.kind==="animation"||e.kind==="fullscreen")&&(n.raycastTarget=!1,n.animationId=e.animationId,n.playSoundEffect=e.playSoundEffect,e.kind==="animation"&&(n.layer=e.layer)),n}function Zn(e,t=[],i=""){let r=i&&K[i]?i:e.canvasId,n=K[r],o=vi(e),a=new Map;for(let c of t){if(!c.controlId)continue;let l=a.get(c.controlId)||[];l.push(c),a.set(c.controlId,l)}let s=e.meta?.assetType==="client-control-template"?(e.root.children||[]).map(c=>Qn(c,r,a)):[];return{canvasId:r,platform:n.platform,device:n.luaDevice,canvasWidth:n.width,canvasHeight:n.height,root:Qn(o,r,a),templates:s}}var kr="qxqy-autotest";var Pt=.03333333333333333,Tf=new Set(["pointer","key","click","pause","resume","serverSet","serverSend","view"]),Pf=new Set(["log","control","var","signal","tree","lua"]);function Tt(e,t){let i=Number(e);if(!Number.isFinite(i))throw new Error(`${t} must be a finite number`);return i}function eo(e){return JSON.parse(JSON.stringify(e??null))}function Er(e,t){if(!e||typeof e!="object")throw new Error(`events[${t}] must be an object`);let i=String(e.kind||e.do||"");if(!Tf.has(i))throw new Error(`unsupported event kind: ${i||"(empty)"}`);let r=e.payload&&typeof e.payload=="object"?{...e.payload}:{};if(i==="pointer")!r.type&&e.type&&(r.type=e.type),r.x===void 0&&(r.x=e.x),r.y===void 0&&(r.y=e.y),r.x=Tt(r.x,"pointer.x"),r.y=Tt(r.y,"pointer.y"),r.type=String(r.type||"click"),r.type==="wheel"&&(r.deltaX=Tt(r.deltaX??e.deltaX??0,"pointer.deltaX"),r.deltaY=Tt(r.deltaY??e.deltaY??0,"pointer.deltaY"));else if(i==="key"){if(r.typeName=String(r.typeName||r.key||e.typeName||e.key||""),!r.typeName)throw new Error("key event requires typeName")}else if(i==="click"){if(r.name=String(r.name||e.name||""),!r.name)throw new Error("click event requires control name")}else if(i==="serverSet"){if(r.entityType=String(r.entityType||e.entityType||""),r.name=String(r.name||e.name||""),r.value===void 0&&(r.value=e.value),r.value===void 0&&(r.value=null),!r.entityType||!r.name)throw new Error("serverSet requires entityType and name")}else if(i==="serverSend"){if(r.name=String(r.name||e.name||""),r.params=Array.isArray(r.params)?r.params:Array.isArray(e.params)?e.params:[],r.target=String(r.target||e.target||"PlayerSelf"),!r.name)throw new Error("serverSend requires signal name")}else if(i==="view"&&(r.playerIndex=Number(r.playerIndex||r.viewPlayerIndex||e.playerIndex||e.viewPlayerIndex||0),!Number.isInteger(r.playerIndex)||r.playerIndex<1))throw new Error("view event requires playerIndex 1-8");return{t:Tt(e.t??0,"event.t"),source:String(e.source||"user"),kind:i,payload:r}}function to(e,t){if(!e||typeof e!="object")throw new Error(`asserts[${t}] must be an object`);let i=String(e.kind||(e.check?"log":""));if(!Pf.has(i))throw new Error(`unsupported assert kind: ${i||"(empty)"}`);let r={kind:i};if(e.at!==void 0&&(r.at=Tt(e.at,"assert.at")),i==="log"){if(r.contains=String(e.contains||e.check||e.text||""),r.source=e.source==="server"?"server":"client",e.level&&(r.level=String(e.level)),!r.contains)throw new Error("log assert requires contains")}else if(i==="control"){if(r.id=e.id?String(e.id):"",r.name=e.name?String(e.name):"",r.field=String(e.field||""),!r.field)throw new Error("control assert requires field");if(!r.id&&!r.name)throw new Error("control assert requires id or name");if(!Object.prototype.hasOwnProperty.call(e,"equals"))throw new Error("control assert requires equals");r.equals=eo(e.equals)}else if(i==="var"){if(r.entityType=String(e.entityType||""),r.name=String(e.name||""),!r.entityType||!r.name)throw new Error("var assert requires entityType and name");if(!Object.prototype.hasOwnProperty.call(e,"equals"))throw new Error("var assert requires equals");r.equals=eo(e.equals)}else if(i==="signal"){if(r.direction=e.direction==="outbound"?"outbound":"inbound",r.name=String(e.name||""),!r.name)throw new Error("signal assert requires name");e.values!==void 0&&(r.values=eo(e.values))}else if(i==="tree"){if(r.name=String(e.name||""),r.exists=e.exists!==!1,!r.name)throw new Error("tree assert requires name")}else if(i==="lua"&&(r.source=String(e.source||""),!r.source.trim()))throw new Error("lua assert requires source");return r}function $s(e){let t=0,i=[],r=[];for(let n of e){if(!n||typeof n!="object")throw new Error("queue step must be an object");if(n.do!=="start"){if(n.do==="step"){t+=Tt(n.dt??Pt,"step.dt");continue}if(n.do==="pointer"||n.do==="key"||n.do==="click"||n.do==="pause"||n.do==="resume"||n.do==="serverSet"||n.do==="serverSend"||n.do==="view"){i.push(Er({...n,kind:n.do,t},i.length));continue}if(n.assert||n.check||n.kind){r.push(to({...n.assert||n,at:n.at??t},r.length));continue}throw new Error(`unsupported queue step: ${JSON.stringify(n)}`)}}return{events:i,asserts:r,dt:Pt}}function Fi(e){if(Array.isArray(e)){let r=$s(e);return{format:kr,version:1,name:"",dt:r.dt,events:r.events,asserts:r.asserts}}if(!e||typeof e!="object")throw new Error("autotest case must be an object or step array");if(Array.isArray(e.queue)||Array.isArray(e.steps)){let r=$s(e.queue||e.steps);return{format:kr,version:1,name:String(e.name||""),dt:Number(e.dt)>0?Number(e.dt):r.dt,events:r.events,asserts:r.asserts}}let t=(e.events||[]).map((r,n)=>Er(r,n)),i=(e.asserts||[]).map((r,n)=>to(r,n));return t.sort((r,n)=>r.t-n.t||0),{format:kr,version:1,name:String(e.name||""),dt:Number(e.dt)>0?Number(e.dt):Pt,playerCount:Number(e.playerCount)>0?Number(e.playerCount):1,events:t,asserts:i}}function Ds(e,t={}){let i=(e||[]).map((r,n)=>Er(r,n));return{format:kr,version:1,name:String(t.name||""),dt:Number(t.dt)>0?Number(t.dt):Pt,playerCount:Number(t.playerCount)>0?Number(t.playerCount):1,events:i,asserts:(t.asserts||[]).map((r,n)=>to(r,n))}}function Gs(e,t,i){if(!e)return null;let r=Er({...t,t:t.t??i??0},e.events.length);return e.events.push(r),r}var Ar=(e,t)=>Math.max(0,Math.min(t,Number.isFinite(e)?e:0));function Vs(e,t,i){let r=Je(e,t,i),n=Math.max(0,r.contentHeight-i),o=Ar(e._scrollOffset||0,n);return e._scrollOffset=o,{...r,length:r.contentHeight,max:n,offset:o,viewport:i,horizontal:!1,width:t,height:i}}function Zt(e,t,i){if(!e?.showBar||e.max<=0||t<=0||i<=0)return null;let r=e.horizontal===!0,n=r?t:i,o=Math.max(0,n-4),a=Math.min(o,Math.max(18,o*n/(n+e.max))),s=o-a,c=s*e.offset/e.max,l=Math.min(8,r?i:t),u=r?{x:-t/2+2,y:i/2-l-2,width:o,height:l}:{x:t/2-l-2,y:-i/2+2,width:l,height:o},f=r?{...u,x:u.x+c,width:a}:{...u,y:u.y+c,height:a};return{track:u,thumb:f,travel:s}}var Ls="https://oss.070077.xyz/",io="mp3-v1",_r="/qxqy-audio/",Rf=[[10001,"ura.1ht4.2ag9.1hh5.jbb.k02.jcw.2tv.2wn.2xk.2r3.d5s.94l.ebv.kcr.b40.77k.9gp.97w.1hb5.jag.btu.jc9.hp5.bmj.blq.blq.ff9.ffk.o74.1owl.rp.mg.l3.lf.lh.qy.1a3z.2xk.2xk.2xk.2xk.2xk.17dc.1f2b.2bc.2bc.2bc.2bc.2bc.ffo.ffo.126.1fk.4mo.4mo.15e.1h2.237.2ba.2kd.2bc.4mo.4mo.4mo.4mo.1mc.1n6.2cu.1ud.2b1.2ee.1tj.1tk"],[20001,"o6.fh.kb.cr.og.sm.6x.8c.87.o7.vz.kt.qo.lg.ob.9w.mg.1kz.zc.1ex.1d5.ps.uu.su.qs.ys.zp.10k.15a.xc.uk.mx.1ax.nt.tu.19m.uj.1ku.tt.100.ie.d3.fp.ie.ie.d3.fp.ie.8p.7k.fw.h0.qc.ot.uc.ot.rk.gb.1c2.ff.cl.9v.wg.1ir.1lr.1b8.1ri.1p0.104.10n.mw.j6.jb.f1.dv.84.a0.cp.bx.1ko.1au.1ia.rs.rt.rs.t7.x6.wi.zc.16f.1i6.2jh.28d.qh.k8.1gz.1ko.2iv.1xp.1l4.1gk.10j.yo.1jk.1jk.xv.104.15o.1xg.1xg.1xi.25i.p1.t1.yh.1ak.1i6.1y2.xt.32u.3g6.1bz.2mn.14l.14c.1e1.op.s8.p2.v5.2ix.1a0.ry.16m.17n.13c.134.ys.yu.xr.sl.sr.sd.yh.z5.gd.gl.hx.h2.g8.fj.iy.hz.jj.th.12n.16r.d3.j9.dg.lj.fl.a7.f9.iw.el.27f.1dh.1rh.2ph.yd.w5.x5.tr.pq.zf.16h.1a5.17t.wy.vn.y8.wl.yv.2ye.2qt.1ah.163.19t.uf.119.2vv.1bm.13h.14p.1so.c3.as.9z.19w.1l4.1nl.rj.we"],[30001,"jo.my.ss.dw.c1.b4.hl.hl.hl.cz.dw.dw.b4.dw.fr.kd.qv.px.px.74.6u.8h.60.8q.8b.eo.eo.eo.8k.a5.99.12v.13y.lg.m4.qr.dw.ex.g0.ef.cd.br.11n.17h.1b8.1c9.9p.ag.9z.l9.m8.m8.lw.m8.cz.99.b4.8c.63.7f.6h.99.re.pp.pi.cq.c9.cp.ck.c6.b0.bd.al.f6.gl.ed.fs.lc.k6.kh.i6.cx.j1.hk.gb.d7.h7.g2.em.kj.kn.k4.j5.rh.t0.qt.mj.i7.ih.i2.hd.3r.8d.6u.6z.by.de.dg.cr.1a5.1ab.16c.18g.n2.ly.no.nt.f9.de.lr.fe.f0.fj.el.fo.t1.g9.ly.h3.g6.de.2ak.2f3.wf.kg.qn.11p.rg.uj.u6.11c.22o.2cs.3dp.3dq.3d5.3d6.1zx.18v"],[40001,"19x.215.2zt.1ex.2pj.7hy.1ur.1gn.1g7.1b1.u9.1tw.108.1ew.rs.1qu.w9.lk.244.qi.b6.tk.jg.jg.jg.y4.c1.b4.iv.hi.r4.n7.gy.ev.qe.12z.18n.dw.1l6.ou.wz.1un.19t.18k.yy.1hs.sl.dw.1vl.100.14k.1q8.209.1jk.1xr.ua.1j2.pr.26h.1gs.s9.px.15v.pf.1jk.xc.1hb.111.172.ut.285.1oh.149.zj.22r.2l9.14a.ok.23y.1eh.xe.1j0.1rp.1cz.wf.1mh.22k.334.1z2.1xo.1br.4ji.5nq.5nf.2za.18r.h3.eo.ia.1kn.dc.ss.s0.1bl.1oc.is.km.177.1ec.1ao.h4.hp.dx.l9.iw.i3.12w.n1.yq.12w.1ju.yx.14s.18b.22t.u3.my.2rb.36w.13u.z8.20r.18g.19r.2x9.w4.q2.1d2.wo.13a.v6.17w.ur.288.1b6.14m.1fi.1xx.1ee.kj.121.j2.1d2.2ad.1ri.2lc.1vk.138.12r.xj.1h5.1c5.2qx.1gj.t2.lv.rf.18q.1kz.dw.2aq.ia.1i9.k5.199.f4.10y.18a.xf.rk.1g9.1q3.10h.sj.15o.e3.dz.sv.135.w9.yg.aw.2a2.19m.22w.1c8.272.13o.104.1sr.rs.1pb.d5.df.kp.jq.1a7.s8.1ao.ba.rb.in.pz.q8.140.ij.1e7.jl.yk.117.10i.1tn.1oj.1sv.sj.1e3.2so.1c7.1gv.178.107.10n.1dx.1qi.1wp.2bc.218.16r.105.xc.z6.11w.1mc.1y9.17p.1cs.2ij.18c.1ie.nn.16c.1ce.xb.1ei.3j0.ve.14x.1sx.285.1b8.1at.v4.rv.rs.10z.xq.11o.15k.xq.u1.i2.pu.i4.l3.9u.oh.mc.nm.pw.1i3.1h4.pj.111.l4.lb.qq.qf.u0.h4.nk.yf.6h.ij.ds.oy.re.m8.1gl.cz.16z.a1.1f8.1x6.vp.dz.gp.g6.fr.vl.fr.gg.qc.aj.99.go.ij.fz.11a.x5.mo.1u9.h0.m8.10m.1an.2bc.3uw.2gk.124.xb.1uk.1b6.2xj.1os.11a.vs.1i9.1lr.2gv.265.668.1xg.45j.404.2x1.1io.3om.4q2.4mo.1d4.2bp.1pr.166.2y6.2bv.361.2nc.2bc.3g0.7g4.334.2bc.2xo.3uw.6ic.4ig.3uw.23v.1la.2zr.1jt.1cq.27a.1n1.19x.1qg.1jn.1ca.26y.2d6.4v4.4mo.4mo.7ps.1jk.153.1fo.1dm.1s2.1w1.oe.1lb.319.2eg.58p.4mo.3dw.2y2.2xm.1u8.1ko.12n.1e0.2sd.1md.2cl.1q2.372.4mo.48s.b14.3fu.334.334.34i.4nf.4ji.5eg.3uw.2u8.1g1.110.37x.2jo.su.334.3aj.3uw.63f.2bc.2bc.8v4.1ts.ax5.5du.34d.3oc.34j.4si.174.rt.1rp.2b0.37d.1ta.2gh.28a.22z.1nc.1a5.1pa.4dd.3ha.2cs.5mv.4mq.5c2.3uw.1gf.4md.113.10x.21o.2hj.1b3.1cx.1ol.3ar.1fv.17t.1a7.2uj.2we.1jk"],[50001,"1o8.1k1.mo.1wu.2c9.22d.1kb.23n.1b8.1ic.24c.2wz.1mq.1mu.1jx.1z1.o3.190.vp.1h7.th.4mo.1rp.4mo.4mo.7ps.zz.143.21v.1nf.34s.1s3.r9.18t.s1.r9.21w.277.ls.25k.5v1.2bc.1kh.wt.14i.1eq.15o.668.sh.rl.3wi.3vc.43c.3yn.17c.f5.xu.jg.176.19v.1xy.23m.18x.30c.10l.13k.v8.vp.17t.qj.17m.1wr.1la.8t.s7.18d.1l2.152.mx.1c8.1l4.1f5.1xe.rz.2hz.1et.13t.xb.14r.15o.z0.1zo.ur.257.1gb.li.12d.15a.132.1m1.3vu.296.1mg.11m.z0.159.mp.hd.x4.1go.ns.xh.2a7.tt.2vb.1bx.1kh.u3.11i.1y1.24e.2hp.2mn.1w6.3zm.166.14g.1mo.2v9.2rg.2f9.1r0.139.m1.k3.ys.1dy.29k.1mm.22m.3zx.4dr.2h7.22o.tv.rm.1et.2wv.2ar.1t7.ku.12s.10b.1v9.1gu.12m.1b3.tv.1c8.tk.10s.ul.1tt.ka.oi.qb.13f.13f.13k.17h.1uh.ez.en.2x7.2ln.2h8.3h8.ig.n9.27o.18b.hl.nm.uk.11a.1ta.1k4.1eh.wv.1go.1gg.sc.18u.1dz.2aq.vt.2l7.25h.1l5.1kn.1vc.1b4.28i.17t.1d6.1k2.18z.jy.jw.dh.1mx.fr.vp.35w.34z.35w.34z.4so.vf.yx.1bg.1d3.2yc.1tg.8q3.99g.am.2du.rm.rg.xa.2cw.xc.1j6.1if.18z.13a.yz.142.1z5.262.1bj.1y8.ur.u5.16j.1pf.1bi.l8.1il.3vz.2dr.jo.ls.18s.16l.18c.141.219.1yz.1fc.24t.27e.481.1vp.25h.1yq.1zn.1uw.11u.1jp.1pz.39o.t6.1mj.1u5.11l.1vd.1dk.1zb.1ic.3ql.14p.1wq.25x.267.zn.zn.1pf.13z.1j7.r9.1hb.4yp.1lt.1cw.1z4.19z.1og.1j4.1cl.1eg.u8.16s.1en.zu.1hr.1js.19g.303.22j.2oa.180.1v7.2ud.2d7.21s.3g9.vh.v1.284.3lg.3lg.17q.1h3.4mo.1cm.1rv.22i.2mc.2j3.27o.333.1q8.237.2ll.23b.2sp.2ll.2ox.2cf.2f8.2hz.1uo.y4.s9.w6.2dg.2q9.up.1m1.1vz.2n8.192.1eb.z7.2em.2q3.1sd.1gj.348.3vf.2iu.29x.1dc.7oj.4pq.5vb.4mx.5me.5sf.5yf.7ps.yj.q0.10w.13p.18b.2wd.11q.2vx.dd.iv.12p.jh.u9.1uy.w0.3f0.3bj.126.qo.1gj.11k.pu.22h.1z6.rp.y4.y0.xl.1d0.11s.wa.1a6.127.10m.12r.1nh.1fy.yo.1js.162.n4.174.1aj.y4.o8.qz.rh.qa.18s.mr.j3.ii.sr.sx.1jk.17l.mj.zr.uy.wa.19t.2bt.xe.1od.hs.xr.5b.12c.1ab.we.gz.mz.4y.sf.11s.e0.1l7.ew.h6.jz.l0.e8.1cx.p6.17u.bw.1ah.10r.10e.o9.1bc.uv.lq.tl.zb.100.jy.b8.bj.336.10n.na.sq.14r.yr.nm.123.tf.l1.zp.1xc.1vk.31l.zl.2bj.2b9.2fv.17p.y0.so.1ln.29c.1eh.nh.xn.131.qc.186.ff.fc.xq.1bm.la.l8.14f.243.111.xi.qw.1qn.11v.1ur.1jx.1ks.s9.nz.269.1zj.2zd.1pv.18n.2vk.p3.1fh.13v.1lf.1lu.2db.1sr.1k3.26o.1dl.1f3.187.2lh.166.v9.xh.1e3.119.s2.mt.1iu.1k6.1o2.12s.u4.2br.1q3.qv.1e4.1zu.1v4.1vk.1t3.3p7.1ob.14d.1ns.1ef.1e4.12w.2kk.1ba.2jx.1e0.1s5.12w.17r.14s.wz.1qp.183.3fb.188.1gr.2ot.168.1u7.w8.28o.1zd.32z.230.w7.vq.x8.1qh.19f.14o.2r9.qg.1ey.1qr.1p6.3a3.1ov.13d.tz.wk.22v.1qa.2l9.yw.yf.nw.p6.1ly.1jk.1nh.x9.q0.17r.17h.ux.uw.12y.p7.g7.kt.14c.ze.1kh.1eo.18a.1d8.26j.15k.19f.1ym.1j5.1c6.11k.1sd.1jp.1ws.13s.1o5.214.sx.px.20x.14h.1ja.s6.1q8.w8.1ks.so.ub.121.202.1ej.1g1.1s8.2bc.4t1.bih.3uw.3pb.avp.6c7.bko.5eg.79c.6wh.3wd.4pn.55j.4a5.3gg.bko.5ei.52p.578.bcv.6gr.2bc.4j9.5y7.9d2.2bb.2bc.668.73z.5pg.50f.5m7.788.267.642.8h2.8h2.49s.64g.5e8.5e8.2bb.3ih.5ur.6bk.578.4ck.3sg.5fe.23i.e9w.2b8.5oj.6bw.2al.2rk.2rk.5pj.n6e.350.6v9.70t.639.3uw.3uw.2bg.639.2bb.2bd.6gj.2bh.660.578.3bk.65e.359.3o0.44i.4tn.1zq.5ee.4a5.3zu.rs.639.33q.5eg.1k1.15o.dw.3uw.b7p.7qd.898.4l4.5uu.5uu.b4g.2yh.2yh.3uw.51a.51a.5kk.66f.iq9.3n7.4nb.46a.1wb.20p.bih.8xa.7ps.70t.70t.4rv.5p1.6aq.ts.63z.668.5v2.5nu.563.55s.55s.5p3.2ga.32x.42x.5cr.4c2.71b.5zp.5c2.66t.4c8.2bc.2bc.2gn.3ea.2kp.fz6.8hz.3e8.4an.bko.j7e.jag.7sr.2bc.3zx.7qd.5ut.5jp.2wk.5q7.3uw.334.4i3.3uw.4bd.5eu.46h.4i2.6t4.446.5s7.5cg.4bk.5nd.7bf.4rt.23b.2bc.2bc.2bc.2bc.2ba.4mo.4dv.3wn.2bc.1we.4he.2bc.4gz.3wn.3km.4xy.4hi.4mr.2bc.247.3yj.2c6.2bc.3aj.446.4ub.3uw.51.e0.86.is.i1.hg.mn.m4.2c.7h.sg.e3.jb.7r.eq.nf.u0.60.4o.ke.47.47.47.47.b8.4x.dr.dy.rw.rw.59.8j.5z.a5.l3.c0.ik.f7.li.lr.7x.dv.du.dd.5e.91.1b.ce.cc.59.bh.e6.8m.9n.cl.lt.7ip.4mr.4si.4kf.vo.we.13e.17n.1iw.2pi.lp.r6.gw.7x.xz.qt.bq.ls.q1.eh.bx.cr.3c.j7.b8.fz.4k.8p.bg.5w.iy.j3.12o.rs.cz.dp.yz.jk.63.63.7ps.7ps.7ps.40g.3jp.4tw.89k.88a.7s0.83d.668.7ps.2fw.2ev.2fp.7ps.2jb.2dh.2ud.25i.24c.2bt.1pa.17r.1a7.7ps.7pt.5rg.4nl.3vv.7qo.31a.2p0.2k0.49a.3v4.3nl.1ug.1ug.1l6.7s1.7ps.2cp.2f8.2i7.7ps.28q.2be.275.1ma.1oz.1q7.16s.1iq.1e0.78m.7ps.2bc.2bc.2bc.bko.2wu.2wu.2wu.3b4.38f.3uw.3uw.3uw.3uw.7ps.7qa.32n.2gg.2wk.7rv.1v3.1qq.1rb.1zk.1my.1zp.1yn.1oh.1uh.7st.9q.9q.9q.9q.9q.kk.kk.kk.kk.kk.dw.dp.dw.rs.rs.rs.rs.s4.sd.54j.5n8.2n6.21r.1nu.1o5.14u.t6.3f7.2j0.32c.304.189.1gf.18w.18j.1st.1vq.116.kw.3uw.3uw.vr.zx.xc.tc.7d.7r.9d.9w.8s.9p.3b.3b"]].map(([e,t])=>[e,t.split(".").map(i=>parseInt(i,36)/1e3)]);function Tr(e){if(!Number.isSafeInteger(e))return null;for(let[t,i]of Rf)if(e>=t&&e<t+i.length)return i[e-t];return null}import{randomUUID as js}from"node:crypto";function Mr(e){for(let t of e.runtime.scrollControls||[]){let[i,r]=ki(t),n=t.kind==="grid"?Kt(t):Vs(t,i,r),o={offset:n.offset,max:n.max,horizontal:n.horizontal,showBar:t.showScrollBar!==!1,textWidth:n.textWidth??0,lines:n.lines||[],lineHeight:n.lineHeight||0,contentLength:n.length,...t.kind==="textwindow"?{fontSize:n.fontSize}:{}},a=JSON.stringify(o);t._scrollKey!==a&&(t._scrollKey=a,t._scroll=o,t.markPlayDirty())}}function Us(e){return{...e._scroll?{scroll:e._scroll}:{},...e.parent?._gridItems?.includes(e)?{clipToParent:!0}:{}}}function ro(e,t){let i=e._scroll?.max||0;e.kind==="grid"?e.scrollProgress=i?Ar(t,i)/i:0:e._scrollOffset=Ar(t,i),e.markPlayDirty()}var Mf=Object.freeze(Object.values(K).map(e=>Object.freeze({id:e.id,label:e.label,platform:e.platform,width:e.width,height:e.height})));function Nr(e){Mr(e);let t=we({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),i=new Map;function r(n,o,a){let s=Ue(o,n);s.activeInHierarchy=a&&n.active!==!1,i.set(n.Id,s);let c=s.activeInHierarchy;for(let l of n.children)r(l,s,c)}for(let n of e.runtime.roots)r(n,t,!0);return i}function Xs(e,t=Nr(e)){let i=new Map;function r(n,o){let a=t.get(n.Id);if(!a)return;let s=bi(o,a,n);i.set(n.Id,s);for(let c of n.children)r(c,s)}for(let n of e.runtime.roots)r(n,Vt());return i}function Ws(e,t){let i=t.get(e.Id);return{id:e.Id,prefabId:e.prefabIndex,authoringId:e.authoringId,name:e.name,kind:e.kind,typeofName:e.typeofName,instantiated:!e.authoringId,active:!!e.active,visible:!!e.visible,activeInHierarchy:!!i?.activeInHierarchy,raycastTarget:e.raycastTarget!==!1,interactable:e.interactable!==!1,pressed:e.pressed===!0,...e._scroll?{scrollOffset:e._scroll.offset,scrollMax:e._scroll.max}:{},...e.kind==="grid"?{itemCount:e.itemCount,scrollProgress:e.scrollProgress}:{},anchoredPositionX:e.anchoredPositionX,anchoredPositionY:e.anchoredPositionY,sizeDeltaX:e.sizeDeltaX,sizeDeltaY:e.sizeDeltaY,localScaleX:e.localScaleX,localScaleY:e.localScaleY,localScaleZ:e.localScaleZ,localRotationZ:e.localRotationZ,text:e.kind==="textbox"||e.kind==="textwindow"?e.text??"":null,fontSize:e.kind==="textbox"||e.kind==="textwindow"?e.fontSize:null,adaptiveFontSize:e.kind==="textbox"||e.kind==="textwindow"?e.adaptiveFontSize===!0:null,minimumFontSize:e.kind==="textbox"||e.kind==="textwindow"?e.minimumFontSize:null,fontColor:e.kind==="textbox"||e.kind==="textwindow"?e.fontColor:null,bgColor:e.kind==="textbox"||e.kind==="textwindow"?e.bgColor:null,enableOutline:e.kind==="textbox"||e.kind==="textwindow"?e.enableOutline===!0:null,outlineColor:e.kind==="textbox"||e.kind==="textwindow"?e.outlineColor:null,imageId:e.kind==="image"?e.imageId??0:null,imageSource:e.kind==="image"?ke(e.imageSource):null,imageType:e.kind==="image"?e.imageType==null?null:ze(e.imageType):null,primitive:e.kind==="image"?Dt(e.imageId,e.imageSource):null,imageColor:e.kind==="image"?e.imageColor:null,enableMask:e.kind==="image"?e.enableMask===!0:null,enableSoftEdge:e.kind==="image"?e.enableSoftEdge===!0:null,softEdgeMode:e.kind==="image"?e.softEdgeMode:null,softEdgeWidthX:e.kind==="image"?e.softEdgeWidthX:null,softEdgeWidthY:e.kind==="image"?e.softEdgeWidthY:null,horizontalSoftRange:e.kind==="image"?e.horizontalSoftRange:null,verticalSoftRange:e.kind==="image"?e.verticalSoftRange:null,enableFill:e.kind==="image"?e.enableFill===!0:null,fillType:e.kind==="image"?e.fillType:null,fillHorizontalType:e.kind==="image"?e.fillHorizontalType:null,fillVerticalType:e.kind==="image"?e.fillVerticalType:null,fillRadial90Type:e.kind==="image"?e.fillRadial90Type:null,fillRadialType:e.kind==="image"?e.fillRadialType:null,reverseMaskArea:e.kind==="image"?e.reverseMaskArea===!0:null,fillAmount:e.kind==="image"?e.fillAmount:null,box:i?{left:i.left,bottom:i.bottom,width:i.width,height:i.height}:null,children:e.children.map(r=>Ws(r,t))}}function Nf(){return{pointerDownControl:null,pointerDownPosition:null,pointerLastPosition:null,pointerDragging:!1,pointerHoverControl:null,pointerScroll:null,hoveredControl:null,selectedControl:null,stateRestores:new Map,viewCache:null}}function Ff(e,t,i,r){let n=Ti({canvasWidth:e.canvasWidth,canvasHeight:e.canvasHeight,device:e.device,audioDuration:Tr,canSelectImageType:Wo,...r?{language:r}:{}});for(let o of[...e.templates||[],...t?.templates||[]])Number.isSafeInteger(o.prefabIndex)&&o.prefabIndex>0&&n.registerTemplate(o.prefabIndex,o);for(let o of i){let a=o.path||o.id,s=o.source||"";a&&s&&n.registerScriptFile(a,s)}return n}var Of=["pointerDownControl","pointerDownPosition","pointerLastPosition","pointerDragging","pointerHoverControl","pointerScroll","hoveredControl","selectedControl","stateRestores","viewCache"];function zf(e){Object.defineProperty(e,"runtime",{configurable:!0,enumerable:!0,get(){return e.runtimes[e.viewPlayerIndex-1]}});for(let t of Of)Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){return e.views[e.viewPlayerIndex-1][t]},set(i){e.views[e.viewPlayerIndex-1][t]=i}})}function Ks(e,{templatesProject:t=null,scripts:i=[],sceneScripts:r=null,templateScripts:n=null,serverConfig:o=null,canvasId:a="",playerCount:s=1,viewPlayerIndex:c=1,language:l=""}={}){let u=r||i,f=n||i,h=Zn(e,u,a),p=t?Zn(t,f,a):null,m=At(s),b=et(c,m),w=zs({playerCount:m,viewPlayerIndex:b});o&&w.loadConfig({...o,playerCount:m,viewPlayerIndex:b});let y=[];for(let P=0;P<m;P+=1)y.push(Ff(h,p,i,l));w.attachRuntimes(y);for(let P of y)P.addRoot(h.root);let v={audioSessionId:js(),runtimes:y,views:y.map(()=>Nf()),playerCount:m,viewPlayerIndex:b,server:w,compiled:h,mountError:y.find(P=>P.mountErrors[0])?.mountErrors[0]||null,debugPaused:!1,history:{events:[]},recording:!0};zf(v);let _=v.viewPlayerIndex;for(let P=1;P<=m;P+=1)v.viewPlayerIndex=P,Xf(v);return v.viewPlayerIndex=_,v}function so(e,t){if(!e)throw new Error("play session has not started");let i=et(t,e.playerCount);return i===e.viewPlayerIndex||(dt(e,{kind:"view",payload:{playerIndex:i}}),e.viewPlayerIndex=i,e.viewCache=null,e.server&&e.server.setViewPlayerIndex(i)),i}function dt(e,t){!e?.recording||!e.history||Gs(e.history,{...t,source:t.source||"user"},e.runtime.clock.time)}function $f(e){return e?.history?.events||[]}var lo=new Set(["image","textbox","textwindow","button","grid"]);function Df(e,t){let i=Ie(t,e.centerX,e.centerY);return{centerX:i.x,centerY:i.y,scaleX:Math.hypot(t.a,t.b),scaleY:Math.hypot(t.c,t.d),rotationZ:Math.atan2(t.b,t.a)*180/Math.PI,matrix:{a:t.a,b:t.b,c:t.c,d:t.d,tx:i.x,ty:i.y}}}function ze(e){return typeof e=="string"?e:e?.Name}function qs(e){return{fillType:ze(e.fillType),fillHorizontalType:ze(e.fillHorizontalType),fillVerticalType:ze(e.fillVerticalType),fillAmount:e.fillAmount}}function Gf(e,t,i){let r=Math.abs(t.width*i.scaleX),n=Math.abs(t.height*i.scaleY),o={id:e.Id,kind:e.kind,name:e.name,left:i.centerX-r/2,bottom:i.centerY-n/2,width:r,height:n,sourceWidth:t.width,sourceHeight:t.height,rotationZ:i.rotationZ,matrix:i.matrix,pressed:e.pressed===!0,...Us(e)};return e.kind==="image"&&(o.imageSource=ke(e.imageSource),o.imageType=e.imageType==null?null:ze(e.imageType),o.primitive=Dt(e.imageId,o.imageSource),o.imageColor=e.imageColor,o.imageId=e.imageId,Object.assign(o,qs(e))),(e.kind==="textbox"||e.kind==="textwindow")&&(o.text=e.text??"",o.fontSize=e.fontSize,o.adaptiveFontSize=e.adaptiveFontSize===!0,o.minimumFontSize=e.minimumFontSize,o.textLayout=Je(e,t.width,t.height),o.fontColor=e.fontColor,o.bgColor=e.bgColor,o.enableOutline=e.enableOutline===!0,o.outlineColor=e.outlineColor,o.horizontalAlignment=ze(e.horizontalAlignment),o.verticalAlignment=ze(e.verticalAlignment)),o}function Vf(e,t=Nr(e)){let i=[],r=Xs(e,t);function n(o,a=[],s=[]){let c=t.get(o.Id);if(!c||o.visible===!1||!c.activeInHierarchy)return;let l=r.get(o.Id);if(!l)return;let u=Df(c,l),f=o.kind==="image"&&o.enableMask===!0?Ut({...Js(o,c),id:o.Id},cr(l,c.centerX,c.centerY)):null,h=f?[...s,f]:s,p=()=>i.push({...Gf(o,c,u),...a.length?{clipPolygons:a}:{},...h.length?{masks:h}:{}});lo.has(o.kind)&&o.kind!=="grid"&&p();let m=o.children||[];for(let b=m.length-1;b>=0;b-=1){let w=o._gridItems?.includes(m[b])?[...a,[[c.left,c.bottom],[c.right,c.bottom],[c.right,c.top],[c.left,c.top]].map(([y,v])=>Ie(l,y,v))]:a;n(m[b],w,h)}o.kind==="grid"&&p()}for(let o of e.runtime.roots)n(o);return i}function Js(e,t){let i={kind:e.kind,name:e.name,sourceWidth:t.width,sourceHeight:t.height,pressed:e.pressed===!0,...Us(e)};return e.kind==="image"&&(i.imageSource=ke(e.imageSource),i.imageType=e.imageType==null?null:ze(e.imageType),i.primitive=Dt(e.imageId,i.imageSource),i.imageColor=e.imageColor,i.imageId=e.imageId,Object.assign(i,qs(e),{enableMask:e.enableMask===!0,enableSoftEdge:e.enableSoftEdge===!0,softEdgeMode:ze(e.softEdgeMode)||"Percentage",softEdgeWidthX:e.softEdgeWidthX,softEdgeWidthY:e.softEdgeWidthY})),(e.kind==="textbox"||e.kind==="textwindow")&&(i.text=e.text??"",i.fontSize=e.fontSize,i.adaptiveFontSize=e.adaptiveFontSize===!0,i.minimumFontSize=e.minimumFontSize,i.textLayout=Je(e,t.width,t.height),i.fontColor=e.fontColor,i.bgColor=e.bgColor,i.enableOutline=e.enableOutline===!0,i.outlineColor=e.outlineColor,i.horizontalAlignment=ze(e.horizontalAlignment),i.verticalAlignment=ze(e.verticalAlignment)),i}function Lf(e,t,i){let r=nn(e,t),n=Ie(r,e.centerX,e.centerY);return{a:r.a,b:r.b,c:r.c,d:r.d,tx:n.x-(i?i.centerX:0),ty:n.y-(i?i.centerY:0)}}function Qs(e){let t=e.matrix;return[e.parent,e.z,e.group?1:0,t.a,t.b,t.c,t.d,t.tx,t.ty,e.kind,e.name,e.sourceWidth,e.sourceHeight,e.pressed,e.primitive,e.imageColor,e.imageId,e.imageSource,e.imageType,e.fillType,e.fillHorizontalType,e.fillVerticalType,e.fillAmount,e.enableMask,e.enableSoftEdge,e.softEdgeMode,e.softEdgeWidthX,e.softEdgeWidthY,e.text,e.fontSize,e.fontColor,e.bgColor,e.adaptiveFontSize,e.minimumFontSize,JSON.stringify(e.textLayout),e.enableOutline,e.outlineColor,e.horizontalAlignment,e.verticalAlignment,JSON.stringify(e.scroll),e.clipToParent].join(" ")}function Zs(e,t,i,r,n,o){return{id:e.Id,parent:t,z:n,group:o>=16,matrix:Lf(r,e,i),...Js(e,r)}}function Bf(e){let t=we({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),i=new Set,r=new Map,n=new Map;function o(c,l,u){let f=Ue(l,c);if(f.activeInHierarchy=u&&c.active!==!1,n.set(c.Id,f),c.visible===!1||!f.activeInHierarchy)return!1;let h=c.children||[],p=lo.has(c.kind),m=0;for(let b=0;b<h.length;b+=1)o(h[b],f,f.activeInHierarchy)&&(p=!0,m+=1);return p?(i.add(c.Id),r.set(c.Id,m),!0):!1}function a(c,l,u,f){if(!i.has(c.Id))return;let h=n.get(c.Id);s.push(Zs(c,l,u,h,f,r.get(c.Id)||0));let p=c.children||[];for(let m=0;m<p.length;m+=1)a(p[m],c.Id,h,m)}let s=[];for(let c=0;c<e.runtime.roots.length;c+=1)o(e.runtime.roots[c],t,!0),a(e.runtime.roots[c],null,null,c);return{nodes:s,childCounts:r}}function oo(e){let t=e._playChildDirty===!0||e._playDeepDirty===!0;if(e._playDirty=!1,e._playChildDirty=!1,e._playDeepDirty=!1,!t)return;let i=e.children;for(let r=0;r<i.length;r+=1)oo(i[r])}function Hf(e,t){let i=we({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),r=[],n=[],o=t.count,a=e.runtime._playRemoved||[];for(let l=0;l<a.length;l+=1){let u=a[l];t.fingerprints.has(u)&&(n.push(u),t.fingerprints.delete(u),t.childCounts.delete(u),o-=1)}e.runtime._playRemoved=[];function s(l){t.fingerprints.has(l.Id)&&(n.push(l.Id),t.fingerprints.delete(l.Id),t.childCounts.delete(l.Id),o-=1);let u=l.children;for(let f=0;f<u.length;f+=1)s(u[f])}function c(l,u,f,h,p,m){let b=m||l._playDeepDirty===!0,w=b||l._playDirty===!0,y=b||l._playChildDirty===!0;if(!w&&!y)return;if(!(p&&l.active!==!1)||l.visible===!1){s(l);return}let _=Ue(u,l),P=t.childCounts.get(l.Id)||0;if(y){P=0;let A=l.children;for(let I=0;I<A.length;I+=1)c(A[I],_,l.Id,I,!0,b),t.fingerprints.has(A[I].Id)&&(P+=1)}if(!(lo.has(l.kind)||P>0)){t.fingerprints.has(l.Id)&&(n.push(l.Id),t.fingerprints.delete(l.Id),t.childCounts.delete(l.Id),o-=1);return}let O=t.childCounts.get(l.Id);t.childCounts.set(l.Id,P);let L=P>=16!=(O||0)>=16;if(!w&&!L&&t.fingerprints.has(l.Id))return;let z=Zs(l,f,u===i?null:u,_,h,P),S=Qs(z);t.fingerprints.get(z.id)!==S&&(t.fingerprints.has(z.id)||(o+=1),t.fingerprints.set(z.id,S),r.push(z))}for(let l=0;l<e.runtime.roots.length;l+=1)c(e.runtime.roots[l],i,null,l,!0,!1);return t.count=o,{changed:r,removed:n,count:o}}function Yf(e,t){let i=e.viewCache||(e.viewCache={rev:0,fingerprints:new Map,childCounts:new Map,count:0}),r=Number(t);if(!(Number.isFinite(r)&&r===i.rev&&i.fingerprints.size>0)){let{nodes:c,childCounts:l}=Bf(e);i.rev+=1,i.fingerprints=new Map(c.map(u=>[u.id,Qs(u)])),i.childCounts=l,i.count=c.length;for(let u of e.runtime.roots)oo(u);return{format:"tree-v1",revision:i.rev,reset:!0,count:c.length,nodes:c}}let{changed:o,removed:a,count:s}=Hf(e,i);i.rev+=1;for(let c of e.runtime.roots)oo(c);return{format:"tree-v1",revision:i.rev,reset:!1,count:s,changed:o,removed:a}}function co(e,{inspect:t=!1,view:i=!1,paint:r=!1,sceneRev:n,compact:o=!1}={}){Mr(e),e.audioSessionId||=js();let a=e.runtime,s=e.compiled,[c,l]=[a.canvasWidth,a.canvasHeight];e.server&&e.server.setClock(a.clock.time);let u=o?a.logs.slice(-100):a.logs,f=$f(e),h=e.server?e.server.snapshot():{vars:{},inbound:[],outbound:[],logs:[]};o&&(h.inbound=h.inbound.slice(-100),h.outbound=h.outbound.slice(-100),h.logs=h.logs.slice(-100));let p={canvasId:s.canvasId,platform:s.platform,device:a.device,canvasWidth:c,canvasHeight:l,canvasPresets:Mf,playerCount:e.playerCount||1,viewPlayerIndex:e.viewPlayerIndex||1,players:Array.from({length:e.playerCount||1},(m,b)=>({index:b+1,label:`\u73A9\u5BB6${b+1}`,entityType:`Player${b+1}`})),time:a.clock.time,frame:a.clock.frame,paused:!!e.debugPaused,levelTimePaused:!!a.clock.paused,audio:{sessionId:e.audioSessionId,playerIndex:e.viewPlayerIndex||1,...a.audioSnapshot()},mountError:e.mountError||a.mountErrors[0]||null,logs:u.map(m=>({source:"client",level:m.level,text:m.text,time:m.time})),tree:[],paint:[],scene:null,server:h,history:(o?f.slice(-100):f).map(m=>({t:m.t,source:m.source||"user",kind:m.kind,payload:m.payload||{}}))};if(t||r){let m=Nr(e);t&&(p.tree=a.roots.map(b=>Ws(b,m))),r&&(p.paint=Vf(e,m))}return i&&(p.scene=Yf(e,n)),Gt(p),p}function Fr(e,t=1/30){let i=e.runtimes||(e.runtime?[e.runtime]:[]);for(let r of i)r.step(t);e.server&&(e.server.setClock(e.runtime.clock.time),e.server.flush())}function uo(e,t){dt(e,{kind:"key",payload:{typeName:String(t)}}),e.runtime.injectKey(t)}function jf(e,t){let i=null;for(let r of e.runtime.roots)Be(r,n=>{!i&&n.name===t&&(i=n)});return i}function fo(e,t){dt(e,{kind:"click",payload:{name:String(t)}});let i=jf(e,t);i&&ho(i)&&(i.kind==="button"||i.kind==="cursor")&&i.SimulateCursorClick()}function Uf(e,t){return!e||!t?null:e.children.find(i=>i.authoringId===t||i.Id===t)||null}var el={unavailable:"unavailableChildId",hover:"hoverChildId",pressed:"pressedChildId",selected:"selectedChildId"};function tl(e,t){let i=[];for(let[r,n]of Object.entries(el)){let o=t[n]?Uf(t,t[n]):null;o&&i.push({state:r,child:o})}return i}function Xf(e){for(let t of e.runtime.roots)Be(t,i=>{if(i.kind==="button"){for(let{child:r}of tl(e,i))e.stateRestores.has(r.Id)||e.stateRestores.set(r.Id,{child:r,active:r.active,visible:r.visible}),r.active=!0,r.visible=!1,typeof r.markPlayDirty=="function"&&r.markPlayDirty(!0);Oi(e,i)}})}function Oi(e,t){if(!t||t.kind!=="button")return;let i=null;t.interactable===!1?i="unavailable":t.pressed===!0?i="pressed":e.hoveredControl===t?i="hover":e.selectedControl===t&&(i="selected");for(let r of tl(e,t))r.child.active=!0,r.child.visible=r.state===i,typeof r.child.markPlayDirty=="function"&&r.child.markPlayDirty(!0)}function no(e){if(!e)return null;let t=e.parent;return t?.kind==="button"&&Object.values(el).map(r=>t[r]).filter(Boolean).includes(e.authoringId)?t:e}function ho(e){return e.kind==="button"?e.raycastTarget!==!1&&e.interactable!==!1:e.kind==="cursor"||e.kind==="grid"?e.raycastTarget!==!1:e.kind==="textwindow"?e.interactable!==!1:e.raycastTarget===!0}function il(e){return e.kind==="container"||e.kind==="grid"||e.kind==="textwindow"||e.kind==="reference"||e.kind==="button"}function rl(e,t){let i=e.Id,r=t.get(i);if(r!==void 0)return r;let n=ho(e);if(!n&&il(e)){let o=e.children;for(let a=0;a<o.length;a+=1)if(rl(o[a],t)){n=!0;break}}return t.set(i,n),n}function Pr(e,t,i){Mr(e);let r=we({width:e.runtime.canvasWidth,height:e.runtime.canvasHeight}),n=new Map;function o(s,c,l,u){if(!u||s.active===!1||s.visible===!1||!rl(s,n))return null;let f=Ue(c,s),h=bi(l,f,s),p=Xe(h);if(!p)return null;let m=Ie(p,t,i);if(m.x<f.left||m.x>f.right||m.y<f.bottom||m.y>f.top)return null;if(Rr(s)){let b=Zt(s._scroll,f.width,f.height)?.track,w=m.x-f.centerX,y=f.centerY-m.y;if(b&&w>=b.x&&w<=b.x+b.width&&y>=b.y&&y<=b.y+b.height)return s}if(il(s))for(let b=0;b<s.children.length;b+=1){let w=o(s.children[b],f,h,!0);if(w)return w}return ho(s)?s:null}let a=Vt();for(let s=e.runtime.roots.length-1;s>=0;s-=1){let c=o(e.runtime.roots[s],r,a,!0);if(c)return c}return null}function ei(e,t,i,{dragging:r=!1,press:n=null,previous:o=null}={}){let a=n||{x:t,y:i},s=o||{x:t,y:i};return e.runtime.makeCursorEventData({x:t,y:i,pressX:a.x,pressY:a.y,deltaX:t-s.x,deltaY:i-s.y,dragging:r})}function ao(e,t,i){t.kind==="grid"||t.kind==="textwindow"||(t.pressed=i,typeof t.markPlayDirty=="function"&&t.markPlayDirty(),Oi(e,t))}function Rr(e){if(!e?.alive||!e.activeInHierarchy||e.interactable===!1||e.raycastTarget===!1)return!1;for(let t=e;t;t=t.parent)if(t.visible===!1)return!1;return e._scroll?.max>0}function Bs(e){for(let t=e;t;t=t.parent)if(Rr(t))return t;return null}function Hs(e,t,i,r){let n=Nr(e),o=n.get(t.Id),a=Xs(e,n).get(t.Id),s=a&&Xe(a);if(!o||!s)return null;let c=Ie(s,i,r);return{x:c.x-o.centerX,y:o.centerY-c.y,width:o.width,height:o.height}}function Ys(e,t,i){let r=e.pointerDownControl;if(r?.alive){let n=ei(e,t,i,{dragging:e.pointerDragging,press:e.pointerDownPosition,previous:e.pointerLastPosition});e.runtime.injectCursor(r,"CursorUp",n),e.pointerDragging&&!e.pointerScroll&&e.runtime.injectCursor(r,"CursorEndDrag",n),ao(e,r,!1)}e.pointerDownControl=null,e.pointerScroll=null,e.pointerDownPosition=null,e.pointerDragging=!1,e.pointerLastPosition={x:t,y:i}}function zi(e,t,i,r,n={}){let o=Number(i),a=Number(r);if(!Number.isFinite(o)||!Number.isFinite(a))throw new Error("pointer coordinates must be finite");e.runtime.cursor.x=o,e.runtime.cursor.y=a;let s=Number(n.deltaX??0),c=Number(n.deltaY??0);if(t==="wheel"&&(!Number.isFinite(s)||!Number.isFinite(c)))throw new Error("wheel deltas must be finite");if(n.silent||dt(e,{kind:"pointer",payload:{type:t,x:o,y:a,...t==="wheel"?{deltaX:s,deltaY:c}:{}}}),t==="wheel"){let l=Pr(e,o,a),u=Bs(l);if(u){let f=u._scroll.horizontal&&s||c;ro(u,u._scroll.offset+f)}return l}if(t==="cancel")return Ys(e,o,a),null;if((t==="move"||t==="up")&&e.pointerScroll&&!Rr(e.pointerScroll.control)&&Ys(e,o,a),t==="move"){let l=e.pointerLastPosition||{x:o,y:a},u=e.pointerHoverControl,f=no(Pr(e,o,a)),h=ei(e,o,a,{previous:l});u&&u!==f&&e.runtime.injectCursor(u,"CursorExit",h),f&&u!==f&&e.runtime.injectCursor(f,"CursorEnter",h),e.pointerHoverControl=f;let p=e.hoveredControl;e.hoveredControl=f?.kind==="button"?f:null,p&&p!==e.hoveredControl&&Oi(e,p),e.hoveredControl&&Oi(e,e.hoveredControl);let m=e.pointerDownControl,b=e.pointerScroll;if(b)if(!Rr(b.control))e.pointerScroll=null;else{let w=Hs(e,b.control,o,a);if(w){let y=b.control._scroll,v=y.horizontal?w.x-b.start.x:w.y-b.start.y,_=Zt(y,w.width,w.height)?.travel||0,P=b.bar?_?v*y.max/_:0:-v;ro(b.control,b.offset+P)}}if(m?.alive){let w=e.pointerDownPosition||l,y=Math.hypot(o-w.x,a-w.y)>5;!e.pointerDragging&&y&&(b||e.runtime.injectCursor(m,"CursorBeginDrag",ei(e,o,a,{press:w,previous:l,dragging:!1})),e.pointerDragging=!0),e.pointerDragging&&!b&&e.runtime.injectCursor(m,"CursorDrag",ei(e,o,a,{press:w,previous:l,dragging:!0}))}return e.pointerLastPosition={x:o,y:a},f}if(t==="down"){let l=no(Pr(e,o,a));e.pointerDownControl=l,e.pointerDownPosition={x:o,y:a},e.pointerLastPosition={x:o,y:a},e.pointerDragging=!1,e.pointerScroll=null;let u=Bs(l);if(u){let f=Hs(e,u,o,a),h=f&&Zt(u._scroll,f.width,f.height),p=b=>f.x>=b.x&&f.x<=b.x+b.width&&f.y>=b.y&&f.y<=b.y+b.height,m=h&&p(h.track);if(m&&!p(h.thumb)){let b=u._scroll.horizontal?f.x-h.track.x-h.thumb.width/2:f.y-h.track.y-h.thumb.height/2;ro(u,h.travel?b/h.travel*u._scroll.max:0),Mr(e)}f&&(e.pointerScroll={control:u,start:f,offset:u._scroll.offset,bar:!!m})}return l&&(ao(e,l,!0),e.runtime.injectCursor(l,"CursorDown",ei(e,o,a))),l}if(t==="up"){let l=e.pointerDownControl,u=no(Pr(e,o,a));if(l?.alive){let f=ei(e,o,a,{press:e.pointerDownPosition,previous:e.pointerLastPosition,dragging:e.pointerDragging});if(e.runtime.injectCursor(l,"CursorUp",f),e.pointerDragging)e.pointerScroll||e.runtime.injectCursor(l,"CursorEndDrag",f);else if(u===l&&!e.pointerScroll?.bar){e.runtime.injectCursor(l,"CursorClick",f);let h=e.selectedControl;e.selectedControl=l.kind==="button"?l:null,h&&h!==e.selectedControl&&Oi(e,h)}ao(e,l,!1)}return e.pointerDownControl=null,e.pointerDownPosition=null,e.pointerLastPosition={x:o,y:a},e.pointerDragging=!1,e.pointerScroll=null,u}if(t==="click")return zi(e,"down",o,a,{silent:!0}),zi(e,"up",o,a,{silent:!0});throw new Error(`unknown pointer type ${t}`)}function po(e,t,i,r){if(!e?.server)throw new Error("play session has no server");return dt(e,{kind:"serverSet",payload:{entityType:t,name:i,value:r,playerIndex:e.viewPlayerIndex}}),e.server.setVar(t,i,r,{playerIndex:e.viewPlayerIndex})}function nl(e,t,i){if(!e?.server)throw new Error("play session has no server");let r=e.server.getVar(t,i,{playerIndex:e.viewPlayerIndex});return r===void 0?null:r}function mo(e,t,i=[],r="PlayerSelf"){if(!e?.server)throw new Error("play session has no server");return dt(e,{kind:"serverSend",payload:{name:t,params:i,target:r,playerIndex:e.viewPlayerIndex}}),e.server.sendToClient(t,i,{target:r,playerIndex:e.viewPlayerIndex})}function Or(e){return{snapshot:t=>co(e,t),step:t=>Fr(e,t),pointer:(t,i,r,n)=>zi(e,t,i,r,n),key:t=>uo(e,t),click:t=>fo(e,t),view:t=>so(e,t),pause:()=>{dt(e,{kind:"pause",payload:{}}),e.debugPaused=!0},resume:()=>{dt(e,{kind:"resume",payload:{}}),e.debugPaused=!1},serverSet:(t,i,r)=>po(e,t,i,r),serverSend:(t,i,r)=>mo(e,t,i,r)}}function go(e){e?.server&&e.server.destroy();let t=e?.runtimes||(e?.runtime?[e.runtime]:[]);for(let i of t)i.destroy()}function yo(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ol(e,t){for(let i of e||[])t(i),i.children?.length&&ol(i.children,t)}function bo(e,{id:t,name:i}){let r=null;return ol(e,n=>{r||(t&&String(n.id)===String(t)||!t&&i&&n.name===i)&&(r=n)}),r}function Wf(e,t){if(e){if(Object.prototype.hasOwnProperty.call(e,t))return e[t];if(e.box&&Object.prototype.hasOwnProperty.call(e.box,t))return e.box[t]}}function Kf(e){return{var(t,i){return e.server?.vars?.[t]?.[i]?.value??null},logs(){return(e.logs||[]).map(t=>t.text)},logContains(t){return(e.logs||[]).some(i=>String(i.text||"").includes(String(t)))},serverLogs(){return(e.server?.logs||e.serverLogs||[]).map(t=>t.text)},serverLogContains(t){return(e.server?.logs||e.serverLogs||[]).some(i=>String(i.text||"").includes(String(t)))},control(t){let i=bo(e.tree,{name:String(t)});return i?{id:i.id,name:i.name,kind:i.kind,active:i.active,visible:i.visible,pressed:i.pressed,text:i.text,interactable:i.interactable}:null},signals(t){let i=t==="outbound"?"outbound":"inbound";return(e.server?.[i]||[]).map(r=>({name:r.name,values:r.values}))}}}function qf(e,t){if(e.kind==="log"){let i=e.source==="server"?t.server?.logs||t.serverLogs||[]:t.logs||[];return i.some(n=>e.level&&n.level!==e.level?!1:String(n.text||"").includes(e.contains))?{ok:!0,actual:e.contains}:{ok:!1,actual:i.map(n=>n.text).slice(-8),expected:e.contains}}if(e.kind==="control"){let i=bo(t.tree,e);if(!i)return{ok:!1,actual:null,expected:e.equals,message:`control not found: ${e.id||e.name}`};let r=Wf(i,e.field);return yo(r,e.equals)?{ok:!0,actual:r}:{ok:!1,actual:r,expected:e.equals}}if(e.kind==="var"){let i=t.server?.vars?.[e.entityType],n=!i||!Object.prototype.hasOwnProperty.call(i,e.name)?null:i[e.name].value;return yo(n,e.equals)?{ok:!0,actual:n}:{ok:!1,actual:n,expected:e.equals}}if(e.kind==="signal"){let i=e.direction==="outbound"?t.server?.outbound||[]:t.server?.inbound||[],r=i.find(n=>n.name===e.name&&(e.values===void 0||yo(n.values,e.values)));return r?{ok:!0,actual:r.values}:{ok:!1,actual:i.map(n=>({name:n.name,values:n.values})),expected:{name:e.name,values:e.values??null}}}if(e.kind==="tree"){let i=!!bo(t.tree,{name:e.name});return i===e.exists?{ok:!0,actual:i}:{ok:!1,actual:i,expected:e.exists}}return{ok:!1,message:`unsupported assert kind ${e.kind}`}}function Jf(e,t){let i=Ti();try{return i.evalQueryScript(e,Kf(t)),{ok:!0,actual:!0}}catch(r){return{ok:!1,message:r?.message||String(r)}}finally{i.destroy()}}function al(e,t){return e.kind==="lua"?Jf(e.source,t):qf(e,t)}function Qf(e,t){let i=t>0?t:Pt;return Math.round((e+i)*1e9)/1e9}function Zf(e,t){let i=t.payload||{};if(t.kind==="pointer")e.pointer(i.type,i.x,i.y,i);else if(t.kind==="key")e.key(i.typeName);else if(t.kind==="click")e.click(i.name);else if(t.kind==="pause")e.pause();else if(t.kind==="resume")e.resume();else if(t.kind==="serverSet")e.serverSet(i.entityType,i.name,i.value);else if(t.kind==="serverSend")e.serverSend(i.name,i.params,i.target);else if(t.kind==="view")e.view(i.playerIndex);else throw new Error(`unsupported event kind: ${t.kind}`)}function ed(e,t){let i=al(e,t);return{kind:e.kind,at:Number(e.at||0),ok:!!i.ok,actual:i.actual??null,expected:i.expected??null,message:i.message||""}}function sl(e,t){let i=Fi(t),r=i.events.slice().sort((y,v)=>y.t-v.t),n=i.asserts.slice(),o=i.dt||Pt,a=r.reduce((y,v)=>Math.max(y,v.t),0),s=n.reduce((y,v)=>Math.max(y,Number(v.at||0)),0),c=Math.max(a,s),l=0,u=[],f=0,h=n.some(y=>y.kind==="control"||y.kind==="tree"||y.kind==="lua"),p=e.snapshot({inspect:h}),m=()=>{for(;l<r.length&&r[l].t<=f+1e-9;)Zf(e,r[l]),l+=1,p=e.snapshot({inspect:h})},b=()=>{for(let y of n)if(!y._done&&Number(y.at||0)<=f+1e-9){let v=ed(y,p);if(u.push(v),y._done=!0,!v.ok)return{passed:!1,failedAt:f,frame:p.frame||0,results:u,snapshot:p}}return null};m();let w=b();if(w)return vo(i,w);for(;f+1e-9<c;){e.step(o),f=Qf(f,o),p=e.snapshot({inspect:h}),m();let y=b();if(y)return vo(i,y)}return vo(i,{passed:u.every(y=>y.ok),failedAt:null,frame:p.frame||0,results:u,snapshot:p})}function vo(e,t){return H({format:e.format,name:e.name,passed:t.passed,failedAt:t.failedAt,frame:t.frame,results:t.results,snapshot:{time:t.snapshot?.time??0,frame:t.snapshot?.frame??0,logs:t.snapshot?.logs||[],serverLogs:t.snapshot?.serverLogs||t.snapshot?.server?.logs||[],server:t.snapshot?.server||{vars:{},inbound:[],outbound:[],logs:[]}}})}function wo(e){return Array.isArray(e)?e.slice():[]}import{createHash as td}from"node:crypto";var ll=e=>td("sha256").update(JSON.stringify(e.map(({id:t,path:i,source:r})=>({id:t,path:i,source:r})))).digest("hex");function cl(e){let t=new Map;for(let r of e){let n=`${r.controlAsset}:${r.controlId}`,o=t.get(n);if(o&&o.newGuid!==r.oldGuid)throw new Error("\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u4E0D\u8FDE\u7EED\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9");t.set(n,{oldGuid:o?.oldGuid??r.oldGuid,newGuid:r.newGuid})}let i=new Map;for(let{oldGuid:r,newGuid:n}of t.values()){if(i.has(r))throw new Error("\u591A\u4E2A\u63A7\u4EF6\u5171\u7528\u65E7\u7D22\u5F15\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6309\u63A7\u4EF6\u8EAB\u4EFD\u6838\u5BF9");i.set(r,n)}return new Map([...i].filter(([r,n])=>r!==n))}function ul(e,t){let i=[],r=new Map([...t].map(([c,l])=>[String(c),l])),n=1,o=0,a=0;return{source:e.replace(/\d+/g,(c,l)=>{if(!r.has(c))return c;for(;o<l;o++)e[o]===`
|
|
112
116
|
`&&(n++,a=o+1);let u=r.get(c),f=l+c.length,h=e.indexOf(`
|
|
113
|
-
`,f);return i.push({start:l,end:f,oldGuid:Number(c),newGuid:u,line:n,before:e.slice(a,h<0?e.length:h).trim()}),String(u)}),edits:i,issues:[]}}var Lu={Level:"\u5173\u5361",PlayerSelf:"\u5F53\u524D\u73A9\u5BB6",AvatarSelf:"\u5F53\u524D\u89D2\u8272",...Object.fromEntries(St.map((e,t)=>[e,`\u73A9\u5BB6${t+1}`])),...Object.fromEntries(Array.from({length:8},(e,t)=>[`Avatar${t+1}`,`\u89D2\u8272${t+1}`]))};function Xu(e,t=1){let i=e?.vars||{},r=[],n=Number(t)>0?Number(t):1,o=["Level","PlayerSelf","AvatarSelf"];if(n>1)for(let s=1;s<=n;s+=1)o.push(`Player${s}`,`Avatar${s}`);let a=new Set;for(let s of o){if(a.has(s)||!i[s])continue;a.add(s);let c=i[s]||{};for(let l of Object.keys(c))r.push(Y({entityType:s,entityLabel:Lu[s]||s,name:l,type:c[l]?.type||"",value:c[l]?.value??null}))}return r}var Ct="qxqy-simulator-save",Wu="qxqy-simulator-scripts",ae="server-control-template",U="client-control-template",Xn={[ae]:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F",[U]:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"};function It(e){return e===U?"client":"server"}function Wt(e){if(!(typeof e=="number"||typeof e=="string"&&/^\d+$/.test(e.trim()))||!Oe(e))throw new Error("\u63A7\u4EF6\u7D22\u5F15\u5FC5\u987B\u662F 1\u20132147483647 \u8303\u56F4\u5185\u7684\u6574\u6570");return Number(e)}function Wn(e=[]){if(!Array.isArray(e))throw new Error("controlGuidChanges \u5FC5\u987B\u662F\u6570\u7EC4");let t=new Set;return e.map(i=>{if(!i||typeof i.id!="string"||!i.id||t.has(i.id)||![ae,U].includes(i.controlAsset)||typeof i.controlId!="string"||!i.controlId||typeof i.controlName!="string")throw new Error("controlGuidChanges \u5305\u542B\u65E0\u6548\u6216\u91CD\u590D\u7684\u53D8\u66F4\u8BB0\u5F55");if(t.add(i.id),i.batchId!==void 0&&(typeof i.batchId!="string"||!i.batchId))throw new Error("controlGuidChanges \u5305\u542B\u65E0\u6548\u7684 batchId");if(i.scriptSignature!==void 0&&!/^[a-f0-9]{64}$/.test(i.scriptSignature))throw new Error("controlGuidChanges \u5305\u542B\u65E0\u6548\u7684 scriptSignature");return{id:i.id,controlAsset:i.controlAsset,controlId:i.controlId,controlName:i.controlName,oldGuid:Wt(i.oldGuid),newGuid:Wt(i.newGuid),...i.batchId?{batchId:i.batchId}:{},...i.scriptSignature?{scriptSignature:i.scriptSignature}:{}}})}function Ku(e){let t=[e?.guid,e?.id];for(let i of t){let r=Number(i);if(Number.isSafeInteger(r)&&r>0&&r<=2147483647)return r}return 0}function Sr(e){let t=String(e?.controlAsset||""),i=Ku(e);return{id:String(i||e?.id||""),guid:i,path:String(e?.path||""),source:String(e?.source||""),controlId:String(e?.controlId||""),controlAsset:t===U||t==="client"?U:t===ae||t==="server"?ae:""}}function qu(e){let t=[],i=(r,n="")=>{if(r&&(r.path||r.source)){let o=Sr(r);t.push(n?{...o,controlAsset:n}:o)}};if(Array.isArray(e?.assets?.scripts)){for(let r of e.assets.scripts)r&&(r.path||r.source)&&t.push(Sr(r));return t}if(i(e?.assets?.server?.script,ae),i(e?.assets?.client?.script,U),e&&e.format!==Ct){i(e?.script);for(let r of e?.scripts||[])i(r)}return t}function Kn(e){return ot(e===U?Dt():mt())}var Ju="\u672A\u7ED1\u5B9A",Lt="\u672A\u547D\u540D\u5B58\u6863",Qu="\u672A\u547D\u540D\u754C\u9762";function Zu(e){let t=e;for(let i=0;i<8;i++){if(Ai(As(t,"simulator","studio"))&&Ai(As(t,"lua")))return t;let r=Hu(t);if(r===t)break;t=r}return e}function ef(e){return e?{name:Xt(e),path:e,bound:!0}:{name:Ju,path:"",bound:!1}}function tf(e,t=process.cwd()){if(Uu(e)&&Ai(e))return e;let i=t||process.cwd(),r=Zu(i),n=_s(r,e);if(Ai(n))return n;let o=_s(i,e);if(Ai(o))return o;throw new Error("script file not found: "+e)}function _i(e,t={}){e?.format===Ct&&cn(e.version);let i=[],r=typeof t.workspacePath=="string"&&t.workspacePath?t.workspacePath:"",n=e?.format===Ct&&e.assets,o=Wn(e?.controlGuidChanges),a=si(e?.scriptSync),s=n?null:ot(e,{warnings:i}),c={server:n&&e.assets.server?ot(e.assets.server,{warnings:i}):Kn(ae),client:n&&e.assets.client?ot(e.assets.client,{warnings:i}):Kn(U)};s&&(c[It(s.meta.assetType)]=s);let l=n&&e.activeAssetType===U?U:s?.meta.assetType||ae,u=n&&e.meta?.name?String(e.meta.name):"",f=()=>u||Lt;!e?.meta?.name&&c.server.meta.name==="\u672A\u547D\u540D\u754C\u9762\u63A7\u4EF6\u7EC4"&&(c.server.meta.name=Qu);let h=[],p=new Set;function m(){p.clear(),Ft(c.server.root,p),Ft(c.client.root,p,{skipServerContainer:!0});for(let y of h)Oe(y.guid)&&p.add(Number(y.guid))}function g(y=0){m();let S=Oe(y)&&!p.has(Number(y))?Number(y):et(p);return p.add(S),S}function v(y){let S=Sr(y),I=g(S.guid);return{...S,guid:I,id:String(I)}}Je(qu(e));let C=Ii(e?.serverLogic),w=null,P="",M=1,V=1;function H(y){let S=String(y||"").trim();if(!S)return"";if(!K[S])throw new Error(`unknown canvas preset: ${S} (available: ${Object.keys(K).join(", ")})`);return S}let B=()=>c[It(l)];function $(y){if(!y)return null;for(let[S,I]of[["server",c.server],["client",c.client]]){let N=pe(I.root,y);if(N&&N.kind!=="server-container")return{key:S,node:N}}return null}function b(y){if(!y.controlId)return null;let S=y.controlAsset===U?"client":y.controlAsset===ae?"server":null;if(S){let I=pe(c[S].root,y.controlId);return I&&I.kind!=="server-container"?{key:S,node:I}:null}return $(y.controlId)}function A(){for(let y of h)y.controlId&&!b(y)&&(y.controlId="",y.controlAsset="")}function x(y){if(!Oe(y))return null;for(let[S,I]of[[ae,c.server],[U,c.client]]){let N="";if(Z(I.root,O=>{!N&&(O.scriptMappingIds||[]).includes(Number(y))&&(N=O.id)}),N)return{controlId:N,controlAsset:S}}return null}function k(y,S,I){let N=c[It(y.controlAsset)],O=N&&pe(N.root,y.controlId);O&&(O.scriptMappingIds=(O.scriptMappingIds||[]).map(D=>Number(D)===Number(S)?Number(I):D))}A();function F(){return h.map(y=>{let S=b(y),I=S?S.key==="client"?U:ae:"";return Y({id:y.id,guid:y.guid||0,path:y.path||"",source:y.source||"",controlId:y.controlId||"",controlAsset:y.controlAsset||I,controlName:S?.node.name||"",assetType:I,assetLabel:S?Xn[I]:"",mounted:!!S})})}function E(){let y=[],S=(I,N)=>{Z(I.root,O=>{O.kind!=="server-container"&&y.push(Y({id:O.id,name:O.name,kind:O.kind,assetType:N,assetLabel:Xn[N]}))})};return S(c.server,ae),S(c.client,U),y}function _(y){let S=[];return Z(y.root,I=>{I.kind!=="server-container"&&S.push(JSON.stringify({kind:I.kind,guid:I.guid,name:I.name,text:I.text??null,imageId:I.imageId??null,imageSource:I.imageSource??null,imageType:I.imageType??null,fontSize:I.fontSize??null,fontColor:I.fontColor??null,bgColor:I.bgColor??null,imageColor:I.imageColor??null,fillType:I.fillType??null,fillAmount:I.fillAmount??null,syncAllDevices:I.syncAllDevices!==!1,transformByPlatform:I.transformByPlatform||null}))}),S.join("/")}let G=_(Dt()),j=_(mt());function ie(y){let S=_(y);return y.meta?.assetType===U?S===G:S===j}function L(y,S){return String(y||"").replace(/[\\/:*?"<>|]/g,"-").trim()||S}function te(y){let S=L(f(),Lt),I=y.meta?.assetType===U?"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F":"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F";return`${S} \xB7 ${I}`}function Me(){if(!((c.server.root.children||[]).find(S=>S.kind==="container")||c.server.root.children?.[0]))throw new Error("\u6574\u5408\u5305\u9700\u8981\u670D\u52A1\u7AEF\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668\u4E0B\u81F3\u5C11\u6709\u4E00\u4E2A\u6839\u63A7\u4EF6");return ta(c.server,c.client,{scripts:h,fileName:`${L(f(),Lt)} \xB7 \u6574\u5408\u5305.gia`})}function At(){let y=S=>({type:S.meta.assetType,name:S.meta.name,sourceFile:S.meta.sourceFile||""});return{format:Ct,name:f(),activeAssetType:l,assets:{server:y(c.server),client:y(c.client),scripts:F()}}}function Qt(){return Y({format:Ct,version:4,meta:{name:f()},activeAssetType:l,serverLogic:C,controlGuidChanges:o,scriptSync:a,assets:{server:c.server,client:c.client,scripts:h.map(y=>Y({id:y.id,guid:y.guid||0,path:y.path||"",source:y.source||"",controlId:y.controlId||"",controlAsset:y.controlAsset||""}))}})}function re(){let y=B(),S=ga(y);if(S.workspace=ef(r),S.save=At(),S.scripts=F(),S.mountTargets=E(),S.serverLogic=C,S.migrationWarnings=[...i],S.controlGuidChanges=Y(o),l===U){let I=zt(y,!0);S.clientGuidAutofill={count:I.length,templateCount:I.filter(({parent:N})=>N?.kind==="server-container").length,selectedOffset:I.findIndex(({node:N})=>N.id===S.selectedId)}}return S.scriptSync=Y(a),Eo(S),S}function Ge(y){let S=B();if(y.expectedRevision!==void 0&&Number(y.expectedRevision)!==S.version)throw new Error(`revision conflict: expected ${y.expectedRevision}, current ${S.version}`);return S}function ct(y,S,I=""){let N=String(S||"");if(N){let O=I===U?U:I===ae?ae:"";if(!b({controlId:N,controlAsset:O}))throw new Error("\u6302\u8F7D\u76EE\u6807\u5FC5\u987B\u662F\u5B58\u6863\u5185\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6216\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F");y.controlAsset=O}else y.controlAsset="";y.controlId=N}function Oi(y){let S=Ge(y);if(y.op==="addScript"){let I=v({path:String(y.path||""),source:String(y.source||""),controlId:"",controlAsset:""});y.controlId!==void 0&&y.controlId!==""&&ct(I,y.controlId,y.controlAsset),h.push(I)}else if(y.op==="updateScript"){let I=h.find(N=>N.id===y.id);if(!I)throw new Error(`\u811A\u672C\u4E0D\u5B58\u5728: ${y.id}`);y.controlId!==void 0&&ct(I,y.controlId,y.controlAsset),y.path!==void 0&&(I.path=String(y.path)),y.source!==void 0&&(I.source=String(y.source))}else if(y.op==="removeScript"){let I=h.length;if(h=h.filter(N=>N.id!==y.id),h.length===I)throw new Error(`\u811A\u672C\u4E0D\u5B58\u5728: ${y.id}`)}return S.version+=1,re()}function Fi(y){let S=Ge(y),I=pe(S.root,y.id??S.selectedId);if(!I||I.kind==="server-container")throw new Error("\u4EC5\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6216\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5141\u8BB8\u4FEE\u6539\u7D22\u5F15");let N=Wt(y.guid);if(Wt(I.guid),y.autoFillClientGuids!==void 0&&typeof y.autoFillClientGuids!="boolean")throw new Error("autoFillClientGuids \u5FC5\u987B\u662F\u5E03\u5C14\u503C");let O=y.autoFillClientGuids===!0;if(O&&l!==U)throw new Error("\u81EA\u52A8\u586B\u5145\u4EC5\u652F\u6301\u5BA2\u6237\u7AEF\u6A21\u677F\u5217\u8868\uFF1B\u670D\u52A1\u7AEF\u754C\u9762\u7684\u7D22\u5F15\u9700\u5355\u72EC\u586B\u5199");let D=O?zt(S,!0).map(({node:z})=>z):[I],W=N-D.indexOf(I),J=D.map((z,se)=>({node:z,oldGuid:Wt(z.guid),newGuid:Wt(W+se)})),_e=J.filter(({oldGuid:z,newGuid:se})=>z!==se);if(!_e.length)return re();let de=new Map(J.map(({oldGuid:z,newGuid:se})=>[z,se]));if(de.size!==J.length)throw new Error("\u5BA2\u6237\u7AEF\u6A21\u677F\u5B58\u5728\u91CD\u590D\u65E7\u7D22\u5F15\uFF0C\u65E0\u6CD5\u81EA\u52A8\u586B\u5145\uFF1B\u8BF7\u5148\u6D88\u9664\u6B67\u4E49");let ut=new Set(D),ge=[];for(let z of Object.values(c))Z(z.root,se=>{z===c.client&&se.kind==="server-container"||ge.push({node:se,project:z})});let He=new Map([...ge.filter(z=>!ut.has(z.node)).map(({node:z})=>[Number(z.guid),z.name]),...h.map(z=>[Number(z.guid),z.path||"Lua \u811A\u672C"])]);for(let{newGuid:z}of _e)if(He.has(z))throw new Error(`\u63A7\u4EF6\u7D22\u5F15 ${z} \u5DF2\u88AB\u300C${He.get(z)}\u300D\u5360\u7528\uFF1B\u8BF7\u5148\u586B\u5199\u5B83\u7684\u5B9E\u9645\u7D22\u5F15\u3002\u672C\u6B21\u672A\u4FEE\u6539\u4EFB\u4F55\u7D22\u5F15\u3002`);let ne=[],ce=(z,se,Pt)=>{let Ne=z?.[se];(typeof Ne=="number"||typeof Ne=="string"&&/^\d+$/.test(Ne.trim()))&&de.has(Number(Ne))&&de.get(Number(Ne))!==Number(Ne)&&ne.push({owner:z,key:se,project:Pt.project,oldGuid:Number(Ne),newGuid:de.get(Number(Ne))})};for(let z of ge)ce(z.node,"referencedPrefabId",z),ce(z.node,"itemPrefabId",z),ce(z.node.giaRaw,"templateRefSlot",z);let _t=new Map;for(let{node:z}of ge)_t.set(Number(z.guid),(_t.get(Number(z.guid))||0)+1);for(let{oldGuid:z}of ne)if(_t.get(z)!==1)throw new Error(`\u65E7\u7D22\u5F15 ${z} \u5728\u591A\u68F5\u8D44\u4EA7\u6811\u4E2D\u91CD\u590D\uFF0C\u65E0\u6CD5\u786E\u5B9A\u6A21\u677F\u5F15\u7528\u5F52\u5C5E\uFF1B\u8BF7\u5148\u6D88\u9664\u6B67\u4E49\u540E\u4FEE\u6539`);let ye=O?Es():"",Gr=Is(h);for(let{node:z,oldGuid:se,newGuid:Pt}of _e)z.guid=Pt,o.push({id:Es(),controlAsset:l,controlId:z.id,controlName:z.name,oldGuid:se,newGuid:Pt,scriptSignature:Gr,...ye?{batchId:ye}:{}});let ni=new Set([S]);for(let{owner:z,key:se,project:Pt,newGuid:Ne}of ne)z[se]=typeof z[se]=="string"?String(Ne):Ne,ni.add(Pt);for(let z of ni)z.version+=1;return re()}function oe(y){let S=Ge(y);if(!Array.isArray(y.changeIds)||!y.changeIds.length||y.changeIds.some(N=>typeof N!="string"||!o.some(O=>O.id===N)))throw new Error("\u8BF7\u660E\u786E\u6307\u5B9A\u5DF2\u6838\u5BF9 Lua \u5F15\u7528\u7684\u6709\u6548\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55 changeIds");let I=new Set(y.changeIds);return o=o.filter(N=>!I.has(N.id)),S.version+=1,re()}function Ve(y){if(!y||typeof y!="object")throw new Error("patch requires op");if(y.op==="setScriptSync"){let S=Ge(y);return a=si(y.config),S.version+=1,re()}if(y.op==="setControlGuid")return Fi(y);if(y.op==="acknowledgeControlGuidChanges")return oe(y);if(y.op==="setServerLogic"){let S=Ge(y);return C=Ii(y.logic),S.version+=1,re()}if(y.op==="addScript"||y.op==="updateScript"||y.op==="removeScript")return Oi(y);if(y.op==="selectAsset")return l=y.assetType===U?U:ae,re();if(y.op==="renameSave"){let S=String(y.name||"").trim();if(!S)throw new Error("\u5B58\u6863\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");return u=S,re()}if(y.op==="newAsset"){let S=Ge(y);l=y.assetType===U?U:ae;let I=Kn(l);return I.version=S.version+1,c[It(l)]=I,o=o.filter(N=>N.controlAsset!==l),A(),re()}return dn(B(),y),A(),re()}function je(y){return h.filter(S=>{let I=b(S);return!!(I&&I.key==="client"==(y===U))})}function Zt(y="json",S=""){let I=ei(y,S);if(o.length&&!["save","archive"].includes(String(y).toLowerCase())){let N=o.map(O=>`\u63A7\u4EF6\u7D22\u5F15\u5F85\u6838\u5BF9 Lua \u5F15\u7528\uFF1A${Xn[O.controlAsset]} / ${O.controlName} (${O.controlId})\uFF1A${O.oldGuid} \u2192 ${O.newGuid}\u3002\u8BF7\u6309\u8BED\u4E49\u66F4\u65B0\u811A\u672C\u4E2D\u7684\u63A7\u4EF6\u7D22\u5F15\u5F15\u7528\uFF0C\u6838\u5BF9\u540E\u786E\u8BA4\u53D8\u66F4\u8BB0\u5F55 ${O.id}\uFF1B\u4E0D\u8981\u5168\u5C40\u66FF\u6362\u540C\u503C\u6570\u5B57\u3002`);I.warnings=[...new Set([...I.warnings||[],...N])]}return I}function ei(y="json",S=""){let I=String(y).toLowerCase();if(I==="save"||I==="archive"){let D=Buffer.from(JSON.stringify(Qt(),null,2),"utf8");return Y({filename:`${f().replace(/[\\/:*?"<>|]/g,"-")} \xB7 \u8D44\u4EA7\u5305.json`,mimeType:"application/json",encoding:"base64",data:D.toString("base64"),warnings:[]})}if(I==="save-gia"||I==="archive-gia"){let D=[],W=[],J=(de,ut="")=>{let ge=Zt(de,ut);D.push(Y({filename:ge.filename,mimeType:ge.mimeType,encoding:ge.encoding,data:ge.data,warnings:ge.warnings||[]})),W.push(...ge.warnings||[])},_e=(de,ut)=>{let ge=c[It(de)],He=de===l,ne=h.some(ce=>ce.controlAsset===de&&ce.controlId);if(!He&&ie(ge)&&!ne){W.push(ut);return}J("gia",de)};if(_e(ae,"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F\u4ECD\u662F\u9ED8\u8BA4\u6A71\u7A97\uFF0C\u672A\u6539\u52A8\u4E14\u5F53\u524D\u672A\u663E\u793A\uFF0C\u5DF2\u4ECE\u8D44\u4EA7\u5305 GIA \u4E2D\u7701\u7565\u3002"),_e(U,"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u4ECD\u662F\u9ED8\u8BA4\u300CLua\u5B9E\u4F8B\u5316\u9762\u677F\u300D\uFF0C\u672A\u6539\u52A8\u4E14\u5F53\u524D\u672A\u663E\u793A\uFF0C\u5DF2\u4ECE\u8D44\u4EA7\u5305 GIA \u4E2D\u7701\u7565\u3002"),h.some(de=>de.path||de.source)&&J("scripts-gia"),!D.length)throw new Error("\u8D44\u4EA7\u5305 GIA \u6CA1\u6709\u53EF\u5BFC\u51FA\u7684\u5DF2\u6539\u52A8\u9879\uFF1B\u8BF7\u5148\u7F16\u8F91\u5F53\u524D\u754C\u9762\uFF0C\u6216\u6539\u7528\u300C\u5F53\u524D\u754C\u9762 GIA\u300D\u3002");return Y({format:"qxqy-gia-package",files:D,warnings:[...new Set(W)]})}if(I==="gia-combined"||I==="combined-gia"||I==="combined"){let D=Me();return Y({filename:`${L(f(),Lt)} \xB7 \u6574\u5408\u5305.gia`,mimeType:"application/octet-stream",encoding:"base64",data:D.buffer.toString("base64"),warnings:[...new Set(D.warnings||[])]})}if(I==="scripts"){let D=Y({format:Wu,version:1,scripts:h.map(J=>Y({id:J.id,guid:J.guid||0,path:J.path||"",source:J.source||"",controlId:J.controlId||"",controlAsset:J.controlAsset||""}))}),W=Buffer.from(JSON.stringify(D,null,2),"utf8");return Y({filename:`${L(f(),Lt)} \xB7 \u811A\u672C.json`,mimeType:"application/json",encoding:"base64",data:W.toString("base64"),warnings:[]})}if(I==="scripts-gia"||I==="scriptsgia"){let D=na(h);return Y({filename:`${L(f(),Lt)} \xB7 \u811A\u672C.gia`,mimeType:"application/octet-stream",encoding:"base64",data:D.buffer.toString("base64"),warnings:D.warnings})}if(I==="lua"){let D=h.find(J=>J.id===S)||h.find(J=>J.path===S);if(!D)throw new Error("\u6CA1\u6709\u53EF\u5BFC\u51FA\u7684 Lua \u811A\u672C\uFF0C\u8BF7\u5148\u5728\u201CLua \u811A\u672C\u201D\u9875\u521B\u5EFA");let W=Xt(D.path||"")||`qxqy-script-${D.id}`;return Y({filename:/\.lua$/i.test(W)?W:`${W}.lua`,mimeType:"text/x-lua",encoding:"base64",data:Buffer.from(D.source||"","utf8").toString("base64"),warnings:[]})}let N=S?c[It(S)]:B(),O=te(N);if(I==="json"){let D=Y({...N,scripts:je(N.meta.assetType),controlGuidChanges:o.filter(J=>J.controlAsset===N.meta.assetType)}),W=Buffer.from(JSON.stringify(D,null,2),"utf8");return Y({filename:`${O}.json`,mimeType:"application/json",encoding:"base64",data:W.toString("base64"),warnings:[]})}if(I==="gia"){let D=ea(N,N.meta.assetType===U?{scripts:je(U)}:{}),W=N.meta.assetType===U?[]:je(ae);return W.length&&D.warnings.unshift(`\u5F53\u524D\u670D\u52A1\u5668\u63A7\u4EF6 GIA \u4E0D\u5305\u542B ${W.length} \u4E2A Lua \u811A\u672C\u7684\u6E90\u7801\uFF1B\u8BF7\u4F7F\u7528\u300C\u8D44\u4EA7\u5305 GIA \u6574\u5408\u5305\u300D\uFF0C\u6216\u53E6\u884C\u5BFC\u5165\u811A\u672C\u5305\u5E76\u6838\u5BF9\u6302\u8F7D\u3002`),Y({filename:`${O}.gia`,mimeType:"application/octet-stream",encoding:"base64",data:D.buffer.toString("base64"),warnings:D.warnings})}throw new Error(`unsupported export format: ${y}`)}function Je(y){for(let S of y){let I=Sr(S);if(!I.path&&!I.source)continue;let N=I.controlId?null:x(I.guid),O=v(N?{...I,...N}:I);N&&O.guid!==I.guid&&k(N,I.guid,O.guid),O.controlId&&!b(O)&&(O.controlId="",O.controlAsset=""),h.push(O)}}function ti(y,S,I=""){let N=String(y||"").toLowerCase();if(typeof S!="string"||!S)throw new Error("import data is required");let O=Buffer.from(S,"base64"),D,W=[],J={};if(N==="json"){try{D=JSON.parse(O.toString("utf8"))}catch{throw new Error("JSON \u6587\u4EF6\u65E0\u6548")}if(D?.project&&(D=D.project),D?.format===Ct&&D?.assets){cn(D.version);let ne=_i(D);W.push(...ne.get().migrationWarnings);let ce=ne.archiveData();return c.server=ce.assets.server,c.client=ce.assets.client,i=[...W],l=D.activeAssetType===U?U:ae,u=String(D.meta?.name||Xt(I).replace(/\.json$/i,"")||u),C=ce.serverLogic,h=ce.assets.scripts,o=ce.controlGuidChanges,a=ce.scriptSync,p.clear(),Y({snapshot:re(),warnings:W,metadata:{format:Ct}})}}else{if(N==="lua")return h.push(v({path:Xt(I||"imported.lua"),source:O.toString("utf8"),controlId:""})),Y({snapshot:re(),warnings:W,metadata:{assetType:"lua-script"}});if(N==="gia"){if(oa(O)){let ye=sa(O);return Je(ye.scripts),Y({snapshot:re(),warnings:ye.warnings,metadata:ye.metadata})}let ne=la(O);D=ne.project,W=ne.warnings,J=ne.metadata,ne.clientProject&&(c.client=ot(ne.clientProject),o=o.filter(ye=>ye.controlAsset!==U),W.push("\u6574\u5408\u5305\u5DF2\u62C6\u56DE\u300CUI\u63A7\u4EF6-\u670D\u52A1\u7AEF\u300D\u4E0E\u300CUI\u63A7\u4EF6-\u5BA2\u6237\u7AEF\u300D\uFF1B\u5BA2\u6237\u7AEF\u6A21\u677F\u8FB9\u754C\u5DF2\u4FDD\u7559\u3002"));let ce=new Map,_t=(ye,Gr)=>{ye&&Z(ye.root,ni=>{for(let z of ni.scriptMappingIds||[]){let se=ce.get(Number(z));if(se){W.push(`\u811A\u672C GUID ${z} \u540C\u65F6\u6302\u8F7D\u5230\u591A\u4E2A\u63A7\u4EF6\uFF0C\u5DF2\u4FDD\u7559\u201C${se.controlAsset===ae?"\u670D\u52A1\u7AEF":"\u5BA2\u6237\u7AEF"}\u201D\u76EE\u6807\u3002`);continue}ce.set(Number(z),{controlId:ni.id,controlAsset:Gr})}})};_t(ne.project,ae),_t(ne.clientProject,U),Je((ne.scripts||[]).map(ye=>ce.has(Number(ye.guid))?{...ye,...ce.get(Number(ye.guid))}:ye))}else throw new Error(`unsupported import format: ${y}`)}let _e=ot(D,{warnings:W}),de=Wn(D?.controlGuidChanges);if(de.some(ne=>ne.controlAsset!==_e.meta.assetType))throw new Error("\u5355\u8D44\u4EA7 JSON \u7684\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u5FC5\u987B\u5C5E\u4E8E\u5F53\u524D\u5BFC\u5165\u8D44\u4EA7");let ut=Wn([...o.filter(ne=>ne.controlAsset!==_e.meta.assetType),...de]);i=[...W];let ge=It(_e.meta.assetType);c[ge]=_e,o=ut,l=_e.meta.assetType;let He=c[ge];return I&&(He.meta.name=Xt(I).replace(/\.(json|gia)$/i,"")||He.meta.name,He.meta.sourceFile=Xt(I),He.meta.sourceFormat=N),Je(D?.scripts||[]),D?.script&&(D.script.path||D.script.source)&&Je([D.script]),Y({snapshot:re(),warnings:W,metadata:J})}function xl(y,S){return dn(B(),{op:"pick",x:y,y:S}),re()}function Il(y){let S=typeof y=="string"&&y?y:"";!S||S===r||(r=S)}function Cl(y){let S=y.source||"";if(!S.trim()&&y.path.trim())try{S=ju(tf(y.path,r),"utf8")}catch(I){throw new Error(`\u811A\u672C ${y.path} \u8BFB\u53D6\u5931\u8D25: ${I?.message||I}`)}return S}function ii(y={}){let S=H(y.canvasId);S&&(P=S),y.playerCount!==void 0&&y.playerCount!==null&&y.playerCount!==""&&(M=vt(y.playerCount),V>M&&(V=1)),y.viewPlayerIndex!==void 0&&y.viewPlayerIndex!==null&&y.viewPlayerIndex!==""&&(V=qe(y.viewPlayerIndex,M)),w&&Bn(w);let I=h.map(O=>{try{return{id:O.id,guid:O.guid||0,path:O.path||O.id,source:Cl(O),controlId:O.controlId||"",controlAsset:O.controlAsset||""}}catch(D){return{id:O.id,guid:O.guid||0,path:O.path||O.id,source:`error([==[ ${String(D.message).replace(/]=+]/g,"] =]")} ])`,controlId:O.controlId||"",controlAsset:O.controlAsset||""}}}),N=O=>I.filter(D=>{let W={controlId:D.controlId,controlAsset:D.controlAsset},J=D.controlId?b(W):null;return!!(J&&J.key===O)});return w=us(c.server,{templatesProject:c.client,scripts:I,sceneScripts:N("server"),templateScripts:N("client"),serverConfig:{logic:C},canvasId:P,playerCount:M,viewPlayerIndex:V,language:y.language||""}),fe(y)}function kl(y,S={}){let I=H(y);if(!I)throw new Error("playSetCanvas requires canvasId");return ii({...S,canvasId:I})}function fe(y={}){if(!w)return Y({running:!1,tree:[],logs:[],serverLogs:[],serverVars:[]});let S=Dn(w,y);return S.running=!0,S.logs=Ln(S.logs),S.serverLogs=Ln(S.server?.logs||[]),S.serverVars=Xu(S.server,S.playerCount||1),S}function El(y,S={}){return w||ii(),br(w,y),S.observe===!1?Y({running:!0,time:w.runtime.clock.time,frame:w.runtime.clock.frame,paused:!!w.debugPaused,levelTimePaused:!!w.runtime.clock.paused,playerCount:w.playerCount||1,viewPlayerIndex:w.viewPlayerIndex||1}):fe(S)}function Al(y=0){ii();let S=Math.max(0,Number(y)||0);for(let I=0;I<S;I++)br(w,1/30);return fe()}function _l(){return w&&Bn(w),w=null,P="",M=1,V=1,Y({running:!1,tree:[],logs:[],serverLogs:[],serverVars:[]})}function Pl(y,S={}){let I=ri();return V=On(I,y),S.observe===!1?null:fe(S)}function Tl(y,S={}){if(!w)throw new Error("play session has not started");return zn(w,y),S.observe===!1?null:fe(S)}function Rl(y,S={}){if(!w)throw new Error("play session has not started");return $n(w,y),S.observe===!1?null:fe(S)}function Ml(y,S,I,N={}){if(!w)throw new Error("play session has not started");return Ei(w,y,S,I,N),N.observe===!1?null:fe(N)}function Nl(y={}){return w&&vr(w).pause(),y.observe===!1?null:fe(y)}function Ol(y={}){return w&&vr(w).resume(),y.observe===!1?null:fe(y)}function ri(){if(!w)throw new Error("play session has not started");return w}function Fl(y,S){let I=ri();if(!y&&!S){let N=fe();return Y({vars:N.serverVars||[]})}return Y({entityType:String(y||""),name:String(S||""),value:vs(I,y,S)})}function Dl(y,S,I){let N=ri();return Vn(N,y,S,I),fe()}function zl(y,S=[],I="PlayerSelf"){let N=ri();return Yn(N,y,S,I),fe()}function $l(){let y=fe();return Y({events:y.history||[],case:Ka(y.history||[],{playerCount:y.playerCount||1})})}function Gl(y={}){let S=fe(),I=Ci({name:y.name||"",dt:y.dt,playerCount:y.playerCount||S.playerCount||1,events:y.events||S.history||[],asserts:y.asserts||[]});return Y(I)}function Vl(y,S={}){let I=Ci(y);ii({...S,playerCount:S.playerCount||I.playerCount||1});let N=ri();N.recording=!1;try{return xs(vr(N),y)}finally{N.recording=!0}}function Yl(){if(!w)return{running:!1,paused:!1,time:0,frame:0,playerCount:1,viewPlayerIndex:1};let y=w.runtime.clock;return{running:!0,paused:!!w.debugPaused,levelTimePaused:!!y.paused,time:y.time,frame:y.frame,playerCount:w.playerCount||1,viewPlayerIndex:w.viewPlayerIndex||1}}let bo={get:re,patch:Ve,setWorkspace:Il,exportData:Zt,importData:ti,pick:xl,playStart:ii,playSetCanvas:kl,playSetView:Pl,playGet:fe,playStatus:Yl,playStep:El,playRun:Al,playStop:_l,playKey:Tl,playClick:Rl,playPointer:Ml,playPause:Nl,playResume:Ol,playServerGet:Fl,playServerSet:Dl,playServerSend:zl,playHistory:$l,playSaveCase:Gl,playRunCase:Vl,archiveData:Qt};return Object.defineProperty(bo,"_project",{enumerable:!1,get:B}),bo}import{createRequire as of}from"node:module";function qn(e,t,i){if(e.fillType!=="Horizontal"&&e.fillType!=="Vertical")return null;let r=Number(e.fillAmount??1),n=Number.isFinite(r)?Math.max(0,Math.min(1,r)):1;if(e.fillType==="Horizontal"){let a=t*n;return{x:e.fillHorizontalType==="Right"?t/2-a:-t/2,y:-i/2,width:a,height:i}}let o=i*n;return{x:-t/2,y:e.fillVerticalType==="Top"?-i/2:i/2-o,width:t,height:o}}function Ps(e,t,i){let r=t?.m_Rect,n=t?.m_RD?.textureRectOffset,o=t?.m_RD?.textureRect,a=Math.round(Number(r?.width)),s=Math.round(Number(r?.height)),c=Math.round(Number(n?.X)),l=Math.round(Number(n?.Y)),u=Math.round(Number(o?.width)),f=Math.round(Number(o?.height)),h=t?.m_RD?.settingsRaw?.packingRotation;if(![a,s,u,f].every(g=>Number.isInteger(g)&&g>0&&g<=8192)||a*s>16777216||!Number.isFinite(c)||!Number.isFinite(l)||c<0||l<0||c+u>a||l+f>s)throw new Error("Invalid sprite dimensions or trim offset");if(h&&h!=="None")throw new Error(`Unsupported sprite packing rotation: ${h}`);let p=i(a,s),m=p.getContext("2d");if(e.width===a&&e.height===s)m.drawImage(e,0,0);else{if(e.width!==u||e.height!==f)throw new Error("Sprite PNG does not match its trim metadata");m.drawImage(e,c,s-l-f)}return p}function Ts(e,t,i){let r=Number(t??4294967295)>>>0;if((r&16777215)===16777215)return e;let n=i(e.width,e.height),o=n.getContext("2d");o.drawImage(e,0,0);let a=o.getImageData(0,0,n.width,n.height),s=r>>>16&255,c=r>>>8&255,l=r&255;for(let u=0;u<a.data.length;u+=4)a.data[u]=Math.round(a.data[u]*s/255),a.data[u+1]=Math.round(a.data[u+1]*c/255),a.data[u+2]=Math.round(a.data[u+2]*l/255);return o.putImageData(a,0,0),n}function rf(e){return!!e?.border&&Object.values(e.border).some(t=>Number.isFinite(t)&&t>0)}function Ms(e,t){let i=typeof t=="object"?t?.Name:t;return rf(e)&&i!=="Basic"?"Stretch":"Basic"}function Ns(e){if(!e)return null;let t=Number(e.m_Rect?.width),i=Number(e.m_Rect?.height);if(![t,i].every(n=>Number.isFinite(n)&&n>0&&n<=8192)||t*i>16777216)throw new Error("Invalid image metadata dimensions");let r={};for(let[n,o]of[["left","X"],["bottom","Y"],["right","Z"],["top","W"]]){let a=Number(e.m_Border?.[o]??0);if(!Number.isFinite(a))throw new Error("Invalid image border");r[n]=Math.max(0,a)}return{width:t,height:i,border:r}}function nf(e,t,i,r){t=Number.isFinite(t)?Math.max(0,t):0,i=Number.isFinite(i)?Math.max(0,i):0;let n=Math.min(1,e/(t+i||1));t*=n,i*=n;let o=Math.min(1,r/(t+i||1));return{source:[0,t,e-i,e],target:[0,t*o,r-i*o,r]}}var Rs=new WeakMap;function Os(e,t,i,r,n){let o=Math.max(0,i),a=Math.max(0,r),s=Math.min(1,4096/Math.max(1,o),4096/Math.max(1,a)),c=Math.max(1,Math.round(o*s)),l=Math.max(1,Math.round(a*s)),u=n(c,l),f=u.getContext("2d");if(!o||!a)return u;let h=Rs.get(e);if(!h){let w=n(e.width,e.height),P=w.getContext("2d");P.drawImage(e,0,0),h=P.getImageData(0,0,e.width,e.height),Rs.set(e,h)}let p=f.createImageData(c,l),m=h.data,g=(w,P,M,V,H,B)=>{let{source:$,target:b}=nf(P,M,V,H);return Array.from({length:B},(A,x)=>{let k=(x+.5)*H/B,F=k<b[1]?0:k<b[2]?1:2,E=b[F+1]>b[F]?(k-b[F])/(b[F+1]-b[F]):0,_=Math.max(0,Math.min(w-1,($[F]+E*($[F+1]-$[F]))*w/P-.5)),G=Math.floor(_);return[G,Math.min(w-1,G+1),_-G]})},v=g(e.width,t.width,t.border.left,t.border.right,o,c),C=g(e.height,t.height,t.border.top,t.border.bottom,a,l);for(let w=0;w<l;w++)for(let P=0;P<c;P++){let[M,V,H]=v[P],[B,$,b]=C[w],A=(B*e.width+M)*4,x=(B*e.width+V)*4,k=($*e.width+M)*4,F=($*e.width+V)*4,E=m[A+3]*(1-H)*(1-b),_=m[x+3]*H*(1-b),G=m[k+3]*(1-H)*b,j=m[F+3]*H*b,ie=E+_+G+j,L=(w*c+P)*4;p.data[L+3]=Math.round(ie);for(let te=0;te<3;te++)p.data[L+te]=ie?Math.round((m[A+te]*E+m[x+te]*_+m[k+te]*G+m[F+te]*j)/ie):0}return f.putImageData(p,0,0),u}var af=of(import.meta.url),sf=[0,-.5,.5,.5,-.5,.5],lf=[0,-.5,.12,-.12,.5,0,.12,.12,0,.5,-.12,.12,-.5,0,-.12,-.12],cf=[0,-.5,.11,-.15,.48,-.15,.18,.07,.29,.41,0,.2,-.29,.41,-.18,.07,-.48,-.15,-.11,-.15],Jn=Buffer.from([137,80,78,71,13,10,26,10]),uf=new Set(["image","textbox","textwindow","button","grid"]),wr={cursor:"\u5149\u6807\u68C0\u6D4B\u533A\u57DF",reference:"\u6A21\u677F\u5F15\u7528\u63A7\u4EF6",grid:"\u7F51\u683C\u89C6\u7A97",button:"\u9884\u8BBE\u6309\u94AE",keyhint:"\u6309\u952E\u63D0\u793A",animation:"\u754C\u9762\u52A8\u6548",fullscreen:"\u5168\u5C4F\u52A8\u6548"},xr=null;function Pi(){if(xr)return xr;try{xr=af("@napi-rs/canvas")}catch(e){let t=e?.message||String(e);throw new Error(`Host screenshot renderer requires @napi-rs/canvas (${t})`)}return xr}function X(e,t=0){let i=Number(e);return Number.isFinite(i)?i:t}function Cr(e,t=4294967295){let i=Number(e??t)>>>0;return{r:i>>>16&255,g:i>>>8&255,b:i&255,a:(i>>>24&255)/255}}function kt(e,t=1){return`rgba(${e.r},${e.g},${e.b},${Math.max(0,Math.min(1,e.a*t))})`}function Ds(e,t,i=1){let r=Math.max(1,Math.round(X(e,1))),n=Math.max(1,Math.round(X(t,1))),o=Math.max(1,Math.min(2,X(i,1)));return{width:r,height:n,pixelWidth:Math.max(1,Math.round(r*o)),pixelHeight:Math.max(1,Math.round(n*o)),pixelRatio:o}}function zs(e){let t=Buffer.from(e.toBuffer("image/png"));if(t.length<Jn.length||!t.subarray(0,Jn.length).equals(Jn))throw new Error("Host screenshot renderer did not produce a PNG");return t}function ff(e){return e==="triangle"?sf:e==="fourstar"?lf:cf}function df(e,t,i,r,n){let o=ff(t);e.beginPath();for(let a=0;a<o.length;a+=2){let s=o[a]*i,c=o[a+1]*r;a===0?e.moveTo(s,c):e.lineTo(s,c)}e.closePath(),e.fillStyle=kt(n),e.fill()}function $s(e,t,i){let r=t?.matrix,n=r&&typeof r=="object"?[r.a,r.b,r.c,r.d,r.tx,r.ty].map(Number):null,o=t?.pressed?.98:1;if(n&&n.every(Number.isFinite)){let[a,s,c,l,u,f]=n;e.transform(a*o,-s*o,-c*o,l*o,u,i-f);return}e.translate(X(t.left)+X(t.width)/2,i-X(t.bottom)-X(t.height)/2),e.rotate(-X(t.rotationZ)*Math.PI/180),e.scale(o,o)}function hf(e,t,i,r,n,o){if(typeof e.roundRect=="function"){e.roundRect(t,i,r,n,o);return}let a=Math.max(0,Math.min(o,r/2,n/2));e.moveTo(t+a,i),e.arcTo(t+r,i,t+r,i+n,a),e.arcTo(t+r,i+n,t,i+n,a),e.arcTo(t,i+n,t,i,a),e.arcTo(t,i,t+r,i,a),e.closePath()}function Gs(e,t,i,r){let n=Cr(t.bgColor,16777215);e.fillStyle=kt(n),e.fillRect(-i/2,-r/2,i,r);let o=Math.max(8,X(t.fontSize,12)),a=Cr(t.fontColor,4294967295),s=t.horizontalAlignment==="Right"?1:t.horizontalAlignment==="Middle"?.5:0,c=t.verticalAlignment==="Bottom"?1:t.verticalAlignment==="Middle"?.5:0;e.save(),e.beginPath(),e.rect(-i/2,-r/2,i,r),e.clip(),e.font=`${o}px "Microsoft YaHei UI","Microsoft YaHei",sans-serif`,e.fillStyle=kt(a),e.textAlign=s===1?"right":s===.5?"center":"left";let l=t.kind==="textwindow"?t.scroll:null;if(e.textBaseline=l?"top":c===1?"bottom":c===.5?"middle":"top",t.enableOutline){let g=Cr(t.outlineColor,4278190080);e.strokeStyle=kt(g),e.lineWidth=Math.max(2,o*.12),e.lineJoin="round"}let u=l?-i/2+2+s*l.textWidth:s===0?-i/2+2:s===1?i/2-2:0,f=c===0?-r/2:c===1?r/2:0,h=l?.lines||String(t.text||"").split(`
|
|
114
|
-
`),p=l?.lineHeight||o*1.2,m=l?-r/2-l.offset+(l.max>0?0:c*(r-l.contentLength)):c===.5?f-(h.length-1)*p/2:c===1?f-(h.length-1)*p:f;for(let g=0;g<h.length;g+=1){let v=m+g*p;l&&(v+p<-r/2||v>r/2)||(t.enableOutline&&e.strokeText(h[g],u,v),e.fillText(h[g],u,v))}e.restore()}function pf(e,t,i,r){let n=Ht(t.scroll,i,r);if(n)for(let[o,a]of[[n.track,"#263447"],[n.thumb,"#90aecb"]])e.fillStyle=a,e.fillRect(o.x,o.y,o.width,o.height)}function Vs(e,t,i,r){e.beginPath(),hf(e,-i/2,-r/2,i,r,6),e.fillStyle="#3268cf",e.fill(),e.strokeStyle="rgba(112,160,255,0.8)",e.lineWidth=1,e.stroke(),t.pressed&&(e.fillStyle="rgba(0,0,0,0.28)",e.fill())}function Ys(e,t,i,r,n){let o=Cr(t.imageColor,4294967295),a=Gi(t.imageId,t.imageSource),s=n?.images?.get(a);if(t.primitive==="sprite"&&s){let c=n.imageMetadata?.get(a),l=Ms(c,t.imageType),u=`${a}:${Number(t.imageColor??4294967295)&16777215}:${l}:${l==="Stretch"?`${i}:${r}`:""}`,f=n.tints.get(u);if(!f){let h=l==="Stretch"?Os(s,c,i,r,Pi().createCanvas):s;f=Ts(h,t.imageColor,Pi().createCanvas),n.tints.set(u,f)}e.globalAlpha*=o.a,e.drawImage(f,-i/2,-r/2,i,r);return}if(t.primitive==="missing"||t.primitive==="sprite"){e.fillStyle="rgba(72,34,40,0.36)",e.fillRect(-i/2,-r/2,i,r),e.strokeStyle="#ff7481",e.lineWidth=1,e.strokeRect(-i/2+.5,-r/2+.5,Math.max(0,i-1),Math.max(0,r-1));return}if(t.primitive==="circle"){e.beginPath(),e.ellipse(0,0,i/2,r/2,0,0,Math.PI*2),e.fillStyle=kt(o),e.fill();return}if(t.primitive==="ring"){e.beginPath(),e.ellipse(0,0,Math.max(1,i/2-3.5),Math.max(1,r/2-3.5),0,0,Math.PI*2),e.strokeStyle=kt(o),e.lineWidth=7,e.stroke();return}if(t.primitive==="triangle"||t.primitive==="fourstar"||t.primitive==="fivestar"){df(e,t.primitive,i,r,o);return}e.fillStyle=kt(o),e.fillRect(-i/2,-r/2,i,r)}function mf(e,t,i,r){let n=Math.max(0,X(t.sourceWidth,X(t.width))),o=Math.max(0,X(t.sourceHeight,X(t.height)));e.save();for(let a of t.clipPolygons||[])e.beginPath(),a.forEach((s,c)=>c?e.lineTo(s.x,i-s.y):e.moveTo(s.x,i-s.y)),e.closePath(),e.clip();if($s(e,t,i),t.kind==="textbox"||t.kind==="textwindow")Gs(e,t,n,o);else if(t.kind==="button")Vs(e,t,n,o);else if(t.kind!=="grid"){let a=qn(t,n,o);a&&(e.beginPath(),e.rect(a.x,a.y,a.width,a.height),e.clip()),Ys(e,t,n,o,r)}pf(e,t,n,o),e.restore()}function Bs(e,t,i,{checker:r=!1}={}){if(r){e.fillStyle="#28313e",e.fillRect(0,0,t,i);let o=16;for(let a=0;a<i;a+=o)for(let s=0;s<t;s+=o)(s/o+a/o)%2===0&&(e.fillStyle="rgba(255,255,255,0.04)",e.fillRect(s,a,o,o));e.strokeStyle="#40b8cf",e.lineWidth=1,e.strokeRect(.5,.5,t-1,i-1);return}let n=e.createRadialGradient(t/2,i*.45,8,t/2,i/2,Math.max(t,i)*.72);n.addColorStop(0,"#123a6b"),n.addColorStop(.72,"#061934"),n.addColorStop(1,"#071426"),e.fillStyle=n,e.fillRect(0,0,t,i)}function gf(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,tx:e.a*t.tx+e.c*t.ty+e.tx,ty:e.b*t.tx+e.d*t.ty+e.ty}}function Fs(e){let t=e?.matrix;return!t||typeof t!="object"?{a:1,b:0,c:0,d:1,tx:0,ty:0}:{a:X(t.a,1),b:X(t.b),c:X(t.c),d:X(t.d,1),tx:X(t.tx),ty:X(t.ty)}}function yf(e){let t=Array.isArray(e?.nodes)?e.nodes:[],i=new Map;for(let a of t){if(!a||a.id===void 0||a.id===null)continue;let s=a.parent==null?"":String(a.parent),c=i.get(s);c?c.push(a):i.set(s,[a])}for(let a of i.values())a.sort((s,c)=>X(s.z)-X(c.z));let r=[];function n(a,s,c,l){if(!uf.has(a.kind))return;let u=Math.abs(X(a.sourceWidth)*Math.hypot(s.a,s.b)),f=Math.abs(X(a.sourceHeight)*Math.hypot(s.c,s.d));r.push({...a,left:s.tx-u/2,bottom:s.ty-f/2,width:u,height:f,rotationZ:Math.atan2(s.b,s.a)*180/Math.PI,matrix:{a:s.a,b:s.b,c:s.c,d:s.d,tx:s.tx,ty:s.ty},...c.length?{clipPolygons:c}:{},...l.length?{masks:l}:{}})}function o(a,s,c=null,l=[],u=[]){let f=i.get(a)||[];for(let h=f.length-1;h>=0;h-=1){let p=f[h],m=s?gf(s,Fs(p)):Fs(p),g=l;if(p.clipToParent&&s&&c){let w=c.sourceWidth/2,P=c.sourceHeight/2;g=[...l,[[-w,-P],[w,-P],[w,P],[-w,P]].map(([M,V])=>({x:s.a*M+s.c*V+s.tx,y:s.b*M+s.d*V+s.ty}))]}let v=hr(p,m),C=v?[...u,v]:u;p.kind!=="grid"&&n(p,m,g,C),o(String(p.id),m,p,g,C),p.kind==="grid"&&n(p,m,g,C)}}return o("",null),r}function js(e,t,i,r={}){return Sf(yf(e),t,i,r)}function bf(e,t,i){if(!(e.width>0&&e.height>0)||!Le(e.matrix))return null;let r=[[-1,-1],[1,-1],[1,1],[-1,1]].map(([c,l])=>{let u=Ie(e.matrix,c*e.width/2,l*e.height/2);return{x:u.x*i.pixelRatio,y:(i.height-u.y)*i.pixelRatio}}),n=Math.max(t.x,Math.floor(Math.min(...r.map(c=>c.x)))),o=Math.max(t.y,Math.floor(Math.min(...r.map(c=>c.y)))),a=Math.min(t.x+t.canvas.width,Math.ceil(Math.max(...r.map(c=>c.x)))),s=Math.min(t.y+t.canvas.height,Math.ceil(Math.max(...r.map(c=>c.y))));return a>n&&s>o?{x:n,y:o,width:a-n,height:s-o}:null}function vf(e,t,i,r){let n=t.canvas.width,o=t.canvas.height,a=t.ctx.getImageData(0,0,n,o).data,s=t.x-e.x,c=t.y-e.y,l=e.ctx.getImageData(s,c,n,o),u=l.data,f=Le(i.matrix);for(let h=0;h<o;h++){let p=r.height-(t.y+h+.5)/r.pixelRatio;for(let m=0;m<n;m++){let g=(h*n+m)*4;if(!a[g+3])continue;let v=(t.x+m+.5)/r.pixelRatio,C=f.a*v+f.c*p+f.tx,w=f.b*v+f.d*p+f.ty,P=ts(C,w,i),M=Math.round(a[g+3]*P)/255;if(!M)continue;let V=u[g+3]/255,H=M+V*(1-M);for(let B=0;B<3;B++)u[g+B]=Math.round((a[g+B]*M+u[g+B]*V*(1-M))/H);u[g+3]=Math.round(H*255)}}e.ctx.save(),e.ctx.setTransform(1,0,0,1,0,0),e.ctx.putImageData(l,s,c),e.ctx.restore()}function Hs(e,t,i,r){for(let n of t){if(n.item){mf(e.ctx,n.item,i.height,r);continue}let o=bf(n.mask,e,i);if(!o)continue;let a=Pi().createCanvas(o.width,o.height),s=a.getContext("2d");s.setTransform(i.pixelRatio,0,0,i.pixelRatio,-o.x,-o.y);let c={canvas:a,ctx:s,x:o.x,y:o.y};Hs(c,n.children,i,r),vf(e,c,n.mask,i)}}function Sf(e,t,i,r={}){let{createCanvas:n}=Pi(),o=Ds(t,i,r.scale),a=n(o.pixelWidth,o.pixelHeight),s=a.getContext("2d");s.scale(o.pixelRatio,o.pixelRatio),r.background!=="transparent"&&Bs(s,o.width,o.height);let c=Array.isArray(e)?e:[],l={images:r.images,imageMetadata:r.imageMetadata,tints:new Map};return Hs({canvas:a,ctx:s,x:0,y:0},is(c),o,l),{data:zs(a),width:o.width,height:o.height,pixelWidth:o.pixelWidth,pixelHeight:o.pixelHeight}}function wf(e){if(e.renderMatrix){let t=Ie(e.renderMatrix,e.centerX,e.centerY);return{kind:e.kind,width:e.width,height:e.height,matrix:{...e.renderMatrix,tx:t.x,ty:t.y}}}return{kind:e.kind,left:X(e.renderLeft,e.left),bottom:X(e.renderBottom,e.bottom),width:Math.max(0,X(e.renderWidth,e.width)),height:Math.max(0,X(e.renderHeight,e.height)),rotationZ:X(e.renderRotationZ,e.rotationZ)}}function Ir(e,t,i){let r=String(t||"");if(!r)return;e.font='10px "Microsoft YaHei UI","Microsoft YaHei",sans-serif',e.textAlign="center",e.textBaseline="middle";let n=e.measureText(r),o=Math.min(i-4,Math.max(24,n.width+8)),a=16;e.fillStyle="rgba(17,25,37,0.66)",e.fillRect(-o/2,-a/2,o,a),e.fillStyle="#e7edf5",e.fillText(r,0,0)}function xf(e,t,i,r,n){let o=wf(t);if(o.width<=0||o.height<=0)return;e.save(),$s(e,o,i);let a=-o.width/2,s=-o.height/2;if(t.kind==="image"){e.save();let c=Math.max(0,X(t.width,o.width)),l=Math.max(0,X(t.height,o.height));e.scale(c?o.width/c:1,l?o.height/l:1);let u=t.enableFill?qn(t,c,l):null;u&&(e.beginPath(),e.rect(u.x,u.y,u.width,u.height),e.clip()),Ys(e,t,c,l,n),e.restore()}else if(t.kind==="textbox"||t.kind==="textwindow")Gs(e,t,o.width,o.height);else if(t.kind==="button")Vs(e,t,o.width,o.height),Ir(e,t.name||wr.button,o.width);else if(t.kind==="cursor")e.setLineDash([6,4]),e.strokeStyle="rgba(74,142,181,0.7)",e.fillStyle="rgba(74,142,181,0.1)",e.fillRect(a,s,o.width,o.height),e.strokeRect(a,s,o.width,o.height),Ir(e,t.name||wr.cursor,o.width);else if(t.kind==="grid"){e.strokeStyle="rgba(106,146,189,0.55)",e.strokeRect(a,s,o.width,o.height),e.beginPath();for(let c=20;c<o.width;c+=20)e.moveTo(a+c,s),e.lineTo(a+c,s+o.height);for(let c=20;c<o.height;c+=20)e.moveTo(a,s+c),e.lineTo(a+o.width,s+c);e.stroke(),Ir(e,t.name||wr.grid,o.width)}else t.kind!=="container"&&t.kind!=="server-container"?(e.setLineDash(t.kind==="reference"||t.kind==="animation"||t.kind==="fullscreen"?[4,4]:[]),e.strokeStyle="rgba(203,218,237,0.55)",e.strokeRect(a,s,o.width,o.height),Ir(e,t.name||wr[t.kind]||t.kind,o.width)):(e.strokeStyle="rgba(78,165,230,0.42)",e.strokeRect(a,s,o.width,o.height));t.id===r&&t.kind!=="container"&&t.kind!=="server-container"&&(e.setLineDash([]),e.strokeStyle="#61b9ff",e.lineWidth=2,e.strokeRect(a,s,o.width,o.height)),e.restore()}function Us(e,t={}){let{createCanvas:i}=Pi(),r=e?.canvas||{},n=Ds(r.width||1600,r.height||900,t.scale),o=i(n.pixelWidth,n.pixelHeight),a=o.getContext("2d");a.scale(n.pixelRatio,n.pixelRatio),Bs(a,n.width,n.height,{checker:!0});let s=Array.isArray(e?.boxes)?e.boxes:[],c=e?.selectedId,l={images:t.images,imageMetadata:t.imageMetadata,tints:new Map};for(let u of s)!u||u.kind==="server-container"||u.visible===!1||xf(a,u,n.height,c,l);return{data:zs(o),page:e?.asset?.type==="client-control-template"?"UI\u63A7\u4EF6-\u5BA2\u6237\u7AEF":"UI \u7F16\u8F91",width:n.width,height:n.height,pixelWidth:n.pixelWidth,pixelHeight:n.pixelHeight}}import{closeSync as If,existsSync as kr,openSync as Cf,opendirSync as kf,readSync as Ef,realpathSync as Kt,statSync as Xs}from"node:fs";import{basename as Af,dirname as Ls,isAbsolute as to,join as _f,relative as Ws,resolve as Mi}from"node:path";var Pf="qxqy-simulator-save",Ks=new Set(["node_modules",".git","dist",".dsh","coverage"]),Ti=50,qs=4096,Qn=1e4,Zn=1e3,eo=8;function Et(e=""){let t=Mi(String(e||process.cwd()));if(!kr(t))throw new Error(`workspace does not exist: ${t}`);if(!Xs(t).isDirectory())throw new Error(`workspace is not a directory: ${t}`);return Kt(t)}function Ri(e,t,i=!1){let r=Ws(e,t);if(!i&&!r||r.startsWith("..")||to(r))throw new Error("path must stay inside the configured workspace");return r}function Re(e,t){let i=String(t||"").trim();if(!i||to(i))throw new Error("path must be a non-empty workspace-relative path");let r=Kt(Mi(e)),n=Mi(r,i);if(Ri(r,n),!kr(n))throw new Error(`file does not exist: ${i}`);let o=Kt(n);return Ri(r,o),o}function xe(e,t){let i=String(t||"").trim();if(!i||to(i))throw new Error("path must be a non-empty workspace-relative path");let r=Kt(Mi(e)),n=Mi(r,i);Ri(r,n);let o=Ls(n);for(;!kr(o);){let a=Ls(o);if(a===o)throw new Error("unable to resolve output directory");o=a}return Ri(r,Kt(o),!0),kr(n)&&Ri(r,Kt(n)),n}function Tf(e,t=qs){let i=Buffer.alloc(t),r=Cf(e,"r");try{let n=Ef(r,i,0,t,0);return i.subarray(0,n).toString("utf8")}finally{If(r)}}function Js(e,t,i,r,n){if(r>eo){n.depthLimitedDirectories+=1;return}if(n.scannedDirectories>=Zn){n.directoryLimitReached=!0;return}let o;try{n.scannedDirectories+=1,o=kf(e)}catch{n.unreadableEntries+=1;return}try{let a;for(;a=o.readSync();){if(n.scannedEntries>=Qn){n.entryLimitReached=!0;return}if(n.scannedEntries+=1,a.name.startsWith(".")||a.isDirectory()&&Ks.has(a.name)){n.skippedEntries+=1,a.isDirectory()&&(n.skippedDirectories+=1);continue}let s=_f(e,a.name);if(a.isDirectory()){if(Js(s,t,i,r+1,n),n.entryLimitReached||n.directoryLimitReached)return;continue}if(!(!a.isFile()||!/\.json$/i.test(a.name))){n.scannedJsonFiles+=1;try{let c=Xs(s),l=Tf(s);if(!l.includes(Pf))continue;let u=l.match(/"name"\s*:\s*("(?:\\.|[^"\\])*")/)?.[1],f=Af(a.name,".json");if(u)try{f=JSON.parse(u)||f}catch{}i.push({path:Ws(t,s).replaceAll("\\","/"),name:f,bytes:c.size,mtime:c.mtimeMs})}catch{n.unreadableEntries+=1}}}}catch{n.unreadableEntries+=1}finally{try{o.closeSync()}catch{n.unreadableEntries+=1}}}function Er(e){let t=Et(e),i=[],r={truncated:!1,warnings:[],scannedDirectories:0,scannedEntries:0,scannedJsonFiles:0,matchedArchives:0,skippedDirectories:0,skippedEntries:0,unreadableEntries:0,depthLimitedDirectories:0,entryLimitReached:!1,directoryLimitReached:!1,limits:{archives:Ti,entries:Qn,directories:Zn,depth:eo,headBytes:qs},policy:{excludedDirectories:[...Ks],hiddenEntries:!1,symlinks:!1,validatesJson:!1}};return Js(t,t,i,0,r),i.sort((n,o)=>o.mtime-n.mtime||n.path.localeCompare(o.path)),r.matchedArchives=i.length,i.length>Ti&&r.warnings.push(`\u53D1\u73B0 ${i.length} \u4E2A\u5B58\u6863\uFF0C\u4EC5\u663E\u793A\u4FEE\u6539\u65F6\u95F4\u6700\u65B0\u7684 ${Ti} \u4E2A\uFF1B\u5176\u4ED6\u5B58\u6863\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u3002`),(r.entryLimitReached||r.directoryLimitReached)&&r.warnings.push(`\u81EA\u52A8\u53D1\u73B0\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\uFF08${Qn} \u9879 / ${Zn} \u4E2A\u76EE\u5F55\uFF09\uFF0C\u5217\u8868\u53EF\u80FD\u4E0D\u5B8C\u6574\uFF1B\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u5B58\u6863\u3002`),r.depthLimitedDirectories&&r.warnings.push(`\u81EA\u52A8\u53D1\u73B0\u8DF3\u8FC7 ${r.depthLimitedDirectories} \u4E2A\u8D85\u8FC7 ${eo} \u5C42\u7684\u76EE\u5F55\uFF1B\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u5176\u4E2D\u7684\u5B58\u6863\u3002`),r.skippedEntries&&r.warnings.push("\u81EA\u52A8\u53D1\u73B0\u8DF3\u8FC7\u9690\u85CF\u9879\u53CA\u751F\u6210\u76EE\u5F55\uFF08\u5982 node_modules\u3001dist\uFF09\uFF1B\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u5176\u4E2D\u7684\u5B58\u6863\u3002"),r.unreadableEntries&&r.warnings.push(`\u81EA\u52A8\u53D1\u73B0\u65E0\u6CD5\u8BFB\u53D6 ${r.unreadableEntries} \u4E2A\u6587\u4EF6\u6216\u76EE\u5F55\uFF1B\u8BF7\u68C0\u67E5\u8BBF\u95EE\u6743\u9650\uFF0C\u6216\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u67E5\u770B\u5177\u4F53\u9519\u8BEF\u3002`),r.truncated=i.length>Ti||r.entryLimitReached||r.directoryLimitReached||r.depthLimitedDirectories>0,{bound:!0,workspace:t,archives:i.slice(0,Ti),discovery:r}}import{readFileSync as Rf}from"node:fs";import{homedir as Mf}from"node:os";import{join as Nf}from"node:path";var Of={"zh-cn":"LanguageChs",chs:"LanguageChs","zh-tw":"LanguageCht",cht:"LanguageCht",en:"LanguageEng","en-us":"LanguageEng",eng:"LanguageEng",ja:"LanguageJpn","ja-jp":"LanguageJpn",jp:"LanguageJpn",ko:"LanguageKor","ko-kr":"LanguageKor",kr:"LanguageKor",fr:"LanguageFra",fra:"LanguageFra",de:"LanguageDeu",deu:"LanguageDeu",es:"LanguageSpa",spa:"LanguageSpa",pt:"LanguagePor",por:"LanguagePor",ru:"LanguageRus",rus:"LanguageRus",th:"LanguageTha",tha:"LanguageTha",vi:"LanguageVie",vie:"LanguageVie",id:"LanguageInd",ind:"LanguageInd",tr:"LanguageTur",tur:"LanguageTur",it:"LanguageIta",ita:"LanguageIta"};function Ff(e){let i=[...String(e||"").matchAll(/Request to set language:([A-Za-z0-9_-]+)/g)].at(-1)?.[1]?.toLowerCase();return Of[i]||null}function Df(){return Nf(Mf(),"AppData","LocalLow","miHoYo","\u539F\u795E","output_log.txt")}function Qs(e=Df()){try{return Ff(Rf(e,"utf8"))}catch{return null}}import{existsSync as no,lstatSync as zf,mkdirSync as Zs,readFileSync as Ar,readdirSync as $f,realpathSync as el,renameSync as Gf,rmSync as Vf,statSync as Tr,writeFileSync as tl}from"node:fs";import{createHash as Yf,randomUUID as il}from"node:crypto";import{homedir as Bf}from"node:os";import{basename as jf,dirname as _r,isAbsolute as Hf,join as Pr,relative as Uf}from"node:path";var $e=e=>Yf("sha256").update(e).digest("hex"),io=e=>no(e)?$e(Ar(e)):null,ro=(e,t)=>{let i=Uf(e,t);return!Hf(i)&&i!==".."&&!i.startsWith(`..${process.platform==="win32"?"\\":"/"}`)};function rl(e,t){let i=xe(e,t),r=i;for(;r!==e;){try{if(zf(r).isSymbolicLink())throw new Error("\u5B9E\u673A\u76EE\u6807\u4E0D\u80FD\u5305\u542B\u7B26\u53F7\u94FE\u63A5\u6216\u76EE\u5F55\u8054\u63A5")}catch(n){if(n.code!=="ENOENT")throw n}r=_r(r)}if(no(i)&&!Tr(i).isFile())throw new Error("\u5B9E\u673A\u76EE\u6807\u4E0D\u662F\u666E\u901A\u6587\u4EF6");return i}function nl(e=Pr(Bf(),"AppData","LocalLow","miHoYo","\u539F\u795E","BeyondLocal")){let t=r=>{try{return $f(r,{withFileTypes:!0}).filter(n=>n.isDirectory()&&/^\d+$/.test(n.name)).map(n=>n.name)}catch{return[]}},i=[];for(let r of t(e)){let n=Pr(e,r,"Beyond_Local_Save_Level");for(let o of t(n)){let a=Pr(n,o,"external_lua_file","default_import_file");no(a)&&Tr(a).isDirectory()&&i.push({uid:r,editorId:o,path:a})}}return{candidates:i}}var Rr=class{constructor(t){this.controller=t,this.plan=null,this.lastResult=null}preview(){let t=this.controller,i=t.studio.archiveData(),r=si(i.scriptSync);if(!r)throw new Error("\u8BF7\u5148\u914D\u7F6E\u5B9E\u673A\u811A\u672C\u76EE\u5F55");let n=el(t.activeWorkspacePath()),o=el(r.clientImportRoot);if(!Tr(o).isDirectory())throw new Error("\u5B9E\u673A\u5BFC\u5165\u6839\u76EE\u5F55\u4E0D\u5B58\u5728");let a=r.workspaceDir?Re(n,r.workspaceDir):n;if(!Tr(a).isDirectory())throw new Error("\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u4E0D\u5B58\u5728");if(ro(a,o)||ro(o,a))throw new Error("\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u4E0E\u5B9E\u673A\u76EE\u5F55\u4E0D\u80FD\u91CD\u53E0");let s=new Map,c=i.assets.scripts.map(u=>{let f={id:u.id,path:u.path,sourceKind:u.source.trim()?"\u5B58\u6863\u6E90\u7801":"\u5DE5\u4F5C\u533A\u6587\u4EF6"};try{let h=ji(u.path);if(!/\.lua$/i.test(h))throw new Error("\u811A\u672C\u8DEF\u5F84\u5FC5\u987B\u4EE5 .lua \u7ED3\u5C3E");let p=r.workspaceDir?`${r.workspaceDir}/`:"";if(!h.startsWith(p))throw new Error("\u811A\u672C\u4E0D\u5728\u6240\u914D\u7F6E\u7684\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u4E2D");let m=[r.clientSubdir,h.slice(p.length)].filter(Boolean).join("/"),g=rl(o,m),v=g.toLowerCase();s.set(v,(s.get(v)||0)+1);let C=null,w="";try{C=Ar(Re(n,h),"utf8")}catch(V){w=V.message}if(!u.source.trim()&&C===null)throw new Error(w);let P=u.source.trim()?u.source:C,M=io(g);return{...f,target:g,targetRelative:m,source:P,diskSource:C,diskError:w,sourceMismatch:!!(u.source.trim()&&C!==null&&u.source!==C),beforeSource:M===null?"":Ar(g,"utf8"),beforeHash:M,sourceHash:$e(P),status:M===null?"\u65B0\u589E":M===$e(P)?"\u672A\u53D8\u5316":"\u8986\u76D6"}}catch(h){return{...f,status:"\u9519\u8BEF",error:h.message}}});for(let u of c)u.target&&s.get(u.target.toLowerCase())>1&&(u.status="\u9519\u8BEF",u.error="\u591A\u4E2A\u811A\u672C\u6620\u5C04\u5230\u540C\u4E00\u76EE\u6807\u6587\u4EF6");let l=$e(JSON.stringify({archive:i,workspace:n,root:o,rows:c}));return this.plan={id:il(),fingerprint:l,root:o,workspace:n,rows:c,pendingGuidChanges:i.controlGuidChanges.length,createdAt:new Date().toISOString()},this.plan}apply({planId:t,scriptIds:i,confirmed:r}){let n=this.plan;if(r!==!0||!n||n.id!==t)throw new Error("\u8BF7\u5148\u68C0\u67E5\u5DEE\u5F02\u5E76\u786E\u8BA4\u672C\u6B21\u590D\u5236");let o=this.preview();if(this.plan=null,o.fingerprint!==n.fingerprint)throw new Error("\u5185\u5BB9\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");if(n.pendingGuidChanges)throw new Error("\u8BF7\u5148\u6838\u5BF9\u5E76\u786E\u8BA4\u63A7\u4EF6\u7D22\u5F15\u7684 Lua \u5F15\u7528\u53D8\u66F4");if(!Array.isArray(i)||!i.length||new Set(i).size!==i.length)throw new Error("\u8BF7\u9009\u62E9\u8981\u590D\u5236\u7684\u811A\u672C");let a=i.map(u=>{let f=n.rows.find(h=>h.id===u);if(!f||f.error||f.status==="\u672A\u53D8\u5316")throw new Error("\u6240\u9009\u811A\u672C\u4E0D\u80FD\u590D\u5236\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");return f});this.controller.assertSavedArchive();let s=`.qxqy-script-sync-backups/${n.id}`,c=xe(n.workspace,s);if(ro(n.root,c))throw new Error("\u5907\u4EFD\u76EE\u5F55\u4E0D\u80FD\u4F4D\u4E8E\u5B9E\u673A\u811A\u672C\u76EE\u5F55\u4E2D");let l=[];for(let u of a){let f="";try{let h=rl(n.root,u.targetRelative);if(io(h)!==u.beforeHash)throw new Error("\u76EE\u6807\u6587\u4EF6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");if(u.beforeHash!==null){let p=xe(n.workspace,`${s}/${u.targetRelative}`);Zs(_r(p),{recursive:!0}),tl(p,Ar(h),{flag:"wx"})}if(Zs(_r(h),{recursive:!0}),f=Pr(_r(h),`.${jf(h)}.${il()}.tmp`),tl(f,u.source,{flag:"wx"}),io(h)!==u.beforeHash)throw new Error("\u76EE\u6807\u6587\u4EF6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");Gf(f,h),l.push({id:u.id,target:h,status:"\u6210\u529F"})}catch(h){l.push({id:u.id,target:u.target,status:"\u5931\u8D25",error:h.message})}finally{f&&Vf(f,{force:!0})}}return this.lastResult={completed:l.every(u=>u.status==="\u6210\u529F"),at:new Date().toISOString(),backupRoot:c,results:l},this.lastResult}};import{createHash as Lf,randomUUID as Xf}from"node:crypto";import{mkdir as Wf,open as Kf,readFile as qf,rename as Jf,rm as oo,stat as Qf,writeFile as Zf}from"node:fs/promises";import{homedir as ao}from"node:os";import{join as qt,resolve as ed}from"node:path";import{setTimeout as td}from"node:timers/promises";var so=e=>Lf("sha256").update(e).digest("hex");function Mr(e){return qt(process.platform==="win32"?process.env.LOCALAPPDATA||qt(ao(),"AppData","Local"):process.platform==="darwin"?qt(ao(),"Library","Caches"):process.env.XDG_CACHE_HOME||qt(ao(),".cache"),"beyond-simulator",e)}var lt=class{constructor({cacheDir:t,source:i,version:r,extension:n,accepts:o,fetch:a=globalThis.fetch,timeout:s=12e3}){this.directory=qt(ed(t),r,so(i).slice(0,12)),Object.assign(this,{source:i,extension:n,accepts:o,fetcher:a,timeout:s}),this.pending=new Map,this.failures=new Map,this.active=0,this.waiters=[]}async limited(t){this.active>=4?await new Promise(i=>this.waiters.push(i)):this.active++;try{return await t()}finally{let i=this.waiters.shift();i?i():this.active--}}async download(t,i,r,n){let o=await this.fetcher(new URL(t,this.source),{signal:r,redirect:"error",cache:n?"no-cache":"default"});if(!o.ok)throw Object.assign(new Error(`Asset source returned HTTP ${o.status}`),{status:o.status});if(Number(o.headers.get("content-length"))>i)throw new Error("Asset response too large");let a=[],s=0;for await(let c of o.body){if(s+=c.length,s>i)throw new Error("Asset response too large");a.push(c)}return Buffer.concat(a)}async cached(t){try{let i=await qf(t);return{data:i,...await this.decode(i),etag:`"${so(i)}"`}}catch(i){if(i.code==="ENOENT")return null;if(i.code==="EACCES"||i.code==="EPERM")throw i;return null}}async load(t,i=!1){let r=qt(this.directory,`${t}.${this.extension}`),n=!i&&await this.cached(r);if(n)return n;await Wf(this.directory,{recursive:!0});let o=`${r}.lock`,a=Date.now()+3e4,s;for(;!s;)try{s=await Kf(o,"wx")}catch(l){if(l.code!=="EEXIST")throw l;let u=!i&&await this.cached(r);if(u)return u;try{Date.now()-(await Qf(o)).mtimeMs>6e4&&await oo(o,{force:!0})}catch(f){if(f.code!=="ENOENT")throw f}if(Date.now()>a)throw new Error("Timed out waiting for asset cache writer");await td(80)}let c=`${r}.${Xf()}.tmp`;try{let l=!i&&await this.cached(r);if(l)return l;let u=new AbortController,f=setTimeout(()=>u.abort(),this.timeout),h;try{h=await this.produce(t,u.signal,i)}finally{clearTimeout(f),u.abort()}let p=await this.decode(h);return await Zf(c,h,{flag:"wx"}),await Jf(c,r),{data:h,...p,etag:`"${so(h)}"`}}finally{try{await oo(c,{force:!0})}finally{await s.close(),await oo(o,{force:!0})}}}get(t,{refresh:i=!1}={}){if(!this.accepts(t))return Promise.reject(Object.assign(new Error("Asset ID is not in the preview allowlist"),{status:404}));if(this.pending.has(t))return this.pending.get(t);let r=this.failures.get(t);if(!i&&r&&r.until>Date.now())return Promise.reject(r.error);let n=this.limited(()=>this.load(t,i)).then(o=>(this.failures.delete(t),o),o=>{throw i||this.failures.set(t,{until:Date.now()+6e4,error:o}),o}).finally(()=>this.pending.delete(t));return this.pending.set(t,n),n}async refresh(t){if(!this.accepts(t))throw Object.assign(new Error("Asset ID is not in the preview allowlist"),{status:404});return await this.pending.get(t)?.catch(()=>{}),this.failures.delete(t),this.get(t,{refresh:!0})}};import{createHash as id}from"node:crypto";import{createCanvas as rd,loadImage as ol}from"@napi-rs/canvas";var Nr=class extends lt{constructor({cacheDir:t,source:i=zi,fetch:r=globalThis.fetch}){super({cacheDir:t,source:i,fetch:r,version:"border-v1",extension:"json",accepts:n=>Qe(n)})}decode(t){let i=JSON.parse(t.toString("utf8"));if(i!==null&&(typeof i!="object"||Array.isArray(i)))throw new Error("Invalid image metadata");let r=Ns(i);return{raw:i,meta:r}}async produce(t,i,r){try{return await this.download(`border/${t}.json`,128*1024,i,r)}catch(n){if(n.status===404)return Buffer.from("null");throw n}}};var co=20*1024*1024,nd=Buffer.from("89504e470d0a1a0a","hex");function al(e,t){return t.throwIfAborted(),new Promise((i,r)=>{let n=()=>r(t.reason);t.addEventListener("abort",n,{once:!0}),e.then(i,r).finally(()=>t.removeEventListener("abort",n))})}function od(){return process.env.QXQY_IMAGE_CACHE_DIR||Mr("images")}function lo(e){if(e.length<24||e.length>co||!e.subarray(0,8).equals(nd))throw new Error("Invalid sprite PNG");let t=e.readUInt32BE(16),i=e.readUInt32BE(20);if(!t||!i||t>8192||i>8192||t*i>16777216)throw new Error("Sprite PNG exceeds pixel limit")}var uo=class e extends lt{constructor({cacheDir:t=od(),fetch:i=globalThis.fetch,source:r,imageSource:n="StaticReference"}={}){let o=ke(n);if(!["StaticReference","Prefab"].includes(o))throw new Error(`Unsupported image source: ${o}`);super({cacheDir:t,fetch:i,source:r||(o==="Prefab"?So:zi),version:o==="Prefab"?oi:Vr,extension:"png",accepts:a=>Qe(a,o)}),this.imageSource=o,this.cacheDir=t,this.prefabStore=null,this.metadataStore=null}forSource(t){let i=ke(t);if(i===this.imageSource)return this;if(i==="Prefab"&&this.imageSource==="StaticReference")return this.prefabStore||=new e({cacheDir:this.cacheDir,imageSource:"Prefab",fetch:(...r)=>this.fetcher(...r)});throw Object.assign(new Error(`Unsupported image source: ${i}`),{status:404})}get(t,{imageSource:i=this.imageSource,...r}={}){try{let n=this.forSource(i);return n===this?super.get(t,r):n.get(t,r)}catch(n){return Promise.reject(n)}}refresh(t,{imageSource:i=this.imageSource}={}){try{let r=this.forSource(i);return r===this?super.refresh(t):r.refresh(t)}catch(r){return Promise.reject(r)}}async decode(t){return lo(t),{image:await ol(t)}}metadata(t,{imageSource:i=this.imageSource,refresh:r=!1}={}){try{let n=this.forSource(i);if(n!==this)return n.metadata(t,{refresh:r});if(!this.accepts(t))throw Object.assign(new Error("Image ID is not in the preview allowlist"),{status:404});return this.imageSource==="Prefab"?Promise.resolve({meta:null,raw:null}):(this.metadataStore||=new Nr({cacheDir:this.cacheDir,source:this.source,fetch:(...o)=>this.fetcher(...o)}),r?this.metadataStore.refresh(t):this.metadataStore.get(t))}catch(n){return Promise.reject(n)}}async produce(t,i,r){if(this.imageSource==="Prefab"){let c=await this.download(`sprite/${t}.png`,co,i,r);lo(c);let l=Di(t);if(c.readUInt32BE(16)!==l||c.readUInt32BE(20)!==l)throw new Error("Prefab PNG does not match catalog dimensions");return c}let[n,o]=await Promise.all([this.download(`sprite/${t}.png`,co,i,r),this.metadata(t,{refresh:r})]);lo(n);let a=await ol(n),s=o.raw?Ps(a,o.raw,rd):a;return o.raw?Buffer.from(s.toBuffer("image/png")):n}async prepare(t,i){let r=new Map,n=new Map,o=[],a=[...new Map((t||[]).filter(u=>u.kind==="image"&&u.visible!==!1&&Qe(u.imageId,u.imageSource)).map(u=>[Gi(u.imageId,u.imageSource),{imageId:u.imageId,imageSource:ke(u.imageSource)}])).entries()];i?.throwIfAborted();let s=AbortSignal.timeout(45e3),c=i?AbortSignal.any([i,s]):s,l=0;await Promise.all(Array.from({length:Math.min(4,a.length)},async()=>{for(;l<a.length&&!c.aborted;){let[u,f]=a[l++];try{let h=await al(this.get(f.imageId,f),c);r.set(u,h.image);let p=await al(this.metadata(f.imageId,f),c);n.set(u,p.meta)}catch(h){o.push({...f,error:h.message})}}}));for(let[,u]of a.slice(l))o.push({...u,error:"Image preparation timed out"});return i?.throwIfAborted(),{images:r,imageMetadata:n,warnings:o}}},ad;function Ni(){return ad||=new uo}async function sl(e,t,i=Ni()){let r=new URL(e.url,"http://localhost");if(r.pathname!==$i.slice(0,-1)&&!r.pathname.startsWith($i))return!1;try{if(!["GET","HEAD"].includes(e.method))throw Object.assign(new Error("GET or HEAD required"),{status:405});let n=r.pathname.match(new RegExp(`^${$i}(${Vr}|${oi})/([0-9]+)\\.(png|json)$`));if(!n)throw Object.assign(new Error("Unknown image resource"),{status:404});let o={imageSource:n[1]===oi?"Prefab":"StaticReference"};if(n[3]==="json"){let{meta:c}=await i.metadata(Number(n[2]),o),l=JSON.stringify(c),u=`"${id("sha256").update(l).digest("hex")}"`,f={"content-type":"application/json; charset=utf-8","cache-control":"private, max-age=43200",etag:u,"x-content-type-options":"nosniff"};return e.headers["if-none-match"]===u?(t.writeHead(304,f),t.end()):(t.writeHead(200,f),t.end(e.method==="HEAD"?void 0:l)),!0}let a=await i.get(Number(n[2]),o),s={"content-type":"image/png","cache-control":"private, max-age=43200",etag:a.etag,"x-content-type-options":"nosniff"};e.headers["if-none-match"]===a.etag?(t.writeHead(304,s),t.end()):(t.writeHead(200,{...s,"content-length":a.data.length}),t.end(e.method==="HEAD"?void 0:a.data))}catch(n){t.writeHead(n.status||502,{"content-type":"text/plain; charset=utf-8","cache-control":"no-store","x-content-type-options":"nosniff"}),t.end(e.method==="HEAD"?void 0:n.message)}return!0}import{existsSync as sd,mkdirSync as ll,readFileSync as ld,renameSync as cd,rmSync as ud,writeFileSync as fo}from"node:fs";import{randomUUID as fl}from"node:crypto";import{dirname as cl,join as fd}from"node:path";function ul(e,t){let i=`${e}.${fl()}.tmp`;try{fo(i,t,{flag:"wx"}),cd(i,e)}finally{ud(i,{force:!0})}}var Or=class{constructor(t){this.controller=t,this.plan=null}inspect(){let t=this.controller.studio.archiveData(),i=t.controlGuidChanges||[],r=t.assets.scripts,n=[],o=new Map;i.length||n.push("\u6CA1\u6709\u5F85\u540C\u6B65\u7684\u7D22\u5F15\u53D8\u66F4");try{o=Cs(i)}catch(u){n.push(u.message)}let a=this.controller.activeWorkspacePath();a||n.push("\u8BF7\u5148\u7ED1\u5B9A\u5DE5\u4F5C\u533A\uFF0C\u4EE5\u4FDD\u5B58\u540C\u6B65\u524D\u7684\u5907\u4EFD");let s=new Map,c=r.map(u=>{let f={id:u.id,path:u.path,source:u.source,file:"",fileBefore:null,edits:[],issues:[]};if(u.path)try{if(!a)throw new Error("\u5DE5\u4F5C\u533A\u5C1A\u672A\u7ED1\u5B9A\uFF0C\u65E0\u6CD5\u6838\u5BF9\u9879\u76EE\u811A\u672C\u6587\u4EF6");let p=xe(a,u.path);if(sd(p)){f.file=Re(a,u.path);let m=ld(f.file);if(f.fileBefore=m.toString("utf8"),!m.equals(Buffer.from(f.fileBefore)))throw new Error("\u9879\u76EE\u811A\u672C\u4E0D\u662F\u6709\u6548 UTF-8\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9\u7F16\u7801");if(u.source.trim()&&f.fileBefore!==u.source)throw new Error("\u5B58\u6863\u6E90\u7801\u4E0E\u9879\u76EE\u6587\u4EF6\u4E0D\u540C\uFF0C\u8BF7\u4EA4\u7ED9 AI \u5408\u5E76\u540E\u540C\u6B65");if(u.source.trim()||(f.source=f.fileBefore),s.has(f.file))throw new Error("\u591A\u4E2A\u811A\u672C\u6307\u5411\u540C\u4E00\u4E2A\u9879\u76EE\u6587\u4EF6\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9");s.set(f.file,u.id)}}catch(p){f.issues.push({line:0,reason:p.message})}!f.source.trim()&&u.path&&!f.file&&f.issues.push({line:0,reason:"\u627E\u4E0D\u5230\u6B64\u811A\u672C\u7684\u6E90\u7801\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9\u6587\u4EF6\u8DEF\u5F84"});let h=ks(f.source,o);return f.source=h.source,f.edits=h.edits,f.issues.push(...h.issues),f}),l=$e(JSON.stringify({archive:t,files:c.map(u=>[u.file,u.fileBefore])}));return{archive:t,rows:c,issues:n,fingerprint:l}}preview(){let t=this.inspect();return t.id=fl(),this.plan=t,{id:t.id,canApply:!t.issues.length&&t.rows.every(i=>!i.issues.length),issues:t.issues,changes:t.archive.controlGuidChanges.length,replacements:t.rows.reduce((i,r)=>i+r.edits.length,0),rows:t.rows.map(({id:i,path:r,file:n,edits:o,issues:a})=>({id:i,path:r,file:n,edits:o,issues:a}))}}apply({planId:t,expectedRevision:i}){let r=this.plan;if(!r||r.id!==t)throw new Error("\u8BF7\u5148\u9884\u89C8 Lua \u7D22\u5F15\u540C\u6B65");if(i!==this.controller.get().version)throw new Error("revision conflict: \u8BF7\u91CD\u65B0\u9884\u89C8");if(this.inspect().fingerprint!==r.fingerprint)throw new Error("\u6E90\u7801\u3001\u6587\u4EF6\u6216\u7D22\u5F15\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u9884\u89C8");if(r.issues.length||r.rows.some(f=>f.issues.length))throw new Error("\u6E90\u7801\u6587\u4EF6\u6216\u7D22\u5F15\u6620\u5C04\u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9\uFF1B\u672C\u6B21\u6CA1\u6709\u4FEE\u6539\u811A\u672C");let o=_i(r.archive);for(let f of r.rows.filter(h=>h.edits.length))o.patch({op:"updateScript",id:f.id,source:f.source});o.patch({op:"acknowledgeControlGuidChanges",changeIds:r.archive.controlGuidChanges.map(f=>f.id)});let a=Buffer.from(JSON.stringify(o.archiveData())).toString("base64"),s=r.rows.filter(f=>f.edits.length&&f.file),c=this.controller.activeWorkspacePath(),l=s.length?xe(c,`.qxqy-guid-sync-backups/${r.id}`):"",u=[];try{for(let h of s){let p=fd(l,`${h.id}.lua`);ll(cl(p),{recursive:!0}),fo(p,h.fileBefore,{flag:"wx"})}let f=xe(c,`.qxqy-guid-sync-backups/${r.id}/before.save.json`);ll(cl(f),{recursive:!0}),fo(f,JSON.stringify(r.archive),{flag:"wx"});for(let h of s)ul(h.file,h.source),u.push(h);this.controller.studio.importData("json",a)}catch(f){let h=[];for(let p of u.reverse())try{ul(p.file,p.fileBefore)}catch{h.push(p.file)}throw this.plan=null,new Error(`${f.message}${h.length?`\uFF1B\u56DE\u6EDA\u5931\u8D25\uFF0C\u8BF7\u4ECE ${l} \u6062\u590D\uFF1A${h.join("\u3001")}`:"\uFF1B\u5B58\u6863\u672A\u63D0\u4EA4\uFF0C\u5DF2\u5199\u5165\u7684\u9879\u76EE\u6587\u4EF6\u5DF2\u56DE\u6EDA"}`)}return this.plan=null,{...this.controller.get(),controlGuidSyncResult:{replacements:r.rows.reduce((f,h)=>f+h.edits.length,0),scripts:r.rows.filter(f=>f.edits.length).length,projectFiles:s.length,backupRoot:`.qxqy-guid-sync-backups/${r.id}`}}}};var bd=Math.max(1e3,Number(process.env.QXQY_PLAY_TIMEOUT_MS)||8e3),vd=8e3;function dl(){let e=new Error("operation aborted");return e.name="AbortError",e}function po(e){if(e!=="manual"&&e!=="realtime")throw new Error("clockMode must be manual or realtime");return e}var Jt=class{constructor(t="",{imageAssets:i=Ni(),clockMode:r="realtime"}={}){this.workspacePath=t?Et(t):"",this.studio=_i(void 0,this.workspacePath?{workspacePath:this.workspacePath}:void 0),this.worker=null,this.pending=new Map,this.sequence=1,this.lock=Promise.resolve(),this.archivePath="",this.archiveStamp="",this.savedArchive="",this.scriptSync=new Rr(this),this.controlGuidSync=new Or(this),this.imageAssets=i,this.defaultClockMode=po(r),this.playClockMode=this.defaultClockMode}async exclusive(t){let i=this.lock,r;this.lock=new Promise(n=>{r=n}),await i;try{return await t()}finally{r()}}get(){return{...this.studio.get(),storage:{path:this.archivePath}}}scriptSyncAction(t,i={}){if(t==="discover")return nl();if(t==="status")return{config:this.get().scriptSync,lastResult:this.scriptSync.lastResult};if(t==="configure"){if(!Number.isInteger(i.expectedRevision))throw new Error("expectedRevision is required");return this.patch({op:"setScriptSync",config:i.config,expectedRevision:i.expectedRevision})}if(t==="preview")return this.scriptSync.preview();throw new Error("unknown script sync action (AI \u53EF\u914D\u7F6E\u548C\u9884\u89C8\uFF1B\u590D\u5236\u9700\u5728\u7F16\u8F91\u5668\u4E2D\u786E\u8BA4)")}assertSavedArchive(){if(!this.archivePath||this.savedArchive!==JSON.stringify(this.studio.archiveData()))throw new Error("\u8BF7\u5148\u4FDD\u5B58\u5F53\u524D\u5B8C\u6574\u5B58\u6863\uFF0C\u518D\u786E\u8BA4\u590D\u5236");let t=Re(this.activeWorkspacePath(),this.archivePath);if($e(ho(t))!==this.archiveStamp)throw new Error("\u5B58\u6863\u6587\u4EF6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u52A0\u8F7D\u5E76\u68C0\u67E5")}saveForScriptSync(t,i){if(i!==this.get().version)throw new Error("revision conflict: reload before saving");let r=xe(this.activeWorkspacePath(),t);if(hd(r)){let n=this.archivePath?xe(this.activeWorkspacePath(),this.archivePath):"";if(r!==n||$e(ho(r))!==this.archiveStamp)throw new Error("File changed or already exists; load it again or save under a new path")}return this.saveArchive(t)}patch(t){return t?.op==="previewControlGuidSync"?{...this.get(),controlGuidSyncPreview:this.controlGuidSync.preview()}:t?.op==="syncControlGuidReferences"?this.controlGuidSync.apply(t):{...this.studio.patch(t),storage:{path:this.archivePath}}}listArchives(){return Er(this.workspacePath)}loadArchive(t){let i=this.activeWorkspacePath();if(!i)throw new Error("workspace is not bound");let r=Re(i,t),n=ho(r),o=this.studio.importData("json",n.toString("base64"),gd(r));return this.archivePath=String(t).trim().replaceAll("\\","/"),this.archiveStamp=$e(n),this.savedArchive=JSON.stringify(this.studio.archiveData()),o}saveArchive(t=this.archivePath||"qxqy-simulator.save.json"){let i=String(t).trim(),r=this.activeWorkspacePath();if(!r)throw new Error("workspace is not bound");let n=xe(r,i);pd(yd(n),{recursive:!0});let o=Buffer.from(JSON.stringify(this.studio.archiveData(),null,2)+`
|
|
115
|
-
`,"utf8");return md(n,o),this.archivePath=i.replaceAll("\\","/"),this.archiveStamp=$e(o),this.savedArchive=JSON.stringify(this.studio.archiveData()),{path:this.archivePath,bytes:o.length,revision:this.studio.get().version,name:this.studio.get().save?.name||""}}activeWorkspacePath(){let t=this.studio.get().workspace;return t?.bound&&t.path?String(t.path):this.workspacePath}createWorker(){let t=new dd(new URL("./worker.js",import.meta.url),{type:"module"});return t.on("message",i=>{let r=this.pending.get(i?.id);r&&(this.pending.delete(i.id),i.ok?r.resolve(i.value):r.reject(new Error(i.error||"play worker failed")))}),t.on("error",i=>{this.worker===t&&(this.worker=null),this.rejectPending(i)}),t.on("exit",i=>{this.worker===t&&(this.worker=null),i!==0&&this.rejectPending(new Error(`play worker exited with code ${i}`))}),this.worker=t,t}rejectPending(t){for(let i of this.pending.values())i.reject(t);this.pending.clear()}async terminateWorker(t=new Error("play worker terminated")){let i=this.worker;this.worker=null,this.rejectPending(t),i&&await i.terminate().catch(()=>{})}request(t,i,r,n=bd){let o=this.worker||this.createWorker(),a=this.sequence++;return new Promise((s,c)=>{let l=!1,u=(p,m)=>{l||(l=!0,clearTimeout(h),r?.removeEventListener("abort",f),p(m))},f=()=>{this.pending.delete(a),u(c,dl()),this.terminateWorker(dl())},h=setTimeout(()=>{this.pending.delete(a);let p=new Error(`play worker timed out after ${n}ms`);u(c,p),this.terminateWorker(p)},n);if(this.pending.set(a,{resolve:p=>u(s,p),reject:p=>u(c,p)}),r?.aborted)return f();r?.addEventListener("abort",f,{once:!0}),o.postMessage({id:a,action:t,args:i})})}async play(t,i={},r){if((t==="start"||t==="device")&&!i.language){let n=Qs();n&&(i={...i,language:n})}if(t==="start"){let n=po(i.clockMode??this.defaultClockMode);return await this.terminateWorker(),this.playClockMode=n,this.request("start",{archive:this.studio.archiveData(),workspacePath:this.activeWorkspacePath(),...i,clockMode:n},r)}if(t==="device"){let n=String(i.canvasId||"").trim();if(!K[n])throw new Error(`unknown canvas preset: ${n||"(empty)"} (available: ${Object.keys(K).join(", ")})`);let o=po(i.clockMode??this.playClockMode);return await this.terminateWorker(),this.playClockMode=o,this.request("start",{archive:this.studio.archiveData(),workspacePath:this.activeWorkspacePath(),...i,canvasId:n,clockMode:o},r)}if(t==="stop"){if(!this.worker)return{running:!1,tree:[],logs:[]};try{return await this.request("stop",i,r)}finally{await this.terminateWorker()}}if(!this.worker)throw new Error("play session has not started");return this.request(t,i,r)}async playScreenshot(t){if(!this.worker)throw new Error("play session has not started");let i=await this.request("get",{view:!0},t,vd),r=await this.imageAssets.prepare(i.scene?.nodes,t),n=js(i.scene,i.canvasWidth,i.canvasHeight,r);return{data:n.data,canvasId:String(i.canvasId||""),frame:Number.isFinite(Number(i.frame))?Number(i.frame):0,time:Number.isFinite(Number(i.time))?Number(i.time):0,clockMode:i.clockMode,width:n.width,height:n.height,pixelWidth:n.pixelWidth,pixelHeight:n.pixelHeight,assetWarnings:r.warnings}}async uiScreenshot(t){let i=this.studio.get(),r=await this.imageAssets.prepare(i.boxes,t),n=Us(i,r);return{data:n.data,page:n.page,width:n.width,height:n.height,pixelWidth:n.pixelWidth,pixelHeight:n.pixelHeight,assetWarnings:r.warnings}}async dispose(){await this.terminateWorker()}};var wd=new Set(["server-control-template","client-control-template"]),xd=new Set(["start","device","view","get","step","pointer","key","click","pause","resume","stop","serverGet","serverSet","serverSend","history","saveCase","runCase"]);function hl(e){return String(e||"").trim().replaceAll("\\","/")}function pl(e,t){let i=Sd(Re(e,t));return`${i.size}:${i.mtimeMs}`}function Id(e){return{version:e.version,selectedId:e.selectedId,save:e.save,asset:e.asset,canvas:e.canvas,tree:e.tree,workspace:e.workspace,scriptCount:Array.isArray(e.scripts)?e.scripts.length:0}}function ml(e,t,i){let r=i==="stop"||t?.running===!1,n=Array.isArray(t?.logs)?t.logs.slice(-100):e.logs;return{running:!r,paused:r?!1:!!t?.paused,canvasId:String(t?.canvasId||e.canvasId||""),width:Number(t?.canvasWidth||e.width||0),height:Number(t?.canvasHeight||e.height||0),frame:Number(t?.frame||0),time:Number(t?.time||0),logs:n}}var Fr=class{constructor({workspace:t,initialPath:i="",watchIntervalMs:r=700,discoveryIntervalMs:n=5e3,imageAssets:o}={}){this.workspace=Et(t),this.controller=new Jt(this.workspace,{imageAssets:o}),this.initialPath=hl(i),this.watchIntervalMs=Math.max(100,Number(r)||700),this.activePath="",this.activeStamp="",this.lastLoadedAt="",this.lastError="",this.listeners=new Set,this.playState={running:!1,paused:!1,canvasId:"",width:0,height:0,frame:0,time:0,logs:[]},this.timer=null,this.refreshing=!1,this.discoveryIntervalMs=Math.max(100,Number(n)||5e3),this.archiveCache=null,this.archiveCacheTime=0,this.openGeneration=0,this.disposed=!1}async initialize(){let t=this.archives().archives,i=this.initialPath||t[0]?.path||"";if(i)try{await this.open(i,"startup")}catch{}return this.timer=setInterval(()=>{this.refreshFromDisk()},this.watchIntervalMs),this.state()}archives(t=!1){return(t||!this.archiveCache||Date.now()-this.archiveCacheTime>=this.discoveryIntervalMs)&&(this.archiveCache=Er(this.workspace),this.archiveCacheTime=Date.now()),this.archiveCache}previewStatus(){let t=this.controller.get();return{service:"beyond-simulator-web",version:vo.version,workspace:this.workspace,activePath:this.activePath,lastLoadedAt:this.lastLoadedAt,lastError:this.lastError,revision:this.activePath?t.version:null,name:this.activePath&&t.save?.name||""}}state(){let t=this.archives();return{...this.previewStatus(),archives:t.archives,discovery:t.discovery,snapshot:Id(this.controller.get()),play:this.playState}}recordError(t){let i=t?.message||String(t),r=i!==this.lastError;this.lastError=i,r&&this.emit({type:"error",error:i})}async open(t,i="manual",r=this.openGeneration){let n=hl(t);if(!n)throw new Error("path is required");return this.controller.exclusive(async()=>{if(this.disposed||i==="external-change"&&r!==this.openGeneration)return this.state();try{await this.controller.play("stop"),this.playState=ml(this.playState,{running:!1,logs:[]},"stop");let o=pl(this.workspace,n),a=this.controller.loadArchive(n);return this.activePath=n,this.activeStamp=o,this.initialPath="",this.openGeneration++,this.lastLoadedAt=new Date().toISOString(),this.lastError="",this.archiveCache=null,this.emit({type:"archive",reason:i,path:n,revision:a.version}),this.state()}catch(o){throw this.recordError(o),o}})}async refreshFromDisk(){if(this.refreshing||this.disposed)return!1;this.refreshing=!0;try{if(!this.activePath){let i=this.initialPath||this.archives().archives[0]?.path||"";return i?(await this.open(i,"external-change"),!0):!1}return pl(this.workspace,this.activePath)===this.activeStamp&&!this.lastError?!1:(await this.open(this.activePath,"external-change"),!0)}catch(t){return this.recordError(t),!1}finally{this.refreshing=!1}}async setView({assetType:t,canvasId:i}={}){if(t&&!wd.has(t))throw new Error(`unknown asset type: ${t}`);if(i&&!K[i])throw new Error(`unknown canvas preset: ${i}`);return await this.controller.exclusive(async()=>{if(t&&this.controller.patch({op:"selectAsset",assetType:t}),i){let r=this.controller.get().version;this.controller.patch({op:"setCanvas",canvasId:i,expectedRevision:r})}}),this.emit({type:"view"}),this.state()}async play(t,i={},r){if(!xd.has(t))throw new Error(`unknown play action: ${t||"(empty)"}`);let n=await this.controller.exclusive(()=>this.controller.play(t,i,r));return this.playState=ml(this.playState,n,t),this.emit({type:"play",action:t,frame:this.playState.frame}),n}async currentState(t){return this.state()}editorScreenshot(t){return this.controller.uiScreenshot(t)}playScreenshot(t){return this.controller.exclusive(()=>this.controller.playScreenshot(t))}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}emit(t){for(let i of this.listeners)i(t)}async dispose(){this.disposed=!0,this.timer&&clearInterval(this.timer),this.timer=null,this.listeners.clear(),await this.controller.exclusive(()=>this.controller.dispose())}};import{existsSync as Cd,readFileSync as kd}from"node:fs";import{createHash as Ed}from"node:crypto";var Ad=new Set(["get","patch","import","export","archives","load-archive","save","play","script-sync","script-sync-apply","image-refresh"]),mo=e=>Ed("sha256").update(kd(e)).digest("hex"),Dr=class{constructor(t,{initialPath:i="",maxSessions:r=8,imageAssets:n}={}){this.workspace=t,this.initialPath=i,this.maxSessions=r,this.sessions=new Map,this.imageAssets=n}getSession(t){if(typeof t!="string"||!/^[a-zA-Z0-9_-]{1,100}$/.test(t))throw new Error("Invalid editor sessionId");if(!this.sessions.has(t)){if(this.sessions.size>=this.maxSessions)throw new Error("Editor session limit reached; save your work and restart the server");let r={controller:new Jt(this.workspace,{imageAssets:this.imageAssets}),path:"",fileStamp:""};this.initialPath&&this.load(r,this.initialPath),this.sessions.set(t,r)}return this.sessions.get(t)}snapshot(t){return{...t.controller.get(),storage:{path:t.path}}}load(t,i){let r=Re(this.workspace,i),n=t.controller.loadArchive(i);return t.path=String(i).replaceAll("\\","/"),t.fileStamp=mo(r),{...n,snapshot:this.snapshot(t)}}async call(t,i,r){if(!Ad.has(t))throw new Error("Unknown editor action");let n=this.getSession(i.sessionId),o=n.controller;return o.exclusive(async()=>{if(t==="get")return this.snapshot(n);if(t==="image-refresh")return await o.imageAssets.refresh(i.imageId,{imageSource:i.imageSource}),{imageId:i.imageId,imageSource:i.imageSource||"StaticReference",refreshed:!0};if(t==="script-sync")return o.scriptSyncAction(i.action,i.args||{});if(t==="script-sync-apply")return o.scriptSync.apply(i);if(t==="archives")return o.listArchives();if(t==="patch"){if(!Number.isInteger(i.op?.expectedRevision))throw new Error("expectedRevision is required");return{...o.patch(i.op),storage:{path:n.path}}}if(t==="export")return o.studio.exportData(i.format,i.assetType);if(t==="play")return o.play(i.action,i.args||{},r);if(t==="load-archive"||t==="import"){if(await o.play("stop"),t==="load-archive")return this.load(n,i.path);let a=o.studio.importData(i.format,i.data,i.filename);return n.path="",n.fileStamp="",{...a,snapshot:this.snapshot(n)}}if(t==="save"){if(i.expectedRevision!==o.get().version)throw new Error("revision conflict: reload before saving");let a=xe(this.workspace,i.path);if(Cd(a)){let c=n.path?xe(this.workspace,n.path):"";if(a!==c||mo(a)!==n.fileStamp)throw new Error("File changed or already exists; load it again or save under a new path")}let s=o.saveArchive(i.path);return n.path=s.path,n.fileStamp=mo(a),s}})}async dispose(){await Promise.all([...this.sessions.values()].map(t=>t.controller.exclusive(()=>t.controller.dispose()))),this.sessions.clear()}};var gl=32*1024*1024;function _d(e){if(e.length<8||e.length>gl)throw new Error("Invalid MP3 size");let t=0,i=0;if(e.subarray(0,3).toString()==="ID3"){if(e.length<10||e[3]<2||e[3]>4||e.subarray(6,10).some(r=>r>127))throw new Error("Invalid MP3 ID3 header");t=10+(e[6]<<21|e[7]<<14|e[8]<<7|e[9])+(e[5]&16&&e[3]===4?10:0)}for(;t+4<=e.length;){if(e.length-t===128&&e.subarray(t,t+3).toString()==="TAG"){t=e.length;break}let r=e[t+1],n=e[t+2],o=r>>3&3,a=n>>2&3,s=n>>4;if(e[t]!==255||(r&224)!==224||(r&6)!==2||o===1||a===3||s===0||s===15)throw new Error("Invalid MP3 frame");let c=(o===3?[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320]:[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160])[s],l=[44100,48e3,32e3][a]/(o===3?1:o===2?2:4),u=Math.floor((o===3?144e3:72e3)*c/l)+(n>>1&1);t+=u,i++}if(i<2||t!==e.length)throw new Error("Truncated or invalid MP3")}var go=class extends lt{constructor({cacheDir:t=process.env.QXQY_AUDIO_CACHE_DIR||Mr("audio"),fetch:i=globalThis.fetch,source:r=Za}={}){super({cacheDir:t,fetch:i,source:r,version:Pn,extension:"mp3",accepts:n=>fr(n)!==null,timeout:2e4})}decode(t){return _d(t),{}}produce(t,i,r){return this.download(`audio/${t}.mp3`,gl,i,r)}},Pd;function yo(){return Pd||=new go}async function yl(e,t,i=yo()){let r=new URL(e.url,"http://localhost");if(r.pathname!==ur.slice(0,-1)&&!r.pathname.startsWith(ur))return!1;try{if(!["GET","HEAD"].includes(e.method))throw Object.assign(new Error("GET or HEAD required"),{status:405});let n=r.pathname.match(new RegExp(`^${ur}${Pn}/([0-9]+)\\.mp3$`));if(!n)throw Object.assign(new Error("Unknown audio resource"),{status:404});let o=await i.get(Number(n[1])),a=o.data.length,s={"content-type":"audio/mpeg","cache-control":"private, max-age=43200",etag:o.etag,"accept-ranges":"bytes","x-content-type-options":"nosniff"};if(e.headers["if-none-match"]===o.etag)return t.writeHead(304,s),t.end(),!0;let c=e.headers.range,l=0,u=a-1,f=200;if(c&&(!e.headers["if-range"]||e.headers["if-range"]===o.etag)){let h=c.match(/^bytes=(\d*)-(\d*)$/);if(!h||!h[1]&&!h[2])throw Object.assign(new Error("Invalid byte range"),{status:416,size:a});if(h[1]?(l=Number(h[1]),u=h[2]?Math.min(a-1,Number(h[2])):u):l=Math.max(0,a-Number(h[2])),!Number.isSafeInteger(l)||!Number.isSafeInteger(u)||l>=a||u<l)throw Object.assign(new Error("Unsatisfiable byte range"),{status:416,size:a});f=206,s["content-range"]=`bytes ${l}-${u}/${a}`}t.writeHead(f,{...s,"content-length":u-l+1}),t.end(e.method==="HEAD"?void 0:o.data.subarray(l,u+1))}catch(n){t.writeHead(n.status||502,{"content-type":"text/plain; charset=utf-8","cache-control":"no-store",...n.status===416?{"content-range":`bytes */${n.size}`}:{}}),t.end(e.method==="HEAD"?void 0:n.message)}return!0}var Dd=wl(new URL(".",import.meta.url)),zd=Sl(Dd,"public"),vl=new Map([["/","index.html"],["/index.html","index.html"],["/app.js","app.js"],["/play-renderer.js","play-renderer.js"],["/styles.css","styles.css"],["/editor","editor.html"],["/editor/","editor.html"],["/editor.js","editor.js"],["/editor.css","editor.css"],["/editor/play","play.html"],["/editor/play.js","play.js"],["/editor/play.css","play.css"],["/editor/play-renderer.js","play-renderer.js"]]),$d={".html":"text/html; charset=utf-8",".js":"text/javascript; charset=utf-8",".css":"text/css; charset=utf-8"};function Gd(e=process.argv.slice(2)){let t=(i,r="")=>{let n=e.indexOf(i);return n>=0&&e[n+1]?e[n+1]:r};return{workspace:t("--workspace",process.env.QXQY_WORKSPACE||process.cwd()),initialPath:t("--file"),host:t("--host","127.0.0.1"),port:Number(t("--port","4173")),open:e.includes("--open")}}function $r(e,t="'none'"){return{"cache-control":"no-store","content-type":e,"content-security-policy":`default-src 'self'; img-src 'self' data:; connect-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'none'; frame-ancestors ${t}`,"x-content-type-options":"nosniff"}}function Ae(e,t,i){e.writeHead(t,$r("application/json; charset=utf-8")),e.end(JSON.stringify(i))}function Vd(e,t){e.writeHead(200,{...$r("image/png"),"content-length":t.data.length,"x-qxqy-width":String(t.width||0),"x-qxqy-height":String(t.height||0)}),e.end(t.data)}async function zr(e,t=1024*1024){let i=[],r=0;for await(let n of e){if(r+=n.length,r>t)throw new Error("request body is too large");i.push(n)}return i.length?JSON.parse(Buffer.concat(i).toString("utf8")):{}}function Yd(e){let t=process.platform==="win32"?"cmd.exe":process.platform==="darwin"?"open":"xdg-open",i=process.platform==="win32"?["/c","start","",e]:[e];Td(t,i,{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}async function Bd(e={}){e={...e,imageAssets:e.imageAssets||Ni(),audioAssets:e.audioAssets||yo()};let t=e.host||"127.0.0.1",i=e.password??process.env.QXQY_WEB_PASSWORD??"",r=["127.0.0.1","localhost","::1"].includes(t);if(!r&&!i)throw new Error("QXQY_WEB_PASSWORD is required when listening outside loopback");let n=g=>Od("sha256").update(g).digest(),o=n(i),a=new Fr(e);await a.initialize();let s=new Dr(a.workspace,e),c=new Set,l=a.subscribe(g=>{let v=`event: state
|
|
116
|
-
data: ${JSON.stringify(g)}
|
|
117
|
+
`,f);return i.push({start:l,end:f,oldGuid:Number(c),newGuid:u,line:n,before:e.slice(a,h<0?e.length:h).trim()}),String(u)}),edits:i,issues:[]}}var ld={Level:"\u5173\u5361",PlayerSelf:"\u5F53\u524D\u73A9\u5BB6",AvatarSelf:"\u5F53\u524D\u89D2\u8272",...Object.fromEntries(_t.map((e,t)=>[e,`\u73A9\u5BB6${t+1}`])),...Object.fromEntries(Array.from({length:8},(e,t)=>[`Avatar${t+1}`,`\u89D2\u8272${t+1}`]))};function cd(e,t=1){let i=e?.vars||{},r=[],n=Number(t)>0?Number(t):1,o=["Level","PlayerSelf","AvatarSelf"];if(n>1)for(let s=1;s<=n;s+=1)o.push(`Player${s}`,`Avatar${s}`);let a=new Set;for(let s of o){if(a.has(s)||!i[s])continue;a.add(s);let c=i[s]||{};for(let l of Object.keys(c))r.push(H({entityType:s,entityLabel:ld[s]||s,name:l,type:c[l]?.type||"",value:c[l]?.value??null}))}return r}var Mt="qxqy-simulator-save",ud="qxqy-simulator-scripts",ce="server-control-template",j="client-control-template",So={[ce]:"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F",[j]:"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F"};function Rt(e){return e===j?"client":"server"}function pl(e){if(!(typeof e=="number"||typeof e=="string"&&/^\d+$/.test(e.trim()))||!_e(e))throw new Error(`\u63A7\u4EF6\u7D22\u5F15\u5FC5\u987B\u662F ${1073741824}\u2013${1077936127}\uFF080x40000000\u20130x403FFFFF\uFF09\u8303\u56F4\u5185\u7684\u6574\u6570`);return Number(e)}function zr(e){let t=typeof e=="number"||typeof e=="string"&&/^\d+$/.test(e.trim()),i=Number(e);if(!t||!We(i))throw new Error("\u63A7\u4EF6\u7D22\u5F15\u5FC5\u987B\u662F 1\u20132147483647 \u8303\u56F4\u5185\u7684\u6574\u6570");return i}function xo(e=[]){if(!Array.isArray(e))throw new Error("controlGuidChanges \u5FC5\u987B\u662F\u6570\u7EC4");let t=new Set;return e.map(i=>{if(!i||typeof i.id!="string"||!i.id||t.has(i.id)||![ce,j].includes(i.controlAsset)||typeof i.controlId!="string"||!i.controlId||typeof i.controlName!="string")throw new Error("controlGuidChanges \u5305\u542B\u65E0\u6548\u6216\u91CD\u590D\u7684\u53D8\u66F4\u8BB0\u5F55");if(t.add(i.id),i.batchId!==void 0&&(typeof i.batchId!="string"||!i.batchId))throw new Error("controlGuidChanges \u5305\u542B\u65E0\u6548\u7684 batchId");if(i.scriptSignature!==void 0&&!/^[a-f0-9]{64}$/.test(i.scriptSignature))throw new Error("controlGuidChanges \u5305\u542B\u65E0\u6548\u7684 scriptSignature");return{id:i.id,controlAsset:i.controlAsset,controlId:i.controlId,controlName:i.controlName,oldGuid:zr(i.oldGuid),newGuid:zr(i.newGuid),...i.batchId?{batchId:i.batchId}:{},...i.scriptSignature?{scriptSignature:i.scriptSignature}:{}}})}function fd(e){let t=[e?.guid,e?.id];for(let i of t){let r=Number(i);if(We(r))return r}return 0}function $r(e){let t=String(e?.controlAsset||""),i=fd(e);return{id:String(i||e?.id||""),guid:i,path:String(e?.path||""),source:String(e?.source||""),controlId:String(e?.controlId||""),controlAsset:t===j||t==="client"?j:t===ce||t==="server"?ce:""}}function dd(e){let t=[],i=(r,n="")=>{if(r&&(r.path||r.source)){let o=$r(r);t.push(n?{...o,controlAsset:n}:o)}};if(Array.isArray(e?.assets?.scripts)){for(let r of e.assets.scripts)r&&(r.path||r.source)&&t.push($r(r));return t}if(i(e?.assets?.server?.script,ce),i(e?.assets?.client?.script,j),e&&e.format!==Mt){i(e?.script);for(let r of e?.scripts||[])i(r)}return t}function Io(e){return ut(e===j?Bt():wt())}var hd="\u672A\u7ED1\u5B9A",ti="\u672A\u547D\u540D\u5B58\u6863",pd="\u672A\u547D\u540D\u754C\u9762";function md(e){let t=e;for(let i=0;i<8;i++){if($i(dl(t,"simulator","studio"))&&$i(dl(t,"lua")))return t;let r=ad(t);if(r===t)break;t=r}return e}function gd(e){return e?{name:ii(e),path:e,bound:!0}:{name:hd,path:"",bound:!1}}function yd(e,t=process.cwd()){if(sd(e)&&$i(e))return e;let i=t||process.cwd(),r=md(i),n=hl(r,e);if($i(n))return n;let o=hl(i,e);if($i(o))return o;throw new Error("script file not found: "+e)}function Di(e,t={}){e?.format===Mt&&zn(e.version);let i=[],r=typeof t.workspacePath=="string"&&t.workspacePath?t.workspacePath:"",n=e?.format===Mt&&e.assets,o=xo(e?.controlGuidChanges),a=gi(e?.scriptSync),s=n?null:ut(e,{warnings:i}),c={server:n&&e.assets.server?ut(e.assets.server,{warnings:i}):Io(ce),client:n&&e.assets.client?ut(e.assets.client,{warnings:i}):Io(j)};s&&(c[Rt(s.meta.assetType)]=s);let l=n&&e.activeAssetType===j?j:s?.meta.assetType||ce,u=n&&e.meta?.name?String(e.meta.name):"",f=()=>u||ti;!e?.meta?.name&&c.server.meta.name==="\u672A\u547D\u540D\u754C\u9762\u63A7\u4EF6\u7EC4"&&(c.server.meta.name=pd);let h=[],p=new Set;function m(){p.clear(),Lt(c.server.root,p),Lt(c.client.root,p,{skipServerContainer:!0});for(let g of h)We(g.guid)&&p.add(Number(g.guid))}function b(g=0){m();let x=We(g)&&!p.has(Number(g))?Number(g):ot(p);return p.add(x),x}function w(g){let x=$r(g),C=b(x.guid);return{...x,guid:C,id:String(C)}}tt(dd(e));let y=Ni(e?.serverLogic),v=null,_="",P=1,M=1;function O(g){let x=String(g||"").trim();if(!x)return"";if(!K[x])throw new Error(`unknown canvas preset: ${x} (available: ${Object.keys(K).join(", ")})`);return x}let L=()=>c[Rt(l)];function z(g){if(!g)return null;for(let[x,C]of[["server",c.server],["client",c.client]]){let F=he(C.root,g);if(F&&F.kind!=="server-container")return{key:x,node:F}}return null}function S(g){if(!g.controlId)return null;let x=g.controlAsset===j?"client":g.controlAsset===ce?"server":null;if(x){let C=he(c[x].root,g.controlId);return C&&C.kind!=="server-container"?{key:x,node:C}:null}return z(g.controlId)}function A(){for(let g of h)g.controlId&&!S(g)&&(g.controlId="",g.controlAsset="")}function I(g){if(!We(g))return null;for(let[x,C]of[[ce,c.server],[j,c.client]]){let F="";if(te(C.root,$=>{!F&&($.scriptMappingIds||[]).includes(Number(g))&&(F=$.id)}),F)return{controlId:F,controlAsset:x}}return null}function k(g,x,C){let F=c[Rt(g.controlAsset)],$=F&&he(F.root,g.controlId);$&&($.scriptMappingIds=($.scriptMappingIds||[]).map(G=>Number(G)===Number(x)?Number(C):G))}A();function D(){return h.map(g=>{let x=S(g),C=x?x.key==="client"?j:ce:"";return H({id:g.id,guid:g.guid||0,path:g.path||"",source:g.source||"",controlId:g.controlId||"",controlAsset:g.controlAsset||C,controlName:x?.node.name||"",assetType:C,assetLabel:x?So[C]:"",mounted:!!x})})}function E(){let g=[],x=(C,F)=>{te(C.root,$=>{$.kind!=="server-container"&&g.push(H({id:$.id,name:$.name,kind:$.kind,assetType:F,assetLabel:So[F]}))})};return x(c.server,ce),x(c.client,j),g}function T(g){let x=[];return te(g.root,C=>{C.kind!=="server-container"&&x.push(JSON.stringify({kind:C.kind,guid:C.guid,name:C.name,text:C.text??null,imageId:C.imageId??null,imageSource:C.imageSource??null,imageType:C.imageType??null,fontSize:C.fontSize??null,adaptiveFontSize:C.adaptiveFontSize??null,minimumFontSize:C.minimumFontSize??null,fontColor:C.fontColor??null,bgColor:C.bgColor??null,imageColor:C.imageColor??null,fillType:C.fillType??null,fillAmount:C.fillAmount??null,syncAllDevices:C.syncAllDevices!==!1,transformByPlatform:C.transformByPlatform||null}))}),x.join("/")}let B=T(Bt()),Y=T(wt());function re(g){let x=T(g);return g.meta?.assetType===j?x===B:x===Y}function U(g,x){return String(g||"").replace(/[\\/:*?"<>|]/g,"-").trim()||x}function ie(g){let x=U(f(),ti),C=g.meta?.assetType===j?"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F":"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F";return`${x} \xB7 ${C}`}function Me(){if(!((c.server.root.children||[]).find(x=>x.kind==="container")||c.server.root.children?.[0]))throw new Error("\u6574\u5408\u5305\u9700\u8981\u670D\u52A1\u7AEF\u5BA2\u6237\u7AEF\u63A7\u4EF6\u5BB9\u5668\u4E0B\u81F3\u5C11\u6709\u4E00\u4E2A\u6839\u63A7\u4EF6");return Ya(c.server,c.client,{scripts:h,fileName:`${U(f(),ti)} \xB7 \u6574\u5408\u5305.gia`})}function Ot(){let g=x=>({type:x.meta.assetType,name:x.meta.name,sourceFile:x.meta.sourceFile||""});return{format:Mt,name:f(),activeAssetType:l,assets:{server:g(c.server),client:g(c.client),scripts:D()}}}function ai(){return H({format:Mt,version:4,meta:{name:f()},activeAssetType:l,serverLogic:y,controlGuidChanges:o,scriptSync:a,assets:{server:c.server,client:c.client,scripts:h.map(g=>H({id:g.id,guid:g.guid||0,path:g.path||"",source:g.source||"",controlId:g.controlId||"",controlAsset:g.controlAsset||""}))}})}function ne(){let g=L(),x=os(g);if(x.workspace=gd(r),x.save=Ot(),x.scripts=D(),x.mountTargets=E(),x.serverLogic=y,x.migrationWarnings=[...i],x.controlGuidChanges=H(o),l===j){let C=Xt(g,!0);x.clientGuidAutofill={count:C.length,templateCount:C.filter(({parent:F})=>F?.kind==="server-container").length,selectedOffset:C.findIndex(({node:F})=>F.id===x.selectedId)}}return x.scriptSync=H(a),Zo(x),x}function De(g){let x=L();if(g.expectedRevision!==void 0&&Number(g.expectedRevision)!==x.version)throw new Error(`revision conflict: expected ${g.expectedRevision}, current ${x.version}`);return x}function pt(g,x,C=""){let F=String(x||"");if(F){let $=C===j?j:C===ce?ce:"";if(!S({controlId:F,controlAsset:$}))throw new Error("\u6302\u8F7D\u76EE\u6807\u5FC5\u987B\u662F\u5B58\u6863\u5185\u7684\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6216\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F");g.controlAsset=$}else g.controlAsset="";g.controlId=F}function Yi(g){let x=De(g);if(g.op==="addScript"){let C=w({path:String(g.path||""),source:String(g.source||""),controlId:"",controlAsset:""});g.controlId!==void 0&&g.controlId!==""&&pt(C,g.controlId,g.controlAsset),h.push(C)}else if(g.op==="updateScript"){let C=h.find(F=>F.id===g.id);if(!C)throw new Error(`\u811A\u672C\u4E0D\u5B58\u5728: ${g.id}`);g.controlId!==void 0&&pt(C,g.controlId,g.controlAsset),g.path!==void 0&&(C.path=String(g.path)),g.source!==void 0&&(C.source=String(g.source))}else if(g.op==="removeScript"){let C=h.length;if(h=h.filter(F=>F.id!==g.id),h.length===C)throw new Error(`\u811A\u672C\u4E0D\u5B58\u5728: ${g.id}`)}return x.version+=1,ne()}function ji(g){let x=De(g),C=he(x.root,g.id??x.selectedId);if(!C||C.kind==="server-container")throw new Error("\u4EC5\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6216\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u5141\u8BB8\u4FEE\u6539\u7D22\u5F15");let F=pl(g.guid);if(zr(C.guid),g.autoFillClientGuids!==void 0&&typeof g.autoFillClientGuids!="boolean")throw new Error("autoFillClientGuids \u5FC5\u987B\u662F\u5E03\u5C14\u503C");let $=g.autoFillClientGuids===!0;if($&&l!==j)throw new Error("\u81EA\u52A8\u586B\u5145\u4EC5\u652F\u6301\u5BA2\u6237\u7AEF\u6A21\u677F\u5217\u8868\uFF1B\u670D\u52A1\u7AEF\u754C\u9762\u7684\u7D22\u5F15\u9700\u5355\u72EC\u586B\u5199");let G=$?Xt(x,!0).map(({node:V})=>V):[C],X=F-G.indexOf(C),J=G.map((V,se)=>({node:V,oldGuid:zr(V.guid),newGuid:pl(X+se)})),Ye=J.filter(({oldGuid:V,newGuid:se})=>V!==se);if(!Ye.length)return ne();let ae=new Map(J.map(({oldGuid:V,newGuid:se})=>[V,se]));if(ae.size!==J.length)throw new Error("\u5BA2\u6237\u7AEF\u6A21\u677F\u5B58\u5728\u91CD\u590D\u65E7\u7D22\u5F15\uFF0C\u65E0\u6CD5\u81EA\u52A8\u586B\u5145\uFF1B\u8BF7\u5148\u6D88\u9664\u6B67\u4E49");let it=new Set(G),ge=[];for(let V of Object.values(c))te(V.root,se=>{V===c.client&&se.kind==="server-container"||ge.push({node:se,project:V})});let mt=new Map([...ge.filter(V=>!it.has(V.node)).map(({node:V})=>[Number(V.guid),V.name]),...h.map(V=>[Number(V.guid),V.path||"Lua \u811A\u672C"])]);for(let{newGuid:V}of Ye)if(mt.has(V))throw new Error(`\u63A7\u4EF6\u7D22\u5F15 ${V} \u5DF2\u88AB\u300C${mt.get(V)}\u300D\u5360\u7528\uFF1B\u8BF7\u5148\u586B\u5199\u5B83\u7684\u5B9E\u9645\u7D22\u5F15\u3002\u672C\u6B21\u672A\u4FEE\u6539\u4EFB\u4F55\u7D22\u5F15\u3002`);let Ve=[],ee=(V,se,je)=>{let Ne=V?.[se];(typeof Ne=="number"||typeof Ne=="string"&&/^\d+$/.test(Ne.trim()))&&ae.has(Number(Ne))&&ae.get(Number(Ne))!==Number(Ne)&&Ve.push({owner:V,key:se,project:je.project,oldGuid:Number(Ne),newGuid:ae.get(Number(Ne))})};for(let V of ge)ee(V.node,"referencedPrefabId",V),ee(V.node,"itemPrefabId",V),ee(V.node.giaRaw,"templateRefSlot",V);let ye=new Map;for(let{node:V}of ge)ye.set(Number(V.guid),(ye.get(Number(V.guid))||0)+1);for(let{oldGuid:V}of Ve)if(ye.get(V)!==1)throw new Error(`\u65E7\u7D22\u5F15 ${V} \u5728\u591A\u68F5\u8D44\u4EA7\u6811\u4E2D\u91CD\u590D\uFF0C\u65E0\u6CD5\u786E\u5B9A\u6A21\u677F\u5F15\u7528\u5F52\u5C5E\uFF1B\u8BF7\u5148\u6D88\u9664\u6B67\u4E49\u540E\u4FEE\u6539`);let di=$?fl():"",be=ll(h);for(let{node:V,oldGuid:se,newGuid:je}of Ye)V.guid=je,o.push({id:fl(),controlAsset:l,controlId:V.id,controlName:V.name,oldGuid:se,newGuid:je,scriptSignature:be,...di?{batchId:di}:{}});let Ui=new Set([x]);for(let{owner:V,key:se,project:je,newGuid:Ne}of Ve)V[se]=typeof V[se]=="string"?String(Ne):Ne,Ui.add(je);for(let V of Ui)V.version+=1;return ne()}function oe(g){let x=De(g);if(!Array.isArray(g.changeIds)||!g.changeIds.length||g.changeIds.some(F=>typeof F!="string"||!o.some($=>$.id===F)))throw new Error("\u8BF7\u660E\u786E\u6307\u5B9A\u5DF2\u6838\u5BF9 Lua \u5F15\u7528\u7684\u6709\u6548\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55 changeIds");let C=new Set(g.changeIds);return o=o.filter(F=>!C.has(F.id)),x.version+=1,ne()}function Ge(g){if(!g||typeof g!="object")throw new Error("patch requires op");if(g.op==="setScriptSync"){let x=De(g);return a=gi(g.config),x.version+=1,ne()}if(g.op==="setControlGuid")return ji(g);if(g.op==="acknowledgeControlGuidChanges")return oe(g);if(g.op==="setServerLogic"){let x=De(g);return y=Ni(g.logic),x.version+=1,ne()}if(g.op==="addScript"||g.op==="updateScript"||g.op==="removeScript")return Yi(g);if(g.op==="selectAsset")return l=g.assetType===j?j:ce,ne();if(g.op==="renameSave"){let x=String(g.name||"").trim();if(!x)throw new Error("\u5B58\u6863\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");return u=x,ne()}if(g.op==="newAsset"){let x=De(g);l=g.assetType===j?j:ce;let C=Io(l);return C.version=x.version+1,c[Rt(l)]=C,o=o.filter(F=>F.controlAsset!==l),A(),ne()}return Gn(L(),g),A(),ne()}function He(g){return h.filter(x=>{let C=S(x);return!!(C&&C.key==="client"==(g===j))})}function si(g="json",x=""){let C=li(g,x);if(o.length&&!["save","archive"].includes(String(g).toLowerCase())){let F=o.map($=>`\u63A7\u4EF6\u7D22\u5F15\u5F85\u6838\u5BF9 Lua \u5F15\u7528\uFF1A${So[$.controlAsset]} / ${$.controlName} (${$.controlId})\uFF1A${$.oldGuid} \u2192 ${$.newGuid}\u3002\u8BF7\u6309\u8BED\u4E49\u66F4\u65B0\u811A\u672C\u4E2D\u7684\u63A7\u4EF6\u7D22\u5F15\u5F15\u7528\uFF0C\u6838\u5BF9\u540E\u786E\u8BA4\u53D8\u66F4\u8BB0\u5F55 ${$.id}\uFF1B\u4E0D\u8981\u5168\u5C40\u66FF\u6362\u540C\u503C\u6570\u5B57\u3002`);C.warnings=[...new Set([...C.warnings||[],...F])]}return C}function li(g="json",x=""){let C=String(g).toLowerCase();if(C==="save"||C==="archive"){let G=Buffer.from(JSON.stringify(ai(),null,2),"utf8");return H({filename:`${f().replace(/[\\/:*?"<>|]/g,"-")} \xB7 \u8D44\u4EA7\u5305.json`,mimeType:"application/json",encoding:"base64",data:G.toString("base64"),warnings:[]})}if(C==="save-gia"||C==="archive-gia"){let G=[],X=[],J=(ae,it="")=>{let ge=si(ae,it);G.push(H({filename:ge.filename,mimeType:ge.mimeType,encoding:ge.encoding,data:ge.data,warnings:ge.warnings||[]})),X.push(...ge.warnings||[])},Ye=(ae,it)=>{let ge=c[Rt(ae)],mt=ae===l,Ve=h.some(ee=>ee.controlAsset===ae&&ee.controlId);if(!mt&&re(ge)&&!Ve){X.push(it);return}J("gia",ae)};if(Ye(ce,"\u670D\u52A1\u5668\u63A7\u4EF6\u6A21\u677F\u4ECD\u662F\u9ED8\u8BA4\u6A71\u7A97\uFF0C\u672A\u6539\u52A8\u4E14\u5F53\u524D\u672A\u663E\u793A\uFF0C\u5DF2\u4ECE\u8D44\u4EA7\u5305 GIA \u4E2D\u7701\u7565\u3002"),Ye(j,"\u5BA2\u6237\u7AEF\u63A7\u4EF6\u6A21\u677F\u4ECD\u662F\u9ED8\u8BA4\u300CLua\u5B9E\u4F8B\u5316\u9762\u677F\u300D\uFF0C\u672A\u6539\u52A8\u4E14\u5F53\u524D\u672A\u663E\u793A\uFF0C\u5DF2\u4ECE\u8D44\u4EA7\u5305 GIA \u4E2D\u7701\u7565\u3002"),h.some(ae=>ae.path||ae.source)&&J("scripts-gia"),!G.length)throw new Error("\u8D44\u4EA7\u5305 GIA \u6CA1\u6709\u53EF\u5BFC\u51FA\u7684\u5DF2\u6539\u52A8\u9879\uFF1B\u8BF7\u5148\u7F16\u8F91\u5F53\u524D\u754C\u9762\uFF0C\u6216\u6539\u7528\u300C\u5F53\u524D\u754C\u9762 GIA\u300D\u3002");return H({format:"qxqy-gia-package",files:G,warnings:[...new Set(X)]})}if(C==="gia-combined"||C==="combined-gia"||C==="combined"){let G=Me();return H({filename:`${U(f(),ti)} \xB7 \u6574\u5408\u5305.gia`,mimeType:"application/octet-stream",encoding:"base64",data:G.buffer.toString("base64"),warnings:[...new Set(G.warnings||[])]})}if(C==="scripts"){let G=H({format:ud,version:1,scripts:h.map(J=>H({id:J.id,guid:J.guid||0,path:J.path||"",source:J.source||"",controlId:J.controlId||"",controlAsset:J.controlAsset||""}))}),X=Buffer.from(JSON.stringify(G,null,2),"utf8");return H({filename:`${U(f(),ti)} \xB7 \u811A\u672C.json`,mimeType:"application/json",encoding:"base64",data:X.toString("base64"),warnings:[]})}if(C==="scripts-gia"||C==="scriptsgia"){let G=Xa(h);return H({filename:`${U(f(),ti)} \xB7 \u811A\u672C.gia`,mimeType:"application/octet-stream",encoding:"base64",data:G.buffer.toString("base64"),warnings:G.warnings})}if(C==="lua"){let G=h.find(J=>J.id===x)||h.find(J=>J.path===x);if(!G)throw new Error("\u6CA1\u6709\u53EF\u5BFC\u51FA\u7684 Lua \u811A\u672C\uFF0C\u8BF7\u5148\u5728\u201CLua \u811A\u672C\u201D\u9875\u521B\u5EFA");let X=ii(G.path||"")||`qxqy-script-${G.id}`;return H({filename:/\.lua$/i.test(X)?X:`${X}.lua`,mimeType:"text/x-lua",encoding:"base64",data:Buffer.from(G.source||"","utf8").toString("base64"),warnings:[]})}let F=x?c[Rt(x)]:L(),$=ie(F);if(C==="json"){let G=H({...F,scripts:He(F.meta.assetType),controlGuidChanges:o.filter(J=>J.controlAsset===F.meta.assetType)}),X=Buffer.from(JSON.stringify(G,null,2),"utf8");return H({filename:`${$}.json`,mimeType:"application/json",encoding:"base64",data:X.toString("base64"),warnings:[]})}if(C==="gia"){let G=Ha(F,F.meta.assetType===j?{scripts:He(j)}:{}),X=F.meta.assetType===j?[]:He(ce);return X.length&&G.warnings.unshift(`\u5F53\u524D\u670D\u52A1\u5668\u63A7\u4EF6 GIA \u4E0D\u5305\u542B ${X.length} \u4E2A Lua \u811A\u672C\u7684\u6E90\u7801\uFF1B\u8BF7\u4F7F\u7528\u300C\u8D44\u4EA7\u5305 GIA \u6574\u5408\u5305\u300D\uFF0C\u6216\u53E6\u884C\u5BFC\u5165\u811A\u672C\u5305\u5E76\u6838\u5BF9\u6302\u8F7D\u3002`),H({filename:`${$}.gia`,mimeType:"application/octet-stream",encoding:"base64",data:G.buffer.toString("base64"),warnings:G.warnings})}throw new Error(`unsupported export format: ${g}`)}function tt(g){for(let x of g){let C=$r(x);if(!C.path&&!C.source)continue;let F=C.controlId?null:I(C.guid),$=w(F?{...C,...F}:C);F&&$.guid!==C.guid&&k(F,C.guid,$.guid),$.controlId&&!S($)&&($.controlId="",$.controlAsset=""),h.push($)}}function ci(g,x,C=""){let F=String(g||"").toLowerCase();if(typeof x!="string"||!x)throw new Error("import data is required");let $=Buffer.from(x,"base64"),G,X=[],J={},Ye=[];if(F==="json"){try{G=JSON.parse($.toString("utf8"))}catch{throw new Error("JSON \u6587\u4EF6\u65E0\u6548")}if(G?.project&&(G=G.project),G?.format===Mt&&G?.assets){zn(G.version);let ee=Di(G);X.push(...ee.get().migrationWarnings);let ye=ee.archiveData();return c.server=ye.assets.server,c.client=ye.assets.client,i=[...X],l=G.activeAssetType===j?j:ce,u=String(G.meta?.name||ii(C).replace(/\.json$/i,"")||u),y=ye.serverLogic,h=ye.assets.scripts,o=ye.controlGuidChanges,a=ye.scriptSync,p.clear(),H({snapshot:ne(),warnings:X,metadata:{format:Mt}})}}else{if(F==="lua")return h.push(w({path:ii(C||"imported.lua"),source:$.toString("utf8"),controlId:""})),H({snapshot:ne(),warnings:X,metadata:{assetType:"lua-script"}});if(F==="gia"){if(Wa($)){let be=qa($);return tt(be.scripts),H({snapshot:ne(),warnings:be.warnings,metadata:be.metadata})}let ee=Ja($);G=ee.project,X=ee.warnings,J=ee.metadata,ee.clientProject&&(c.client=ut(ee.clientProject),o=o.filter(be=>be.controlAsset!==j),X.push("\u6574\u5408\u5305\u5DF2\u62C6\u56DE\u300CUI\u63A7\u4EF6-\u670D\u52A1\u7AEF\u300D\u4E0E\u300CUI\u63A7\u4EF6-\u5BA2\u6237\u7AEF\u300D\uFF1B\u5BA2\u6237\u7AEF\u6A21\u677F\u8FB9\u754C\u5DF2\u4FDD\u7559\u3002"));let ye=new Map,di=(be,Ui)=>{be&&te(be.root,V=>{for(let se of V.scriptMappingIds||[]){let je=ye.get(Number(se));if(je){X.push(`\u811A\u672C GUID ${se} \u540C\u65F6\u6302\u8F7D\u5230\u591A\u4E2A\u63A7\u4EF6\uFF0C\u5DF2\u4FDD\u7559\u201C${je.controlAsset===ce?"\u670D\u52A1\u7AEF":"\u5BA2\u6237\u7AEF"}\u201D\u76EE\u6807\u3002`);continue}ye.set(Number(se),{controlId:V.id,controlAsset:Ui})}})};di(ee.project,ee.project.meta.assetType),di(ee.clientProject,j),Ye=(ee.scripts||[]).map(be=>ye.has(Number(be.guid))?{...be,...ye.get(Number(be.guid))}:be)}else throw new Error(`unsupported import format: ${g}`)}let ae=ut(G,{warnings:X}),it=xo(G?.controlGuidChanges);if(it.some(ee=>ee.controlAsset!==ae.meta.assetType))throw new Error("\u5355\u8D44\u4EA7 JSON \u7684\u7D22\u5F15\u53D8\u66F4\u8BB0\u5F55\u5FC5\u987B\u5C5E\u4E8E\u5F53\u524D\u5BFC\u5165\u8D44\u4EA7");let ge=xo([...o.filter(ee=>ee.controlAsset!==ae.meta.assetType),...it]);i=[...X];let mt=Rt(ae.meta.assetType);c[mt]=ae,o=ge,l=ae.meta.assetType;let Ve=c[mt];return C&&(Ve.meta.name=ii(C).replace(/\.(json|gia)$/i,"")||Ve.meta.name,Ve.meta.sourceFile=ii(C),Ve.meta.sourceFormat=F),tt(Ye),tt(G?.scripts||[]),G?.script&&(G.script.path||G.script.source)&&tt([G.script]),H({snapshot:ne(),warnings:X,metadata:J})}function mc(g,x){return Gn(L(),{op:"pick",x:g,y:x}),ne()}function gc(g){let x=typeof g=="string"&&g?g:"";!x||x===r||(r=x)}function yc(g){let x=g.source||"";if(!x.trim()&&g.path.trim())try{x=od(yd(g.path,r),"utf8")}catch(C){throw new Error(`\u811A\u672C ${g.path} \u8BFB\u53D6\u5931\u8D25: ${C?.message||C}`)}return x}function ui(g={}){let x=O(g.canvasId);x&&(_=x),g.playerCount!==void 0&&g.playerCount!==null&&g.playerCount!==""&&(P=At(g.playerCount),M>P&&(M=1)),g.viewPlayerIndex!==void 0&&g.viewPlayerIndex!==null&&g.viewPlayerIndex!==""&&(M=et(g.viewPlayerIndex,P)),v&&go(v);let C=h.map($=>{try{return{id:$.id,guid:$.guid||0,path:$.path||$.id,source:yc($),controlId:$.controlId||"",controlAsset:$.controlAsset||""}}catch(G){return{id:$.id,guid:$.guid||0,path:$.path||$.id,source:`error([==[ ${String(G.message).replace(/]=+]/g,"] =]")} ])`,controlId:$.controlId||"",controlAsset:$.controlAsset||""}}}),F=$=>C.filter(G=>{let X={controlId:G.controlId,controlAsset:G.controlAsset},J=G.controlId?S(X):null;return!!(J&&J.key===$)});return v=Ks(c.server,{templatesProject:c.client,scripts:C,sceneScripts:F("server"),templateScripts:F("client"),serverConfig:{logic:y},canvasId:_,playerCount:P,viewPlayerIndex:M,language:g.language||""}),fe(g)}function bc(g,x={}){let C=O(g);if(!C)throw new Error("playSetCanvas requires canvasId");return ui({...x,canvasId:C})}function fe(g={}){if(!v)return H({running:!1,tree:[],logs:[],serverLogs:[],serverVars:[]});let x=co(v,g);return x.running=!0,x.logs=wo(x.logs),x.serverLogs=wo(x.server?.logs||[]),x.serverVars=cd(x.server,x.playerCount||1),x}function vc(g,x={}){return v||ui(),Fr(v,g),x.observe===!1?H({running:!0,time:v.runtime.clock.time,frame:v.runtime.clock.frame,paused:!!v.debugPaused,levelTimePaused:!!v.runtime.clock.paused,playerCount:v.playerCount||1,viewPlayerIndex:v.viewPlayerIndex||1}):fe(x)}function wc(g=0){ui();let x=Math.max(0,Number(g)||0);for(let C=0;C<x;C++)Fr(v,1/30);return fe()}function Sc(){return v&&go(v),v=null,_="",P=1,M=1,H({running:!1,tree:[],logs:[],serverLogs:[],serverVars:[]})}function xc(g,x={}){let C=fi();return M=so(C,g),x.observe===!1?null:fe(x)}function Ic(g,x={}){if(!v)throw new Error("play session has not started");return uo(v,g),x.observe===!1?null:fe(x)}function Cc(g,x={}){if(!v)throw new Error("play session has not started");return fo(v,g),x.observe===!1?null:fe(x)}function kc(g,x,C,F={}){if(!v)throw new Error("play session has not started");return zi(v,g,x,C,F),F.observe===!1?null:fe(F)}function Ec(g={}){return v&&Or(v).pause(),g.observe===!1?null:fe(g)}function Ac(g={}){return v&&Or(v).resume(),g.observe===!1?null:fe(g)}function fi(){if(!v)throw new Error("play session has not started");return v}function _c(g,x){let C=fi();if(!g&&!x){let F=fe();return H({vars:F.serverVars||[]})}return H({entityType:String(g||""),name:String(x||""),value:nl(C,g,x)})}function Tc(g,x,C){let F=fi();return po(F,g,x,C),fe()}function Pc(g,x=[],C="PlayerSelf"){let F=fi();return mo(F,g,x,C),fe()}function Rc(){let g=fe();return H({events:g.history||[],case:Ds(g.history||[],{playerCount:g.playerCount||1})})}function Mc(g={}){let x=fe(),C=Fi({name:g.name||"",dt:g.dt,playerCount:g.playerCount||x.playerCount||1,events:g.events||x.history||[],asserts:g.asserts||[]});return H(C)}function Nc(g,x={}){let C=Fi(g);ui({...x,playerCount:x.playerCount||C.playerCount||1});let F=fi();F.recording=!1;try{return sl(Or(F),g)}finally{F.recording=!0}}function Fc(){if(!v)return{running:!1,paused:!1,time:0,frame:0,playerCount:1,viewPlayerIndex:1};let g=v.runtime.clock;return{running:!0,paused:!!v.debugPaused,levelTimePaused:!!g.paused,time:g.time,frame:g.frame,playerCount:v.playerCount||1,viewPlayerIndex:v.viewPlayerIndex||1}}let Uo={get:ne,patch:Ge,setWorkspace:gc,exportData:si,importData:ci,pick:mc,playStart:ui,playSetCanvas:bc,playSetView:xc,playGet:fe,playStatus:Fc,playStep:vc,playRun:wc,playStop:Sc,playKey:Ic,playClick:Cc,playPointer:kc,playPause:Ec,playResume:Ac,playServerGet:_c,playServerSet:Tc,playServerSend:Pc,playHistory:Rc,playSaveCase:Mc,playRunCase:Nc,archiveData:ai};return Object.defineProperty(Uo,"_project",{enumerable:!1,get:L}),Uo}import{createRequire as wd}from"node:module";function Co(e,t,i){if(e.fillType!=="Horizontal"&&e.fillType!=="Vertical")return null;let r=Number(e.fillAmount??1),n=Number.isFinite(r)?Math.max(0,Math.min(1,r)):1;if(e.fillType==="Horizontal"){let a=t*n;return{x:e.fillHorizontalType==="Right"?t/2-a:-t/2,y:-i/2,width:a,height:i}}let o=i*n;return{x:-t/2,y:e.fillVerticalType==="Top"?-i/2:i/2-o,width:t,height:o}}function ml(e,t,i){let r=t?.m_Rect,n=t?.m_RD?.textureRectOffset,o=t?.m_RD?.textureRect,a=Math.round(Number(r?.width)),s=Math.round(Number(r?.height)),c=Math.round(Number(n?.X)),l=Math.round(Number(n?.Y)),u=Math.round(Number(o?.width)),f=Math.round(Number(o?.height)),h=t?.m_RD?.settingsRaw?.packingRotation;if(![a,s,u,f].every(b=>Number.isInteger(b)&&b>0&&b<=8192)||a*s>16777216||!Number.isFinite(c)||!Number.isFinite(l)||c<0||l<0||c+u>a||l+f>s)throw new Error("Invalid sprite dimensions or trim offset");if(h&&h!=="None")throw new Error(`Unsupported sprite packing rotation: ${h}`);let p=i(a,s),m=p.getContext("2d");if(e.width===a&&e.height===s)m.drawImage(e,0,0);else{if(e.width!==u||e.height!==f)throw new Error("Sprite PNG does not match its trim metadata");m.drawImage(e,c,s-l-f)}return p}function gl(e,t,i){let r=Number(t??4294967295)>>>0;if((r&16777215)===16777215)return e;let n=i(e.width,e.height),o=n.getContext("2d");o.drawImage(e,0,0);let a=o.getImageData(0,0,n.width,n.height),s=r>>>16&255,c=r>>>8&255,l=r&255;for(let u=0;u<a.data.length;u+=4)a.data[u]=Math.round(a.data[u]*s/255),a.data[u+1]=Math.round(a.data[u+1]*c/255),a.data[u+2]=Math.round(a.data[u+2]*l/255);return o.putImageData(a,0,0),n}function bd(e){return!!e?.border&&Object.values(e.border).some(t=>Number.isFinite(t)&&t>0)}function bl(e,t){let i=typeof t=="object"?t?.Name:t;return bd(e)&&i!=="Basic"?"Stretch":"Basic"}function vl(e){if(!e)return null;let t=Number(e.m_Rect?.width),i=Number(e.m_Rect?.height);if(![t,i].every(n=>Number.isFinite(n)&&n>0&&n<=8192)||t*i>16777216)throw new Error("Invalid image metadata dimensions");let r={};for(let[n,o]of[["left","X"],["bottom","Y"],["right","Z"],["top","W"]]){let a=Number(e.m_Border?.[o]??0);if(!Number.isFinite(a))throw new Error("Invalid image border");r[n]=Math.max(0,a)}return{width:t,height:i,border:r}}function vd(e,t,i,r){t=Number.isFinite(t)?Math.max(0,t):0,i=Number.isFinite(i)?Math.max(0,i):0;let n=Math.min(1,e/(t+i||1));t*=n,i*=n;let o=Math.min(1,r/(t+i||1));return{source:[0,t,e-i,e],target:[0,t*o,r-i*o,r]}}var yl=new WeakMap;function wl(e,t,i,r,n){let o=Math.max(0,i),a=Math.max(0,r),s=Math.min(1,4096/Math.max(1,o),4096/Math.max(1,a)),c=Math.max(1,Math.round(o*s)),l=Math.max(1,Math.round(a*s)),u=n(c,l),f=u.getContext("2d");if(!o||!a)return u;let h=yl.get(e);if(!h){let v=n(e.width,e.height),_=v.getContext("2d");_.drawImage(e,0,0),h=_.getImageData(0,0,e.width,e.height),yl.set(e,h)}let p=f.createImageData(c,l),m=h.data,b=(v,_,P,M,O,L)=>{let{source:z,target:S}=vd(_,P,M,O);return Array.from({length:L},(A,I)=>{let k=(I+.5)*O/L,D=k<S[1]?0:k<S[2]?1:2,E=S[D+1]>S[D]?(k-S[D])/(S[D+1]-S[D]):0,T=Math.max(0,Math.min(v-1,(z[D]+E*(z[D+1]-z[D]))*v/_-.5)),B=Math.floor(T);return[B,Math.min(v-1,B+1),T-B]})},w=b(e.width,t.width,t.border.left,t.border.right,o,c),y=b(e.height,t.height,t.border.top,t.border.bottom,a,l);for(let v=0;v<l;v++)for(let _=0;_<c;_++){let[P,M,O]=w[_],[L,z,S]=y[v],A=(L*e.width+P)*4,I=(L*e.width+M)*4,k=(z*e.width+P)*4,D=(z*e.width+M)*4,E=m[A+3]*(1-O)*(1-S),T=m[I+3]*O*(1-S),B=m[k+3]*(1-O)*S,Y=m[D+3]*O*S,re=E+T+B+Y,U=(v*c+_)*4;p.data[U+3]=Math.round(re);for(let ie=0;ie<3;ie++)p.data[U+ie]=re?Math.round((m[A+ie]*E+m[I+ie]*T+m[k+ie]*B+m[D+ie]*Y)/re):0}return f.putImageData(p,0,0),u}function Sl(e){let t=Number(e)>>>0;return`rgba(${t>>>16&255},${t>>>8&255},${t&255},${(t>>>24)/255})`}function xl(e,t,i,r,n=wi){let o=t.textLayout;if(!o?.richLines||i<=0||r<=0)return;let a=t.horizontalAlignment==="Right"?1:t.horizontalAlignment==="Middle"?.5:0,s=t.verticalAlignment==="Bottom"?1:t.verticalAlignment==="Middle"?.5:0,c=t.kind==="textwindow"?t.scroll:null,l=o.visibleLineCount??o.richLines.length,u=o.visibleContentHeight??o.contentHeight,f=t.kind==="textwindow"&&o.contentHeight>r?-(c?.offset||0):s*(r-u);e.save(),e.beginPath(),e.rect(0,0,i,r),e.clip(),e.textAlign="left",e.textBaseline="alphabetic",e.lineJoin="round",e.strokeStyle=Sl(t.outlineColor??4278190080);for(let h=0;h<l;h++){let p=o.richLines[h],m=f+p.top;if(m+p.height<0||m>r)continue;let b=2+a*(o.textWidth-p.width);for(let w of p.runs)e.font=sr(w,n||wi),e.fillStyle=Sl(w.color??t.fontColor??4294967295),t.enableOutline&&(e.lineWidth=Math.max(2,w.fontSize*.12),e.strokeText(w.text,b+w.x,m+p.baseline)),e.fillText(w.text,b+w.x,m+p.baseline)}e.restore()}var Sd=wd(import.meta.url),xd=[0,-.5,.5,.5,-.5,.5],Id=[0,-.5,.12,-.12,.5,0,.12,.12,0,.5,-.12,.12,-.5,0,-.12,-.12],Cd=[0,-.5,.11,-.15,.48,-.15,.18,.07,.29,.41,0,.2,-.29,.41,-.18,.07,-.48,-.15,-.11,-.15],ko=Buffer.from([137,80,78,71,13,10,26,10]),kd=new Set(["image","textbox","textwindow","button","grid"]),Dr={cursor:"\u5149\u6807\u68C0\u6D4B\u533A\u57DF",reference:"\u6A21\u677F\u5F15\u7528\u63A7\u4EF6",grid:"\u7F51\u683C\u89C6\u7A97",button:"\u9884\u8BBE\u6309\u94AE",keyhint:"\u6309\u952E\u63D0\u793A",animation:"\u754C\u9762\u52A8\u6548",fullscreen:"\u5168\u5C4F\u52A8\u6548"},Gr=null;function Gi(){if(Gr)return Gr;try{Gr=Sd("@napi-rs/canvas")}catch(e){let t=e?.message||String(e);throw new Error(`Host screenshot renderer requires @napi-rs/canvas (${t})`)}return Gr}function W(e,t=0){let i=Number(e);return Number.isFinite(i)?i:t}function Lr(e,t=4294967295){let i=Number(e??t)>>>0;return{r:i>>>16&255,g:i>>>8&255,b:i&255,a:(i>>>24&255)/255}}function Nt(e,t=1){return`rgba(${e.r},${e.g},${e.b},${Math.max(0,Math.min(1,e.a*t))})`}function Cl(e,t,i=1){let r=Math.max(1,Math.round(W(e,1))),n=Math.max(1,Math.round(W(t,1))),o=Math.max(1,Math.min(2,W(i,1)));return{width:r,height:n,pixelWidth:Math.max(1,Math.round(r*o)),pixelHeight:Math.max(1,Math.round(n*o)),pixelRatio:o}}function kl(e){let t=Buffer.from(e.toBuffer("image/png"));if(t.length<ko.length||!t.subarray(0,ko.length).equals(ko))throw new Error("Host screenshot renderer did not produce a PNG");return t}function Ed(e){return e==="triangle"?xd:e==="fourstar"?Id:Cd}function Ad(e,t,i,r,n){let o=Ed(t);e.beginPath();for(let a=0;a<o.length;a+=2){let s=o[a]*i,c=o[a+1]*r;a===0?e.moveTo(s,c):e.lineTo(s,c)}e.closePath(),e.fillStyle=Nt(n),e.fill()}function Eo(e,t,i){let r=t?.matrix,n=r&&typeof r=="object"?[r.a,r.b,r.c,r.d,r.tx,r.ty].map(Number):null,o=t?.pressed?.98:1;if(n&&n.every(Number.isFinite)){let[a,s,c,l,u,f]=n;e.transform(a*o,-s*o,-c*o,l*o,u,i-f);return}e.translate(W(t.left)+W(t.width)/2,i-W(t.bottom)-W(t.height)/2),e.rotate(-W(t.rotationZ)*Math.PI/180),e.scale(o,o)}function _d(e,t,i,r,n,o){if(typeof e.roundRect=="function"){e.roundRect(t,i,r,n,o);return}let a=Math.max(0,Math.min(o,r/2,n/2));e.moveTo(t+a,i),e.arcTo(t+r,i,t+r,i+n,a),e.arcTo(t+r,i+n,t,i+n,a),e.arcTo(t,i+n,t,i,a),e.arcTo(t,i,t+r,i,a),e.closePath()}function El(e,t,i,r){let n=Lr(t.bgColor,16777215);e.fillStyle=Nt(n),e.fillRect(-i/2,-r/2,i,r);let o=t.textLayout||Je(t,i,r);if(o.richLines){e.save(),e.translate(-i/2,-r/2),xl(e,{...t,textLayout:o},i,r,jt()),e.restore();return}let a=o.fontSize,s=Lr(t.fontColor,4294967295),c=t.horizontalAlignment==="Right"?1:t.horizontalAlignment==="Middle"?.5:0,l=t.verticalAlignment==="Bottom"?1:t.verticalAlignment==="Middle"?.5:0;e.save(),e.beginPath(),e.rect(-i/2,-r/2,i,r),e.clip(),e.font=`${a}px ${jt()}`,e.fillStyle=Nt(s),e.textAlign=c===1?"right":c===.5?"center":"left";let u=t.kind==="textwindow"?t.scroll:null;if(e.textBaseline=u?"top":l===1?"bottom":l===.5?"middle":"top",t.enableOutline){let w=Lr(t.outlineColor,4278190080);e.strokeStyle=Nt(w),e.lineWidth=Math.max(2,a*.12),e.lineJoin="round"}let f=u?-i/2+2+c*u.textWidth:c===0?-i/2+2:c===1?i/2-2:0,h=l===0?-r/2:l===1?r/2:0,p=u?.lines||o.lines.slice(0,o.visibleLineCount??o.lines.length),m=u?.lineHeight||o.lineHeight,b=u?-r/2-u.offset+(u.max>0?0:l*(r-u.contentLength)):l===.5?h-(p.length-1)*m/2:l===1?h-(p.length-1)*m:h;for(let w=0;w<p.length;w+=1){let y=b+w*m;u&&(y+m<-r/2||y>r/2)||(t.enableOutline&&e.strokeText(p[w],f,y),e.fillText(p[w],f,y))}e.restore()}function Td(e,t,i,r){let n=Zt(t.scroll,i,r);if(n)for(let[o,a]of[[n.track,"#263447"],[n.thumb,"#90aecb"]])e.fillStyle=a,e.fillRect(o.x,o.y,o.width,o.height)}function Al(e,t,i,r){e.beginPath(),_d(e,-i/2,-r/2,i,r,6),e.fillStyle="#3268cf",e.fill(),e.strokeStyle="rgba(112,160,255,0.8)",e.lineWidth=1,e.stroke(),t.pressed&&(e.fillStyle="rgba(0,0,0,0.28)",e.fill())}function _l(e,t,i,r,n){let o=Lr(t.imageColor,4294967295),a=qi(t.imageId,t.imageSource),s=n?.images?.get(a);if(t.primitive==="sprite"&&s){let c=n.imageMetadata?.get(a),l=bl(c,t.imageType),u=`${a}:${Number(t.imageColor??4294967295)&16777215}:${l}:${l==="Stretch"?`${i}:${r}`:""}`,f=n.tints.get(u);if(!f){let h=l==="Stretch"?wl(s,c,i,r,Gi().createCanvas):s;f=gl(h,t.imageColor,Gi().createCanvas),n.tints.set(u,f)}e.globalAlpha*=o.a,e.drawImage(f,-i/2,-r/2,i,r);return}if(t.primitive==="missing"||t.primitive==="sprite"){e.fillStyle="rgba(72,34,40,0.36)",e.fillRect(-i/2,-r/2,i,r),e.strokeStyle="#ff7481",e.lineWidth=1,e.strokeRect(-i/2+.5,-r/2+.5,Math.max(0,i-1),Math.max(0,r-1));return}if(t.primitive==="circle"){e.beginPath(),e.ellipse(0,0,i/2,r/2,0,0,Math.PI*2),e.fillStyle=Nt(o),e.fill();return}if(t.primitive==="ring"){e.beginPath(),e.ellipse(0,0,Math.max(1,i/2-3.5),Math.max(1,r/2-3.5),0,0,Math.PI*2),e.strokeStyle=Nt(o),e.lineWidth=7,e.stroke();return}if(t.primitive==="triangle"||t.primitive==="fourstar"||t.primitive==="fivestar"){Ad(e,t.primitive,i,r,o);return}e.fillStyle=Nt(o),e.fillRect(-i/2,-r/2,i,r)}function Pd(e,t,i,r){let n=Math.max(0,W(t.sourceWidth,W(t.width))),o=Math.max(0,W(t.sourceHeight,W(t.height)));e.save();for(let a of t.clipPolygons||[])e.beginPath(),a.forEach((s,c)=>c?e.lineTo(s.x,i-s.y):e.moveTo(s.x,i-s.y)),e.closePath(),e.clip();if(Eo(e,t,i),t.kind==="textbox"||t.kind==="textwindow")El(e,t,n,o);else if(t.kind==="button")Al(e,t,n,o);else if(t.kind!=="grid"){let a=Co(t,n,o);a&&(e.beginPath(),e.rect(a.x,a.y,a.width,a.height),e.clip()),_l(e,t,n,o,r)}Td(e,t,n,o),e.restore()}function Tl(e,t,i,{checker:r=!1}={}){if(r){e.fillStyle="#28313e",e.fillRect(0,0,t,i);let o=16;for(let a=0;a<i;a+=o)for(let s=0;s<t;s+=o)(s/o+a/o)%2===0&&(e.fillStyle="rgba(255,255,255,0.04)",e.fillRect(s,a,o,o));e.strokeStyle="#40b8cf",e.lineWidth=1,e.strokeRect(.5,.5,t-1,i-1);return}let n=e.createRadialGradient(t/2,i*.45,8,t/2,i/2,Math.max(t,i)*.72);n.addColorStop(0,"#123a6b"),n.addColorStop(.72,"#061934"),n.addColorStop(1,"#071426"),e.fillStyle=n,e.fillRect(0,0,t,i)}function Rd(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,tx:e.a*t.tx+e.c*t.ty+e.tx,ty:e.b*t.tx+e.d*t.ty+e.ty}}function Il(e){let t=e?.matrix;return!t||typeof t!="object"?{a:1,b:0,c:0,d:1,tx:0,ty:0}:{a:W(t.a,1),b:W(t.b),c:W(t.c),d:W(t.d,1),tx:W(t.tx),ty:W(t.ty)}}function Md(e){let t=Array.isArray(e?.nodes)?e.nodes:[],i=new Map;for(let a of t){if(!a||a.id===void 0||a.id===null)continue;let s=a.parent==null?"":String(a.parent),c=i.get(s);c?c.push(a):i.set(s,[a])}for(let a of i.values())a.sort((s,c)=>W(s.z)-W(c.z));let r=[];function n(a,s,c,l){if(!kd.has(a.kind))return;let u=Math.abs(W(a.sourceWidth)*Math.hypot(s.a,s.b)),f=Math.abs(W(a.sourceHeight)*Math.hypot(s.c,s.d));r.push({...a,left:s.tx-u/2,bottom:s.ty-f/2,width:u,height:f,rotationZ:Math.atan2(s.b,s.a)*180/Math.PI,matrix:{a:s.a,b:s.b,c:s.c,d:s.d,tx:s.tx,ty:s.ty},...c.length?{clipPolygons:c}:{},...l.length?{masks:l}:{}})}function o(a,s,c=null,l=[],u=[]){let f=i.get(a)||[];for(let h=f.length-1;h>=0;h-=1){let p=f[h],m=s?Rd(s,Il(p)):Il(p),b=l;if(p.clipToParent&&s&&c){let v=c.sourceWidth/2,_=c.sourceHeight/2;b=[...l,[[-v,-_],[v,-_],[v,_],[-v,_]].map(([P,M])=>({x:s.a*P+s.c*M+s.tx,y:s.b*P+s.d*M+s.ty}))]}let w=Ut(p,m),y=w?[...u,w]:u;p.kind!=="grid"&&n(p,m,b,y),o(String(p.id),m,p,b,y),p.kind==="grid"&&n(p,m,b,y)}}return o("",null),r}function Pl(e,t,i,r={}){return Od(Md(e),t,i,r)}function Nd(e,t,i){if(!(e.width>0&&e.height>0)||!Xe(e.matrix))return null;let r=[[-1,-1],[1,-1],[1,1],[-1,1]].map(([c,l])=>{let u=Ie(e.matrix,c*e.width/2,l*e.height/2);return{x:u.x*i.pixelRatio,y:(i.height-u.y)*i.pixelRatio}}),n=Math.max(t.x,Math.floor(Math.min(...r.map(c=>c.x)))),o=Math.max(t.y,Math.floor(Math.min(...r.map(c=>c.y)))),a=Math.min(t.x+t.canvas.width,Math.ceil(Math.max(...r.map(c=>c.x)))),s=Math.min(t.y+t.canvas.height,Math.ceil(Math.max(...r.map(c=>c.y))));return a>n&&s>o?{x:n,y:o,width:a-n,height:s-o}:null}function Fd(e,t,i,r){let n=t.canvas.width,o=t.canvas.height,a=t.ctx.getImageData(0,0,n,o).data,s=t.x-e.x,c=t.y-e.y,l=e.ctx.getImageData(s,c,n,o),u=l.data,f=Xe(i.matrix);for(let h=0;h<o;h++){let p=r.height-(t.y+h+.5)/r.pixelRatio;for(let m=0;m<n;m++){let b=(h*n+m)*4;if(!a[b+3])continue;let w=(t.x+m+.5)/r.pixelRatio,y=f.a*w+f.c*p+f.tx,v=f.b*w+f.d*p+f.ty,_=Ta(y,v,i),P=Math.round(a[b+3]*_)/255;if(!P)continue;let M=u[b+3]/255,O=P+M*(1-P);for(let L=0;L<3;L++)u[b+L]=Math.round((a[b+L]*P+u[b+L]*M*(1-P))/O);u[b+3]=Math.round(O*255)}}e.ctx.save(),e.ctx.setTransform(1,0,0,1,0,0),e.ctx.putImageData(l,s,c),e.ctx.restore()}function Ao(e,t,i,r,n=Pd){for(let o of t){if(o.item){n(e.ctx,o.item,i.height,r);continue}let a=Nd(o.mask,e,i);if(!a)continue;let s=Gi().createCanvas(a.width,a.height),c=s.getContext("2d");c.setTransform(i.pixelRatio,0,0,i.pixelRatio,-a.x,-a.y);let l={canvas:s,ctx:c,x:a.x,y:a.y};Ao(l,o.children,i,r,n),Fd(e,l,o.mask,i)}}function Od(e,t,i,r={}){let{createCanvas:n}=Gi(),o=Cl(t,i,r.scale),a=n(o.pixelWidth,o.pixelHeight),s=a.getContext("2d");s.scale(o.pixelRatio,o.pixelRatio),r.background!=="transparent"&&Tl(s,o.width,o.height);let c=Array.isArray(e)?e:[],l={images:r.images,imageMetadata:r.imageMetadata,tints:new Map};return Ao({canvas:a,ctx:s,x:0,y:0},Cn(c),o,l),{data:kl(a),width:o.width,height:o.height,pixelWidth:o.pixelWidth,pixelHeight:o.pixelHeight}}function Rl(e){if(e.renderMatrix){let t=Ie(e.renderMatrix,e.centerX,e.centerY);return{kind:e.kind,width:e.width,height:e.height,matrix:{...e.renderMatrix,tx:t.x,ty:t.y}}}return{kind:e.kind,left:W(e.renderLeft,e.left),bottom:W(e.renderBottom,e.bottom),width:Math.max(0,W(e.renderWidth,e.width)),height:Math.max(0,W(e.renderHeight,e.height)),rotationZ:W(e.renderRotationZ,e.rotationZ)}}function Vr(e,t,i){let r=String(t||"");if(!r)return;e.font=`10px ${jt()}`,e.textAlign="center",e.textBaseline="middle";let n=e.measureText(r),o=Math.min(i-4,Math.max(24,n.width+8)),a=16;e.fillStyle="rgba(17,25,37,0.66)",e.fillRect(-o/2,-a/2,o,a),e.fillStyle="#e7edf5",e.fillText(r,0,0)}function zd(e,t,i,r){let n=Rl(t);if(n.width<=0||n.height<=0)return;e.save(),Eo(e,n,i);let o=-n.width/2,a=-n.height/2;if(t.kind==="image"){e.save();let s=Math.max(0,W(t.width,n.width)),c=Math.max(0,W(t.height,n.height));e.scale(s?n.width/s:1,c?n.height/c:1);let l=t.enableFill?Co(t,s,c):null;l&&(e.beginPath(),e.rect(l.x,l.y,l.width,l.height),e.clip()),_l(e,t,s,c,r),e.restore()}else if(t.kind==="textbox"||t.kind==="textwindow")El(e,t,n.width,n.height);else if(t.kind==="button")Al(e,t,n.width,n.height),Vr(e,t.name||Dr.button,n.width);else if(t.kind==="cursor")e.setLineDash([6,4]),e.strokeStyle="rgba(74,142,181,0.7)",e.fillStyle="rgba(74,142,181,0.1)",e.fillRect(o,a,n.width,n.height),e.strokeRect(o,a,n.width,n.height),Vr(e,t.name||Dr.cursor,n.width);else if(t.kind==="grid"){e.strokeStyle="rgba(106,146,189,0.55)",e.strokeRect(o,a,n.width,n.height),e.beginPath();for(let s=20;s<n.width;s+=20)e.moveTo(o+s,a),e.lineTo(o+s,a+n.height);for(let s=20;s<n.height;s+=20)e.moveTo(o,a+s),e.lineTo(o+n.width,a+s);e.stroke(),Vr(e,t.name||Dr.grid,n.width)}else t.kind!=="container"&&t.kind!=="server-container"?(e.setLineDash(t.kind==="reference"||t.kind==="animation"||t.kind==="fullscreen"?[4,4]:[]),e.strokeStyle="rgba(203,218,237,0.55)",e.strokeRect(o,a,n.width,n.height),Vr(e,t.name||Dr[t.kind]||t.kind,n.width)):(e.strokeStyle="rgba(78,165,230,0.42)",e.strokeRect(o,a,n.width,n.height));e.restore()}function Ml(e,t={}){let{createCanvas:i}=Gi(),r=e?.canvas||{},n=Cl(r.width||1600,r.height||900,t.scale),o=i(n.pixelWidth,n.pixelHeight),a=o.getContext("2d");a.scale(n.pixelRatio,n.pixelRatio),Tl(a,n.width,n.height,{checker:!0});let s=(Array.isArray(e?.boxes)?e.boxes:[]).filter(f=>f&&f.kind!=="server-container"&&f.visible!==!1&&f.visibleInHierarchy!==!1),c=e?.selectedId,l={images:t.images,imageMetadata:t.imageMetadata,tints:new Map};Ao({canvas:o,ctx:a,x:0,y:0},Cn(s),n,l,zd);let u=s.find(f=>f.id===c);if(u&&u.kind!=="container"){let f=Rl(u);a.save(),Eo(a,f,n.height),a.strokeStyle="#61b9ff",a.lineWidth=2,a.strokeRect(-f.width/2,-f.height/2,f.width,f.height),a.restore()}return{data:kl(o),page:e?.asset?.type==="client-control-template"?"UI\u63A7\u4EF6-\u5BA2\u6237\u7AEF":"UI \u7F16\u8F91",width:n.width,height:n.height,pixelWidth:n.pixelWidth,pixelHeight:n.pixelHeight}}import{closeSync as $d,existsSync as Br,openSync as Dd,opendirSync as Gd,readSync as Vd,realpathSync as ri,statSync as Fl}from"node:fs";import{basename as Ld,dirname as Nl,isAbsolute as To,join as Bd,relative as Ol,resolve as Bi}from"node:path";var Hd="qxqy-simulator-save",zl=new Set(["node_modules",".git","dist",".dsh","coverage"]),Vi=50,$l=4096,_o=(e,t)=>{let i=Number(process.env[e]);return Number.isSafeInteger(i)&&i>0?i:t},Yd=()=>({entries:_o("QXQY_SCAN_ENTRY_LIMIT",1e4),directories:_o("QXQY_SCAN_DIR_LIMIT",1e3),depth:_o("QXQY_SCAN_DEPTH_LIMIT",8)});function Ft(e=""){let t=Bi(String(e||process.cwd()));if(!Br(t))throw new Error(`workspace does not exist: ${t}`);if(!Fl(t).isDirectory())throw new Error(`workspace is not a directory: ${t}`);return ri(t)}function Li(e,t,i=!1){let r=Ol(e,t);if(!i&&!r||r.startsWith("..")||To(r))throw new Error("path must stay inside the configured workspace");return r}function Re(e,t){let i=String(t||"").trim();if(!i||To(i))throw new Error("path must be a non-empty workspace-relative path");let r=ri(Bi(e)),n=Bi(r,i);if(Li(r,n),!Br(n))throw new Error(`file does not exist: ${i}`);let o=ri(n);return Li(r,o),o}function xe(e,t){let i=String(t||"").trim();if(!i||To(i))throw new Error("path must be a non-empty workspace-relative path");let r=ri(Bi(e)),n=Bi(r,i);Li(r,n);let o=Nl(n);for(;!Br(o);){let a=Nl(o);if(a===o)throw new Error("unable to resolve output directory");o=a}return Li(r,ri(o),!0),Br(n)&&Li(r,ri(n)),n}function jd(e,t=$l){let i=Buffer.alloc(t),r=Dd(e,"r");try{let n=Vd(r,i,0,t,0);return i.subarray(0,n).toString("utf8")}finally{$d(r)}}function Dl(e,t,i,r,n){let o=n.limits;if(r>o.depth){n.depthLimitedDirectories+=1;return}if(n.scannedDirectories>=o.directories){n.directoryLimitReached=!0;return}let a;try{n.scannedDirectories+=1,a=Gd(e)}catch{n.unreadableEntries+=1;return}try{let s;for(;s=a.readSync();){if(n.scannedEntries>=o.entries){n.entryLimitReached=!0;return}if(n.scannedEntries+=1,s.name.startsWith(".")||s.isDirectory()&&zl.has(s.name)){n.skippedEntries+=1,s.isDirectory()&&(n.skippedDirectories+=1);continue}let c=Bd(e,s.name);if(s.isDirectory()){if(Dl(c,t,i,r+1,n),n.entryLimitReached||n.directoryLimitReached)return;continue}if(!(!s.isFile()||!/\.json$/i.test(s.name))){n.scannedJsonFiles+=1;try{let l=Fl(c),u=jd(c);if(!u.includes(Hd))continue;let f=u.match(/"name"\s*:\s*("(?:\\.|[^"\\])*")/)?.[1],h=Ld(s.name,".json");if(f)try{h=JSON.parse(f)||h}catch{}i.push({path:Ol(t,c).replaceAll("\\","/"),name:h,bytes:l.size,mtime:l.mtimeMs})}catch{n.unreadableEntries+=1}}}}catch{n.unreadableEntries+=1}finally{try{a.closeSync()}catch{n.unreadableEntries+=1}}}function Hr(e){let t=Ft(e),i=[],r={truncated:!1,warnings:[],scannedDirectories:0,scannedEntries:0,scannedJsonFiles:0,matchedArchives:0,skippedDirectories:0,skippedEntries:0,unreadableEntries:0,depthLimitedDirectories:0,entryLimitReached:!1,directoryLimitReached:!1,limits:{archives:Vi,headBytes:$l,...Yd()},policy:{excludedDirectories:[...zl],hiddenEntries:!1,symlinks:!1,validatesJson:!1}};return Dl(t,t,i,0,r),i.sort((n,o)=>o.mtime-n.mtime||n.path.localeCompare(o.path)),r.matchedArchives=i.length,i.length>Vi&&r.warnings.push(`\u53D1\u73B0 ${i.length} \u4E2A\u5B58\u6863\uFF0C\u4EC5\u663E\u793A\u4FEE\u6539\u65F6\u95F4\u6700\u65B0\u7684 ${Vi} \u4E2A\uFF1B\u5176\u4ED6\u5B58\u6863\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u3002`),(r.entryLimitReached||r.directoryLimitReached)&&r.warnings.push(`\u81EA\u52A8\u53D1\u73B0\u8FBE\u5230\u626B\u63CF\u4E0A\u9650\uFF08${r.limits.entries} \u9879 / ${r.limits.directories} \u4E2A\u76EE\u5F55\uFF09\uFF0C\u5217\u8868\u53EF\u80FD\u4E0D\u5B8C\u6574\uFF1B\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u5B58\u6863\u3002`),r.depthLimitedDirectories&&r.warnings.push(`\u81EA\u52A8\u53D1\u73B0\u8DF3\u8FC7 ${r.depthLimitedDirectories} \u4E2A\u8D85\u8FC7 ${r.limits.depth} \u5C42\u7684\u76EE\u5F55\uFF1B\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u5176\u4E2D\u7684\u5B58\u6863\u3002`),r.skippedEntries&&r.warnings.push("\u81EA\u52A8\u53D1\u73B0\u8DF3\u8FC7\u9690\u85CF\u9879\u53CA\u751F\u6210\u76EE\u5F55\uFF08\u5982 node_modules\u3001dist\uFF09\uFF1B\u53EF\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u6253\u5F00\u5176\u4E2D\u7684\u5B58\u6863\u3002"),r.unreadableEntries&&r.warnings.push(`\u81EA\u52A8\u53D1\u73B0\u65E0\u6CD5\u8BFB\u53D6 ${r.unreadableEntries} \u4E2A\u6587\u4EF6\u6216\u76EE\u5F55\uFF1B\u8BF7\u68C0\u67E5\u8BBF\u95EE\u6743\u9650\uFF0C\u6216\u901A\u8FC7\u6307\u5B9A\u8DEF\u5F84\u67E5\u770B\u5177\u4F53\u9519\u8BEF\u3002`),r.truncated=i.length>Vi||r.entryLimitReached||r.directoryLimitReached||r.depthLimitedDirectories>0,{bound:!0,workspace:t,archives:i.slice(0,Vi),discovery:r}}import{readFileSync as Ud}from"node:fs";import{homedir as Xd}from"node:os";import{join as Wd}from"node:path";var Kd={"zh-cn":"LanguageChs",chs:"LanguageChs","zh-tw":"LanguageCht",cht:"LanguageCht",en:"LanguageEng","en-us":"LanguageEng",eng:"LanguageEng",ja:"LanguageJpn","ja-jp":"LanguageJpn",jp:"LanguageJpn",ko:"LanguageKor","ko-kr":"LanguageKor",kr:"LanguageKor",fr:"LanguageFra",fra:"LanguageFra",de:"LanguageDeu",deu:"LanguageDeu",es:"LanguageSpa",spa:"LanguageSpa",pt:"LanguagePor",por:"LanguagePor",ru:"LanguageRus",rus:"LanguageRus",th:"LanguageTha",tha:"LanguageTha",vi:"LanguageVie",vie:"LanguageVie",id:"LanguageInd",ind:"LanguageInd",tr:"LanguageTur",tur:"LanguageTur",it:"LanguageIta",ita:"LanguageIta"};function qd(e){let i=[...String(e||"").matchAll(/Request to set language:([A-Za-z0-9_-]+)/g)].at(-1)?.[1]?.toLowerCase();return Kd[i]||null}function Jd(){return Wd(Xd(),"AppData","LocalLow","miHoYo","\u539F\u795E","output_log.txt")}function Gl(e=Jd()){try{return qd(Ud(e,"utf8"))}catch{return null}}import{existsSync as Mo,lstatSync as Qd,mkdirSync as Vl,readFileSync as Yr,readdirSync as Zd,realpathSync as Ll,renameSync as eh,rmSync as th,statSync as Xr,writeFileSync as Bl}from"node:fs";import{createHash as ih,randomUUID as Hl}from"node:crypto";import{homedir as rh}from"node:os";import{basename as nh,dirname as jr,isAbsolute as oh,join as Ur,relative as ah}from"node:path";var $e=e=>ih("sha256").update(e).digest("hex"),Po=e=>Mo(e)?$e(Yr(e)):null,Ro=(e,t)=>{let i=ah(e,t);return!oh(i)&&i!==".."&&!i.startsWith(`..${process.platform==="win32"?"\\":"/"}`)};function Yl(e,t){let i=xe(e,t),r=i;for(;r!==e;){try{if(Qd(r).isSymbolicLink())throw new Error("\u5B9E\u673A\u76EE\u6807\u4E0D\u80FD\u5305\u542B\u7B26\u53F7\u94FE\u63A5\u6216\u76EE\u5F55\u8054\u63A5")}catch(n){if(n.code!=="ENOENT")throw n}r=jr(r)}if(Mo(i)&&!Xr(i).isFile())throw new Error("\u5B9E\u673A\u76EE\u6807\u4E0D\u662F\u666E\u901A\u6587\u4EF6");return i}function jl(e=Ur(rh(),"AppData","LocalLow","miHoYo","\u539F\u795E","BeyondLocal")){let t=r=>{try{return Zd(r,{withFileTypes:!0}).filter(n=>n.isDirectory()&&/^\d+$/.test(n.name)).map(n=>n.name)}catch{return[]}},i=[];for(let r of t(e)){let n=Ur(e,r,"Beyond_Local_Save_Level");for(let o of t(n)){let a=Ur(n,o,"external_lua_file","default_import_file");Mo(a)&&Xr(a).isDirectory()&&i.push({uid:r,editorId:o,path:a})}}return{candidates:i}}var Wr=class{constructor(t){this.controller=t,this.plan=null,this.lastResult=null}preview(){let t=this.controller,i=t.studio.archiveData(),r=gi(i.scriptSync);if(!r)throw new Error("\u8BF7\u5148\u914D\u7F6E\u5B9E\u673A\u811A\u672C\u76EE\u5F55");let n=Ll(t.activeWorkspacePath()),o=Ll(r.clientImportRoot);if(!Xr(o).isDirectory())throw new Error("\u5B9E\u673A\u5BFC\u5165\u6839\u76EE\u5F55\u4E0D\u5B58\u5728");let a=r.workspaceDir?Re(n,r.workspaceDir):n;if(!Xr(a).isDirectory())throw new Error("\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u4E0D\u5B58\u5728");if(Ro(a,o)||Ro(o,a))throw new Error("\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u4E0E\u5B9E\u673A\u76EE\u5F55\u4E0D\u80FD\u91CD\u53E0");let s=new Map,c=i.assets.scripts.map(u=>{let f={id:u.id,path:u.path,sourceKind:u.source.trim()?"\u5B58\u6863\u6E90\u7801":"\u5DE5\u4F5C\u533A\u6587\u4EF6"};try{let h=er(u.path);if(!/\.lua$/i.test(h))throw new Error("\u811A\u672C\u8DEF\u5F84\u5FC5\u987B\u4EE5 .lua \u7ED3\u5C3E");let p=r.workspaceDir?`${r.workspaceDir}/`:"";if(!h.startsWith(p))throw new Error("\u811A\u672C\u4E0D\u5728\u6240\u914D\u7F6E\u7684\u5DE5\u4F5C\u533A\u811A\u672C\u76EE\u5F55\u4E2D");let m=[r.clientSubdir,h.slice(p.length)].filter(Boolean).join("/"),b=Yl(o,m),w=b.toLowerCase();s.set(w,(s.get(w)||0)+1);let y=null,v="";try{y=Yr(Re(n,h),"utf8")}catch(M){v=M.message}if(!u.source.trim()&&y===null)throw new Error(v);let _=u.source.trim()?u.source:y,P=Po(b);return{...f,target:b,targetRelative:m,source:_,diskSource:y,diskError:v,sourceMismatch:!!(u.source.trim()&&y!==null&&u.source!==y),beforeSource:P===null?"":Yr(b,"utf8"),beforeHash:P,sourceHash:$e(_),status:P===null?"\u65B0\u589E":P===$e(_)?"\u672A\u53D8\u5316":"\u8986\u76D6"}}catch(h){return{...f,status:"\u9519\u8BEF",error:h.message}}});for(let u of c)u.target&&s.get(u.target.toLowerCase())>1&&(u.status="\u9519\u8BEF",u.error="\u591A\u4E2A\u811A\u672C\u6620\u5C04\u5230\u540C\u4E00\u76EE\u6807\u6587\u4EF6");let l=$e(JSON.stringify({archive:i,workspace:n,root:o,rows:c}));return this.plan={id:Hl(),fingerprint:l,root:o,workspace:n,rows:c,pendingGuidChanges:i.controlGuidChanges.length,createdAt:new Date().toISOString()},this.plan}apply({planId:t,scriptIds:i,confirmed:r}){let n=this.plan;if(r!==!0||!n||n.id!==t)throw new Error("\u8BF7\u5148\u68C0\u67E5\u5DEE\u5F02\u5E76\u786E\u8BA4\u672C\u6B21\u590D\u5236");let o=this.preview();if(this.plan=null,o.fingerprint!==n.fingerprint)throw new Error("\u5185\u5BB9\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");if(n.pendingGuidChanges)throw new Error("\u8BF7\u5148\u6838\u5BF9\u5E76\u786E\u8BA4\u63A7\u4EF6\u7D22\u5F15\u7684 Lua \u5F15\u7528\u53D8\u66F4");if(!Array.isArray(i)||!i.length||new Set(i).size!==i.length)throw new Error("\u8BF7\u9009\u62E9\u8981\u590D\u5236\u7684\u811A\u672C");let a=i.map(u=>{let f=n.rows.find(h=>h.id===u);if(!f||f.error||f.status==="\u672A\u53D8\u5316")throw new Error("\u6240\u9009\u811A\u672C\u4E0D\u80FD\u590D\u5236\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");return f});this.controller.assertSavedArchive();let s=`.qxqy-script-sync-backups/${n.id}`,c=xe(n.workspace,s);if(Ro(n.root,c))throw new Error("\u5907\u4EFD\u76EE\u5F55\u4E0D\u80FD\u4F4D\u4E8E\u5B9E\u673A\u811A\u672C\u76EE\u5F55\u4E2D");let l=[];for(let u of a){let f="";try{let h=Yl(n.root,u.targetRelative);if(Po(h)!==u.beforeHash)throw new Error("\u76EE\u6807\u6587\u4EF6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");if(u.beforeHash!==null){let p=xe(n.workspace,`${s}/${u.targetRelative}`);Vl(jr(p),{recursive:!0}),Bl(p,Yr(h),{flag:"wx"})}if(Vl(jr(h),{recursive:!0}),f=Ur(jr(h),`.${nh(h)}.${Hl()}.tmp`),Bl(f,u.source,{flag:"wx"}),Po(h)!==u.beforeHash)throw new Error("\u76EE\u6807\u6587\u4EF6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5");eh(f,h),l.push({id:u.id,target:h,status:"\u6210\u529F"})}catch(h){l.push({id:u.id,target:u.target,status:"\u5931\u8D25",error:h.message})}finally{f&&th(f,{force:!0})}}return this.lastResult={completed:l.every(u=>u.status==="\u6210\u529F"),at:new Date().toISOString(),backupRoot:c,results:l},this.lastResult}};import{createHash as sh,randomUUID as lh}from"node:crypto";import{mkdir as ch,open as uh,readFile as fh,rename as dh,rm as No,stat as hh,writeFile as ph}from"node:fs/promises";import{homedir as Fo}from"node:os";import{join as ni,resolve as mh}from"node:path";import{setTimeout as gh}from"node:timers/promises";var Oo=e=>sh("sha256").update(e).digest("hex");function Kr(e){return ni(process.platform==="win32"?process.env.LOCALAPPDATA||ni(Fo(),"AppData","Local"):process.platform==="darwin"?ni(Fo(),"Library","Caches"):process.env.XDG_CACHE_HOME||ni(Fo(),".cache"),"beyond-simulator",e)}var ht=class{constructor({cacheDir:t,source:i,version:r,extension:n,accepts:o,fetch:a=globalThis.fetch,timeout:s=12e3}){this.directory=ni(mh(t),r,Oo(i).slice(0,12)),Object.assign(this,{source:i,extension:n,accepts:o,fetcher:a,timeout:s}),this.pending=new Map,this.failures=new Map,this.active=0,this.waiters=[]}async limited(t){this.active>=4?await new Promise(i=>this.waiters.push(i)):this.active++;try{return await t()}finally{let i=this.waiters.shift();i?i():this.active--}}async download(t,i,r,n){let o=await this.fetcher(new URL(t,this.source),{signal:r,redirect:"error",cache:n?"no-cache":"default"});if(!o.ok)throw Object.assign(new Error(`Asset source returned HTTP ${o.status}`),{status:o.status});if(Number(o.headers.get("content-length"))>i)throw new Error("Asset response too large");let a=[],s=0;for await(let c of o.body){if(s+=c.length,s>i)throw new Error("Asset response too large");a.push(c)}return Buffer.concat(a)}async cached(t){try{let i=await fh(t);return{data:i,...await this.decode(i),etag:`"${Oo(i)}"`}}catch(i){if(i.code==="ENOENT")return null;if(i.code==="EACCES"||i.code==="EPERM")throw i;return null}}async load(t,i=!1){let r=ni(this.directory,`${t}.${this.extension}`),n=!i&&await this.cached(r);if(n)return n;await ch(this.directory,{recursive:!0});let o=`${r}.lock`,a=Date.now()+3e4,s;for(;!s;)try{s=await uh(o,"wx")}catch(l){if(l.code!=="EEXIST")throw l;let u=!i&&await this.cached(r);if(u)return u;try{Date.now()-(await hh(o)).mtimeMs>6e4&&await No(o,{force:!0})}catch(f){if(f.code!=="ENOENT")throw f}if(Date.now()>a)throw new Error("Timed out waiting for asset cache writer");await gh(80)}let c=`${r}.${lh()}.tmp`;try{let l=!i&&await this.cached(r);if(l)return l;let u=new AbortController,f=setTimeout(()=>u.abort(),this.timeout),h;try{h=await this.produce(t,u.signal,i)}finally{clearTimeout(f),u.abort()}let p=await this.decode(h);return await ph(c,h,{flag:"wx"}),await dh(c,r),{data:h,...p,etag:`"${Oo(h)}"`}}finally{try{await No(c,{force:!0})}finally{await s.close(),await No(o,{force:!0})}}}get(t,{refresh:i=!1}={}){if(!this.accepts(t))return Promise.reject(Object.assign(new Error("Asset ID is not in the preview allowlist"),{status:404}));if(this.pending.has(t))return this.pending.get(t);let r=this.failures.get(t);if(!i&&r&&r.until>Date.now())return Promise.reject(r.error);let n=this.limited(()=>this.load(t,i)).then(o=>(this.failures.delete(t),o),o=>{throw i||this.failures.set(t,{until:Date.now()+6e4,error:o}),o}).finally(()=>this.pending.delete(t));return this.pending.set(t,n),n}async refresh(t){if(!this.accepts(t))throw Object.assign(new Error("Asset ID is not in the preview allowlist"),{status:404});return await this.pending.get(t)?.catch(()=>{}),this.failures.delete(t),this.get(t,{refresh:!0})}};import{createHash as yh}from"node:crypto";import{createCanvas as bh,loadImage as Ul}from"@napi-rs/canvas";var qr=class extends ht{constructor({cacheDir:t,source:i=Wi,fetch:r=globalThis.fetch}){super({cacheDir:t,source:i,fetch:r,version:"border-v1",extension:"json",accepts:n=>rt(n)})}decode(t){let i=JSON.parse(t.toString("utf8"));if(i!==null&&(typeof i!="object"||Array.isArray(i)))throw new Error("Invalid image metadata");let r=vl(i);return{raw:i,meta:r}}async produce(t,i,r){try{return await this.download(`border/${t}.json`,128*1024,i,r)}catch(n){if(n.status===404)return Buffer.from("null");throw n}}};var $o=20*1024*1024,vh=Buffer.from("89504e470d0a1a0a","hex");function Xl(e,t){return t.throwIfAborted(),new Promise((i,r)=>{let n=()=>r(t.reason);t.addEventListener("abort",n,{once:!0}),e.then(i,r).finally(()=>t.removeEventListener("abort",n))})}function wh(){return process.env.QXQY_IMAGE_CACHE_DIR||Kr("images")}function zo(e){if(e.length<24||e.length>$o||!e.subarray(0,8).equals(vh))throw new Error("Invalid sprite PNG");let t=e.readUInt32BE(16),i=e.readUInt32BE(20);if(!t||!i||t>8192||i>8192||t*i>16777216)throw new Error("Sprite PNG exceeds pixel limit")}var Do=class e extends ht{constructor({cacheDir:t=wh(),fetch:i=globalThis.fetch,source:r,imageSource:n="StaticReference"}={}){let o=ke(n);if(!["StaticReference","Prefab"].includes(o))throw new Error(`Unsupported image source: ${o}`);super({cacheDir:t,fetch:i,source:r||(o==="Prefab"?Xo:Wi),version:o==="Prefab"?pi:rn,extension:"png",accepts:a=>rt(a,o)}),this.imageSource=o,this.cacheDir=t,this.prefabStore=null,this.metadataStore=null}forSource(t){let i=ke(t);if(i===this.imageSource)return this;if(i==="Prefab"&&this.imageSource==="StaticReference")return this.prefabStore||=new e({cacheDir:this.cacheDir,imageSource:"Prefab",fetch:(...r)=>this.fetcher(...r)});throw Object.assign(new Error(`Unsupported image source: ${i}`),{status:404})}get(t,{imageSource:i=this.imageSource,...r}={}){try{let n=this.forSource(i);return n===this?super.get(t,r):n.get(t,r)}catch(n){return Promise.reject(n)}}refresh(t,{imageSource:i=this.imageSource}={}){try{let r=this.forSource(i);return r===this?super.refresh(t):r.refresh(t)}catch(r){return Promise.reject(r)}}async decode(t){return zo(t),{image:await Ul(t)}}metadata(t,{imageSource:i=this.imageSource,refresh:r=!1}={}){try{let n=this.forSource(i);if(n!==this)return n.metadata(t,{refresh:r});if(!this.accepts(t))throw Object.assign(new Error("Image ID is not in the preview allowlist"),{status:404});return this.imageSource==="Prefab"?Promise.resolve({meta:null,raw:null}):(this.metadataStore||=new qr({cacheDir:this.cacheDir,source:this.source,fetch:(...o)=>this.fetcher(...o)}),r?this.metadataStore.refresh(t):this.metadataStore.get(t))}catch(n){return Promise.reject(n)}}async produce(t,i,r){if(this.imageSource==="Prefab"){let c=await this.download(`sprite/${t}.png`,$o,i,r);zo(c);let l=Xi(t);if(c.readUInt32BE(16)!==l||c.readUInt32BE(20)!==l)throw new Error("Prefab PNG does not match catalog dimensions");return c}let[n,o]=await Promise.all([this.download(`sprite/${t}.png`,$o,i,r),this.metadata(t,{refresh:r})]);zo(n);let a=await Ul(n),s=o.raw?ml(a,o.raw,bh):a;return o.raw?Buffer.from(s.toBuffer("image/png")):n}async prepare(t,i){let r=new Map,n=new Map,o=[],a=[...new Map((t||[]).filter(u=>u.kind==="image"&&u.visible!==!1&&rt(u.imageId,u.imageSource)).map(u=>[qi(u.imageId,u.imageSource),{imageId:u.imageId,imageSource:ke(u.imageSource)}])).entries()];i?.throwIfAborted();let s=AbortSignal.timeout(45e3),c=i?AbortSignal.any([i,s]):s,l=0;await Promise.all(Array.from({length:Math.min(4,a.length)},async()=>{for(;l<a.length&&!c.aborted;){let[u,f]=a[l++];try{let h=await Xl(this.get(f.imageId,f),c);r.set(u,h.image);let p=await Xl(this.metadata(f.imageId,f),c);n.set(u,p.meta)}catch(h){o.push({...f,error:h.message})}}}));for(let[,u]of a.slice(l))o.push({...u,error:"Image preparation timed out"});return i?.throwIfAborted(),{images:r,imageMetadata:n,warnings:o}}},Sh;function Hi(){return Sh||=new Do}async function Wl(e,t,i=Hi()){let r=new URL(e.url,"http://localhost");if(r.pathname!==Ki.slice(0,-1)&&!r.pathname.startsWith(Ki))return!1;try{if(!["GET","HEAD"].includes(e.method))throw Object.assign(new Error("GET or HEAD required"),{status:405});let n=r.pathname.match(new RegExp(`^${Ki}(${rn}|${pi})/([0-9]+)\\.(png|json)$`));if(!n)throw Object.assign(new Error("Unknown image resource"),{status:404});let o={imageSource:n[1]===pi?"Prefab":"StaticReference"};if(n[3]==="json"){let{meta:c}=await i.metadata(Number(n[2]),o),l=JSON.stringify(c),u=`"${yh("sha256").update(l).digest("hex")}"`,f={"content-type":"application/json; charset=utf-8","cache-control":"private, max-age=43200",etag:u,"x-content-type-options":"nosniff"};return e.headers["if-none-match"]===u?(t.writeHead(304,f),t.end()):(t.writeHead(200,f),t.end(e.method==="HEAD"?void 0:l)),!0}let a=await i.get(Number(n[2]),o),s={"content-type":"image/png","cache-control":"private, max-age=43200",etag:a.etag,"x-content-type-options":"nosniff"};e.headers["if-none-match"]===a.etag?(t.writeHead(304,s),t.end()):(t.writeHead(200,{...s,"content-length":a.data.length}),t.end(e.method==="HEAD"?void 0:a.data))}catch(n){t.writeHead(n.status||502,{"content-type":"text/plain; charset=utf-8","cache-control":"no-store","x-content-type-options":"nosniff"}),t.end(e.method==="HEAD"?void 0:n.message)}return!0}import{existsSync as xh,mkdirSync as Kl,readFileSync as Ih,renameSync as Ch,rmSync as kh,writeFileSync as Go}from"node:fs";import{randomUUID as Ql}from"node:crypto";import{dirname as ql,join as Eh}from"node:path";function Jl(e,t){let i=`${e}.${Ql()}.tmp`;try{Go(i,t,{flag:"wx"}),Ch(i,e)}finally{kh(i,{force:!0})}}var Jr=class{constructor(t){this.controller=t,this.plan=null}inspect(){let t=this.controller.studio.archiveData(),i=t.controlGuidChanges||[],r=t.assets.scripts,n=[],o=new Map;i.length||n.push("\u6CA1\u6709\u5F85\u540C\u6B65\u7684\u7D22\u5F15\u53D8\u66F4");try{o=cl(i)}catch(u){n.push(u.message)}let a=this.controller.activeWorkspacePath();a||n.push("\u8BF7\u5148\u7ED1\u5B9A\u5DE5\u4F5C\u533A\uFF0C\u4EE5\u4FDD\u5B58\u540C\u6B65\u524D\u7684\u5907\u4EFD");let s=new Map,c=r.map(u=>{let f={id:u.id,path:u.path,source:u.source,file:"",fileBefore:null,edits:[],issues:[]};if(u.path)try{if(!a)throw new Error("\u5DE5\u4F5C\u533A\u5C1A\u672A\u7ED1\u5B9A\uFF0C\u65E0\u6CD5\u6838\u5BF9\u9879\u76EE\u811A\u672C\u6587\u4EF6");let p=xe(a,u.path);if(xh(p)){f.file=Re(a,u.path);let m=Ih(f.file);if(f.fileBefore=m.toString("utf8"),!m.equals(Buffer.from(f.fileBefore)))throw new Error("\u9879\u76EE\u811A\u672C\u4E0D\u662F\u6709\u6548 UTF-8\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9\u7F16\u7801");if(u.source.trim()&&f.fileBefore!==u.source)throw new Error("\u5B58\u6863\u6E90\u7801\u4E0E\u9879\u76EE\u6587\u4EF6\u4E0D\u540C\uFF0C\u8BF7\u4EA4\u7ED9 AI \u5408\u5E76\u540E\u540C\u6B65");if(u.source.trim()||(f.source=f.fileBefore),s.has(f.file))throw new Error("\u591A\u4E2A\u811A\u672C\u6307\u5411\u540C\u4E00\u4E2A\u9879\u76EE\u6587\u4EF6\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9");s.set(f.file,u.id)}}catch(p){f.issues.push({line:0,reason:p.message})}!f.source.trim()&&u.path&&!f.file&&f.issues.push({line:0,reason:"\u627E\u4E0D\u5230\u6B64\u811A\u672C\u7684\u6E90\u7801\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9\u6587\u4EF6\u8DEF\u5F84"});let h=ul(f.source,o);return f.source=h.source,f.edits=h.edits,f.issues.push(...h.issues),f}),l=$e(JSON.stringify({archive:t,files:c.map(u=>[u.file,u.fileBefore])}));return{archive:t,rows:c,issues:n,fingerprint:l}}preview(){let t=this.inspect();return t.id=Ql(),this.plan=t,{id:t.id,canApply:!t.issues.length&&t.rows.every(i=>!i.issues.length),issues:t.issues,changes:t.archive.controlGuidChanges.length,replacements:t.rows.reduce((i,r)=>i+r.edits.length,0),rows:t.rows.map(({id:i,path:r,file:n,edits:o,issues:a})=>({id:i,path:r,file:n,edits:o,issues:a}))}}apply({planId:t,expectedRevision:i}){let r=this.plan;if(!r||r.id!==t)throw new Error("\u8BF7\u5148\u9884\u89C8 Lua \u7D22\u5F15\u540C\u6B65");if(i!==this.controller.get().version)throw new Error("revision conflict: \u8BF7\u91CD\u65B0\u9884\u89C8");if(this.inspect().fingerprint!==r.fingerprint)throw new Error("\u6E90\u7801\u3001\u6587\u4EF6\u6216\u7D22\u5F15\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u9884\u89C8");if(r.issues.length||r.rows.some(f=>f.issues.length))throw new Error("\u6E90\u7801\u6587\u4EF6\u6216\u7D22\u5F15\u6620\u5C04\u5B58\u5728\u51B2\u7A81\uFF0C\u8BF7\u4EA4\u7ED9 AI \u6838\u5BF9\uFF1B\u672C\u6B21\u6CA1\u6709\u4FEE\u6539\u811A\u672C");let o=Di(r.archive);for(let f of r.rows.filter(h=>h.edits.length))o.patch({op:"updateScript",id:f.id,source:f.source});o.patch({op:"acknowledgeControlGuidChanges",changeIds:r.archive.controlGuidChanges.map(f=>f.id)});let a=Buffer.from(JSON.stringify(o.archiveData())).toString("base64"),s=r.rows.filter(f=>f.edits.length&&f.file),c=this.controller.activeWorkspacePath(),l=s.length?xe(c,`.qxqy-guid-sync-backups/${r.id}`):"",u=[];try{for(let h of s){let p=Eh(l,`${h.id}.lua`);Kl(ql(p),{recursive:!0}),Go(p,h.fileBefore,{flag:"wx"})}let f=xe(c,`.qxqy-guid-sync-backups/${r.id}/before.save.json`);Kl(ql(f),{recursive:!0}),Go(f,JSON.stringify(r.archive),{flag:"wx"});for(let h of s)Jl(h.file,h.source),u.push(h);this.controller.studio.importData("json",a)}catch(f){let h=[];for(let p of u.reverse())try{Jl(p.file,p.fileBefore)}catch{h.push(p.file)}throw this.plan=null,new Error(`${f.message}${h.length?`\uFF1B\u56DE\u6EDA\u5931\u8D25\uFF0C\u8BF7\u4ECE ${l} \u6062\u590D\uFF1A${h.join("\u3001")}`:"\uFF1B\u5B58\u6863\u672A\u63D0\u4EA4\uFF0C\u5DF2\u5199\u5165\u7684\u9879\u76EE\u6587\u4EF6\u5DF2\u56DE\u6EDA"}`)}return this.plan=null,{...this.controller.get(),controlGuidSyncResult:{replacements:r.rows.reduce((f,h)=>f+h.edits.length,0),scripts:r.rows.filter(f=>f.edits.length).length,projectFiles:s.length,backupRoot:`.qxqy-guid-sync-backups/${r.id}`}}}};var Nh=Math.max(1e3,Number(process.env.QXQY_PLAY_TIMEOUT_MS)||8e3),Fh=8e3;function Zl(){let e=new Error("operation aborted");return e.name="AbortError",e}function Lo(e){if(e!=="manual"&&e!=="realtime")throw new Error("clockMode must be manual or realtime");return e}var oi=class{constructor(t="",{imageAssets:i=Hi(),clockMode:r="realtime"}={}){qe(),this.workspacePath=t?Ft(t):"",this.studio=Di(void 0,this.workspacePath?{workspacePath:this.workspacePath}:void 0),this.worker=null,this.pending=new Map,this.sequence=1,this.lock=Promise.resolve(),this.archivePath="",this.archiveStamp="",this.savedArchive="",this.scriptSync=new Wr(this),this.controlGuidSync=new Jr(this),this.imageAssets=i,this.defaultClockMode=Lo(r),this.playClockMode=this.defaultClockMode}async exclusive(t){let i=this.lock,r;this.lock=new Promise(n=>{r=n}),await i;try{return await t()}finally{r()}}get(){return{...this.studio.get(),storage:{path:this.archivePath}}}scriptSyncAction(t,i={}){if(t==="discover")return jl();if(t==="status")return{config:this.get().scriptSync,lastResult:this.scriptSync.lastResult};if(t==="configure"){if(!Number.isInteger(i.expectedRevision))throw new Error("expectedRevision is required");return this.patch({op:"setScriptSync",config:i.config,expectedRevision:i.expectedRevision})}if(t==="save"){if(!Number.isInteger(i.expectedRevision))throw new Error("expectedRevision is required");let r=i.path??this.archivePath;if(typeof r!="string"||!r.trim())throw new Error("script sync save requires a workspace-relative path for a new archive");return this.saveForScriptSync(r,i.expectedRevision)}if(t==="preview")return this.scriptSync.preview();if(t==="apply")return this.scriptSync.apply(i);throw new Error(`unknown script sync action: ${t}`)}assertSavedArchive(){if(!this.archivePath||this.savedArchive!==JSON.stringify(this.studio.archiveData()))throw new Error("\u8BF7\u5148\u4FDD\u5B58\u5F53\u524D\u5B8C\u6574\u5B58\u6863\uFF0C\u518D\u786E\u8BA4\u590D\u5236");let t=Re(this.activeWorkspacePath(),this.archivePath);if($e(Vo(t))!==this.archiveStamp)throw new Error("\u5B58\u6863\u6587\u4EF6\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u52A0\u8F7D\u5E76\u68C0\u67E5")}saveForScriptSync(t,i){if(i!==this.get().version)throw new Error("revision conflict: reload before saving");let r=xe(this.activeWorkspacePath(),t);if(_h(r)){let n=this.archivePath?xe(this.activeWorkspacePath(),this.archivePath):"";if(r!==n||$e(Vo(r))!==this.archiveStamp)throw new Error("File changed or already exists; load it again or save under a new path")}return this.saveArchive(t)}patch(t){return t?.op==="previewControlGuidSync"?{...this.get(),controlGuidSyncPreview:this.controlGuidSync.preview()}:t?.op==="syncControlGuidReferences"?this.controlGuidSync.apply(t):{...this.studio.patch(t),storage:{path:this.archivePath}}}listArchives(){return Hr(this.workspacePath)}loadArchive(t){let i=this.activeWorkspacePath();if(!i)throw new Error("workspace is not bound");let r=Re(i,t),n=Vo(r),o=this.studio.importData("json",n.toString("base64"),Rh(r));return this.archivePath=String(t).trim().replaceAll("\\","/"),this.archiveStamp=$e(n),this.savedArchive=JSON.stringify(this.studio.archiveData()),o}saveArchive(t=this.archivePath||"qxqy-simulator.save.json"){let i=String(t).trim(),r=this.activeWorkspacePath();if(!r)throw new Error("workspace is not bound");let n=xe(r,i);Th(Mh(n),{recursive:!0});let o=Buffer.from(JSON.stringify(this.studio.archiveData(),null,2)+`
|
|
118
|
+
`,"utf8");return Ph(n,o),this.archivePath=i.replaceAll("\\","/"),this.archiveStamp=$e(o),this.savedArchive=JSON.stringify(this.studio.archiveData()),{path:this.archivePath,bytes:o.length,revision:this.studio.get().version,name:this.studio.get().save?.name||""}}activeWorkspacePath(){let t=this.studio.get().workspace;return t?.bound&&t.path?String(t.path):this.workspacePath}createWorker(){let t=new Ah(new URL("./worker.js",import.meta.url),{type:"module",workerData:{localFont:qe()?.data??null}});return t.on("message",i=>{let r=this.pending.get(i?.id);r&&(this.pending.delete(i.id),i.ok?r.resolve(i.value):r.reject(new Error(i.error||"play worker failed")))}),t.on("error",i=>{this.worker===t&&(this.worker=null),this.rejectPending(i)}),t.on("exit",i=>{this.worker===t&&(this.worker=null),i!==0&&this.rejectPending(new Error(`play worker exited with code ${i}`))}),this.worker=t,t}rejectPending(t){for(let i of this.pending.values())i.reject(t);this.pending.clear()}async terminateWorker(t=new Error("play worker terminated")){let i=this.worker;this.worker=null,this.rejectPending(t),i&&await i.terminate().catch(()=>{})}request(t,i,r,n=Nh){let o=this.worker||this.createWorker(),a=this.sequence++;return new Promise((s,c)=>{let l=!1,u=(p,m)=>{l||(l=!0,clearTimeout(h),r?.removeEventListener("abort",f),p(m))},f=()=>{this.pending.delete(a),u(c,Zl()),this.terminateWorker(Zl())},h=setTimeout(()=>{this.pending.delete(a);let p=new Error(`play worker timed out after ${n}ms`);u(c,p),this.terminateWorker(p)},n);if(this.pending.set(a,{resolve:p=>u(s,p),reject:p=>u(c,p)}),r?.aborted)return f();r?.addEventListener("abort",f,{once:!0}),o.postMessage({id:a,action:t,args:i})})}async play(t,i={},r){if((t==="start"||t==="device")&&!i.language){let n=Gl();n&&(i={...i,language:n})}if(t==="start"){let n=Lo(i.clockMode??this.defaultClockMode);return await this.terminateWorker(),this.playClockMode=n,this.request("start",{archive:this.studio.archiveData(),workspacePath:this.activeWorkspacePath(),...i,clockMode:n},r)}if(t==="device"){let n=String(i.canvasId||"").trim();if(!K[n])throw new Error(`unknown canvas preset: ${n||"(empty)"} (available: ${Object.keys(K).join(", ")})`);let o=Lo(i.clockMode??this.playClockMode);return await this.terminateWorker(),this.playClockMode=o,this.request("start",{archive:this.studio.archiveData(),workspacePath:this.activeWorkspacePath(),...i,canvasId:n,clockMode:o},r)}if(t==="stop"){if(!this.worker)return{running:!1,tree:[],logs:[]};try{return await this.request("stop",i,r)}finally{await this.terminateWorker()}}if(!this.worker)throw new Error("play session has not started");return this.request(t,i,r)}async playScreenshot(t){if(!this.worker)throw new Error("play session has not started");let i=await this.request("get",{view:!0},t,Fh),r=await this.imageAssets.prepare(i.scene?.nodes,t),n=Pl(i.scene,i.canvasWidth,i.canvasHeight,r);return{data:n.data,canvasId:String(i.canvasId||""),frame:Number.isFinite(Number(i.frame))?Number(i.frame):0,time:Number.isFinite(Number(i.time))?Number(i.time):0,clockMode:i.clockMode,width:n.width,height:n.height,pixelWidth:n.pixelWidth,pixelHeight:n.pixelHeight,assetWarnings:r.warnings}}async uiScreenshot(t){let i=this.studio.get(),r=await this.imageAssets.prepare(i.boxes,t),n=Ml(i,r);return{data:n.data,page:n.page,width:n.width,height:n.height,pixelWidth:n.pixelWidth,pixelHeight:n.pixelHeight,assetWarnings:r.warnings}}async dispose(){await this.terminateWorker()}};var zh=new Set(["server-control-template","client-control-template"]),$h=new Set(["start","device","view","get","step","pointer","key","click","pause","resume","stop","serverGet","serverSet","serverSend","history","saveCase","runCase"]);function ec(e){return String(e||"").trim().replaceAll("\\","/")}function tc(e,t){let i=Oh(Re(e,t));return`${i.size}:${i.mtimeMs}`}function Dh(e){return{version:e.version,selectedId:e.selectedId,save:e.save,asset:e.asset,canvas:e.canvas,tree:e.tree,workspace:e.workspace,scriptCount:Array.isArray(e.scripts)?e.scripts.length:0}}function ic(e,t,i){let r=i==="stop"||t?.running===!1,n=Array.isArray(t?.logs)?t.logs.slice(-100):e.logs;return{running:!r,paused:r?!1:!!t?.paused,canvasId:String(t?.canvasId||e.canvasId||""),width:Number(t?.canvasWidth||e.width||0),height:Number(t?.canvasHeight||e.height||0),frame:Number(t?.frame||0),time:Number(t?.time||0),logs:n}}var Qr=class{constructor({workspace:t,initialPath:i="",watchIntervalMs:r=700,discoveryIntervalMs:n=5e3,imageAssets:o}={}){this.workspace=Ft(t),this.controller=new oi(this.workspace,{imageAssets:o}),this.initialPath=ec(i),this.watchIntervalMs=Math.max(100,Number(r)||700),this.activePath="",this.activeStamp="",this.lastLoadedAt="",this.lastError="",this.listeners=new Set,this.playState={running:!1,paused:!1,canvasId:"",width:0,height:0,frame:0,time:0,logs:[]},this.timer=null,this.refreshing=!1,this.discoveryIntervalMs=Math.max(100,Number(n)||5e3),this.archiveCache=null,this.archiveCacheTime=0,this.openGeneration=0,this.disposed=!1}async initialize(){let t=this.archives().archives,i=this.initialPath||t[0]?.path||"";if(i)try{await this.open(i,"startup")}catch{}return this.timer=setInterval(()=>{this.refreshFromDisk()},this.watchIntervalMs),this.state()}archives(t=!1){return(t||!this.archiveCache||Date.now()-this.archiveCacheTime>=this.discoveryIntervalMs)&&(this.archiveCache=Hr(this.workspace),this.archiveCacheTime=Date.now()),this.archiveCache}previewStatus(){let t=this.controller.get();return{service:"beyond-simulator-web",version:hi.version,workspace:this.workspace,activePath:this.activePath,lastLoadedAt:this.lastLoadedAt,lastError:this.lastError,revision:this.activePath?t.version:null,name:this.activePath&&t.save?.name||""}}state(){let t=this.archives();return{...this.previewStatus(),archives:t.archives,discovery:t.discovery,snapshot:Dh(this.controller.get()),play:this.playState}}recordError(t){let i=t?.message||String(t),r=i!==this.lastError;this.lastError=i,r&&this.emit({type:"error",error:i})}async open(t,i="manual",r=this.openGeneration){let n=ec(t);if(!n)throw new Error("path is required");return this.controller.exclusive(async()=>{if(this.disposed||i==="external-change"&&r!==this.openGeneration)return this.state();try{await this.controller.play("stop"),this.playState=ic(this.playState,{running:!1,logs:[]},"stop");let o=tc(this.workspace,n),a=this.controller.loadArchive(n);return this.activePath=n,this.activeStamp=o,this.initialPath="",this.openGeneration++,this.lastLoadedAt=new Date().toISOString(),this.lastError="",this.archiveCache=null,this.emit({type:"archive",reason:i,path:n,revision:a.version}),this.state()}catch(o){throw this.recordError(o),o}})}async refreshFromDisk(){if(this.refreshing||this.disposed)return!1;this.refreshing=!0;try{if(!this.activePath){let i=this.initialPath||this.archives().archives[0]?.path||"";return i?(await this.open(i,"external-change"),!0):!1}return tc(this.workspace,this.activePath)===this.activeStamp&&!this.lastError?!1:(await this.open(this.activePath,"external-change"),!0)}catch(t){return this.recordError(t),!1}finally{this.refreshing=!1}}async setView({assetType:t,canvasId:i}={}){if(t&&!zh.has(t))throw new Error(`unknown asset type: ${t}`);if(i&&!K[i])throw new Error(`unknown canvas preset: ${i}`);return await this.controller.exclusive(async()=>{if(t&&this.controller.patch({op:"selectAsset",assetType:t}),i){let r=this.controller.get().version;this.controller.patch({op:"setCanvas",canvasId:i,expectedRevision:r})}}),this.emit({type:"view"}),this.state()}async play(t,i={},r){if(!$h.has(t))throw new Error(`unknown play action: ${t||"(empty)"}`);let n=await this.controller.exclusive(()=>this.controller.play(t,i,r));return this.playState=ic(this.playState,n,t),this.emit({type:"play",action:t,frame:this.playState.frame}),n}async currentState(t){return this.state()}editorScreenshot(t){return this.controller.uiScreenshot(t)}playScreenshot(t){return this.controller.exclusive(()=>this.controller.playScreenshot(t))}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}emit(t){for(let i of this.listeners)i(t)}async dispose(){this.disposed=!0,this.timer&&clearInterval(this.timer),this.timer=null,this.listeners.clear(),await this.controller.exclusive(()=>this.controller.dispose())}};import{existsSync as Gh,readFileSync as Vh}from"node:fs";import{createHash as Lh}from"node:crypto";var Bh=new Set(["get","patch","import","export","archives","load-archive","save","play","script-sync","script-sync-apply","image-refresh"]),Bo=e=>Lh("sha256").update(Vh(e)).digest("hex"),Zr=class{constructor(t,{initialPath:i="",maxSessions:r=8,imageAssets:n}={}){this.workspace=t,this.initialPath=i,this.maxSessions=r,this.sessions=new Map,this.imageAssets=n}getSession(t){if(typeof t!="string"||!/^[a-zA-Z0-9_-]{1,100}$/.test(t))throw new Error("Invalid editor sessionId");if(!this.sessions.has(t)){if(this.sessions.size>=this.maxSessions)throw new Error("Editor session limit reached; save your work and restart the server");let r={controller:new oi(this.workspace,{imageAssets:this.imageAssets}),path:"",fileStamp:""};this.initialPath&&this.load(r,this.initialPath),this.sessions.set(t,r)}return this.sessions.get(t)}snapshot(t){return{...t.controller.get(),storage:{path:t.path}}}load(t,i){let r=Re(this.workspace,i),n=t.controller.loadArchive(i);return t.path=String(i).replaceAll("\\","/"),t.fileStamp=Bo(r),{...n,snapshot:this.snapshot(t)}}async call(t,i,r){if(!Bh.has(t))throw new Error("Unknown editor action");let n=this.getSession(i.sessionId),o=n.controller;return o.exclusive(async()=>{if(t==="get")return this.snapshot(n);if(t==="image-refresh")return await o.imageAssets.refresh(i.imageId,{imageSource:i.imageSource}),{imageId:i.imageId,imageSource:i.imageSource||"StaticReference",refreshed:!0};if(t==="script-sync")return o.scriptSyncAction(i.action,i.args||{});if(t==="script-sync-apply")return o.scriptSync.apply(i);if(t==="archives")return o.listArchives();if(t==="patch"){if(!Number.isInteger(i.op?.expectedRevision))throw new Error("expectedRevision is required");return{...o.patch(i.op),storage:{path:n.path}}}if(t==="export")return o.studio.exportData(i.format,i.assetType);if(t==="play")return o.play(i.action,i.args||{},r);if(t==="load-archive"||t==="import"){if(await o.play("stop"),t==="load-archive")return this.load(n,i.path);let a=o.studio.importData(i.format,i.data,i.filename);return n.path="",n.fileStamp="",{...a,snapshot:this.snapshot(n)}}if(t==="save"){if(i.expectedRevision!==o.get().version)throw new Error("revision conflict: reload before saving");let a=xe(this.workspace,i.path);if(Gh(a)){let c=n.path?xe(this.workspace,n.path):"";if(a!==c||Bo(a)!==n.fileStamp)throw new Error("File changed or already exists; load it again or save under a new path")}let s=o.saveArchive(i.path);return n.path=s.path,n.fileStamp=Bo(a),s}})}async dispose(){await Promise.all([...this.sessions.values()].map(t=>t.controller.exclusive(()=>t.controller.dispose()))),this.sessions.clear()}};var rc=32*1024*1024;function Hh(e){if(e.length<8||e.length>rc)throw new Error("Invalid MP3 size");let t=0,i=0;if(e.subarray(0,3).toString()==="ID3"){if(e.length<10||e[3]<2||e[3]>4||e.subarray(6,10).some(r=>r>127))throw new Error("Invalid MP3 ID3 header");t=10+(e[6]<<21|e[7]<<14|e[8]<<7|e[9])+(e[5]&16&&e[3]===4?10:0)}for(;t+4<=e.length;){if(e.length-t===128&&e.subarray(t,t+3).toString()==="TAG"){t=e.length;break}let r=e[t+1],n=e[t+2],o=r>>3&3,a=n>>2&3,s=n>>4;if(e[t]!==255||(r&224)!==224||(r&6)!==2||o===1||a===3||s===0||s===15)throw new Error("Invalid MP3 frame");let c=(o===3?[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320]:[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160])[s],l=[44100,48e3,32e3][a]/(o===3?1:o===2?2:4),u=Math.floor((o===3?144e3:72e3)*c/l)+(n>>1&1);t+=u,i++}if(i<2||t!==e.length)throw new Error("Truncated or invalid MP3")}var Ho=class extends ht{constructor({cacheDir:t=process.env.QXQY_AUDIO_CACHE_DIR||Kr("audio"),fetch:i=globalThis.fetch,source:r=Ls}={}){super({cacheDir:t,fetch:i,source:r,version:io,extension:"mp3",accepts:n=>Tr(n)!==null,timeout:2e4})}decode(t){return Hh(t),{}}produce(t,i,r){return this.download(`audio/${t}.mp3`,rc,i,r)}},Yh;function Yo(){return Yh||=new Ho}async function nc(e,t,i=Yo()){let r=new URL(e.url,"http://localhost");if(r.pathname!==_r.slice(0,-1)&&!r.pathname.startsWith(_r))return!1;try{if(!["GET","HEAD"].includes(e.method))throw Object.assign(new Error("GET or HEAD required"),{status:405});let n=r.pathname.match(new RegExp(`^${_r}${io}/([0-9]+)\\.mp3$`));if(!n)throw Object.assign(new Error("Unknown audio resource"),{status:404});let o=await i.get(Number(n[1])),a=o.data.length,s={"content-type":"audio/mpeg","cache-control":"private, max-age=43200",etag:o.etag,"accept-ranges":"bytes","x-content-type-options":"nosniff"};if(e.headers["if-none-match"]===o.etag)return t.writeHead(304,s),t.end(),!0;let c=e.headers.range,l=0,u=a-1,f=200;if(c&&(!e.headers["if-range"]||e.headers["if-range"]===o.etag)){let h=c.match(/^bytes=(\d*)-(\d*)$/);if(!h||!h[1]&&!h[2])throw Object.assign(new Error("Invalid byte range"),{status:416,size:a});if(h[1]?(l=Number(h[1]),u=h[2]?Math.min(a-1,Number(h[2])):u):l=Math.max(0,a-Number(h[2])),!Number.isSafeInteger(l)||!Number.isSafeInteger(u)||l>=a||u<l)throw Object.assign(new Error("Unsatisfiable byte range"),{status:416,size:a});f=206,s["content-range"]=`bytes ${l}-${u}/${a}`}t.writeHead(f,{...s,"content-length":u-l+1}),t.end(e.method==="HEAD"?void 0:o.data.subarray(l,u+1))}catch(n){t.writeHead(n.status||502,{"content-type":"text/plain; charset=utf-8","cache-control":"no-store",...n.status===416?{"content-range":`bytes */${n.size}`}:{}}),t.end(e.method==="HEAD"?void 0:n.message)}return!0}var jh="https://github.com/1475505/miliastra-beyond-simulator",Uh="https://api.github.com/repos/1475505/miliastra-beyond-simulator/releases?per_page=100",Xh=e=>/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(e),ac=(e,t)=>{let i=e.split(/[.-]/).slice(0,3).map(Number),r=t.split(/[.-]/).slice(0,3).map(Number);for(let n=0;n<3;n++)if(i[n]!==r[n])return Math.sign(i[n]-r[n]);return t.includes("-")&&!e.includes("-")?1:e.includes("-")&&!t.includes("-")?-1:0};function oc(e,t){try{let i=new URL(e);return i.protocol==="https:"&&i.origin==="https://github.com"&&i.pathname.startsWith(`/1475505/miliastra-beyond-simulator/releases/${t}/`)?i.href:null}catch{return null}}function Wh(e,t){if(!Array.isArray(e))throw new Error("Invalid release response");let i=[];for(let r of e)if(!(r.draft||r.prerelease||!Array.isArray(r.assets)))for(let n of r.assets){if(typeof n.name!="string"||!n.name.startsWith(t+"-")||!n.name.endsWith(".tgz"))continue;let o=n.name.slice(t.length+1,-4),a=oc(r.html_url,"tag"),s=oc(n.browser_download_url,"download");!Xh(o)||!a||!s||i.push({version:o,url:a,downloadUrl:s,publishedAt:r.published_at||null})}return i.sort((r,n)=>ac(n.version,r.version))[0]||null}function sc({packageName:e,currentVersion:t,fetch:i=globalThis.fetch,now:r=Date.now}){let n=null,o=null;return async function(){return n&&r()-n.checkedAt<5*6e4?n:o||(o=(async()=>{let s=await i(Uh,{headers:{accept:"application/vnd.github+json","user-agent":"beyond-simulator-update-check","x-github-api-version":"2022-11-28"},signal:AbortSignal.timeout(8e3)});if(!s.ok)throw new Error(`Update check failed (HTTP ${s.status})`);let c=Wh(await s.json(),e),l=c?ac(c.version,t):0;return n={packageName:e,currentVersion:t,latestVersion:c?.version||null,status:c?l>0?"available":l<0?"ahead":"current":"unavailable",url:c?.url||`${jh}/releases`,downloadUrl:c?.downloadUrl||null,checkedAt:r(),publishedAt:c?.publishedAt||null},n})().finally(()=>{o=null}),o)}}import{execFile as Kh}from"node:child_process";import{win32 as qh}from"node:path";import{promisify as Jh}from"node:util";var Qh=Jh(Kh),lc=e=>["localhost","127.0.0.1","::1","[::1]","::ffff:127.0.0.1"].includes(e);function jo(e){if(typeof e!="string")return"";let t=e.trim().replace(/^\uFEFF/,"").split(/[.@]/)[0].replaceAll("_","-");if(!t||/^(?:C|POSIX)$/i.test(t)||t.length>80)return"";try{return Intl.getCanonicalLocales(t)[0]||""}catch{return""}}function cc(e){try{return lc(e.socket?.remoteAddress)&&lc(new URL("http://"+e.headers.host).hostname)&&!e.headers.forwarded&&!e.headers["x-forwarded-for"]&&!e.headers["x-forwarded-host"]&&!e.headers.via&&e.headers["sec-fetch-site"]!=="cross-site"&&(!e.headers.origin||new URL(e.headers.origin).host===e.headers.host)}catch{return!1}}function Zh({platform:e=process.platform,env:t=process.env,execFile:i=Qh}={}){let r;return()=>r||=(async()=>{try{let n="",o="browser",a={windowsHide:!0,timeout:2500,maxBuffer:4096,encoding:"utf8"};if(e==="win32"){let s=qh.join(t.SystemRoot||"C:\\Windows","System32","WindowsPowerShell","v1.0","powershell.exe"),{stdout:c}=await i(s,["-NoLogo","-NoProfile","-NonInteractive","-Command","[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;(Get-UICulture).Name"],a);n=jo(c),o="windows-ui"}else if(e==="darwin"){let{stdout:s}=await i("/usr/bin/defaults",["read","-g","AppleLanguages"],a);n=(s.match(/\b[a-z]{2,3}(?:[-_][a-zA-Z0-9]{2,8})*\b/g)||[]).map(jo).find(Boolean)||"",o="macos-ui"}else n=[t.LANGUAGE?.split(":")[0],t.LC_ALL,t.LC_MESSAGES,t.LANG].map(jo).find(Boolean)||"",o="host-locale";return{language:n,source:n?o:"browser"}}catch{return{language:"",source:"browser"}}})()}var uc=Zh();var ap=pc(new URL(".",import.meta.url)),sp=hc(ap,"public"),dc=new Map([["/","index.html"],["/index.html","index.html"],["/app.js","app.js"],["/play-renderer.js","play-renderer.js"],["/styles.css","styles.css"],["/editor","editor.html"],["/editor/","editor.html"],["/editor.js","editor.js"],["/editor.css","editor.css"],["/editor/play","play.html"],["/editor/play.js","play.js"],["/editor/play.css","play.css"],["/editor/play-renderer.js","play-renderer.js"]]),lp={".html":"text/html; charset=utf-8",".js":"text/javascript; charset=utf-8",".css":"text/css; charset=utf-8"};function cp(e=process.argv.slice(2)){let t=(i,r="")=>{let n=e.indexOf(i);return n>=0&&e[n+1]?e[n+1]:r};return{workspace:t("--workspace",process.env.QXQY_WORKSPACE||process.cwd()),initialPath:t("--file"),host:t("--host","127.0.0.1"),port:Number(t("--port","4173")),open:e.includes("--open")}}function tn(e,t="'none'"){return{"cache-control":"no-store","content-type":e,"content-security-policy":`default-src 'self'; img-src 'self' data:; connect-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'none'; frame-ancestors ${t}`,"x-content-type-options":"nosniff"}}function Ae(e,t,i){e.writeHead(t,tn("application/json; charset=utf-8")),e.end(JSON.stringify(i))}function up(e,t){e.writeHead(200,{...tn("image/png"),"content-length":t.data.length,"x-qxqy-width":String(t.width||0),"x-qxqy-height":String(t.height||0)}),e.end(t.data)}async function en(e,t=1024*1024){let i=[],r=0;for await(let n of e){if(r+=n.length,r>t)throw new Error("request body is too large");i.push(n)}return i.length?JSON.parse(Buffer.concat(i).toString("utf8")):{}}function fp(e){let t=process.platform==="win32"?"cmd.exe":process.platform==="darwin"?"open":"xdg-open",i=process.platform==="win32"?["/c","start","",e]:[e];ep(t,i,{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}async function dp(e={}){e={...e,imageAssets:e.imageAssets||Hi(),audioAssets:e.audioAssets||Yo()};let t=e.host||"127.0.0.1",i=e.password??process.env.QXQY_WEB_PASSWORD??"",r=["127.0.0.1","localhost","::1"].includes(t);if(qe()&&!r)throw new Error("QXQY_FONT_PATH requires a loopback-only Web host");if(!r&&!i)throw new Error("QXQY_WEB_PASSWORD is required when listening outside loopback");let n=y=>np("sha256").update(y).digest(),o=n(i),a=new Qr(e);await a.initialize();let s=new Zr(a.workspace,e),c=e.checkUpdates||sc({packageName:hi.name,currentVersion:hi.version}),l=e.systemLanguage||uc,u=new Set,f=a.subscribe(y=>{let v=`event: state
|
|
119
|
+
data: ${JSON.stringify(y)}
|
|
117
120
|
|
|
118
|
-
`;for(let
|
|
121
|
+
`;for(let _ of u)_.write(v)}),h=tp(async(y,v)=>{let _=new URL(y.url||"/","http://localhost"),P=new AbortController;y.once("aborted",()=>P.abort());try{if(y.method==="GET"&&_.pathname==="/health"){Ae(v,200,{status:"ok"});return}if(i){let M=String(y.headers.authorization||""),O=M.startsWith("Basic ")?Buffer.from(M.slice(6),"base64").toString("utf8"):"";if(!(O.startsWith("simulator:")&&op(n(O.slice(10)),o))){v.setHeader("www-authenticate",'Basic realm="QXQY Simulator", charset="UTF-8"'),Ae(v,401,{ok:!1,error:"Authentication required"});return}}if(!i&&r){let M=new URL(`http://${y.headers.host}`).hostname;if(!["127.0.0.1","localhost","[::1]"].includes(M)){Ae(v,403,{ok:!1,error:"Local Host required"});return}}if(y.method==="POST"){if(!/^application\/json(?:;|$)/i.test(y.headers["content-type"]||"")){Ae(v,415,{ok:!1,error:"application/json required"});return}if(y.headers.origin&&new URL(y.headers.origin).host!==y.headers.host){Ae(v,403,{ok:!1,error:"Cross-origin requests are not allowed"});return}}if(await Wl(y,v,e.imageAssets)||await nc(y,v,e.audioAssets)||await ka(y,v,{settingsEnabled:r}))return;if(y.method==="GET"&&dc.has(_.pathname)){let M=dc.get(_.pathname),O=ip(hc(sp,M));v.writeHead(200,tn(lp[rp(M)]||"application/octet-stream",_.pathname==="/editor/play"?"'self'":"'none'")),v.end(O);return}if(y.method==="GET"&&_.pathname==="/api/state"){_.searchParams.get("refresh")==="1"&&a.archives(!0),Ae(v,200,{ok:!0,value:await a.currentState(P.signal)});return}if(y.method==="GET"&&_.pathname==="/api/preview"){Ae(v,200,{ok:!0,value:a.previewStatus()});return}if(y.method==="GET"&&_.pathname==="/api/editor.png"){up(v,await a.editorScreenshot(P.signal));return}if(y.method==="GET"&&_.pathname==="/api/events"){v.writeHead(200,{...tn("text/event-stream; charset=utf-8"),connection:"keep-alive"}),v.write(`: connected
|
|
119
122
|
|
|
120
|
-
`),
|
|
121
|
-
`),e.open&&
|
|
122
|
-
`),process.exitCode=1});export{
|
|
123
|
+
`),u.add(v),y.once("close",()=>u.delete(v));return}if(y.method==="POST"&&_.pathname==="/api/open"){let M=await en(y);if(M.expectedWorkspace!==void 0){let O=Ft(M.expectedWorkspace);if(!(process.platform==="win32"?O.toLowerCase()===a.workspace.toLowerCase():O===a.workspace))throw new Error(`Web workspace mismatch: ${a.workspace}`)}Ae(v,200,{ok:!0,value:await a.open(M.path,M.expectedWorkspace===void 0?"manual":"mcp-preview")});return}if(y.method==="POST"&&_.pathname.startsWith("/editor/api/")){let M=await en(y,8388608),O=_.pathname.slice(12),L=O==="locale"?cc(y)?await l():{language:"",source:"browser"}:O==="updates"?await c():await s.call(O,M,P.signal);Ae(v,200,{ok:!0,value:L});return}if(y.method==="POST"&&_.pathname==="/api/view"){Ae(v,200,{ok:!0,value:await a.setView(await en(y))});return}if(y.method==="POST"&&_.pathname==="/api/play"){let M=await en(y);Ae(v,200,{ok:!0,value:await a.play(M.action,M.args||{},P.signal)});return}Ae(v,404,{ok:!1,error:"not found"})}catch(M){Ae(v,400,{ok:!1,error:M?.message||String(M)})}}),p=Number.isFinite(Number(e.port))?Number(e.port):4173;try{await new Promise((y,v)=>{h.once("error",v),h.listen(p,t,y)})}catch(y){throw f(),await a.dispose(),await s.dispose(),y}let m=h.address(),b=typeof m=="object"&&m?m.port:p;return{url:`http://${t.includes(":")?`[${t}]`:t}:${b}`,session:a,server:h,async close(){f();for(let y of u)y.end();u.clear(),await a.dispose(),await s.dispose(),await new Promise(y=>h.close(y))}}}async function hp(){let e=cp(),t=await dp(e);process.stdout.write(`QXQY Simulator Web: ${t.url}
|
|
124
|
+
`),e.open&&fp(t.url);let i=()=>{t.close().finally(()=>process.exit(0))};process.once("SIGINT",i),process.once("SIGTERM",i)}function pp(){if(!process.argv[1])return!1;try{return fc(process.argv[1])===fc(pc(import.meta.url))}catch{return!1}}pp()&&hp().catch(e=>{process.stderr.write(`${e?.stack||e}
|
|
125
|
+
`),process.exitCode=1});export{dp as createWebServer};
|