0ad/source/terrain/Particle.cpp
2004-03-05 06:37:44 +00:00

65 lines
1.4 KiB
C++
Executable File

//***********************************************************
//
// 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 <assert.h>
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;
}