[Super-tux-commit] supertux/src gameobjs.cpp,1.50,1.51 gameobjs.h,1.35,1.36
Brought to you by:
wkendrick
From: Ricardo C. <rm...@us...> - 2004-09-17 12:42:05
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16817/src Modified Files: gameobjs.cpp gameobjs.h Log Message: Remove particles when they get off the screen. Let time_left be defined for 0 to let particles alive until they get off the screen. Index: gameobjs.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameobjs.cpp,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- gameobjs.cpp 16 Sep 2004 15:04:17 -0000 1.50 +++ gameobjs.cpp 17 Sep 2004 12:41:50 -0000 1.51 @@ -33,6 +33,7 @@ #include "sector.h" #include "tilemap.h" #include "video/drawing_context.h" +#include "camera.h" BouncyDistro::BouncyDistro(const Vector& pos) : position(pos) @@ -441,7 +442,15 @@ Particles::Particles(const Vector& epicenter, const Vector& velocity, const Vector& acceleration, int number, Color color_, int size_, int life_time) : color(color_), size(size_), vel(velocity), accel(acceleration) { - timer.start(life_time); + if(life_time == 0) + { + live_forever = true; + } + else + { + live_forever = false; + timer.start(life_time); + } // create particles for(int p = 0; p < number; p++) @@ -467,14 +476,24 @@ 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(int p = 0; p < particles.size(); p++) + for(std::vector<Particle*>::iterator i = particles.begin(); i < particles.end(); i++) { - particles[p]->pos.x += sin(particles[p]->angle) * vel.x * elapsed_time; - particles[p]->pos.y += cos(particles[p]->angle) * vel.y * elapsed_time; + (*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); + } } - if(!timer.check()) + if((!timer.check() && !live_forever) || particles.size() == 0) remove_me(); } @@ -482,9 +501,9 @@ Particles::draw(DrawingContext& context) { // draw particles - for(int p = 0; p < particles.size(); p++) + for(std::vector<Particle*>::iterator i = particles.begin(); i < particles.end(); i++) { - context.draw_filled_rect(particles[p]->pos, Vector(size,size), color, LAYER_OBJECTS+10); + context.draw_filled_rect((*i)->pos, Vector(size,size), color, LAYER_OBJECTS+10); } } Index: gameobjs.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameobjs.h,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- gameobjs.h 14 Sep 2004 10:27:05 -0000 1.35 +++ gameobjs.h 17 Sep 2004 12:41:52 -0000 1.36 @@ -190,6 +190,7 @@ float size; Vector vel, accel; Timer timer; + bool live_forever; struct Particle { Vector pos; |