www.pudn.com > sxdl.zip > cFire.cpp


#include "cFire.h" 
#include "cBoomBastic.h" 
#include "bbUtil.h" 
 
#define FIRE_SIZE 64.0f 
 
cFire::cFire(float p_LifeTime, int FireX, int FireY) 
{ 
	LifeTime = p_LifeTime; 
	m_FireX = FireX; 
	m_FireY = FireY; 
	 
	Family = FIRE_ID; 
	Position = g_BoomBastic.Tilemap->MapToWorld(m_FireX, m_FireY); 
	 
	WillRenderLike(g_BoomBastic.EntitySprites[FIRE_SPRITE]); 
	//On ne dessine pas tout de suite l'entite, on ne la dessinera que lorsque sa duree de vie sera inferieure a 1 seconde 
	Activate(true, false); 
} 
 
bool cFire::OnAnimate(float ElapsedTime, float AbsoluteTime) 
{ 
	//Si sa duree de vie est inferieure a 1 seconde... 
	float RemainingLifeTime = LifeTime - Age; 
	if (RemainingLifeTime <= 1.0f) 
	{ 
		//On met a jour sa taille et son orientation en fonction du temps restant 
		Angles = Vector3(0.0f, 0.0f, -RemainingLifeTime * 2 * Pi); 
		float NewSize = FIRE_SIZE * (-powf(2 * RemainingLifeTime - 1.0f, 2) + 1.0f); 
		Scale = Vector3(NewSize, NewSize, 1.0f); 
		//On dessine l'entite 
		Activate(); 
		 
		//Si la taille de la boule de feu est inferieure a 20, on considere que la boule de feu est innofensive  
		if (NewSize >= 20.0f) 
			g_BoomBastic.Tilemap->LogicalMap(m_FireX, m_FireY, LMAP_FIRE); 
		else 
		{ 
			if (g_BoomBastic.Tilemap->LogicalMap(m_FireX, m_FireY) == LMAP_FIRE) 
				g_BoomBastic.Tilemap->LogicalMap(m_FireX, m_FireY, LMAP_GROUND); 
		} 
	} 
	 
	return true; 
} 
 
void cFire::OnDying() 
{ 
	//Lorsque la boule de feu s'eteint, on restaure  
	g_BoomBastic.Tilemap->LogicalMap(m_FireX, m_FireY, LMAP_GROUND); 
}