示例#1
0
/* Returns 1 if we die here, instead of go into explosion */
int 
Object::Explode(void)
{
	if ( Exploding )
		return(0);
	Exploding = 1;
	solid = 0;
	shootable = 0;
	phase = 0;
	nextphase = 0;
	phasetime = 2;
	xvec = yvec = 0;
	Set_Blit(gExplosion);
	Set_TTL(myblit->numFrames*phasetime);
	ExplodeSound();
	return(0);
}
示例#2
0
void UFO::Update(Number * elapsed)
{
	Location::Update(elapsed);

	m_ShipMesh->setPosition(m_Position);

	if (m_Position.x > m_WindowWidth || m_Position.x < -m_WindowWidth)
	{
		m_Done = true;
	}

	CheckForEdge();

	if (p_Player->m_Active && !p_Player->m_Hit)
	{
		if (CirclesIntersect(p_Player->m_Position, p_Player->m_Radius))
		{
			if (p_Player->m_ShieldOn)
			{
				CollisionResult *vsShield = &p_Scene->testCollision(m_ShipMesh, p_Player->m_ShieldMesh);

				if (vsShield->collided)
				{
					if (!m_ShieldHit)
					{
						p_Player->ShieldHit(m_Velocity * 3, false);
						m_ShieldHit = true;
					}
				}
				else
					m_ShieldHit = false;
			}
			else
			{
				CollisionResult *vsPlayer = &p_Scene->testCollision(m_ShipMesh, p_Player->m_ShipMesh);

				if (vsPlayer->collided)
				{
					ExplodeSound();
					p_Player->Hit();
					p_Player->GotPoints(m_Points);
					m_Hit = true;
				}
			}
		}
	}

	for (int i = 0; i < 4; i++)
	{
		if (p_Player->p_Shots[i]->m_Active)
		{
			if (CirclesIntersect(p_Player->p_Shots[i]->m_Position, p_Player->p_Shots[i]->m_Radius))
			{
				CollisionResult *rockVsPlayerShot = &p_Scene->testCollision(m_ShipMesh, p_Player->p_Shots[i]->m_ShotMesh);

				if (rockVsPlayerShot->collided)
				{
					ExplodeSound();
					p_Player->DeactivateShot(i);
					p_Player->GotPoints(m_Points);
					m_Hit = true;
					break;
				}
			}
		}
	}

	if (p_FireTimer->getElapsedf() > m_FireTimerAmount)
	{
		FireShot();
	}

	if (p_VectorTimer->getElapsedf() > m_VectorTimerAmount)
	{
		ChangeVector();
	}

	if (p_Player->m_GameOver)
	{
		if (p_EngineLargeSound != NULL)
		{
			if (p_EngineLargeSound->isPlaying());
				p_EngineLargeSound->Stop();
		}

		if (p_EngineSmallSound != NULL)
		{
			if (p_EngineSmallSound->isPlaying());
				p_EngineSmallSound->Stop();
		}
	}
}