mirror of
https://github.com/processing/processing4.git
synced 2026-01-29 11:21:06 +01:00
70 lines
1.2 KiB
Plaintext
70 lines
1.2 KiB
Plaintext
|
|
// A simple Particle class, renders the particle as an image
|
|
|
|
class Particle {
|
|
PVector loc;
|
|
PVector vel;
|
|
PVector acc;
|
|
float timer;
|
|
PImage img;
|
|
|
|
// One constructor
|
|
Particle(PVector a, PVector v, PVector l, PImage img_) {
|
|
acc = a.get();
|
|
vel = v.get();
|
|
loc = l.get();
|
|
timer = 100.0;
|
|
img = img_;
|
|
}
|
|
|
|
// Another constructor (the one we are using here)
|
|
Particle(PVector l,PImage img_) {
|
|
acc = new PVector(0.0,0.0,0.0);
|
|
float x = (float) generator.nextGaussian()*0.3f;
|
|
float y = (float) generator.nextGaussian()*0.3f - 1.0f;
|
|
vel = new PVector(x,y,0);
|
|
loc = l.get();
|
|
timer = 100.0;
|
|
img = img_;
|
|
}
|
|
|
|
void run() {
|
|
update();
|
|
render();
|
|
}
|
|
|
|
// Method to apply a force vector to the Particle object
|
|
// Note we are ignoring "mass" here
|
|
void add_force(PVector f) {
|
|
acc.add(f);
|
|
}
|
|
|
|
// Method to update location
|
|
void update() {
|
|
vel.add(acc);
|
|
loc.add(vel);
|
|
timer -= 2.5;
|
|
acc.mult(0);
|
|
}
|
|
|
|
// Method to display
|
|
void render() {
|
|
imageMode(CORNER);
|
|
tint(255,timer);
|
|
image(img,loc.x-img.width/2,loc.y-img.height/2);
|
|
}
|
|
|
|
// Is the particle still useful?
|
|
boolean dead() {
|
|
if (timer <= 0.0) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|