sketch
// gnmarino
// gia marino
// section D
// sushi conveyor belt animation
var sushis = [];
var nigiris = [];
function setup() {
createCanvas(480, 320);
}
function draw() {
background(220);
// moves sushis and nigiris
moveDisplayOfSushiAndNigiri();
// removes them if they go off the screen
removeOldSushiAndNigiri();
// adds new sushis and nigiris based off a low probability
addSushi_or_Nigiri();
// makes conveyour belt for sushi and nigiri to move on
conveyorBelt();
}
function removeOldSushiAndNigiri() {
var freshSushi = [];
var freshNigiri = [];
// if sushis are on the screen then put them in fresh sushi array
// if they are not on the screen then they will disappear because
// they won't be added to the new array
for (var i = 0; i < sushis.length; i++){
if (sushis[i].x + sushis[i].sushiWidth > 0) {
freshSushi.push(sushis[i]);
}
}
// same with nigiris
for (var i = 0; i < nigiris.length; i++){
if (nigiris[i].x + nigiris[i].nigiriWidth > 0) {
freshNigiri.push(nigiris[i]);
}
}
sushis = freshSushi;
nigiris = freshNigiri;
}
function moveDisplayOfSushiAndNigiri(){
for(var i = 0; i < sushis.length; i ++){
sushis[i].move();
sushis[i].display();
}
for(var i = 0; i < nigiris.length; i ++) {
nigiris[i].move();
nigiris[i].display();
}
}
function addSushi_or_Nigiri() {
// this is the probability of being added everytime code loops
var addSushiLikelihood = .005;
var addNigiriLikelihood = .004;
if(random(0, 1) < addSushiLikelihood) {
sushis.push(makeSushi(width));
}
if(random(0, 1) < addNigiriLikelihood) {
nigiris.push(makeNigiri(width +10));
}
}
function displayNigiri() {
push();
strokeWeight(2);
// these variables are used to make it easier to put the shapes together
var nigiriTop = 180-this.nigiriHeight // conveyor belt is at 180
var nigiriMiddle = this.nigiriWidth/2 + this.x
fill(247, 246, 241); //off-white
rect(this.x, nigiriTop, this.nigiriWidth, this.nigiriHeight);
fill(this.sashimiColor);
ellipse(nigiriMiddle, nigiriTop, this.nigiriWidth + 15, 40);
// this is to cover last ellipse so it looks more like shashimi
fill(247, 246, 241); //off-white
ellipse(nigiriMiddle, nigiriTop + 10, this.nigiriWidth, 25);
noStroke();
rect(this.x + 1, nigiriTop + 10, this.nigiriWidth-2, 15);
pop();
}
function displaySushi() {
// these variables are used to make it easier to put the shapes together
var sushiMiddle = this.sushiWidth/2 + this.x
var sushiTop = 180-this.sushiHeight // conveyor belt is at 180
push();
strokeWeight(2);
fill(this.wrapColor);
rect(this.x, sushiTop, this.sushiWidth, this.sushiHeight);
fill(247, 246, 241); //off-white
ellipse(sushiMiddle, sushiTop, this.sushiWidth, 25);
fill(this.fishColor);
ellipse(sushiMiddle, sushiTop, this.sushiWidth-20, 15);
pop();
}
function move_sushi_nigiri() {
this.x += this.speed;
}
// sushi object
function makeSushi(originX) {
var sushi = {x: originX,
sushiWidth: random(55, 100),
sushiHeight: random(35, 70),
wrapColor: color(0, random(100) , 0),
fishColor:
color(random(230, 260), random(145, 225), random(70, 160)),
speed: -3,
move: move_sushi_nigiri,
display: displaySushi}
return sushi;
}
// nigiri object
function makeNigiri(originX) {
var nigiri = {x: originX, // don't know if i need to change that
nigiriWidth: random( 70, 110),
nigiriHeight: random( 15, 40),
sashimiColor:
color(random(230, 260), random(145, 225), random(70, 160)),
speed: -3,
move: move_sushi_nigiri,
display: displayNigiri}
return nigiri;
}
function conveyorBelt() {
push();
fill(70);
rect(40, 185, 440, 150)
fill(180);
strokeWeight(5);
ellipse(30, 260, 150);
ellipse(450, 260, 150);
strokeWeight(12);
line(30, 335, 450, 335);
line(30, 185, 450, 185);
arc(30, 260, 150, 150, radians(90), radians(270), OPEN);
arc(450, 260, 150, 150, radians(-90), radians(90), OPEN);
pop();
}