-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParticleSystem.pde
More file actions
110 lines (79 loc) · 1.66 KB
/
ParticleSystem.pde
File metadata and controls
110 lines (79 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//Particles
class ParticleSystem{
ArrayList<Particle> particles;
PVector origin;
boolean paused;
ParticleSystem(){
particles = new ArrayList<Particle>();
origin = new PVector();
}
void addParticle(){
particles.add(new Particle(origin));
}
void run(){
Iterator<Particle> it = particles.iterator();
while(it.hasNext()){
Particle p = it.next();
if(paused){
p.display();
continue;
}
p.run();
if(p.isDead())
it.remove();
}
}
boolean isEmpty(){
if(particles.size() == 0)
return true;
return false;
}
void applyForce(PVector force){
if(!paused)
for(Particle p : particles){
p.applyForce(force);
}
}
}
class Particle{
PVector location;
PVector velocity;
PVector acceleration;
float mass = 1;
float lifespan;
Particle(PVector l){
location = new PVector(l.x,l.y);
acceleration = new PVector();
velocity = new PVector(random(-1,1),random(-1,1));
lifespan = 255;
}
void update(){
velocity.add(acceleration);
location.add(velocity);
acceleration.mult(0);
lifespan -= 8.0f;
}
void display(){
pushMatrix();
translate(location.x,location.y);
stroke(255,lifespan);
fill(255, lifespan);
ellipse(0,0,0.5,0.5);
popMatrix();
}
void run(){
update();
display();
}
void applyForce(PVector force){
PVector f = force.get();
f.div(mass);
acceleration.add(f);
}
boolean isDead(){
if(lifespan < 0.0)
return true;
else
return false;
}
}