/*****************************************************
Mexican Standoff
by Klayton Cheuk
September 20, 2016
A scene depicting three lone gunmen having a showdown
in the Wild West.
Move the mouse left and right to view each side of the
closest gunman.
Move the mouse up and down to change the time of day.
Click to twitch the closest gunman's trigger finger.
******************************************************/
void setup() {
// create space
size(400, 400);
// no stroke lines, and set the appropriate modes
noStroke();
rectMode(CORNERS);
ellipseMode(CENTER);
}
void draw () {
// set the framerate
frameRate(60);
// draw a base sky color
background(106, 166, 255);
//modify the color
fill(255, 83, 0, mouseY * 2 - 250);
rect(0, 0, 400, 400);
fill(34, 1, 92, mouseY * 2 - 500);
rect(0, 0, 400, 400);
// the prodigal sun
fill(255, 255, 75, mouseY / 1.5 - 100);
ellipse(200, mouseY - 50, 175, 175);
fill(255, 255, 100, mouseY / 1.5 - 100);
ellipse(200, mouseY - 50, 125, 125);
fill(255, 255, 200);
ellipse(200, mouseY - 50, 75, 75);
// the ground
fill(-mouseY / 4 + 176, -mouseY / 4 + 104, -mouseY / 4 + 62);
rect(0, 260, 400, 400);
// some faraway rock formations
fill(-mouseY / 2 + 232, -mouseY / 2 + 137, -mouseY / 2 + 81);
quad(-mouseX / 20, 180, -mouseX / 20 + 20, 180, -mouseX / 20 + 40, 240, -mouseX / 20, 240);
quad(-mouseX / 20, 240, -mouseX / 20, 260, -mouseX / 20 + 90, 260, -mouseX / 20 + 40, 240);
quad(-mouseX / 20 + 180, 200, -mouseX / 20 + 210, 200, -mouseX / 20 + 220, 230, -mouseX / 20 + 180, 230);
quad(-mouseX / 20 + 180, 230, -mouseX / 20 + 220, 230, -mouseX / 20 + 280, 260, -mouseX / 20 + 160, 260);
quad(-mouseX / 20 + 310, 260, -mouseX / 20 + 340, 220, -mouseX / 20 + 410, 220, -mouseX / 20 + 470, 260);
quad(-mouseX / 20 + 340, 220, -mouseX / 20 + 350, 170, -mouseX / 20 + 390, 170, -mouseX / 20 + 410, 220);
// stars
stroke(255, 255, 255, mouseY - 150);
strokeWeight(1.5);
point(360, 40);
point(20, 120);
point(200, 80);
point(220, 210);
point(360, 160);
point(260, 120);
point(140, 20);
point(100, 90);
point(105, 215);
point(60, 180);
point(310, 80);
point(190, 180);
point(30, 20);
noStroke();
// the little man on the left:
// his legs
fill(-mouseY / 6 + 48, -mouseY / 6 + 72, -mouseY / 6 + 127);
rect(-mouseX / 4 + 130, 250, -mouseX / 4 + 140, 270);
rect(-mouseX / 4 + 80, 250, -mouseX / 4 + 90, 270);
rect(-mouseX / 4 + 80, 240, -mouseX / 4 + 140, 250);
// his shoes
fill(-mouseY / 4 + 50, -mouseY / 4 + 50, -mouseY / 4 + 50);
triangle(-mouseX / 4 + 70, 270, -mouseX / 4 + 90, 270, -mouseX / 4 + 80, 260);
triangle(-mouseX / 4 + 130, 270, -mouseX / 4 + 150, 270, -mouseX / 4 + 140, 260);
// his arms
fill(-mouseY / 3 + 200, -mouseY / 3 + 200, -mouseY / 3 + 200);
quad(-mouseX / 4 + 150, 235, -mouseX / 4 + 155, 230, -mouseX / 4 + 145, 220, -mouseX / 4 + 140, 225);
quad(-mouseX / 4 + 70, 235, -mouseX / 4 + 65, 230, -mouseX / 4 + 75, 220, -mouseX / 4 + 80, 225);
// his handsies
fill(-mouseY / 3 + 255, -mouseY / 3 + 207, -mouseY / 3 + 161);
ellipse(-mouseX / 4 + 155, 235, 12, 12);
ellipse(-mouseX/ 4 + 65, 235, 12, 12);
// his poncho
fill(-mouseY / 3 + 219, 0, 0);
triangle(-mouseX / 4 + 110, 255, -mouseX / 4 + 150, 220, -mouseX / 4 + 70, 220);
// his face
fill(-mouseY / 8 + 97, -mouseY / 8 + 82, -mouseY / 8 + 67);
rect(-mouseX / 4 + 100, 200, -mouseX / 4 + 120, 220);
// his eyes
strokeWeight(3);
stroke(255, 255, 255);
line(-mouseX / 4 + 105, 200, -mouseX / 4 + 105, 211);
line(-mouseX / 4 + 114.5, 200, -mouseX / 4 + 114.5, 211);
noStroke();
//his hat
fill(-mouseY / 5 + 50, -mouseY / 5 + 50, -mouseY / 5 + 50);
quad(-mouseX / 4 + 110, 210, -mouseX / 4 + 135, 200, -mouseX / 4 + 110, 190, -mouseX / 4 + 85, 200);
rect(-mouseX / 4 + 100, 187, -mouseX / 4 + 120, 195);
fill(-mouseY / 4 + 150, 0, 0);
rect(-mouseX / 4 + 100, 195, -mouseX / 4 + 120, 200);
// his face bandana
fill(-mouseY / 4 + 150, 0, 0);
rect(-mouseX / 4 + 95, 215, -mouseX / 4 + 125, 225);
triangle(-mouseX / 4 + 110, 235, -mouseX / 4 + 95, 225, -mouseX / 4 + 125, 225);
// the little man on the right:
// his legs
fill(-mouseY / 4 + 105, -mouseY / 4 + 204, -mouseY / 4 + 255);
rect(-mouseX / 4 + 350, 240, -mouseX / 4 + 360, 270);
rect(-mouseX / 4 + 400, 240, -mouseX / 4 + 410, 270);
rect(-mouseX / 4 + 350, 240, -mouseX / 4 + 410, 250);
// his boots
fill(-mouseY / 4 + 145, -mouseY / 4 + 86, -mouseY / 4 + 51);
rect(-mouseX / 4 + 348, 255, -mouseX / 4 + 362, 270);
triangle(-mouseX / 4 + 340, 270, -mouseX / 4 + 360, 270, -mouseX / 4 + 350, 260);
rect(-mouseX / 4 + 398, 255, -mouseX / 4 + 412, 270);
triangle(-mouseX / 4 + 400, 270, -mouseX / 4 + 420, 270, -mouseX / 4 + 410, 260);
// his arms
fill(-mouseY / 3 + 230, -mouseY / 3 + 230, -mouseY / 3 + 230);
quad(-mouseX / 4 + 420, 235, -mouseX / 4 + 425, 230, -mouseX / 4 + 415, 220, -mouseX / 4 + 410, 225);
quad(-mouseX / 4 + 340, 235, -mouseX / 4 + 335, 230, -mouseX / 4 + 345, 220, -mouseX / 4 + 350, 225);
rect(-mouseX / 4 + 345, 220, -mouseX / 4 + 415, 228);
// his handsies
fill(-mouseY / 4 + 145, -mouseY / 4 + 86, -mouseY / 4 + 51);
ellipse(-mouseX / 4 + 425, 235, 12, 12);
ellipse(-mouseX / 4 + 335, 235, 12, 12);
// the torso
fill(-mouseY / 3 + 230, -mouseY / 3 + 230, -mouseY / 3 + 230);
rect(-mouseX / 4 + 368, 220, -mouseX / 4 + 392, 240);
strokeWeight(1);
stroke(100, 100, 100);
line(-mouseX / 4 + 380, 220, -mouseX / 4 + 380, 240);
noStroke();
// the jacket
fill(-mouseY / 4 + 145, -mouseY / 4 + 86, -mouseY / 4 + 51);
rect(-mouseX / 4 + 365, 218, -mouseX / 4 + 375, 235);
rect(-mouseX / 4 + 385, 218, -mouseX / 4 + 395, 235);
// the belt and buckle
fill(-mouseY / 4 + 145, -mouseY / 4 + 86, -mouseY / 4 + 51);
rect(-mouseX / 4 + 366, 238, -mouseX / 4 + 394, 240);
fill(-mouseY / 5 + 255, -mouseY / 4 + 239, 0);
rect(-mouseX / 4 + 375, 236, -mouseX / 4 + 385, 242);
// his face
fill(-mouseY / 8 + 97, -mouseY / 8 + 82, -mouseY / 8 + 67);
rect(-mouseX / 4 + 370, 200, -mouseX / 4 + 390, 220);
// his eyes
strokeWeight(3);
stroke(255, 255, 255);
line(-mouseX / 4 + 375, 200, -mouseX / 4 + 375, 213);
line(-mouseX / 4 + 384.5, 200, -mouseX / 4 + 384.5, 213);
noStroke();
// his hat
fill(-mouseY / 3 + 200, -mouseY / 3 + 200, -mouseY / 3 + 200);
rect(-mouseX / 4 + 360, 208, -mouseX / 4 + 400, 210);
rect(-mouseX / 4 + 392, 205, -mouseX / 4 + 400, 210);
rect(-mouseX / 4 + 370, 180, -mouseX / 4 + 390, 200);
ellipse(-mouseX / 4 + 385, 180, 10, 10);
ellipse(-mouseX / 4 + 375, 180, 10, 10);
fill(-mouseY / 4 + 150, -mouseY / 4 + 150, -mouseY / 4 + 150);
rect(-mouseX / 4 + 370, 200, -mouseX / 4 + 390, 208);
//the close man:
fill(-mouseY / 4 + 186, -mouseY / 4 + 163, -mouseY / 4 + 132);
rect(-mouseX + 280, 0, -mouseX + 520, 210);
fill(-mouseY / 10 + 50, -mouseY / 10 +50, -mouseY / 10 + 50);
rect(-mouseX + 270, 210, -mouseX + 530, 290);
fill(-mouseY / 5 + 125, -mouseY / 5 + 66, -mouseY / 5 + 31);
rect(-mouseX + 280, 290, -mouseX + 390, 400);
rect(-mouseX + 390, 290, -mouseX + 410, 360);
rect(-mouseX + 410, 290, -mouseX + 520, 400);
// his guns:
fill(-mouseY / 10 + 50, -mouseY / 10 + 50, -mouseY / 10 + 50);
quad(-mouseX + 220, 270, -mouseX + 280, 270, -mouseX + 260, 400, -mouseX + 240, 400);
quad(-mouseX + 520, 270, -mouseX + 580, 270, -mouseX + 560, 400, -mouseX + 540, 400);
fill(-mouseY / 5 + 100, -mouseY / 5 + 100, -mouseY / 5 + 100);
rect(-mouseX + 230, 250, -mouseX + 270, 270);
rect(-mouseX + 530, 250, -mouseX + 570, 270);
fill(-mouseY / 5 + 150, -mouseY / 5 + 150, -mouseY / 5 + 150);
rect(-mouseX + 240, 240, -mouseX + 260, 270);
rect(-mouseX + 540, 240, -mouseX + 560, 270);
fill(-mouseY / 6 + 115, -mouseY / 8 + 56, -mouseY / 8 + 21);
quad(-mouseX + 230, 220, -mouseX + 270, 220, -mouseX + 260, 240, -mouseX + 240, 240);
quad(-mouseX + 530, 220, -mouseX + 570, 220, -mouseX + 560, 240, -mouseX + 540, 240);
rect(-mouseX + 230, 220, -mouseX + 270, 160, 15, 15, 0, 0);
rect(-mouseX + 530, 220, -mouseX + 570, 160, 15, 15, 0, 0);
fill(-mouseY / 6 + 95, -mouseY / 8 + 36, -mouseY / 8 + 1);
rect(-mouseX + 230, 160, -mouseX + 270, 210, 15);
rect(-mouseX + 530, 160, -mouseX + 570, 210, 15);
rect(-mouseX + 245, 230, -mouseX + 255, 265);
rect(-mouseX + 545, 230, -mouseX + 555, 265);
// his hands:
fill(-mouseY / 10 + 50, -mouseY / 10 + 50, -mouseY / 10 + 50);
// his forearms
quad(-mouseX + 150, -10, -mouseX + 80, 0, -mouseX + 110, 80, -mouseX + 160, 70);
quad(-mouseX + 650, -10, -mouseX + 720, 0, -mouseX + 690, 80, -mouseX + 640, 70);
// his palms
quad(-mouseX + 160, 69, -mouseX + 110, 79, -mouseX + 120, 130, -mouseX + 170, 120);
quad(-mouseX + 640, 69, -mouseX + 690, 79, -mouseX + 680, 130, -mouseX + 630, 120);
// his thumbs
quad(-mouseX + 140, 60, -mouseX + 180, 80, -mouseX + 180, 90, -mouseX + 140, 100);
quad(-mouseX + 660, 60, -mouseX + 620, 80, -mouseX + 620, 90, -mouseX + 660, 100);
quad(-mouseX + 180, 80, -mouseX + 200, 100, -mouseX + 190, 110, -mouseX + 170, 90);
quad(-mouseX + 620, 80, -mouseX + 600, 100, -mouseX + 610, 110, -mouseX + 630, 90);
// his pointers
quad(-mouseX + 168, 110, -mouseX + 198, 140, -mouseX + 190, 150, -mouseX + 160, 120);
quad(-mouseX + 632, 110, -mouseX + 602, 140, -mouseX + 610, 150, -mouseX + 640, 120);
// his birds
rect(-mouseX + 145, 120, -mouseX + 160, 160);
rect(-mouseX + 640, 120, -mouseX + 655, 160);
// his... thirds?
quad(-mouseX + 141, 125, -mouseX + 130, 115, -mouseX + 115, 155, -mouseX + 126, 160);
quad(-mouseX + 659, 125, -mouseX + 670, 115, -mouseX + 685, 155, -mouseX + 674, 160);
// his pinkies
quad(-mouseX + 120, 90, -mouseX + 130, 110, -mouseX + 114, 145, -mouseX + 105, 140);
quad(-mouseX + 680, 90, -mouseX + 670, 110, -mouseX + 684, 145, -mouseX + 695, 140);
}
// the triggerfinger twitch!
void mousePressed () {
// stall time a bit
frameRate(30);
// hide the current pointers
fill(106, 166, 255);
quad(-mouseX + 168, 109, -mouseX + 199, 140, -mouseX + 190, 151, -mouseX + 161, 120);
quad(-mouseX + 630, 109, -mouseX + 602, 140, -mouseX + 610, 151, -mouseX + 639, 120);
fill(255, 83, 0, mouseY * 2 - 250);
quad(-mouseX + 168, 109, -mouseX + 199, 140, -mouseX + 190, 151, -mouseX + 161, 120);
quad(-mouseX + 630, 109, -mouseX + 602, 140, -mouseX + 610, 151, -mouseX + 639, 120);
fill(34, 1, 92, mouseY * 2 - 500);
quad(-mouseX + 168, 109, -mouseX + 199, 140, -mouseX + 190, 151, -mouseX + 161, 120);
quad(-mouseX + 630, 109, -mouseX + 602, 140, -mouseX + 610, 151, -mouseX + 639, 120);
// twitching pointers
fill(-mouseY / 10 + 50, -mouseY / 10 + 50, -mouseY / 10 + 50);
quad(-mouseX + 168, 109, -mouseX + 193, 145, -mouseX + 185, 155, -mouseX + 160, 120);
quad(-mouseX + 632, 110, -mouseX + 607, 145, -mouseX + 615, 155, -mouseX + 640, 120);
}