@@ -302,12 +302,21 @@ public enum Type
302
302
{
303
303
DEFAULT
304
304
}
305
+ // index of visibility flag vector
306
+ public enum VisibleFrom
307
+ {
308
+ Outside ,
309
+ Cab2D ,
310
+ Cab3D
311
+ }
305
312
public Type SubType ;
306
313
public float XOffset = 0 ;
307
314
public float YOffset = 0 ;
308
315
public float ZOffset = 0 ;
309
316
public float FreightWeight = 0 ;
310
317
public bool Flipped = false ;
318
+ public bool Cab3DFreightAnim = false ;
319
+ public bool [ ] Visibility = { true , false , false } ;
311
320
312
321
// additions to manage consequences of variable weight on friction and brake forces
313
322
public float FullStaticORTSDavis_A = - 9999 ;
@@ -324,34 +333,55 @@ public FreightAnimationStatic(STFReader stf)
324
333
stf . MustMatch ( "(" ) ;
325
334
stf . ParseBlock ( new STFReader . TokenProcessor [ ] {
326
335
new STFReader . TokenProcessor ( "subtype" , ( ) =>
336
+ {
337
+ var typeString = stf . ReadStringBlock ( null ) ;
338
+ switch ( typeString )
339
+ {
340
+ default :
341
+ SubType = FreightAnimationStatic . Type . DEFAULT ;
342
+ break ;
343
+ }
344
+ } ) ,
345
+ new STFReader . TokenProcessor ( "shape" , ( ) => { ShapeFileName = stf . ReadStringBlock ( null ) ; } ) ,
346
+ new STFReader . TokenProcessor ( "freightweight" , ( ) => { FreightWeight = stf . ReadFloatBlock ( STFReader . UNITS . Mass , 0 ) ; } ) ,
347
+ new STFReader . TokenProcessor ( "offset" , ( ) => {
348
+ stf . MustMatch ( "(" ) ;
349
+ XOffset = stf . ReadFloat ( STFReader . UNITS . Distance , 0 ) ;
350
+ YOffset = stf . ReadFloat ( STFReader . UNITS . Distance , 0 ) ;
351
+ ZOffset = stf . ReadFloat ( STFReader . UNITS . Distance , 0 ) ;
352
+ stf . MustMatch ( ")" ) ;
353
+ } ) ,
354
+ new STFReader . TokenProcessor ( "flip" , ( ) => { Flipped = stf . ReadBoolBlock ( true ) ; } ) ,
355
+ new STFReader . TokenProcessor ( "visibility" , ( ) => {
356
+ for ( int index = 0 ; index < 3 ; index ++ )
357
+ Visibility [ index ] = false ;
358
+ foreach ( var visibilityPlace in stf . ReadStringBlock ( "" ) . ToLower ( ) . Replace ( " " , "" ) . Split ( ',' ) )
327
359
{
328
- var typeString = stf . ReadStringBlock ( null ) ;
329
- switch ( typeString )
330
- {
360
+ switch ( visibilityPlace )
361
+ {
362
+ case "outside" :
363
+ Visibility [ ( int ) VisibleFrom . Outside ] = true ;
364
+ break ;
365
+ case "cab2d" :
366
+ Visibility [ ( int ) VisibleFrom . Cab2D ] = true ;
367
+ break ;
368
+ case "cab3d" :
369
+ Visibility [ ( int ) VisibleFrom . Cab3D ] = true ;
370
+ break ;
331
371
default :
332
- SubType = FreightAnimationStatic . Type . DEFAULT ;
333
372
break ;
334
- }
335
- } ) ,
336
- new STFReader . TokenProcessor ( "shape" , ( ) => { ShapeFileName = stf . ReadStringBlock ( null ) ; } ) ,
337
- new STFReader . TokenProcessor ( "freightweight" , ( ) => { FreightWeight = stf . ReadFloatBlock ( STFReader . UNITS . Mass , 0 ) ; } ) ,
338
- new STFReader . TokenProcessor ( "offset" , ( ) => {
339
- stf . MustMatch ( "(" ) ;
340
- XOffset = stf . ReadFloat ( STFReader . UNITS . Distance , 0 ) ;
341
- YOffset = stf . ReadFloat ( STFReader . UNITS . Distance , 0 ) ;
342
- ZOffset = stf . ReadFloat ( STFReader . UNITS . Distance , 0 ) ;
343
- stf . MustMatch ( ")" ) ;
344
- } ) ,
345
- new STFReader . TokenProcessor ( "flip" , ( ) => { Flipped = stf . ReadBoolBlock ( true ) ; } ) ,
346
- // additions to manage consequences of variable weight on friction and brake forces
347
- new STFReader . TokenProcessor ( "fullortsdavis_a" , ( ) => { FullStaticORTSDavis_A = stf . ReadFloatBlock ( STFReader . UNITS . Force , - 1 ) ; } ) ,
348
- new STFReader . TokenProcessor ( "fullortsdavis_b" , ( ) => { FullStaticORTSDavis_B = stf . ReadFloatBlock ( STFReader . UNITS . Resistance , - 1 ) ; } ) ,
349
- new STFReader . TokenProcessor ( "fullortsdavis_c" , ( ) => { FullStaticORTSDavis_C = stf . ReadFloatBlock ( STFReader . UNITS . ResistanceDavisC , - 1 ) ; } ) ,
350
- new STFReader . TokenProcessor ( "fullortswagonfrontalarea" , ( ) => { FullStaticORTSWagonFrontalAreaM2 = stf . ReadFloatBlock ( STFReader . UNITS . AreaDefaultFT2 , - 1 ) ; } ) ,
351
- new STFReader . TokenProcessor ( "fullortsdavisdragconstant" , ( ) => { FullStaticORTSDavisDragConstant = stf . ReadFloatBlock ( STFReader . UNITS . Any , - 1 ) ; } ) ,
352
- new STFReader . TokenProcessor ( "fullmaxbrakeforce" , ( ) => { FullStaticMaxBrakeForceN = stf . ReadFloatBlock ( STFReader . UNITS . Force , - 1 ) ; } ) ,
353
- new STFReader . TokenProcessor ( "fullmaxhandbrakeforce" , ( ) => { FullStaticMaxHandbrakeForceN = stf . ReadFloatBlock ( STFReader . UNITS . Force , - 1 ) ; } ) ,
354
- new STFReader . TokenProcessor ( "fullcentreofgravity_y" , ( ) => { FullStaticCentreOfGravityM_Y = stf . ReadFloatBlock ( STFReader . UNITS . Distance , - 1 ) ; } )
373
+ }
374
+ }
375
+ } ) ,
376
+ // additions to manage consequences of variable weight on friction and brake forces
377
+ new STFReader . TokenProcessor ( "fullortsdavis_a" , ( ) => { FullStaticORTSDavis_A = stf . ReadFloatBlock ( STFReader . UNITS . Force , - 1 ) ; } ) ,
378
+ new STFReader . TokenProcessor ( "fullortsdavis_b" , ( ) => { FullStaticORTSDavis_B = stf . ReadFloatBlock ( STFReader . UNITS . Resistance , - 1 ) ; } ) ,
379
+ new STFReader . TokenProcessor ( "fullortsdavis_c" , ( ) => { FullStaticORTSDavis_C = stf . ReadFloatBlock ( STFReader . UNITS . ResistanceDavisC , - 1 ) ; } ) ,
380
+ new STFReader . TokenProcessor ( "fullortswagonfrontalarea" , ( ) => { FullStaticORTSWagonFrontalAreaM2 = stf . ReadFloatBlock ( STFReader . UNITS . AreaDefaultFT2 , - 1 ) ; } ) ,
381
+ new STFReader . TokenProcessor ( "fullortsdavisdragconstant" , ( ) => { FullStaticORTSDavisDragConstant = stf . ReadFloatBlock ( STFReader . UNITS . Any , - 1 ) ; } ) ,
382
+ new STFReader . TokenProcessor ( "fullmaxbrakeforce" , ( ) => { FullStaticMaxBrakeForceN = stf . ReadFloatBlock ( STFReader . UNITS . Force , - 1 ) ; } ) ,
383
+ new STFReader . TokenProcessor ( "fullmaxhandbrakeforce" , ( ) => { FullStaticMaxHandbrakeForceN = stf . ReadFloatBlock ( STFReader . UNITS . Force , - 1 ) ; } ) ,
384
+ new STFReader . TokenProcessor ( "fullcentreofgravity_y" , ( ) => { FullStaticCentreOfGravityM_Y = stf . ReadFloatBlock ( STFReader . UNITS . Distance , - 1 ) ; } )
355
385
} ) ;
356
386
}
357
387
@@ -364,6 +394,8 @@ public FreightAnimationStatic(FreightAnimationStatic freightAnimStatic)
364
394
YOffset = freightAnimStatic . YOffset ;
365
395
ZOffset = freightAnimStatic . ZOffset ;
366
396
Flipped = freightAnimStatic . Flipped ;
397
+ for ( int index = 0 ; index < 3 ; index ++ )
398
+ Visibility [ index ] = freightAnimStatic . Visibility [ index ] ;
367
399
FreightWeight = freightAnimStatic . FreightWeight ;
368
400
369
401
// additions to manage consequences of variable weight on friction and brake forces
0 commit comments