private void CheckCollision(int objectCount) { for (int n = 0; n < objectCount; n++) { for (int m = n + 1; m < objectCount; m++) { GameObjectVertical obj1 = gameObjects[n]; GameObjectVertical obj2 = gameObjects[m]; if (MathFunctions.IsOneOfType <AreaDamage>(obj1, obj2)) { PerformAreaDamage(obj1, obj2); } else if (MathFunctions.IsOneOfType <AreaShieldCollision>(obj1.AreaCollision, obj2.AreaCollision) && MathFunctions.IsOneOfType <PlayerBullet>(obj1, obj2)) { PerformShieldAreaCollision(obj1, obj2); } if (obj1.CollisionBounding.Intersects(obj2.CollisionBounding)) { CollisionHandlingVerticalShooter.GameObjectsCollision(obj1, obj2); } } } }
private void PerformAreaDamage(GameObjectVertical obj1, GameObjectVertical obj2) { if (obj1 is AreaDamage && obj2 is AreaDamage) { return; } if (obj1 is AreaDamage) { if (((AreaDamage)(obj1)).IsOverlapping((AnimatedGameObject)obj2)) { CollisionHandlingVerticalShooter.GameObjectsCollision(obj1, obj2); } } else { if (((AreaDamage)(obj2)).IsOverlapping((AnimatedGameObject)obj1)) { CollisionHandlingVerticalShooter.GameObjectsCollision(obj2, obj1); } } }
private Boolean PerformShieldAreaCollision(GameObjectVertical obj1, GameObjectVertical obj2) { if (obj1.HasAreaCollision() && obj2.HasAreaCollision()) { return(false); } if (obj1.HasAreaCollision()) { if (((EnemyShip)obj1).ShieldCanTakeHit(obj2.Damage)) { if (((AreaShieldCollision)(obj1.AreaCollision)).IsOverlapping((PlayerBullet)obj2)) { CollisionHandlingVerticalShooter.GameObjectsCollision(obj1.AreaCollision, obj2); } } else { return(true); } } else { if (((EnemyShip)obj2).ShieldCanTakeHit(obj1.Damage)) { if (((AreaShieldCollision)(obj2.AreaCollision)).IsOverlapping((PlayerBullet)obj1)) { CollisionHandlingVerticalShooter.GameObjectsCollision(obj2.AreaCollision, obj1); } } else { return(true); } } return(false); }