/*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();
}
}
}