diff options
author | Ian C <ianc@noddybox.co.uk> | 2006-05-02 19:12:46 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2006-05-02 19:12:46 +0000 |
commit | 99778e9b85bd4a16a9055587a273446068577100 (patch) | |
tree | 5bd5c5a0fb48f52f306a2a8b19de200800ada7df /sparks.cpp | |
parent | f77e2736cea27ddbcaa44ffb28b326846891029e (diff) |
This commit was generated by cvs2svn to compensate for changes in r2,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'sparks.cpp')
-rw-r--r-- | sparks.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/sparks.cpp b/sparks.cpp new file mode 100644 index 0000000..6a1484b --- /dev/null +++ b/sparks.cpp @@ -0,0 +1,123 @@ +// +// 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 +// +// ------------------------------------------------------------------------- +// +// Sparks +// +// +static const char id[]="$Id$"; + +#include "sparks.h" + +Sparks::Sparks(int num, GLfloat alpha_dec, GLfloat alpha_min, + int len, GLfloat delta) +{ + m_num=max(num,1); + m_alpha_dec=alpha_dec; + m_alpha_min=alpha_min; + m_len=max(len,1); + m_delta=delta; +} + + +Sparks::~Sparks() +{ +} + + +void Sparks::add(GLfloat ox, GLfloat oy, GLfloat oz) +{ + int f; + Point p; + + p.x2=ox; + p.y2=oy; + p.z2=oz; + p.life=m_life; + + for(f=0;f<m_num;f++) + { + p.dx=DRand()*m_delta*2-m_delta; + p.dy=DRand()*m_delta*2-m_delta; + p.dz=DRand()*m_delta*2-m_delta; + + p.x1=ox+p.dx*m_len; + p.y1=oy+p.dy*m_len; + p.z1=oz+p.dz*m_len; + + p.alpha=1.0f; + + m_list.push_back(p); + } +} + + +void Sparks::update() +{ + list<Point>::iterator i; + + // Delete dead sparks + // + i=m_list.begin(); + + while ((i!=m_list.end())&&(i->alpha<=m_alpha_min)) + { + m_list.pop_front(); + i=m_list.begin(); + } + + // Update them + // + for(i=m_list.begin();i!=m_list.end();i++) + { + i->x1+=i->dx; + i->y1+=i->dy; + i->z1+=i->dz; + + i->x2+=i->dx; + i->y2+=i->dy; + i->z2+=i->dz; + + i->alpha-=m_alpha_dec; + } +} + + +void Sparks::draw() +{ + list<Point>::iterator i; + + // Draw them + // + glBegin(GL_LINES); + + for(i=m_list.begin();i!=m_list.end();i++) + { + glColor4f(1.0,1.0,0.0,i->alpha); + glVertex3f(i->x1,i->y1,i->z1); + glColor4f(0.5,0.0,0.0,i->alpha); + glVertex3f(i->x2,i->y2,i->z2); + } + + glEnd(); +} + + +// END OF FILE // |