+ particles.push_back(particle);
+ }
+}
+
+Particles::~Particles()
+{
+ // free particles
+ for(std::vector<Particle*>::iterator i = particles.begin(); i < particles.end(); i++)
+ delete (*i);
+}
+
+void
+Particles::action(float elapsed_time)
+{
+ vel.x += accel.x * elapsed_time;
+ vel.y += accel.y * elapsed_time;
+
+ int camera_x = (int)Sector::current()->camera->get_translation().x;
+ int camera_y = (int)Sector::current()->camera->get_translation().y;
+
+ // update particles
+ for(std::vector<Particle*>::iterator i = particles.begin(); i < particles.end(); i++)
+ {
+ (*i)->pos.x += sin((*i)->angle) * vel.x * elapsed_time;
+ (*i)->pos.y += cos((*i)->angle) * vel.y * elapsed_time;
+
+ if((*i)->pos.x < camera_x || (*i)->pos.x > screen->w + camera_x ||
+ (*i)->pos.y < camera_y || (*i)->pos.y > screen->h + camera_y)
+ {
+ delete (*i);
+ particles.erase(i);
+ }
+ }