drag the mouse to create new particles or enable auto_spawn in the control panel
xxxxxxxxxx
// Some color palette options to choose from
let myPalettes = [
["#eabfcb", "#c191a1", "#a4508b", "#5f0a87", "#2f004f"],
["#c3dfe0", "#bcd979", "#9dad6f", "#7d6d61", "#5e574d"],
["#4464ad", "#a4b0f5", "#f58f29", "#7d4600", "#466995"]
];
OPC.slider ('initial_size', 50, 20, 200, 1)
OPC.slider ('speed', 1, 0.1,5,0.1)
OPC.slider ('curliness', 1, 0.1, 5, 0.1)
OPC.slider ('avg_reduction', 0.5, 0.2, 2.0, 0.1)
OPC.palette('palette', myPalettes);
OPC.toggle ('auto_spawn', false);
OPC.button ('Clear', 'clear')
const batch_size = 20;
function criaPart (x, y) {
let pos = createVector(x,y);
let dir = createVector(speed,0);
dir.rotate(random(radians(360)));
return {pos, dir, r:initial_size, inc: random(avg_reduction*0.5,avg_reduction*2),
cor: random(palette)};
}
function movePart (part) {
part.pos.add(part.dir);
part.r = part.r - part.inc
part.dir.rotate(radians(random(-10,10)*curliness))
return part.pos.x >= 0 &&
part.pos.x < width &&
part.pos.y >= 0 &&
part.pos.y < height && part.r > 1
}
function desenhaPart (part) {
fill (part.cor)
circle (part.pos.x, part.pos.y, part.r)
}
let p = [];
function setup() {
createCanvas(windowWidth, windowHeight);
stroke(0,50)
background(220);
}
function mousePressed() {
if (mouseButton == CENTER) {
p = [];
background(220)
}
else
p.push (criaPart(mouseX,mouseY))
}
function mouseDragged() {
if (mouseButton == LEFT) p.push (criaPart(mouseX,mouseY))
}
function draw() {
//background (0,20)
for (let i = 0; i < 10; i++) { let q = []
for (let part of p) {
desenhaPart(part)
if (movePart(part)) q.push (part)
}
p = q;
}
if (auto_spawn && p.length == 0) {
create_batch();
}
}
function create_batch() {
let sz = height * 0.4;
let center = createVector(width/2, height/2)
for (let i = 0; i < batch_size; i++) {
let v = createVector(random(sz),0);
v.rotate(random(TWO_PI))
v.x *= width/height;
let q = center.copy().add(v);
p.push (criaPart(q.x,q.y))
}
}
function buttonPressed(variableName) {
if (variableName == 'Clear') {
p = [];
background(220)
}
}