Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/////San Francisco Scene/////
/* 
Sept 22nd 2016
Intro to Media Computation
Instructor: Nicolas Hesler
Created by: William Lu

Mouse movement up and down controls the time of day, while left and right scrolls
through the scene horizontally. Clicking displays the title.
*/


void setup()
{
  //Setting the canvas size
  size (400,400);
  noStroke();
  smooth();
  //No default cursor. Instead, I implemented a custom one (drawn last).
  noCursor();
  
}

void draw()
{
 //reseting the frame rate; when you click, the frameRate is set to 1 (see bottom) so this line resets it to normal
 frameRate(60);
 
  //Colour of dusk. This is the default background colour
background (253,173,163);

// Colour of day, opacity fades out based on mouseY. The background dusk colour seeps through when mouseY is about halfway down
rectMode(CORNERS);
fill(172,231,242,350-mouseY*2);
rect (0,0,400,400); 

//Colour of night, turns night after dusk, when mouse reaches to the bottom
fill(119,114,173,(mouseY)/1.5);
rect (0,0,400,400);

///////////////////
///////SKY/////////
///////////////////

  //Stars, multiple parallaxes, varying amounts of opacity jitter, also varying sizes. 
          //parallexes are controlled by different values multiplied to mouseX
          //opacity jitter is achieved by using sin and frameCount when calculating opacity
          //mouseY is divided by 2 and -30 so that the stars fade out when mouseY is past the middle
          //frameCount is multiplied by a small number so that the resulting opacity changes slowly
    fill(255,255,190,mouseY/2-30-70*sin(frameCount*0.03));
    rectMode(CORNERS);
    rect(100-mouseX*0.01,100,103-mouseX*0.01,103);
    rect(140-mouseX*0.015,70,145-mouseX*0.015,75);
    rect(20-mouseX*0.01,30,22-mouseX*0.01,32);
    fill(255,255,190,mouseY/2-30-100*sin(frameCount*0.01));
    rect(350-mouseX*0.015,115,353-mouseX*0.015,118);
    rect(260-mouseX*0.02,25,263-mouseX*0.02,28);
    rect(215-mouseX*0.025,90,220-mouseX*0.025,95);
    fill(255,255,190,mouseY/2-30-70*cos(frameCount*0.03));
    rect(365-mouseX*0.01,55,370-mouseX*0.01,60);
    rect(300-mouseX*0.02,70,305-mouseX*0.02,75);
    rect(90-mouseX*0.01,5,95-mouseX*0.01,10);
    fill(255,255,190,mouseY/2-30-100*cos(frameCount*0.01));
    rect(45-mouseX*0.015,70,50-mouseX*0.015,75);
    rect(0-mouseX*0.045,90,5-mouseX*0.045, 95);
    rect(405-mouseX*0.045,5,410-mouseX*0.045,10);
  
  // Moon, position moves up and down based on mouse Y. Fades out as it reaches the bottom
    fill (255,240,240,mouseY-200);
    ellipse (160+mouseX/35,400-mouseY*0.90, 30,30);
  
  //Sun, position moves up and down based on mouse Y. Colour changes to red, and becomes less opaque when it reaches the bottom.
    fill (255,255-mouseY*0.5,190-mouseY*0.5,370-mouseY);
    ellipse (400-160-mouseX/35,41+mouseY*0.8, 30,30);
  
  //Cloud 1. Clouds fade out during night time
    fill(230,130-mouseY/2);
    beginShape();
      vertex(150-mouseX*0.09,120);
      vertex(150-mouseX*0.09,110);
      vertex(160-mouseX*0.09,110);
      vertex(160-mouseX*0.09,100);
      vertex(170-mouseX*0.09,100);
      vertex(170-mouseX*0.09,90);
      vertex(250-mouseX*0.09,90);
      vertex(250-mouseX*0.09,100);
      vertex(280-mouseX*0.09,100);
      vertex(280-mouseX*0.09,110);
      vertex(300-mouseX*0.09,110);
      vertex(300-mouseX*0.09,120);
    endShape();
  
  //Cloud 2
    beginShape();
      vertex(-10-mouseX*0.13,60);
      vertex(-10-mouseX*0.13,50);
      vertex(0-mouseX*0.13,50);
      vertex(0-mouseX*0.13,40);
      vertex(50-mouseX*0.13,40);
      vertex(50-mouseX*0.13,30);
      vertex(60-mouseX*0.13,30);
      vertex(60-mouseX*0.13,40);
      vertex(80-mouseX*0.13,40);
      vertex(80-mouseX*0.13,50);
      vertex(100-mouseX*0.13,50);
      vertex(100-mouseX*0.13,60);
    endShape();
  
  //Moving cloud1
    fill(230,130-mouseY/2);
    beginShape();
      vertex(-100-mouseX*0.09+frameCount*0.05,100);
      vertex(-100-mouseX*0.09+frameCount*0.05,90);
      vertex(-90-mouseX*0.09+frameCount*0.05,90);
      vertex(-90-mouseX*0.09+frameCount*0.05,80);
      vertex(-80-mouseX*0.09+frameCount*0.05,80);
      vertex(-80-mouseX*0.09+frameCount*0.05,70);
      vertex(-30-mouseX*0.09+frameCount*0.05,70);
      vertex(-30-mouseX*0.09+frameCount*0.05,80);
      vertex(0-mouseX*0.09+frameCount*0.05,80);
      vertex(0-mouseX*0.09+frameCount*0.05,100);
    endShape();
  
  //Moving cloud 2
    fill(230,130-mouseY/2);
    beginShape();
      vertex(300-mouseX*0.09+frameCount*0.05,60);
      vertex(300-mouseX*0.09+frameCount*0.05,50);
      vertex(310-mouseX*0.09+frameCount*0.05,50);
      vertex(310-mouseX*0.09+frameCount*0.05,40);
      vertex(320-mouseX*0.09+frameCount*0.05,40);
      vertex(320-mouseX*0.09+frameCount*0.05,30);
      vertex(350-mouseX*0.09+frameCount*0.05,30);
      vertex(350-mouseX*0.09+frameCount*0.05,40);
      vertex(380-mouseX*0.09+frameCount*0.05,40);
      vertex(380-mouseX*0.09+frameCount*0.05,50);
      vertex(400-mouseX*0.09+frameCount*0.05,50);
      vertex(400-mouseX*0.09+frameCount*0.05,60);
    endShape();

///////////////////
//////LAKES////////
///////////////////

  //Three lake fills for each time of day, same theory as the sky colour.
  //Dusk Lake
  fill(219,105,153);
  rect(0,400,400,225); 
    
  //Day Lake
  fill(108,220,237,350-mouseY*2);
  rect(0,400,400,225);
  
  //Night Lake
  fill(108,97,137,(mouseY)/1.5);
  rect(0,400,400,225);
  
////////////////////////
////////BRIDGE//////////
////////////////////////

 //Bridge tower supports, Right side
     
  //******HOW THE FILL IS CALCULATED*******//
  //The colour of every shape changes linearly during the night, but every R, G, and B value changes at different
  //rates. I manually calculated these rates of change using the following formula: 
  //        fill= (nightFill-dayFill)/400*mouseY+dayFill
  //This formula is applied to every R, G and B value.
  //See my process work for calculations.
  //The decimal values that you see throughout my code is just the calculated, simplified version of the formula. 
  //Processing would glitch out if I tried to implement the formula without simplifying it first.
   
 rectMode(CORNERS);     
 fill (-0.1775*mouseY+218,-0.11*mouseY+119,-0.1475*mouseY+127);
  rect(240-mouseX/16,400,250-mouseX/16,250);
  rect(270-mouseX/16,400,280-mouseX/16,250);
 // Left side
   rect(20-mouseX/16,400,30-mouseX/16,250);
   rect(50-mouseX/16,400,60-mouseX/16,250);
   
 //Vertical suspension lines
 // Object this far back have mouseX divided by 16, so it moves very slightly
  stroke(-0.1375*mouseY+152,-0.0725*mouseY+104,-0.1175*mouseY+116);
  strokeWeight(2);
  //Central section  
  line (70-mouseX/16, 166, 70-mouseX/16, 240);
  line (90-mouseX/16, 195, 90-mouseX/16, 240);
  line (110-mouseX/16, 214, 110-mouseX/16, 240);
  line (130-mouseX/16, 225, 130-mouseX/16, 240);
  line (151-mouseX/16, 230, 151-mouseX/16, 240);
  line (170-mouseX/16, 225, 170-mouseX/16, 240);
  line (190-mouseX/16, 214, 190-mouseX/16, 240);
  line (210-mouseX/16, 195, 210-mouseX/16, 240);
  line (230-mouseX/16, 166, 230-mouseX/16, 240); 
  //left section
  line (10-mouseX/16, 166, 10-mouseX/16, 240);
  //right secion
  line (290-mouseX/16, 166, 290-mouseX/16, 240);
  line (310-mouseX/16, 195, 310-mouseX/16, 240);
  line (330-mouseX/16, 214, 330-mouseX/16, 240);
  line (350-mouseX/16, 225, 350-mouseX/16, 240);
  line (370-mouseX/16, 230, 370-mouseX/16, 240);
  line (390-mouseX/16, 225, 390-mouseX/16, 240);
  line (410-mouseX/16, 214, 410-mouseX/16, 240);
  line (430-mouseX/16, 195, 430-mouseX/16, 240);
  
  //right arc suspension cables
    noFill();
    stroke (-0.165*mouseY+188,-0.0875*mouseY+110,-0.135*mouseY+122);
    strokeWeight(3);
    arc(385-mouseX/16,35,255,395, radians(30), radians(150) );
    arc(355-mouseX/16,35,255,395, radians(30), radians(150) );
    noStroke();
  
  // Right Tower, vertical blocks
   fill (-0.1775*mouseY+218,-0.11*mouseY+119,-0.1475*mouseY+127);
   rect(240-mouseX/16,250,250-mouseX/16,130);
   rect(270-mouseX/16,250,280-mouseX/16,130);
  // Right Tower, horizontal blocks, 7 thick
   rect (240-mouseX/16,145,280-mouseX/16, 138);
   rect (240-mouseX/16,170,280-mouseX/16, 163);
   rect (240-mouseX/16,195,280-mouseX/16, 188);
   rect (240-mouseX/16,220,280-mouseX/16, 213); 
  
  //central arc suspension cables
   noFill();
   stroke (-0.165*mouseY+188,-0.0875*mouseY+110,-0.135*mouseY+122);
   arc(135-mouseX/16,35,255,395, radians(30), radians(150) );
   arc(165-mouseX/16,35,255,395, radians(30), radians(150) );
   noStroke();
    
  // Left Tower , vertical blocks
   fill (-0.1775*mouseY+218,-0.11*mouseY+119,-0.1475*mouseY+127);
   rect(20-mouseX/16,250,30-mouseX/16,130);
   rect(50-mouseX/16,250,60-mouseX/16,130);
  // Left Tower , horizontal blocks, 7 thick
   rect (20-mouseX/16,145,60-mouseX/16, 138);
   rect (20-mouseX/16,170,60-mouseX/16, 163);
   rect (20-mouseX/16,195,60-mouseX/16, 188);
   rect (20-mouseX/16,220,60-mouseX/16, 213);       
         
 //left arc suspension cables
   noFill();
   stroke (-0.165*mouseY+188,-0.0875*mouseY+110,-0.135*mouseY+122);
   arc(-85-mouseX/16,35,255,395, radians(30), radians(150) );
   arc(-55-mouseX/16,35,255,395, radians(30), radians(150) );
   noStroke();
  
 //Bridge road
   fill (-0.155*mouseY+188,-0.08*mouseY+110,-0.1275*mouseY+122);
   rect (0,240, 400, 250);

 //Bridge Lights. They pulsate using sin(frameCount) to calculate size
   fill (255,222,189,(mouseY)/1.3-50-200*sin(frameCount*0.03)/2);
   ellipse ( 40-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 80-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 120-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 160-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 200-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 240-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 280-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 320-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 360-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 400-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);
   ellipse ( 440-mouseX/16, 230, 3-sin(frameCount*0.03)/2,3-sin(frameCount*0.03)/2);

////////////////////////////
///Mountainous Background///
////////////////////////////
  //as objects get closer, the mouseX value is divided by less and less
  fill (-0.1525*mouseY+144,-0.225*mouseY+172,-0.2375*mouseY+168);
  beginShape();
   vertex(0-mouseX/14,435);
   vertex(450-mouseX/14,430);
   vertex(450-mouseX/14,235);
   vertex(400-mouseX/14,230);
   vertex(400-mouseX/14,245);
   vertex(380-mouseX/14,245);
   vertex(380-mouseX/14,255);
   vertex(350-mouseX/14,255);
   vertex(350-mouseX/14,265);
   vertex(300-mouseX/14,265);
   vertex(300-mouseX/14,260);
   vertex(280-mouseX/14,260);
   vertex(280-mouseX/14,265);
   vertex(260-mouseX/14,265);
   vertex(260-mouseX/14,275);
   vertex(200-mouseX/14,275);
   vertex(200-mouseX/14,285);
   vertex(180-mouseX/14,285);
   vertex(180-mouseX/14,295);
   vertex(110-mouseX/14,295);
   vertex(110-mouseX/14,285);
   vertex(90-mouseX/14,285);
   vertex(90-mouseX/14,275);
   vertex(70-mouseX/14,275);
   vertex(70-mouseX/14,265);
   vertex(60-mouseX/14,265);
   vertex(60-mouseX/14,255);
   vertex(50-mouseX/14,255);
   vertex(50-mouseX/14,235);
   vertex(40-mouseX/14,235);
   vertex(40-mouseX/14,225);
   vertex(30-mouseX/14,225);
   vertex(30-mouseX/14,205);
   vertex(20-mouseX/14,205);
   vertex(20-mouseX/14,185);
   vertex(10-mouseX/14,185);
   vertex(10-mouseX/14,165);
   vertex(0-mouseX/14,165);
  endShape();

/////////////////////
//////Far City///////
/////////////////////

 //Highway supports
  fill(-0.2125*mouseY+198,-0.295*mouseY+220,-0.305*mouseY+230);
  rect( 60-mouseX/14, 400, 65-mouseX/14, 266);
  rect( 85-mouseX/14, 400, 90-mouseX/14, 275);
  rect( 205-mouseX/14, 400, 210-mouseX/14, 298);
  rect( 230-mouseX/14, 400, 235-mouseX/14, 302);
  rect( 255-mouseX/14, 400, 260-mouseX/14, 306);
  rect( 295-mouseX/14, 400, 300-mouseX/14, 306);
  rect( 320-mouseX/14, 400, 325-mouseX/14, 302);
  rect( 345-mouseX/14, 400, 350-mouseX/14, 298);
  rect( 370-mouseX/14, 400, 375-mouseX/14, 290);
  
 // Rotated rectangle for highway from top left to center
  fill(-0.2125*mouseY+198,-0.295*mouseY+220,-0.305*mouseY+230);
  quad (40-mouseX/14,260,265-mouseX/14,300,265-mouseX/14,312,40-mouseX/14,272);
  quad (160-mouseX/14,325,380-mouseX/14,285,380-mouseX/14,297,160-mouseX/14,337);
  
 // Car lights, slowly move up the highway 1 (runs from right to left) [slope =0.177]
 // They move using framecount, multiplied by the slope
 // Cars are queued up off screen so that it appears to be a continuous stream of cars. 
 // However, if you leave the program running for long enough, it will run out of cars.
  fill (250,100,100,(mouseY)/1.5);
  ellipse (500-mouseX/14-frameCount*0.05,345.41-frameCount*0.00885, 2.5,2.5);  
  ellipse (450-mouseX/14-frameCount*0.05,336.56-frameCount*0.00885, 2.5,2.5);  
  ellipse (420-mouseX/14-frameCount*0.05,331.25-frameCount*0.00885, 2.5,2.5);  
  ellipse (395-mouseX/14-frameCount*0.05,326.83-frameCount*0.00885, 2.5,2.5);  
  ellipse (375-mouseX/14-frameCount*0.05,323.29-frameCount*0.00885, 2.5,2.5);  
  ellipse (320-mouseX/14-frameCount*0.05,313.56-frameCount*0.00885, 2.5,2.5);  
  ellipse (280-mouseX/14-frameCount*0.05,306.48-frameCount*0.00885, 2.5,2.5);  
  ellipse (250-mouseX/14-frameCount*0.05,301.17-frameCount*0.00885, 2.5,2.5);  
  ellipse (230-mouseX/14-frameCount*0.05,297.63-frameCount*0.00885, 2.5,2.5);  
  ellipse (190-mouseX/14-frameCount*0.05,290.55-frameCount*0.00885, 2.5,2.5);  
  ellipse (130-mouseX/14-frameCount*0.05,279.93-frameCount*0.00885, 2.5,2.5);  
  ellipse (100-mouseX/14-frameCount*0.05,274.62-frameCount*0.00885, 2.5,2.5);  
  ellipse (70-mouseX/14-frameCount*0.05,269.31-frameCount*0.00885, 2.5,2.5);  

 // Rotated rectangle for highway from bottom left to top right
  fill(-0.2125*mouseY+198,-0.295*mouseY+220,-0.305*mouseY+230);
  quad (160-mouseX/14,325,380-mouseX/14,285,380-mouseX/14,297,160-mouseX/14,337);
  
 //Highway cars, going other way, slope is just negative instead.
  fill (250,100,100,(mouseY)/1.5);
  ellipse (40-mouseX/14+frameCount*0.05,350.58-frameCount*0.00885, 2.5,2.5);  
  ellipse (80-mouseX/14+frameCount*0.05,343.5-frameCount*0.00885, 2.5,2.5);  
  ellipse (140-mouseX/14+frameCount*0.05,332.88-frameCount*0.00885, 2.5,2.5);  
  ellipse (180-mouseX/14+frameCount*0.05,325.8-frameCount*0.00885, 2.5,2.5); 
  ellipse (213-mouseX/14+frameCount*0.05,320-frameCount*0.00885, 2.5,2.5);  
  ellipse (240-mouseX/14+frameCount*0.05,315.221-frameCount*0.00885, 2.5,2.5);  
  ellipse (280-mouseX/14+frameCount*0.05,308.141-frameCount*0.00885, 2.5,2.5);  
  ellipse (300-mouseX/14+frameCount*0.05,304.6-frameCount*0.00885, 2.5,2.5);  
  ellipse (335-mouseX/14+frameCount*0.05,298.4-frameCount*0.00885, 2.5,2.5);  
  ellipse (370-mouseX/14+frameCount*0.05,292.2-frameCount*0.00885, 2.5,2.5);  

 //Far City Layer 1, buildings at the back
  fill(-0.2125*mouseY+198,-0.295*mouseY+220,-0.305*mouseY+230);
  rect(0-mouseX/12,400,45-mouseX/12,230);
  rect(0-mouseX/12,400,50-mouseX/12,300);
  triangle(45-mouseX/12,230,0-mouseX/12,270,22.5-mouseX/12,150);
  rect (0-mouseX/12,400,160-mouseX/12,295);
  rect (90-mouseX/12,400,170-mouseX/12,285);
  rect (85-mouseX/12,400,165-mouseX/12,290);
  rect (100-mouseX/12,400,180-mouseX/12,265);
  rect (110-mouseX/12,400,160-mouseX/12,195);
  rect (115-mouseX/12,400,155-mouseX/12,180);
  rect (155-mouseX/12,400,195-mouseX/12,275);
  rect (155-mouseX/12,400,200-mouseX/12,305);
  rect (200-mouseX/12,400,300-mouseX/12,340);
  rect (240-mouseX/12,400,300-mouseX/12,325);
  rect (260-mouseX/12,400,295-mouseX/12,315);
  rect (265-mouseX/12,400,290-mouseX/12,275);
  rect (340-mouseX/12,400,450-mouseX/12,315);
  rect (345-mouseX/12,400,450-mouseX/12,310);
  rect (380-mouseX/12,400,450-mouseX/12,260);
  triangle(380-mouseX/12,260,450-mouseX/12,260,435-mouseX/12,180);
  rect (375-mouseX/12,260,450-mouseX/12,270);
  rect (375-mouseX/12,280,450-mouseX/12,290);
  
// Far city lights, faint lights
   fill (160,160,160,(mouseY)/1.3-120-200*sin(frameCount*0.03)/1.5);
   rectMode(CENTER);
    rect(146-mouseX/12, 205, 8,3);
    rect(150-mouseX/12, 265, 5,3);
    rect(126-mouseX/12, 225, 4,3);
    rect(140-mouseX/12, 284, 35,3);
    rect(146-mouseX/12, 205, 5,3);
    rect(175-mouseX/12, 295, 15,3);
    rect(174-mouseX/12, 316, 6,3);
    rect(149-mouseX/12, 305, 6,3);
    rect(253-mouseX/12, 339, 4,4);
    rect(214-mouseX/12, 352, 4,4);
    rect(281-mouseX/12, 285, 8,3);
    rect(276-mouseX/12, 325, 4,4);
    rect(274-mouseX/12, 312, 10,3);
    rect(37-mouseX/12, 238, 5,3);
    rect(35-mouseX/12, 268, 5,3);
   rectMode(CORNERS);
   
//////////////////////////  
///BACKGROUND BUILDINGS///  
//////////////////////////    

  //Background Road (for the streetcar). Slope: (340-365)/(325-180)= -0.172
   fill (-0.17*mouseY+148,-0.17*mouseY+135,-0.19*mouseY+145);
   quad(180-mouseX/8,365,325-mouseX/8,340,325-mouseX/8,400,190-mouseX/8,400);
  //Streetcar Line
   stroke (125-0.17*mouseY);
   strokeWeight(1);
   line(180-mouseX/8,345,325-mouseX/8,320);
   line(185-mouseX/8+mouseX*0.5,361-0.172*mouseX*0.5,185-mouseX/8+mouseX*0.5,345.56-0.172*mouseX*0.5);
   
  //Streetcar
   //Not a shape, but instead a thick line.
    stroke(-0.1675*mouseY+166,-0.1325*mouseY+85,-0.085*mouseY+72);
    strokeCap(SQUARE);
    strokeWeight(10);
    line(180-mouseX/8+mouseX*0.5,361-0.172*mouseX*0.5,200-mouseX/8+mouseX*0.5,357.56-0.172*mouseX*0.5);
    strokeWeight(4);
    stroke(-0.1825*mouseY+216,-0.14*mouseY+177,-0.075*mouseY+128);
    line(178-mouseX/8+mouseX*0.5,355-0.172*mouseX*0.5,200-mouseX/8+mouseX*0.5,351.56-0.172*mouseX*0.5);
    noStroke();
    strokeCap(ROUND);
   //streetcar backlight
    fill (250,100,100,(mouseY)/1.5);
    ellipse(180-mouseX/8+mouseX*0.5,361-0.172*mouseX*0.5,2,2);
    
  //Very subtle fog effect at night  
   fill (212,151,102,(mouseY)/1.3-295);
   ellipse (width/2, 400, 500+100*sin(frameCount*0.005),500+100*sin(frameCount*0.005));
    
  //Background buildings
    //Triangle building
    fill(-0.08*mouseY+200,-0.12*mouseY+205,-0.0925*mouseY+205);
    triangle(-25-mouseX/6,325,50-mouseX/6,325,12.5-mouseX/6,55);
    //White highlight
    fill (-0.09*mouseY+235,-0.1375*mouseY+235,-0.1075*mouseY+235);
    triangle(7.5-mouseX/6,245,20-mouseX/6,245,12.5-mouseX/6,55);
    
  //Roofed building
    //Lit fill
    fill(-0.18*mouseY+230,-0.25*mouseY+238,-0.265*mouseY+225);
    rect(95-mouseX/6,400,145-mouseX/6,260);
    //Shadow fill
    fill(-0.2*mouseY+220,-0.23*mouseY+214,-0.1875*mouseY+180);
    rect(145-mouseX/6,400,175-mouseX/6,260);
    //Lit roof fill
    fill(-0.0225*mouseY+99,-0.0875*mouseY+109,-0.1*mouseY+124);
    quad(85-mouseX/6,260,185-mouseX/6,260,160-mouseX/6,230,110-mouseX/6,230);
    //Shadow roof fill
    fill(-0.0225*mouseY+82,-0.0825*mouseY+92,-0.1025*mouseY+103);
    quad(150-mouseX/6,260,185-mouseX/6,260,160-mouseX/6,230,140-mouseX/6,230);
      //Windows
      //Transparent during the day
       rectMode(CENTER);
       fill (215,188,170,(mouseY)/1.3-50);
       rect(105-mouseX/6, 270, 6,10);
       rect(120-mouseX/6, 270, 6,10);
       rect(120-mouseX/6, 290, 6,10);
       rect(135-mouseX/6, 290, 6,10);
       rect(105-mouseX/6, 310, 6,10);
       rect(135-mouseX/6, 310, 6,10);
       
       rect(157-mouseX/6, 270, 3,10);
       rect(170-mouseX/6, 270, 3,10);
       rect(157-mouseX/6, 310, 3,10);
       rect(157-mouseX/6, 330, 3,10);
       rect(170-mouseX/6, 330, 3,10);
       rectMode(CORNERS);
    
  //Right skyscraper, lit areas
    fill(-0.1175*mouseY+201,-0.1875*mouseY+205,-0.17*mouseY+190);
    rect(355-mouseX/8,450,500-mouseX/8,325);  
    rect(375-mouseX/8,450,450-mouseX/8,315); 
    rect(385-mouseX/8,450,500-mouseX/8,290);  
    rect(395-mouseX/8,450,440-mouseX/8,120);  
    rect(400-mouseX/8,450,435-mouseX/8,90);
    rect(405-mouseX/8,450,430-mouseX/8,60);  
    rect(414-mouseX/8,450,421-mouseX/8,10); 
    // Shaded areas on tower
    fill(-0.0775*mouseY+170,-0.15*mouseY+176,-0.14*mouseY+166);
    rect(422-mouseX/8,325,440-mouseX/8,125); 
    rect(435-mouseX/8,120,422-mouseX/8,95);
    rect(430-mouseX/8,90,422-mouseX/8,65);
    // Windows
    // Has 2 colours, so there are lines of stroke designation between the code
     stroke (215,188,136,(mouseY)/1.3-50);
     strokeCap(SQUARE);
     strokeWeight(1.5);
     stroke (250,246,243,(mouseY)/1.3-50);
     line(402-mouseX/8,100,418-mouseX/8,100);  
     line(405-mouseX/8,120,412-mouseX/8,120);  
     line(408-mouseX/8,80,412-mouseX/8,80);      
     stroke (215,188,136,(mouseY)/1.3-50);  
     line(398-mouseX/8,130,418-mouseX/8,130);  
     line(398-mouseX/8,140,412-mouseX/8,140);  
     line(410-mouseX/8,150,418-mouseX/8,150);  
     line(398-mouseX/8,170,418-mouseX/8,170);  
     line(412-mouseX/8,180,415-mouseX/8,180); 
     stroke (250,246,243,(mouseY)/1.3-50);
     line(403-mouseX/8,190,413-mouseX/8,190);  
     line(410-mouseX/8,200,418-mouseX/8,200);
     stroke (215,188,136,(mouseY)/1.3-50);
     line(398-mouseX/8,220,410-mouseX/8,220);  
     line(398-mouseX/8,230,418-mouseX/8,230); 
     line(400-mouseX/8,250,418-mouseX/8,250); 
     line(398-mouseX/8,260,412-mouseX/8,260); 
     line(400-mouseX/8,270,410-mouseX/8,270); 
     stroke (250,246,243,(mouseY)/1.3-50);
     line(398-mouseX/8,290,418-mouseX/8,290);
     stroke (215,188,136,(mouseY)/1.3-50);
     line(398-mouseX/8,300,410-mouseX/8,300); 
     line(388-mouseX/8,310,420-mouseX/8,310); 
     line(378-mouseX/8,320,418-mouseX/8,320); 
     stroke (250,246,243,(mouseY)/1.3-50);
     line(378-mouseX/8,330,415-mouseX/8,330); 
     stroke (215,188,136,(mouseY)/1.3-50);
     line(388-mouseX/8,350,410-mouseX/8,350); 
     noStroke();
  //Black block building
    fill(-0.055*mouseY+94,-0.08*mouseY+94,-0.0675*mouseY+94);
    rect(305-mouseX/6,450,385-mouseX/6,170);
    rect(318-mouseX/6,450,372-mouseX/6,160);
    
    //Windows
      stroke (215,188,136,(mouseY)/1.3-50);
      strokeCap(SQUARE);
      strokeWeight(1.5);
      line (325-mouseX/6,240, 335-mouseX/6, 240);
      line (315-mouseX/6,230, 335-mouseX/6, 230);
      stroke (250,246,243,(mouseY)/1.3-50);
      line (315-mouseX/6,210, 320-mouseX/6, 210);
      stroke (215,188,136,(mouseY)/1.3-50);
      line (320-mouseX/6,180, 335-mouseX/6, 180);
      stroke (250,246,243,(mouseY)/1.3-50);
      line (315-mouseX/6,280, 340-mouseX/6, 280);
      stroke (215,188,136,(mouseY)/1.3-50);
      line (350-mouseX/6,280, 360-mouseX/6, 280);
      line (360-mouseX/6,300, 380-mouseX/6, 300);
      line (340-mouseX/6,300, 355-mouseX/6, 300);
      stroke (250,246,243,(mouseY)/1.3-50);
      line (360-mouseX/6,310, 370-mouseX/6, 310);
      stroke (215,188,136,(mouseY)/1.3-50);
      line (330-mouseX/6,330, 345-mouseX/6, 330);
      line (320-mouseX/6,340, 350-mouseX/6, 340);
      line (340-mouseX/6,350, 365-mouseX/6, 350);
      line (320-mouseX/6,310, 340-mouseX/6, 310);
      strokeCap(ROUND);
    noStroke();
    
    
    //Lighter highlight
    fill(-0.07*mouseY+112,-0.0925*mouseY+108,-0.0675*mouseY+109);
    rect(340-mouseX/6,260,385-mouseX/6,170);        
          
  //brown block buildings
    fill(-0.155*mouseY+161,-0.0875*mouseY+105,-0.04*mouseY+97);
    rect (0-mouseX/4,400,80-mouseX/4,320);
    rect (80-mouseX/4,335,235-mouseX/4,330);
    rect (360-mouseX/4, 345, 450-mouseX/4, 350);
    rect (200-mouseX/4,365,360-mouseX/4,370);
    //darker coloured
    fill(-0.21*mouseY+144,-0.1475*mouseY+97,-0.1175*mouseY+90);
    rect (80-mouseX/4,400,185-mouseX/4,315);
    rect (80-mouseX/4,400,235-mouseX/4,335);
    rect (360-mouseX/4, 400, 450-mouseX/4, 350);
    rect (200-mouseX/4,400,360-mouseX/4,370);
  
  //Trees
    //Trunk
    stroke (-0.225*mouseY+179,-0.2325*mouseY+167,-0.2325*mouseY+161);
      //Main trunk
      strokeWeight(5);
      line (185-mouseX/4,360, 185-mouseX/4, 400);
      line (135-mouseX/4,355, 135-mouseX/4, 400);
      line (85-mouseX/4,355, 85-mouseX/4, 400);
      line (235-mouseX/4,350, 235-mouseX/4, 400);
      line (285-mouseX/4,355, 285-mouseX/4, 400);
      line (335-mouseX/4,360, 335-mouseX/4, 400);
      line (385-mouseX/4,350, 385-mouseX/4, 400);
      line (435-mouseX/4,360, 435-mouseX/4, 400);
      //Smaller branches
      strokeWeight(2);
      line (175-mouseX/4,360, 185-mouseX/4, 385);
      line (195-mouseX/4,360, 185-mouseX/4, 385);  
      line (125-mouseX/4,355, 135-mouseX/4, 380);
      line (145-mouseX/4,355, 135-mouseX/4, 380);  
      line (75-mouseX/4,360, 85-mouseX/4, 385);
      line (95-mouseX/4,360, 85-mouseX/4, 385);  
      line (225-mouseX/4,350, 235-mouseX/4, 375);
      line (245-mouseX/4,350, 235-mouseX/4, 375);  
      line (275-mouseX/4,355, 285-mouseX/4, 380);
      line (295-mouseX/4,355, 285-mouseX/4, 380);  
      line (325-mouseX/4,360, 335-mouseX/4, 385);
      line (345-mouseX/4,360, 335-mouseX/4, 385);  
      line (375-mouseX/4,350, 385-mouseX/4, 375);
      line (395-mouseX/4,350, 385-mouseX/4, 375); 
      line (425-mouseX/4,360, 435-mouseX/4, 385);
      line (445-mouseX/4,360, 435-mouseX/4, 385);  
    
    noStroke();
    //Leaves
      rectMode(CENTER);
      fill (-0.13*mouseY+113,-0.235*mouseY+152,-0.13*mouseY+89);
      rect (185-mouseX/4, 360, 25,25);
      rect (185-mouseX/4, 360, 35,15);   
      rect (135-mouseX/4, 355, 25,25);
      rect (135-mouseX/4, 355, 35,15);      
      rect (85-mouseX/4, 360, 25,25);
      rect (85-mouseX/4, 360, 35,15);      
      rect (235-mouseX/4,350, 25,25);
      rect (235-mouseX/4,350, 35,15);  
      rect (285-mouseX/4,355, 25,25);
      rect (285-mouseX/4,355, 35,15);  
      rect (335-mouseX/4,360, 25,25);
      rect (335-mouseX/4,360, 35,15); 
      rect (385-mouseX/4,350, 25,25);
      rect (385-mouseX/4,350, 35,15);  
      rect (435-mouseX/4,360, 25,25);
      rect (435-mouseX/4,360, 35,15);  
    rectMode(CORNERS);
//////////////////////    
////Midground city////
//////////////////////

 //Lady building left
    fill (-0.08*mouseY+168,-0.1325*mouseY+191,-0.1475*mouseY+195);
    rect (0-mouseX/2,400, 80-mouseX/2, 270);
    
    //Windows
      //Light grey
      fill (0.0775*mouseY+215,0.0475*mouseY+201,189);
      rect (0-mouseX/2, 400, 40-mouseX/2, 270);
      rect (55-mouseX/2, 275, 75-mouseX/2, 305);
      //Dark grey
      fill(0.1625*mouseY+181,0.13*mouseY+168,0.07*mouseY+159);
      rect (30-mouseX/2,400, 40-mouseX/2, 270);
      rect (55-mouseX/2, 320, 75-mouseX/2, 355);
      
    //Roof
    fill(-0.0575*mouseY+94,-0.0225*mouseY+63,52);
    quad(-5-mouseX/2,265, 85-mouseX/2, 265, 65-mouseX/2, 235, 15-mouseX/2, 235);
    
    //White outlines
      stroke (-0.095*mouseY+245,-0.14*mouseY+225,-0.0725*mouseY+196);
      strokeWeight(3);
      noFill();
      //Upper right window
      rect (55-mouseX/2, 275, 75-mouseX/2, 305);
      line (60-mouseX/2, 275, 60-mouseX/2, 305);
      line (65-mouseX/2, 275, 65-mouseX/2, 305);
      line (70-mouseX/2, 275, 70-mouseX/2, 305);
        //mini rectangle accent
        fill(163,141,141);
        rect (55-mouseX/2, 300, 75-mouseX/2, 305);
        noFill();
      //Lower right window
      rect (55-mouseX/2, 320, 75-mouseX/2, 355);
      rect (55-mouseX/2, 335, 75-mouseX/2, 344);
      line (60-mouseX/2, 335, 60-mouseX/2, 355);
      line (70-mouseX/2, 335, 70-mouseX/2, 355);
      //Left window frame
      line (0-mouseX/2,270,0-mouseX/2,360);
      line (10-mouseX/2,270,10-mouseX/2,360);
      line (30-mouseX/2,270,30-mouseX/2,360);
      line (40-mouseX/2,270,40-mouseX/2,360);
      beginShape();
        vertex (40-mouseX/2,306);
        vertex (30-mouseX/2,311);
        vertex (10-mouseX/2,311);
        vertex (0-mouseX/2,306);
      endShape ();
      beginShape();
        vertex (40-mouseX/2,314);
        vertex (30-mouseX/2,319);
        vertex (10-mouseX/2,319);
        vertex (0-mouseX/2,314);
      endShape ();
      //Lower left Window fill
      noStroke();
      fill(-0.1325*mouseY+198,-0.1325*mouseY+165,-0.0675*mouseY+141);
      beginShape();
        vertex (42-mouseX/2,360);
        vertex (42-mouseX/2,340);
        vertex (30-mouseX/2,345);
        vertex (10-mouseX/2,345);
        vertex (0-mouseX/2,340);
        vertex (0-mouseX/2,360);
      endShape ();
      //Upper Left Window fill
      beginShape();
        vertex (42-mouseX/2,275);
        vertex (30-mouseX/2,280);
        vertex (10-mouseX/2,280);
        vertex (0-mouseX/2,275);
        vertex (0-mouseX/2,270);
        vertex (42-mouseX/2,270);
        vertex (42-mouseX/2,275);
      endShape();
      noStroke();
      
   //Blue outlining near roof
    fill (-0.06*mouseY+99,-0.13*mouseY+131,-0.1475*mouseY+134);
    rect (0-mouseX/2,265, 80-mouseX/2, 270);   
   //Outlining in the center, from right to left
    noFill();
    stroke (-0.1325*mouseY+198,-0.1325*mouseY+165,-0.0675*mouseY+141);
    strokeWeight (4);
    beginShape();
      vertex (80-mouseX/2,310);
      vertex (40-mouseX/2,310);
      vertex (30-mouseX/2,315);
      vertex (10-mouseX/2,315);
      vertex (0-mouseX/2,310);
      vertex (-2-mouseX/2,310);
    endShape ();
    noStroke();
    //Accents
      //Dark blue
      fill(-0.06*mouseY+99,-0.13*mouseY+131,-0.1475*mouseY+134);
      rect(42-mouseX/2,345, 100-mouseX/2, 370);
      //Dark grey stairs
      fill(-0.0675*mouseY+86,-0.07*mouseY+73,-0.0925*mouseY+65);
      rect(42-mouseX/2,345, 54-mouseX/2, 347);
      rect(41-mouseX/2,348, 55-mouseX/2, 350);
      rect(40-mouseX/2,351, 56-mouseX/2, 353);
      rect(39-mouseX/2,354, 57-mouseX/2, 356);
    
    
  //Lady building right
    fill (-0.025*mouseY+163,-0.11*mouseY+188,-0.0575*mouseY+142);
    rect (120-mouseX/2,400, 200-mouseX/2,290);
    //Windows
      //Light grey
      fill (0.0775*mouseY+215,0.0475*mouseY+201,189);
      rect (120-mouseX/2,400, 160-mouseX/2, 290);
      rect (175-mouseX/2, 295, 195-mouseX/2, 325);
      //Dark grey
      fill(0.1625*mouseY+181,0.13*mouseY+168,0.07*mouseY+159);
      rect (150-mouseX/2,400, 160-mouseX/2, 290);
      rect (175-mouseX/2, 340, 195-mouseX/2, 375);
      
    //Roof
    fill(-0.04*mouseY+94,-0.0125*mouseY+52,0.0175*mouseY+56);
    quad(115-mouseX/2,285, 205-mouseX/2, 285, 185-mouseX/2, 255, 135-mouseX/2, 255);
    
    //White outlines
      stroke (-0.095*mouseY+245,-0.14*mouseY+225,-0.0725*mouseY+196);
      strokeWeight(3);
      noFill();
      //Upper right window
      rect (175-mouseX/2, 295, 195-mouseX/2, 325);
      line (180-mouseX/2, 295, 180-mouseX/2, 325);
      line (185-mouseX/2, 295, 185-mouseX/2, 325);
      line (190-mouseX/2, 295, 190-mouseX/2, 325);
        //mini rectangle accent
        fill(181,168,159);
        rect (175-mouseX/2, 320, 195-mouseX/2, 325);
      noFill();
      //Lower right window
      rect (175-mouseX/2, 340, 195-mouseX/2, 375);
      rect (175-mouseX/2, 355, 195-mouseX/2, 364);
      line (180-mouseX/2, 355, 180-mouseX/2, 375);
      line (190-mouseX/2, 355, 190-mouseX/2, 375);
      //Left window frame
      line (120-mouseX/2,290,120-mouseX/2,380);
      line (130-mouseX/2,290,130-mouseX/2,380);
      line (150-mouseX/2,290,150-mouseX/2,380);
      line (160-mouseX/2,290,160-mouseX/2,380);
      beginShape();
        vertex (160-mouseX/2,326);
        vertex (150-mouseX/2,331);
        vertex (130-mouseX/2,331);
        vertex (120-mouseX/2,326);
      endShape ();
      beginShape();
        vertex (160-mouseX/2,334);
        vertex (150-mouseX/2,339);
        vertex (130-mouseX/2,339);
        vertex (120-mouseX/2,334);
      endShape ();
      //Lower left Window fill
      noStroke();
      fill(-0.095*mouseY+245,-0.14*mouseY+225,-0.0725*mouseY+196);
      beginShape();
        vertex (160-mouseX/2,380);
        vertex (160-mouseX/2,360);
        vertex (150-mouseX/2,365);
        vertex (130-mouseX/2,365);
        vertex (120-mouseX/2,360);
        vertex (120-mouseX/2,380);
      endShape ();
      //Upper Left Window fill
      noStroke();
      beginShape();
        vertex (160-mouseX/2,295);
        vertex (150-mouseX/2,300);
        vertex (130-mouseX/2,300);
        vertex (120-mouseX/2,295);
        vertex (120-mouseX/2,290);
        vertex (160-mouseX/2,290);
        vertex (160-mouseX/2,295);
      endShape();
      noStroke();
      
   //Red outlining
     fill (-0.1125*mouseY+127,-0.0225*mouseY+29,0.06*mouseY+25);
     rect (120-mouseX/2,285, 200-mouseX/2, 290);
   //Outlining in the center, from right to left
    noFill();
    stroke (-0.1125*mouseY+127,-0.0225*mouseY+29,0.06*mouseY+25);
    strokeWeight (4);
    beginShape();
      vertex (200-mouseX/2,330);
      vertex (160-mouseX/2,330);
      vertex (150-mouseX/2,335);
      vertex (130-mouseX/2,335);
      vertex (120-mouseX/2,330);
      vertex (118-mouseX/2,330);
    endShape ();
    noStroke();
    //Accents
      //Dark green
      fill(-0.0725*mouseY+103,-0.145*mouseY+127,-0.0975*mouseY+85);
      rect(162-mouseX/2,365, 220-mouseX/2, 390);
      //Dark grey stairs
      fill(-0.0675*mouseY+86,-0.07*mouseY+73,-0.0925*mouseY+65);
      rect(162-mouseX/2,365, 174-mouseX/2, 367);
      rect(161-mouseX/2,368, 175-mouseX/2, 370);
      rect(160-mouseX/2,371, 176-mouseX/2, 373);
      rect(159-mouseX/2,374, 177-mouseX/2, 376);

  //Streetlamp poles 
    fill(-0.295*mouseY+170,-0.295*mouseY+168,-0.3125*mouseY+180);
    rect (235-mouseX/2, 395, 240-mouseX/2, 280);  
    rect (100-mouseX/2, 395, 105-mouseX/2, 263.33);  
    rect (370-mouseX/2, 400, 375-mouseX/2, 296.67);
    rect (505-mouseX/2, 395, 510-mouseX/2, 313.34);
    
  //Midground street 
    fill (-0.2075*mouseY+177,-0.2075*mouseY+166,-0.25*mouseY+184);
    triangle(0-mouseX/2,350,345-mouseX/2,400,0-mouseX/2,400);
    
  
  //Streetlamp light
    fill (250,230,150,(mouseY)/2-135);
    triangle (242.5-mouseX/2, 280, 262.5-pmouseX/2,400,222.5-pmouseX/2,400); 
    triangle (107.5-mouseX/2, 263.33, 127.5-pmouseX/2,400,87.5-pmouseX/2,400); 
    triangle (377.5-mouseX/2, 296.67, 397.5-pmouseX/2,400,357.5-pmouseX/2,400); 
    triangle (512.5-mouseX/2, 313.34, 532.5-pmouseX/2,400,492.5-pmouseX/2,400); 
  
  //Streetlamp head
    fill(-0.295*mouseY+170,-0.295*mouseY+168,-0.3125*mouseY+180);
    rect (235-mouseX/2, 280, 250-mouseX/2, 290);
    rect (100-mouseX/2, 263.33, 115-mouseX/2, 273.33);
    rect (370-mouseX/2, 296.67, 385-mouseX/2, 306.67);
    rect (505-mouseX/2, 313.34, 520-mouseX/2, 323.34);
    
  //Invisible midground street, to block the streetlight beams
    fill (-0.2075*mouseY+177,-0.2075*mouseY+166,-0.25*mouseY+184);
    triangle(0-mouseX/2,355,345-mouseX/2,405,0-mouseX/2,405); 
    
  //Darker midground street
    fill (-0.1975*mouseY+110,-0.18*mouseY+103,-0.21*mouseY+115);
    triangle(0-mouseX/2,371,210-mouseX/2,400,0-mouseX/2,400);
    
////////////////////////
////Foreground Fence////  
////////////////////////

  noFill();
  stroke (-0.0675*mouseY+49,-0.075*mouseY+46,-0.0925*mouseY+51);
  //Spokes
  strokeWeight(2.5);
  line (10-mouseX,400,10-mouseX,355);
  line (30-mouseX,400,30-mouseX,355);
  line (50-mouseX,400,50-mouseX,355);
  line (70-mouseX,400,70-mouseX,355);
  line (90-mouseX,400,90-mouseX,355);
  line (110-mouseX,400,110-mouseX,355);
  line (130-mouseX,400,130-mouseX,355);
  line (150-mouseX,400,150-mouseX,355);
  line (170-mouseX,400,170-mouseX,355);
  line (190-mouseX,400,190-mouseX,355);
  line (210-mouseX,400,210-mouseX,355);
  
  //Bolded Spokes
  strokeWeight(5);
  line (10-mouseX,400,10-mouseX,350);
  line (110-mouseX,400,110-mouseX,350);
  line (210-mouseX,400,210-mouseX,350);
  
  //Railing
  line (0-mouseX,355, 210-mouseX, 355);
  noStroke();
  fill (-0.0675*mouseY+49,-0.075*mouseY+46,-0.0925*mouseY+51);
  ellipse (10.5-mouseX,345, 10,10);
  ellipse (110.5-mouseX,345, 10,10);
  ellipse (210.5-mouseX,345, 10,10);
  
///////////////////////
///////Downtown////////
///////////////////////

 //Building
   fill(0.0675*mouseY+84,-0.0575*mouseY+84,-0.0625*mouseY+91);
   rect (550-mouseX/1.5,400, 670-mouseX/1.5, 280);
  //Windows
   fill(0.34*mouseY+110,0.275*mouseY+110,0.1575*mouseY+124);
   rect (560-mouseX/1.5,300, 580-mouseX/1.5, 325);
   rect (595-mouseX/1.5,300, 615-mouseX/1.5, 325);
   rect (630-mouseX/1.5,335, 650-mouseX/1.5, 360);
  //Window dark fill
   fill(0.04*mouseY+67,-0.04*mouseY+67,-0.055*mouseY+74);
   rect (560-mouseX/1.5,320, 580-mouseX/1.5, 325);
   rect (595-mouseX/1.5,320, 615-mouseX/1.5, 325);
   rect (630-mouseX/1.5,355, 650-mouseX/1.5, 360);
  //Roof rim
   fill(-0.065*mouseY+150,-0.1775*mouseY+150,-0.21*mouseY+162);
   rect (548-mouseX/1.5,280, 670-mouseX/1.5, 273);
  //Street blocks
   fill(0.0075*mouseY+172,-0.0875*mouseY+165,-0.09*mouseY+143);
   rect (540-mouseX/1.5,400, 600-mouseX/1.5, 375);
   rect (640-mouseX/1.5,400, 700-mouseX/1.5, 365);
  
 //Lantern decorations
  //Line where they hang from
   stroke (79,52,43);
   noFill();
   strokeWeight(1.5);
   arc (610-mouseX/1.5,210,250,250,radians(0), radians (115) );
   noStroke();
  //Lanterns
    fill(0.1825*mouseY+182,-0.2625*mouseY+222,-0.145*mouseY+170);
    ellipse (565-pmouseX/1.5,332 , 13,10);
    fill(0.265*mouseY+149,0.145*mouseY+59,0.13*mouseY+60);  
    ellipse (585-pmouseX/1.5,338 , 13,10);
    fill(0.07*mouseY+227,-0.2775*mouseY+228,-0.2125*mouseY+197);  
    ellipse (605-pmouseX/1.5,341 , 13,10);
    fill(0.215*mouseY+169,-0.0975*mouseY+156,-0.225*mouseY+202);  
    ellipse (627-pmouseX/1.5,340 , 13,10);
    fill(255,-0.2425*mouseY+214,-0.2325*mouseY+205);  
    ellipse (649-pmouseX/1.5,336 , 13,10);
    //Lower right lanterns
    fill(0.265*mouseY+149,0.145*mouseY+59,0.13*mouseY+60);  
    ellipse (620-pmouseX/1.5,365 , 8,6);
    ellipse (630-pmouseX/1.5,365 , 8,6);
    ellipse (640-pmouseX/1.5,365 , 8,6);
    ellipse (650-pmouseX/1.5,365 , 8,6);
    ellipse (660-pmouseX/1.5,365 , 8,6);
        

 //Chinatown Gate  
  //Supports
    fill (-0.1025*mouseY+183,-0.2175*mouseY+192,-0.24*mouseY+196);
    //Left Supports
    rect (475-mouseX/1.5,400, 480-mouseX/1.5,360);
    rect (500-mouseX/1.5,400, 505-mouseX/1.5,360);
    //Right Supports
    rect (550-mouseX/1.5,400, 555-mouseX/1.5,360);
    rect (575-mouseX/1.5,400, 580-mouseX/1.5,360);
    //Central Supports
    rect (500-mouseX/1.5,400, 505-mouseX/1.5,340);
    rect (550-mouseX/1.5,400, 555-mouseX/1.5,340);
    //Horizontal Supports
    rect (475-mouseX/1.5,365, 505-mouseX/1.5, 368);
    rect (550-mouseX/1.5,365, 580-mouseX/1.5, 368);
    //Wooden detail
    fill (-0.0325*mouseY+79,-0.03*mouseY+49,0.02*mouseY+45);
    rect (474-mouseX/1.5,360, 506-mouseX/1.5, 363);
    rect (549-mouseX/1.5,360, 581-mouseX/1.5, 363);
    rect (495-mouseX/1.5,340, 560-mouseX/1.5, 343);
    //Sign
    rect (520-mouseX/1.5,345, 534-mouseX/1.5, 350);
    fill(-0.06*mouseY+99,-0.13*mouseY+131,-0.1475*mouseY+134);
    rect (522-mouseX/1.5,346, 532-mouseX/1.5, 349);
    //Highlight
    
  //Central Gate
    fill (0.1125*mouseY+112,-0.185*mouseY+196,-0.2275*mouseY+179);
    quad (500-mouseX/1.5,320,555-mouseX/1.5,320, 565-mouseX/1.5, 340, 490-mouseX/1.5,340);
  //Left Gate
    quad (480-mouseX/1.5,345,500-mouseX/1.5,345, 510-mouseX/1.5, 360, 470-mouseX/1.5,360);
  //Right Gate 
    quad (555-mouseX/1.5,345,575-mouseX/1.5,345, 585-mouseX/1.5, 360, 545-mouseX/1.5,360);
    
    
 //Downtown Street
  fill (-0.1225*mouseY+137,-0.17*mouseY+126,-0.1975*mouseY+144);
  rect (460-mouseX/1.5,390,700-mouseX/1.5,400);
  triangle (461-mouseX/1.5,390,461-mouseX/1.5,400,430-mouseX/1.5,400);


////MOUSE POSITION AID////
/* I used this to help me figure out where my pointer is, in relation to each layer.
fill (0);
text(" x: "+(mouseX+mouseX/14)+" y: "+mouseY+"  X is /14", 10, 15);
text(" day:"+(350-mouseY*2), 10 ,30);
text(" night:"+((mouseY)/1.3-50), 70 ,30);
text(" R:"+(0.1775*mouseY+147),10,45);
*/

///////////////////////
/////Custom cursor/////
///////////////////////
//Changes colour based on time of day
fill(-155+mouseY*1.5,-155+mouseY*1.5,-155+mouseY*1.5);
stroke(-155+mouseY*1.5,-155+mouseY*1.5,-155+mouseY*1.5);
strokeWeight(1.5);
triangle (mouseX-3,mouseY-5,mouseX+3,mouseY+1,mouseX-2,mouseY+4);
noStroke();

}

//Mouse click function, shows the title
void mousePressed (){
  //I'm sorry.. I cheated and used variables to load a font! Sorry! It's a very minor element though.
  PFont font;
  PFont font2;
  font = loadFont ("MicrosoftYaHeiLight-48.vlw");
  font2 = loadFont ("MicrosoftPhagsPa-48.vlw");
  //Lower framerate so we see the title for longer
  frameRate(0.7);
  fill(255, 180);
  rectMode(CENTER);
  rect (width/2, height/2, width*0.7, height*0.35, 5);
  fill (0);
  textFont (font, 38);
  text ("san francisco", 90, height/2-10);
  textFont (font2, 16);
  text ("by william lu", 155, height/2+20);
  text ("for ann", 170, height/2+40);

  textSize (10);
  rectMode(CORNERS);
  
}