for(_='-1)||7ttribE(IAG,1.^src`.1,jP[i]~+=@or?()K],J.0OerNNtexAER),QQi=0;iU=vec4(Tat%P[i+$ra#M%h.Z=Zabs(vYg.XQXclear,-O4+O8(34962,uffNrog#m(pA.&&()*=Oincre%eShadN=(35631~=Ar#y*Z#ndomK,-O08+O12@$tion0, ^^);}",Q%tach,QshadNSource(,`Qcompile(void maK{gl_$1]-1+2XbD%anew Flo%32(PQ35048QXwith(P=[JA={x: y: r:jnx:,ny:},g)`="%tribute vec2 a;PotSize=2.;gl_PosiTa.x,a.yv3vvQ`="F#gCol?T1.^f2ffQp=P(vfQlkPQuseP);f?G=XgetAELoca,"a"U++<1e4;)P.push(,);XbdBXBKQvRPotNG,2,5126, 24,0QXenableVRGQXviewp?t( nNWidth,nNHeightCol?( 1Qfunc rK{f?(requestAnimaF#me(r(16384Qvx=nx-x,vy=ny-y,axYx)>jayYy)>jC=ax&&ayvx3)vy3x@vxy@vyr@vxQ!Cnx=ny=U<6e4;i@6)dx=~-x,dy=-y,D=Zsqrt(dx*dx+dy*dyQ$2]4J$3]5J$4]9,$5]1,D<.x+dx/D*r)=y+dy/D*rQ~2J3J~>7~<-1Q>1=7<-1=1);d#ws( 1e4)}K;';G=/[-X-Z#-%TUQRNOJK?@~j`^GE7]/.exec(_);)with(_.split(G))_=join(shift());eval(_)
P = [];
A = {x:.0,y:.0,r:.1,nx:-1+Math.random()*(1- -1),ny:-1+Math.random()*(1- -1)};
with(g){
src = 'attribute vec2 a;void main(){gl_PointSize=2.;gl_Position=vec4(a.x,a.y,1.,1.);}';
vShader = createShader(35633);
shaderSource(vShader, src);
compileShader(vShader);
src = 'void main(){gl_FragColor=vec4(1.,1.,1.,1.);}';
fShader = createShader(35632);
shaderSource(fShader, src);
compileShader(fShader);
program = createProgram();
attachShader(program, vShader);
attachShader(program, fShader);
linkProgram(program);
useProgram(program);
}
IA = g.getAttribLocation(program, 'a');
for (i=0;i++<10e3;) {
P.push(
-1. + Math.random() * (1. - -1.),
-1. + Math.random() * (1. - -1.),
-.04 + Math.random() * (.04 - -.04),
-.04 + Math.random() * (.04 - -.04),
-.008 + Math.random() * (.004 - -.008),
-.008 + Math.random() * (.004 - -.008)
);
}
g.bindBuffer(34962,g.createBuffer());
g.bufferData(34962,new Float32Array(P),35048);
g.vertexAttribPointer(IA,2,5126,0,24,0);
g.enableVertexAttribArray(IA);
g.viewport(0,0,innerWidth,innerHeight);
g.clearColor(0.,0.,0.,1.);
(function _() {
requestAnimationFrame(_);
g.clear(16384);
vx=A.nx-A.x;
vy=A.ny-A.y;
ax=Math.abs(vx)>.1;
ay=Math.abs(vy)>.1;
C = ax && ay && (vx*=.03) && (vy*=.03) && (A.x+=vx) && (A.y+=vy) &&(A.r+=vx);
!C && (A.nx=-1+Math.random()*(1- -1)) && (A.ny=-1+Math.random()*(1- -1));
for (i = 0; i < 60000; i += 6) {
dx = P[i]-A.x;
dy = P[i+1]-A.y;
D = Math.sqrt(dx*dx+dy*dy);
P[i+2]+=P[i+4];
P[i+3]+=P[i+5];
P[i+4]*=.09;
P[i+5]*=.01;
(D<0.1)&&(P[i] = A.x+dx/D*A.r)&&(P[i+1] = (A.y+dy/D*A.r));
P[i]+=P[i+2]; P[i+1]+=P[i+3];
(P[i]>1) && (P[i]=-1) || (P[i]<-1) && (P[i]=1);
(P[i+1]>1) && (P[i+1]=-1) || (P[i+1]<-1) && (P[i+1]=1);
}
g.bufferData(34962,new Float32Array(P),35048);
g.drawArrays(0,0,10e3);
}());