// click var speed = 0.01; var deacceleration= 0.99; var minChange = 0.1; var maxChange = 150; var minExplosionAccel = 2; var maxExplosionAccel = 5; var pointAmount = 1000; var lineStrokeWeight = 0.1; var Point = function(x, y) { this.x = x; this.y = y; var lastx = x; var lasty = y; var dx = 0.1; var dy = 0.1; this.move = function() { lastx = x; lasty = y; dx = (dx + (mouseX - x) * speed) * deacceleration; dy = (dy + (mouseY - y) * speed) * deacceleration; if(dx > 0) { dx = max(dx, minChange); dx = min(dx, maxChange); } else { dx = min(dx, -minChange); dx = max(dx, -maxChange); } if(dy > 0) { dy = max(dy, minChange); dy = min(dy, maxChange); } else { dy = min(dy, -minChange); dy = max(dy, -maxChange); } if(abs(dx) < minChange) { dx = random(-4, 4); } if(abs(dy) < minChange) { dy = random(-4, 4); } x += dx; y += dy; if(x >= 450) { dx = -dx; x = 440; } else if(x < -50) { dx = -dx; x = -40; } if(y >= 450) { y = 440; dy = -dy; } else if(y < -50) { dy = -dy; y = -50; } }; this.draw = function() { if(deacceleration > 0) { stroke(255, 270-dist(x, y, mouseX, mouseY), sin(frameCount)*100 + 100); } else { stroke(random(0, 100), 270-dist(x, y, mouseX, mouseY), sin(frameCount)*155 + 100); } strokeWeight(lineStrokeWeight); line(lastx, lasty, x, y); }; this.explode = function() { dx = dx * random(minExplosionAccel, maxExplosionAccel); dy = dy * random(minExplosionAccel, maxExplosionAccel); }; }; var points = []; for(var i = 0; i < pointAmount; i++) { points.push(new Point(random(0, 400), random(0, 400))); points[i].explode(); } var draw = function() { if(deacceleration > 0) { fill(50, 0, 0, 100); } else { fill(0, 0, 50, 100); } noStroke(); rect(0, 0, 400, 400); for(var i = 0; i < points.length; i++) { var p = points[i]; p.move(); p.draw(); } }; var mousePressed = function() { deacceleration = -deacceleration; for(var i = 0; i < points.length; i++) { var p = points[i]; p.explode(); } }; var mouseReleased = function() { deacceleration = -deacceleration; }; var mouseOut = function() { deacceleration = abs(deacceleration); };