private void DetectCollisions() { var bulletCollisionDetector = new AABBCollisionDetector <BulletSprite, BaseGameObject>(_bulletList); var missileCollisionDetector = new AABBCollisionDetector <MissileSprite, BaseGameObject>(_missileList); var playerCollisionDetector = new AABBCollisionDetector <ChopperSprite, PlayerSprite>(_enemyList); var turretBulletCollisionDetector = new SegmentAABBCollisionDetector <PlayerSprite>(_playerSprite); bulletCollisionDetector.DetectCollisions(_enemyList, (bullet, chopper) => { var hitEvent = new GameplayEvents.ObjectHitBy(bullet); chopper.OnNotify(hitEvent); _soundManager.OnNotify(hitEvent); bullet.Destroy(); }); missileCollisionDetector.DetectCollisions(_enemyList, (missile, chopper) => { var hitEvent = new GameplayEvents.ObjectHitBy(missile); chopper.OnNotify(hitEvent); _soundManager.OnNotify(hitEvent); missile.Destroy(); }); bulletCollisionDetector.DetectCollisions(_turretList, (bullet, turret) => { var hitEvent = new GameplayEvents.ObjectHitBy(bullet); turret.OnNotify(hitEvent); _soundManager.OnNotify(hitEvent); bullet.Destroy(); }); missileCollisionDetector.DetectCollisions(_turretList, (missile, turret) => { var hitEvent = new GameplayEvents.ObjectHitBy(missile); turret.OnNotify(hitEvent); _soundManager.OnNotify(hitEvent); missile.Destroy(); }); if (!_playerDead) { var segments = new List <Segment>(); foreach (var bullet in _turretBulletList) { segments.Add(bullet.CollisionSegment); } turretBulletCollisionDetector.DetectCollisions(segments, _ => { KillPlayer(); }); playerCollisionDetector.DetectCollisions(_playerSprite, (chopper, player) => { KillPlayer(); }); } }
private void HandleCollision(BaseGameObject hitBy, BaseGameObject hitObject) { // only allow hitting objects if the projectile is still on the screen. Otherwise we can // destroy turrets before they show up if (hitBy is IGameObjectWithDamage && hitBy.Position.Y >= 0) { var projectile = (IGameObjectWithDamage)hitBy; var hitEvent = new GameplayEvents.ObjectHitBy(projectile); hitObject.OnNotify(hitEvent); _soundManager.OnNotify(hitEvent); } }