#include "LuciolParticle.h"

#include "math.h"

using namespace ParticleSystem;

LuciolParticle::LuciolParticle(void){
}

LuciolParticle::~LuciolParticle(void){
}

bool LuciolParticle::isAlive(){
	// une luciole est toujours vivante
	//return true; 
	return life < maxLife;
}

void LuciolParticle::update(float elapsedTime){
	if (isAlive())
	{
		// puis on update la durée de vie de la particule
		life+= elapsedTime;
		float toCenter[3];
		toCenter[0] =  generator->pos[0] - pos[0];
		toCenter[1] =  generator->pos[1] - pos[1];
		toCenter[2] =  generator->pos[2] - pos[2];
		float length = sqrt(toCenter[0]*toCenter[0]+toCenter[1]*toCenter[1]+toCenter[2]*toCenter[2]);
		
		direction[0] += (toCenter[0]*0.05f*(2/length)*masse);
		direction[1] += (toCenter[1]*0.05f*(2/length)*masse);
		direction[2] += (toCenter[2]*0.05f*(2/length)*masse);
		length = sqrt(direction[0]*direction[0]+direction[1]*direction[1]+direction[2]*direction[2]);
		// on ajoute le vecteur physique a la direction
		// on met a jour la position de la particule
		pos[0] += direction[0]*elapsedTime;
		pos[1] += direction[1]*elapsedTime;
		pos[2] += direction[2]*elapsedTime;
		//couleur[0] = beginCouleur[0];
		//couleur[1] = beginCouleur[1];
		//couleur[2] = beginCouleur[2];
		//couleur[3] = beginCouleur[3];
		static float factor;
		factor = life/maxLife;
		couleur[0] = beginCouleur[0] + factor*(endCouleur[0] - beginCouleur[0]);
		couleur[1] = beginCouleur[1] + factor*(endCouleur[1] - beginCouleur[1]);
		couleur[2] = beginCouleur[2] + factor*(endCouleur[2] - beginCouleur[2]);
		couleur[3] = beginCouleur[3] + factor*(endCouleur[3] - beginCouleur[3]);
	}
	else
	{
		// la particule est morte, on essaye de la regenerer (si le generateur a depassé
		// le nombre max de particules generée, il ne la regenerera pas a ce tour mais au 
		// tour suivant.)
		if (generator->loop || notInitialised())
		{
			generator->generate(this);
		}
	}

}

