/// <summary> /// Updates the collisions. /// </summary> private void UpdateCollisions() { foreach (Projectile projectile in _projectiles) { if (projectile.Active) { if (projectile.Hostile) { if (projectile.GetCircle().Intersects(_player.GetCircle())) { if (Circle.Intersects(projectile.GetCircles(), _player.GetCircles())) { projectile.Active = false; NewLife(); break; } } } else { int pointsEarned = 0; foreach (Satellite enemy in _enemies) { if (projectile.GetCircle().Intersects(enemy.GetCircle())) { if (Circle.Intersects(projectile.GetCircles(), enemy.GetCircles())) { if (enemy.Accurate) { pointsEarned += 1000; } else { pointsEarned += 200; } enemy.Active = false; projectile.Active = false; var explosion = new Explosion { Active = true, Position = enemy.Position, Scale = (float)enemy.Scale, Texture = _ufoTexture, Velocity = new Vector2(2, 0) }; _explosionSound.Play(); _explosions.Add(explosion); } } } if (pointsEarned != 0) { AddPoints(pointsEarned); } } foreach (Asteroid asteroid in _asteroids) { if (asteroid.Active) { if (asteroid.GetCircle().Intersects(projectile.GetCircle())) { asteroid.Active = false; projectile.Active = false; if (projectile.Hostile == false) { switch (asteroid.Generation) { case (1): AddPoints(20); break; case (2): AddPoints(50); break; case (3): AddPoints(100); break; } } break; } } } } } foreach (Asteroid asteroid in _asteroids) { if (asteroid.GetCircle().Intersects(_player.GetCircle()) && Circle.Intersects(asteroid.GetCircles(), _player.GetCircles())) { NewLife(); } } foreach (Satellite ufo in _enemies) { if (ufo.GetCircle().Intersects(_player.GetCircle())) { if (Circle.Intersects(ufo.GetCircles(), _player.GetCircles())) { NewLife(); ufo.Active = false; var explosion = new Explosion { Active = true, Position = ufo.Position, Scale = (float)ufo.Scale, Texture = _ufoTexture, Velocity = new Vector2(2, 0) }; _explosionSound.Play(); _explosions.Add(explosion); } } } }