let u;
let c1, c2;
function setup() {
createCanvas(600, 600, WEBGL);
rectMode(CENTER);
strokeWeight(0.5);
c1 = color(250, 100, 100, 255);
c2 = color(100, 100, 250, 255);
u = 10;
}
function draw() {
t = frameCount / 100;
scale(0.9);
orbitControl();
background(255);
noFill();
for (let a = 0; a < 5; a++) {
for (let b = 0; b < 5; b++) {
push();
translate(
-width / 2 + u * 6 + 12 * u * a,
-width / 2 + 12 * u * b + u * 6
);
rotateX(PI * sin(((a + 1) * t) / 10));
rotateY(PI * sin(((b + 1) * t) / 10));
tile();
pop();
}
}
}
function magnet(i) {
if (i === 0) {
push();
fill(c1);
translate(0, 0, u / 4);
box((3 / 8) * u, 3 * u, u / 2);
fill(c2);
translate(0, 0, -u / 2);
box((3 / 8) * u, 3 * u, u / 2);
pop();
}
if (i === 1) {
push();
fill(c2);
translate(0, 0, u / 4);
box((3 / 8) * u, 3 * u, u / 2);
fill(c1);
translate(0, 0, -u / 2);
box((3 / 8) * u, 3 * u, u / 2);
pop();
}
if (i === 2) {
push();
fill(c2);
translate(0, 0, u / 4);
box(3 * u, (3 / 8) * u, u / 2);
fill(c1);
translate(0, 0, -u / 2);
box(3 * u, (3 / 8) * u, u / 2);
pop();
}
if (i === 3) {
push();
fill(c1);
translate(0, 0, u / 4);
box(3 * u, (3 / 8) * u, u / 2);
fill(c2);
translate(0, 0, -u / 2);
box(3 * u, (3 / 8) * u, u / 2);
pop();
}
}
function tile() {
push();
translate(0, 0, -u / 2);
rect(0, 0, 12 * u, 12 * u, 8, 8);
translate(0, 0, u);
rect(0, 0, 12 * u, 12 * u, 8, 8);
pop();
push();
translate(6 * u - u / 4, 2.5 * u, 0);
magnet(0);
translate(0, -5 * u, 0);
magnet(1);
pop();
push();
translate(-6 * u + u / 4, 2.5 * u, 0);
magnet(1);
translate(0, -5 * u, 0);
magnet(0);
pop();
push();
translate(2.5 * u, -6 * u + u / 4, 0);
magnet(2);
translate(-5 * u, 0, 0);
magnet(3);
pop();
push();
translate(2.5 * u, 6 * u - u / 4, 0);
magnet(3);
translate(-5 * u, 0, 0);
magnet(2);
pop();
}