Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
Fire f;
YouDied yd;
Embers e;

void setup() {
  size(400,400);
  println("Press X to light the bonfire");
  f = new Fire();
  e = new Embers();
  yd = new YouDied();
}

void draw(){
  background (0);
  noStroke();
  
  /////BONFIRE UNLIT/////
  
  //Hilt//
  fill(85,26,0);
  rect(140,90,10,20);
  rect(150,80,10,10);
  rect(160,90,10,40);
  rect(150,110,10,10);
  rect(170,120,10,20);
  rect(180,130,10,20);
  rect(190,140,10,30);
  rect(190,150,30,10);
  rect(210,140,20,10);
  rect(230,130,10,10);
  rect(180,160,10,10);
  rect(170,170,10,10);
  rect(160,180,10,10);
  
  //Blade//
  fill(150);
  rect(190,170,10,20);
  rect(200,160,20,50);
  rect(210,180,20,40);
  rect(230,200,10,60);
  rect(220,220,30,20);
  rect(230,240,30,20);
  rect(240,260,30,30);
  
  //Ashes//
  fill(255,250,196);
  rect(180,320,170,10);
  rect(190,310,120,10);
  rect(200,300,90,10);
  rect(210,290,80,10);
  rect(240,280,50,10);
  rect(260,270,10,10);
  rect(140,330,20,10);
  rect(220,330,40,10);
  rect(280,330,20,10);
  rect(310,330,20,10);
  rect(360,330,30,10);
  fill(138,135,106);
  rect(190,310,80,10);
  rect(230,300,10,10);
  rect(250,300,20,10);
  rect(260,290,10,10);
  rect(210,320,40,10);
  rect(300,320,10,10);
  
  /////Light fire/////
  f.light();
  
  /////Fire becomes bigger/////
  f.grow();
  
  /////Text fades in/////
  yd.death();

  /////Embers are created/////
  e.create();
  
  /////Embers rise/////
  e.rise();
  
  /////Embers reset/////
  e.respawn();
  
}
class Embers {

  float[] ember=new float[6];



  Embers() {
    ember[0]=230;
    ember[1]=200;
    ember[2]=170;
    ember[3]=230;
    ember[4]=250;
    ember[5]=210;
  }





  int emberSpawn=0;

  void create() {

    /////Creates floating embers upon pressing X/////
    if (key == 'x' || key == 'X') {
      emberSpawn=255;
    }

    fill(242, 134, 47, emberSpawn);
    rect(300, ember[0], 10, 20);
    rect(280, ember[1], 10, 10);
    rect(260, ember[2], 10, 20);
    rect(250, ember[3], 10, 20);
    rect(210, ember[4], 10, 10);
    rect(190, ember[5], 10, 20);
  }

  void rise() {

    /////Embers rise at different rates/////
    if (key =='x' || key == 'X') {
      ember[0]--;
      ember[1]=ember[1]-2;
      ember[2]=ember[2]-3;
      ember[3]=ember[3]-1.5;
      ember[4]=ember[4]-3;
      ember[5]--;
    }
  }

  void respawn() {

    /////Embers reset after reaching a certain height/////
    if (ember[0]<=30) {
      ember[0]=230;
    }
    if (ember[1]<=20) {
      ember[1]=200;
    }
    if (ember[2]<=10) {
      ember[2]=170;
    }
    if (ember[3]<=25) {
      ember[3]=230;
    }
    if (ember[4]<=10) {
      ember[4]=250;
    }
    if (ember[5]<=30) {
      ember[5]=210;
    }
  }
}
class Fire{
  
  boolean fireLit=false;
  int sparkTransparency=0;
  int sparkTime=0;
  int fireTransp=0;
 
  
 void light(){
   
   /////Fire sparks upon pressing X/////
   if(keyPressed){
     if(key == 'x' || key == 'X'){
       sparkTransparency=255;
       sparkTime++;
     }
   } else {
     sparkTransparency=0;
   }
   
   /////Spark turns to full fire after a split second/////
   if(sparkTime>=2.5){
     sparkTransparency=0;
     fireTransp=255;
   }
   
   /////Spark shapes/////
   fill(255,255,50,sparkTransparency);
   rect(230,290,20,10);
   rect(220,280,40,10);
   rect(240,270,40,10);
   rect(240,230,10,40);
   rect(260,240,10,30);
   
   fill(255,0,0,sparkTransparency);
   rect(280,260,10,10);
   rect(300,240,10,10);
   rect(260,210,10,10);
   rect(240,200,10,20);
   rect(210,260,10,10);
   rect(180,240,10,10);
   rect(170,230,10,10); 
 }
 
 void grow(){
   
   /////Full fire shapes/////
   fill(255,255,100,fireTransp);
   rect(230,280,20,20);
   rect(250,280,10,10);
   rect(240,270,10,10);
   rect(260,250,10,50);
   
   fill(242,134,47,fireTransp);
   rect(260,170,10,80);
   rect(280,200,10,100);
   rect(300,230,10,30);
   rect(290,250,10,10);
   rect(270,230,10,70);
   rect(250,250,10,30);
   rect(240,220,10,40);
   rect(230,240,10,40);
   rect(220,240,10,50);
   rect(230,230,10,10);
   rect(230,250,10,40);
   rect(200,210,10,20);
   rect(200,240,10,40);
 }
   
   
   
   
   
 }
  
  
  
  
class YouDied{
  
  float textFade=0;
  
  void death(){
    fill(200,10,10,textFade);
    rect(80,10,10,20);
    rect(90,30,10,20);
    rect(100,10,10,20);
    rect(120,20,10,20);
    rect(130,10,20,10);
    rect(130,40,20,10);
    rect(150,20,10,20);
    rect(170,10,10,30);
    rect(180,40,20,10);
    rect(200,10,10,30);
    rect(230,10,10,40);
    rect(240,10,20,10);
    rect(240,40,20,10);
    rect(260,20,10,20);
    rect(280,10,10,40);
    rect(300,10,10,40);
    rect(310,10,10,20);
    rect(320,10,10,10);
    rect(310,40,20,10);
    rect(340,10,10,40);
    rect(350,10,20,10);
    rect(350,40,20,10);
    rect(370,20,10,20); //Shapes for text//
    
    /////Fade in text upon lighting fire "You Died" in pixelated font/////
    if(key == 'x' || key == 'X'){
       textFade++;
     } 
    
  }  
}