xxxxxxxxxx
123
let Eyeball;
let Ear;
let Eyebrow;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(500, 200, 300);
updateMovement();
// Calculate pupil positions based on mouse position
let { pupilX, pupilY } = calculatePupilPosition(); // explain
drawBackHair();
drawNeck();
drawFace();
drawEyes(pupilX, pupilY);
drawEyebrows();
drawFrontHair();
drawLips();
drawNose();
drawEars();
drawShirt();
}
function updateMovement() {
Eyeball = sin(frameCount * 0.05) * 5;
Ear = sin(frameCount * 0.05) * 5;
Eyebrow = sin(frameCount * 0.05) * 5;
}
function calculatePupilPosition() {
let angle = atan2(mouseY - 200, mouseX - 200);
let pupilX = cos(angle) * 20;
let pupilY = sin(angle) * 20;
return { pupilX, pupilY };
}
function drawBackHair() {
fill(0, 0, 0);
noStroke();
ellipse(200, 160, 230, 210);
rect(85, 150, 160, 220);
rect(150, 150, 165, 220);
}
function drawNeck() {
push();
rectMode(CENTER);
fill(250, 210, 175);
noStroke();
rect(200, 300, 70, 100);
pop();
}
function drawFace() {
fill(250, 210, 175);
ellipse(200, 200, 215, 230);
}
function drawEyes(pupilX, pupilY) {
fill(0);
ellipse(150 + pupilX, 200 + pupilY, 20, 20); // Left pupil
ellipse(250 + pupilX, 200 + pupilY, 20, 20); // Right pupil
}
function drawEyebrows() {
stroke(0);
strokeWeight(10);
line(145, 155 + Eyebrow, 180, 160);
line(230, 160, 260, 158 + Eyebrow);
}
function drawFrontHair() {
push();
noStroke();
translate(150, 130);
rotate(radians(45));
fill(0, 0, 0);
ellipse(0, 0, 55, 172);
pop();
push();
noStroke();
translate(255, 130);
rotate(radians(-45));
fill(0, 0, 0);
ellipse(0, 0, 55, 161);
pop();
}
function drawLips() {
noStroke();
fill(230, 165, 165);
ellipse(200, 270, 70, 30);
}
function drawNose() {
stroke(207, 140, 93);
strokeWeight(3);
noFill();
arc(200, 220, 30, 35, HALF_PI, PI);
}
function drawEars() {
fill(250, 210, 175);
noStroke();
circle(100 + Ear, 230, 30);
circle(300 + Ear, 230, 30);
}
function drawShirt() {
push();
rectMode(CENTER);
noStroke();
fill(173, 216, 230);
rect(200, 430, 200, 200, 90, 90, 0, 0);
pop();
}