public static void GameObjectsCollision(GameObjectVertical gameObject1, GameObjectVertical gameObject2)
        {
            if (MathFunctions.AreObjectsOfTypes <PlayerBullet, EnemyShip>(gameObject1, gameObject2))
            {
                if (gameObject1 is PlayerBullet)
                {
                    CollideBulletEnemy((PlayerBullet)gameObject1, (EnemyShip)gameObject2);
                }
                else
                {
                    CollideBulletEnemy((PlayerBullet)gameObject2, (EnemyShip)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <EnemyBullet, AlliedShip>(gameObject1, gameObject2))
            {
                if (gameObject1 is EnemyBullet)
                {
                    CollideBulletAlly((EnemyBullet)gameObject1, (AlliedShip)gameObject2);
                }
                else
                {
                    CollideBulletAlly((EnemyBullet)gameObject2, (AlliedShip)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <PlayerVerticalShooter, EnemyShip>(gameObject1, gameObject2))
            {
                if (gameObject1 is PlayerVerticalShooter)
                {
                    CollidePlayerEnemy((PlayerVerticalShooter)gameObject1, (EnemyShip)gameObject2);
                }
                else
                {
                    CollidePlayerEnemy((PlayerVerticalShooter)gameObject2, (EnemyShip)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <PlayerVerticalShooter, EnemyBullet>(gameObject1, gameObject2))
            {
                if (gameObject1 is PlayerVerticalShooter)
                {
                    CollidePlayerBullet((PlayerVerticalShooter)gameObject1, (EnemyBullet)gameObject2);
                }
                else
                {
                    CollidePlayerBullet((PlayerVerticalShooter)gameObject2, (EnemyBullet)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <EnemyShip, AlliedShip>(gameObject1, gameObject2))
            {
                if (gameObject1 is EnemyShip)
                {
                    CollideEnemyAlly((EnemyShip)gameObject1, (AlliedShip)gameObject2);
                }
                else
                {
                    CollideEnemyAlly((EnemyShip)gameObject2, (AlliedShip)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <AreaDamage, PlayerVerticalShooter>(gameObject1, gameObject2))
            {
                if (gameObject1 is AreaDamage)
                {
                    CollideAreaDamage((AreaDamage)gameObject1, (PlayerVerticalShooter)gameObject2);
                }
                else
                {
                    CollideAreaDamage((AreaDamage)gameObject2, (PlayerVerticalShooter)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <AreaDamage, AlliedShip>(gameObject1, gameObject2))
            {
                if (gameObject1 is AreaDamage)
                {
                    CollideAreaDamage((AreaDamage)gameObject1, (AlliedShip)gameObject2);
                }
                else
                {
                    CollideAreaDamage((AreaDamage)gameObject2, (AlliedShip)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <AreaDamage, EnemyShip>(gameObject1, gameObject2))
            {
                if (gameObject1 is AreaDamage)
                {
                    CollideAreaDamage((AreaDamage)gameObject1, (EnemyShip)gameObject2);
                }
                else
                {
                    CollideAreaDamage((AreaDamage)gameObject2, (EnemyShip)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <AreaShieldCollision, PlayerBullet>(gameObject1, gameObject2))
            {
                if (gameObject1 is AreaShieldCollision)
                {
                    CollideAreaCollision((AreaShieldCollision)gameObject1, (PlayerBullet)gameObject2);
                }
                else
                {
                    CollideAreaCollision((AreaShieldCollision)gameObject2, (PlayerBullet)gameObject1);
                }
            }

            else if (MathFunctions.AreObjectsOfTypes <Bullet, Bullet>(gameObject1, gameObject2))
            {
                CollideBulletBullet((Bullet)gameObject1, (Bullet)gameObject2);
            }

            // Neutral - friend/enemy/bullet/enemybullet
            // Is this ever used?

            else if ((gameObject1 is AlliedShip || gameObject1 is EnemyShip ||
                      gameObject1 is PlayerBullet || gameObject1 is EnemyBullet) &&
                     gameObject2.ObjectClass == "neutral")
            {
                gameObject1.HP       -= gameObject2.Damage;
                gameObject2.HP       -= gameObject1.Damage;
                gameObject1.Direction = -1 * new Vector2(gameObject2.PositionX - gameObject1.PositionX, gameObject2.PositionY - gameObject1.PositionY);
                gameObject1.Direction = MathFunctions.ScaleDirection(gameObject1.Direction);

                gameObject1.DisableFollowObject = 500;

                if (gameObject1.HP <= 0)
                {
                    gameObject1.IsKilled = true;
                }

                if (gameObject2.HP <= 0)
                {
                    gameObject2.IsKilled = true;
                }
            }

            else if (gameObject1.ObjectClass == "neutral" &&
                     (gameObject2 is AlliedShip || gameObject2 is EnemyShip ||
                      gameObject2 is PlayerBullet || gameObject2 is EnemyBullet))
            {
                gameObject1.HP        -= gameObject2.Damage;
                gameObject2.HP        -= gameObject1.Damage;
                gameObject1.Direction *= -1;
                gameObject2.Direction *= -1;

                gameObject2.DisableFollowObject = 500;

                if (gameObject1.HP <= 0)
                {
                    gameObject1.IsKilled = true;
                }

                if (gameObject2.HP <= 0)
                {
                    gameObject2.IsKilled = true;
                }
            }
        }