@@ -1615,7 +1615,13 @@ public CABViewControlTypes GetControlType()
16151615 /// <returns>Data value as fraction (from 0 to 1) of the range between Min and Max values</returns>
16161616 public float GetRangeFraction ( bool offsetFromZero = false )
16171617 {
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+
16191625 if ( data < Control . MinValue )
16201626 return 0 ;
16211627 if ( data > Control . MaxValue )
@@ -1635,9 +1641,7 @@ public CABViewControlStyles GetStyle()
16351641 [ CallOnThread ( "Updater" ) ]
16361642 public virtual void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
16371643 {
1638- var noPower = ( Control . DisabledIfLowVoltagePowerSupplyOff && ! Locomotive . LocomotivePowerSupply . LowVoltagePowerSupplyOn )
1639- || ( Control . DisabledIfCabPowerSupplyOff && ! Locomotive . LocomotivePowerSupply . CabPowerSupplyOn ) ;
1640- if ( noPower )
1644+ if ( ! IsPowered && Control . HideIfDisabled )
16411645 return ;
16421646
16431647 frame . AddPrimitive ( ControlView , this , RenderPrimitiveGroup . Cab , ref Matrix ) ;
@@ -1801,8 +1805,11 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
18011805 float percent , xpos , ypos , zeropos ;
18021806
18031807 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 ) ;
18061813
18071814 if ( Gauge . Orientation == 0 ) // gauge horizontal
18081815 {
@@ -2049,7 +2056,12 @@ public override void Draw(GraphicsDevice graphicsDevice)
20492056 /// <returns>index of the Texture</returns>
20502057 public virtual int GetDrawIndex ( )
20512058 {
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 ) ;
20532065
20542066 var index = OldFrameIndex ;
20552067 switch ( ControlDiscrete . ControlType )
@@ -2887,7 +2899,14 @@ public CabViewAnimationsRenderer(Viewer viewer, MSTSLocomotive locomotive, CVCAn
28872899
28882900 public override void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
28892901 {
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 ;
28912910 if ( animate )
28922911 AnimationOn = true ;
28932912
@@ -2965,7 +2984,11 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
29652984 {
29662985 var digital = Control as CVCDigital ;
29672986
2968- Num = Locomotive . GetDataOf ( Control ) ;
2987+ if ( ! IsPowered && Control . ValueIfDisabled != null )
2988+ Num = ( float ) Control . ValueIfDisabled ;
2989+ else
2990+ Num = Locomotive . GetDataOf ( Control ) ;
2991+
29692992 if ( digital . MinValue < digital . MaxValue ) Num = MathHelper . Clamp ( Num , ( float ) digital . MinValue , ( float ) digital . MaxValue ) ;
29702993 if ( Math . Abs ( Num ) < digital . AccuracySwitch )
29712994 Format = Format2 ;
@@ -3046,7 +3069,12 @@ public string GetDigits(out Color DrawColor)
30463069 {
30473070 var digital = Control as CVCDigital ;
30483071 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+
30503078 if ( Math . Abs ( Num ) < digital . AccuracySwitch )
30513079 Format = Format2 ;
30523080 else
@@ -3119,7 +3147,12 @@ public string GetDigits(out Color DrawColor)
31193147 {
31203148 var digital = Control as CVCDigital ;
31213149 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+
31233156 if ( digital . MinValue < digital . MaxValue ) Num = MathHelper . Clamp ( Num , ( float ) digital . MinValue , ( float ) digital . MaxValue ) ;
31243157 if ( Math . Abs ( Num ) < digital . AccuracySwitch )
31253158 Format = Format2 ;
@@ -3356,11 +3389,6 @@ public override void HandleUserInput(ElapsedTime elapsedTime)
33563389 /// </summary>
33573390 public override void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
33583391 {
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 ;
33643392 foreach ( var p in AnimateParts )
33653393 {
33663394 if ( p . Value . Type >= CABViewControlTypes . EXTERNALWIPERS ) //for wipers, doors and mirrors
@@ -3397,32 +3425,31 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
33973425 }
33983426 else
33993427 {
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 )
34053436 {
34063437 var control = cabRenderer . Control ;
34073438 if ( control . Screens != null && control . Screens [ 0 ] != "all" )
34083439 {
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 ) ;
34183442 }
34193443 }
34203444 }
3445+
34213446 foreach ( var matrixIndex in p . Value . MatrixIndexes )
34223447 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
34243450 }
34253451 }
3452+
34263453 foreach ( var p in DigitParts3D )
34273454 {
34283455 var digital = p . Value . CVFR . Control ;
@@ -3440,6 +3467,7 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
34403467 }
34413468 p . Value . PrepareFrame ( frame , elapsedTime ) ;
34423469 }
3470+
34433471 foreach ( var p in DPIDisplays3D )
34443472 {
34453473 var dpdisplay = p . Value . CVFR . Control ;
@@ -3457,6 +3485,7 @@ public override void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
34573485 }
34583486 p . Value . PrepareFrame ( frame , elapsedTime ) ;
34593487 }
3488+
34603489 foreach ( var p in Gauges )
34613490 {
34623491 var gauge = p . Value . CVFR . Control ;
@@ -3763,7 +3792,7 @@ static float GetTextureCoordY(char c)
37633792
37643793 public void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
37653794 {
3766- if ( ! CVFR . IsPowered )
3795+ if ( ! CVFR . IsPowered && CVFR . Control . HideIfDisabled )
37673796 return ;
37683797
37693798 UpdateDigit ( ) ;
@@ -3982,7 +4011,7 @@ private void UpdateShapePrimitive(Material material)
39824011
39834012 public void PrepareFrame ( RenderFrame frame , ElapsedTime elapsedTime )
39844013 {
3985- if ( ! CVFR . IsPowered )
4014+ if ( ! CVFR . IsPowered && CVFR . Control . HideIfDisabled )
39864015 return ;
39874016
39884017 UpdateDigit ( ) ;
@@ -4028,7 +4057,7 @@ public void Update(MSTSLocomotiveViewer locoViewer, ElapsedTime elapsedTime)
40284057 {
40294058 if ( ! locoViewer . _has3DCabRenderer ) return ;
40304059
4031- var scale = CVFR . IsPowered ? CVFR . GetRangeFraction ( ) : 0f ;
4060+ var scale = CVFR . IsPowered || CVFR . Control . ValueIfDisabled == null ? CVFR . GetRangeFraction ( ) : ( float ) CVFR . Control . ValueIfDisabled ;
40324061
40334062 if ( CVFR . GetStyle ( ) == CABViewControlStyles . POINTER )
40344063 {
0 commit comments