/* Vending Machine Rowan Allcorn 18/09/2017 Interaction: Moving the mouse left and right moves you left and right respectively in the hall Moving the mouse up and down effects where the flies above the garbage are and whether it's day or night outside (visible through the window) Clicking the left mouse button makes a can drop in the vending machine */ void setup() { size(400, 400); rectMode(CORNERS); ellipseMode(CORNERS); noStroke(); } void draw() { //base framerate frameRate(60); //wall background(108, 136, 156); //roof noStroke(); fill(160); rect(0, 0, 400, 10); fill(130); rect(0, 10, 400, 15); fill(100); rect(0, 15, 400, 20); //floor noStroke(); fill(100); rect(0, 320, 400, 340); fill(130); rect(0, 340, 400, 360); fill(160); rect(0, 360, 400, 380); fill(190); rect(0, 380, 400, 400); fill(255, 70+sin(millis()/200)*15); rect(mouseX+-80, 345, mouseX+80, 370); rect(mouseX+-100, 345, mouseX+100, 390); //window fill(100, 90, 255-mouseY/3); rect(mouseX+180, 100, mouseX+310, 210); //sun fill(255, 255-mouseY/3, 0); ellipse(mouseX+275, 125+sin(millis()/200)*1.3, mouseX+285, 115+sin(millis()/200)*1.3); //tree fill(100-mouseY/3, 200-mouseY/4, 0); rect(mouseX+170, 220, mouseX+230+sin(millis()/200)*1.3, 130, 30+sin(millis()/300)*10); rect(mouseX+220, 150, mouseX+250+sin(millis()/200)*1.3, 220, 20+sin(millis()/300)*10); rect(mouseX+290+sin(millis()/200)*1.3, 220, mouseX+315, 140, 20+sin(millis()/300)*10); //personinwindow fill(240-mouseY/1.5, 240-mouseY/1.5, 240-mouseY/1.5); ellipse(mouseX+220, 190+sin(millis()/200)*1.3, mouseX+260, 220); ellipse(mouseX+200, 205, mouseX+220, 220); ellipse(mouseX+260, 205, mouseX+280, 220); fill(0+mouseY/1.5, 0+mouseY/1.5, 0+mouseY/1.5); ellipse(mouseX+225, 200+sin(millis()/200)*1.3, mouseX+230, 205+sin(millis()/200)*1.3); ellipse(mouseX+250, 200+sin(millis()/200)*1.3, mouseX+255, 205+sin(millis()/200)*1.3); //windowframe fill(255); rect(mouseX+170, 90, mouseX+320, 100); rect(mouseX+170, 90, mouseX+180, 220); rect(mouseX+180, 220, mouseX+320, 210); rect(mouseX+320, 210, mouseX+310, 100); //water fountain fill(255); rect(mouseX+340, 220, mouseX+410, 255); fill(180); rect(mouseX+345, 220, mouseX+350, 210); rect(mouseX+350, 220, mouseX+352, 215); rect(mouseX+380, 255, mouseX+390, 270); fill(150, 190, 255); rect(mouseX+370, 220, mouseX+375, 235+sin(millis()/200)*1.3); rect(mouseX+380, 220, mouseX+385, 227+sin(millis()/200)*1.3); rect(mouseX+350, 330, mouseX+390, 345, 50); rect(mouseX+380, 340, mouseX+400, 350, 50); //poster fill(255); rect(mouseX+-115, 95, mouseX+-195, 200); fill(255, 150, 150); rect(mouseX+-125, 105, mouseX+-185, 190); fill(255); ellipse(mouseX+-145, 130, mouseX+-165, 150); rect(mouseX+-135, 175, mouseX+-175, 155, 50); rect(mouseX+-130, 110, mouseX+-180, 112); rect(mouseX+-140, 114, mouseX+-170, 116); rect(mouseX+-130, 185, mouseX+-180, 183); //vending machine fill(255, 60, 60); rect(mouseX+-80, 80, mouseX+80, 330); //drawer fill(150, 10, 10); rect(mouseX+-60, 330, mouseX+-40, 340); rect(mouseX+40, 330, mouseX+60, 340); rect(mouseX+-60, 285, mouseX+40, 310); stroke(255, 60, 60); rect(mouseX+-55, 290, mouseX+35, 305); //light noStroke(); fill(255, 40+sin(millis()/200)*15); rect(mouseX+-100, 60, mouseX+100, 300); rect(mouseX+-90, 70, mouseX+90, 280); //number pads fill(100); stroke(0); rect(mouseX+50, 120, mouseX+70, 140); fill(0); rect(mouseX+50, 132, mouseX+70, 130); line(mouseX+50, 134, mouseX+70, 134); line(mouseX+50, 136, mouseX+70, 136); rect(mouseX+50, 150, mouseX+70, 155); rect(mouseX+50, 160, mouseX+70, 165); rect(mouseX+50, 170, mouseX+70, 175); rect(mouseX+50, 180, mouseX+70, 185); fill(50); rect(mouseX+50, 195, mouseX+70, 230); fill(150); rect(mouseX+52, 198, mouseX+68, 205); fill(150, 90, 90); rect(mouseX+52, 210, mouseX+68, 225); //inside noStroke(); fill(255); rect(mouseX+-60, 100, mouseX+40, 270); fill(120); rect(mouseX+-55, 105, mouseX+35, 260); fill(190); rect(mouseX+-50, 250, mouseX+30, 246); rect(mouseX+-50, 211, mouseX+30, 215); rect(mouseX+-50, 176, mouseX+30, 180); rect(mouseX+-50, 141, mouseX+30, 145); fill(150); rect(mouseX+-52, 255, mouseX+32, 260); //bottles //shelfone stroke(255, 255, 0); fill(240, 210, 0); rect(mouseX+-45, 120, mouseX+-35, 140); rect(mouseX+-30, 120, mouseX+-20, 140); rect(mouseX+15, 120, mouseX+25, 140); stroke(255, 0, 0); fill(200, 0, 0); rect(mouseX+-15, 120, mouseX+-5, 140); rect(mouseX+0, 120, mouseX+10, 140); fill(255, 125, 0); stroke(255, 125, 0); rect(mouseX+-45, 125, mouseX+-35, 135); rect(mouseX+-30, 125, mouseX+-20, 135); rect(mouseX+15, 125, mouseX+25, 135); fill(255, 0, 0); stroke(255, 0, 0); rect(mouseX+-15, 125, mouseX+-5, 135); rect(mouseX+0, 125, mouseX+10, 135); //shelftwo stroke(0, 255, 255); fill(0, 240, 40); rect(mouseX+-45, 155, mouseX+-35, 175); rect(mouseX+-30, 155, mouseX+-20, 175); fill(150, 150, 255); stroke(150, 150, 255); rect(mouseX+-15, 155, mouseX+-5, 175); rect(mouseX+0, 155, mouseX+10, 175); rect(mouseX+15, 155, mouseX+25, 175); fill(0, 200, 0); stroke(0, 200, 0); rect(mouseX+-45, 160, mouseX+-35, 170); rect(mouseX+-30, 160, mouseX+-20, 170); stroke(100, 100, 250); fill(100, 100, 250); rect(mouseX+-15, 160, mouseX+-5, 170); rect(mouseX+0, 160, mouseX+10, 170); rect(mouseX+15, 160, mouseX+25, 170); //shelfthree stroke(255, 0, 255); fill(255, 0, 255); rect(mouseX+-30, 190, mouseX+-20, 210); rect(mouseX+0, 190, mouseX+10, 210); stroke(255, 0, 0); fill(255, 0, 0); rect(mouseX+-45, 190, mouseX+-35, 210); rect(mouseX+-15, 190, mouseX+-5, 210); rect(mouseX+15, 190, mouseX+25, 210); fill(190, 0, 190); stroke(190, 0, 190); rect(mouseX+-30, 195, mouseX+-20, 205); rect(mouseX+0, 195, mouseX+10, 205); fill(200, 0, 0); stroke(200, 0, 0); rect(mouseX+-15, 195, mouseX+-5, 205); rect(mouseX+15, 195, mouseX+25, 205); rect(mouseX+-45, 195, mouseX+-35, 205); //shelffour stroke(0, 255, 0); fill(0, 240, 0); rect(mouseX+-45, 225, mouseX+-35, 245); rect(mouseX+15, 225, mouseX+25, 245); stroke(255, 255, 0); fill(240, 210, 0); rect(mouseX+-15, 225, mouseX+-5, 245); rect(mouseX+0, 225, mouseX+10, 245); rect(mouseX+-30, 225, mouseX+-20, 245); fill(0, 200, 0); stroke(0, 200, 0); rect(mouseX+-45, 230, mouseX+-35, 240); rect(mouseX+15, 230, mouseX+25, 240); fill(255, 125, 0); stroke(255, 125, 0); rect(mouseX+-15, 230, mouseX+-5, 240); rect(mouseX+0, 230, mouseX+10, 240); rect(mouseX+-30, 230, mouseX+-20, 240); //grate noStroke(); fill(50); rect(mouseX+-210, 290, mouseX+-170, 310); //tree inside fill(86, 60, 31); rect(mouseX+-400, 300, mouseX+-387, 150); fill(100, 200, 0); rect(mouseX+-430, 80, mouseX+-360, 170, 40+sin(millis()/300)*10); rect(mouseX+-430, 140, mouseX+-350, 170, 20+sin(millis()/300)*7); fill(176, 90, 81); rect(mouseX+-430, 300, mouseX+-370, 335); //garbage can noStroke(); fill(0); rect(mouseX+-280, 170+sin(millis()/200)*1.3, mouseX+-300, 200+sin(millis()/200)*1.3); ellipse(mouseX+-245, 180+sin(millis()/200)*1.3, mouseX+-335, 270); fill(50); rect(mouseX+-240, 345, mouseX+-340, 230); fill(30); rect(mouseX+-230, 220, mouseX+-350, 230); //flys ellipse(mouseX+-280, 140+sin(millis()/200)*1.3-mouseY/9, mouseX+-284, 144+sin(millis()/200)*1.3-mouseY/9); ellipse(mouseX+-310, 130+cos(millis()/200)*1.3-mouseY/11, mouseX+-314, 134+cos(millis()/200)*1.3-mouseY/11); ellipse(mouseX+-240, 150+sin(millis()/200)*1.3+mouseY/11, mouseX+-244, 154+sin(millis()/200)*1.3+mouseY/11); ellipse(mouseX+-340, 170+sin(millis()/200)*1.3-mouseY/13, mouseX+-344, 174+sin(millis()/200)*1.3-mouseY/13); ellipse(mouseX+-290, 120+sin(millis()/200)*1.3+mouseY/15, mouseX+-294, 124+sin(millis()/200)*1.3+mouseY/15); ellipse(mouseX+-220, 180+cos(millis()/200)*1.3-mouseY/9, mouseX+-224, 184+cos(millis()/200)*1.3-mouseY/9); } void mousePressed() { //open drawer frameRate(2); fill(0); rect(mouseX+-60, 285, mouseX+40, 310); //suprised face //noStroke(); //fill(0+mouseY/1.5, 0+mouseY/1.5, 0+mouseY/1.5); //ellipse(mouseX+237, 202+sin(millis()/200)*1.3, mouseX+243, 207+sin(millis()/200)*1.3); //soda can dissapears stroke(120); fill(120); rect(mouseX+0, 155, mouseX+10, 175); //can drops noStroke(); fill(150, 150, 255); rect(mouseX+9, 295, mouseX+20, 309); fill(100, 100, 250); rect(mouseX+9, 300, mouseX+20, 309); }