memoscan
← all memos

Memo 0x42bf327b…a4c0a8 on Ethereum

="start"?"end":"start"](d,y),r=s.rng(0,this.children.length-1),o={start:(l,h)=>0,middle:(l,h)=>l/2-h/2,end:(l,h)=>l-h,"start + random opposite":(l,h,d)=>t("end",d==r,l,h),"end + random opposite":(l,h,d)=>t("start",d==r,l,h),"start + first opposite":(l,h,d)=>t("end",d==0,l,h),"end + first opposite":(l,h,d)=>t("start",d==0,l,h),"start + last opposite":(l,h,d)=>t("end",d==this.children.length-1,l,h),"end + last opposite":(l,h,d)=>t("start",d==this.children.length-1,l,h),"start + half opposite":(l,h,d)=>t("end",d>=this.children.length/2,l,h),"end + half opposite":(l,h,d)=>t("start",d>=this.children.length/2,l,h),"start + alternate opposite":(l,h,d)=>t("end",d%2==0,l,h),"end + alternate opposite":(l,h,d)=>t("start",d%2==0,l,h)},u=o[this.item.align],m=o[this.item.justify],A=this.children.reduce((l,h)=>l+h.item.w,0),p=this.children.reduce((l,h)=>l+h.item.h,0);let w=e+m(this.item.w,A),E=i+m(this.item.h,p);for(const[l,h]of this.children.entries())this.item.side=="w"?h.layout(w,i+u(this.item.h,h.item.h,l),a-20-l):h.layout(e+u(this.item.w,h.item.w,l),E,a-20-l),w+=h.item.w,E+=h.item.h}}class D{constructor(e,i,a){this.x=0,this.y=0,this.z=0,this.w=e,this.h=i,this.isContainer=!1,this.rngs=null,this.margin=s.choice(Array.from({length:(a.shapegen.marginmax-.1)/.05+1},(t,r)=>.1+r*.05))*a.inch,this.colors=null,this.skip=!1,this.cutout=!1,this.reuse=!1,this.rotated=!1,this.offset=!1,this.type="normal"}_divisions(e,i,a,t,r){return Array.from({length:this[e]*a/i},(o,u)=>this[e]-i/a*u).filter(o=>o>=t).filter(o=>o<=r)}split(e,i,a){let t=new Array(i),r=0;for(let o=0;o<i;o++)t[o]=s.choice(this._divisions(e,a.inch,a.shapegen.factor,a.unit,this[e]-r-(i-o-1)*a.unit)),r+=t[o];if(e=="w")return t.map(o=>new D(o,this.h,a));if(e=="h")return t.map(o=>new D(this.w,o,a))}randomize(e){let i=s.choice(this._divisions("w",e.inch,e.shapegen.factor,Math.max(e.unit,this.w*e.shapegen.min),Math.max(e.unit*2,this.w*e.shapegen.max))),a=s.choice(this._divisions("h",e.inch,e.shapegen.factor,Math.max(e.unit,this.h*e.shapegen.min),Math.max(e.unit*2,this.h*e.shapegen.max)));const t=e.shapegen.aspectlimit;i>a*t&&(i=a*t),a>i*t&&(a=i*t),this.w=i||0,this.h=a||0;let r=s.rng(e.wonky.min,e.wonky.max);e.wonky.useGlobal&&(r=e.wonky.global),this.rngs={a:{x:+s.rng(0,r),y:+s.rng(0,r)},b:{x:-s.rng(0,r),y:+s.rng(0,r)},c:{x:-s.rng(0,r),y:-s.rng(0,r)},d:{x:+s.rng(0,r),y:-s.rng(0,r)},e:{x:+s.rng(0,r),y:+s.rng(0,r)},f:{x:-s.rng(0,r),y:+s.rng(0,r)},g:{x:-s.rng(0,r),y:-s.rng(0,r)},h:{x:+s.rng(0,r),y:-s.rng(0,r)},t:s.choice([15,30,45,60,75,90,105,120,135,150,165,195,210,225,240,255,270,285,300,315,330,345]),ox:0,oz:0},s.choice([!0,!1])?this.rngs.oz=s.rng(0,a*e.shapegen.offset_amt)*s.choice([1,-1]):this.rngs.ox=s.rng(0,i*e.shapegen.offset_amt)*s.choice([1,-1]),this.type=="canvasbg"?this.colors=s.choice(e.color.canvas_backgrounds):this.type=="container"?this.colors=s.choice(e.color.backgrounds):(this.colors=s.choice(e.color.options),e.color.options.splice(e.color.options.indexOf(this.colors),1),e.color.options.length==0&&(e.color.options=Array.from(e.color.refill))),this.shader=ne(s.choice(se),this.colors)}_createShape(e,i,a,t){const r=new THREE.BufferGeometry;return r.setIndex(i),r.setAttribute("position",new THREE.BufferAttribute(e,3)),r.setAttribute("uv",new THREE.BufferAttribute(a,2)),new THREE.Mesh(r,new THREE.ShaderMaterial({vertexShader:` varying vec2 v_uv; void main() { v_uv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `,fragmentShader:ce,uniforms:t}))}render(e){if(this.skip||this.w==0||this.h==0)return;const i=this.x,a=this.y,t=this.w,r=this.h,o=this.margin,u=e.canvasWidth,m=e.canvasHeight,A=-t/2+o,p=i+t>=u?t/2-o:t/2,w=-r/2+o,E=a+r>=m?r/2-o:r/2;let l=new Float32Array([A+this.rngs.a.x,0,w+this.rngs.a.y,p+this.rngs.b.x,0,w+this.rngs.b.y,p+this.rngs.c.x,0,E+this.rngs.c.y,A+this.rngs.d.x,0,E+this.rngs.d.y]),h=[0,2,1,0,3,2],d=new Float32Array([0,0,1,0,1,1,0,1]);const y={uSize:{value:new THREE.Vector2(p-A,E-w)},uResolution:{value:new THREE.Vector2(e.canvasWidth,e.canvasHeight)},uColor:{value:new THREE.Color(this.shader.color.main)},uColor2:{value:new THREE.Color(this.shader.color.grains)},uColor3:{value:new THREE.Color(this.shader.color.background)},uColorA:{value:new THREE.Color(this.shader.color.tennisone)},uColorB:{value:new THREE.Color(this.shader.color.tennistwo)},uType:{value:this.shader.type},uSeed:{value:this.shader.rng.seed},uVariety:{value:this.shader.rng.variety},uGrains:{value:this.shader.rng.grainy},uZoomX:{value:this.shader.rng.zoomx},uZoomY:{value:this.shader.rng.zoomy},uAlphaMin:{value:this.shader.rng.alphamin},uAlphaMax:{value:this.shader.rng.alphamax},uDir:{value:this.shader.rng.dir},isColor:{value:this.shader.isColor},isTexture:{value:this.shader.isTexture},isGrains:{value:this.shader.isGrains},isTennis:{value:this.shader.isTennis}};let f=this._createShape(l,h,d,y),x;if(this.cutout){const g=e.cutout.margin,Q=s.rng(-g/2,g/2),b=s.rng(-g/2,g/2);x=new Float32Array([A+g+Q+this.rngs.e.x,0,w+g+b+this.rngs.e.y,p-g+Q+this.rngs.f.x,0,w+g+b+this.rngs.f.y,p-g+Q+this.rngs.g.x,0,E-g+b+this.rngs.g.y,A+g+Q+this.rngs.h.x,0,E-g+b+this.rngs.h.y]);const j=[0,4,5,0,5,1,1,5,6,1,6,2,7,2,6,3,2,7,3,7,4,3,4,0],K=new Float32Array([...d,g/t,g/r,1-g/t,g/r,1-g/t,1-g/r,g/t,1-g/r]);f=this._createShape(new Float32Array([...l,...x]),j,K,y)}if(this.rotated&&(f.rotation.y=this.rngs.t*Math.PI/180),f.position.x=i+t/2,f.position.z=a+r/2,f.position.y=this.z,this.offset&&(f.position.x+=this.rngs.ox,f.position.z+=this.rngs.oz),this.type=="canvasbg"||this.type=="container"?(f.position.x-=e.canvasWidth/2,f.position.z-=e.canvasHeight/2,e.internal.scene.add(f)):e.internal.base.add(f),this.reuse){const g=this._createShape(x,h,d,y);let Q=s.rng(t*1,t*1.2)*s.choice([1,-1]),b=s.rng(t*1,t*1.2)*s.choice([1,-1]);(i+Q>e.canvasWidth||i-Q<0)&&(Q*=-1),(a+b>e.canvasHeight||a-b<0)&&(b*=-1),s.choice([!0,!1])?(g.position.x=Q,g.position.z=s.rng(0,r/8)*s.choice([1,-1])):(g.position.z=b,g.position.x=s.rng(0,t/8)*s.choice([1,-1])),f.add(g),e.temp.meshes.push([g.uuid,f.uuid])}e.temp.meshes.push([f.uuid])}}class de{constructor(e,i,a,t){this.x=0,this.y=0,this.z=0,this.w=e,this.h=i,this.ox=0,this.oy=0,this.isContainer=!0,this.side=a,this.align="start",this.justify="start",this.isRendered=!1,this.isContainedBg=!1,this.colors=null}randomize(e){this.align=s.choice(["start","middle","end"]),this.justify=s.choice(["start","middle","end"]),this.isRendered&&(this.align="middle",this.justify="middle"),e.align.useGlobal&&(this.align=e.align.global),e.justify.useGlobal&&(this.justify=e.justify.global),this.align=="force random"&&(this.align=s.choice(["start","middle","end"])),this.justify=="force random"&&(this.justify=s.choice(["start","middle","end"]))}render(e){if(!this.isRendered)return;const i=new D(this.w,this.h,e);let a=JSON.parse(JSON.stringify(e));this.isContainedBg&&(i.type="container",a.wonky.useGlobal=!0,a.wonky.global=e.wonky.bg),e.contained.rotated&&(i.rotated=!0),i.margin=0,i.randomize(a),this.colors=i.colors,i.z=this.z,i.x=this.x-e.contained.offsetContainer+this.ox,i.y=this.y-e.contained.offsetContainer+this.oy,i.w=this.w+e.contained.offsetContainer*2,i.h=this.h+e.contained.offsetContainer*2,i.render(e)}}let S,I,v;function ue(n){return J(this,null,function*(){console.log(n);const a=2048*n;let t={temp:{meshes:[]},internal:{base:new THREE.Object3D,rotationPivot:new THREE.Object3D,scene:S},sourceW:12,sourceH:16,canvasHeight:a,canvasWidth:Math.round(a*12/16),inch:a/16};return v=new THREE.WebGLRenderer({antialias:!0,preserveDrawingBuffer:!0}),v.setSize(t.canvasWidth,t.canvasHeight),I=new THREE.OrthographicCamera(-t.canvasWidth/2,t.canvasWidth/2,-t.canvasHeight/2,t.canvasHeight/2,1,2e3),I.position.set(0,-1e3,0),I.lookAt(0,0,0),S=new THREE.Scene,t.internal.scene=S,t.internal.base.position.x-=t.canvasWidth/2,t.internal.base.position.z-=t.canvasHeight/2,t.internal.rotationPivot.add(t.internal.base),S.add(t.internal.rotationPivot),yield le(),[t,v]})}function ge(n){let e=new L(new D(n.canvasWidth,n.canvasHeight,n));return(n.style=="contained"||n.style=="cutout")&&(e=new L(new D(n.canvasWidth-2*n.contained.offsetRender,n.canvasHeight-2*n.contained.offsetRender,n))),e}function Ae(n,e){let a=0,t=!0,r=[];for(;n.leafCount()<e.nshapes;){if(a+=1,a>99999){$("Could not fit all shapes",2e3);break}let o=s.rng(2,e.nshapes-n.leafCount()+1);o=Math.min(o,e.splitmax),e.subdivideOverride=="force both"&&(o=s.rng(2,e.nshapes-n.leafCount()),o=Math.max(o,2),o=Math.min(o,e.splitmax)),(e.subdivideOverride=="only width"||e.subdivideOverride=="only height")&&(o=e.nshapes-n.leafCount()+1);let u=s.choice(["w","h"]);e.subdivideOverride=="only width"&&(u="w"),e.subdivideOverride=="only height"&&(u="h"),e.subdivideOverride=="force both"&&r.length>0&&(r.includes("h")||(u="h"),r.includes("w")||(u="w")),e.subdivideOverride=="exclude only height"&&(r.includes("w")||(u="w")),e.subdivideOverride=="exclude only width"&&(r.includes("h")||(u="h")),r.push(u);const m=n.nodes().filter(w=>!w.item.isContainer&&w.item[u]>=e.unit*o);if(m.length==0)continue;const A=s.choice(m);A.item.split(u,o,e).forEach(w=>A.add(w)),A.item=new de(A.item.w,A.item.h,u,e),t&&((e.style=="contained"||e.style=="cutout")&&(A.item.isRendered=!0,A.item.isContainedBg=!0),t=!1)}if(e.shapegen.rotated){s.choice(n.shapes()).rotated=!0;for(const o of n.shapes())s.probability(e.shapegen.rotated_prob/100)&&(o.rotated=!0)}if(e.shapegen.offset){s.choice(n.shapes()).offset=!0;for(const o of n.shapes())s.probability(e.shapegen.offset_prob/100)&&(o.offset=!0)}if(e.shapegen.skip&&e.nshapes>4&&(s.choice(n.shapes()).skip=!0),e.style=="cutout"){s.choice(n.shapes()).cutout=!0;for(const o of n.shapes())s.probability(e.cutout.probability/100)&&(o.cutout=!0);for(const o of n.shapes())o.cutout==!0&&s.probability(e.cutout.reuse/100)&&(o.reuse=!0)}n.randomize(e),e.style=="contained"||e.style=="cutout"?n.layout(e.contained.offsetRender,e.contained.offsetRender):n.layout();for(const[o,u]of n.shapes().entries())u.z=-20-o*5}function me(n,e){const i=new D(e.canvasWidth,e.canvasHeight,e);let a=JSON.parse(JSON.stringify(e));if(a.wonky.useGlobal=!0,a.wonky.global=0,i.type="canvasbg",i.randomize(a),i.margin=0,i.z=0,i.x=-25,i.y=-25,i.w=e.canvasWidth+50,i.h=e.canvasHeight+50,i.render(e),e.shapegen.comp_rotated_prob){const t=s.choice([15,30,45,60,75,105,120,135,150,165,195,210,225,240,255,285,300,315,330,345]);e.internal.rotationPivot.rotation.y=t*Math.PI/180}else e.internal.rotationPivot.rotation.y=0*Math.PI/180;if(n.render(e),e.zoom.enable){let t={x:0,y:0},r=0;for(const o of n.shapes())o.skip||(t.x+=o.x+o.w/2,t.y+=o.y+o.h/2,r+=1);t.x/=r,t.y/=r,I.position.x=-e.canvasWidth/2+t.x,I.position.z=-e.canvasHeight/2+t.y,I.zoom=s.rng(e.zoom.min*10,e.zoom.max*10)/10,I.updateProjectionMatrix()}v.render(S,I)}const O={init:ue,subdivide:Ae,reset:ge,render:me};let c,T,B,W=!1;function M(){for(const[n,e]of c.temp.meshes){let i=c.internal.base.getObjectByProperty("uuid",n);if(i===void 0&&e!==void 0&&(i=c.internal.base.getObjectByProperty("uuid",e).getObjectByProperty("uuid",n)),i===void 0&&e===void 0){i=c.internal.scene.getObjectByProperty("uuid",n),i.geometry.dispose(),i.material.dispose(),c.internal.scene.remove(i);continue}i.geometry.dispose(),i.material.dispose(),c.internal.base.remove(i)}c.temp.meshes=[],B.renderLists.dispose(),_(),document.body.replaceChildren()}function k(n){return J(this,null,function*(){[c,B]=yield O.init(n),window.opts=c,document.body.appendChild(B.domElement),document.body.style.display="flex",document.body.style.alignItems="center",document.body.style.justifyContent="center";function e(){const i=window.innerWidth,a=window.innerHeight,t=window.innerHeight*c.sourceW/c.sourceH,r=window.innerWidth/c.sourceW*c.sourceH;a<i&&t<=i&&(B.domElement.style.height=`${a}px`,B.domElement.style.width=`${t}px`),a<i&&t>i&&(B.domElement.style.height=`${r}px`,B.domElement.style.width=`${i}px`),a>i&&r<=a&&(B.domElement.style.height=`${r}px`,B.domElement.style.width=`${i}px`),a>i&&r>a&&(B.domElement.style.height=`${a}px`,B.domElement.style.width=`${t}px`)}e(),window.addEventListener("resize",e,!0),fe()})}window.onload=k(1);function fe(){const n=tokenData.tokenId%100,e=ae[n];window.jsonName=e.n;function i(t){return t.map(r=>oe[re[r]])}const a=s.choice(e.pl);c=N(F({},c),{nshapes:e.m[0],style:e.m[2],unit:c.canvasHeight/c.sourceH*e.m[1],subdivideOverride:e.o[0],splitmax:e.o[1],zoom:{enable:s.probability(e.z[0]/100),min:e.z[1],max:e.z[2]},color:{options:Array.from(i(a[1])),refill:Array.from(i(a[1])),backgrounds:Array.from(i(a[0])),canvas_backgrounds:i(he)},wonky:{useGlobal:s.probability(20/100),global:s.rng(e.w[0],e.w[1]),min:e.w[0],max:e.w[1],bg:e.w[2]},shapegen:{min:e.s[0],max:e.s[1],aspectlimit:e.s[2],factor:e.s[3],skip:s.probability(e.p[2]/100),rotated:s.probability(e.p[0]/100),rotated_prob:e.p[1],comp_rotated_prob:!1,marginmax:e.s[4],offset:s.probability(e.s[5]/100),offset_prob:e.s[6],offset_amt:e.s[7]},align:{useGlobal:s.probability(12/100),global:s.choice(["start","middle","end"])},justify:{useGlobal:s.probability(12/100),global:s.choice(["start","middle","end"])},contained:{offsetRender:c.inch*s.rng(e.b[0]*4,e.b[1]*4)*.25,offsetContainer:c.inch/2,rotated:!1},cutout:{probability:e.c[0],margin:c.inch*s.rng(e.c[1]*8,e.c[2]*8)*.125,reuse:e.c[3]}}),c.contained.offsetRender==c.inch*.25&&(c.contained.offsetRender=0),c.contained.offsetRender==c.inch*.5&&(c.contained.offsetRender=.75),s.probability(12/100)&&(c.align.useGlobal=!0,c.justify.useGlobal=!0,c.align.global=s.choice(["start","middle","end"]),c.justify.global=c.align.global),e.o[2]!="no"&&(c.align.useGlobal=!0,c.align.global=e.o[2]),e.o[3]!="no"&&(c.justify.useGlobal=!0,c.justify.global=e.o[3]),T=O.reset(c),O.subdivide(T,c),we()}function we(){requestAnimationFrame(()=>{O.render(T,c),W&&ye()})}function ye(){const n=B.domElement;let e=document.createElement("a");e.setAttribute("download","render_bm.png");let a=n.toDataURL("image/png").replace(/^data:image\/png/,"data:application/octet-stream");e.setAttribute("href",a),e.click()}window.addEventListener("keyup",n=>{n.key=="1"&&(M(),W=!0,k(1)),n.key=="2"&&(M(),W=!0,k(2)),n.key=="3"&&(M(),W=!0,k(3))});