sketch
/* Austin Garcia
Section C
aegarcia@andrew.cmu.edu
Project 11
*/
var mushrooms = [];
var capColor
var terrainSpeed = 0.0005;
var terrainDetail = 0.005;
function setup() {
createCanvas(600, 400);
capColor = color(random(100, 180),random(100, 180),random(100, 180))
stemColor = color(random(20, 80),random(20, 80),random(20, 80))
// create an initial collection of mushrooms
for (var i = 0; i < 10; i++){
var rx = random(width);
mushrooms[i] = makeMushroom(rx);
}
frameRate(10);
}
function draw() {
background(200);
updateAndDisplaymushrooms();
removemushroomsThatHaveSlippedOutOfView();
addNewmushroomsWithSomeRandomProbability();
noFill();
beginShape();
for (var x = 0; x < width; x++) {
var t = (x * terrainDetail) + (millis() * terrainSpeed);
var y = map(noise(t), 0,1, 0, height);
vertex(x, y);
}
endShape();
rect(0, 0, width - 1, height - 1);
displayStatusString();
displayHorizon();
}
function updateAndDisplaymushrooms(){
// Update the Mushroom's positions, and display them.
for (var i = 0; i < mushrooms.length; i++){
mushrooms[i].move();
mushrooms[i].display();
}
}
function removemushroomsThatHaveSlippedOutOfView(){
// If a Mushroom has dropped off the left edge,
// remove it from the array. This is quite tricky, but
// we've seen something like this before with particles.
// The easy part is scanning the array to find mushrooms
// to remove. The tricky part is if we remove them
// immediately, we'll alter the array, and our plan to
// step through each item in the array might not work.
// Our solution is to just copy all the mushrooms
// we want to keep into a new array.
var mushroomsToKeep = [];
for (var i = 0; i < mushrooms.length; i++){
if (mushrooms[i].x + mushrooms[i].breadth > 0) {
mushroomsToKeep.push(mushrooms[i]);
}
}
mushrooms = mushroomsToKeep; // remember the surviving mushrooms
}
function addNewmushroomsWithSomeRandomProbability() {
// With a very tiny probability, add a new Mushroom to the end.
var newMushroomLikelihood = 0.007;
if (random(0,1) < newMushroomLikelihood) {
mushrooms.push(makeMushroom(width));
}
}
// method to update position of Mushroom every frame
function MushroomMove() {
this.x += this.speed;
}
// draw the Mushroom and some windows
function MushroomDisplay() {
var floorHeight = 20;
var bHeight = this.nFloors * floorHeight;
fill(255);
strokeWeight(0);
push();
translate(this.x, height - 40);
fill(stemColor);
rect(0, -bHeight, this.breadth, bHeight);
fill(capColor);
arc(5, -bHeight, this.breadth + 100, bHeight / 2, 3.1, 6.2)
/*for (var i = 0; i < this.nFloors; i++) {
rect(5, -15 - (i * floorHeight), this.breadth - 10, 10);
} */
pop();
}
function makeMushroom(birthLocationX) {
var bldg = {x: birthLocationX,
breadth: random(10, 20),
speed: -1.0,
nFloors: round(random(2,8)),
move: MushroomMove,
display: MushroomDisplay}
return bldg;
}
function displayHorizon(){
stroke(0);
line (0,height-50, width, height-50);
}
/*
function displayStatusString(){
noStroke();
fill(0);
var statusString = "# mushrooms = " + mushrooms.length;
text(statusString, 5,20);
}
*/