0x865fff61…5033sent to0x99a9b7c1…b069·#16,727,661·view on Etherscan
e>110&&R.dec()<.2))return;this.fillType="scribble"}else"bezier"===this.shape.model.type?this.fillType="solid":R.dec()<.15&&this.shape.size>config.shape.minPatternSize?this.fillType="pattern":this.fillType="solid";switch(this.fillType){case"solid":this.fill={type:"solid",colour:n()};break;case"pattern":this.fill={type:"pattern",colour:n(),pattern:R.choice(Object.keys(je))},this.fill.patternImage=Ke(this.fill.pattern,this.shape);break;case"scribble":this.fill={type:"scribble",colour:n()}}}calcChain=()=>{"bezier"===this.shape.model.type&&(R.dec()>.5||(this.edgeType="chain",this.chainType=R.choice(["rect","square","ellipse","line","triangle"]),this.chainStroke=this.stroke[0].colour,this.chainFill=R.dec()<.5&&this.fill.colour,this.fill=null,this.stroke=[]))};render=()=>{this.drawFill(),this.drawStroke(),this.drawChain()};drawFill(){var e;if(this.fill)switch(noStroke(),this.fill.type){case"solid":fill(this.fill.colour),this.drawFillShape();break;case"pattern":fill(0),e=this.fill.patternImage,drawingContext.fillStyle=e,this.drawFillShape(),fill(0);break;case"scribble":stroke(this.fill.colour),(e=>{const t=new $e,s=e.model.points,i=round(4*e.randomSeed+4);strokeWeight(e.model.curveWeight*e.size/(4*i));for(let o=0;o<s.length-2;o+=2){const n=(o+2)%s.length,r=atan2(s[n+1]-s[o+1],s[n]-s[o])-HALF_PI;for(let c=0;c<i;c++){const a=map(c,0,i-1,-.3*e.model.curveWeight,.3*e.model.curveWeight);t.scribbleLine(e.scalePosition(cos(r)*a+s[o]).x,e.scalePosition(sin(r)*a+s[o+1]).y,e.scalePosition(cos(r)*a+s[n]).x,e.scalePosition(sin(r)*a+s[n+1]).y)}}})(this.shape)}}drawFillShape(){"curved"===this.edgeType?et(this.shape):tt(this.shape)}drawStroke(){this.stroke&&this.stroke.forEach((e=>{noFill(),strokeCap(ROUND),strokeJoin(ROUND),He(e.dashed.split("-").map((e=>e))),strokeWeight(e.weight*this.shape.size),stroke(e.colour),this.drawShape(),He([])}))}drawChain(){"chain"===this.edgeType&&this.drawShape()}drawShape(){switch(this.edgeType){case"curved":et(this.shape);break;case"straight":tt(this.shape);break;case"scribble":(e=>{const t=new $e,s=e.model.points,i="poly"===e.model.type?0:2;for(let o=0;o<s.length-i;o+=2){const i=(o+2)%s.length;t.scribbleLine(e.scalePosition(s[o]).x,e.scalePosition(s[o+1]).y,e.scalePosition(s[i]).x,e.scalePosition(s[i+1]).y)}})(this.shape);break;case"bezier":(e=>{const t=e.model.points;bezier(e.scalePosition(t[0]).x,e.scalePosition(t[1]).y,e.scalePosition(t[2]).x,e.scalePosition(t[3]).y,e.scalePosition(t[4]).x,e.scalePosition(t[5]).y,e.scalePosition(t[6]).x,e.scalePosition(t[7]).y)})(this.shape);break;case"chain":(e=>{const t=new $e;t.roughness=.5;let s=e.model.chainPoints;["line","rect"].includes(e.draw.chainType)&&(s*=2);const i=e.model.curveWeight*e.size,o=e.model.curveWeight/2;stroke(e.draw.chainStroke),e.draw.chainFill?fill(e.draw.chainFill):noFill(),strokeWeight(.05*i);for(let n=0;n<s;n++){let r=n/(s-1);const{x:a,y:h,tx:l,ty:p}=c(e.model.points,r);let u=atan2(p,l);switch(u-=HALF_PI,e.draw.chainType){case"rect":case"square":push(),translate(e.scalePosition(a).x,e.scalePosition(h).y),rotate(u),e.draw.chainFill&&rect(0,0,i,"rect"===e.draw.chainType?.2*i:i),t.scribbleRect(0,0,i,"rect"===e.draw.chainType?.2*i:i),pop();break;case"line":t.scribbleLine(e.scalePosition(cos(u)*-o+a).x,e.scalePosition(sin(u)*-o+h).y,e.scalePosition(cos(u)*o+a).x,e.scalePosition(sin(u)*o+h).y);break;case"ellipse":t.scribbleEllipse(e.scalePosition(a).x,e.scalePosition(h).y,i);break;case"triangle":const s=TWO_PI/3,n=u+-HALF_PI;for(let i=0;i<TWO_PI;i+=s)t.scribbleLine(e.scalePosition(cos(n+i)*o+a).x,e.scalePosition(sin(n+i)*o+h).y,e.scalePosition(cos(n+i+s)*o+a).x,e.scalePosition(sin(n+i+s)*o+h).y)}}})(this.shape)}}}p5.prototype.curvePoint=function(e,t,s,i,o){p5._validateParameters("curvePoint",arguments);const n=this._renderer._curveTightness,r=o*o*o,c=o*o,a=(n-1)/2*r+(1-n)*c+(n-1)/2*o,h=(n+3)/2*r+(-5-n)/2*c+1,l=(-3-n)/2*r+(n+2)*c+(1-n)/2*o,p=(1-n)/2*r+(n-1)/2*c;return e*a+t*h+s*l+i*p},p5.prototype.curveTangent=function(e,t,s,i,o){p5._validateParameters("curveTangent",arguments);const n=this._renderer._curveTightness,r=o*o*3,c=2*o,a=(n-1)/2*r+(1-n)*c+(n-1)/2,h=(n+3)/2*r+(-5-n)/2*c,l=(-3-n)/2*r+(n+2)*c+(1-n)/2,p=(1-n)/2*r+(n-1)/2*c;return e*a+t*h+s*l+i*p};class it{constructor(){this.id=class{static i=0;static getNew(){return this.i++,this.i}}.getNew();const e=config.border+.5*config.minimumSize;this.x=R.num(e,config.w-e),this.y=R.num(e,config.h-e),this.growthSpeed=R.num(...config.shape.growth),this.size=0,this.status="growing",this.debug=!1,this.draw=null,this.randomSeed=R.dec();const t=Ve();this.model={type:t.type,points:t.p,curveThightness:t.ct?t.ct:.99,curveWeight:t.cw?t.cw:.1,collisionDetail:t.cd?t.cd:1,chainPoints:t.chain?t.chain:7},R.dec()<.66&&(this.model.curveThightness=.99),this.collisionPoly=y(this.model),this.boundaries=(e=>{const t={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(let s=0;s<e.length;s+=2)t.minX=e[s+0]<t.minX?e[s+0]:t.minX,t.maxX=e[s+0]>t.maxX?e[s+0]:t.maxX,t.minY=e[s+1]<t.minY?e[s+1]:t.minY,t.maxY=e[s+1]>t.maxY?e[s+1]:t.maxY;return t})(this.collisionPoly)}postPlacement(e){this.inside=((e,t)=>{let s=!1;return t.forEach((t=>{t!==e&&v(e.x,e.y,t)&&(s=t)})),s})(this,e),this.inside&&(this.size/=1.4),this.targetSize=this.size,this.inside&&"bezier"===this.inside.model.type&&(this.kill=!0),this.draw=new st(this)}scalePosition(e){return{x:e*this.size+this.x,y:e*this.size+this.y}}grow(){this.size+=this.growthSpeed}changeStatus(e){if("static"===e)this.status="static",Me(this)}collisionCheck(e){(e=>{(e.scalePosition(e.boundaries.minX).x<=config.border||e.scalePosition(e.boundaries.maxX).x>=config.w-config.border||e.scalePosition(e.boundaries.minY).y<=config.border||e.scalePosition(e.boundaries.maxY).y>=config.h-config.border)&&e.changeStatus("static")})(this),((e,t)=>{t.forEach((t=>{t!==e&&(e.id<t.id&&"growing"===t.status||((e,t)=>e.scalePosition(e.boundaries.minX).x<=t.scalePosition(t.boundaries.maxX).x&&t.scalePosition(t.boundaries.minX).x<=e.scalePosition(e.boundaries.maxX).x&&e.scalePosition(e.boundaries.minY).y<=t.scalePosition(t.boundaries.maxY).y&&t.scalePosition(t.boundaries.minY).y<=e.scalePosition(e.boundaries.maxY).y)(e,t)&&Xe(e,t)&&Ue(e,t))}))})(this,e)}update(e){if("growing"===this.status)this.grow(),this.collisionCheck(e)}render=()=>{this.draw.render(),this.debug&&(this.DEBUG_drawAnchorPoints(),this.DEBUG_drawCollisionOutline())};DEBUG_drawAnchorPoints=()=>{fill(187,125,53,.9),noStroke();for(let e=0;e<this.model.points.length;e+=2)ellipse(this.scalePosition(this.model.points[e]).x,this.scalePosition(this.model.points[e+1]).y,this.size*(.025+.002*sin(frameCount/20+999*this.model.points[0])))};DEBUG_drawCollisionOutline=()=>{stroke(187,125,53,.9),strokeWeight(map(sin(frameCount/25+99*this.collisionPoly[0]),-1,1,1,2)),noFill(),beginShape();for(let e=0;e<this.collisionPoly.length;e+=2)vertex(this.scalePosition(this.collisionPoly[e]).x,this.scalePosition(this.collisionPoly[e+1]).y);endShape(CLOSE)}}var ot=()=>{const e=createGraphics(round(config.w),round(config.h));e.pixelDensity(pixelDensity()),background(s[config.colourPallet]);for(let e=0;e<=R.int(5,9);e++){noStroke();const e=color(n());e.setAlpha(.12);const t=new it;t.draw=new st(t),t.draw.stroke=[],t.draw.fill={type:"solid",colour:e},"curve"!==t.model.type&&"bezier"!==t.model.type||(t.draw.edgeType="bezier"===t.model.type?"bezier":"straight",t.draw.stroke=[{colour:e,weight:t.model.curveWeight,dashed:""}],t.draw.fill=null),t.size=R.num(.25*config.h,config.h),t.x=R.num(0,config.w),t.y=R.num(0,config.h),t.render()}blendMode(OVERLAY);const t=createGraphics(round(config.w),round(config.h));t.pixelDensity(pixelDensity());const i=t.pixelDensity();t.loadPixels();for(let e=0;e<t.width*i*t.height*i*4;e+=4)t.pixels[e]=t.pixels[e+1]=t.pixels[e+2]=random(200),t.pixels[e+3]=40;t.updatePixels(),t.stroke(0,40),t.strokeWeight(.5);for(let e=0;e<5e4;e++){const e=random(PI),s=random(t.width),i=random(t.height),o=random(3);t.line(cos(e)*o+s,sin(e)*o+i,cos(e)*-o+s,sin(e)*-o+i)}return image(t,0,0,round(config.w),round(config.h)),blendMode(BLEND),e.copy(config.canvas,0,0,round(width),round(height),0,0,round(config.w),round(config.h)),e};var nt=()=>{const e=createGraphics(round(config.w),round(config.h));e.pixelDensity(1),e.loadPixels(),e.background(0);for(let t=0;t<e.width*e.height*4;t+=4){const s=t/4%e.width/e.width-.5,i=t/4/e.width/e.height-.5,o=w(.5,.2,abs(s)),n=w(.5,.2,abs(i)),r=1-pow(o*n,.25);e.pixels[t+3]=100*r}return e.updatePixels(),e};var rt=class{constructor(){this.backgroundGfx=ot(),this.vignetteGfx=nt(),this.keyboardSetup(),this.failedPlacements=0,this.maxPlacementTried=350,this.shapes=[];const e=R.int(...config.shape.starters);for(let t=0;t<e;t++)this.addNewShape();this.scalingPhase=0}tick(){image(this.backgroundGfx,0,0,round(config.w),round(config.h)),1===frameCount||(2===frameCount?(this.placement(),this.resetSize()):this.renderShapes()),this.drawVignette()}placement(){const e=R.int(...config.shape.spawnRate);let t=0;for(;this.failedPlacements<this.maxPlacementTried;){for(let e=this.shapes.length-1;e>=0;e--)this.shapes[e].update(this.shapes),this.shapes[e].kill&&(this.shapes.splice(e,1),this.failedPlacements++);t%e==0&&this.addNewShape(),t++}for(let e=this.shapes.length-1;e>=0;e--)Me(this.shapes[e]),this.shapes[e].postPlacement(this.shapes),this.shapes[e].kill&&this.shapes.splice(e,1)}addNewShape(){this.shapes.push(new it(this.shapes)),this.shapes[this.shapes.length-1].update(this.shapes),this.shapes[this.shapes.length-1].kill&&this.shapes.pop()}resetSize(){for(let e=0;e<this.shapes.length;e++)this.shapes[e].size=0,this.shapes[e].scalingProgress=0;this.scalingPhase=0}renderShapes(){this.growShapes();for(let e=0;e<this.shapes.length;e++)this.shapes[e].render()}growShapes(){for(let t=0;t<min(this.shapes.length,this.scalingPhase);t++)if(this.shapes[t].targetSize>this.shapes[t].size){this.shapes[t].scalingProgress+=.025;const s=min(this.shapes[t].scalingProgress,1);this.shapes[t].size=(0==(e=s)?0:1==e?1:(e/=.5)<1?.5*pow(2,10*(e-1)):.5*(2-pow(2,-10*--e)))*this.shapes[t].targetSize,this.shapes[t].size=min(this.shapes[t].size,this.shapes[t].targetSize)}var e;round(map(this.scalingPhase,0,this.shapes.length,30,5));frameCount%30==0&&this.scalingPhase++}drawVignette(){image(this.vignetteGfx,0,0,round(config.w),round(config.h))}keyboardSetup(){window.keyReleased=()=>{switch(keyCode){case 68:for(let e=0;e<this.shapes.length;e++)this.shapes[e].debug=!this.shapes[e].debug;break;case 83:save(`ilumz-${tokenData.tokenId}.png`);break;case 82:this.resetSize()}}}};let at;window.R=new t,window.config={},config.w=1280,config.h=720,config.shape={growth:[.1,6],starters:[1,10],spawnRate:[10,180],minPatternSize:120},config.border=-150,config.borderRange=[-50,-200],config.minimumSizeRange=[180,250],config.minimumSize=R.int(...config.minimumSizeRange),config.border=R.int(...config.borderRange),config.colourPallet=R.int(0,s.length-1),setup=()=>{config.canvas=createCanvas(round(window.innerWidth),round(window.innerWidth*(config.h/config.w))),randomSeed(R.num(0,99999)),noiseSeed(R.num(0,99999)),colorMode(RGB,255,255,255,1),ellipseMode(CENTER),rectMode(CENTER),scale(window.innerWidth/config.w),at=new rt},draw=()=>{scale(window.innerWidth/config.w),at.tick()},windowResized=()=>{resizeCanvas(round(window.innerWidth),round(window.innerWidth*(config.h/config.w)))};