G1
void ParticleSystem :: update ( Controller * controller,
float curTime )
{
VisualObject :: update ( controller, curTime ) ,-
// remove dead particles for ( register Particle * cur = start; cur != NULL; ) {
register Particle * next = cur -> next;
// save next particle (if cur will be deleted)
if ( !cur -> isAlive ( curTime ) ) remove ( cur );
cur = next;
}
if ( birthPeriod < 0 )
// for systems where all particles are created // at start
return,-
// create new particles if ( lastCreationTime + birthPeriod < curTime ) {
for ( float time = lastCreationTime; time + birthPeriod < curTime; time += birthPeriod )
createParticle ( time );
lastCreationTime = curTime;
}
}

Одной из простейших систем частиц является фонтан - частицы вылетают из источника в заданном направлении с контролируемыми случайными отклонениями и после этого движутся под действием силы тяжести, время жизни частицы ограничено.

Ниже приводится описание этого класса.

class Fountain : public ParticleSystem {
private:
float lastUpdateTime; // time the system was last
// updated or -1

Добавляем эффекты

Vector3D shootDir; // shooting direction
Vector3D gravity; // gravity acceleration
// vector
Vector3D wind; // wind direction and speed
float dispersion; // measure of randomness
float lifeTime; Texture * texture; Vector4D color; public:
Fountain ( const char * theName, const Vector3D& thePos, int particlesPerSecond, Texture * theTexture, const Vector3D& theShootDir, const Vector3D& theGravity, const Vector3D& theWind, float theDispersion, float theLifeTime, const Vector4D& theColor ) : ParticleSystem ( theName, thePos, particlesPerSecond )
{
shootDir = theShootDir;
gravity = theGravity;
wind = theWind;
dispersion = theDispersion;
lifeTime = theLifeTime;
lastUpdateTime = -l.Of; texture = theTexture;
color = theColor;
metaClass = &classlnstance;

⇐ Предыдущая| |Следующая ⇒