ScrollingShooter.ScrollingShooterGame.ProcessCollisions C# (CSharp) Method

ProcessCollisions() private method

Helper method for processing gameobject collisions
private ProcessCollisions ( ) : void
return void
        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;
                    }
                }
            }
        }