[Super-tux-commit] supertux/src sector.h,1.18,1.19 sector.cpp,1.34,1.35 gameobjs.h,1.38,1.39 gameobj
Brought to you by:
wkendrick
From: Ricardo C. <rm...@us...> - 2004-10-29 22:49:17
|
Update of /cvsroot/super-tux/supertux/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8810/src Modified Files: sector.h sector.cpp gameobjs.h gameobjs.cpp gameloop.cpp Log Message: Redesigned Particles algorithm. Index: sector.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/sector.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- sector.h 26 Oct 2004 20:59:47 -0000 1.18 +++ sector.h 29 Oct 2004 22:49:07 -0000 1.19 @@ -114,7 +114,7 @@ void add_upgrade(const Vector& pos, Direction dir, UpgradeKind kind); bool add_bullet(const Vector& pos, float xm, Direction dir); bool add_smoke_cloud(const Vector& pos); - bool add_particles(const Vector& epicenter, const Vector& velocity, const Vector& acceleration, int number, Color color, int size, int life_time); + bool add_particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, int number, Color color, int size, int life_time); void add_floating_text(const Vector& pos, const std::string& text); /** Try to grab the coin at the given coordinates */ Index: gameobjs.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameobjs.cpp,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- gameobjs.cpp 24 Sep 2004 18:01:42 -0000 1.54 +++ gameobjs.cpp 29 Oct 2004 22:49:07 -0000 1.55 @@ -465,8 +465,8 @@ img_smoke_cloud->draw(context, position, LAYER_OBJECTS+1); } -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) +Particles::Particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, int number, Color color_, int size_, int life_time) + : color(color_), size(size_), accel(acceleration) { if(life_time == 0) { @@ -483,7 +483,15 @@ { Particle* particle = new Particle; particle->pos = epicenter; - particle->angle = (rand() % 360) * (M_PI / 180); // in radius + + float angle = ((rand() % (max_angle-min_angle))+min_angle) + * (M_PI / 180); // convert to radius + particle->vel.x = /*fabs*/(sin(angle)) * initial_velocity.x; +// if(angle >= M_PI && angle < M_PI*2) +// particle->vel.x *= -1; // work around to fix signal + particle->vel.y = /*fabs*/(cos(angle)) * initial_velocity.y; +// if(angle >= M_PI_2 && angle < 3*M_PI_2) +// particle->vel.y *= -1; particles.push_back(particle); } @@ -492,27 +500,27 @@ Particles::~Particles() { // free particles - for(std::vector<Particle*>::iterator i = particles.begin(); i < particles.end(); i++) + 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; + Vector camera = Sector::current()->camera->get_translation(); // 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; + (*i)->pos.x += (*i)->vel.x * elapsed_time; + (*i)->pos.y += (*i)->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) + (*i)->vel.x += accel.x * elapsed_time; + (*i)->vel.y += accel.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); Index: gameobjs.h =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameobjs.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- gameobjs.h 23 Sep 2004 17:47:49 -0000 1.38 +++ gameobjs.h 29 Oct 2004 22:49:07 -0000 1.39 @@ -180,7 +180,9 @@ class Particles : public GameObject { public: - Particles(const Vector& epicenter, const Vector& velocity, const Vector& acceleration, int number, Color color, int size, int life_time); + Particles(const Vector& epicenter, int min_angle, int max_angle, + const Vector& initial_velocity, const Vector& acceleration, + int number, Color color, int size, int life_time); ~Particles(); virtual void action(float elapsed_time); @@ -189,13 +191,13 @@ private: Color color; float size; - Vector vel, accel; + Vector accel; Timer timer; bool live_forever; struct Particle { - Vector pos; - float angle; + Vector pos, vel; +// float angle; }; std::vector <Particle*> particles; }; Index: gameloop.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/gameloop.cpp,v retrieving revision 1.190 retrieving revision 1.191 diff -u -d -r1.190 -r1.191 --- gameloop.cpp 19 Oct 2004 16:25:51 -0000 1.190 +++ gameloop.cpp 29 Oct 2004 22:49:07 -0000 1.191 @@ -638,8 +638,8 @@ int red = rand() % 255; // calculate firework color int green = rand() % red; - currentsector->add_particles(epicenter, Vector(1.4,1.4), Vector(0,0), - 45, Color(red,green,0), 3, 1300); + currentsector->add_particles(epicenter, 0, 360, Vector(1.4,1.4), + Vector(0,0), 45, Color(red,green,0), 3, 1300); SoundManager::get()->play_sound(IDToSound(SND_FIREWORKS)); random_timer.start(rand() % 400 + 600); // next firework Index: sector.cpp =================================================================== RCS file: /cvsroot/super-tux/supertux/src/sector.cpp,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- sector.cpp 26 Oct 2004 20:59:47 -0000 1.34 +++ sector.cpp 29 Oct 2004 22:49:07 -0000 1.35 @@ -769,9 +769,9 @@ } bool -Sector::add_particles(const Vector& epicenter, const Vector& velocity, const Vector& acceleration, int number, Color color, int size, int life_time) +Sector::add_particles(const Vector& epicenter, int min_angle, int max_angle, const Vector& initial_velocity, const Vector& acceleration, int number, Color color, int size, int life_time) { - add_object(new Particles(epicenter, velocity, acceleration, number, color, size, life_time)); + add_object(new Particles(epicenter, min_angle, max_angle, initial_velocity, acceleration, number, color, size, life_time)); return true; } |