2727using System . Runtime . Serialization . Formatters . Binary ;
2828using System . Text ;
2929using Path = ORTS . ContentManager . Models . Path ;
30+ using ORTS . Common ;
3031
3132namespace ORTS . ContentManager
3233{
3334 public static class ContentInfo
3435 {
36+ // will be set from ConntentManagerGUI constructor
37+ public static bool IsMetric = false ;
38+ public static bool IsUK = false ;
39+ public static bool IsImperialBHP = false ; // using default; seems only used for steam locos
40+ public static bool IsImperialBTUpS = false ; // using default; seems only be used for steam locos
41+
3542 public static string GetText ( Content content )
3643 {
3744 var details = new StringBuilder ( ) ;
@@ -179,16 +186,39 @@ public static string GetText(Content content)
179186 {
180187 var data = new Consist ( content ) ;
181188 details . AppendFormat ( "Name:\t {1}{0}" , Environment . NewLine , data . Name ) ;
182- details . AppendFormat ( "Car ID:\t Direction:\t Name:\t {0}" , Environment . NewLine ) ;
189+ details . AppendFormat ( "NumEngines:\t {1}{0}" , Environment . NewLine , data . NumEngines ) ;
190+ details . AppendFormat ( "NumCars:\t {1}{0}" , Environment . NewLine , data . NumCars ) ;
191+ details . AppendFormat ( "MaxSpeed:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatSpeedLimit ( data . MaxSpeedMps , IsMetric ) ) ;
192+ details . AppendFormat ( "Weight:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatLargeMass ( data . MassKG , IsMetric , IsUK ) ) ;
193+ details . AppendFormat ( "Length:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatShortDistanceDisplay ( data . LengthM , IsMetric ) ) ;
194+ details . AppendFormat ( "Power:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatPower ( data . MaxPowerW , IsMetric , IsImperialBHP , IsImperialBTUpS ) ) ;
195+ details . AppendFormat ( "MaxTE:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatForce ( data . MaxTractiveForceN , IsMetric ) ) ;
196+ details . AppendFormat ( "MinCouplerStrength:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatForce ( data . MinCouplerStrengthN , IsMetric ) ) ;
197+ if ( ! IsMetric && ! IsUK ) { details . AppendFormat ( "HPT:\t {1}{0}" , Environment . NewLine , FormatHPT ( data . MaxPowerW , data . MassKG ) ) ; }
198+ if ( ! IsMetric && ! IsUK ) { details . AppendFormat ( "TPOB:\t {1}{0}" , Environment . NewLine , FormatTPOB ( data . MassKG , data . NumOperativeBrakes ) ) ; }
199+ details . AppendLine ( ) ;
200+ details . AppendFormat ( "Car ID:\t Direction:\t Weight:\t Name:\t {0}" , Environment . NewLine ) ;
183201 foreach ( var car in data . Cars )
184- details . AppendFormat ( "{1}\t {2}\t \ u0001 {3 }\u0002 Car\u0001 {0}" , Environment . NewLine , car . ID , car . Direction , car . Name ) ;
202+ details . AppendFormat ( "{1}\t {2}\t {3} \t \ u0001 {4 }\u0002 Car\u0001 {0}" , Environment . NewLine , car . ID , car . Direction , car . IsEngine ? "Engine" : FormatMassBar ( car . MassKG ) , car . Name ) ;
185203 details . AppendFormat ( "{0}" , Environment . NewLine ) ;
186204 }
187205 else if ( content . Type == ContentType . Car )
188206 {
189207 var data = new Car ( content ) ;
190208 details . AppendFormat ( "Type:\t {1}{0}" , Environment . NewLine , data . Type ) ;
209+ details . AppendFormat ( "SubType:\t {1}{0}" , Environment . NewLine , data . SubType ) ;
191210 details . AppendFormat ( "Name:\t {1}{0}" , Environment . NewLine , data . Name ) ;
211+ details . AppendFormat ( "Weight:\t {1} ({2}){0}" , Environment . NewLine , FormatStrings . FormatMass ( data . MassKG , IsMetric ) , FormatStrings . FormatLargeMass ( data . MassKG , IsMetric , IsUK ) ) ;
212+ details . AppendFormat ( "Length:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatShortDistanceDisplay ( data . LengthM , IsMetric ) ) ;
213+ if ( data . Type == CarType . Engine )
214+ {
215+ details . AppendFormat ( "MaxPowerW:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatPower ( data . MaxPowerW , IsMetric , IsImperialBHP , IsImperialBTUpS ) ) ;
216+ details . AppendFormat ( "MaxForce:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatForce ( data . MaxForceN , IsMetric ) ) ;
217+ details . AppendFormat ( "MaxSpeed:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatSpeedLimit ( data . MaxSpeedMps , IsMetric ) ) ;
218+ }
219+ details . AppendFormat ( "MaxBrakeF:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatForce ( data . MaxBarkeForceN , IsMetric ) ) ;
220+ details . AppendFormat ( "MinCouplerStrength:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatForce ( data . MinCouplerStrengthN , IsMetric ) ) ;
221+ details . AppendLine ( ) ;
192222 details . AppendFormat ( "Description:\t {0}{0}{1}{0}{0}" , Environment . NewLine , data . Description ) ;
193223 }
194224 else if ( content is ContentMSTSCab )
@@ -215,5 +245,46 @@ static string FormatDateTime(DateTime dateTime)
215245 {
216246 return String . Format ( "{0} {1}" , dateTime . Day - 1 , dateTime . ToLongTimeString ( ) ) ;
217247 }
248+
249+ /// <summary>
250+ /// Create a simple bar graph (string of asterisk) for the car mass.
251+ /// </summary>
252+ /// <param name="massKg"></param>
253+ /// <returns>String of asterisk representing the mass.</returns>
254+ static string FormatMassBar ( float massKg )
255+ {
256+ string massBar ;
257+ var range = ( int ) Math . Ceiling ( massKg / 20000 ) ;
258+ if ( massKg < 1.0 ) { massBar = "?" ; }
259+ else if ( range > 8 ) { massBar = new string ( '*' , 8 ) + '>' ; }
260+ else { massBar = new string ( '*' , range ) ; }
261+ return massBar ;
262+ }
263+
264+ /// <summary>
265+ /// Calculate and format horsepower per ton for consist, rounded to one decimal.
266+ /// </summary>
267+ /// <param name="consistPowerW"></param>
268+ /// <param name="consistMassKG"></param>
269+ /// <returns>horsepower-per-ton formated to one decimal.</returns>
270+ //TODO: implement UK and metric version
271+ static string FormatHPT ( float consistPowerW , float consistMassKG )
272+ {
273+ var hpt = consistMassKG > 0 ? W . ToHp ( consistPowerW ) / Kg . ToTUS ( consistMassKG ) : 0 ;
274+ return string . Format ( "{0:0.0}" , hpt ) ;
275+ }
276+
277+ /// <summary>
278+ /// Calculate and format tons per operative brake for consist, rounded to an integer.
279+ /// </summary>
280+ /// <param name="consistMassKG"></param>
281+ /// <param name="consistNumOpBrakes"></param>
282+ /// <returns>tons-per-operative-brake formated to an integer.</returns>
283+ //TODO: implement UK and metric version
284+ static string FormatTPOB ( float consistMassKG , float consistNumOpBrakes )
285+ {
286+ var tpob = consistNumOpBrakes > 0 ? Kg . ToTUS ( consistMassKG ) / consistNumOpBrakes : 0 ;
287+ return string . Format ( "{0:0}" , tpob ) ;
288+ }
218289 }
219290}
0 commit comments