Spaces:
Running
Running
| export const loadingSketch = `let particles = []; | |
| let numParticles = 28; | |
| let circleRadius = 50; | |
| let rotationSpeed = 0.02; | |
| let particleMinSize = 3; | |
| let particleMaxSize = 7; | |
| let centerX; | |
| let centerY; | |
| let freeformAmplitude = 2; | |
| let freeformSpeed = 0.01; | |
| let color1Hex = "#217BFE"; | |
| let color2Hex = "#078BFE"; | |
| let color3Hex = "#AC87EB"; | |
| let color1; | |
| let color2; | |
| let color3; | |
| function setup() { | |
| createCanvas(500, 500); | |
| background(0); | |
| noStroke(); | |
| color1 = color(color1Hex); | |
| color2 = color(color2Hex); | |
| color3 = color(color3Hex); | |
| centerX = width / 2; | |
| centerY = height / 2; | |
| for (let i = 0; i < numParticles; i++) { | |
| particles.push(new Particle(i, numParticles)); | |
| } | |
| } | |
| function draw() { | |
| background(0, 50); | |
| for (let particle of particles) { | |
| particle.update(); | |
| particle.display(); | |
| } | |
| } | |
| class Particle { | |
| constructor(index, totalParticles) { | |
| this.index = index; | |
| this.totalParticles = totalParticles; | |
| this.radiusOffset = (index / totalParticles) * TWO_PI; | |
| this.angle = this.radiusOffset; | |
| this.speedVariation = random(0.7, 1.3); | |
| this.size = random(particleMinSize, particleMaxSize); | |
| this.colorValue = this.getColor(index, totalParticles); | |
| this.pos = createVector(0, 0); | |
| } | |
| getColor(index, totalParticles) { | |
| let normalizedIndex = index / (totalParticles - 1); | |
| let particleColor; | |
| if (normalizedIndex < 0.5) { | |
| particleColor = lerpColor(color1, color2, normalizedIndex * 2); | |
| } else { | |
| particleColor = lerpColor(color2, color3, (normalizedIndex - 0.5) * 2); | |
| } | |
| return particleColor; | |
| } | |
| update() { | |
| this.angle += rotationSpeed * this.speedVariation; | |
| let base_x = centerX + cos(this.angle) * circleRadius; | |
| let base_y = centerY + sin(this.angle) * circleRadius; | |
| let noiseX = map(noise(this.angle * 2 + frameCount * freeformSpeed), 0, 1, -freeformAmplitude, freeformAmplitude); | |
| let noiseY = map(noise(this.angle * 2 + frameCount * freeformSpeed + 100), 0, 1, -freeformAmplitude, freeformAmplitude); | |
| this.pos.set(base_x + noiseX, base_y + noiseY); | |
| } | |
| display() { | |
| fill(this.colorValue); | |
| ellipse(this.pos.x, this.pos.y, this.size, this.size); | |
| } | |
| }`; |