private void Collide(Critter critter, Bomb bomb) { Sound.PlayBoom(); critter.Bombed(); Sprite spew = new StarFieldSprite(100, 5, 5, 10) { Position = bomb.Position }; AddSprite(spew); Sprite explosion = new ParticleFountainSprite(250, Color.DarkGray, Color.White, 1, 3, 20) { Position = bomb.Position }; AddSprite(explosion); critter.Mover = new NullMover(); System.Timers.Timer explosionTimer = new System.Timers.Timer { Interval = 250, AutoReset = false }; explosionTimer.Elapsed += (sender, e) => { explosion.Kill(); spew.Kill(); critter.StopAndSmoke(Color.Black, Color.Brown); }; explosionTimer.Start(); FindEmptyPlaceFor(bomb); }
// Something has crashed, burned out or blown up. Stop thinking, moving, or doing anything except // emit smoke for a while. internal void StopAndSmoke(Color startColor, Color endColor) { Mover = new NullMover(); Shutdown(); ParticleFountainSprite smoke = new ParticleFountainSprite(20, startColor, endColor, 1, 10, 10) { Position = Position }; Engine?.AddSprite(smoke); System.Timers.Timer smokeTimer = new System.Timers.Timer { Interval = 1000, AutoReset = true }; smokeTimer.Elapsed += (sender2, e2) => { if (smoke.EndDiameter >= 2) { smoke.EndDiameter -= 1; smoke.Radius -= 1; } else { smoke.Kill(); smokeTimer.Stop(); } }; smokeTimer.Start(); }