1
0
forked from 0ad/0ad
0ad/source/graphics/Particle.cpp
janwas c7a84e84be added precompiled.h everywhere
This was SVN commit r392.
2004-06-03 18:38:14 +00:00

89 lines
1.8 KiB
C++
Executable File

/*==================================================================
|
| Name: Particle.cpp
|
|===================================================================
|
| Author: Ben Vinegar
| Contact: benvinegar () hotmail ! com
|
|
| Last Modified: 03/08/04
|
| Overview: A single particle, currently only utilized by
| CParticleEmitter. Public variables are for performance
| reasons.
|
|
| Usage: Instantiate a particle, set public variables, then call
| Frame() every frame.
|
| To do: TBA
|
| More Information: TBA
|
==================================================================*/
#include "precompiled.h"
#include "Particle.h"
#include "timer.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;
}