//Michael Miller
//Section A
//mmiller5@andrew.cmu.edu
//Project-06
//Coordinates for pandas
var pandaX = [30, 90, 150, 210, 270, 330, 390, 450,
30, 90, 150, 210, 270, 330, 390, 450,
30, 90, 150, 210, 270, 330, 390, 450];
var pandaY = [298, 298, 298, 298, 298, 298, 298, 298,
455, 455, 455, 455, 455, 455, 455, 455,
200, 200, 200, 200, 200, 200, 200, 200];
function setup() {
createCanvas(480, 480);
frameRate(1);
noStroke();
}
function draw() {
//relates time to ratio of circular motion for sun and moon
var hourRat = ((hour() + (minute() / 60)) / 24) * 2 * PI;
var bambooX = [];
var bambooY = [];
//darkens during night, brightens during day
var bgCol = color(49, 49, constrain(160 + 120 * -cos(hourRat), 49, 200));
background(bgCol);
//sun
fill(255, 255, 0);
ellipse(width / 2 - sin(hourRat) * 200, height / 2 + cos(hourRat) * 200,
150, 150);
//moon
fill(230);
ellipse(width / 2 + sin(hourRat) * 200, height / 2 - cos(hourRat) * 200,
100, 100);
fill(bgCol);
ellipse(width / 2 + sin(hourRat + .2) * 200,
height / 2 - cos(hourRat + .2) * 200,
75, 75);
//midground
fill(116, 116, 55);
rect(0, 2 * height / 3 - 100, width, 2 * height / 3 - 100);
//foreground
fill(154, 116, 55);
rect(0, 2 * height / 3, width, 2 * height / 3);
//time tracking mechanics
bambooFall(width / 2, 2 * height / 3);
//every hour, a new panda comes to feast on the accumulated bamboo
for(var i = 0; i < hour(); i ++) {
panda(pandaX[i], pandaY[i]);
}
bambooGrow(width / 2, 2 * height / 3);
}
//central bamboo grows one stalk per second, making happy pandas
function bambooGrow(x, y) {
for(var sec = 0; sec < second(); sec ++) {
fill(120, 180, 56);
rect(x, y - 4 * sec, 3, 3);
fill(128, 75, 35);
rect(x, y - 4 * sec - 1, 3, 1);
}
}
//when bamboo gets too tall, it falls in a half circle, stacking up every minute
function bambooFall(x, y) {
for(var min = 0; min < minute(); min ++) {
fill(177, 200, 60);
push();
translate(x, y);
rotate(radians(2 + (min / 60) * 176));
rect(0, 0, 180, 3);
pop();
}
}
//panda and its body parts
function panda(x, y) {
pandaBody(x, y);
pandaHead(x, y - 40);
}
function pandaHead(x, y) {
fill(255);
ellipse(x, y, 50, 50);
fill(0);
ellipse(x - 20, y - 20, 15, 15);
ellipse(x + 20, y - 20, 15, 15);
ellipse(x - 10, y, 10, 10);
ellipse(x + 10, y, 10, 10);
ellipse(x, y + 7, 8, 6);
fill(255);
ellipse(x - 9, y - 1, 2, 4);
ellipse(x + 9, y - 1, 2, 4);
}
function pandaBody(x, y) {
fill(255);
ellipse(x, y, 55, 50);
fill(0);
ellipse(x - 18, y - 12, 20, 25);
ellipse(x + 18, y - 12, 20, 25);
ellipse(x - 19, y + 13, 25, 23);
ellipse(x + 19, y + 13, 25, 23);
}
Yep, more bamboo. Why? I was inspired by the exceptional speed at which bamboo grows, but then I thought, “Now what if it grew super fast?” The consequences of lightning bamboo are staggering — potential building material, fuel, and of course, food for pandas! Imagine an infinity ice cream dispenser, except that you never get full (or fat, we’ll ignore that too) — that’s exactly what this is for pandas! I think word of this would spread pretty quickly, but pandas are slow so they take a while to get there (1 hour exactly, actually. Punctual pandas).
Now I don’t actually do all that much art, so my product probably doesn’t look as amazing as it could — the pandas are a buncha colored circles — but I think it works. The coding was pretty fun for this project, and it took me some time to figure out how to make the time countable. I probably would’ve been more comfortable doing something more abstract, but I thought I’d give this a try, and I think it worked out in the end.