/* Anthony Ra
Section-A
ahra@andrew.cmu.edu
Project-10 */
var boats = [];
var c1, c2;
function setup() {
createCanvas(480, 200);
frameRate(20);
c1 = color(255, 70, 0);
c2 = color(204, 143, 0);
for (var i = 0; i < 5; i++) {
var rx = random(width);
boats[i] = makeBoats(rx);
}
}
function draw() {
/* background gradient */
for (var i = 0; i < height - 70; i++) {
var inter = map(i, 70, 110, 0, 1);
var c = lerpColor(c1, c2, inter);
stroke(c);
line(0, i, width, i);
}
drawOcean();
drawSun();
updateAndDisplayBoats();
addNewBoatsWithSomeRandomProbability();
}
/* draws ocean at bottom of canvas */
function drawOcean() {
noStroke();
fill(66, 31, 0);
rect(0, height - 70, width, 70);
}
/* draws sun */
function drawSun() {
noStroke();
fill(255);
ellipse(width/2 + 30, 68, 80, 80);
fill(255, 235, 0);
ellipse(width/2 + 30, 70, 80, 80);
fill(115, 76, 0);
rect(width/2 + 20, 140, 20, 5, 2.5);
rect(width/2 + 10, 150, 40, 5, 2.5);
rect(width/2, 160, 60, 5, 2.5);
rect(width/2 - 10, 170, 80, 5, 2.5);
}
function updateAndDisplayBoats() {
for (var i = 0; i < boats.length; i++) {
boats[i].move();
boats[i].display();
}
}
function addNewBoatsWithSomeRandomProbability() {
var newBoatLikelihood = 0.007;
if (random(0, 1) < newBoatLikelihood) {
boats.push(makeBoats(width));
}
}
function moveBoats() {
this.x += this.speed;
}
function displayBoats() {
noStroke();
push();
translate(0, 35);
fill(0);
quad(width/2 + this.x - 20, height/2 - 10,
width/2 + this.x + 20, height/2 - 10,
width/2 + this.x + 10, height/2,
width/2 + this.x - 10, height/2);
quad(width/2 + this.x - 5, height/2 - 15,
width/2 + this.x + 5, height/2 - 15,
width/2 + this.x + 10, height/2 - 10,
width/2 + this.x - 10, height/2 - 10);
fill(255);
rect(width/2 + this.x - 3, height/2 - 13, 2, 2);
pop();
}
function makeBoats(birthLocationX) {
var bt = {x: birthLocationX,
breadth: 50,
speed: -1.6,
r: random(0.1, 0.5),
move: moveBoats,
display: displayBoats,
}
return bt;
}
One of my favorite places to relax when I am home is Laguna Beach during the sunset. With its warm weather, the tranquility and warming color palette of the sky and ocean reflection makes it a prime destination to stop everything and enjoy the view. Because the setting is so calm, there is very minimal movement overall, barring any unconditional weather or wind. The only thing that moves in this script are the boats faraway, and even the boats seem to be moving at a peaceful movement.