Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
 /*Saiyans dual made by akira tori... i mean Trevon H.
 legend has it that when 2 saiyans clash whirl winds are formed and mountains shake
 interact with the mouse click and watch the 2 saiyans battle in a struggle for life and death
 unleashe your inner Saiyan!!
 Nicks raceway code used for array referance
 */
 BeamStruggle beams = new BeamStruggle();
Goku goku = new Goku();
int numberOfRains = 50;
Rain[] rains = new Rain[numberOfRains];
Vegeta vegeta = new Vegeta();

void setup()
{
  size(400, 400);
  ellipseMode(CENTER);
  instantiateRains();
}

void instantiateRains()
{
  for (int i=0; i<rains.length;i++)
  {
  rains[i]=new Rain(random(-100,-20), random(0,width), random(-10,10),5);
  }
}

void draw()
{
  stroke(1);
  background(0, 200, 245);
  
  for(int i=0;i<rains.length; i++)
{
  rains[i].updateRain();
}


  vegeta.updateVegeta();
  goku.updateGoku();
  beams.drawBeam();
  vegeta.drawVegeta();
  goku.drawGoku();
  

for(int i=0;i<rains.length; i++)
{
  rains[i].drawRain();
}
}
class BeamStruggle
{
  PVector bClash = new  PVector(200,200);
  PVector bVegeta = new  PVector(100,190);
  PVector bGoku = new  PVector(310,190);
  
  void drawBeam()
  {
    if (mousePressed)
    { 
      noStroke();
      // if mouse pressed draw beams with glowing effect else draw charging beam with glowing effect
      fill(100, 0, 150, 200);
      rect(bVegeta.x,bVegeta.y,100,20);//vegeta
      
      fill(3, 55, 255, 200);//goku
      rect(bGoku.x,bGoku.y,-110,20);
      
     
      fill(100,0,200,200);
      ellipse(bClash.x,bClash.y, cos(frameCount*.8) * 5 +30,cos(frameCount * .08) * 5+70 );
      
      fill(3, 55, 255, 200);
      ellipse(310, 200, cos(frameCount * .08) * 5+45, cos(frameCount * .08) * 5+45);

      fill(100, 0, 150, 200);
      ellipse(100, 200, cos(frameCount * .08) * 5+45, cos(frameCount * .08) * 5+45);
      
    } 
    else
    {
      noStroke();
      fill(3, 55, 255, 100);
      ellipse(385, 225, cos(frameCount * .08) * 5+35, cos(frameCount * .08) * 5+35);

      fill(100, 0, 150, 100);
      ellipse(25, 225, cos(frameCount * .08) * 5+35, cos(frameCount * .08) * 5+35);
      
      fill(3, 55, 255,200);
      ellipse(385, 225, 20,20);

      fill(100, 0, 150,200);
      ellipse(25, 225, 20,20);  
   }
  }
}
// drawging Goku
class Goku
{
  void drawGoku()
  {
  //gokus rock
  fill(250, 200, 150);
  beginShape();
  vertex(310, 290);
  vertex(290, 340);
  vertex(310, 360);
  vertex(300, 370);
  vertex(320, 390);
  vertex(290, 400);
  vertex(400, 400);
  vertex(400, 290);
  vertex(310, 290);
  endShape();
  
      //neck/head
    fill(250,200,100);
    rect(350,180,10,10);
    beginShape();
    vertex(355,188);
    vertex(345,180);
    vertex(345,160);
    vertex(365,160);
    vertex(365,180);
    vertex(355,188);
    endShape();
    
    fill(0);
    beginShape();
    vertex(330,170);
    vertex(340,160);
    vertex(325,152);
    vertex(343,153);
    vertex(335,143);
    vertex(345,150);
    vertex(345,140);
    vertex(352,150);
    vertex(370,155);
    vertex(378,153);
    vertex(371,159);
    vertex(379,160);
    vertex(370,162);
    vertex(380,170);
    vertex(367,165);
    vertex(363,170);
    vertex(362,166);
    vertex(357,170);
    vertex(356,166);
    vertex(350,170);
    vertex(351,165);
    vertex(330,170);
    endShape();
    
    ellipse(360,155,20,20);
    
    //eyes/nose/mouth
    strokeWeight(2);
    point(350,173);
    point(360,173);
    strokeWeight(1);
    point(355,177);
    fill(255);
    quad(353,180,358,181,357,183,352,182);
    line(349,168,353,172);
    line(357,172,362,168);
  }
  void updateGoku()
  {
    if(mousePressed)//change draws body parts attacking else draw im in charging stance
    {
      textSize(9);
      fill(0);
      text("KAMEHAMEHA X4!!", 310,130);
      
      //body
      fill(255, 128, 0);
      beginShape();
      vertex(340, 190);
      vertex(370, 190);
      vertex(370, 200);
      vertex(365, 230);
      vertex(345, 230);
      vertex(340, 200);
      vertex(340, 190);
      endShape();
      
      //arms left then right
      fill(252,194,135);
     quad(340,190,340,200,310,200,310,190);
      endShape();
      
      beginShape();
      vertex(370,190);
      vertex(370,205);
      vertex(360,210);
      vertex(320,210);
      vertex(320,200);
      vertex(360,200);
      vertex(370,190);
      endShape();
      
      //hands
      quad(310,190,310,200,305,198,305,192);
      quad(320,200,320,210,315,208,315,202);
      
      //legs
      fill(255, 128, 0);
      beginShape();
      vertex(330,270);
      vertex(330,250);
      vertex(345,230);
      vertex(365,230);
      vertex(376,270);
      vertex(365,270);
      vertex(352,240);
      vertex(340,253);
      vertex(340,270);
      endShape();
      
      //shoes left to right
      fill(3,71,255);
      beginShape();
      vertex(320,290);
      vertex(330,280);
      vertex(330,270);
      vertex(340,270);
      vertex(340,290);
      vertex(320,290);
      endShape();
      
      beginShape();
      vertex(390,290);
      vertex(370,290);
      vertex(365,270);
      vertex(376,270);
      vertex(380,280);
      vertex(390,290);
      endShape();
    }
    else
    {
      //body
      fill(255, 128, 0);
      beginShape();
      vertex(340, 190);
      vertex(370, 190);
      vertex(370, 200);
      vertex(365, 230);
      vertex(345, 230);
      vertex(340, 200);
      vertex(340, 190);
      endShape();
      
       //legs
       fill(255, 128, 0);
       beginShape();
      vertex(330, 270);
      vertex(330, 250);
      vertex(345, 230);
      vertex(365, 230);
      vertex(380, 250);
      vertex(380, 270);
      vertex(370, 270);
      vertex(370, 255);
      vertex(358, 240);
      vertex(352, 240);
      vertex(340, 255);
      vertex(340, 270);
      vertex(330, 270);
      endShape();
      
      //arms left then right
      fill(252,194,135);
      quad(340,190,375,220,375,230,340,200);
      
      beginShape();
      vertex(370,190);
      vertex(380,190);
      vertex(390,200);
      vertex(390,220);
      vertex(380,220);
      vertex(380,210);
      vertex(370,200);
      vertex(370,190);
      endShape();
      
      //hands
      quad(375,220,375,230,380,228,380,222);
      quad(380,220,390,220,388,225,382,225);
      
      //shoes left and right
      fill(3,71,255);
       beginShape();
      vertex(320,290);
      vertex(330,280);
      vertex(330,270);
      vertex(340,270);
      vertex(340,290);
      vertex(320,290);
      endShape();
      
      beginShape();
      vertex(370, 290);
      vertex(370, 270);
      vertex(380, 270);
      vertex(380, 280);
      vertex(390, 290);
      vertex(370, 290);
      endShape();
      
    }
  }
  
}
class Rain
{
  //rain vector for positioning array and velocity
  PVector position = new PVector();
  PVector velocity = new PVector();

  
  Rain(float x, float y,float velocityX, float velocityY)
  {
    position.x=x;
    position.y=y;
    velocity.x=velocityX;
    velocity.y=velocityY;
    
  }
  
 void updateRain()
 {
   //if the rain reaches the high of the screan +20 send it to the top of the scren -40 y
   //draw rain randomly allong the width of the screen
   position.add(velocity);
   
   if(position.y>height+20)
   {
     position.y=-40;
     position.x=random(width);
  }
  if(mousePressed)
  {
  
  }
  else
  {
   
  }
 }
 

 
  void drawRain()
  {
    stroke(0,0,100,200);
    line(position.x,position.y,position.x,position.y+5);
    
    
    
  }
}
// drawging vegeta
class Vegeta
{
  void drawVegeta()
  {
    stroke(1);
    //vegetas rock
    fill(250, 200, 150);
  beginShape();
  vertex(0, 290);
  vertex(10, 320);
  vertex(0, 360);
  vertex(10, 390);
  vertex(0, 400);
  vertex(120, 400);
  vertex(100, 370);
  vertex(100, 340);
  vertex(80, 320);
  vertex(90, 290);
  vertex(0, 290);
  endShape();

    //hair
    fill(0);
    beginShape();
    vertex(65, 170);
    vertex(79, 159);
    vertex(71, 161);
    vertex(75, 146);
    vertex(69, 149);
    vertex(70, 139);
    vertex(65, 141);
    vertex(65, 134);
    vertex(60, 140);
    vertex(55, 128);
    vertex(51, 140);
    vertex(45, 134);
    vertex(43, 145);
    vertex(39, 140);
    vertex(40, 152);
    vertex(35, 148);
    vertex(40, 160);
    vertex(35, 159);
    vertex(45, 170);
    vertex(65, 170);
    endShape();

    //neck
    fill(250, 200, 100);
    rect(50, 180, 10, 10);

    //face
    fill(250, 200, 100);
    beginShape();
    vertex(55, 185);
    vertex(45, 175);
    vertex(45, 160);
    vertex(65, 160);
    vertex(65, 175);
    vertex(55, 185);
    endShape();

    noStroke();
    ellipse(49, 162, 6, 6);
    ellipse(62, 162, 6, 6);

    stroke(1);
    fill(0);
    triangle(53, 161, 57, 161, 55, 165);

    //eyes/mnose/mouth/eyebrows
    fill(255);
    strokeWeight(2);
    point(60, 170);
    point(50, 170);
    strokeWeight(1);
    point(55, 174);
    quad(52, 178, 54, 176, 58, 177, 57, 179);
    line(48, 166, 53, 169);
    line(62, 166, 57, 169);
  } 

  void updateVegeta()
  {
    if (mousePressed) //change draws body parts attacking else draw im in charging stance
    {
      textSize(9);
      fill(0);
      text("GALICK GUN FIRE!!!", 20,120);
      //body
      fill(50, 0, 200);
      beginShape();
      vertex(40, 190);
      vertex(70, 190);
      vertex(70, 200);
      vertex(65, 230);
      vertex(45, 230);
      vertex(40, 200);
      vertex(40, 190);
      endShape();

      //left then right arm firing postion
      fill(50, 0, 200);
      beginShape();
      vertex(40, 200);
      vertex(40, 190);
      vertex(50, 200);
      vertex(90, 200);
      vertex(90, 210);
      vertex(50, 210);
      vertex(40, 206);
      endShape();
      quad(70, 190, 70, 200, 100, 200, 100, 190);

      //hands
      fill(255);
      quad(100, 190, 105, 192, 105, 198, 100, 200);
      quad(90, 200, 95, 202, 95, 208, 90, 210);

      //legs
      fill(50, 0, 200);
      beginShape();
      vertex(30, 280);
      vertex(45, 230);
      vertex(65, 230);
      vertex(80, 250);
      vertex(80, 270);
      vertex(70, 270);
      vertex(70, 255);
      vertex(58, 240);
      vertex(40, 290);
      vertex(30, 280);
      endShape();

      //leftt then right shoe
      fill(255);
      beginShape();
      vertex(20, 290);
      vertex(30, 280);
      vertex(32, 270);
      vertex(47, 270);
      vertex(40, 290);
      vertex(20, 290);
      endShape();

      beginShape();
      vertex(70, 290);
      vertex(70, 270);
      vertex(80, 270);
      vertex(80, 280);
      vertex(90, 290);
      vertex(70, 290);
      endShape();
    } 
    else //stance/ charge state
    {
      //body
      fill(50, 0, 200);
      beginShape();
      vertex(40, 190);
      vertex(70, 190);
      vertex(70, 200);
      vertex(65, 230);
      vertex(45, 230);
      vertex(40, 200);
      vertex(40, 190);
      endShape();

      //left then right arm stationary postion
      fill(50, 0, 200);
      beginShape();
      vertex(20, 220);
      vertex(20, 200);
      vertex(30, 190);
      vertex(40, 190);
      vertex(40, 200);
      vertex(30, 210);
      vertex(30, 220);
      vertex(20, 220);
      endShape();
      quad(70, 190, 70, 200, 40, 230, 40, 220);

      //hands
      fill(250);
      quad(20, 220, 30, 220, 28, 225, 22, 225);
      quad(40, 220, 40, 230, 35, 228, 35, 222);

      //legs
      fill(50, 0, 200);
      beginShape();
      vertex(30, 270);
      vertex(30, 250);
      vertex(45, 230);
      vertex(65, 230);
      vertex(80, 250);
      vertex(80, 270);
      vertex(70, 270);
      vertex(70, 255);
      vertex(58, 240);
      vertex(52, 240);
      vertex(40, 255);
      vertex(40, 270);
      vertex(30, 270);
      endShape();

      //leftt then right shoe
      fill(255);
      beginShape();
      vertex(20, 290);
      vertex(30, 280);
      vertex(30, 270);
      vertex(40, 270);
      vertex(40, 290);
      vertex(20, 290);
      endShape();

      beginShape();
      vertex(70, 290);
      vertex(70, 270);
      vertex(80, 270);
      vertex(80, 280);
      vertex(90, 290);
      vertex(70, 290);
      endShape();

   
    }
  }
}