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