www.pudn.com > sxdl.zip > cBonus.cpp
#include "cBonus.h"
#include "cBoomBastic.h"
#include "bbUtil.h"
#include "cParticle.h"
#define BONUS_SIZE 48.0f
cBonus::cBonus(int BonusX, int BonusY, int p_BonusType)
{
m_BonusX = BonusX;
m_BonusY = BonusY;
BonusType = p_BonusType;
Family = BONUS_ID;
Position = g_BoomBastic.Tilemap->MapToWorld(m_BonusX, m_BonusY);
//Un bonus a une duree de vie de 60 secondes
LifeTime = 60.0f;
g_BoomBastic.Tilemap->LogicalMap(m_BonusX, m_BonusY, LMAP_BONUS);
switch (BonusType)
{
case BOMB_BONUS:
default:
WillRenderLike(g_BoomBastic.EntitySprites[BOMB_BONUS_SPRITE]);
break;
case SPEED_BONUS:
WillRenderLike(g_BoomBastic.EntitySprites[SPEED_BONUS_SPRITE]);
break;
case ROCKET_BONUS:
WillRenderLike(g_BoomBastic.EntitySprites[ROCKET_BONUS_SPRITE]);
break;
case EXPLO_BONUS:
WillRenderLike(g_BoomBastic.EntitySprites[EXPLO_BONUS_SPRITE]);
break;
}
Activate();
}
bool cBonus::OnAnimate(float ElapsedTime, float AbsoluteTime)
{
//On redimensionne la largeur de l'entite en fonction du temps pour donner l'impression qu'elle tourne sur l'axe Y
float NewWidth = cosf(AbsoluteTime * Pi) * BONUS_SIZE;
Scale = Vector3(NewWidth, BONUS_SIZE, 1.0f);
//Si le bonus est sur du feu et si son age est superieur a 1.5 (pour eviter qu'il se fasse griller a sa naissance), on le detruit
if (g_BoomBastic.Tilemap->LogicalMap(m_BonusX, m_BonusY) == LMAP_FIRE && Age > 1.5f)
DestroyBonus();
return true;
}
void cBonus::PickUp()
{
//On joue le son du bonus
g_BoomBastic.Sound.Play(BONUS_SOUND);
//On cree un 'splash' bleu avec 30 particules
int i;
for (i = 0; i < 30; i++)
{
Vector3 ParticleVelocity = g_BoomBastic.Tools.randv() * 60.0f;
ParticleVelocity.z = 0.0f;
new cParticle(Position, ParticleVelocity, 2.0f, 0.0f, 14.0f, g_BoomBastic.Particles[BONUS_PARTICLE]);
}
//On detruit le bonus
DestroyBonus();
}
void cBonus::DestroyBonus()
{
//On detruit l'entite
HitPoints = -1;
BonusType = NULL_BONUS;
}
void cBonus::OnDying()
{
g_BoomBastic.Tilemap->LogicalMap(m_BonusX, m_BonusY, LMAP_GROUND);
}