Fix for coverity #29401
[supertux.git] / src / object / particles.cpp
index a51da08..36d3b6e 100644 (file)
@@ -24,6 +24,7 @@
 #include "supertux/sector.hpp"
 #include "video/drawing_context.hpp"
 
+//TODO: remove this function in favor of the one below
 Particles::Particles(const Vector& epicenter, int min_angle, int max_angle,
                      const Vector& initial_velocity, const Vector& acceleration, int number,
                      Color color_, int size_, float life_time, int drawing_layer_) :
@@ -61,6 +62,44 @@ Particles::Particles(const Vector& epicenter, int min_angle, int max_angle,
   }
 }
 
+Particles::Particles(const Vector& epicenter, int min_angle, int max_angle,
+                     const float min_initial_velocity, const float max_initial_velocity,
+                     const Vector& acceleration, int number, Color color_,
+                     int size_, float life_time, int drawing_layer_) :
+
+  accel(acceleration),
+  timer(),
+  live_forever(),
+  color(color_),
+  size(size_),
+  drawing_layer(drawing_layer_),
+  particles()
+{
+  if(life_time == 0) {
+    live_forever = true;
+  } else {
+    live_forever = false;
+    timer.start(life_time);
+  }
+
+  // create particles
+  for(int p = 0; p < number; p++)
+  {
+    Particle* particle = new Particle;
+    particle->pos = epicenter;
+
+    float velocity = (min_initial_velocity == max_initial_velocity) ? min_initial_velocity :
+                     graphicsRandom.rand(min_initial_velocity, max_initial_velocity);
+    float angle = (min_angle == max_angle) ? min_angle * (M_PI / 180) :
+                     graphicsRandom.rand(min_angle, max_angle) * (M_PI / 180);  // convert to radians
+    // Note that angle defined as clockwise from vertical (up is zero degrees, right is 90 degrees)
+    particle->vel.x = (sin(angle)) * velocity;
+    particle->vel.y = (-cos(angle)) * velocity;
+
+    particles.push_back(particle);
+  }
+}
+
 Particles::~Particles()
 {
   // free particles