@genart-api/adapter-fxhash
Version:
GenArtAPI platform adapter for fxhash.xyz
2 lines (1 loc) • 3.69 kB
JavaScript
;(()=>{var u={bigint:"bigint",binary:"bytes",choice:"select",color:"color",range:"number",toggle:"boolean",text:"string",vector:"number",weighted:"select",xy:"number"},f={reload:"page-reload",event:"sync"},{prng:{SFC32:P},utils:{equiv:m,isString:g,hashString:_}}=$genart,l=2n**63n,h=class{_searchParams;_params;_cache={};_adaptations={};_prng;_screen;constructor(){this._searchParams=new URLSearchParams(location.search),this._screen=this.screen,$genart.on("genart:state-change",({state:r})=>{r==="ready"&&$genart.start()}),$fx.on("params:update",()=>!0,(r,o)=>{let[a,e]=Object.entries(o)[0],d=this._adaptations[a];d&&(a=d.id,e=d.adapt(e));let s=this._params?.[a];return s?m(this._cache[a],e)?!1:(this._cache[a]=e,s.update!=="reload"?$genart.setParamValue(a,e):location.reload(),!0):(this.warn(`ignoring change for unknown param: ${a}...`),!1)}),window.addEventListener("resize",()=>{let{width:r,height:o,dpr:a}=this._screen,e=this.screen;(r!==e.width||o!==e.height||a!==e.dpr)&&(this._screen=e,$genart.emit({type:"genart:resize",screen:e}))})}get id(){return"@genart-api/adapter-fxhash"}get mode(){return{standalone:"play",capture:"preview",minting:"edit"}[$fx.context]}get screen(){return{width:window.innerWidth,height:window.innerHeight,dpr:window.devicePixelRatio||1}}get prng(){return this._prng||(this._prng=new P(_($fx.hash)))}get seed(){return $fx.hash}get collector(){return $fx.minter}get iteration(){return $fx.iteration}configure(r){}async updateParam(r,o){let a;if(Object.values(this._adaptations).find(e=>e.id===r))return a=this._cache[r],{value:a};if(a=$fx.getParam(r),console.log(`${this.id}:`,r,"new value",a,"cached",this._cache[r]),!(a==null||m(this._cache[r],a)))return this._cache[r]=a,{value:a}}async initParams(r){this._params=r;let o=[];for(let a in r){let e=r[a],d=u[e.type];if(!d){this.warn(`unsupported type '${e.type}' for param id: ${a}, skipping...`);continue}let s={id:a,name:e.name,type:d,default:e.default,update:f[e.update]};switch(o.push(s),this._cache[a]=e.default,e.type){case"bigint":{let{min:t,max:n}=e;(t<-l||n>=l)&&this.warn(`value range out of bounds for param: ${a}`),s.options={min:t,max:n};break}case"binary":{let{maxLength:t}=e;s.update="code-driven",s.options={length:t};break}case"choice":{let{options:t}=e;s.options={options:t.map(n=>g(n)?n:n[0])};break}case"color":{this._adaptations[a]={id:a,adapt:t=>g(t)?t:t.hex.rgb},s.default&&(s.default=s.default.substring(1));break}case"range":{let{min:t,max:n,step:c}=e;s.options={min:t,max:n,step:c};break}case"text":{let{minLength:t,maxLength:n}=e;s.options={minLength:t,maxLength:n};break}case"vector":{o.pop();let t=e,n=t.size,c=t.labels;for(let i=0;i<n;i++){let p={...s};p.id=a+"__"+c[i],p.name=t.name+` (${c[i]})`,p.options={min:t.min[i],max:t.max[i],step:t.step[i]},t.default&&(p.default=t.default[i]),o.push(p),this._adaptations[p.id]=this.adaptVectorParam(a,i)}break}case"weighted":{let{options:t}=e;s.options={options:t.map(n=>n[1])};break}case"xy":{o.pop();let t="XY",n=e;for(let c=0;c<2;c++){let i={...s};i.id=a+"__"+t[c],i.name=n.name+` (${t[c]})`,i.options={min:0,max:1,step:.001},n.default&&(i.default=n.default[c]),o.push(i),this._adaptations[i.id]=this.adaptVectorParam(a,c)}}}}$fx.params(o);for(let[a,e]of Object.entries(this._adaptations)){let d=$fx.getParam(a);d!=null&&(this._cache[e.id]=e.adapt(d))}}setTraits(r){$fx.features(r)}capture(r){$fx.preview()}reload(){console.log(`${this.id} reloading with new params:`,this._searchParams.toString()),location.search=this._searchParams.toString()}adaptVectorParam(r,o){return{id:r,adapt:a=>{let e=this._cache[r].slice();return e[o]=a,e}}}warn(r,...o){console.warn(`${this.id}:`,r,...o)}};$genart.setAdapter(new h);})();