Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////// Portal Turret ///////////////////
////////////////////// Annie Wang /////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////


//set up the base of the drawing
void setup ()
{

  size (400, 400); //canvas size: 400x400
  strokeWeight (3); //stroke thickness = 3
  rectMode (CORNERS); //draw rectangles with coordinates of opposite corners
  println ("I see you. Target acquired."); //prints text when drawing launches
}

//draw components of the drawing, continuously redrawn
void draw ()
{
  //BACKGROUND
  background (240); 

  //walls
  noStroke ();
  fill (220); 
  rect (0, 0, 75, 400);
  rect (325, 0, 400, 400);

  //floor
  fill (200); 
  rect (75, 325, 325, 400);
  triangle (75, 325, 75, 400, 0, 400);
  triangle (325, 325, 325, 400, 400, 400);

  //shadow under turret
  fill (150);
  ellipse (200, 400, 130, 70);

  //PORTALS

  //orange portal
  fill(255, 100, 10, brightness(200-mouseX/2)); 
  ellipse (0, 170, 90, 310);
  fill (240, brightness(200-mouseX/2)); 
  ellipse (0, 170, 70, 290);

  //blue portal
  fill (50, 50, 255, brightness(mouseX/2)); 
  ellipse (400, 170, 90, 310);
  fill (240, brightness (mouseX/2)); 
  ellipse (400, 170, 70, 290);

  //portals are more visible when the mouse is closer to their side
  //they disappear when the mouse is on the opposite portal

  //TURRET
  
  //back leg
  stroke (0); //outline: black
  fill(50); 
  rect (195, 300, 205, 360);
  ellipse (200, 360, 10, 40); //leg tip
  noStroke ();
  rect (197, 300, 204, 360); //cover outline stroke

  //front legs
  stroke(0);
  fill (70);
  quad (169, 339, 158, 339, 150, 400, 160, 400);
  quad (231, 339, 242, 339, 250, 400, 240, 400);

  //front leg caps
  fill(255);
  arc(170, 340, 26, 70, radians(180), radians(300));
  arc(230, 340, 26, 70, radians(-120), radians(0));

  //outline of front leg caps
  line (170, 340, 182, 285);
  line (230, 340, 218, 285);
  line (170, 340, 157, 340);
  line(230, 340, 243, 340);

  //turret body base
  fill (255);
  ellipse (200, 200, 100, 240);

  //turret body middle line
  line (200, 80, 200, 320);

  //cover turret sides
  noStroke();
  fill(240);
  rect (100, 80, 170, 295);
  rect (300, 80, 230, 295);

  //GUNS
  
  //gun base
  stroke(0);
  fill(50);
  rect (150-mouseY/12, 190, 170, 210);
  rect (230, 190, 250+mouseY/12, 210);

  //gun holes
  noStroke ();
  fill (5);
  //left 
  ellipse (193-mouseY/12, 200, 10, 10);
  ellipse (180-mouseY/12, 200, 10, 10);
  //right 
  ellipse (207+mouseY/12, 200, 10, 10);
  ellipse (220+mouseY/12, 200, 10, 10);

  //guns are pulled out when the mouse is pulled down
  //guns are hidden when the mouse is at the top of the canvas

  //cover guns so they dont cover the body
  fill(255);
  rect (170, 190, 199, 210);
  rect(230, 190, 199, 210);

  //BODY DETAILS

  //body side outlines
  stroke(0);
  line (170, 105, 170, 295);
  line (230, 105, 230, 295);

  //indent circle
  fill (180);
  ellipse (200, 200, 40, 40); 
  fill (230);
  arc (200, 200, 39, 39, radians(0), radians (180)); //shadow

  //red circle
  stroke (0);
  fill (255, 0, 0);
  ellipse (200, 200, 25, 25); 
  //red inside
  noStroke ();
  fill (250, 75, 75);
  ellipse (200, 200, 17, 17); 

  //black centre where the laser comes out, also centre of canvas
  fill (0);
  ellipse (200, 200, 10, 10); 

  //TURRET ARMS
  
  //arm body
  stroke (0);
  fill(255);
  arc (170-mouseY/12, 200, 40, 190, radians (90), radians (270));
  arc (230+mouseY/12, 200, 40, 190, radians (-90), radians (90));

  //rectangles on arms
  fill(0);
  rect(150-mouseY/12, 195, 160-mouseY/12, 197);
  rect(240+mouseY/12, 195, 250+mouseY/12, 197);

  //arm outlines
  line (170-mouseY/12, 105, 170-mouseY/12, 295);
  line (229+mouseY/12, 105, 229+mouseY/12, 295);

  //arms are pulled out when the mouse is pulled down
  //arms close when the mouse is at the top of the canvas

  //ANTENNA
  line (190, 82, 190, 62);
  line (180, 90, 180, 60);
  line (180, 60, 190, 50);
  line (190, 50, 190, 30);
}

//LASER
void  mousePressed () //draws when mouse button is pressed
{
  stroke (255, 0, 0); //red stroke
  line (mouseX, mouseY, 200, 200); 
  //draws a line from the centre of the turret eye to the mouse
  frameRate (20); 
  //slows the frame rate so the line is visible longer

  println ("Activated. Preparing to dispense product."); 
  //prints text when laser is fired
}