1 using OpenBveApi.Trains; 2 using SoundManager; 3 4 namespace TrainManager.SafetySystems 5 { 6 public class PassAlarm 7 { 8 /// <summary>Holds the reference to the base train's driver car</summary> 9 private readonly AbstractCar baseCar; 10 /// <summary>The type of pass alarm</summary> 11 private readonly PassAlarmType Type; 12 /// <summary>The sound played when this alarm is triggered</summary> 13 public CarSound Sound; 14 /// <summary>Whether the pass alarm light is currently lit</summary> 15 public bool Lit; 16 17 /// <summary>Creates a new PassAlarm</summary> 18 /// <param name="type">The type of PassAlarm</param> 19 /// <param name="Car">A reference to the base car</param> PassAlarm(PassAlarmType type, AbstractCar Car)20 public PassAlarm(PassAlarmType type, AbstractCar Car) 21 { 22 this.baseCar = Car; 23 this.Type = type; 24 this.Sound = new CarSound(); 25 this.Lit = false; 26 } 27 28 /// <summary>Triggers the pass alarm</summary> Trigger()29 public void Trigger() 30 { 31 Lit = true; 32 if (TrainManagerBase.currentHost.SoundIsPlaying(Sound.Source)) 33 { 34 return; 35 } 36 switch (Type) 37 { 38 case PassAlarmType.Single: 39 Sound.Play(baseCar, false); 40 break; 41 case PassAlarmType.Loop: 42 Sound.Play(baseCar, true); 43 break; 44 } 45 } 46 /// <summary>Halts the pass alarm</summary> Halt()47 public void Halt() 48 { 49 Lit = false; 50 if (Sound != null) 51 { 52 Sound.Stop(); 53 } 54 } 55 } 56 /// <summary>Defines the differing types of station pass alarm a train may be fitted with</summary> 57 public enum PassAlarmType 58 { 59 /// <summary>No pass alarm</summary> 60 None = 0, 61 /// <summary>The alarm sounds once</summary> 62 Single = 1, 63 /// <summary>The alarm loops until cancelled</summary> 64 Loop = 2 65 } 66 } 67