/* 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); }
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(); } } }