void ProcessCollisions()
{
// Process collisions
foreach (CollisionPair pair in GameObjectManager.Collisions)
{
GameObject objectA = GameObjectManager.GetObject(pair.A);
GameObject objectB = GameObjectManager.GetObject(pair.B);
// Player collisions
if (objectA.ObjectType == ObjectType.Player || objectB.ObjectType == ObjectType.Player)
{
PlayerShip player = ((objectA.ObjectType == ObjectType.Player) ? objectA : objectB) as PlayerShip;
GameObject collider = (objectA.ObjectType == ObjectType.Player) ? objectB : objectA;
if (!player.Dead)
{
// Process powerup collisions
switch (collider.ObjectType)
{
case ObjectType.Powerup:
Powerup powerup = collider as Powerup;
player.ApplyPowerup(powerup.Type);
GameObjectManager.DestroyObject(collider.ID);
break;
case ObjectType.Enemy:
Enemy enemy = collider as Enemy;
if (enemy.GetType() == typeof(Kamikaze) || enemy.GetType() == typeof(Mandible) ||
enemy.GetType() == typeof(SuicideBomber) || enemy.GetType() == typeof(Mine) ||
enemy.GetType() == typeof(Rock))
{
//Player take damage
player.Health -= enemy.Health;
if(player.Health <= 0 && !(player.InvincibleTimer > 0))
killPlayer(player);
GameObjectManager.DestroyObject(collider.ID);
GameObjectManager.CreateExplosion2(collider.ID, 0.5f);
// Update the player's score
player.Score += enemy.Score;
}
else
{
//Destroy player. Not the enemy
//Commented out because enemies get stuck on you and keep insta-killing you
//if(!(player.InvincibleTimer > 0))
// killPlayer(player);
}
break;
case ObjectType.EnemyProjectile:
Projectile projectile = collider as Projectile;
// Damage player
if (player.InvincibleTimer <= 0)
{
player.Health -= projectile.Damage;
if(player.Health <= 0 && !(player.InvincibleTimer > 0))
killPlayer(player);
}
GameObjectManager.DestroyObject(collider.ID);
break;
case ObjectType.Boss:
//Destroy player. Not the enemy
if(!(player.InvincibleTimer > 0))
killPlayer(player);
break;
}
}
}
// Player Projectile collisions
else if (objectA.ObjectType == ObjectType.PlayerProjectile || objectB.ObjectType == ObjectType.PlayerProjectile)
{
Projectile playerProjectile = ((objectA.ObjectType == ObjectType.PlayerProjectile) ? objectA : objectB) as Projectile;
GameObject collider = (objectA.ObjectType == ObjectType.PlayerProjectile) ? objectB : objectA;
// Process collisions
switch (collider.ObjectType)
{
case ObjectType.Enemy:
Enemy enemy = collider as Enemy;
//Enemy take damage
enemy.Health -= playerProjectile.Damage;
// If health <= 0, kill enemy
if (enemy.Health <= 0)
{
GameObjectManager.DestroyObject(collider.ID);
GameObjectManager.CreateExplosion(collider.ID);
GameObjectManager.CreateExplosion2(collider.ID, 0.5f);
Player.Kills++;
Player.Score += enemy.Score;
if(enemy is BrainBoss)
LevelManager.Ending = true;
}
// Destroy projectile
// Note, if there are special things for the bullet, add them here
GameObjectManager.DestroyObject(playerProjectile.ID);
break;
case ObjectType.Boss:
Boss boss = collider as Boss;
// Boss take damage
boss.Health -= playerProjectile.Damage;
// If health <= 0, kill boss
if (boss.Health <= 0)
{
if (boss is Blimp) boss.Update(0);
GameObjectManager.DestroyObject(collider.ID);
GameObjectManager.CreateExplosion(collider.ID);
GameObjectManager.CreateExplosion2(collider.ID, 1.5f);
Player.Kills++;
Player.Score += boss.Score;
LevelManager.Ending = true;
}
// Destroy projectile
// Note, if there are special things for the bullet, add them here
GameObjectManager.DestroyObject(playerProjectile.ID);
break;
}
}
}
}