81 lines
2.0 KiB
C++
81 lines
2.0 KiB
C++
#include "ParticleEmitter.h"
|
|
|
|
ParticleEmitter::ParticleEmitter(void) {
|
|
|
|
}
|
|
|
|
ParticleEmitter::~ParticleEmitter(void) {
|
|
|
|
}
|
|
|
|
void ParticleEmitter::SetXY(int xArg, int yArg) {
|
|
x = xArg;
|
|
y = yArg;
|
|
}
|
|
|
|
void ParticleEmitter::ForceXY(int xArg, int yArg) {
|
|
for(int i = 0; i < _particleCount; i++) {
|
|
m_particle[i].x = (float)xArg;
|
|
m_particle[i].y = (float)yArg;
|
|
}
|
|
}
|
|
|
|
void ParticleEmitter::SetParticleCount(int countArg) {
|
|
_particleCount = countArg;
|
|
m_particle.resize(_particleCount);
|
|
|
|
for(int i = 0; i < _particleCount; i++) {
|
|
m_particle[i].startTime = SDL_GetTicks();
|
|
}
|
|
}
|
|
|
|
void ParticleEmitter::SetParticleSpeed(float speedArg) {
|
|
_particleSpeed = speedArg;
|
|
}
|
|
|
|
void ParticleEmitter::SetParticleType(string typeArg) {
|
|
if(!_particleTexture) {
|
|
SDL_FreeSurface(_particleTexture);
|
|
}
|
|
|
|
string textureFilename = "../Data/Media/Images/Particles/" + typeArg + ".png";
|
|
_particleTexture = LoadImageAlpha(textureFilename.c_str());
|
|
}
|
|
|
|
void ParticleEmitter::SetParticleLifetime(int lifetimeArg) {
|
|
_particleLifetime = lifetimeArg;
|
|
|
|
for(int i = 0; i < _particleCount; i++) {
|
|
m_particle[i].lifetime = rand() % _particleLifetime + _particleLifetime / 4;
|
|
}
|
|
}
|
|
|
|
void ParticleEmitter::Render(void) {
|
|
for(int i = 0; i < _particleCount; i++) {
|
|
ApplySurface((int)m_particle[i].x, (int)m_particle[i].y, _particleTexture, screen);
|
|
}
|
|
}
|
|
|
|
void ParticleEmitter::Update(void) {
|
|
for(int i = 0; i < _particleCount; i++) {
|
|
if((int)SDL_GetTicks() - m_particle[i].startTime > m_particle[i].lifetime) {
|
|
// Reset the x and y coords.
|
|
m_particle[i].x = (float)x;
|
|
m_particle[i].y = (float)y;
|
|
|
|
m_particle[i].xVel = (float)(rand() % 360);
|
|
m_particle[i].yVel = (float)(rand() % 360);
|
|
|
|
if(rand() % 2)
|
|
m_particle[i].xVel = m_particle[i].xVel * -1.0f;
|
|
if(rand() % 2)
|
|
m_particle[i].yVel = m_particle[i].yVel * -1.0f;
|
|
|
|
m_particle[i].startTime = SDL_GetTicks();
|
|
} else {
|
|
m_particle[i].x += m_particle[i].xVel * _particleSpeed;
|
|
m_particle[i].y += m_particle[i].yVel * _particleSpeed;
|
|
}
|
|
}
|
|
}
|