// A simple Particle class class Particle { PVector loc; PVector vel; PVector acc; float dropsize; float timer; // Another constructor (the one we are using here) Particle(PVector l) { acc = new PVector(0,0.05,0); float raining = map(RainNumber, 0, 100, 0, 0.1); vel = new PVector(0,random(-raining,raining),0); loc = l.get(); dropsize = map(RainNumber, 0, 100, 0.1,1); timer = 145.0; } void run() { update(); render(); } // Method to update location void update() { vel.add(acc); loc.add(vel); timer -= 1.0; } // Method to display void render() { ellipseMode(CENTER); stroke(255,timer); // fill(100,timer); // ellipse(loc.x,loc.y,dropsize,8*dropsize); displayVector(vel,loc.x,loc.y,2); } // Is the particle still useful? boolean dead() { if (timer <= 0.0) { return true; } else { return false; } } void displayVector(PVector v, float x, float y, float scayl) { pushMatrix(); float arrowsize = 2; // Translate to location to render vector translate(x,y); stroke(255); // Call vector heading function to get direction (note that pointing up is a heading of 0) and rotate rotate(v.heading2D()); // Calculate length of vector & scale it to be bigger or smaller if necessary float len = v.mag()*scayl; // Draw three lines to make an arrow (draw pointing up since we've rotate to the proper direction) line(0,0,len,0); // line(len,0,len-arrowsize,+arrowsize/2); // line(len,0,len-arrowsize,-arrowsize/2); popMatrix(); } }