@@ -193,12 +193,12 @@ public static string GetText(Content content)
193193 details . AppendFormat ( "Length:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatShortDistanceDisplay ( data . LengthM , IsMetric ) ) ;
194194 details . AppendFormat ( "Power:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatPower ( data . MaxPowerW , IsMetric , IsImperialBHP , IsImperialBTUpS ) ) ;
195195 details . AppendFormat ( "MaxTE:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatForce ( data . MaxTractiveForceN , IsMetric ) ) ;
196- if ( ! IsMetric && ! IsUK ) details . AppendFormat ( "HPT:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatHPT ( data . MaxPowerW , data . MassKG ) ) ;
197- if ( ! IsMetric && ! IsUK ) details . AppendFormat ( "TPOB:\t {1}{0}" , Environment . NewLine , FormatStrings . FormatTPOB ( data . MassKG , data . NumOperativeBrakes ) ) ;
196+ if ( ! IsMetric && ! IsUK ) details . AppendFormat ( "HPT:\t {1}{0}" , Environment . NewLine , FormatHPT ( data . MaxPowerW , data . MassKG ) ) ;
197+ if ( ! IsMetric && ! IsUK ) details . AppendFormat ( "TPOB:\t {1}{0}" , Environment . NewLine , FormatTPOB ( data . MassKG , data . NumOperativeBrakes ) ) ;
198198 details . AppendLine ( ) ;
199199 details . AppendFormat ( "Car ID:\t Direction:\t Weight:\t Name:\t {0}" , Environment . NewLine ) ;
200200 foreach ( var car in data . Cars )
201- details . AppendFormat ( "{1}\t {2}\t {3}\t \u0001 {4}\u0002 Car\u0001 {0}" , Environment . NewLine , car . ID , car . Direction , car . IsEngine ? "Engine" : FormatStrings . FormatMassBar ( car . MassKG ) , car . Name ) ;
201+ 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 ) ;
202202 details . AppendFormat ( "{0}" , Environment . NewLine ) ;
203203 }
204204 else if ( content . Type == ContentType . Car )
@@ -243,5 +243,46 @@ static string FormatDateTime(DateTime dateTime)
243243 {
244244 return String . Format ( "{0} {1}" , dateTime . Day - 1 , dateTime . ToLongTimeString ( ) ) ;
245245 }
246+
247+ /// <summary>
248+ /// Create a simple bar graph (string of asterisk) for the car mass.
249+ /// </summary>
250+ /// <param name="massKg"></param>
251+ /// <returns>String of asterisk representing the mass.</returns>
252+ static string FormatMassBar ( float massKg )
253+ {
254+ string massBar ;
255+ var range = ( int ) Math . Ceiling ( massKg / 20000 ) ;
256+ if ( massKg < 1.0 ) { massBar = "?" ; }
257+ else if ( range > 8 ) { massBar = new string ( '*' , 8 ) + '>' ; }
258+ else { massBar = new string ( '*' , range ) ; }
259+ return massBar ;
260+ }
261+
262+ /// <summary>
263+ /// Calculate and format horsepower per ton for consist, rounded to one decimal.
264+ /// </summary>
265+ /// <param name="consistPowerW"></param>
266+ /// <param name="consistMassKG"></param>
267+ /// <returns>horsepower-per-ton formated to one decimal.</returns>
268+ //TODO: implement UK and metric version
269+ static string FormatHPT ( float consistPowerW , float consistMassKG )
270+ {
271+ var hpt = consistMassKG > 0 ? W . ToHp ( consistPowerW ) / Kg . ToTUS ( consistMassKG ) : 0 ;
272+ return string . Format ( "{0:0.0}" , hpt ) ;
273+ }
274+
275+ /// <summary>
276+ /// Calculate and format tons per operative brake for consist, rounded to an integer.
277+ /// </summary>
278+ /// <param name="consistMassKG"></param>
279+ /// <param name="consistNumOpBrakes"></param>
280+ /// <returns>tons-per-operative-brake formated to an integer.</returns>
281+ //TODO: implement UK and metric version
282+ static string FormatTPOB ( float consistMassKG , float consistNumOpBrakes )
283+ {
284+ var tpob = consistNumOpBrakes > 0 ? Kg . ToTUS ( consistMassKG ) / consistNumOpBrakes : 0 ;
285+ return string . Format ( "{0:0}" , tpob ) ;
286+ }
246287 }
247288}
0 commit comments