65 lines
1.4 KiB
C++
65 lines
1.4 KiB
C++
|
//***********************************************************
|
||
|
//
|
||
|
// 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;
|
||
|
}
|