xxxxxxxxxx
125
const e = new p5.Ease();
const extended = false;
function setup() {
createCanvas(640, 640);
noStroke();
print(e.listAlgos());
}
function draw() {
const timeoff = (frameCount * 0.01) % (2.0 * PI);
const timeoff01 = map(timeoff, 0, 2.0 * PI, 0.0, 1.0);
const tt = map(e.smoothStep(timeoff01), 0, 1, 0, 2.0 * PI);
const lighting = extended? sin(tt) * 50 + 50 : 100;
const bgcolor = {
r: 0,
g: 90 + lighting,
b: 150 + lighting
};
const moonColor = {
r: 255,
g: 250,
b: 181
};
const hillColor = {
r: 0,
g: 150 + lighting * 0.8,
b: 50
};
background(bgcolor.r, bgcolor.g, bgcolor.b);
fill(250);
const div = 5;
const gridx = width / div;
const gridy = height / div;
push();
fill(0);
translate(width / 2, gridy * 5);
const pcr = 450;
const pct = PI / 4;
if (extended) {
// Moon
fill(moonColor.r, moonColor.g, moonColor.b);
const moonx = cos(pct + tt) * pcr;
const moony = sin(pct + tt) * pcr;
arc(moonx, moony, 200, 200, radians(0), radians(0));
fill(moonColor.r * 0.9, moonColor.g * 0.9, moonColor.b * 0.9);
for (let i = 0; i < 8; i++) {
arc(moonx + 80 * cos(i), moony + 80 * sin(i), 20 + 10 * sin(i), 20 + 10 * sin(i), radians(0), radians(0));
}
arc(moonx - 35, moony, 150, 150, radians(0), radians(0));
fill(bgcolor.r, bgcolor.g, bgcolor.b);
arc(moonx - 50, moony, 150, 150, radians(0), radians(0));
}
// Sun
const sunx = cos(pct + tt + PI) * pcr;
const suny = sin(pct + tt + PI) * pcr;
const sunsize = 190;
const sunspikes = 8;
fill(255, 200, 0);
arc(sunx, suny, sunsize, sunsize, radians(0), radians(0));
fill(255, 230, 0);
arc(sunx, suny, sunsize * 0.9, sunsize * 0.9, radians(0), radians(0));
let it = 2.0 * PI / sunspikes;
for (let i = 0; i < sunspikes; i++) {
const theta = i * it;
const ll = 0.7 * sunsize;
// spike "to" points
const x = cos(theta) * ll;
const y = sin(theta) * ll;
arc(x + sunx, y + suny, 200, 200, PI + theta - PI / 15, PI + theta + PI / 15);
}
pop();
// Sheep
const sheepx = gridx * 3;
const sheepy = extended ? gridy * 4 - 20 * sin(tt) : gridy * 4 - 20 * sin(tt*2.0); //(map(timeoff, 0, 2.0 * PI, 0, 1));
const sheeppuffs = 10;
const woolsize = 20;
it = 2.0 * PI / sheeppuffs;
arc(sheepx, sheepy, 50, 50, radians(0), radians(0));
for (let i = 0; i < sheeppuffs; i++) {
const theta = i * it;
const ll = extended ? 1.0 * woolsize + + sin(i * i + timeoff) : woolsize;
// spike "to" points
const x = cos(theta) * ll;
const y = sin(theta) * ll;
arc(sheepx + x, sheepy + y, woolsize, woolsize, radians(0), radians(0));
}
arc(sheepx, sheepy, 50, 50, radians(0), radians(0));
fill(0);
const blink = sin(timeoff);
arc(sheepx + 12, sheepy, 5, 5 * blink, radians(20), radians(320));
arc(sheepx - 12, sheepy, 5, 5 * blink, radians(20), radians(320));
fill(200, 0, 0);
arc(sheepx, sheepy + 2, 15, 2, radians(0), radians(0));
// Hills
fill(hillColor.r, hillColor.g * 0.8, hillColor.b);
arc(gridx * 1, gridy * 5, 500, 300, radians(0), radians(0));
fill(hillColor.r, hillColor.g * 0.9, hillColor.b);
arc(gridx * 4, gridy * 5, 500, 250, radians(0), radians(0));
fill(hillColor.r, hillColor.g, hillColor.b);
arc(gridx * 2 + gridx * 0.5, gridy * 5, 500, 250, radians(0), radians(0));
// Clouds
const cloudx = width * tan(tt * 0.5);
fill(220);
arc(cloudx, gridy + 5, 100, 100, radians(0), radians(0));
arc(cloudx + 45, gridy + 5, 100, 100, radians(0), radians(0));
arc(cloudx - 55, gridy + 5, 100, 100, radians(0), radians(0));
fill(255);
arc(cloudx, gridy, 100, 100, radians(0), radians(0));
arc(cloudx + 50, gridy, 100, 100, radians(0), radians(0));
arc(cloudx - 50, gridy, 100, 100, radians(0), radians(0));
arc(cloudx - 25, gridy - 25, 100, 100, radians(0), radians(0));
arc(cloudx + 25, gridy - 25, 100, 100, radians(0), radians(0));
}