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