ParticleSystem ps;
PShape s;
float angle=0;
float aVelocity=0;
float aAcceleration=0.001;
void setup() {
size(240, 860);
ps = new ParticleSystem(new PVector(width/2, height-50));
}
void draw() {
background(255);
ps.addParticle();
ps.run();
}
void mousePressed(){
ps=(new ParticleSystem(new PVector(mouseX,mouseY)));
}
class Particle {
PVector location;
PVector velocity;
PVector acceleration;
float lifespan;
Particle(PVector l) {
// The acceleration
acceleration = new PVector(0, 0.05);
// circel's x and y ==> range
velocity = new PVector(random(-1, 1), random(-14, -1));
// apawn's position
location = l.copy();
// the circle life time
lifespan = 255.0;
}
void run() {
update();
display();
}
void update() {
velocity.add(acceleration);
location.add(velocity);
}
boolean isDead() {
if (lifespan <= 0) {
return true;
} else {
return false;
}
}
void display() {
// border
stroke(0, lifespan);
// border's weight
strokeWeight(1);
float r = random(0,255);
float g = random(0,255);
float b = random(0,255);
// random the circle's color
fill(r,g,b, lifespan);
rectMode(CENTER);
pushMatrix();
// translate(0,0);
rotate(angle);
float k=random(1,10);
line(location.x-k,location.y,location.x+k,location.y);
ellipse(location.x+k,location.y,8,8);
ellipse(location.x-k,location.y,8,8);
line(location.x,location.y-k,location.x,location.y+k);
ellipse(location.x,location.y+k,8,8);
ellipse(location.x,location.y-k,8,8);
s=createShape();
s.beginShape();
s.vertex(location.x+50/2,location.y+18/2);
s.vertex(location.x+61/2,location.y+37/2);
s.vertex(location.x+83/2,location.y+43/2);
s.vertex(location.x+69/2,location.y+60/2);
s.vertex(location.x+71/2,location.y+82/2);
s.vertex(location.x+50/2,location.y+73/2);
s.vertex(location.x+29/2,location.y+82/2);
s.vertex(location.x+31/2,location.y+60/2);
s.vertex(location.x+17/2,location.y+43/2);
s.vertex(location.x+39/2,location.y+37/2);
s.endShape();
shape(s);
popMatrix();
// draw circle
//float k=10;
// ellipse(location.x, location.y, k, k);
}
}
class ParticleSystem {
ArrayList<Particle> particles;
PVector origin;
ParticleSystem(PVector position) {
origin = position.copy();
particles = new ArrayList<Particle>();
}
void addParticle() {
particles.add(new Particle(origin));
}
void run() {
for (int i = particles.size()-1; i >= 0; i--) {
Particle p = particles.get(i);
p.run();
if (p.isDead()) {
particles.remove(i);
}
}
}
}