Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
Title: Subway Train
 
 By: Quinn Goffin
 
 Date Submitted: September 21, 2016
 
 Description: The train will follow your mouse left or right (handle bars in the train
 will sway to the motion). Moving your mouse up will cause the platform lights to dim, 
 and the trains lights to brighten (allowing for visibility into the trains window). 
 Moving your mouse down willcause the trains lights to dim (making its windows opaque) 
 and brightening the platforms lights. Clicking the mouse or pressing any key will 
 open the train door.
 */

void setup() {
  size(400, 400);
}

void draw() {
  frameRate(60);
  background(20);

  //Train, moves with X coordinates of mouse, windows change oppacity based on Y coordinates of mouse

  //Body
  noStroke();
  fill(109, 113, 118);
  rect(mouseX, 90, 400, 170, 8);
  strokeWeight(1.5);
  stroke(25);
  line(mouseX+10, 200, mouseX+400, 200);
  line(mouseX+10, 210, mouseX+400, 210);
  line(mouseX+10, 220, mouseX+400, 220);

  //Doors
  stroke(0);
  fill(92, 95, 98);
  rect(mouseX+40, 100, 80, 150, 2);
  strokeWeight(0);
  line(mouseX+80, 105, mouseX+80, 245);

  //Door Windows
  fill(248, 255, 173);
  rect(mouseX+60, 120, 10, 40, 2);
  rect(mouseX+90, 120, 10, 40, 2);
  fill(0, 0, 100, mouseY/2);
  rect(mouseX+60, 120, 10, 40, 2);
  rect(mouseX+90, 120, 10, 40, 2);

  //Door Handles
  noFill();
  rect(mouseX+65, 170, 5, 10, 2);
  rect(mouseX+90, 170, 5, 10, 2);

  //Window (Inside)
  fill(248, 255, 173);
  rect(mouseX+165, 115, 110, 70, 2);
  fill(214, 41, 44);
  rect(mouseX+165, 160, 110, 25);
  line(mouseX+195, 165, mouseX+195, 185);
  line(mouseX+245, 165, mouseX+245, 185);

  //Handles/ Pole (Inside), sway with the movement of the train
  fill(100);
  rect(mouseX+165, 125, 110, 4);
  strokeWeight(3);
  stroke(100);
  line(mouseX+180, 130, pmouseX+180, 140);
  line(mouseX+260, 130, pmouseX+260, 140);
  line(mouseX+220, 130, pmouseX+220, 140);

  //Return strokeWeight to original value
  strokeWeight(1.5);

  //Window
  fill(47, 62, 113, (mouseY/1.1)-40);
  rect(mouseX+165, 115, 110, 70, 2);

  //Platform, brightness adjusted bassed on Y coordinates of mouse

  //Floor
  noStroke();
  fill(135, 137, 125);
  rect(0, 260, 400, 140);

  //Ceiling
  fill(113, 118, 72);
  rect(0, 0, 400, 80);

  //Pillars
  noStroke();
  fill(184, 193, 117);
  rect(40, 60, 40, 250);
  rect(320, 60, 40, 250);
  fill(152, 160, 95);
  quad(80, 60, 90, 70, 90, 270, 80, 307);
  quad(320, 60, 320, 307, 310, 270, 310, 70);

  //Lights
  strokeWeight(1.5);
  fill(224, 236, 255, 50+(mouseY/5));
  stroke(50);
  strokeWeight(1);
  quad(-10, 0, 20, 0, 60, 40, 30, 40);
  quad(410, 0, 370, 40, 340, 40, 380, 0);
  quad(215, 0, 210, 40, 180, 40, 175, 0);

  //Light beams
  noStroke();
  fill(224, 236, 255, 10+(mouseY/5));
  triangle(30, 20, 110, 340, -80, 340);
  triangle(195, 15, 275, 335, 115, 335);
  triangle(370, 20, 460, 340, 280, 340);
}

void mousePressed() {
  frameRate(1);

  //Train door open, inside of train
  noStroke();
  fill(248, 255, 173);
  rect(mouseX+41, 101, 79, 149, 2);
  fill(189, 191, 201);
  rect(mouseX+41, 200, 79, 50);
  fill(0, 0, 0, 15);
  rect(mouseX+41, 190, 79, 20);

  //Pillars, redrawn to prevent inside of train from being ontop of pillars
  fill(184, 193, 117);
  rect(40, 60, 40, 250);
  rect(320, 60, 40, 250);
  fill(152, 160, 95);
  quad(80, 60, 90, 70, 90, 270, 80, 307);
  quad(320, 60, 320, 307, 310, 270, 310, 70);
}

void keyPressed() {
  frameRate(1);

  //Train door open, inside of train
  noStroke();
  fill(248, 255, 173);
  rect(mouseX+41, 101, 79, 149, 2);
  fill(189, 191, 201);
  rect(mouseX+41, 200, 79, 50);
  fill(0, 0, 0, 15);
  rect(mouseX+41, 190, 79, 20);

  //Pillars, redrawn to prevent inside of train from being ontop of pillars
  fill(184, 193, 117);
  rect(40, 60, 40, 250);
  rect(320, 60, 40, 250);
  fill(152, 160, 95);
  quad(80, 60, 90, 70, 90, 270, 80, 307);
  quad(320, 60, 320, 307, 310, 270, 310, 70);
}