@@ -1615,7 +1615,13 @@ public CABViewControlTypes GetControlType()
1615
1615
/// <returns>Data value as fraction (from 0 to 1) of the range between Min and Max values</returns>
1616
1616
public float GetRangeFraction ( bool offsetFromZero = false )
1617
1617
{
1618
- var data = Locomotive . GetDataOf ( Control ) ;
1618
+ float data ;
1619
+
1620
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
1621
+ data = ( float ) Control . ValueIfDisabled ;
1622
+ else
1623
+ data = Locomotive . GetDataOf ( Control ) ;
1624
+
1619
1625
if ( data < Control . MinValue )
1620
1626
return 0 ;
1621
1627
if ( data > Control . MaxValue )
@@ -1635,9 +1641,7 @@ public CABViewControlStyles GetStyle()
1635
1641
[ CallOnThread ( "Updater" ) ]
1636
1642
public virtual void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
1637
1643
{
1638
- var noPower = ( Control . DisabledIfLowVoltagePowerSupplyOff && ! Locomotive . LocomotivePowerSupply . LowVoltagePowerSupplyOn )
1639
- || ( Control . DisabledIfCabPowerSupplyOff && ! Locomotive . LocomotivePowerSupply . CabPowerSupplyOn ) ;
1640
- if ( noPower )
1644
+ if ( ! IsPowered && Control . HideIfDisabled )
1641
1645
return ;
1642
1646
1643
1647
frame . AddPrimitive ( ControlView , this , RenderPrimitiveGroup . Cab , ref Matrix ) ;
@@ -1801,8 +1805,11 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
1801
1805
float percent , xpos , ypos , zeropos ;
1802
1806
1803
1807
percent = IsFire ? 1f : GetRangeFraction ( ) ;
1804
- // LoadMeterPositive = percent + Gauge.MinValue / (Gauge.MaxValue - Gauge.MinValue) >= 0;
1805
- Num = Locomotive . GetDataOf ( Control ) ;
1808
+
1809
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
1810
+ Num = ( float ) Control . ValueIfDisabled ;
1811
+ else
1812
+ Num = Locomotive . GetDataOf ( Control ) ;
1806
1813
1807
1814
if ( Gauge . Orientation == 0 ) // gauge horizontal
1808
1815
{
@@ -2049,7 +2056,12 @@ public override void Draw(GraphicsDevice graphicsDevice)
2049
2056
/// <returns>index of the Texture</returns>
2050
2057
public virtual int GetDrawIndex ( )
2051
2058
{
2052
- var data = Locomotive . GetDataOf ( Control ) ;
2059
+ float data ;
2060
+
2061
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
2062
+ data = ( float ) Control . ValueIfDisabled ;
2063
+ else
2064
+ data = Locomotive . GetDataOf ( Control ) ;
2053
2065
2054
2066
var index = OldFrameIndex ;
2055
2067
switch ( ControlDiscrete . ControlType )
@@ -2887,7 +2899,14 @@ public CabViewAnimationsRenderer(Viewer viewer, MSTSLocomotive locomotive, CVCAn
2887
2899
2888
2900
public override void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
2889
2901
{
2890
- var animate = Locomotive . GetDataOf ( Control ) != 0 ;
2902
+ float data ;
2903
+
2904
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
2905
+ data = ( float ) Control . ValueIfDisabled ;
2906
+ else
2907
+ data = Locomotive . GetDataOf ( Control ) ;
2908
+
2909
+ var animate = data != 0 ;
2891
2910
if ( animate )
2892
2911
AnimationOn = true ;
2893
2912
@@ -2965,7 +2984,11 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
2965
2984
{
2966
2985
var digital = Control as CVCDigital ;
2967
2986
2968
- Num = Locomotive . GetDataOf ( Control ) ;
2987
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
2988
+ Num = ( float ) Control . ValueIfDisabled ;
2989
+ else
2990
+ Num = Locomotive . GetDataOf ( Control ) ;
2991
+
2969
2992
if ( digital . MinValue < digital . MaxValue ) Num = MathHelper . Clamp ( Num , ( float ) digital . MinValue , ( float ) digital . MaxValue ) ;
2970
2993
if ( Math . Abs ( Num ) < digital . AccuracySwitch )
2971
2994
Format = Format2 ;
@@ -3046,7 +3069,12 @@ public string GetDigits(out Color DrawColor)
3046
3069
{
3047
3070
var digital = Control as CVCDigital ;
3048
3071
string displayedText = "" ;
3049
- Num = Locomotive . GetDataOf ( Control ) ;
3072
+
3073
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
3074
+ Num = ( float ) Control . ValueIfDisabled ;
3075
+ else
3076
+ Num = Locomotive . GetDataOf ( Control ) ;
3077
+
3050
3078
if ( Math . Abs ( Num ) < digital . AccuracySwitch )
3051
3079
Format = Format2 ;
3052
3080
else
@@ -3119,7 +3147,12 @@ public string GetDigits(out Color DrawColor)
3119
3147
{
3120
3148
var digital = Control as CVCDigital ;
3121
3149
string displayedText = "" ;
3122
- Num = Locomotive . GetDataOf ( Control ) ;
3150
+
3151
+ if ( ! IsPowered && Control . ValueIfDisabled != null )
3152
+ Num = ( float ) Control . ValueIfDisabled ;
3153
+ else
3154
+ Num = Locomotive . GetDataOf ( Control ) ;
3155
+
3123
3156
if ( digital . MinValue < digital . MaxValue ) Num = MathHelper . Clamp ( Num , ( float ) digital . MinValue , ( float ) digital . MaxValue ) ;
3124
3157
if ( Math . Abs ( Num ) < digital . AccuracySwitch )
3125
3158
Format = Format2 ;
@@ -3356,11 +3389,6 @@ public override void HandleUserInput(ElapsedTime elapsedTime)
3356
3389
/// </summary>
3357
3390
public override void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
3358
3391
{
3359
- var trainCarShape = LocoViewer . ThreeDimentionCabViewer . TrainCarShape ;
3360
- var animatedParts = LocoViewer . ThreeDimentionCabViewer . AnimateParts ;
3361
- var controlMap = LocoViewer . ThreeDimentionCabRenderer . ControlMap ;
3362
- var doShow = true ;
3363
- CabViewControlRenderer cabRenderer ;
3364
3392
foreach ( var p in AnimateParts )
3365
3393
{
3366
3394
if ( p . Value . Type >= CABViewControlTypes . EXTERNALWIPERS ) //for wipers, doors and mirrors
@@ -3397,32 +3425,31 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
3397
3425
}
3398
3426
else
3399
3427
{
3400
- doShow = true ;
3401
- cabRenderer = null ;
3402
- if ( LocoViewer . ThreeDimentionCabRenderer . ControlMap . TryGetValue ( p . Key , out cabRenderer ) )
3403
- {
3404
- if ( cabRenderer is CabViewDiscreteRenderer )
3428
+ var doShow = true ;
3429
+ if ( LocoViewer . ThreeDimentionCabRenderer . ControlMap . TryGetValue ( p . Key , out var cabRenderer ) )
3430
+ {
3431
+ if ( ! cabRenderer . IsPowered && cabRenderer . Control . HideIfDisabled )
3432
+ {
3433
+ doShow = false ;
3434
+ }
3435
+ else if ( cabRenderer is CabViewDiscreteRenderer )
3405
3436
{
3406
3437
var control = cabRenderer . Control ;
3407
3438
if ( control . Screens != null && control . Screens [ 0 ] != "all" )
3408
3439
{
3409
- doShow = false ;
3410
- foreach ( var screen in control . Screens )
3411
- {
3412
- if ( LocoViewer . ThreeDimentionCabRenderer . ActiveScreen [ control . Display ] == screen )
3413
- {
3414
- doShow = true ;
3415
- break ;
3416
- }
3417
- }
3440
+ doShow = control . Screens . Any ( screen =>
3441
+ LocoViewer . ThreeDimentionCabRenderer . ActiveScreen [ control . Display ] == screen ) ;
3418
3442
}
3419
3443
}
3420
3444
}
3445
+
3421
3446
foreach ( var matrixIndex in p . Value . MatrixIndexes )
3422
3447
MatrixVisible [ matrixIndex ] = doShow ;
3423
- p . Value . Update ( this . LocoViewer , elapsedTime ) ; //for all other intruments with animations
3448
+
3449
+ p . Value . Update ( LocoViewer , elapsedTime ) ; //for all other instruments with animations
3424
3450
}
3425
3451
}
3452
+
3426
3453
foreach ( var p in DigitParts3D )
3427
3454
{
3428
3455
var digital = p . Value . CVFR . Control ;
@@ -3440,6 +3467,7 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
3440
3467
}
3441
3468
p . Value . PrepareFrame ( frame , elapsedTime ) ;
3442
3469
}
3470
+
3443
3471
foreach ( var p in DPIDisplays3D )
3444
3472
{
3445
3473
var dpdisplay = p . Value . CVFR . Control ;
@@ -3457,6 +3485,7 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
3457
3485
}
3458
3486
p . Value . PrepareFrame ( frame , elapsedTime ) ;
3459
3487
}
3488
+
3460
3489
foreach ( var p in Gauges )
3461
3490
{
3462
3491
var gauge = p . Value . CVFR . Control ;
@@ -3763,7 +3792,7 @@ static float GetTextureCoordY(char c)
3763
3792
3764
3793
public void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
3765
3794
{
3766
- if ( ! CVFR . IsPowered )
3795
+ if ( ! CVFR . IsPowered && CVFR . Control . HideIfDisabled )
3767
3796
return ;
3768
3797
3769
3798
UpdateDigit ( ) ;
@@ -3982,7 +4011,7 @@ private void UpdateShapePrimitive(Material material)
3982
4011
3983
4012
public void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
3984
4013
{
3985
- if ( ! CVFR . IsPowered )
4014
+ if ( ! CVFR . IsPowered && CVFR . Control . HideIfDisabled )
3986
4015
return ;
3987
4016
3988
4017
UpdateDigit ( ) ;
@@ -4028,7 +4057,7 @@ public void Update(MSTSLocomotiveViewer locoViewer, ElapsedTime elapsedTime)
4028
4057
{
4029
4058
if ( ! locoViewer . _has3DCabRenderer ) return ;
4030
4059
4031
- var scale = CVFR . IsPowered ? CVFR . GetRangeFraction ( ) : 0f ;
4060
+ var scale = CVFR . IsPowered || CVFR . Control . ValueIfDisabled == null ? CVFR . GetRangeFraction ( ) : ( float ) CVFR . Control . ValueIfDisabled ;
4032
4061
4033
4062
if ( CVFR . GetStyle ( ) == CABViewControlStyles . POINTER )
4034
4063
{
0 commit comments