Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
Created by Sean Braithwaite
September 16th, 2015; completed on September 22nd, 2015;
Introduction to Media Computation
Professor: Nicolas Hesler

Vison Enchancement Device Simulator 2015

Your mouse controls a pair of glasses which enchance vision as they are lowered towards ones head
The closer the glasses are to the head the easier it is to read the sign

Clicking the mouse applies a kind of x-ray effect to the glasses frame if it is infront of the players head

Pressing a button flashes the players eye on the screen (hold button for best effect)
*/

//Setup will run A SINGLE TIME upon initial program launch...
//used to setup canvas and preferred settings
void setup(){
//Open up a 400x400 pixel canvas
 size(400,400);

 //set creation mode for convenience
 rectMode(CORNER);
 ellipseMode(CENTER);
 
 //Set framerate
 frameRate(60);
}

//This function will run once per frame
void draw(){
  //clear screen from previous frame
  fill(0);
  rect(0,0,400,400);
  
  //set background to a darker shade to bring other objects to the foreground
  background(#C1C1C1);
  
  ///////////////////////////////////////////////////////////
  //////////////////////SIGN DETAILS/////////////////////////
  ///////////////////////////////////////////////////////////
  
  //backboard
  strokeWeight(5);
  fill(#F5F5F5);
  stroke(#F0F0F0);
  rect(25,25,350,350,10); //backboard
  
  //backboard details
  fill(#F5E33E);
  noStroke();
  ellipse(50,50,10,10); //nail left
  ellipse(350,50,10,10); //nail right
  
  //sign characters first row
  ///////////////////////////////////////////////////////////
  /////////////////////////ROW ONE///////////////////////////
  ///////////////////////////////////////////////////////////
  
  //Below lines pertaining to the change in an objects width cause crashes if the mouse is clicked and dragged out of the upper boundary of the screen,
  //however the resuslt visually is more powerful than the crash, thus it remains.
  
  //Being exported and/ or embedded in a web page should resolve this issue as far as I know... This crash is unavoidable without conditionals as far as I know, 
  //and will affect all projects making use of width/height changes in association with mouse coordinates.

  //setup vision gradient
  //adjust distortion for this level
  strokeWeight(406-mouseY);
  stroke(0,mouseY-300);
  
  //make letters and symbols
  
  //#
  line(185,45,205,45);//upper hori
  line(185,55,205,55);//lower hori
  line(190,40,190,60);//left vert
  line(200,40,200,60);//right vert
  
  //1
  line(220,40,220,60);
   
  //W
  line(100,75,100,95);//leftmost vert
  line(110,85,100,95);//middleleft diag
  line(110,85,120,95);//middleright diag
  line(120,75,120,95);//right vert
  
  //E
  line(130,75, 150, 75);//upper hori
  line(130,85, 140, 85);//mid hori
  line(130,95, 150, 95);//lower hori
  line(130,75,130,95);//left vert
  
  //L
  line(160,75,160,95);//vert
  line(160,95,180,95);//hori
  
  //C
  line(190,75,210,75);//upper hori
  line(190,95,210,95);//lower hori
  line(190,75,190,95);//left vert
  
  //O
  line(220,75,240,75);//upper hori
  line(220,75,220,95);//left vert
  line(220,95,240,95);//lower hori
  line(240,75,240,95);//right vert
  
  //M
  line(250,75,250,95);//left vert
  line(270,75,270,95);//right vert
  line(250,75,260,85);//middleleft diag
  line(270,75,260,85);//middleright diag
  
  //E
  line(280,75, 300, 75);//upper hori
  line(280,85, 290, 85);//mid hori
  line(280,95, 300, 95);//lower hori
  line(280,75,280,95);//left vert
  
  //second row of charactes
  ///////////////////////////////////////////////////////////
  /////////////////////////ROW TWO///////////////////////////
  ///////////////////////////////////////////////////////////
  
  //adjust distortion for this level
  strokeWeight(404-mouseY);
  stroke(0,mouseY-325);

  //T
  line(175,125,195,125);//upper hori
  line(185,125,185,145);//mid vert
  
  //O
  line(205,125,205,145);//left vert
  line(225,125,225,145);//right vert
  line(205,125,225,125);//upper hori
  line(205,145,225,145);//upper hori
  
  //third row of characters
  ///////////////////////////////////////////////////////////
  ////////////////////////ROW THREE//////////////////////////
  ///////////////////////////////////////////////////////////
  
  //adjust distortion for this level
  strokeWeight(402-mouseY);
  stroke(0,mouseY-350);
  
  //S
  line(85,175,105,175);//upper hori
  line(85,175,85,185);//left vert
  line(85,185,105,185);//mid hori
  line(105,185,105,195);//right vert
  line(85,195,105,195);//lower hori
  
  //H
  line(115,175,115,195);//left vert
  line(135,175,135,195);//right vert
  line(115,185,135,185);//middle hori
  
  //E
  line(145,175,145,195);//left vert
  line(145,175,165,175);//upper hori
  line(145,185,155,185);//mid hori
  line(145,195,165,195);//lower hori
  
  //R
  line(175,175,175,195);//left vert
  line(175,175,195,175);//top hori
  line(175,185,195,185);//mid hori
  line(195,175,195,185);//right vert
  line(175,185,195,195);//leg
  
  //I
  line(205,175,225,175);//upper hori
  line(205,195,225,195);//lower hori
  line(215,175,215,195);//mid vert
  
  //D
  line(235,175,235,195);//left vert
  line(235,175,255,175);//top hori
  line(235,195,255,195);//lower hori
  line(255,175,255,195);//right diag
  
  //A
  line(265,175,265,195);//left vert
  line(285,175,285,195);//right vert
  line(265,175,285,175);//upper hori
  line(265,185,285,185);//lower hori
  
  //N
  line(295,175,295,195);//left vert
  line(315,175,315,195);//right vert
  line(295,175,315,195);//mid diag
  
  //fourth and final row of characters
  ///////////////////////////////////////////////////////////
  /////////////////////////ROW FOUR//////////////////////////
  ///////////////////////////////////////////////////////////
  
  //adjust distortion for this level
  strokeWeight(400-mouseY);
  stroke(0,mouseY-375);
  
  //C
  line(105,225,105,245);//left vert
  line(105,225,125,225);//upper hori
  line(105,245,125,245);//lower hori
  
  //O
  line(135,225,135,245);//left vert
  line(155,225,155,245);//right vert
  line(135,225,155,225);//upper hori
  line(135,245,155,245);//lower hori
  
  //L
  line(165,225,165,245);//left vert
  line(165,245,185,245);//lower hori
  
  //L
  line(195,225,195,245);//left vert
  line(195,245,215,245);//lower hori
  
  //E
  line(225,225,225,245);//left vert
  line(225,225,245,225);//upper hori
  line(225,235,235,235);//mid hori
  line(225,245,245,245);//lower hori
  
  //G
  line(255,225,275,225);//upper hori
  line(255,245,275,245);//lower hori
  line(275,245,275,235);//right vert
  line(255,225,255,245);//left vert
  line(265,235,275,235);//middle hori
  
  //E
  line(285,225,285,245);//left vert
  line(285,225,305,225);//upper hori
  line(285,235,295,235);//mid hori
  line(285,245,305,245);//lower hori
  
  ///////////////////////////////////////////////////////////
  //////////////////////////EARS/////////////////////////////
  ///////////////////////////////////////////////////////////
  
  //Ears
  strokeWeight(7);
  stroke(#F7E7BE);
  fill(#F0E1BA);
  triangle(50,400,25,350,75,355);//left ear
  triangle(350,400,375,350,325,355);//right ear
  
  ///////////////////////////////////////////////////////////
  //////////////////MAGNIFICATION DEVICE/////////////////////
  ///////////////////////////////////////////////////////////
  
  //arms
  stroke(#48402B);
  line(25,400,75, mouseY);//left arm
  line(375,400,325, mouseY);//right arm
   
  //bridge (connector)
  stroke(#F5E33E);
  strokeWeight(12);
  line(180, mouseY, 220, mouseY);
 
  //head decoration
  //white dot
  noStroke();
  fill(255);
  ellipse(115, mouseY-25, 10, 10);//left deco
  ellipse(265, mouseY-25, 10, 10);//right deco
 
  //distortion
  noFill();
  stroke(#4EDFFA,50);
  ellipse(125, mouseY, 87, 87);//left distort
  ellipse(275, mouseY, 87, 87);//right distort
  
  //Magnification device lens & rims
  stroke(#F5E33E);
  strokeWeight(7);
  noFill();
  ellipse(125, mouseY, 100, 100);//left rim
  ellipse(275, mouseY, 100, 100);//right rim
  
  ///////////////////////////////////////////////////////////
  //////////////////////////HEAD/////////////////////////////
  ///////////////////////////////////////////////////////////
  //Head
  stroke(#F7E7BE);//setup colours
  fill(#F0E1BA);
  //head is rectangle with greatly curved corners
  rect(50,275,300,300,200,200,0,0);
  
  fill(255);//setup bald shine effect
  noStroke();
  ellipse(125,325,20,20);//sheen 
  
    
  ///////////////////////////////////////////////////////////
  ///////////////////SQUINTING OVERLAY///////////////////////
  ///////////////////////////////////////////////////////////
 
   //as mouse is lowered, bring dark boxes into view to simulate revolutionary squinting feature like never before
    fill(0);
    rect(0,0,400,-350+mouseY);//upper eyelid
    rect(0,400,400,350-mouseY);//lower eyelid
}

//performs function actions upon trigger (mousepress)
void mousePressed() {
  //clear screen
  fill(0);
  rect(0,0,400,400);
  
  //flash new glasses and eyes
  ///////////////////////////////////////////////////////////
  //////////////////MAGNIFICATION DEVICE/////////////////////
  ///////////////////////////////////////////////////////////
  
  //arms (connects to base of head behind ears)
  stroke(#48402B);
  line(25,400,75, mouseY);//left frame arm
  line(375,400,325, mouseY);//right frame arm
   
  //bridge (connector)
  stroke(#DBDBDB);
  strokeWeight(12);
  line(180, mouseY, 220, mouseY);
 
  //head decoration
  //white dot
  noStroke();
  fill(255);
  ellipse(115, mouseY-25, 10, 10);//left lens decoration
  ellipse(265, mouseY-25, 10, 10);//right lens decoration
 
  //distortion
  noFill();
  stroke(#4EDFFA,50);
  ellipse(125, mouseY, 87, 87);//left lens distortion
  ellipse(275, mouseY, 87, 87);//right lens distortion
  
  //Magnification device lens & rims
  stroke(#DBDBDB);
  strokeWeight(7);
  noFill();
  ellipse(125, mouseY, 100, 100);//left lens frame
  ellipse(275, mouseY, 100, 100);//right lens frame
  
  //Eyes
  stroke(255);
  fill(0);
  ellipse(125,mouseY,50,50);//left
  ellipse(275,mouseY,50,50);//right
}

//Try pressing and holding the key for an especially spooky effect.
//Flashes the players big eye on screen. Works as a frontal view of the glasses being put on and taken off.
void keyPressed() {
  //clear screen
  fill(#F0E1BA);
  rect(0,0,400,400);
  
  //setup eye
  fill(255);
  strokeWeight(25);
  stroke(0);
  ellipse(200,200,500,250);//draw white of eye
  
  //draw iris (stroke) and pupil (fill)
  stroke(mouseY,mouseX,#006698);
  fill(0);
  ellipse(200,200,150,150);
  
  //affect w/ height
  //draw glasses frame
  strokeWeight(25);//setup stroke size
  noFill();
  //glasses overlay will appear as the glasses are lowered to the players face
  stroke(#4EDFFA,mouseY-350);
  ellipse(200,mouseY-200,325,325);//draw distort
  stroke(#F5E33E,mouseY);//setup frame colours
  ellipse(200,mouseY-200,375,375);//draw frame
}