#ifndef _particlegeo_H_ #define _particlegeo_H_ ////////////////////////////////////////////////////////////////////////////// // // ParticleGeo // ////////////////////////////////////////////////////////////////////////////// class ParticleData; class ParticleBehavior { public: virtual void Render (Context* pContext, ParticleData* pParticleData, float fElapsedTime) = 0; }; class ParticleData { friend class ParticleGeoImpl; public: Vector m_vecPosition; Vector m_vecVelocity; Vector m_vecAcceleration; float m_fSize; float m_fDuration; float m_fAngle; public: /* void */ ParticleData (void); private: float m_fStartTime; ParticleBehavior* m_pParticleBehavior; private: void InitParticle (float fTime, ParticleBehavior* pParticleBehavior); }; class ParticleGeo : public Geo { public: /* void */ ParticleGeo (Number* pTime) : Geo (pTime) {} virtual ParticleData* AddAfterburner (void) = 0; virtual ParticleData* AddDamage (void) = 0; virtual ParticleData* AddSmoke (void) = 0; virtual ParticleData* AddFire (void) = 0; virtual ParticleData* AddSpark (void) = 0; }; TRef CreateParticleGeo (Modeler* pModeler, Number* pTime); ////////////////////////////////////////////////////////////////////////////// #endif