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; } } }