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