topical media & game development

talk show tell print

graphic-processing-site-examples-Topics-Simulate-SimpleParticleSystem-Particle.pde / pde



  // A simple Particle class
  
  class Particle {
    PVector loc;
    PVector vel;
    PVector acc;
    float r;
    float timer;
    
    // Another constructor (the one we are using here)
    Particle(PVector l) {
      acc = new PVector(0,0.05,0);
      vel = new PVector(random(-1,1),random(-2,0),0);
      loc = l.get();
      r = 10.0;
      timer = 100.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,r,r);
      displayVector(vel,loc.x,loc.y,10);
    }
    
    // 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 = 4;
      // 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();
    } 
  
  }
  
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.