@genart-api/adapter-layer
Version:
GenArtAPI platform adapter for layer.com
2 lines (1 loc) • 3.52 kB
JavaScript
;(()=>{var h={choice:"LIST",color:"COLOR",range:"NUMBER",toggle:"BOOLEAN",text:"HASH",vector:"NUMBER",xy:"NUMBER"},{prng:{SFC32:g},utils:{equiv:u,isString:P,parseUUID:$}}=$genart,l=class{_prng;_params;_cache={};_adaptations={};constructor(){$genart.on("genart:state-change",({state:t})=>t==="ready"&&!$layer.controlled&&$genart.start()),window.addEventListener("layer:play",()=>{($genart.state==="ready"||$genart.state==="stop")&&$genart.start($genart.state==="stop")}),window.addEventListener("layer:pause",()=>$genart.stop()),window.addEventListener("layer:paramchange",t=>{let{id:n,value:o}=t.detail,a=this._adaptations[n];a&&(n=a.id,o=a.adapt(o));let r=this._params?.[n];if(!r){this.warn(`ignoring change for unknown param: ${n}...`);return}u(this._cache[n],o)||(this._cache[n]=o,r.update!=="reload"&&$genart.setParamValue(n,o))}),window.addEventListener("layer:dimensionschange",t=>{$genart.emit({type:"genart:resize",screen:{...t.detail,dpr:1}})})}get id(){return"@genart-api/adapter-layer"}get mode(){return"play"}get screen(){return{width:$layer.width,height:$layer.height,dpr:1}}get prng(){return this._prng||(this._prng=new g($($layer.uuid)))}get seed(){return $layer.uuid}async updateParam(t,n){let o;if(Object.values(this._adaptations).find(a=>a.id===t))return o=this._cache[t],{value:o};if(o=$layer.parameters[t],!(o==null||u(this._cache[t],o)))return this._cache[t]=o,{value:o}}async initParams(t){this._params=t;let n=[];for(let a in t){let r=t[a],m=h[r.type];if(!m){this.warn(`unsupported type '${r.type}' for param id: ${a}, skipping...`);continue}let p={id:a,kind:m,name:r.name||a,description:r.desc+(r.update==="reload"?" (requires reload)":""),default:r.default,customization_level:r.edit==="private"?"ARTIST":r.edit==="public"?"VIEWER":"CURATOR"};switch(n.push(p),this._cache[a]=r.default,r.type){case"choice":{let e=r,s=p;s.options=e.options.map(i=>Array.isArray(i)?{value:i[0],label:i[1]}:{value:i,label:i});break}case"color":{this._adaptations[a]={id:a,adapt:e=>P(e)?e:e.hex};break}case"range":{let e=r,s=p;s.min=e.min,s.max=e.max,s.step=e.step;break}case"text":{let e=r,s=p;switch(s.minLength=e.minLength,s.maxLength=e.maxLength,e.match instanceof RegExp?e.match.source:e.match){case"^[0-9a-f]+$":case"^[0-9a-fA-F]+$":s.pattern="HEX";break;case"^[a-zA-Z0-9-_=]+$":s.pattern="BASE64";break;case"^[a-zA-Z ]+$":s.pattern="ALPHABETICAL";break;case"^[a-zA-Z0-9_ ]+$":s.pattern="ALPHANUMERIC";break;default:this.warn(`couldn't determine pattern type for text param: ${a}, using 'ALPHANUMERIC'...`),s.pattern="ALPHANUMERIC"}break}case"vector":{n.pop();let e=r,s=e.size,i=e.labels;for(let c=0;c<s;c++){let d={...p};d.id=a+"__"+i[c],d.name=e.name+` (${i[c]})`,d.min=e.min[c],d.max=e.max[c],d.step=e.step[c],e.default&&(d.default=e.default[c]),n.push(d),this._adaptations[d.id]=this.adaptVectorParam(a,c)}break}case"weighted":{let e=r,s=p;s.options=e.options.map(i=>({value:i[1],label:i[2]}));break}case"xy":{n.pop();let e="xy",s=r;for(let i=0;i<2;i++){let c={...p};c.id=a+"__"+e[i],c.name=s.name+` (${e[i]})`,c.min=0,c.max=1,c.step=.001,s.default&&(c.default=s.default[i]),n.push(c),this._adaptations[c.id]=this.adaptVectorParam(a,i)}}}}let o=await $layer.params(...n);for(let[a,r]of Object.entries(this._adaptations)){let m=o[a];m!=null&&(this._cache[r.id]=r.adapt(m))}}setTraits(){}capture(t){$layer.registerCanvas(t)}adaptVectorParam(t,n){return{id:t,adapt:o=>{let a=this._cache[t].slice();return a[n]=o,a}}}warn(t,...n){console.warn(`${this.id}:`,t,...n)}};$genart.setAdapter(new l);})();