00001 00002 // Shoot(r) 00009 00010 #include "fx_particule.h" 00011 00012 CParticule::CParticule (const CVecteur & Position, const CVecteur & Vitesse, const CVecteur & Acceleration, float fTempsVie, float fTransparence) 00013 { 00014 m_Temps.Init (); 00015 m_Position = Position; 00016 m_Vitesse = Vitesse; 00017 m_Acceleration = Acceleration; 00018 m_fTempsVie = fTempsVie > 0.0f ? fTempsVie : 1.0f; 00019 m_fTransparence = fTransparence; 00020 } 00021 00022 CParticule::~CParticule () 00023 { 00024 00025 } 00026 00027 // Mise à jour de la position de l'entité, à l'aide des équations de mouvement uniformément accéléré 00028 // x(t) = 1/2*a*(t-to)² + v(t)*(t-to) + x0 00029 // v(t) = a(t)*(t-to) + v0 00030 // a(t) = a0 (constante) 00031 CVecteur CParticule::GetPosition () const 00032 { 00033 // Détermine une durée c'est à dire la différence entre le temps initiale et le temps finale (t - to) 00034 float fTemps = m_Temps.GetTime (); 00035 // Détermine la vitesse : v(t) = a(t)*(t-to) + v0 00036 CVecteur m_VitesseF = m_Acceleration * fTemps + m_Vitesse; 00037 // Détermine la position : x(t) = 1/2*a*(t-to)² + v(t)*(t-to) + x0 00038 return m_Acceleration * 0.5 * SQR(fTemps) + m_VitesseF * fTemps + m_Position; 00039 } 00040 00041 // Pour affiner les effets de particules, plus le temps de vie d'une particule avance plus elle devient transparente, c'est à dire de moins en moins visible. 00042 float CParticule::GetTransparence () const 00043 { 00044 return 0.5f + m_fTransparence / 2 - m_Temps.GetTime () / m_fTempsVie; 00045 } 00046 00047 bool CParticule::GetFinVie () const 00048 { 00049 return m_Temps.GetTime () > m_fTempsVie; 00050 } 00051
1.3.8