@dcl/wearable-preview 2.18.0 → 2.18.1-32056066069.commit-305ef5f
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/assets/{Preview-Bmw7FRt2.js → Preview-C4vnXpy8.js} +3 -3
- package/assets/UnityPreview-CYrCPYeG.js +1 -0
- package/{static-local/assets/babylon.inspector.bundle.max-BuzSGeQx.js → assets/babylon.inspector.bundle.max-DqH2ocBu.js} +1 -1
- package/{static-local/assets/emote-events-CkLiE800.js → assets/emote-events-BwE5QFPk.js} +2 -2
- package/assets/{index-P-JZb43g.js → index-OTP3rWc-.js} +3 -3
- package/index.html +3 -3
- package/package.json +3 -3
- package/static-local/assets/{Preview-BeSEaV5z.js → Preview-Cjmy81sq.js} +3 -3
- package/static-local/assets/UnityPreview-B8JTNsik.js +1 -0
- package/{assets/babylon.inspector.bundle.max-E1kyxnav.js → static-local/assets/babylon.inspector.bundle.max-ZCgptuOX.js} +1 -1
- package/{assets/emote-events-CaOElyGR.js → static-local/assets/emote-events-0b1-dLWa.js} +2 -2
- package/static-local/assets/{index-8xJwOJ-u.js → index-CMSPocnu.js} +2 -2
- package/static-local/index.html +1 -1
- package/static-local/package.json +1 -1
- package/static-local/unity/Build/aang-renderer.data.br +0 -0
- package/static-local/unity/Build/aang-renderer.loader.js +1 -1
- package/static-local/unity/Build/aang-renderer.symbols.json.br +0 -0
- package/static-local/unity/Build/aang-renderer.wasm.br +0 -0
- package/unity/Build/aang-renderer.data.br +0 -0
- package/unity/Build/aang-renderer.loader.js +1 -1
- package/unity/Build/aang-renderer.symbols.json.br +0 -0
- package/unity/Build/aang-renderer.wasm.br +0 -0
- package/assets/UnityPreview-CjGiQTss.js +0 -1
- package/static-local/assets/UnityPreview-CAbyAf8D.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as k,a as j,r as c,b as K,R as le,j as B}from"./index-P-JZb43g.js";import{m as de,i as X,d as l,L as ce,a as ue,b as re,g as Se,u as ne,s as me,f as Ee,c as ge,e as pe,h as ye,j as fe,k as $,l as G,n as we,o as he,p as Re,q as Pe,r as F,t as L,v as Te}from"./emote-events-CaOElyGR.js";var x=(e=>(e.SET_MODE="SetMode",e.SET_PROFILE="SetProfile",e.SET_EMOTE="SetEmote",e.SET_URNS="SetUrns",e.SET_BACKGROUND="SetBackground",e.SET_SKIN_COLOR="SetSkinColor",e.SET_HAIR_COLOR="SetHairColor",e.SET_EYE_COLOR="SetEyeColor",e.SET_BODY_SHAPE="SetBodyShape",e.SET_SHOW_ANIMATION_REFERENCE="SetShowAnimationReference",e.SET_PROJECTION="SetProjection",e.ADD_BASE64="AddBase64",e.CLEAR_BASE64="ClearBase64",e.SET_CONTRACT="SetContract",e.SET_ITEM_ID="SetItemID",e.SET_TOKEN_ID="SetTokenID",e.SET_DISABLE_LOADER="SetDisableLoader",e.SET_TYPE="SetType",e.RELOAD="Reload",e.CLEANUP="Cleanup",e.GET_ELEMENT_BOUNDS="GetElementBounds",e.SET_SPRING_BONES_PARAMS="SetSpringBonesParams",e))(x||{});const Ae={unityMode:"SetMode",profile:"SetProfile",emote:"SetEmote",urns:"SetUrns",background:"SetBackground",skin:"SetSkinColor",hair:"SetHairColor",eyes:"SetEyeColor",bodyShape:"SetBodyShape",showAnimationReference:"SetShowAnimationReference",projection:"SetProjection",base64s:"AddBase64",contractAddress:"SetContract",itemId:"SetItemID",tokenId:"SetTokenID",disableLoader:"SetDisableLoader",type:"SetType"},ve={unityMode:e=>String(e),profile:e=>String(e),emote:e=>String(e),urns:e=>Array.isArray(e)?e.join(","):String(e),background:e=>typeof e=="string"?e.replace("#",""):String(e),skin:e=>typeof e=="string"?e.replace("#",""):String(e),hair:e=>typeof e=="string"?e.replace("#",""):String(e),eyes:e=>typeof e=="string"?e.replace("#",""):String(e),bodyShape:e=>String(e),showAnimationReference:e=>String(e),projection:e=>String(e),contractAddress:e=>String(e),itemId:e=>String(e),tokenId:e=>String(e),disableLoader:e=>String(e),type:e=>String(e)},C=(e,t,n)=>{if(e)try{const r=String(t);Object.values(x).includes(r)||(console.warn(`Unknown Unity method: ${r}. Sending anyway...`),k(`Unknown Unity method: ${r}`,{method:r,value:n})),n!==void 0?e.SendMessage("JSBridge",r,n):e.SendMessage("JSBridge",r)}catch(r){console.error(`Failed to send Unity message ${t}:`,r),j(r,{method:String(t),value:n})}else console.warn(`Unity instance not ready, cannot send message: ${t}`),k(`Unity instance not ready, cannot send message: ${t}`,{method:String(t)})},Ie=(e,t,n)=>{if(!e){console.warn("Unity instance not available, cannot send override messages"),k("Unity instance not available, cannot send override messages");return}let r=0;t.base64s!==void 0&&n.base64s&&(C(e,"ClearBase64"),r++,Array.isArray(t.base64s)&&t.base64s.length>0&&t.base64s.forEach(a=>{C(e,"AddBase64",a),r++})),Object.entries(t).forEach(([a,s])=>{if(a!=="base64s"&&n[a]&&s!==void 0){const o=Ae[a];if(o){const i=ve[a],E=i?i(s):String(s);C(e,o,E),r++}else console.warn(`No Unity method mapping found for property: ${a}`),k(`No Unity method mapping found for property: ${a}`,{property:a,value:s})}}),r>0&&C(e,"Reload")};var be={VITE_BASE_URL:"https://cdn.decentraland.org/@dcl/wearable-preview/2.18.0"};const V=new Map,_=(e,t)=>{if(!t)return e;const n=e.replace(/\/$/,""),r=t.replace(/^\//,"");return`${n}/${r}`};function Oe(e){if(V.has(e))return V.get(e);const t=new Promise((n,r)=>{const a=document.querySelector(`script[src="${e}"]`);if(a){a.addEventListener("load",()=>n(a)),a.addEventListener("error",o=>r(o));return}const s=document.createElement("script");s.src=e,s.async=!0,s.onload=()=>n(s),s.onerror=o=>r(o),document.body.appendChild(s)});return V.set(e,t),t}const Le=async(e,t,n,r,a,s,o,i,E,m,S,g)=>{try{const u=be.VITE_BASE_URL||"";return await Oe(_(u,t)),await createUnityInstance(e,{dataUrl:_(u,n),frameworkUrl:_(u,r),codeUrl:_(u,a),streamingAssetsUrl:_(u,o),symbolUrl:_(u,s),companyName:i,productName:E,productVersion:m,matchWebGLToCanvasSize:S,arguments:g})}catch(u){throw console.error("❌ Failed to load Unity instance:",u),u}},_e="data:image/png;base64,";function Ne(e){return{getScreenshot:()=>new Promise(t=>{if(!e){t("");return}e.SendMessage("JSBridge","TakeScreenshot",""),window.addEventListener("message",function n(r){if(r.data.type==="unity-renderer"){const{type:a,payload:s}=r.data.payload;a==="screenshot"&&(window.removeEventListener("message",n),t(_e+s))}})}),getMetrics:()=>new Promise(t=>{if(!e){t({triangles:0,materials:0,textures:0,meshes:0,bodies:0,entities:0});return}e.SendMessage("JSBridge","GetMetrics",""),window.addEventListener("message",function n(r){if(r.data.type==="unity-renderer"){const{type:a,payload:s}=r.data.payload;a==="metrics"&&(window.removeEventListener("message",n),t(s))}})}),changeZoom:async t=>{e&&e.SendMessage("JSBridge","SetZoom",t.toString())},panCamera:async t=>{if(!e)return;const n=t.x??0,r=t.y??0,a=t.z??0;e.SendMessage("JSBridge","SetOffset",`${n},${r},${a}`)},changeCameraPosition:async t=>{if(!e)return;const n=t.alpha??0,r=t.beta??0,a=t.radius??0;e.SendMessage("JSBridge","SetCameraPosition",`${n},${r},${a}`)},setUsername:async t=>{e&&e.SendMessage("JSBridge","SetUsername",t)},cleanup:async()=>{e&&e.SendMessage("JSBridge","Cleanup","")}}}function Ce(e,t,n,r){const a=de();let s=0,o=0,i="stopped",E=null,m=0;const S=()=>{var d;return n?n.loop:!!((d=t==null?void 0:t.emoteDataADR74)!=null&&d.loop||r&&ce.includes(r))},g=()=>{u(),m=Date.now(),E=setInterval(()=>{if(i!=="playing")return;const d=Date.now(),p=(d-m)/1e3;if(m=d,o+=p,s>0&&o>=s)if(S())o=o%s,a.emit(l.PreviewEmoteEventType.ANIMATION_LOOP);else{o=s,u(),i="stopped",e.SendMessage("JSBridge","StopEmote",""),a.emit(l.PreviewEmoteEventType.ANIMATION_PLAYING,{length:o}),a.emit(l.PreviewEmoteEventType.ANIMATION_END);return}a.emit(l.PreviewEmoteEventType.ANIMATION_PLAYING,{length:o})},15)},u=()=>{E!==null&&(clearInterval(E),E=null)},y=(d,p,w)=>new Promise(b=>{if(!e){b(w);return}const A=v=>{if(v.data.type==="unity-renderer"){const{type:P,payload:T}=v.data.payload;P===p&&(window.removeEventListener("message",A),b(T))}};window.addEventListener("message",A),d()});return{getLength:async()=>await y(()=>e.SendMessage("JSBridge","GetEmoteLength",""),"emoteLength",0)??0,isPlaying:async()=>y(()=>e.SendMessage("JSBridge","IsEmotePlaying",""),"isEmotePlaying",!1),goTo:async d=>{e&&(o=d,e.SendMessage("JSBridge","GoToEmote",d.toString()),a.emit(l.PreviewEmoteEventType.ANIMATION_PLAYING,{length:d}))},play:async()=>{e&&(s<=0&&(s=await y(()=>e.SendMessage("JSBridge","GetEmoteLength",""),"emoteLength",0)),i==="stopped"&&(o=0),i="playing",e.SendMessage("JSBridge","PlayEmote",""),g(),a.emit(l.PreviewEmoteEventType.ANIMATION_PLAY))},pause:async()=>{e&&(i="paused",u(),e.SendMessage("JSBridge","PauseEmote",""),a.emit(l.PreviewEmoteEventType.ANIMATION_PAUSE))},stop:async()=>{e&&(i="stopped",o=0,u(),e.SendMessage("JSBridge","StopEmote",""),a.emit(l.PreviewEmoteEventType.ANIMATION_END))},enableSound:async()=>{e&&e.SendMessage("JSBridge","EnableSound","")},disableSound:async()=>{e&&e.SendMessage("JSBridge","DisableSound","")},hasSound:async()=>y(()=>e.SendMessage("JSBridge","HasSound",""),"hasSound",!1),isSocialEmote:async()=>X(t),getSocialEmoteAnimations:async()=>!t||!X(t)?null:[{title:"Start Animation",...t.emoteDataADR74.startAnimation},...t.emoteDataADR74.outcomes.map(d=>({title:d.title,loop:d.loop,audio:d.audio,...d.clips}))],getPlayingSocialEmoteAnimation:async()=>n??null,emote:t,events:a}}function Me(e){return{setSpringBonesParams:async(t,n)=>{e&&e.SendMessage("JSBridge",x.SET_SPRING_BONES_PARAMS,JSON.stringify({itemId:t,params:n}))}}}const De={dataUrl:"/unity/Build/aang-renderer.data.br",frameworkUrl:"/unity/Build/aang-renderer.framework.js.br",codeUrl:"/unity/Build/aang-renderer.wasm.br",symbolUrl:"/unity/Build/aang-renderer.symbols.json.br"};function Be(){return De}async function Ue(e,t){let n=null;try{const r=Be();if(n=await Le(e,"/unity/Build/aang-renderer.loader.js",r.dataUrl,r.frameworkUrl,r.codeUrl,r.symbolUrl,"/emotes","Decentraland","AangRenderer","2.2.2",!0,[]),!n)throw new Error("Failed to load Unity instance");const a=t!=null&&t.itemDefinition&&ue(t.itemDefinition)?t.itemDefinition:null,s=(t==null?void 0:t.socialEmote)||void 0,o=(t==null?void 0:t.emote)||null,i=Ne(n),E=Ce(n,a,s,o),m=Me(n);if(t!=null&&t.itemDefinition&&t.bodyShape&&re(t.itemDefinition)){const S=Se(t.itemDefinition,t.bodyShape);S&&m.setSpringBonesParams(t.itemDefinition.id,S)}return{scene:i,emote:E,physics:m,unity:n}}catch(r){if(console.error("Unity render failed:",r),n!=null&&n.Quit)try{n.Quit()}catch(a){console.error("Error quitting Unity instance:",a),j(a,{phase:"unityQuit"})}throw r}}const ke=()=>Math.floor(Math.random()*159)+1,ae=()=>`default${ke()}`,je=e=>e===l.PreviewType.AVATAR||e===l.PreviewType.WEARABLE?e:null,xe=(e,t)=>{var n,r,a,s,o,i;return{eyes:$(t.eyes||((r=(n=e==null?void 0:e.avatar)==null?void 0:n.eyes)==null?void 0:r.color)&&G(e.avatar.eyes.color)||"#000000"),hair:$(t.hair||((s=(a=e==null?void 0:e.avatar)==null?void 0:a.hair)==null?void 0:s.color)&&G(e.avatar.hair.color)||"#000000"),skin:$(t.skin||((i=(o=e==null?void 0:e.avatar)==null?void 0:o.skin)==null?void 0:i.color)&&G(e.avatar.skin.color)||"#cc9b76")}},N=e=>e||"",Z=e=>e||[],U=e=>e.replace("#","");function ee(e){const t=new URL(window.location.href);Object.entries(e).forEach(([n,r])=>{t.searchParams.delete(n),Array.isArray(r)?r.forEach(a=>{a!==""&&t.searchParams.append(n,a)}):r!==""&&t.searchParams.set(n,r)}),window.history.replaceState({},"",t.toString())}function Je(){const{options:e,overrideSources:t}=ne(),[n,r]=c.useState(null),[a,s]=c.useState(!0),[o,i]=c.useState(null),E=c.useRef(null),m=c.useRef(e),S=c.useRef(!0);return c.useEffect(()=>{const g=JSON.stringify(e),u=JSON.stringify(m.current);if(!S.current&&g===u)return;S.current=!1,m.current=e,(async()=>{var d,p;try{s(!0),i(null);const w=e.peerUrl||K.get("PEER_URL"),b=e.marketplaceServerUrl||e.nftServerUrl||K.get("MARKETPLACE_SERVER_URL"),A=je(e.type);let v=A||l.PreviewType.WEARABLE,P={color:e.background||"#4b4852",transparent:e.disableBackground===!0};const T=me(e.profile);let f=T==null?void 0:T.value;f==="default"&&(f=ae());const h=f&&T?T.type==="address"?await Ee(f,w):await ge(f,w):null,I=e.bodyShape||((d=h==null?void 0:h.avatar)==null?void 0:d.bodyShape)||l.BodyShape.MALE;let R=null;if(e.contractAddress&&(R=await pe({contractAddress:e.contractAddress,tokenId:e.tokenId,itemId:e.itemId,peerUrl:w,marketplaceServerUrl:b}),R&&re(R))){P={...P,image:R.thumbnail};const D=ye(R);fe(D)&&v!==l.PreviewType.AVATAR&&(v=l.PreviewType.TEXTURE)}const{eyes:H,hair:Y,skin:Q}=xe(h,{eyes:e.eyes,hair:e.hair,skin:e.skin}),M=e.unityMode||null,se=e.camera&&Object.values(l.PreviewCamera).includes(e.camera)?e.camera:l.PreviewCamera.INTERACTIVE,q=e.projection&&Object.values(l.PreviewProjection).includes(e.projection)?e.projection:l.PreviewProjection.PERSPECTIVE,O=e.disableDefaultEmotes?null:e.emote&&Object.values(l.PreviewEmote).includes(e.emote)?e.emote:l.PreviewEmote.IDLE,J={background:P,bodyShape:I,mode:M,projection:q,type:v,base64:((p=e.base64s)==null?void 0:p[0])||null,contract:e.contractAddress||null,disableLoader:e.disableLoader||!1,emote:(O==null?void 0:O.toString())||null,eyeColor:H.replace("#",""),hairColor:Y.replace("#",""),item:e.itemId||null,profile:f||null,skinColor:Q.replace("#",""),token:e.tokenId||null,urn:e.urns||null,showAnimationReference:null,itemDefinition:R,socialEmote:e.socialEmote||null},oe=JSON.stringify(J),ie=JSON.stringify(E.current);if(oe!==ie){if(E.current=J,Object.keys(t).length===0){const D=Z(e.urns),W=Z(e.base64s);if(M===l.PreviewUnityMode.CONFIG){const z={mode:N(M||"")};ee(z)}else{const z={background:P.transparent?"":U(P.color),disableLoader:e.disableLoader?"true":"",profile:N(f||""),bodyShape:N(I||""),eyeColor:U(H||""),hairColor:U(Y||""),skinColor:U(Q||""),mode:N(M||""),camera:se,projection:q,emote:N((O==null?void 0:O.toString())||""),type:N(A),urn:D.length>0?D:[""],base64:W.length>0?W:[""]};ee(z)}}r(J)}s(!1)}catch(w){console.error("[useUnityConfig] Failed to load config:",w),i(w instanceof Error?w.message:"Failed to load config"),s(!1)}})()},[e,t]),[n,a,o]}const ze="unity-renderer",$e="unity-canvas",te=1,Ge="Failed to load Unity";var Fe=(e=>(e.LOADED="loaded",e.ERROR="error",e.SCREENSHOT="screenshot",e.CUSTOMIZATION_DONE="customization-done",e.CUSTOMIZATION_STEP="avatar-customization-step",e.ELEMENT_BOUNDS="element-bounds",e))(Fe||{});const Ve="get_element_bounds",He="element_bounds_response",Ye=(e,t,n,r)=>{const[a,s]=c.useState({isLoaded:!1,isInitialized:!1,error:null}),o=c.useRef(null),i=c.useCallback(m=>{if(m.data.type===ze){const{type:S,payload:g}=m.data.payload;S==="loaded"&&(g===!0||g==="true")?(s(u=>({...u,isLoaded:!0,isInitialized:!0})),l.sendMessage(L(),l.PreviewMessageType.LOAD,{renderer:l.PreviewRenderer.UNITY}),t.current&&t.current.emote.play()):S==="customization-done"?l.sendMessage(L(),l.PreviewMessageType.CONTROLLER_RESPONSE,{id:"customization-done",ok:!0,result:JSON.parse(m.data.payload.payload)}):S==="avatar-customization-step"?l.sendMessage(L(),l.PreviewMessageType.CONTROLLER_RESPONSE,{id:"avatar-customization-step",ok:!0,result:{step:m.data.payload.payload}}):S==="element-bounds"?l.sendMessage(L(),He,g):S==="error"&&(j(new Error(g),{component:"UnityPreview",phase:"unityMessage"}),s(u=>({...u,error:g})),l.sendMessage(L(),l.PreviewMessageType.ERROR,{message:"Error loading the wearable. Please try again."}))}},[]),E=c.useCallback(async m=>{if(!(!e.canvas.current||e.isInitializing.current||e.unityInstance.current)){e.isInitializing.current=!0,s(S=>({...S,isLoaded:!1,error:null}));try{const{unity:S,...g}=await Ue(e.canvas.current,m);e.unityInstance.current=S,t.current=g,o.current&&o.current(),o.current=Te(t.current),s(u=>({...u,isInitialized:!0}))}catch(S){const g=S instanceof Error?S.message:Ge;console.error("Unity init failed:",S),j(S,{component:"UnityPreview",phase:"initializeUnity"}),s(u=>({...u,error:g})),l.sendMessage(L(),l.PreviewMessageType.ERROR,{message:g})}finally{e.isInitializing.current=!1}}},[e,t]);return c.useEffect(()=>{a.isInitialized||r||!n||E(n)},[n,r,a.isInitialized,E]),c.useEffect(()=>()=>{o.current&&o.current()},[]),c.useEffect(()=>{if(n)return window.addEventListener("message",i,!1),()=>{window.removeEventListener("message",i,!1)}},[n,i]),a},Qe=e=>{const[t,n]=c.useState({pixelRatio:window.devicePixelRatio||te,is3D:!0,backgroundImage:""});return c.useEffect(()=>{const r=()=>{n(s=>({...s,pixelRatio:window.devicePixelRatio||te}))},a=window.matchMedia(`(resolution: ${t.pixelRatio}dppx)`);return a.addEventListener("change",r),()=>{a.removeEventListener("change",r)}},[t.pixelRatio]),c.useEffect(()=>{e&&n(r=>({...r,backgroundImage:e.background.image||"",is3D:e.type!==l.PreviewType.TEXTURE}))},[e]),t},qe=(e,t,n,r,a)=>{const s=c.useMemo(()=>{const o={};for(const i of Object.keys(a))a[i]&&r[i]!==void 0&&(o[i]=r[i]);return o},[a,r]);c.useEffect(()=>{if(!(!n.isInitialized||!n.isLoaded||!e.current)){if(s.profile==="default"){const o=t.current.profile;s.profile=o!=null&&o.match(/^default\d+$/)?o:ae()}Object.keys(s).length>0&&(Ie(e.current,s,a),t.current=s)}},[n.isInitialized,n.isLoaded,s,a,e,t])},We=()=>{const{width:e=window.innerWidth,height:t=window.innerHeight}=we(),n=c.useRef(null),r=c.useRef(null),a=c.useRef(!1),s=c.useRef({}),o=he(),[i,E,m]=Je(),{options:S,overrideSources:g}=ne(),u=c.useMemo(()=>({canvas:n,unityInstance:r,isInitializing:a,lastSentOverrides:s}),[]);Re(f=>{var h,I;if(((h=f.data)==null?void 0:h.type)===Ve&&r.current){const R=(I=f.data.payload)==null?void 0:I.elementName;R&&C(r.current,x.GET_ELEMENT_BOUNDS,R)}});const y=Ye(u,o,i,E),d=Qe(i);qe(u.unityInstance,u.lastSentOverrides,y,S,g),Pe();const p=c.useMemo(()=>{const f=y.error||m,h=!y.isLoaded&&!f,I=!!d.backgroundImage&&!d.is3D&&!h,R=d.is3D&&!h;return{error:f,isLoading:h,showImage:I,showCanvas:R}},[y.error,y.isLoaded,m,d.backgroundImage,d.is3D]),w=c.useMemo(()=>({opacity:1,backgroundColor:!(i!=null&&i.background.transparent)&&(i==null?void 0:i.type)===l.PreviewType.TEXTURE?i.background.color:void 0}),[i]),b=c.useMemo(()=>({width:`${e}px`,height:`${t}px`}),[e,t]),A=c.useMemo(()=>({width:Math.round(e*d.pixelRatio),height:Math.round(t*d.pixelRatio)}),[e,t,d.pixelRatio]),v=c.useMemo(()=>F("Preview",{"is-loading":p.isLoading,"is-loaded":y.isLoaded,"is-3d":d.is3D,"has-error":!!p.error}),[p.isLoading,y.isLoaded,d.is3D,p.error]),P=c.useMemo(()=>F("thumbnail",{"is-visible":p.showImage}),[p.showImage]),T=c.useMemo(()=>F({"is-visible":p.showCanvas}),[p.showCanvas]);return B.jsxs("div",{className:v,style:w,children:[B.jsx("img",{src:d.backgroundImage,className:P,alt:"preview"}),B.jsx("canvas",{ref:u.canvas,id:$e,className:T,width:A.width,height:A.height,style:b}),p.error&&B.jsx("div",{className:"error",children:p.error})]})},Ze=le.memo(We);export{Fe as UnityMessageType,Ze as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as k,a as j,r as c,b as K,R as le,j as B}from"./index-8xJwOJ-u.js";import{m as de,i as X,d as l,L as ce,a as ue,b as re,g as Se,u as ne,s as me,f as Ee,c as ge,e as ye,h as pe,j as fe,k as $,l as G,n as we,o as he,p as Re,q as Te,r as F,t as L,v as Pe}from"./emote-events-CkLiE800.js";var x=(e=>(e.SET_MODE="SetMode",e.SET_PROFILE="SetProfile",e.SET_EMOTE="SetEmote",e.SET_URNS="SetUrns",e.SET_BACKGROUND="SetBackground",e.SET_SKIN_COLOR="SetSkinColor",e.SET_HAIR_COLOR="SetHairColor",e.SET_EYE_COLOR="SetEyeColor",e.SET_BODY_SHAPE="SetBodyShape",e.SET_SHOW_ANIMATION_REFERENCE="SetShowAnimationReference",e.SET_PROJECTION="SetProjection",e.ADD_BASE64="AddBase64",e.CLEAR_BASE64="ClearBase64",e.SET_CONTRACT="SetContract",e.SET_ITEM_ID="SetItemID",e.SET_TOKEN_ID="SetTokenID",e.SET_DISABLE_LOADER="SetDisableLoader",e.SET_TYPE="SetType",e.RELOAD="Reload",e.CLEANUP="Cleanup",e.GET_ELEMENT_BOUNDS="GetElementBounds",e.SET_SPRING_BONES_PARAMS="SetSpringBonesParams",e))(x||{});const Ae={unityMode:"SetMode",profile:"SetProfile",emote:"SetEmote",urns:"SetUrns",background:"SetBackground",skin:"SetSkinColor",hair:"SetHairColor",eyes:"SetEyeColor",bodyShape:"SetBodyShape",showAnimationReference:"SetShowAnimationReference",projection:"SetProjection",base64s:"AddBase64",contractAddress:"SetContract",itemId:"SetItemID",tokenId:"SetTokenID",disableLoader:"SetDisableLoader",type:"SetType"},Ie={unityMode:e=>String(e),profile:e=>String(e),emote:e=>String(e),urns:e=>Array.isArray(e)?e.join(","):String(e),background:e=>typeof e=="string"?e.replace("#",""):String(e),skin:e=>typeof e=="string"?e.replace("#",""):String(e),hair:e=>typeof e=="string"?e.replace("#",""):String(e),eyes:e=>typeof e=="string"?e.replace("#",""):String(e),bodyShape:e=>String(e),showAnimationReference:e=>String(e),projection:e=>String(e),contractAddress:e=>String(e),itemId:e=>String(e),tokenId:e=>String(e),disableLoader:e=>String(e),type:e=>String(e)},C=(e,t,s)=>{if(e)try{const r=String(t);Object.values(x).includes(r)||(console.warn(`Unknown Unity method: ${r}. Sending anyway...`),k(`Unknown Unity method: ${r}`,{method:r,value:s})),s!==void 0?e.SendMessage("JSBridge",r,s):e.SendMessage("JSBridge",r)}catch(r){console.error(`Failed to send Unity message ${t}:`,r),j(r,{method:String(t),value:s})}else console.warn(`Unity instance not ready, cannot send message: ${t}`),k(`Unity instance not ready, cannot send message: ${t}`,{method:String(t)})},ve=(e,t,s)=>{if(!e){console.warn("Unity instance not available, cannot send override messages"),k("Unity instance not available, cannot send override messages");return}let r=0;t.base64s!==void 0&&s.base64s&&(C(e,"ClearBase64"),r++,Array.isArray(t.base64s)&&t.base64s.length>0&&t.base64s.forEach(n=>{C(e,"AddBase64",n),r++})),Object.entries(t).forEach(([n,a])=>{if(n!=="base64s"&&s[n]&&a!==void 0){const o=Ae[n];if(o){const i=Ie[n],E=i?i(a):String(a);C(e,o,E),r++}else console.warn(`No Unity method mapping found for property: ${n}`),k(`No Unity method mapping found for property: ${n}`,{property:n,value:a})}}),r>0&&C(e,"Reload")};var be={VITE_BASE_URL:""};const V=new Map,_=(e,t)=>t;function Oe(e){if(V.has(e))return V.get(e);const t=new Promise((s,r)=>{const n=document.querySelector(`script[src="${e}"]`);if(n){n.addEventListener("load",()=>s(n)),n.addEventListener("error",o=>r(o));return}const a=document.createElement("script");a.src=e,a.async=!0,a.onload=()=>s(a),a.onerror=o=>r(o),document.body.appendChild(a)});return V.set(e,t),t}const Le=async(e,t,s,r,n,a,o,i,E,m,S,g)=>{try{const u=be.VITE_BASE_URL||"";return await Oe(_(u,t)),await createUnityInstance(e,{dataUrl:_(u,s),frameworkUrl:_(u,r),codeUrl:_(u,n),streamingAssetsUrl:_(u,o),symbolUrl:_(u,a),companyName:i,productName:E,productVersion:m,matchWebGLToCanvasSize:S,arguments:g})}catch(u){throw console.error("❌ Failed to load Unity instance:",u),u}},_e="data:image/png;base64,";function Ne(e){return{getScreenshot:()=>new Promise(t=>{if(!e){t("");return}e.SendMessage("JSBridge","TakeScreenshot",""),window.addEventListener("message",function s(r){if(r.data.type==="unity-renderer"){const{type:n,payload:a}=r.data.payload;n==="screenshot"&&(window.removeEventListener("message",s),t(_e+a))}})}),getMetrics:()=>new Promise(t=>{if(!e){t({triangles:0,materials:0,textures:0,meshes:0,bodies:0,entities:0});return}e.SendMessage("JSBridge","GetMetrics",""),window.addEventListener("message",function s(r){if(r.data.type==="unity-renderer"){const{type:n,payload:a}=r.data.payload;n==="metrics"&&(window.removeEventListener("message",s),t(a))}})}),changeZoom:async t=>{e&&e.SendMessage("JSBridge","SetZoom",t.toString())},panCamera:async t=>{if(!e)return;const s=t.x??0,r=t.y??0,n=t.z??0;e.SendMessage("JSBridge","SetOffset",`${s},${r},${n}`)},changeCameraPosition:async t=>{if(!e)return;const s=t.alpha??0,r=t.beta??0,n=t.radius??0;e.SendMessage("JSBridge","SetCameraPosition",`${s},${r},${n}`)},setUsername:async t=>{e&&e.SendMessage("JSBridge","SetUsername",t)},cleanup:async()=>{e&&e.SendMessage("JSBridge","Cleanup","")}}}function Ce(e,t,s,r){const n=de();let a=0,o=0,i="stopped",E=null,m=0;const S=()=>{var d;return s?s.loop:!!((d=t==null?void 0:t.emoteDataADR74)!=null&&d.loop||r&&ce.includes(r))},g=()=>{u(),m=Date.now(),E=setInterval(()=>{if(i!=="playing")return;const d=Date.now(),y=(d-m)/1e3;if(m=d,o+=y,a>0&&o>=a)if(S())o=o%a,n.emit(l.PreviewEmoteEventType.ANIMATION_LOOP);else{o=a,u(),i="stopped",e.SendMessage("JSBridge","StopEmote",""),n.emit(l.PreviewEmoteEventType.ANIMATION_PLAYING,{length:o}),n.emit(l.PreviewEmoteEventType.ANIMATION_END);return}n.emit(l.PreviewEmoteEventType.ANIMATION_PLAYING,{length:o})},15)},u=()=>{E!==null&&(clearInterval(E),E=null)},p=(d,y,w)=>new Promise(b=>{if(!e){b(w);return}const A=I=>{if(I.data.type==="unity-renderer"){const{type:T,payload:P}=I.data.payload;T===y&&(window.removeEventListener("message",A),b(P))}};window.addEventListener("message",A),d()});return{getLength:async()=>await p(()=>e.SendMessage("JSBridge","GetEmoteLength",""),"emoteLength",0)??0,isPlaying:async()=>p(()=>e.SendMessage("JSBridge","IsEmotePlaying",""),"isEmotePlaying",!1),goTo:async d=>{e&&(o=d,e.SendMessage("JSBridge","GoToEmote",d.toString()),n.emit(l.PreviewEmoteEventType.ANIMATION_PLAYING,{length:d}))},play:async()=>{e&&(a<=0&&(a=await p(()=>e.SendMessage("JSBridge","GetEmoteLength",""),"emoteLength",0)),i==="stopped"&&(o=0),i="playing",e.SendMessage("JSBridge","PlayEmote",""),g(),n.emit(l.PreviewEmoteEventType.ANIMATION_PLAY))},pause:async()=>{e&&(i="paused",u(),e.SendMessage("JSBridge","PauseEmote",""),n.emit(l.PreviewEmoteEventType.ANIMATION_PAUSE))},stop:async()=>{e&&(i="stopped",o=0,u(),e.SendMessage("JSBridge","StopEmote",""),n.emit(l.PreviewEmoteEventType.ANIMATION_END))},enableSound:async()=>{e&&e.SendMessage("JSBridge","EnableSound","")},disableSound:async()=>{e&&e.SendMessage("JSBridge","DisableSound","")},hasSound:async()=>p(()=>e.SendMessage("JSBridge","HasSound",""),"hasSound",!1),isSocialEmote:async()=>X(t),getSocialEmoteAnimations:async()=>!t||!X(t)?null:[{title:"Start Animation",...t.emoteDataADR74.startAnimation},...t.emoteDataADR74.outcomes.map(d=>({title:d.title,loop:d.loop,audio:d.audio,...d.clips}))],getPlayingSocialEmoteAnimation:async()=>s??null,emote:t,events:n}}function Me(e){return{setSpringBonesParams:async(t,s)=>{e&&e.SendMessage("JSBridge",x.SET_SPRING_BONES_PARAMS,JSON.stringify({itemId:t,params:s}))}}}const De={dataUrl:"/unity/Build/aang-renderer.data.br",frameworkUrl:"/unity/Build/aang-renderer.framework.js.br",codeUrl:"/unity/Build/aang-renderer.wasm.br",symbolUrl:"/unity/Build/aang-renderer.symbols.json.br"};function Be(){return De}async function Ue(e,t){let s=null;try{const r=Be();if(s=await Le(e,"/unity/Build/aang-renderer.loader.js",r.dataUrl,r.frameworkUrl,r.codeUrl,r.symbolUrl,"/emotes","Decentraland","AangRenderer","2.2.2",!0,[]),!s)throw new Error("Failed to load Unity instance");const n=t!=null&&t.itemDefinition&&ue(t.itemDefinition)?t.itemDefinition:null,a=(t==null?void 0:t.socialEmote)||void 0,o=(t==null?void 0:t.emote)||null,i=Ne(s),E=Ce(s,n,a,o),m=Me(s);if(t!=null&&t.itemDefinition&&t.bodyShape&&re(t.itemDefinition)){const S=Se(t.itemDefinition,t.bodyShape);S&&m.setSpringBonesParams(t.itemDefinition.id,S)}return{scene:i,emote:E,physics:m,unity:s}}catch(r){if(console.error("Unity render failed:",r),s!=null&&s.Quit)try{s.Quit()}catch(n){console.error("Error quitting Unity instance:",n),j(n,{phase:"unityQuit"})}throw r}}const ke=()=>Math.floor(Math.random()*159)+1,se=()=>`default${ke()}`,je=e=>e===l.PreviewType.AVATAR||e===l.PreviewType.WEARABLE?e:null,xe=(e,t)=>{var s,r,n,a,o,i;return{eyes:$(t.eyes||((r=(s=e==null?void 0:e.avatar)==null?void 0:s.eyes)==null?void 0:r.color)&&G(e.avatar.eyes.color)||"#000000"),hair:$(t.hair||((a=(n=e==null?void 0:e.avatar)==null?void 0:n.hair)==null?void 0:a.color)&&G(e.avatar.hair.color)||"#000000"),skin:$(t.skin||((i=(o=e==null?void 0:e.avatar)==null?void 0:o.skin)==null?void 0:i.color)&&G(e.avatar.skin.color)||"#cc9b76")}},N=e=>e||"",Z=e=>e||[],U=e=>e.replace("#","");function ee(e){const t=new URL(window.location.href);Object.entries(e).forEach(([s,r])=>{t.searchParams.delete(s),Array.isArray(r)?r.forEach(n=>{n!==""&&t.searchParams.append(s,n)}):r!==""&&t.searchParams.set(s,r)}),window.history.replaceState({},"",t.toString())}function Je(){const{options:e,overrideSources:t}=ne(),[s,r]=c.useState(null),[n,a]=c.useState(!0),[o,i]=c.useState(null),E=c.useRef(null),m=c.useRef(e),S=c.useRef(!0);return c.useEffect(()=>{const g=JSON.stringify(e),u=JSON.stringify(m.current);if(!S.current&&g===u)return;S.current=!1,m.current=e,(async()=>{var d,y;try{a(!0),i(null);const w=e.peerUrl||K.get("PEER_URL"),b=e.marketplaceServerUrl||e.nftServerUrl||K.get("MARKETPLACE_SERVER_URL"),A=je(e.type);let I=A||l.PreviewType.WEARABLE,T={color:e.background||"#4b4852",transparent:e.disableBackground===!0};const P=me(e.profile);let f=P==null?void 0:P.value;f==="default"&&(f=se());const h=f&&P?P.type==="address"?await Ee(f,w):await ge(f,w):null,v=e.bodyShape||((d=h==null?void 0:h.avatar)==null?void 0:d.bodyShape)||l.BodyShape.MALE;let R=null;if(e.contractAddress&&(R=await ye({contractAddress:e.contractAddress,tokenId:e.tokenId,itemId:e.itemId,peerUrl:w,marketplaceServerUrl:b}),R&&re(R))){T={...T,image:R.thumbnail};const D=pe(R);fe(D)&&I!==l.PreviewType.AVATAR&&(I=l.PreviewType.TEXTURE)}const{eyes:H,hair:Y,skin:Q}=xe(h,{eyes:e.eyes,hair:e.hair,skin:e.skin}),M=e.unityMode||null,ae=e.camera&&Object.values(l.PreviewCamera).includes(e.camera)?e.camera:l.PreviewCamera.INTERACTIVE,q=e.projection&&Object.values(l.PreviewProjection).includes(e.projection)?e.projection:l.PreviewProjection.PERSPECTIVE,O=e.disableDefaultEmotes?null:e.emote&&Object.values(l.PreviewEmote).includes(e.emote)?e.emote:l.PreviewEmote.IDLE,J={background:T,bodyShape:v,mode:M,projection:q,type:I,base64:((y=e.base64s)==null?void 0:y[0])||null,contract:e.contractAddress||null,disableLoader:e.disableLoader||!1,emote:(O==null?void 0:O.toString())||null,eyeColor:H.replace("#",""),hairColor:Y.replace("#",""),item:e.itemId||null,profile:f||null,skinColor:Q.replace("#",""),token:e.tokenId||null,urn:e.urns||null,showAnimationReference:null,itemDefinition:R,socialEmote:e.socialEmote||null},oe=JSON.stringify(J),ie=JSON.stringify(E.current);if(oe!==ie){if(E.current=J,Object.keys(t).length===0){const D=Z(e.urns),W=Z(e.base64s);if(M===l.PreviewUnityMode.CONFIG){const z={mode:N(M||"")};ee(z)}else{const z={background:T.transparent?"":U(T.color),disableLoader:e.disableLoader?"true":"",profile:N(f||""),bodyShape:N(v||""),eyeColor:U(H||""),hairColor:U(Y||""),skinColor:U(Q||""),mode:N(M||""),camera:ae,projection:q,emote:N((O==null?void 0:O.toString())||""),type:N(A),urn:D.length>0?D:[""],base64:W.length>0?W:[""]};ee(z)}}r(J)}a(!1)}catch(w){console.error("[useUnityConfig] Failed to load config:",w),i(w instanceof Error?w.message:"Failed to load config"),a(!1)}})()},[e,t]),[s,n,o]}const ze="unity-renderer",$e="unity-canvas",te=1,Ge="Failed to load Unity";var Fe=(e=>(e.LOADED="loaded",e.ERROR="error",e.SCREENSHOT="screenshot",e.CUSTOMIZATION_DONE="customization-done",e.CUSTOMIZATION_STEP="avatar-customization-step",e.ELEMENT_BOUNDS="element-bounds",e))(Fe||{});const Ve="get_element_bounds",He="element_bounds_response",Ye=(e,t,s,r)=>{const[n,a]=c.useState({isLoaded:!1,isInitialized:!1,error:null}),o=c.useRef(null),i=c.useCallback(m=>{if(m.data.type===ze){const{type:S,payload:g}=m.data.payload;S==="loaded"&&(g===!0||g==="true")?(a(u=>({...u,isLoaded:!0,isInitialized:!0})),l.sendMessage(L(),l.PreviewMessageType.LOAD,{renderer:l.PreviewRenderer.UNITY}),t.current&&t.current.emote.play()):S==="customization-done"?l.sendMessage(L(),l.PreviewMessageType.CONTROLLER_RESPONSE,{id:"customization-done",ok:!0,result:JSON.parse(m.data.payload.payload)}):S==="avatar-customization-step"?l.sendMessage(L(),l.PreviewMessageType.CONTROLLER_RESPONSE,{id:"avatar-customization-step",ok:!0,result:{step:m.data.payload.payload}}):S==="element-bounds"?l.sendMessage(L(),He,g):S==="error"&&(j(new Error(g),{component:"UnityPreview",phase:"unityMessage"}),a(u=>({...u,error:g})),l.sendMessage(L(),l.PreviewMessageType.ERROR,{message:"Error loading the wearable. Please try again."}))}},[]),E=c.useCallback(async m=>{if(!(!e.canvas.current||e.isInitializing.current||e.unityInstance.current)){e.isInitializing.current=!0,a(S=>({...S,isLoaded:!1,error:null}));try{const{unity:S,...g}=await Ue(e.canvas.current,m);e.unityInstance.current=S,t.current=g,o.current&&o.current(),o.current=Pe(t.current),a(u=>({...u,isInitialized:!0}))}catch(S){const g=S instanceof Error?S.message:Ge;console.error("Unity init failed:",S),j(S,{component:"UnityPreview",phase:"initializeUnity"}),a(u=>({...u,error:g})),l.sendMessage(L(),l.PreviewMessageType.ERROR,{message:g})}finally{e.isInitializing.current=!1}}},[e,t]);return c.useEffect(()=>{n.isInitialized||r||!s||E(s)},[s,r,n.isInitialized,E]),c.useEffect(()=>()=>{o.current&&o.current()},[]),c.useEffect(()=>{if(s)return window.addEventListener("message",i,!1),()=>{window.removeEventListener("message",i,!1)}},[s,i]),n},Qe=e=>{const[t,s]=c.useState({pixelRatio:window.devicePixelRatio||te,is3D:!0,backgroundImage:""});return c.useEffect(()=>{const r=()=>{s(a=>({...a,pixelRatio:window.devicePixelRatio||te}))},n=window.matchMedia(`(resolution: ${t.pixelRatio}dppx)`);return n.addEventListener("change",r),()=>{n.removeEventListener("change",r)}},[t.pixelRatio]),c.useEffect(()=>{e&&s(r=>({...r,backgroundImage:e.background.image||"",is3D:e.type!==l.PreviewType.TEXTURE}))},[e]),t},qe=(e,t,s,r,n)=>{const a=c.useMemo(()=>{const o={};for(const i of Object.keys(n))n[i]&&r[i]!==void 0&&(o[i]=r[i]);return o},[n,r]);c.useEffect(()=>{if(!(!s.isInitialized||!s.isLoaded||!e.current)){if(a.profile==="default"){const o=t.current.profile;a.profile=o!=null&&o.match(/^default\d+$/)?o:se()}Object.keys(a).length>0&&(ve(e.current,a,n),t.current=a)}},[s.isInitialized,s.isLoaded,a,n,e,t])},We=()=>{const{width:e=window.innerWidth,height:t=window.innerHeight}=we(),s=c.useRef(null),r=c.useRef(null),n=c.useRef(!1),a=c.useRef({}),o=he(),[i,E,m]=Je(),{options:S,overrideSources:g}=ne(),u=c.useMemo(()=>({canvas:s,unityInstance:r,isInitializing:n,lastSentOverrides:a}),[]);Re(f=>{var h,v;if(((h=f.data)==null?void 0:h.type)===Ve&&r.current){const R=(v=f.data.payload)==null?void 0:v.elementName;R&&C(r.current,x.GET_ELEMENT_BOUNDS,R)}});const p=Ye(u,o,i,E),d=Qe(i);qe(u.unityInstance,u.lastSentOverrides,p,S,g),Te();const y=c.useMemo(()=>{const f=p.error||m,h=!p.isLoaded&&!f,v=!!d.backgroundImage&&!d.is3D&&!h,R=d.is3D&&!h;return{error:f,isLoading:h,showImage:v,showCanvas:R}},[p.error,p.isLoaded,m,d.backgroundImage,d.is3D]),w=c.useMemo(()=>({opacity:1,backgroundColor:!(i!=null&&i.background.transparent)&&(i==null?void 0:i.type)===l.PreviewType.TEXTURE?i.background.color:void 0}),[i]),b=c.useMemo(()=>({width:`${e}px`,height:`${t}px`}),[e,t]),A=c.useMemo(()=>({width:Math.round(e*d.pixelRatio),height:Math.round(t*d.pixelRatio)}),[e,t,d.pixelRatio]),I=c.useMemo(()=>F("Preview",{"is-loading":y.isLoading,"is-loaded":p.isLoaded,"is-3d":d.is3D,"has-error":!!y.error}),[y.isLoading,p.isLoaded,d.is3D,y.error]),T=c.useMemo(()=>F("thumbnail",{"is-visible":y.showImage}),[y.showImage]),P=c.useMemo(()=>F({"is-visible":y.showCanvas}),[y.showCanvas]);return B.jsxs("div",{className:I,style:w,children:[B.jsx("img",{src:d.backgroundImage,className:T,alt:"preview"}),B.jsx("canvas",{ref:u.canvas,id:$e,className:P,width:A.width,height:A.height,style:b}),y.error&&B.jsx("div",{className:"error",children:y.error})]})},Ze=le.memo(We);export{Fe as UnityMessageType,Ze as default};
|