0x122cdf09…f8b5sent to0xa7d8d9ef…d270·#14,464,488·view on Etherscan
function drawRiverGeo(e,t,r,i,s,o,n,a,l){i.beginShape(),o?(i.stroke(a),i.strokeWeight(.5*n)):i.noStroke(),i.fill(s);let h=e.length;for(let s=0;s<h;s++){let o=e[s].x,n=e[s].y;o=(o-MYHALF)*r+MYHALF,n=(n-MYHALF)*r+MYHALF,0==s&&i.curveVertex(o+t.x,n+t.y),i.curveVertex(o+t.x,n+t.y)}i.endShape(CLOSE),l||5!=COMP||(i.stroke(s),i.strokeWeight(riverWidth*introAnim*.9),i.noFill(),i.line(riverStartPos.x,riverStartPos.y,riverEndPos.x,riverEndPos.y))}function drawScreenOverlay(e,t,r,i){e.stroke(t),e.strokeWeight(i);for(let t=0;t<MYSIZE;t+=r)e.line(0,t,MYSIZE,t)}function drawDottedRiverLine(e,t,r,i){r.stroke(i),r.strokeWeight(t),r.noFill();let s=resample(e,1);for(let e=0;e<s.length-1;e++)if(e%4<=1){let t=s[e],i=s[e+1];r.line(t.x,t.y,i.x,i.y)}}function distanceToRiver(e){let t=river.getPs(),r=2e3;for(let i=0;i<t.length;i+=3){let s=t[i],o=p5.Vector.dist(s,e);o<r&&(r=o)}return r}function drawBuilding(e,t,r,i,s,o){let n=map(pow(R.random_dec(),2),0,1,2,6),a=map(pow(R.random_dec(),2),0,1,2,6),l=3;R.random_bool(.01)&&(n*=3,a*=3,l*=2);let h=.6*i,c=.6*-r;R.random_bool(.5)&&(h=.6*-i,c=.6*r);let d=createVector(e+h*l,t+c*l),p=createVector(d.x+h*a,d.y+c*a),x=createVector(p.x+r*n,p.y+i*n),y=createVector(d.x+r*n,d.y+i*n);o.beginShape(),o.fill(s),o.noStroke(),o.vertex(d.x,d.y),o.vertex(p.x,p.y),o.vertex(x.x,x.y),o.vertex(y.x,y.y),o.endShape()}function createPlotNetwork(e,t){let r=350;0==CITY_TYPE?r=0:1==CITY_TYPE?r=5:2==CITY_TYPE&&(r=50);let i=e.length,s=R.random_num(-.4,.4);for(let o=0;o<r;o++){let r=R.random_int(50,i-50);1==CITY_TYPE?r=R.random_int(int(i/2)-10,int(i/2)+10):2==CITY_TYPE?(r=R.random_int(int(i/2)-20,int(i/2)+20),5==COMP&&(r=R.random_int(int(i/4)-10,int(i/4)+10))):3==CITY_TYPE&&(r=R.random_bool(.5)?R.random_int(int(.3*i)-10,int(.3*i)+10):R.random_int(int(.7*i)-10,int(.7*i)+10));let o=e[r].x,n=e[r].y,a=t[r].x,l=t[r].y,h=atan2(l,a);if(R.random_bool(.5)&&(h+=PI),BIOME==DESERT){let e=R.random_int(0,3);h=0+HALFPI*float(e)+s}addPlot(o/2,n/2,h,color(0),0)}}function addPlot(e,t,r,i,s){let o=wrapTheta(r),n=new Plot(e,t,o,i,s);plots.push(n)}function makeGrid(e,t){let r=R.random_int(8,50);2==GRID_TYPE&&(r=R.random_int(12,16));let i=r,s=1.5;if(3==GRID_TYPE&&(s=65),t.noFill(),t.stroke(fgColor),t.strokeWeight(.25*mainSw),3!=GRID_TYPE)for(let e=0;e<r;e++){let o=map(e,0,r-1,0,MYSIZE),n=map(e+1,0,r-1,0,MYSIZE);for(let e=0;e<i;e++){let r=map(e,0,i-1,0,MYSIZE),a=map(e+1,0,i-1,0,MYSIZE);1==GRID_TYPE&&(t.circle(o,r,1),t.circle(o,r,.5)),2==GRID_TYPE&&(t.line(o,r+.4*s,o,r+2*s),t.line(o+.4*s,r,o+2*s,r),t.line(o,a-.4*s,o,a-2*s),t.line(n-.4*s,r,n-2*s,r))}}else{for(let e=0;e<r;e++){let i=map(e,0,r-1,0,MYSIZE),s=createVector(i,0),o=createVector(i,MYSIZE),n=[];append(n,s),append(n,o),n=resample(n,3);for(let e=0;e<n.length-1;e+=2){let r=n[e],i=n[e+1];t.line(r.x,r.y,i.x,i.y)}}for(let e=0;e<i;e++){let r=map(e,0,i-1,0,MYSIZE),s=createVector(0,r),o=createVector(MYSIZE,r),n=[];append(n,s),append(n,o),n=resample(n,3);for(let e=0;e<n.length-1;e+=2){let r=n[e],i=n[e+1];t.line(r.x,r.y,i.x,i.y)}}}}function makeTreasure(){let e=river.getPs(),t=e[R.random_int(max(e.length/2-20,1),min(e.length/2+20,e.length-2))],r=[];append(r,t.copy()),append(r,treasurePos.copy()),r=resample(r,50);for(let e=1;e<r.length-1;e++)r[e].x+=125*getNoise(r[e],.03),r[e].y+=125*getNoise(r[e],.03);return r=smoothSubdiv(r),r=resample(r,5)}function xMarksTheSpot(e){let t=treasurePos.x,r=treasurePos.y;e.stroke(edgeColor),e.strokeWeight(2.25),e.strokeCap(SQUARE),e.line(t-3,r-3,t+3,r+3),e.line(t+3,r-3,t-3,r+3)}function outOfBounds(e,t){let r=!1;return e<=2&&(r=!0),t<=2&&(r=!0),e>=SIMSIZE-3&&(r=!0),t>=SIMSIZE-3&&(r=!0),r}function getPlotType(){let e=R.random_dec(),t=0;return t=e<.1?0:e<.5?1:e<.7?2:e<.8?3:4}class RectPlot{constructor(e,t,r,i){this.p0=createVector(e,t),this.p1=createVector(r,i),this.x0=this.p0.x,this.y0=this.p0.y,this.x1=this.p1.x,this.y1=this.p1.y,this.center=p5.Vector.lerp(this.p0,this.p1,.5),this.w=r-e,this.h=i-t,this.density=0,this.innerDensity=0,this.radius=this.w/2-.01*this.w*2,this.rect=new Rectangle(this.center.x,this.center.y,this.w/2,this.h/2)}setDensity(e){this.density=e}split(e){let t=[];for(let r=0;r<e;r++){let i=map(r,0,e,this.x0,this.x1),s=map(r+1,0,e,this.x0,this.x1),o=new RectPlot(i,this.y0,s,this.y1);append(t,o)}return t}draw(e,t,r){let i=getColor(R.random_dec());e.noStroke(),e.fill(red(i),green(i),blue(i),R.random_int(20,100)),e.rect(this.x0,this.y0,this.w,this.h),this.drawDottedLine(e,i,createVector(this.x0,this.y0),createVector(this.x1,this.y0)),this.drawDottedLine(e,i,createVector(this.x1,this.y0),createVector(this.x1,this.y1)),this.drawDottedLine(e,i,createVector(this.x1,this.y1),createVector(this.x0,this.y1)),this.drawDottedLine(e,i,createVector(this.x0,this.y1),createVector(this.x0,this.y0)),R.random_bool(.75)&&this.drawDottedFill(e,i,this.rect)}drawDottedLine(e,t,r,i){let s=p5.Vector.sub(i,r);s.normalize();let o=createVector(-s.y,s.x);e.stroke(t),e.strokeWeight(.5*mainSw);let n=[];append(n,r),append(n,i);let a=resample(n,1),l=1.5;for(let t=0;t<a.length-1;t++)if(t%3==0){let r=a[t],i=a[t+1];e.line(r.x+o.x*l,r.y+o.y*l,i.x+o.x*l,i.y+o.y*l)}e.stroke(0,0,0,50),e.line(r.x,r.y,i.x,i.y)}drawDottedFill(e,t,r){let i=createVector(r.x-r.w,r.y-r.h),s=createVector(r.x-r.w,r.y+r.h),o=createVector(r.x+r.w,r.y-r.h),n=[];append(n,i),append(n,s),e.stroke(t),e.strokeWeight(.5*mainSw);let a=resample(n,1);for(let t=1;t<a.length-1;t+=2){let r=a[t],i=createVector(o.x,r.y),s=[];append(s,r),append(s,i);let n=resample(s,.5);for(let t=0;t<n.length-1;t++)if(t%3==0){let r=n[t],i=n[t+1];e.line(r.x,r.y,i.x,i.y)}}}}class Point{constructor(e,t){this.x=e,this.y=t,this.p=createVector(e,t)}}class Line{constructor(e,t,r,i){this.x0=e,this.y0=t,this.x1=r,this.y1=i,this.p0=createVector(e,t),this.p1=createVector(r,i),this.d=p5.Vector.dist(this.p0,this.p1)}}class Rectangle{constructor(e,t,r,i){this.x=e,this.y=t,this.w=r,this.h=i}contains(e){return e.x>=this.x-this.w&&e.x<this.x+this.w&&e.y>=this.y-this.h&&e.y<this.y+this.h}}class Contours{constructor(){this.field=[],this.res=7,this.cols=1+MYSIZE/this.res,this.rows=1+MYSIZE/this.res;for(let e=0;e<this.cols;e++){let e=[];for(let t=0;t<this.rows;t++)e.push(0);this.field.push(e)}}getXYDist(e,t,r){let i=createVector(e,t),s=111111;for(let e=0;e<r.length;e++){let t=r[e],o=p5.Vector.sub(t,i).mag();o<s&&(s=o)}return s}solve(e){let t=7,r=7,i=1.4;BIOME==FARMLAND||BIOME==DESERT?(t=5,r=5,i=1.4):BIOME==MOUNTAINS&&(t=15,r=15,i=.225);for(let s=0;s<this.cols;s++){let o=map(s,0,this.cols-1,0,t),n=map(s,0,this.cols-1,0,MYSIZE);for(let t=0;t<this.rows;t++){let a=map(t,0,this.rows-1,0,r),l=map(t,0,this.rows-1,0,MYSIZE),h=this.getXYDist(n,l,e);this.field[s][t]=float(h/1e3+noise(o+123.45,a+456.78)*i)}}}drawLine(e,t,r){let i=p5.Vector.sub(t,r),s=i.mag();i.normalize(),e.line(t.x,t.y,t.x-i.x*s*.5,t.y-i.y*s*.5)}draw(e){let t=this.res,r=.25;BIOME==MOUNTAINS?r=.05:BIOME!=FARMLAND&&BIOME!=DESERT||(r=.25);for(let i=-1;i<1.25;i+=r){e.stroke(edgeColor),e.strokeWeight(map(i,-1,1.25,.1,.25));for(let r=0;r<this.cols-1;r++)for(let s=0;s<this.rows-1;s++){let o=this.field[r][s]-i,n=this.field[r+1][s]-i,a=this.field[r+1][s+1]-i,l=this.field[r][s+1]-i,h=r*t,c=s*t,d=createVector(h+t*o/(o-n),c),p=createVector(h+t,c+t*n/(n-a)),x=createVector(h+t*(1-a/(a-l)),c+t),y=createVector(h,c+t*(1-l/(l-o)));switch(this.getState(o,n,a,l)){case 1:this.drawLine(e,x,y);break;case 2:this.drawLine(e,p,x);break;case 3:this.drawLine(e,p,y);break;case 4:this.drawLine(e,d,p);break;case 5:this.drawLine(e,d,y),this.drawLine(e,p,x);break;case 6:this.drawLine(e,d,x);break;case 7:case 8:this.drawLine(e,d,y);break;case 9:this.drawLine(e,d,x);break;case 10:this.drawLine(e,d,p),this.drawLine(e,x,y);break;case 11:this.drawLine(e,d,p);break;case 12:this.drawLine(e,p,y);break;case 13:this.drawLine(e,p,x);break;case 14:this.drawLine(e,x,y)}}}}getState(e,t,r,i){return(e>0?8:0)+(t>0?4:0)+(r>0?2:0)+(i>0?1:0)}}