123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Xna.Framework;
- namespace Asteroid_Belt_Assault
- {
- class CollisionManager
- {
- private AsteroidManager asteroidManager;
- private PlayerManager playerManager;
- private EnemyManager enemyManager;
- private ExplosionManager explosionManager;
- private Vector2 offScreen = new Vector2(-500, -500);
- private Vector2 shotToAsteroidImpact = new Vector2(0, -20);
- private int enemyPointValue = 100;
- public CollisionManager(
- AsteroidManager asteroidManager,
- PlayerManager playerManager,
- EnemyManager enemyManager,
- ExplosionManager explosionManager)
- {
- this.asteroidManager = asteroidManager;
- this.playerManager = playerManager;
- this.enemyManager = enemyManager;
- this.explosionManager = explosionManager;
- }
- private void checkShotToEnemyCollisions()
- {
- foreach (Sprite shot in playerManager.PlayerShotManager.Shots)
- {
- foreach (Enemy enemy in enemyManager.Enemies)
- {
- if (shot.IsCircleColliding(
- enemy.EnemySprite.Center,
- enemy.EnemySprite.CollisionRadius))
- {
- shot.Location = offScreen;
- enemy.Destroyed = true;
- playerManager.PlayerScore += enemyPointValue;
- explosionManager.AddExplosion(
- enemy.EnemySprite.Center,
- enemy.EnemySprite.Velocity / 10);
- }
- }
- }
- }
- private void checkShotToAsteroidCollisions()
- {
- foreach (Sprite shot in playerManager.PlayerShotManager.Shots)
- {
- foreach (Sprite asteroid in asteroidManager.Asteroids)
- {
- if (shot.IsCircleColliding(
- asteroid.Center,
- asteroid.CollisionRadius))
- {
- shot.Location = offScreen;
- asteroid.Velocity += shotToAsteroidImpact;
- }
- }
- }
- }
- private void checkShotToPlayerCollisions()
- {
- foreach (Sprite shot in enemyManager.EnemyShotManager.Shots)
- {
- if (shot.IsCircleColliding(
- playerManager.playerSprite.Center,
- playerManager.playerSprite.CollisionRadius))
- {
- shot.Location = offScreen;
- playerManager.Destroyed = true;
- explosionManager.AddExplosion(
- playerManager.playerSprite.Center,
- Vector2.Zero);
- }
- }
- }
- private void checkEnemyToPlayerCollisions()
- {
- foreach (Enemy enemy in enemyManager.Enemies)
- {
- if (enemy.EnemySprite.IsCircleColliding(
- playerManager.playerSprite.Center,
- playerManager.playerSprite.CollisionRadius))
- {
- enemy.Destroyed = true;
- explosionManager.AddExplosion(
- enemy.EnemySprite.Center,
- enemy.EnemySprite.Velocity / 10);
- playerManager.Destroyed = true;
- explosionManager.AddExplosion(
- playerManager.playerSprite.Center,
- Vector2.Zero);
- }
- }
- }
- private void checkAsteroidToPlayerCollisions()
- {
- foreach (Sprite asteroid in asteroidManager.Asteroids)
- {
- if (asteroid.IsCircleColliding(
- playerManager.playerSprite.Center,
- playerManager.playerSprite.CollisionRadius))
- {
- explosionManager.AddExplosion(
- asteroid.Center,
- asteroid.Velocity / 10);
- asteroid.Location = offScreen;
- playerManager.Destroyed = true;
- explosionManager.AddExplosion(
- playerManager.playerSprite.Center,
- Vector2.Zero);
- }
- }
- }
- public void CheckCollisions()
- {
- checkShotToEnemyCollisions();
- checkShotToAsteroidCollisions();
- if (!playerManager.Destroyed)
- {
- checkShotToPlayerCollisions();
- checkEnemyToPlayerCollisions();
- checkAsteroidToPlayerCollisions();
- }
- }
- }
- }
|