1 using System.Runtime.Serialization;
2 using OpenBveApi.Routes;
3 
4 namespace OpenBveApi.Runtime
5 {
6 	/// <summary>Represents the current state of the train.</summary>
7 	[DataContract]
8 	public class VehicleState
9 	{
10 		/// <summary>The location of the front of the train, in meters.</summary>
11 		[DataMember]
12 		private readonly double MyLocation;
13 
14 		/// <summary>The speed of the train.</summary>
15 		[DataMember]
16 		private readonly Speed MySpeed;
17 
18 		/// <summary>The pressure in the brake cylinder, in pascal.</summary>
19 		[DataMember]
20 		private readonly double MyBcPressure;
21 
22 		/// <summary>The pressure in the main reservoir, in pascal.</summary>
23 		[DataMember]
24 		private readonly double MyMrPressure;
25 
26 		/// <summary>The pressure in the emergency reservoir, in pascal.</summary>
27 		[DataMember]
28 		private readonly double MyErPressure;
29 
30 		/// <summary>The pressure in the brake pipe, in pascal.</summary>
31 		[DataMember]
32 		private readonly double MyBpPressure;
33 
34 		/// <summary>The pressure in the straight air pipe, in pascal.</summary>
35 		private readonly double MySapPressure;
36 
37 		[DataMember]
38 		private readonly double MyRadius;
39 		[DataMember]
40 		private readonly double MyCant;
41 		[DataMember]
42 		private readonly double MyPitch;
43 		[DataMember]
44 		private readonly int MyRainIntensity;
45 		[DataMember]
46 		private readonly double MyAdhesion;
47 
48 		/// <summary>Gets the location of the front of the train, in meters.</summary>
49 		public double Location
50 		{
51 			get
52 			{
53 				return this.MyLocation;
54 			}
55 		}
56 
57 		/// <summary>Gets the speed of the train.</summary>
58 		public Speed Speed
59 		{
60 			get
61 			{
62 				return this.MySpeed;
63 			}
64 		}
65 
66 		/// <summary>Gets the pressure in the brake cylinder, in pascal.</summary>
67 		public double BcPressure
68 		{
69 			get
70 			{
71 				return this.MyBcPressure;
72 			}
73 		}
74 
75 		/// <summary>Gets the pressure in the main reservoir, in pascal.</summary>
76 		public double MrPressure
77 		{
78 			get
79 			{
80 				return this.MyMrPressure;
81 			}
82 		}
83 
84 		/// <summary>Gets the pressure in the emergency reservoir, in pascal.</summary>
85 		public double ErPressure
86 		{
87 			get
88 			{
89 				return this.MyErPressure;
90 			}
91 		}
92 
93 		/// <summary>Gets the pressure in the brake pipe, in pascal.</summary>
94 		public double BpPressure
95 		{
96 			get
97 			{
98 				return this.MyBpPressure;
99 			}
100 		}
101 
102 		/// <summary>Gets the pressure in the straight air pipe, in pascal.</summary>
103 		public double SapPressure
104 		{
105 			get
106 			{
107 				return this.MySapPressure;
108 			}
109 		}
110 
111 		/// <summary>Gets the curve radius at the front axle of the driver's car in m.</summary>
112 		public double Radius
113 		{
114 			get
115 			{
116 				return this.MyRadius;
117 			}
118 		}
119 
120 		/// <summary>Gets the curve cant at the front axle of the driver's car in mm.</summary>
121 		public double Cant
122 		{
123 			get
124 			{
125 				return this.MyCant;
126 			}
127 		}
128 
129 		/// <summary>Gets the track pitch value at the front axle of the driver's car.</summary>
130 		public double Pitch
131 		{
132 			get
133 			{
134 				return this.MyPitch;
135 			}
136 		}
137 
138 		/// <summary>Gets the track pitch value at the front axle of the driver's car.</summary>
139 		public double RainIntensity
140 		{
141 			get
142 			{
143 				return this.MyRainIntensity;
144 			}
145 		}
146 
147 		/// <summary>Gets the track pitch value at the front axle of the driver's car.</summary>
148 		public double Adhesion
149 		{
150 			get
151 			{
152 				return this.MyAdhesion;
153 			}
154 		}
155 
156 		/// <summary>Creates a new instance of this class.</summary>
157 		/// <param name="location">The location of the front of the train, in meters.</param>
158 		/// <param name="speed">The speed of the train.</param>
159 		/// <param name="bcPressure">The pressure in the brake cylinder, in pascal.</param>
160 		/// <param name="mrPressure">The pressure in the main reservoir, in pascal.</param>
161 		/// <param name="erPressure">The pressure in the emergency reservoir, in pascal.</param>
162 		/// <param name="bpPressure">The pressure in the brake pipe, in pascal.</param>
163 		/// <param name="sapPressure">The pressure in the straight air pipe, in pascal.</param>
164 		/// <param name="Follower"></param>
165 		/// Three paramaters added at the far end
VehicleState(double location, Speed speed, double bcPressure, double mrPressure, double erPressure, double bpPressure, double sapPressure, TrackFollower Follower)166 		public VehicleState(double location, Speed speed, double bcPressure, double mrPressure, double erPressure, double bpPressure, double sapPressure, TrackFollower Follower)
167 		{
168 			this.MyRadius = Radius;
169 			this.MyCant = Cant;
170 			this.MyPitch = Pitch;
171 			this.MyLocation = location;
172 			this.MySpeed = speed;
173 			this.MyBcPressure = bcPressure;
174 			this.MyMrPressure = mrPressure;
175 			this.MyErPressure = erPressure;
176 			this.MyBpPressure = bpPressure;
177 			this.MySapPressure = sapPressure;
178 			this.MyRadius = Follower.CurveRadius;
179 			this.MyCant = Follower.CurveCant;
180 			this.MyPitch = Follower.Pitch;
181 			this.MyRainIntensity = Follower.RainIntensity;
182 			this.MyAdhesion = Follower.AdhesionMultiplier;
183 		}
184 
185 		/// <summary>Provides the overload for plugins built against versions of the OpenBVE API below 1.7.3.0.</summary>
186 		/// <param name="location">The location of the front of the train, in meters.</param>
187 		/// <param name="speed">The speed of the train.</param>
188 		/// <param name="bcPressure">The pressure in the brake cylinder, in pascal.</param>
189 		/// <param name="mrPressure">The pressure in the main reservoir, in pascal.</param>
190 		/// <param name="erPressure">The pressure in the emergency reservoir, in pascal.</param>
191 		/// <param name="bpPressure">The pressure in the brake pipe, in pascal.</param>
192 		/// <param name="sapPressure">The pressure in the straight air pipe, in pascal.</param>
193 		/// <param name="Radius">The curve radius at the front of the train, in meters.</param>
194 		/// <param name="Cant">The cant value for this curve radius.</param>
195 		/// <param name="Pitch">The pitch value at the front of the train.</param>
196 		/// Three paramaters added at the far end
VehicleState(double location, Speed speed, double bcPressure, double mrPressure, double erPressure, double bpPressure, double sapPressure, double Radius, double Cant, double Pitch)197 		public VehicleState(double location, Speed speed, double bcPressure, double mrPressure, double erPressure, double bpPressure, double sapPressure, double Radius, double Cant, double Pitch)
198 		{
199 			this.MyRadius = Radius;
200 			this.MyCant = Cant;
201 			this.MyPitch = Pitch;
202 			this.MyLocation = location;
203 			this.MySpeed = speed;
204 			this.MyBcPressure = bcPressure;
205 			this.MyMrPressure = mrPressure;
206 			this.MyErPressure = erPressure;
207 			this.MyBpPressure = bpPressure;
208 			this.MySapPressure = sapPressure;
209 			this.MyRadius = Radius;
210 			this.MyCant = Cant;
211 			this.MyPitch = Pitch;
212 		}
213 
214 		/// <summary>Provides the overload for plugins built against versions of the OpenBVE API below 1.4.4.0.</summary>
215 		/// <param name="location">The location of the front of the train, in meters.</param>
216 		/// <param name="speed">The speed of the train.</param>
217 		/// <param name="bcPressure">The pressure in the brake cylinder, in pascal.</param>
218 		/// <param name="mrPressure">The pressure in the main reservoir, in pascal.</param>
219 		/// <param name="erPressure">The pressure in the emergency reservoir, in pascal.</param>
220 		/// <param name="bpPressure">The pressure in the brake pipe, in pascal.</param>
221 		/// <param name="sapPressure">The pressure in the straight air pipe, in pascal.</param>
222 		/// Three paramaters added at the far end
VehicleState(double location, Speed speed, double bcPressure, double mrPressure, double erPressure, double bpPressure, double sapPressure)223 		public VehicleState(double location, Speed speed, double bcPressure, double mrPressure, double erPressure, double bpPressure, double sapPressure)
224 			: this(location, speed, bcPressure, mrPressure, erPressure, bpPressure, sapPressure, 0.0, 0.0, 0.0)
225 		{
226 
227 		}
228 
229 	}
230 }
231