0x122cdf09…f8b5sent to0xa7d8d9ef…d270·#14,370,224·view on Etherscan
class CirclePlot{constructor(e,t){this.pos=e,this.scale=.01*t,this.width=2*t,this.radius=t;let o=map(this.radius,10,MYHALF,5,16);this.ringRadii=[];for(let e=0;e<2*o;e++){let t=map(e,0,2*o,0,1),i=map(t,0,1,0,this.radius);e%2==1&&append(this.ringRadii,i)}this.numRings=this.ringRadii.length,this.angle=R.random_num(0,TWO_PI),this.numStripes=int(this.radius/R.random_num(mainGapMin,mainGapMax)),R.random_bool(.2)&&(this.numStripes=int(1.5*this.numStripes)),this.plotType=getPlotType(),this.densities=[],this.rot=R.random_int(0,3),this.setDensities(this.plotType)}setDensities(e){if(e==EMPTY)this.densities=[0,0,0,0];else if(e==FULL){let e=R.random_num(.2,1);this.densities=[e,e,e,e]}else if(e==HALVED){let e=R.random_num(.2,1),t=R.random_num(.2,1);this.densities=[e,t,e,t],this.rot%2==1&&(this.densities=[e,e,t,t])}else if(e==HALF_QUARTERED){let e=R.random_num(.2,1),t=R.random_num(.2,1),o=R.random_num(.2,1);this.densities=[e,t,o,o],this.rot%2==1&&(this.densities=[e,t,o,t])}else if(e==QUARTERED){let e=R.random_num(.2,1),t=R.random_num(.2,1),o=R.random_num(.2,1),i=R.random_num(.2,1);this.densities=[e,t,o,i]}}draw(e){if(this.plotType>EMPTY){let t=getColor(R.random_dec());e.noStroke(),e.fill(red(t),green(t),blue(t),R.random_int(20,100)),e.circle(this.pos.x,this.pos.y,this.radius),this.drawConcentricCircles(e),this.drawAccessRoad(e),this.drawSwingArm(e)}}drawMainCircle(e){e.noStroke(),e.fill(bgColor),e.circle(this.pos.x,this.pos.y,this.radius-1),e.stroke(edgeColor),e.strokeWeight(mainSw),this.drawDottedCircle(e,this.pos,this.radius)}drawQuarterFieldLines(e){e.stroke(fgColor),e.strokeWeight(mainSw);let t=this.radius-2,o=[];for(let e=0;e<2*this.numStripes;e++){let i,r;if(this.rot%2==0){let o=map(e,0,2*this.numStripes,-t,t),s=sqrt(t*t-o*o);i=createVector(this.pos.x+o,this.pos.y+s),r=createVector(this.pos.x+o,this.pos.y-s)}else{let o=map(e,0,2*this.numStripes,-t,t),s=sqrt(t*t-o*o);i=createVector(this.pos.x-s,this.pos.y+o),r=createVector(this.pos.x+s,this.pos.y+o)}append(o,i),append(o,r)}let i=o.length;for(let t=0;t<i-1;t+=2){let i=resampleLine(o[t],o[t+1],mainGapMax);for(let t=0;t<i.length-1;t++){let o=i[t],r=i[t+1];p5.Vector.dist(this.pos,o);o.x<this.pos.x&&o.y<this.pos.y?this.drawFieldLine(e,o,r,this.densities[0],t):o.x>this.pos.x&&o.y<this.pos.y?this.drawFieldLine(e,o,r,this.densities[1],t):o.x<this.pos.x&&o.y>this.pos.y?this.drawFieldLine(e,o,r,this.densities[2],t):this.drawFieldLine(e,o,r,this.densities[3],t)}}}drawFieldLine(e,t,o,i,r){let s=i;s>.7?(e.point(t.x,t.y),e.point(.5*t.x+.5*o.x,.5*t.y+.5*o.y),e.point(t.x+1,t.y+1)):s>.4?e.line(t.x,t.y,o.x,o.y):e.point(t.x,t.y)}drawConcentricCircles(e){e.noFill(),e.stroke(fgColor),e.strokeWeight(.5*this.scale);for(let t=0;t<this.numRings;t++)this.drawDottedCircle(e,this.pos,this.ringRadii[t])}drawDottedCircle(e,t,o){let i=[];for(let e=0;e<180;e++){let r=map(e,0,180,0,TWO_PI),s=t.x+cos(r)*o,n=t.y+sin(r)*o;append(i,createVector(s,n))}let r=resample(i,1);for(let t=0;t<r.length-1;t++)if(t%3==0){let o=r[t],i=r[t+1];e.line(o.x,o.y,i.x,i.y)}}drawAccessRoad(e){let t,o,i=R.random_int(0,3);0==i?(t=.5*this.width,o=0):1==i?(t=.5*-this.width,o=0):2==i?(t=0,o=.5*this.width):(t=0,o=.5*-this.width);let r=map(this.radius,0,MYHALF,1,6);e.strokeWeight(r-mainSw),e.stroke(bgColor),e.line(this.pos.x,this.pos.y,this.pos.x+t,this.pos.y+o),e.fill(bgColor),e.noStroke(),e.circle(this.pos.x,this.pos.y,r-mainSw)}drawSwingArm(e){let t=.5*this.scale;e.stroke(fgColor),e.strokeWeight(t);for(let o=0;o<this.numRings;o++){let i=this.ringRadii[o],r=Math.cos(this.angle)*(i-.5*this.scale),s=Math.sin(this.angle)*(i-.5*this.scale),n=Math.cos(this.angle)*(i+.5*this.scale),l=Math.sin(this.angle)*(i+.5*this.scale);e.circle(this.pos.x+r,this.pos.y+s,.5*t),e.circle(this.pos.x+n,this.pos.y+l,.5*t)}let o=Math.cos(this.angle)*this.radius*.995,i=Math.sin(this.angle)*this.radius*.995;e.line(this.pos.x,this.pos.y,this.pos.x+o,this.pos.y+i),e.stroke(bgColor),e.line(this.pos.x-.2*SUN_DIRECTION.x,this.pos.y-.2*SUN_DIRECTION.y,this.pos.x+o-.2*SUN_DIRECTION.x,this.pos.y+i-.2*SUN_DIRECTION.y)}}function reset(e){print(tokenData.hash),print(tokenData.tokenId),dim=Math.min(windowWidth,windowHeight),hdim=dim/2,buffer=createCanvas(dim,dim),pixelDensity(e),myFrameCount=0,R=new Random,setupFeatures(),setupColors(),noiseSeed(R.random_dec()),noiseDetail(3,.3),nox=R.random_num(500,5e3),noy=R.random_num(500,5e3),mainRand=R.random_dec(),mainSw=.5,mainGapMin=2,mainGapMax=2,landBg=createGraphics(MYSIZE,MYSIZE),landBg.ellipseMode(RADIUS),setupWeather(),setupOverlay(),setupRiver(),setupPlots(),setupPoisson(),setupContours(),setupGrid(),setupRail(),myFrameCount=0,introAnim=0,outroAnim=1}function setup(){reset(2)}function setupFeatures(){let e=R.random_dec();BIOME=e<.15?FARMLAND:e<.35?SWAMP:e<.5?DESERT:e<.7?ARCTIC:MOUNTAINS,RENDER_TYPE=R.random_bool(.9)?0:2;let t,o=[1,7,11,14,16,17,19,20],i=[0,12,13,15,20],r=[3,10,19,20],s=R.random_dec();PALETTE_ID=s<.15?0:s<.3?1:s<.4?2:s<.45?3:s<.5?4:s<.6?5:R.random_int(6,PALETTES.length-2),2==RENDER_TYPE&&(PALETTE_ID=20),BIOME==DESERT?(t=R.random_int(0,o.length-1),PALETTE_ID=o[t]):BIOME==ARCTIC?(t=R.random_int(0,i.length-1),PALETTE_ID=i[t]):BIOME==SWAMP&&(t=R.random_int(0,r.length-1),PALETTE_ID=r[t]);let n=R.random_dec();if(COMP=n<.3?0:n<.6?1:n<.8?2:n<.9?3:n<.98?4:5,GRID_TYPE=R.random_int(0,GRID_TYPES.length-1),BIOME==FARMLAND&&(GRID_TYPE=0),HISTORY_TYPE=R.random_int(0,HISTORY_TYPES.length-1),BIOME==FARMLAND)CITY_TYPE=REMOTE,LAND_TYPE=R.random_bool(.8)?LAND_MIXED:LAND_SPARSE;else if(BIOME==SWAMP){let e=R.random_dec();CITY_TYPE=e<.1?REMOTE:e<.3?RURAL:TOWN,e=R.random_dec(),LAND_TYPE=e<.4?LAND_SWAMP:e<.8?LAND_MIXED:LAND_SPARSE}else if(BIOME==DESERT){let e=R.random_dec();CITY_TYPE=e<.1?REMOTE:e<.3?RURAL:TOWN,e=R.random_dec(),LAND_TYPE=e<.4?LAND_DESERT:e<.8?LAND_MIXED:LAND_SPARSE}else if(BIOME==ARCTIC){let e=R.random_dec();CITY_TYPE=e<.1?REMOTE:e<.4?RURAL:TOWN,LAND_TYPE=LAND_ARCTIC}else if(BIOME==MOUNTAINS){let e=R.random_dec();CITY_TYPE=e<.1?REMOTE:e<.35?RURAL:e<.95?TOWN:TWIN_TOWNS,LAND_TYPE=R.random_bool(.2)?LAND_DESERT:LAND_MOUNTAIN}COLOR_TYPE=R.random_int(0,COLOR_TYPES.length-1),0==COLOR_TYPE?HISTORY_CONTRAST=.4:HISTORY_CONTRAST=.8;let l=R.random_dec();MEANDER_TYPE=l<.5?EXCESSIVE:l<.9?REALISTIC:CLOSEUP,LINE_TYPE=R.random_int(0,LINE_TYPES.length-1),0==LINE_TYPE&&R.random_bool(.5)&&(LINE_TYPE=1),MEANDER_TYPE==CLOSEUP&&(LINE_TYPE=1),DRIFTER=!!R.random_bool(.4),MEANDER_TYPE==CLOSEUP&&(DRIFTER=!1),TREASURE_MAP=!!R.random_bool(.01),HAS_BORDER=!!R.random_bool(.7),HAS_RAILROAD=!!R.random_bool(.05),CITY_TYPE==REMOTE&&(HAS_RAILROAD=!1),HAS_CONTOURS=!!R.random_bool(.2),HAS_POISSON=!!R.random_bool(.2),HEAVY_SEASON_FREQ=0,R.random_bool(.2)&&(HEAVY_SEASON_FREQ=R.random_num(0,.2))}function setupColors(){createColors(PALETTE_ID),INVERTED=!1;let e=R.random_int(2,4),t=0;R.random_dec()<.25&&(INVERTED=!0,e=R.random_int(0,2),t=4),fgColor=cs[t],bgColor=cs[e],2==RENDER_TYPE&&(fgColor=cs[0],bgColor=cs[4],INVERTED&&(fgColor=cs[4],bgColor=cs[0])),INVERTED?(edgeColor=lerpColor(bgColor,color(255),.4),dkFgColor=lerpColor(fgColor,color(0),.5),ltFgColor=lerpColor(fgColor,color(255),.5),dkBgColor=lerpColor(bgColor,color(0),.5),ltBgColor=lerpColor(bgColor,color(255),.5)):(edgeColor=lerpColor(bgColor,color(0),.4),dkFgColor=lerpColor(fgColor,color(0),.5),ltFgColor=lerpColor(fgColor,color(255),.5),dkBgColor=lerpColor(bgColor,color(0),.5),ltBgColor=lerpColor(bgColor,color(255),.5)),highlightColor=color(255,255,255,30),shadowColor=color(0,0,0,60)}function setupWeather(){SUN_DIRECTION=createVector(R.random_num(-1,1),R.random_num(.3,1)),SUN_DIRECTION.normalize(),2==RENDER_TYPE&&(SUN_DIRECTION=createVector(R.random_num(-1,1),R.random_num(.3,1)),SUN_DIRECTION.normalize())}function setupOverlay(){overlayFg=createGraphics(MYSIZE,MYSIZE)}function setupRiver(){riverDur=450,DRIFTER&&(riverDur=650),riverSpacing=R.random_int(10,25),5==COMP&&(riverSpacing=8),MEANDER_TYPE==CLOSEUP&&(riverSpacing=45),riverSpeed=float(riverSpacing)*R.random_num(.3,.4)*5,MEANDER_TYPE==CLOSEUP&&(riverSpeed*=.85),riverWidth=.8*riverSpacing+1,riverTanLerp=.15,riverHistoryIter=R.random_int(5,10),riverCollSpacing=int(riverSpacing/2)+3;let e=2*float(riverSpacing);MEANDER_TYPE==CLOSEUP&&(e*=1.75),riverCollDistSqrd=e*e,riverStartFrame=3,riverHistoryCount=0,riverBg=createGraphics(MYSIZE,MYSIZE),riverFg=createGraphics(MYSIZE,MYSIZE),river=new River(COMP),riverBg.background(0,0,0,0),riverFg.background(0,0,0,0)}function setupPlots(){plots=[],plotsImg=createImage(SIMSIZE,SIMSIZE),plotBg=createGraphics(MYSIZE,MYSIZE),plotBg.ellipseMode(RADIUS),plotGrowthSpeed=.65,plotTypeThresh=.4,BIOME==SWAMP?plotTypeThresh=R.random_num(.3,.5):BIOME==DESERT?plotTypeThresh=1:BIOME==MOUNTAINS&&(plotTypeThresh=R.random_num(.2,.3)),plotStartFrame=riverDur}function setupPoisson(){poissonStartFrame=2,poisson=new FastPoisson}function setupContours(){contoursStartFrame=3,contours=new Contours}function setupGrid(){0!=GRID_TYPE&&makeGrid(fgColor,landBg)}function setupRail(){railStartFrame=350}function setupQuadTree(){R.random_int(10,40);let e=new Rectangle(MYHALF,MYHALF,MYHALF,MYHALF);qTree=new QuadTree(e,0,0);let t,o=map(riverSpacing,8,25,0,3)%3;t=0==o?R.random_int(225,440):1==o?R.random_int(135,185):R.random_int(63,104);for(let e=0;e<t;e++){addPointToQuadTree(new Point(R.random_num(100,MYSIZE-100),R.random_num(100,MYSIZE-100)))}let i=river.getPs();for(let e=0;e<i.length;e+=3){let t=i[e],o=R.random_num(-50,50),r=R.random_num(-50,50);addPointToQuadTree(createVector(t.x+o,t.y+r))}qRects=[],qTree.getRectangles(qRects),qUpdated=!0}function setupField(){field=new Field(qRects)}function addPointToQuadTree(e){qTree.insert(e),qRects=[],qTree.getRectangles(qRects),qUpdated=!0}function keyTyped(){"d"==key||("r"==key?(SAVE_PRINT_RES=!1,SAVE_ALT_PRINT_RES=!1,reset(2)):"s"==key?SAVE_IMAGE=!0:"h"==key?(reset(8),SAVE_PRINT_RES=!0):"H"==key&&(reset(8),SAVE_ALT_PRINT_RES=!0))}