memoscan
← all memos

Memo 0x820ea0a5…5df10b on Ethereum

if(i){if(s.shape.length<a.upToIdx){if(distSq(a.shape[s.shape.length]??a.shape[a.shape.length-1],i.point)>gp.distanceSqOK){if(a.shape.length<=s.shape.length)continue;s.distance=dist(s.shape[s.shape.length-1].x,s.shape[s.shape.length-1].y,a.shape[s.shape.length].x,a.shape[s.shape.length].y),a.distance=s.distance,s.upToIdx=s.shape.length,a.shape=a.shape.slice(0,s.shape.length);let e=dist(i.point.x,i.point.y,s.shape[s.shape.length-1].x,s.shape[s.shape.length-1].y),t=p5.Vector.lerp(s.shape[s.shape.length-1],i.point,s.distance/e);s.addPoint(t);continue}s.addPoint(i.point);let e=reflect(s,i,0);e&&(s.dir=e,s.upToIdx=s.shape.length,q.push([s,a]));continue}{0==e&&(a.distance+=r.speed),s.distance=a.distance,s.upToIdx=a.upToIdx;let t=dist(i.point.x,i.point.y,s.shape[s.shape.length-1].x,s.shape[s.shape.length-1].y);if(s.distance<t){let e=p5.Vector.lerp(s.shape[s.shape.length-1],i.point,s.distance/t);s.addPoint(e);continue}s.addPoint(i.point),s.distance=0,s.upToIdx=s.shape.length;continue}}s.upToIdx=a.upToIdx,s.distance=a.distance}return t}function reflect(e,t,s=0){let a=e.dir,n=allParams[e.paramIdx],r=t.dir,o=r.copy(),i=r.copy().rotate(PI/2),l=a.copy().reflect(i),p=a.copy();if(abs(abs(o.angleBetween(p))-PI/2)<1e-8)return;let h=s*(p5.Vector.cross(a,r).z<0?1:-1),u=-(p5.Vector.cross(a,l).z<0?-1:1);return 2==n.angle?a.rotate(-(PI/2+.01)*u).rotate(h):3==n.angle?a.rotate(-(2*PI/3+.01)*u).rotate(h):4==n.angle?a.rotate(-(PI-.02)*u).rotate(h):5!=n.angle?l.rotate(h):void 0}function mouseClicked(){saving||mouseX<gp.margin/2||mouseX>W-gp.margin/2||mouseY<gp.margin/2||mouseY>H-gp.margin/2||setupParams(void 0,{bboxVis:1,n:20,offset:rnd(TAU),x:mouseX,y:mouseY,angle:rnd([1])})}function parseBBox(e){let t=e.split(";").map((e=>e.split(",").map((e=>parseFloat(e))))),s=[];for(let e=0;e<t.length;e++){let a=[];for(let s=0;s<t[e].length;s+=2)a.push(vec(t[e][s],t[e][s+1]));s.push(a)}return polys=s.map((e=>new Poly(e,0,0,W,0,0,-1,gp.strokeColor))),polys.map((e=>e.vis=1)),polys}function touchMoved(){if(!saving){if(1==touches.length){let e=vec(mouseX,mouseY);mousePath.push(e)}return!1}}function keyPressed(){"p"==key&&saveNamed(),"s"==key&&saveMySVG(),"c"==key&&(decTime=null==decTime?0:!decTime,timeCounter=25),key>="1"&&key<="9"&&(gp.i=1e3*parseInt(key)),"-"==key?gp.i=max(gp.i-1e3,500):"="==key&&(gp.i+=1e3)," "==key&&(gp.animate=!gp.animate),keyCode==UP_ARROW?gp.speed*=2:keyCode==DOWN_ARROW?gp.speed=max(gp.speed/=2,1/16):keyCode==RIGHT_ARROW?gp.animate?gp.rateMultiplier*=1.25:allParams.map((e=>e.offset+=.1)):keyCode==LEFT_ARROW&&(gp.animate?gp.rateMultiplier*=.75:allParams.map((e=>e.offset-=.1))),"f"==key&&resizeToFit(),"m"==key&&(mousePath=[]),"n"==key&&(gp.mousePathLength=gp.mousePathLength>200?100:1/0),"b"==key&&(gp.backgroundColor=gp.backgroundColor?0:255,gp.strokeColor=gp.strokeColor?0:255)}function resizeToFit(){W=window.innerWidth,H=window.innerHeight;for(let e=0;e<allParams.length;e++){let t=allParams[e];t.x=map(t.x,gp.margin/2,width-gp.margin/2,gp.margin/2,W-gp.margin/2),t.y=map(t.y,gp.margin/2,height-gp.margin/2,gp.margin/2,H-gp.margin/2)}resizeCanvas(W,H)}saving=!1;let R,rnd,rint,choice,sn,rexp,rtri,wPick,vec,rndvec,W,H,timeCounter=0;function timeText(){timeCounter<=0||(timeCounter--,push(),textSize(24*S),textAlign(CENTER,CENTER),fill(255),stroke(0),strokeWeight(S),decTime?text("decimal time",W/2,H/2):text("standard time",W/2,H/2),pop())}function saveSVGElement(e,t){e.setAttribute("xmlns","http://www.w3.org/2000/svg");var s=e.outerHTML,a=new Blob(['<?xml version="1.0" standalone="no"?>\r\n',s],{type:"image/svg+xml;charset=utf-8"}),n=URL.createObjectURL(a),r=document.createElement("a");return r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),e}function createSVGCanvas(){ns="http://www.w3.org/2000/svg",svg=document.createElementNS(ns,"svg"),groups=[],svg.setAttribute("width",width+"px"),svg.setAttribute("height",height+"px"),svg.setAttribute("viewBox","0 0 "+W+" "+H),svg.setAttribute("style","background-color:white;");let e=document.createElementNS(ns,"rect");e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("width",W),e.setAttribute("height",H),e.setAttribute("fill","white");let t=document.createElementNS(ns,"g");t.appendChild(e),t.setAttribute("id","rays"),t.setAttribute("style",`stroke-linejoin:bevel; fill:none; stroke-width:${S}; stroke:black;`),svg.appendChild(t);let s=paramsToShapes();return""!=uBB&&parseBBox(uBB).map((e=>s.push(e.shape))),s.map((e=>{let s=e;if(!s||!s.length)return;let a=document.createElementNS(ns,"path"),n=`M ${s[0].x} ${s[0].y} `;for(let e=1;e<s.length;e++)n+=`L ${s[e].x} ${s[e].y} `;a.setAttribute("d",n),t.appendChild(a)})),svg}function saveMySVG(){let e=`lightbreak-${parseInt(tokenData.tokenId)%1e6}.svg`;saving=!0,saveSVGElement(createSVGCanvas(),e),saving=!1}function paramsToShapes(){let e=[];return allParams.map((t=>{if(2==t.n){let[s,a]=t.oldrays,n=[...s.shape.reverse(),...a.shape];e.push(n)}else e.push(...t.oldrays.map((e=>e.shape)))})),[...e,mousePoly.shape]}class GridQT{constructor(e,t,s,a,n){this.x=e,this.y=t,this.width=s,this.height=a,this.gap=n,this.grid=[],this.allCells=[];for(let e=0;e<this.width/n;e++){this.grid.push([]);for(let t