/*
Kobold Run
Jared Moeller
Sept. 6, 2017
Mouse (Vertical movement) - Day/night cycle
Mouse (Horizontle movement) - Kobold runs (background scrolls)
Mouse (click) - Kobold Laughs
*/
////////////////////////////////////////////////////// setup ////////////////////////////////////////////////////////
void setup() {
size(400, 400);
frameRate(60);
}
//////////////////////////////////////////////////////////// draw /////////////////////////////////////////////////////
void draw() {
rectMode(CORNERS);
ellipseMode(CENTER);
noStroke();
//////////////////////////////////////////////////// background ////////////////////////////////////////////////////
////////////////////////////////////////////////////// sky
// day sky color
background(60, 120, 200);
///////////////////////////////////////////////////// stars
stroke(255, 255, 190, (mouseY/2.5));
strokeWeight(3);
// placing stars 10 apart each on x axis gave good sense of spacing
point(10, 120);
point(20, 20);
point(30, 100);
point(40, 50);
point(50, 80);
point(60, 110);
point(70, 15);
point(80, 60);
point(90, 30);
point(100, 90);
point(110, 60);
point(120, 10);
point(130, 100);
point(140, 80);
point(150, 30);
point(160, 40);
point(170, 110);
point(180, 50);
point(190, 70);
point(200, 90);
point(210, 20);
point(220, 40);
point(230, 10);
point(240, 90);
point(250, 60);
point(260, 30);
point(270, 100);
point(280, 120);
point(290, 80);
point(300, 50);
point(310, 70);
point(320, 20);
point(330, 75);
point(340, 40);
point(350, 30);
point(360, 70);
point(370, 20);
point(380, 100);
point(390, 20);
// sun - moon
noStroke();
fill(255);
//sun starts it's parabolic curve at peak
ellipse((200+(mouseY/1.6)), .002*sq((mouseY))+40, 10, 10);
fill(255, 255, 190);
//moon is tuned to end at peak
ellipse(-50+((mouseY/1.6)), .002*sq((mouseY-400))+40, 10, 10);
///////////////////////////////////////////////////////////////////// clouds 1 - 2 - 3 (close)
// each cloud is comprised of 3 grey rectangles, (day only)
fill(235, 400-mouseY);
rect(300-(mouseX/5), 30, 380-(mouseX/5), 50);
rect(40-(mouseX/6), 40, 120-(mouseX/6), 60);
fill(210, 400-mouseY);
rect(260-(mouseX/8), 40, 340-(mouseX/8), 60);
rect(80-(mouseX/7), 50, 140-(mouseX/7), 70);
fill(195, 400-mouseY);
rect(320-(mouseX/7.5), 50, 420-(mouseX/7.5), 70);
rect(-20-(mouseX/9), 60, 100-(mouseX/9), 80);
// cloud 1 - 2 - 3 (far)
// added to give more 'depth' to background (felt too empty)
fill(220, 400-mouseY);
rect(160-(mouseX/14), 90, 200-(mouseX/14), 100);
fill(225, 400-mouseY);
rect(180-(mouseX/10), 100, 230-(mouseX/10), 110);
fill(210, 400-mouseY);
rect(190-(mouseX/12), 95, 240-(mouseX/12), 105);
/////////////////////////////////////////////////////////////////////////////// treeline base
// to allow for the background to be constructed easily, started with 'strips'
fill(0, 150, 0);
rect(0, 140, 400, 160);
/////////////////////////////////////////////////////////////////////////////// treeline shrubbage
// basic 'tree' effect done by repeated circles.
ellipse(5-(mouseX/20), 140, 10, 10);
ellipse(12-(mouseX/20), 140, 15, 15);
ellipse(25-(mouseX/20), 140, 10, 10);
ellipse(32-(mouseX/20), 140, 15, 15);
ellipse(45-(mouseX/20), 140, 10, 10);
ellipse(52-(mouseX/20), 140, 15, 15);
ellipse(65-(mouseX/20), 140, 10, 10);
ellipse(72-(mouseX/20), 140, 15, 15);
ellipse(85-(mouseX/20), 140, 10, 10);
ellipse(92-(mouseX/20), 140, 15, 15);
ellipse(105-(mouseX/20), 140, 10, 10);
ellipse(112-(mouseX/20), 140, 15, 15);
ellipse(125-(mouseX/20), 140, 10, 10);
ellipse(132-(mouseX/20), 140, 15, 15);
ellipse(145-(mouseX/20), 140, 10, 10);
ellipse(152-(mouseX/20), 140, 15, 15);
ellipse(165-(mouseX/20), 140, 10, 10);
ellipse(172-(mouseX/20), 140, 15, 15);
ellipse(185-(mouseX/20), 140, 10, 10);
ellipse(192-(mouseX/20), 140, 15, 15);
ellipse(205-(mouseX/20), 140, 10, 10);
ellipse(212-(mouseX/20), 140, 15, 15);
ellipse(225-(mouseX/20), 140, 10, 10);
ellipse(232-(mouseX/20), 140, 15, 15);
ellipse(245-(mouseX/20), 140, 10, 10);
ellipse(252-(mouseX/20), 140, 15, 15);
ellipse(265-(mouseX/20), 140, 10, 10);
ellipse(272-(mouseX/20), 140, 15, 15);
ellipse(285-(mouseX/20), 140, 10, 10);
ellipse(292-(mouseX/20), 140, 15, 15);
ellipse(305-(mouseX/20), 140, 10, 10);
ellipse(312-(mouseX/20), 140, 15, 15);
ellipse(325-(mouseX/20), 140, 10, 10);
ellipse(332-(mouseX/20), 140, 15, 15);
ellipse(345-(mouseX/20), 140, 10, 10);
ellipse(352-(mouseX/20), 140, 15, 15);
ellipse(365-(mouseX/20), 140, 10, 10);
ellipse(372-(mouseX/20), 140, 15, 15);
ellipse(385-(mouseX/20), 140, 10, 10);
ellipse(392-(mouseX/20), 140, 15, 15);
ellipse(405-(mouseX/20), 140, 10, 10);
ellipse(412-(mouseX/20), 140, 15, 15);
/////////////////////////////////////////////////////////////////////////////////// hexes 1
fill(0, 170, 0);
rect(0, 160, 400, 200);
// triangles same as 'strip blend in
triangle(0-(mouseX/10), 160, 20-(mouseX/10), 150, 40-(mouseX/10), 160);
triangle(80-(mouseX/10), 160, 100-(mouseX/10), 150, 120-(mouseX/10), 160);
triangle(160-(mouseX/10), 160, 180-(mouseX/10), 150, 200-(mouseX/10), 160);
triangle(240-(mouseX/10), 160, 260-(mouseX/10), 150, 280-(mouseX/10), 160);
triangle(320-(mouseX/10), 160, 340-(mouseX/10), 150, 360-(mouseX/10), 160);
triangle(400-(mouseX/10), 160, 420-(mouseX/10), 150, 440-(mouseX/10), 160);
fill(50, 170, 50);
//contrasting lighter, tris and rects make checker effect, to better define background
triangle(40-(mouseX/10), 160, 60-(mouseX/10), 150, 80-(mouseX/10), 160);
rect(40-(mouseX/10), 160, 80-(mouseX/10), 400);
triangle(120-(mouseX/10), 160, 140-(mouseX/10), 150, 160-(mouseX/10), 160);
rect(120-(mouseX/10), 160, 160-(mouseX/10), 400);
triangle(200-(mouseX/10), 160, 220-(mouseX/10), 150, 240-(mouseX/10), 160);
rect(200-(mouseX/10), 160, 240-(mouseX/10), 400);
triangle(280-(mouseX/10), 160, 300-(mouseX/10), 150, 320-(mouseX/10), 160);
rect(280-(mouseX/10), 160, 320-(mouseX/10), 400);
triangle(360-(mouseX/10), 160, 380-(mouseX/10), 150, 400-(mouseX/10), 160);
rect(360-(mouseX/10), 160, 400-(mouseX/10), 400);
/////////////////////////////////////////////////////////////////////////////////// hexes 2
fill(0, 190, 0);
rect(0, 200, 400, 240);
triangle(30-(mouseX/5), 200, 60-(mouseX/5), 180, 90-(mouseX/5), 200);
triangle(150-(mouseX/5), 200, 180-(mouseX/5), 180, 210-(mouseX/5), 200);
triangle(270-(mouseX/5), 200, 300-(mouseX/5), 180, 330-(mouseX/5), 200);
triangle(390-(mouseX/5), 200, 420-(mouseX/5), 180, 450-(mouseX/5), 200);
fill(60, 190, 60);
triangle(-30-(mouseX/5), 200, 0-(mouseX/5), 180, 30-(mouseX/5), 200);
rect(-30-(mouseX/5), 200, 30-(mouseX/5), 400);
triangle(90-(mouseX/5), 200, 120-(mouseX/5), 180, 150-(mouseX/5), 200);
rect(90-(mouseX/5), 200, 150-(mouseX/5), 400);
triangle(210-(mouseX/5), 200, 240-(mouseX/5), 180, 270-(mouseX/5), 200);
rect(210-(mouseX/5), 200, 270-(mouseX/5), 400);
triangle(330-(mouseX/5), 200, 360-(mouseX/5), 180, 390-(mouseX/5), 200);
rect(330-(mouseX/5), 200, 390-(mouseX/5), 400);
triangle(450-(mouseX/5), 200, 480-(mouseX/5), 180, 510-(mouseX/5), 200);
rect(450-(mouseX/5), 200, 510-(mouseX/5), 400);
////////////////////////////////////////////////////////////////////////////////////// hexes 3
fill(0, 210, 0);
rect(0, 240, 400, 300);
triangle(0-(mouseX/2.5), 240, 40-(mouseX/2.5), 220, 80-(mouseX/2.5), 240);
triangle(160-(mouseX/2.5), 240, 200-(mouseX/2.5), 220, 240-(mouseX/2.5), 240);
triangle(320-(mouseX/2.5), 240, 360-(mouseX/2.5), 220, 400-(mouseX/2.5), 240);
triangle(480-(mouseX/2.5), 240, 520-(mouseX/2.5), 220, 560-(mouseX/2.5), 240);
fill(90, 210, 90);
triangle(80-(mouseX/2.5), 240, 120-(mouseX/2.5), 220, 160-(mouseX/2.5), 240);
rect(80-(mouseX/2.5), 240, 160-(mouseX/2.5), 400);
triangle(240-(mouseX/2.5), 240, 280-(mouseX/2.5), 220, 320-(mouseX/2.5), 240);
rect(240-(mouseX/2.5), 240, 320-(mouseX/2.5), 400);
triangle(400-(mouseX/2.5), 240, 440-(mouseX/2.5), 220, 480-(mouseX/2.5), 240);
rect(400-(mouseX/2.5), 240, 480-(mouseX/2.5), 400);
///////////////////////////////////////////////////////////////////////////////////////// hexes 4
fill(0, 230, 0);
rect(0, 300, 400, 380);
triangle(60-(mouseX/1.25), 300, 120-(mouseX/1.25), 280, 180-(mouseX/1.25), 300);
triangle(300-(mouseX/1.25), 300, 360-(mouseX/1.25), 280, 420-(mouseX/1.25), 300);
triangle(540-(mouseX/1.25), 300, 600-(mouseX/1.25), 280, 660-(mouseX/1.25), 300);
fill(120, 230, 120);
triangle(-60-(mouseX/1.25), 300, 0-(mouseX/1.25), 280, 60-(mouseX/1.25), 300);
rect(-60-(mouseX/1.25), 300, 60-(mouseX/1.25), 400);
triangle(180-(mouseX/1.25), 300, 240-(mouseX/1.25), 280, 300-(mouseX/1.25), 300);
rect(180-(mouseX/1.25), 300, 300-(mouseX/1.25), 400);
triangle(420-(mouseX/1.25), 300, 480-(mouseX/1.25), 280, 540-(mouseX/1.25), 300);
rect(420-(mouseX/1.25), 300, 540-(mouseX/1.25), 400);
triangle(660-(mouseX/1.25), 300, 720-(mouseX/1.25), 280, 780-(mouseX/1.25), 300);
rect(660-(mouseX/1.25), 300, 780-(mouseX/1.25), 400);
////////////////////////////////////////////////////////////////////////////////////////// hexes 5
fill(0, 250, 0);
rect(0, 380, 400, 400);
triangle(0-(mouseX/0.625), 380, 80-(mouseX/0.625), 340, 160-(mouseX/0.625), 380);
triangle(320-(mouseX/0.625), 380, 400-(mouseX/0.625), 340, 480-(mouseX/0.625), 380);
triangle(640-(mouseX/0.625), 380, 720-(mouseX/0.625), 340, 800-(mouseX/0.625), 380);
triangle(960-(mouseX/0.625), 380, 1040-(mouseX/0.625), 340, 1120-(mouseX/0.625), 380);
fill(150, 250, 150);
triangle(160-(mouseX/0.625), 380, 240-(mouseX/0.625), 340, 320-(mouseX/0.625), 380);
rect(160-(mouseX/0.625), 380, 320-(mouseX/0.625), 400);
triangle(480-(mouseX/0.625), 380, 560-(mouseX/0.625), 340, 640-(mouseX/0.625), 380);
rect(480-(mouseX/0.625), 380, 640-(mouseX/0.625), 400);
triangle(800-(mouseX/0.625), 380, 880-(mouseX/0.625), 340, 960-(mouseX/0.625), 380);
rect(800-(mouseX/0.625), 380, 960-(mouseX/0.625), 400);
/////////////////////////////////////////////////////////////// middleground
rectMode(CORNER);
ellipseMode(CORNER);
fill(128, 105, 81);
////////////////////////////////////////////////////////////// head
rect(70+(mouseX/2), 220-abs((4*sin(mouseX/20))), 40, 40);
//////////////////////////////////////////////////////////////// face
rect(110+(mouseX/2), 230-abs((4*sin(mouseX/20))), 10, 20);
triangle(110+(mouseX/2), 220-abs((4*sin(mouseX/20))), 110+(mouseX/2), 230-abs((4*sin(mouseX/20))), 120+(mouseX/2), 230-abs((4*sin(mouseX/20))));
triangle(110+(mouseX/2), 260-abs((4*sin(mouseX/20))), 110+(mouseX/2), 250-abs((4*sin(mouseX/20))), 120+(mouseX/2), 250-abs((4*sin(mouseX/20))));
/////////////////////////////////////////////////////////////// body
rect(60+(mouseX/2), 260-abs((4*sin(mouseX/20))), 50, 40);
//////////////////////////////////////////////////////////////// hood
triangle(60+(mouseX/2), 200-abs((4*sin(mouseX/20))), 110+(mouseX/2), 220-abs((4*sin(mouseX/20))), 70+(mouseX/2), 240-abs((4*sin(mouseX/20))));
triangle(70+(mouseX/2), 240-abs((4*sin(mouseX/20))), 60+(mouseX/2), 260-abs((4*sin(mouseX/20))), 70+(mouseX/2), 260-abs((4*sin(mouseX/20))));
////////////////////////////////////////////////////////////////// arm
triangle(60+(mouseX/2), 260-abs((4*sin(mouseX/20))), 40+(mouseX/2), 280-abs((4*sin(mouseX/20))), 60+(mouseX/2), 280-abs((4*sin(mouseX/20))));
rect(40+(mouseX/2), 280-abs((4*sin(mouseX/20))), 10, 10);
////////////////////////////////////////////////////////////////// pants and legs
// legs
stroke(79, 79, 91);
strokeWeight(10);
line(104+(mouseX/2), 298-abs((4*sin(mouseX/20))), 104+(mouseX/2)+(5*sin(mouseX/8)), 303-abs((4*sin(mouseX/20)))-(5*cos(mouseX/8)));
line(104+(mouseX/2)+(5*sin(mouseX/8)), 303-abs((4*sin(mouseX/20)))-(5*cos(mouseX/8)), 104+(mouseX/2)+(7*sin(mouseX/8)), 310-abs((3*sin(mouseX/20)))-(4*cos(mouseX/8)));
// two lines with jointed points and circular motion used to creat a 'crab-like' walk cycle.
line(65+(mouseX/2), 298-abs((4*sin((mouseX+70)/20))), 65+(mouseX/2)+(5*sin((mouseX+70)/8)), 303-abs((4*sin((mouseX+70)/20)))-(5*cos((mouseX+70)/8)));
line(65+(mouseX/2)+(5*sin((mouseX+70)/8)), 303-abs((4*sin((mouseX+70)/20)))-(5*cos((mouseX+70)/8)), 65+(mouseX/2)+(7*sin((mouseX+70)/8)), 310-abs((3*sin((mouseX+70)/20)))-(4*cos((mouseX+70)/8)));
noStroke();
// pants
fill(79, 79, 91);
rect(60+(mouseX/2), 290-abs((4*sin(mouseX/20))), 50, 10);
fill(71, 60, 46);
rect(60+(mouseX/2), 285-abs((4*sin(mouseX/20))), 50, 5);
////////////////////////////////////////////////////////////////////// eyes and mouth
fill(255);
ellipse(80+(mouseX/2), 220-abs((4*sin(mouseX/20))), 10, 10);
ellipse(110+(mouseX/2), 225-abs((4*sin(mouseX/20))), 5, 5);
fill(177, 122, 108);
triangle(80+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 250-abs((4*sin(mouseX/20))));
fill(172, 116, 101, 400-mouseY/1.5);
triangle(80+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 240-abs((4*sin(mouseX/20))), 120+(mouseX/2), 245-abs((4*sin(mouseX/20))));
///////////////////////////////////////////////////////////////////////// arm and stabby bit
fill(128, 105, 81);
triangle(110+(mouseX/2), 250-abs((4*sin(mouseX/20))), 110+(mouseX/2), 270-abs((4*sin(mouseX/20))), 120+(mouseX/2), 270-abs((4*sin(mouseX/20))));
rect(110+(mouseX/2), 270-abs((4*sin(mouseX/20))), 20, 10);
fill(79, 79, 91);
rect(130+(mouseX/2), 265-abs((4*sin(mouseX/20))), 5, 20);
fill(102, 102, 120);
triangle(135+(mouseX/2), 280-abs((4*sin(mouseX/20))), 135+(mouseX/2), 270-abs((4*sin(mouseX/20))), 165+(mouseX/2), 275-abs((4*sin(mouseX/20))));
////////////////////////////////////////////////////////////////////////// foreground
// night color overlay
fill(10, 0, 50, (mouseY/2.5));
rect(0, 0, 400, 400);
}
////////////////////////////////////////////////////////////////////////////// laugh
void mousePressed() {
println("Nyeh heh heh!");
}
////////////////////////////////////////////////////////////////////////////// ???
void keyPressed() {
}