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); } } ArrayListbuildings; class Building implements Gallery{ ArrayListbricks= new ArrayList(); 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(); 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 ; } }