27
27
using System . Runtime . Serialization . Formatters . Binary ;
28
28
using System . Text ;
29
29
using Path = ORTS . ContentManager . Models . Path ;
30
+ using ORTS . Common ;
30
31
31
32
namespace ORTS . ContentManager
32
33
{
33
34
public static class ContentInfo
34
35
{
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
+
35
42
public static string GetText ( Content content )
36
43
{
37
44
var details = new StringBuilder ( ) ;
@@ -179,16 +186,39 @@ public static string GetText(Content content)
179
186
{
180
187
var data = new Consist ( content ) ;
181
188
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 ) ;
183
201
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 ) ;
185
203
details . AppendFormat ( "{0}" , Environment . NewLine ) ;
186
204
}
187
205
else if ( content . Type == ContentType . Car )
188
206
{
189
207
var data = new Car ( content ) ;
190
208
details . AppendFormat ( "Type:\t {1}{0}" , Environment . NewLine , data . Type ) ;
209
+ details . AppendFormat ( "SubType:\t {1}{0}" , Environment . NewLine , data . SubType ) ;
191
210
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 ( ) ;
192
222
details . AppendFormat ( "Description:\t {0}{0}{1}{0}{0}" , Environment . NewLine , data . Description ) ;
193
223
}
194
224
else if ( content is ContentMSTSCab )
@@ -215,5 +245,46 @@ static string FormatDateTime(DateTime dateTime)
215
245
{
216
246
return String . Format ( "{0} {1}" , dateTime . Day - 1 , dateTime . ToLongTimeString ( ) ) ;
217
247
}
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
+ }
218
289
}
219
290
}
0 commit comments