Spring Folk
playBvdeltavstepvanglemodeleafvinerandomizerbirbflowertulipside1birdModefoxModefoxside2
let playB = true;
let w;
let t = 0;
let t2 = 0;
let vdelta;
let vstep;
let vangle;
let c1, c2;
let rA = [];
let cnt = 0;
let mode = 1;
function setup() {
randomizer();
w = min(windowWidth, windowHeight) * 0.95;
createCanvas(w, w);
}
function draw() {
background(c2);
translate(w / 2, w / 2);
if (mode === 0) {
birdMode();
}
if (mode === 1) {
foxMode();
}
}
function leaf(r) {
noStroke();
arc(0, 0, r, r / 5, 0, PI);
arc(0, 0, r, r / 5, PI, TWO_PI);
}
function vine() {
noFill();
stroke(c1);
strokeWeight(3);
arc(0, 0, w * 0.8, w * 0.8, PI / 2 + vdelta, (3 * PI) / 2 - vdelta);
arc(0, 0, w * 0.8, w * 0.8, (3 * PI) / 2 + vdelta, PI / 2 - vdelta);
fill(c1);
for (let i = PI / 2 + vdelta; i < (3 * PI) / 2 - vdelta; i += vstep) {
x = w * 0.41 * cos(i);
y = w * 0.41 * sin(i);
push();
translate(x, y);
rotate(i + vangle - t / 3);
leaf(w / 40);
pop();
x = w * 0.39 * cos(i + vshift);
y = w * 0.39 * sin(i + vshift);
push();
translate(x, y);
rotate(i - vangle + t / 3);
leaf(w / 40);
pop();
x = -w * 0.41 * cos(i);
y = w * 0.41 * sin(i);
push();
translate(x, y);
rotate(-i - vangle + t / 3);
leaf(w / 40);
pop();
x = -w * 0.39 * cos(i + vshift);
y = w * 0.39 * sin(i + vshift);
push();
translate(x, y);
rotate(-i + vangle - t / 3);
leaf(w / 40);
pop();
}
}
function randomizer() {
vdelta = random(0.1, 0.6);
vstep = random(0.03, 0.2);
vangle = random(PI / 3, PI / 5);
vshift = random(0, 0.1);
c1 = color(random(0, 100), random(0, 100), random(0, 100));
c2 = color(random(200, 250), random(200, 250), random(200, 250));
rA = [
int(random(3, 10)),
int(random(4, 9)),
int(random(5, 11)),
int(random(9, 13) * 2),
];
mode = int(random(0, 1.9));
}
function birb(r) {
noStroke();
push();
rotate(t);
beginShape();
for (let i = (3 * PI) / 2; i > PI / 2; i -= 0.1) {
a = r * sin(i);
b = r * cos(i);
vertex(-a, -b);
}
for (let i = (3 * PI) / 2; i < 3 * PI; i += 0.1) {
a = 2 * r + r * sin(i);
b = r * cos(i);
vertex(-a, -b);
}
for (let i = PI / 2; i < (3 * PI) / 2; i += 0.1) {
a = r + 2 * r * sin(i);
b = 2 * r * cos(i);
vertex(-a, -b);
}
ellipse(-r, r / 1.5, 3.5 * r, r);
endShape(CLOSE);
triangle(-3 * r, 0, -3 * r, w / 40, -3 * r - r / 3, w / 40);
push();
fill(c2);
circle(-2.3 * r, -r / 4, w / 40);
fill(c1);
circle(-2.3 * r, -r / 4, w / 150);
fill(c2);
pop();
fill(c2);
translate(-r * 2, r);
for (let i = 0; i < TWO_PI; i += TWO_PI / rA[0]) {
push();
translate(w / 20, -w / 60);
rotate(i + t);
translate(w / 80, 0);
leaf(w / 60);
pop();
push();
translate(w / 11, -w / 60);
rotate(i + t2);
translate(w / 130, 0);
leaf(w / 90);
pop();
}
stroke(c2);
noFill();
arc(r, -r / 3, r * 2, r * 1.5, PI / 12, PI);
fill(c2);
push();
rotate(PI / 4);
translate(-w / 40, w / 50);
leaf(w / 60);
translate(w / 60, -w / 80);
leaf(w / 60);
translate(w / 100, w / 70);
leaf(w / 60);
pop();
pop();
fill(c1);
stroke(c1);
line(-r, 3 * r, -r * 1.1 - 1.5 * r * sin(t), 2 * r - 0.7 * r * sin(t));
line(-r - r / 3, 3 * r, -r - 1.5 * r * sin(t), 2 * r - 0.7 * r * sin(t));
}
function flower(n, r, a, b) {
push();
if (rA[0] % 0 === 0) {
rotate(t2);
} else {
rotate(t);
}
fill(a);
noStroke();
circle(0, 0, r);
for (let i = 0; i < n; i++) {
push();
rotate((TWO_PI / n) * i);
translate(r / 2, 0);
circle(0, 0, r / 2.5);
pop();
}
fill(b);
circle(0, 0, r / 2);
pop();
}
function tulip() {
fill(c1);
n = w / 20;
for (let i = 0; i < n; i += 0.5) {
circle((2 * i * i) / 35 + i / 3 + (i / 3) * t, -i * 2, n * 1.5 - i * 1.5);
if (i % 5 === 0) {
circle(
(2 * i * i) / 65 + w / 75 + (t * i) / 2,
-i * 2 + w / 4,
w / (110 + i * 5)
);
circle(
(-2 * i * i) / 65 - w / 75 - (t * i) / 2,
-i * 2 + w / 4,
w / (110 + i * 5)
);
}
circle((-2 * i * i) / 35 - i / 3 - (i / 3) * t, -i * 2, n * 1.5 - i * 1.5);
}
line(0, 0, 0, w / 4);
line(0, 0, 0, -w / 9);
fill(c1);
circle(0, -w / 9, w / 50);
fill(c2);
circle(0, -w / 9, (w / 50) * cos(t));
line(w / 58, 0, w / 58, -w / 11);
circle(w / 58, -w / 11, w / 90);
line(-w / 58, 0, -w / 58, -w / 11);
circle(-w / 58, -w / 11, w / 90);
fill(c1);
push();
rotate(PI / 4);
translate(w / 20, w / 10);
leaf(w / 10);
pop();
push();
scale(-1, 1);
rotate(PI / 4);
translate(w / 20, w / 10);
leaf(w / 10);
pop();
if (rA[1] % 2 === 0) {
fill(c2);
circle(0, w / 60, w / 25 - t * 8);
}
fill(c1);
}
function side1() {
push();
translate(w / 3.5, 0);
birb(w / 18);
push();
translate(-w / 10, -w / 4);
flower(rA[1], w / 10 - rA[0], c1, c2);
pop();
push();
translate(-w / 5, -w / 3);
flower(rA[2] * 2, w / 20, c1, c2);
pop();
push();
translate(-w / 18, w / 4.5);
fill(c1);
circle(0, 0, w / (rA[0] * 4));
flower(rA[0], w / 20, c2, c1);
for (let i = 0; i < rA[0]; i++) {
push();
rotate((TWO_PI / rA[0]) * i + t2 / 2);
translate(w / 40, 0);
circle(0, 0, rA[0] - (rA[0] + 1) * cos(t2 / 5));
pop();
}
pop();
pop();
push();
translate(w / 9, w / 5);
scale(0.5, 0.5);
tulip();
pop();
for (let i = 0; i < PI - PI / rA[0]; i += 0.2) {
x = (i * w) / 10;
y = (-w / (10 - rA[0] / 4)) * cos(i - t / 3) - w / 6;
circle(x, y, w / (100 + rA[3]) - i);
if (rA[2] % 2 === 0) {
circle(x / 1.1, y + w / 50, w / (100 + rA[3]) - i * 4);
}
}
if (rA[2] % 2 === 1) {
push();
translate(w / 4, -w / 6);
for (let i = 0; i < round(rA[0] / 2) + 1; i++) {
push();
rotate(-PI / 4 + (PI / 10) * i);
translate(w / 30, w / 20);
rotate(t / 2);
leaf(w / 14);
translate(-w / 35, -w / 20);
leaf(w / 25);
pop();
}
pop();
}
}
function mousePressed() {
setup();
draw();
}
function keyPressed() {
playB = !playB;
}
function birdMode() {
if (playB) {
t = (PI / 9) * sin(cnt / 50) - PI / 10;
t2 = cnt / 50;
cnt++;
}
vine();
if (rA[0] % 2 === 0) {
push();
scale(1.1, 1.1);
vine();
pop();
}
side1();
push();
scale(-1, 1);
side1();
pop();
push();
translate(0, w / 5);
tulip();
pop();
circle(0, -w / 10, w / 9);
for (let i = 0; i < rA[3]; i++) {
push();
translate(0, -w / 10);
rotate((TWO_PI / rA[3]) * i);
translate(w / 20, 0);
leaf(w / 10 + t * 40);
pop();
}
fill(c2);
circle(0, -w / 10, w / 25);
}
function foxMode() {
if (playB) {
t = (PI / 9) * sin(cnt / 50) - PI / 10;
t2 = cnt / 50;
cnt++;
}
push();
rotate(PI / 2);
vine();
pop();
fill(c1);
strokeWeight(2);
stroke(c1);
if (rA[0] % 2 === 0) {
push();
scale(1.1, 1.1);
vine();
pop();
}
side2();
push();
scale(-1, 1);
side2();
pop();
push();
translate(0, w / 10);
tulip();
pop();
noStroke();
circle((w / 25) * cos(t2 / 3), -w / 4, w / 7);
circle((-w / 25) * cos(t2 / 3), -w / 4, w / 7);
fill(c2);
circle(0, -w / 4, w / 7);
fill(c1);
for (let i = 0; i < rA[3]; i++) {
push();
translate(0, -w / 4);
rotate((TWO_PI / rA[3]) * i);
translate(w / 80, 0);
leaf(w / 16 - t * 10);
pop();
}
fill(c2);
circle(0, -w / 4, w / 45);
}
function fox() {
push();
translate(0, w / 12);
ellipse(0, 0, w / 20, w / 8);
triangle(w / 40, -w / 9, w / 150, -w / 11, w / 45, -w / 14);
triangle(-w / 40, -w / 9, -w / 150, -w / 11, -w / 45, -w / 14);
noStroke();
circle(0, -w / 13.5, w / 20);
push();
translate(0, w / 28);
rotate(PI / 3 - t);
n = w / 25;
for (let i = 0; i < n; i += 0.5) {
fill(c1);
circle((-2 * i * i) / 35 - i / 3 - (i / 3) * t, -i * 2, n * 1.5 - i * 1.5);
if (i > n - 6) {
fill(c2);
noStroke();
circle(
(-2 * i * i) / 35 - i / 3 - (i / 3) * t,
-i * 2,
n * 1.5 - i * 1.51
);
}
}
pop();
fill(c2);
ellipse(0, w / 90, w / 25, w / 10);
stroke(c1);
fill(c1);
arc(-w / 60, w / 90, w / 70, w / 10, -PI / 2, PI / 2);
arc(w / 60, w / 90, w / 70, w / 10, PI / 2, -PI / 2);
pop();
push();
translate(-w / 50, w / 35);
fill(c2);
stroke(c2);
strokeWeight(2);
push();
line(w / 50, w / 80, -w / 100, -w / 45);
line(w / 50, w / 80, w / 20, -w / 45);
pop();
pop();
fill(c2);
noStroke();
circle(w / 80, w / 180, w / 120);
circle(-w / 80, w / 180, w / 120);
fill(c1);
circle(w / 80, w / 180, w / 300);
circle(-w / 80, w / 180, w / 300);
ellipse(w / 50, w / 7, w / 40, w / 80);
ellipse(-w / 50, w / 7, w / 40, w / 80);
fill(c2);
push();
translate(0, w / 15);
flower(rA[0], w / 80, c1, c2);
translate(0, w / 55);
flower(rA[2], w / 90, c1, c2);
pop();
}
function side2() {
push();
translate(w / 3.5, 0);
push();
translate(-w / 10, 0);
scale(1.2, 1.2);
fox();
pop();
push();
translate(w / 30, -w / 40);
flower(rA[2], w / 14, c1, c2);
pop();
push();
translate(-w / 18, -w / 7.5);
fill(c1);
circle(0, 0, w / (rA[0] * 4));
flower(rA[0], w / 20, c2, c1);
for (let i = 0; i < rA[0]; i++) {
push();
rotate((TWO_PI / rA[0]) * i + t2 / 2);
translate(w / 40, 0);
circle(0, 0, rA[0] - (rA[0] + 1) * cos(t2 / 5));
pop();
}
pop();
pop();
push();
translate(w / 9, w / 4);
scale(0.4, 0.4);
tulip();
pop();
push();
translate(w / 5.5, w / 4);
scale(0.3, 0.3);
tulip();
pop();
for (let i = 0; i < PI - PI / rA[0]; i += 0.2) {
x = (i * w) / 10;
y = (w / (12 - rA[0] / 4)) * cos(i - t / 3) - w / 6;
circle(x, y, w / (100 + rA[3]) - i);
if (rA[2] % 2 === 0) {
circle(x / 1.1, y - w / 50, w / (100 + rA[3]) - i);
circle(x / 1.1, y - w / 25, w / (100 + rA[3]) - i);
}
}
}