//*********************************************************** // // Name: Particle.cpp // Last Update: 03/04/04 // Author: Ben Vinegar // // Description: Particle class implementation // //*********************************************************** #include "Particle.h" #include "time.h" #include "ogl.h" #include CParticle::CParticle() : m_duration(0.0f), m_timeElapsedTotal(0.0f), m_position(0.0f, 0.0f, 0.0f), m_velocity(0.0f, 0.0f, 0.0f), m_gravity(0.0f, 0.0f, 0.0f) { m_timeOfLastFrame = get_time(); // default white colour m_colour[0] = m_colour[1] = m_colour[2] = m_colour[3] = 1.0f; } CParticle::~CParticle() { } void CParticle::Init() { // calculate colour increment per second in order to fade to black m_colourInc[0] = - (m_colour[0] / m_duration); m_colourInc[1] = - (m_colour[1] / m_duration); m_colourInc[2] = - (m_colour[2] / m_duration); } void CParticle::Frame() { Update(); Render(); } void CParticle::Render() { assert(m_sprite); m_sprite->SetColour(m_colour); m_sprite->SetTranslation(m_position); m_sprite->Render(); } void CParticle::Update() { float timeElapsed = float(get_time() - m_timeOfLastFrame); m_velocity += m_gravity * timeElapsed; m_position += m_velocity * timeElapsed; // fade colour m_colour[0] += m_colourInc[0] * timeElapsed; m_colour[1] += m_colourInc[1] * timeElapsed; m_colour[2] += m_colourInc[2] * timeElapsed; m_timeOfLastFrame = get_time(); m_timeElapsedTotal += timeElapsed; }