Follower [] followers; boolean mPressed=false; int r,g,b; void setup() { size(600,600); background(#333333); buildFollowers(int(random(5,70))); noFill(); } void buildFollowers(int pVal) { getInitColor(); followers=new Follower[pVal]; for(int i=0;i=1) { followers[i].followPrevious(followers[i-1]); strokeWeight(2); strokeCap(SQUARE); line(followers[i].myLoc.x,followers[i].myLoc.y,followers[i-1].myLoc.x,followers[i-1].myLoc.y); } else { followers[i].followMouse(); } } } } void mouseReleased() { mPressed=false; } void keyPressed() { background(#333333); buildFollowers(int(random(5,70))); } class Follower { float ballSize=random(3,10); int myOrder,r,g,b; color myColor= color(r,g,b); Vector myLoc; Follower(int pOrd,int pR, int pG, int pB) { r=pR+int(random(-10,10)); g=pG+int(random(-10,10)); b=pB+int(random(-10,10)); myOrder=pOrd; myLoc=new Vector(width/2,height/2); } void followMouse() { float dx=mouseX-myLoc.x; float dy=mouseY-myLoc.y; myLoc.x+=dx/myOrder; myLoc.y+=dy/myOrder; } void followPrevious(Follower pF) { float dx=pF.myLoc.x-myLoc.x; float dy=pF.myLoc.y-myLoc.y; myLoc.x+=dx/myOrder; myLoc.y+=dy/myOrder; } void gotoMouse() { myLoc.x=mouseX; myLoc.y=mouseY; } } class Vector{ float x; float y; Vector (float pX, float pY) { x=pX; y=pY; } void moveX (float pVal) { x+=pVal; x=constrain(x,0,width); } void moveY (float pVal) { y+=pVal; y=constrain(y,0,height); } }