class Brick extends Boxish{
    
  
  Invader damager  = null;
  
  PImage img;
  String fileRoot = "bricks/";
  
  Brick(float px, float py, String pName, int pRange){
     super(px,py,BRICKSIZE,BRICKSIZE);
      fileRoot += pName + ceil(random(pRange));

  String lit = "";
    if((!pName.equals("Roof")) && random(100) < 75){
       lit = "Lit"; 
    }

     img = loadImage(fileRoot+lit+".png");
     
  }
 
 
 
  boolean brickhit(Invader i) {
    if(overlap(this.x,this.x+this.w,i.x-BRICK_EXTRA,i.x+i.w+BRICK_EXTRA)&&
      overlap(this.y,this.y+this.h,i.y,i.y+i.h)) {
      return true;
    }
    return false;
  }
 
 void damage(Invader i){
     if(damager == null) {
        img = loadImage(fileRoot+"Destroyed.png");
        damager = i;
        i.doParticles(true);

     } else {
       if(i != damager){
          bricksToKill.add(this); 
          i.doParticles(true);

       }
     }
     
 }
  
 
  void draw(){
      image(img,x,y);
  }
  
 
  
}

 
 
 
 
 ArrayList<Building>buildings;
 
 
 class Building implements Gallery{
   ArrayList<Brick>bricks= new ArrayList<Brick>();
     Building(){
       
     }
     void add(Brick b){
         bricks.add(b);
     }
     void draw(){
       if(galleryHide) return;
        for(Brick b : bricks){
         b.draw();
        }   
     }
     
     boolean hasDamage(){
         for(Brick b : bricks){
            if(b.damager != null) return true;
        } 
        return false;
     }
     void moveUp(){
       for(Brick b : bricks){
          b.y -= height*3/8 - 10; 
       }
     }
     void moveDown(){
       
       for(Brick b : bricks){
          b.y += height/8 + 10;
       }
     }
     
     
     
   boolean galleryHide = true;
  void hide(){
     galleryHide = true; 
  }
  void reveal(){
     galleryHide = false; 
  }
  boolean isHidden(){
     return galleryHide; 
  }
  
     
     
 }




void addBuildings(){
 buildings = new ArrayList<Building>();
    float x = 0;
Brick b;
    while(x < width){
      Building bld = new Building();
      buildings.add(bld);
      boolean hadBaseOrMid = false;
      float y = CITY_BOTTOM-BRICKSIZE;

      if(random(100) < CHANCEOFBASE){
       b = new Brick(x,y,"Base",COUNTBASE);
        bricks.add(b); 
        bld.add(b);
        y-=BRICKSIZE;
        hadBaseOrMid = true;
      }
      if(random(100) < CHANCEOFMID){
        b = new Brick(x,y,"Mid",COUNTMID);
        bricks.add(b); 
        bld.add(b);
        y-=BRICKSIZE;
        hadBaseOrMid = true;
      }
      if(random(100) < CHANCEOFMID){
      b = new Brick(x,y,"Mid",COUNTMID);
        bricks.add(b); 
        bld.add(b);
        y-=BRICKSIZE;
        hadBaseOrMid = true;
      }
    if(hadBaseOrMid){
      if(random(100) < CHANCEOFROOF){
      b = new Brick(x,y,"Roof",COUNTROOF);
        bricks.add(b); 
        bld.add(b);
      }
    }
       


  
    x += BRICKSIZE ;
   } 
  
}