peterbus_EmCity/Cell.pde
class Cell
{
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  // FIELD
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  int x;
  int y;
  int size;
  int capacity;
  int occupation;

  // TODO activity
  color activity = color(215);//color(random(255), random(255), random(255));


  int cluster_id;

  /////////////////////////////////////////////////////////////////////////////////////////////////////
  // CONSTRUCTOR
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  Cell(int x, int y, int capacity, int size, int cluster_id)
  {
    this.x = x;
    this.y = y;
    this.size = size;
    this.capacity = capacity;
    this.occupation = 0; //(int)random(capacity);
    this.cluster_id = cluster_id;
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  // METHODS
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  void Draw()
  {
    if (capacity > 0)
    {
   
      pushMatrix();
      translate(x, y, capacity/2);
      //fill(color(115));
      noFill();
      strokeWeight(0.5); 
      stroke(color(0));
      box(size, size, capacity);
      popMatrix();
      if (occupation > 0)
      {
        pushMatrix();
        translate(x, y, occupation/2);
        noStroke();
        fill(activity);
        box(size, size, occupation);
        popMatrix();
      }
    }
  } 
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  int Colonize(int agent)/// @return: remaining agents
  {
    if (isFull())
      return agent; //return all initial agents as remaining agents

    int rest = occupation + agent - capacity;
    //if agents remain
    if (rest >= 0)
      this.occupation = capacity; //full capacity reached
    else
      this.occupation += agent;
 

    return rest;
    

  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  boolean isFull()
  {
    return occupation >= capacity;

  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////  
  void ResetCapacity()
  {
    this.occupation = 0;
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////
  void FillCapacity()
  {
    this.occupation = capacity;
            
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////////
}