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);
}