const balloonsArray = [];
createCanvas(windowWidth, windowHeight);
drawBalloons(balloonsArray);
moveBalloons(balloonsArray);
function makeBalloons(posX, posY) {
diameter: random(1, 1.3),
probability: round(random(0, 1), 1),
colour: random(colourPalette)
return balloonsArray.push(oneBalloon);
function drawBalloons(arr) {
for (const eachBalloon of balloonsArray) {
let acrossDi = eachBalloon.size;
let straightDi = eachBalloon.size * eachBalloon.diameter;
stroke(eachBalloon.colour)
bezier(eachBalloon.x, eachBalloon.y + straightDi / 2 + 10, eachBalloon.x + acrossDi * 0.8, eachBalloon.y + straightDi, eachBalloon.x - acrossDi, eachBalloon.y + straightDi, eachBalloon.x, eachBalloon.y + straightDi + 100);
ellipse(eachBalloon.x, eachBalloon.y, acrossDi, straightDi);
triangle(eachBalloon.x, eachBalloon.y + straightDi / 2 - 5, eachBalloon.x - 10, eachBalloon.y + straightDi / 2 + 10, eachBalloon.x + 10, eachBalloon.y + straightDi / 2 + 10)
x: eachBalloon.x+acrossDi/2-15,
y: eachBalloon.y-straightDi/4
x: eachBalloon.x+acrossDi/2-15,
y: eachBalloon.y+straightDi/4
stroke("rgba(255,255,255,0.8)")
curve(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y);
function moveBalloons(arr) {
for (const eachBalloon of balloonsArray) {
if (eachBalloon.y > 15) {
eachBalloon.y -= eachBalloon.speed;
eachBalloon.x = eachBalloon.x + random(-0.8, +0.8);
} else if (eachBalloon.probability <= 0.3) {
sleep(2000).then(function() {
function mousePressed() {
makeBalloons(mouseX, mouseY);
function sleep(millisecondsDuration)
return new Promise((resolve) => {
setTimeout(resolve, millisecondsDuration);