Explicació detallada del funcionament

Moviment de la cara (Noise)

S'utilitza la funció noise() per generar valors pseudoaleatoris suaus entre 0 i 1. Aquests valors es mapegen per moure la cara de manera natural:

let noiseVal = noise(frameCount *

 0.01);
faceX = map(noiseVal, 0, 1, width/2 - 20, width/2 + 20);
faceY = map(noise(frameCount * 0.02), 0, 1, height/2 - 20, height/2 + 20);
            

Ulls (Sinus i Cosinus)

Les funcions sin() i cos() s'utilitzen per animar la mida dels ulls:

let leftEyeSize = 20 + 10 * cos(frameCount * 0.1);
let rightEyeSize = 20 + 10 * sin(frameCount * 0.1);
            
Això crea una oscil·lació suau entre 10 i 30 píxels.

Boca (0, PI o PI, 0)

La forma de la boca canvia segons l'estat emocional:

if (isSad) {
    arc(faceX, faceY + 40, 80, mouthHeight, PI, 0);
} else {
    arc(faceX, faceY + 30, 80, mouthHeight, 0, PI);
}
            
0, PI crea un somriure, mentre que PI, 0 crea una expressió trista.

Interactivitat

Les tecles 'p' i 't' controlen el plor i la tristesa respectivament:

function keyPressed() {
    if (key === 'p' || key === 'P') {
        isCrying = !isCrying;
    } else if (key === 't' || key === 'T') {
        isSad = !isSad;
    }
}
            

Sistema de llàgrimes

Les llàgrimes es creen com a objectes de la classe Tear. S'afegeixen noves llàgrimes cada 20 frames si isCrying és true:

if (frameCount % 20 === 0) {
    tears.push(new Tear(faceX - 40, faceY - 10));
    tears.push(new Tear(faceX + 40, faceY - 10));
}
            
Cada llàgrima té la seva pròpia posició i velocitat, i es mou cap avall fins a sortir de la pantalla.