xxxxxxxxxx
165
let gfx;
let csize;
let numcells;
let gutter;
let grid;
let particles;
let points;
let numparticles = 500;
function setup() {
createCanvas(800, 800);
noiseDetail(8, 0.75);
csize = width * 0.05;
gutter = csize / 2;
numcells = int(width / csize);
// numcells
grid = [];
for (let r = 0; r < numcells; r++) {
grid[r] = [];
for (let c = 0; c < numcells; c++) {
let n = noise(c * 0.01, r * 0.01);
let a = int(map(n, 0.0, 1.0, 0, 8));
grid[r][c] = {
n: n,
visited: false,
a: a,
};
}
}
particles = [];
points = {};
for (let i = 0; i < numparticles; i++) {
let life = int(random(numcells));
particles.push({
r: int(random(numcells - 1)),
c: int(random(numcells - 1)),
l: life,
ol: life,
});
points[i] = [];
}
background(180);
}
let ptid = 0;
function draw() {
stroke(20);
/*
let x = 0; //gutter;
let y = 0; //gutter;
for (let r = 0; r < numcells; r++) {
for (let c = 0; c < numcells; c++) {
let cell = grid[r][c];
if (!cell.visited) {
fill(120);
rect(x, y, csize, csize);
}
x += csize;
}
y += csize;
x = 0;
}
x = csize;
y = csize;
rectMode(CENTER);
for (let r = 0; r < numcells - 1; r++) {
for (let c = 0; c < numcells - 1; c++) {
let cell = grid[r][c];
if (!cell.visited) {
fill(color(200, 200, 200));
rect(x, y, gutter, gutter);
}
x += csize;
}
y += csize;
x = csize;
}
*/
fill(180);
for (let i = particles.length - 1; i >= 0; i--) {
let p = particles[i];
let cell = grid[p.r][p.c];
cell.visited = true;
// rect(p.c*csize, p.r*csize, csize, csize);
points[i].push({ x: p.c * csize, y: p.r * csize });
p.l--;
switch (cell.a) {
case 0:
p.r--;
p.c--;
break;
case 1:
p.r--;
break;
case 2:
p.r--;
p.c++;
break;
case 3:
p.c--;
break;
case 4:
default:
break;
case 5:
p.c++;
break;
case 6:
p.r++;
p.c--;
break;
case 7:
p.r++;
break;
case 8:
p.r++;
p.c++;
break;
}
if (
p.r < 0 ||
p.r > numcells - 1 ||
p.c < 0 ||
p.c > numcells - 1 ||
p.l <= 0
) {
particles.splice(i, 1);
}
}
// noLoop();
fill(0);
if (particles.length == 0) {
if (ptid < numparticles) {
for (let i = 0; i < points[ptid].length; i++) {
let p = points[ptid][i];
// rect(p.x, p.y, gutter, gutter);
let rad = map(i,0,points[ptid].length,gutter,gutter/8);
circle(p.x+gutter,p.y+gutter,rad);
}
ptid++;
} else {
noLoop();
console.log("done");
}
}
}