class Mote extends GameObject { PVector vel; float MINSPEED = 0.3; float WANDER = 0.02; Mote() { pos = new PVector(random(width), random(height)); vel = randomVector(MINSPEED); } void tick() { float speed = vel.mag(); vel.add(randomVector(WANDER)); vel.normalize(); speed -= 0.003; if(speed < MINSPEED) speed = MINSPEED; vel.mult(speed); pos.add(vel); if(pos.x < 0) { pos.x = 0; vel.x *= -1; } if(pos.x > width) { pos.x = width; vel.x *= -1; } if(pos.y < 0) { pos.y = 0; vel.y *= -1; } if(pos.y > height) { pos.y = height; vel.y *= -1; } } void draw() { noStroke(); fill(255, 255, vel.mag() * 90); ellipse(pos.x, pos.y, 3, 3); } }