For my final project, I created an animation. My animation tells a story about myself and how I personally am affected by the pandemic. I believe my story will resonate with a lot of students. My animation highlights the unseen effects that COVID has had on students and shows the progressive loss of motivation and the effects on mental health.
The animation runs without user interaction; however, if the user clicks the mouse, a text box appears describing the current state of the pandemic in a quick “news flash”
covidanimationDownload
//Flora Xia Section B
var sR = 157; //sky red component
var sG = 196; //sky green component
var sB = 245; //sky blue component
var sRC = .5;
var sGC = .5;
var sBC = .5;
//original positions for mask
var mX = 112;
var mY = 340;
var mW = 300;
var mL = 150;
//change in
var mdX = 1;
var mdY = 1;
var mdW = 1;
var mdL = 1;
//eyes
var eyeRLinks = [
"https://i.imgur.com/yT0USca.png",
"https://i.imgur.com/0LktvFO.png",
"https://i.imgur.com/Dh0klJU.png",
"https://i.imgur.com/n7e82Zj.png"]
var eyeLLinks = [
"https://i.imgur.com/LzeqRqt.png",
"https://i.imgur.com/dcffyk3.png",
"https://i.imgur.com/UDx8Xmn.png",
"https://i.imgur.com/WMngOhd.png"]
var eyeR;
var eyeL;
var eyeRImages = [];
var eyeLImages = [];
//details
var detailLinks = [
"https://i.imgur.com/611Lsvj.png",
"https://i.imgur.com/iBUjUeg.png",
"https://i.imgur.com/1dlHNvm.png"]
var detail;
var detailImages = [];
//clouds
var clouds = []
function preload(){
//eye images
for (var i = 0; i < 4; i++){
eyeRImages[i] = loadImage(eyeRLinks[i]);
eyeLImages[i] = loadImage(eyeLLinks[i]);
}
eyeR = eyeRImages[0];
eyeL = eyeLImages[0];
for (var j = 0; j < 3; j++){
detailImages[j] = loadImage(detailLinks[j]);
}
detail = detailImages[0];
}
function setup() {
createCanvas(510, 600);
frameRate(5);
for (var i = 0; i < 2; i++){
var rx = random(width);
var ry = random(20, 200);
clouds[i] = makeCloud(rx, ry);
}
}
function draw() {
background(sR, sG, sB);
skyGrey();
face();
eyes();
maskLaptop();
details();
updateCloud();
removeCloud();
addCloud();
if (frameCount > 125){
appleLogo();
}
print(frameCount);
}
function mousePressed(){
let m1 = 'BREAKING NEWS : COVID-19';
let m2 = 'NEWS: COVID-19 Gets Worse';
let m3 = 'NEWS: Cases Rising';
let m4 = 'NEWS: Second Peak';
fill(255, 150);
rect(0, 260, 500, 50);
fill(255, 0, 0);
textSize(35);
if (frameCount <= 50){
text(m1, 0, 300);
}else if (frameCount > 50 & frameCount <= 100){
text(m2, 0, 300);
}else if (frameCount > 100){
text(m3, 0, 300);
}
}
function eyes(){
if (frameCount <= 50){
//normal eyes
eyeR = eyeRImages[0];
eyeL = eyeLImages[0];
}else if (frameCount > 50 & frameCount <= 100){
//eyes w eyebags
eyeR = eyeRImages[1];
eyeL = eyeLImages[1];
}else if (frameCount > 100 & frameCount <= 150){
//eyes tearing
eyeR = eyeRImages[2];
eyeL = eyeLImages[2];
}else if (frameCount > 150){
//crying
eyeR = eyeRImages[3];
eyeL = eyeLImages[3];
}
//position images
image(eyeR, 285, 225, 130, 130);
image(eyeL, 102, 225, 130, 130);
}
function details(){
if (frameCount <= 50){
//details mask
detail = detailImages[0];
}else if (frameCount > 50 & frameCount <= 75){
//details hair
detail = detailImages[1];
}else if (frameCount > 75 & frameCount <= 100){
//details hair
detail = detailImages[2];
}else if (frameCount > 100 & frameCount <= 125){
detail = detailImages[1];
}else if (frameCount > 125){
detail = detailImages[2];
}
image(detail, 0, 0);
}
function skyGrey(){
//color change
sR -= sRC;
sG -= sGC;
sB -= sBC;
if (sR == 134){
sRC = 0;
}
if (sG == 145) {
sGC = 0;
}
if (sB == 158) {
sBC = 0;
}
}
function face(){
//hair back
noStroke();
fill(74, 63, 47);
rect(37, 220, 430, 400);
//neck
fill(190, 150, 110);
rect(175, 450, 150, 120);
//shirt
fill(245, 235, 244);
ellipse(250, 570, 480, 60);
rect(10, 570, 480, 60);
fill(190, 150, 110);
ellipse(250, 540, 150, 40);
//face shape
fill(194, 156, 118);
ellipse(250, 300, 350, 420);
eyebrows();
//hair bangs left
push();
rotate(radians(30));
fill(207, 201, 167);
ellipse(200, 55, 150, 300);
ellipse(245, 45, 70, 175)
fill(74, 63, 47);
ellipse(190, 55, 150, 300);
ellipse(235, 45, 70, 175)
pop();
//hair bangs right
push();
rotate(radians(330));
fill(207, 201, 167);
ellipse(245, 315, 150, 300);
ellipse(185, 250, 70, 175);
fill(74, 63, 47)
ellipse(250, 315, 150, 300);
ellipse(190, 250, 70, 175);
pop();
//hair bangs top
fill(74, 63, 47);
ellipse(250, 50, 250, 100);
//ears
fill(194, 165, 125);
ellipse(60, 290, 40, 80);
//earrings
fill(222, 210, 140);
circle(60, 320, 10);
circle(50, 310, 7);
//nose
nose();
}
function eyebrows(){
fill(82, 64, 33, 150);
rect(300, 225, 50, 15);
rect(150, 225, 50, 15);
fill(82, 64, 33, 50);
rect(295, 225, 50, 15);
rect(155, 225, 50 ,15);
rect(290, 225, 50, 15);
rect(160, 225, 50, 15);
}
function nose(){
fill(163, 130, 96, 150);
ellipse(260, 385, 50, 15);
stroke(163, 130, 96, 150);
strokeWeight(3);
arc(275, 340, 10, 50, (PI / 2), (PI / 2) * 3);
}
function maskLaptop(){
if (frameCount < 50){
//mask
fill(140, 196, 212);
stroke(255);
strokeWeight(3);
//masklines
//earloops
}
if (frameCount >= 50){
//turning into laptop
mX -= mdX;
mY += mdY;
mW += mdW;
mL += mdL;
fill(140, 196, 210);
if (mX == 60){
mdX = 0
fill(150, 190, 200);
}
if (mY == 400){
mdY = 0
fill(161, 185, 190);
}
if (mW == 375){
mdW = 0
fill(172, 185, 189)
}
if (mL == 210){
mdL = 0
fill(182, 185, 186);
//add mac symbol
}
strokeWeight(3);
stroke(255);
}
rect(mX, mY, mW, mL);
}
function appleLogo(){
fill(255);
noStroke();
circle(255, 530, 50);
fill(182, 185, 186);
circle(283, 528, 30);
push();
translate(255, 530);
rotate(radians(30));
fill(255)
ellipse(-15, -40, 5, 20);
pop();
}
//cloud object
function updateCloud(){
for (var i = 0; i < clouds.length; i ++){
clouds[i].move();
clouds[i].display();
}
}
function removeCloud(){
var keepClouds=[];
for (var i = 0; i < clouds.length; i++) {
if (clouds[i].x < width) {
keepClouds.push(clouds[i]);
}
}
clouds = keepClouds;
}
function addCloud(){
//little probability
var newCloudLikelihood = 0.007;
if (random(0,1) < newCloudLikelihood) {
clouds.push(makeCloud(15, 15));
}
}
function moveCloud(){
this.x += this.speed;
}
function displayCloud(){
fill(255);
noStroke();
push();
translate(this.x, this.y - 20);
circle(0, 0, 135);
circle(-60, 10, 90);
circle(60, 10, 90);
fill(110);
textSize(24);
text('anxiety', -40 ,0);
pop();
}
function makeCloud(birthLocationX, birthLocationY){
var cloud = {x: birthLocationX,
y:birthLocationY,
speed:random(3, 7),
move: moveCloud,
display: displayCloud};
return cloud;
}