diff options
Diffstat (limited to 'particles.cpp')
-rw-r--r-- | particles.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/particles.cpp b/particles.cpp new file mode 100644 index 0000000..2603397 --- /dev/null +++ b/particles.cpp @@ -0,0 +1,101 @@ +// +// glgrav - OpenGL N-Body gravity simulator +// +// Copyright (C) 2003 Ian Cowburn (ianc@noddybox.demon.co.uk) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// ------------------------------------------------------------------------- +// +// Particles +// +// +static const char id[]="$Id$"; + +#include "particles.h" + +Particles::Particles(GLfloat alpha_dec, GLfloat alpha_min) +{ + m_alpha_dec=alpha_dec; + m_alpha_min=alpha_min; +} + + +Particles::~Particles() +{ +} + + +void Particles::add(GLfloat x1, GLfloat y1, GLfloat z1, + GLfloat x2, GLfloat y2, GLfloat z2, + GLfloat r, GLfloat g, GLfloat b) +{ + Point p; + + p.x1=x1; + p.y1=y1; + p.z1=z1; + p.x2=x2; + p.y2=y2; + p.z2=z2; + p.r=r; + p.g=g; + p.b=b; + p.a=1.0; + + m_list.push_back(p); +} + + +void Particles::draw() +{ + list<Point>::iterator i; + + glBegin(GL_LINES); + + for(i=m_list.begin();i!=m_list.end();i++) + { + i->a-=m_alpha_dec; + + glColor4f(i->r,i->g,i->b,i->a); + glVertex3f(i->x1,i->y1,i->z1); + glVertex3f(i->x2,i->y2,i->z2); + } + + glEnd(); +} + + +void Particles::update() +{ + list<Point>::iterator i; + + // Delete dead particles + // + i=m_list.begin(); + + while ((i!=m_list.end())&&(i->a<=m_alpha_min)) + { + m_list.pop_front(); + i=m_list.begin(); + } + + // Update them + // + for(i=m_list.begin();i!=m_list.end();i++) + i->a-=m_alpha_dec; +} + +// END OF FILE // |