public class Particles extends Vector {
  
  private SpaceGrid spaceGrid;
  
  Particles() {
    super();
    spaceGrid = new SpaceGrid(width,height,Particle.MAX_INFLUENCE_RANGE);
  }
  
  void addParticle(Particle p) {
    if (p.pos.X>=0&&p.pos.X<width&&p.pos.Y>=0&&p.pos.Y<height) {
      add(p);
      spaceGrid.add(p);
    }
  }
  
  
  
  public void update(Obstacles obstacles) {
    // make new position:
    for (int i=0;i<size();i++) ((Particle)elementAt(i)).initMov();
    for (int i=0;i<size();i++) ((Particle)elementAt(i)).makeNewPosAndMov(spaceGrid,obstacles);
    
    // if out of screen, remove!
    for (int i=0;i<size();i++) {
      Particle p = ((Particle)elementAt(i));
      if (p.newPos.X<0||p.newPos.X>=width||p.newPos.Y<0||p.newPos.Y>=height) {
        remove(p);
        i--;
      }
    }
    
    // clear spacGrid;
    spaceGrid.clear();
    
    // update new positions (also in spacegrid)
    for (int i=0;i<size();i++) ((Particle)elementAt(i)).updatePosAndMov(spaceGrid);
    
  }
  
  
  
  public void draw() {
    ellipseMode(CENTER_RADIUS);
    stroke(0);
    for (int i=0;i<size();i++) ((Particle)elementAt(i)).draw();
  }
  
  
  
}
