@@ -406,6 +406,8 @@ public void Load()
406406 float LoadEmptyMaxBrakeForceN ;
407407 float LoadEmptyMaxHandbrakeForceN ;
408408 float LoadEmptyCentreOfGravityM_Y ;
409+ float LoadEmptyRelayValveRatio ;
410+ float LoadEmptyInshotPSI ;
409411
410412 float LoadFullMassKg ;
411413 float LoadFullORTSDavis_A ;
@@ -416,6 +418,8 @@ public void Load()
416418 float LoadFullMaxBrakeForceN ;
417419 float LoadFullMaxHandbrakeForceN ;
418420 float LoadFullCentreOfGravityM_Y ;
421+ float LoadFullRelayValveRatio ;
422+ float LoadFullInshotPSI ;
419423
420424
421425 /// <summary>
@@ -782,6 +786,24 @@ public virtual void LoadFromWagFile(string wagFilePath)
782786 LoadEmptyCentreOfGravityM_Y = CentreOfGravityM . Y ;
783787 }
784788
789+ if ( FreightAnimations . EmptyRelayValveRatio > 0 )
790+ {
791+ LoadEmptyRelayValveRatio = FreightAnimations . EmptyRelayValveRatio ;
792+ }
793+ else if ( BrakeSystem is AirSinglePipe brakes )
794+ {
795+ LoadEmptyRelayValveRatio = brakes . RelayValveRatio ;
796+ }
797+
798+ if ( FreightAnimations . EmptyInshotPSI != 0 )
799+ {
800+ LoadEmptyInshotPSI = FreightAnimations . EmptyInshotPSI ;
801+ }
802+ else if ( BrakeSystem is AirSinglePipe brakes )
803+ {
804+ LoadEmptyInshotPSI = brakes . RelayValveInshotPSI ;
805+ }
806+
785807 // Read (initialise) Static load ones if a static load
786808 // Test each value to make sure that it has been defined in the WAG file, if not default to Root WAG file value
787809 if ( FreightAnimations . FullPhysicsStaticOne != null )
@@ -861,6 +883,24 @@ public virtual void LoadFromWagFile(string wagFilePath)
861883 {
862884 LoadFullCentreOfGravityM_Y = CentreOfGravityM . Y ;
863885 }
886+
887+ if ( FreightAnimations . FullPhysicsStaticOne . FullStaticRelayValveRatio > 0 )
888+ {
889+ LoadFullRelayValveRatio = FreightAnimations . FullPhysicsStaticOne . FullStaticRelayValveRatio ;
890+ }
891+ else if ( BrakeSystem is AirSinglePipe brakes )
892+ {
893+ LoadFullRelayValveRatio = brakes . RelayValveRatio ;
894+ }
895+
896+ if ( FreightAnimations . FullPhysicsStaticOne . FullStaticInshotPSI > 0 )
897+ {
898+ LoadFullInshotPSI = FreightAnimations . FullPhysicsStaticOne . FullStaticInshotPSI ;
899+ }
900+ else if ( BrakeSystem is AirSinglePipe brakes )
901+ {
902+ LoadFullInshotPSI = brakes . RelayValveInshotPSI ;
903+ }
864904 }
865905
866906 // Read (initialise) Continuous load ones if a continuous load
@@ -951,6 +991,24 @@ public virtual void LoadFromWagFile(string wagFilePath)
951991 {
952992 LoadFullCentreOfGravityM_Y = CentreOfGravityM . Y ;
953993 }
994+
995+ if ( FreightAnimations . FullPhysicsContinuousOne . FullRelayValveRatio > 0 )
996+ {
997+ LoadFullRelayValveRatio = FreightAnimations . FullPhysicsContinuousOne . FullRelayValveRatio ;
998+ }
999+ else if ( BrakeSystem is AirSinglePipe brakes )
1000+ {
1001+ LoadFullRelayValveRatio = brakes . RelayValveRatio ;
1002+ }
1003+
1004+ if ( FreightAnimations . FullPhysicsContinuousOne . FullInshotPSI != 0 )
1005+ {
1006+ LoadFullInshotPSI = FreightAnimations . FullPhysicsContinuousOne . FullInshotPSI ;
1007+ }
1008+ else if ( BrakeSystem is AirSinglePipe brakes )
1009+ {
1010+ LoadFullInshotPSI = brakes . RelayValveInshotPSI ;
1011+ }
9541012 }
9551013
9561014 if ( ! FreightAnimations . MSTSFreightAnimEnabled ) FreightShapeFileName = null ;
@@ -973,6 +1031,11 @@ public virtual void LoadFromWagFile(string wagFilePath)
9731031 // Update brake parameters
9741032 MaxBrakeForceN = LoadFullMaxBrakeForceN ;
9751033 MaxHandbrakeForceN = LoadFullMaxHandbrakeForceN ;
1034+ if ( BrakeSystem is AirSinglePipe brakes )
1035+ {
1036+ brakes . RelayValveRatio = LoadFullRelayValveRatio ;
1037+ brakes . RelayValveInshotPSI = LoadFullInshotPSI ;
1038+ }
9761039
9771040 // Update friction related parameters
9781041 DavisAN = LoadFullORTSDavis_A ;
@@ -997,6 +1060,12 @@ public virtual void LoadFromWagFile(string wagFilePath)
9971060 // Update brake parameters
9981061 MaxBrakeForceN = ( ( LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxBrakeForceN ;
9991062 MaxHandbrakeForceN = ( ( LoadFullMaxHandbrakeForceN - LoadEmptyMaxHandbrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxHandbrakeForceN ;
1063+ // Not sensible to vary the relay valve ratio continouously; instead, it changes to loaded if more than 25% cargo is present
1064+ if ( BrakeSystem is AirSinglePipe brakes )
1065+ {
1066+ brakes . RelayValveRatio = TempMassDiffRatio > 0.25f ? LoadFullRelayValveRatio : LoadEmptyRelayValveRatio ;
1067+ brakes . RelayValveInshotPSI = TempMassDiffRatio > 0.25f ? LoadFullInshotPSI : LoadEmptyInshotPSI ;
1068+ }
10001069
10011070 // Update friction related parameters
10021071 DavisAN = ( ( LoadFullORTSDavis_A - LoadEmptyORTSDavis_A ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_A ;
@@ -1025,6 +1094,11 @@ public virtual void LoadFromWagFile(string wagFilePath)
10251094 // Update brake physics
10261095 MaxBrakeForceN = LoadEmptyMaxBrakeForceN ;
10271096 MaxHandbrakeForceN = LoadEmptyMaxHandbrakeForceN ;
1097+ if ( BrakeSystem is AirSinglePipe brakes )
1098+ {
1099+ brakes . RelayValveRatio = LoadEmptyRelayValveRatio ;
1100+ brakes . RelayValveInshotPSI = LoadEmptyInshotPSI ;
1101+ }
10281102
10291103 // Update friction related parameters
10301104 DavisAN = LoadEmptyORTSDavis_A ;
@@ -1710,6 +1784,8 @@ public virtual void Copy(MSTSWagon copy)
17101784 LoadEmptyORTSDavis_C = copy . LoadEmptyORTSDavis_C ;
17111785 LoadEmptyDavisDragConstant = copy . LoadEmptyDavisDragConstant ;
17121786 LoadEmptyWagonFrontalAreaM2 = copy . LoadEmptyWagonFrontalAreaM2 ;
1787+ LoadEmptyRelayValveRatio = copy . LoadEmptyRelayValveRatio ;
1788+ LoadEmptyInshotPSI = copy . LoadEmptyInshotPSI ;
17131789 LoadFullMassKg = copy . LoadFullMassKg ;
17141790 LoadFullCentreOfGravityM_Y = copy . LoadFullCentreOfGravityM_Y ;
17151791 LoadFullMaxBrakeForceN = copy . LoadFullMaxBrakeForceN ;
@@ -1719,6 +1795,8 @@ public virtual void Copy(MSTSWagon copy)
17191795 LoadFullORTSDavis_C = copy . LoadFullORTSDavis_C ;
17201796 LoadFullDavisDragConstant = copy . LoadFullDavisDragConstant ;
17211797 LoadFullWagonFrontalAreaM2 = copy . LoadFullWagonFrontalAreaM2 ;
1798+ LoadFullRelayValveRatio = copy . LoadFullRelayValveRatio ;
1799+ LoadFullInshotPSI = copy . LoadFullInshotPSI ;
17221800
17231801 if ( copy . IntakePointList != null )
17241802 {
@@ -2110,6 +2188,12 @@ public override void Update(float elapsedClockSeconds)
21102188 // Update brake parameters
21112189 MaxBrakeForceN = ( ( LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxBrakeForceN ;
21122190 MaxHandbrakeForceN = ( ( LoadFullMaxHandbrakeForceN - LoadEmptyMaxHandbrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxHandbrakeForceN ;
2191+ // Not sensible to vary the relay valve ratio continouously; instead, it changes to loaded if more than 25% cargo is present
2192+ if ( BrakeSystem is AirSinglePipe brakes )
2193+ {
2194+ brakes . RelayValveRatio = TempMassDiffRatio > 0.25f ? LoadFullRelayValveRatio : LoadEmptyRelayValveRatio ;
2195+ brakes . RelayValveInshotPSI = TempMassDiffRatio > 0.25f ? LoadFullInshotPSI : LoadEmptyInshotPSI ;
2196+ }
21132197 // Update friction related parameters
21142198 DavisAN = ( ( LoadFullORTSDavis_A - LoadEmptyORTSDavis_A ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_A ;
21152199 DavisBNSpM = ( ( LoadFullORTSDavis_B - LoadEmptyORTSDavis_B ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_B ;
@@ -2217,6 +2301,12 @@ private void UpdateLocomotiveLoadPhysics()
22172301 // Update brake parameters
22182302 MaxBrakeForceN = ( ( LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxBrakeForceN ;
22192303 MaxHandbrakeForceN = ( ( LoadFullMaxHandbrakeForceN - LoadEmptyMaxHandbrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxHandbrakeForceN ;
2304+ // Not sensible to vary the relay valve ratio continouously; instead, it changes to loaded if more than 25% cargo is present
2305+ if ( BrakeSystem is AirSinglePipe brakes )
2306+ {
2307+ brakes . RelayValveRatio = TempMassDiffRatio > 0.25f ? LoadFullRelayValveRatio : LoadEmptyRelayValveRatio ;
2308+ brakes . RelayValveInshotPSI = TempMassDiffRatio > 0.25f ? LoadFullInshotPSI : LoadEmptyInshotPSI ;
2309+ }
22202310 // Update friction related parameters
22212311 DavisAN = ( ( LoadFullORTSDavis_A - LoadEmptyORTSDavis_A ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_A ;
22222312 DavisBNSpM = ( ( LoadFullORTSDavis_B - LoadEmptyORTSDavis_B ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_B ;
@@ -2263,6 +2353,12 @@ private void UpdateLocomotiveLoadPhysics()
22632353 // Update brake parameters
22642354 MaxBrakeForceN = ( ( LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxBrakeForceN ;
22652355 MaxHandbrakeForceN = ( ( LoadFullMaxHandbrakeForceN - LoadEmptyMaxHandbrakeForceN ) * TempMassDiffRatio ) + LoadEmptyMaxHandbrakeForceN ;
2356+ // Not sensible to vary the relay valve ratio continouously; instead, it changes to loaded if more than 25% cargo is present
2357+ if ( BrakeSystem is AirSinglePipe brakes )
2358+ {
2359+ brakes . RelayValveRatio = TempMassDiffRatio > 0.25f ? LoadFullRelayValveRatio : LoadEmptyRelayValveRatio ;
2360+ brakes . RelayValveInshotPSI = TempMassDiffRatio > 0.25f ? LoadFullInshotPSI : LoadEmptyInshotPSI ;
2361+ }
22662362 // Update friction related parameters
22672363 DavisAN = ( ( LoadFullORTSDavis_A - LoadEmptyORTSDavis_A ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_A ;
22682364 DavisBNSpM = ( ( LoadFullORTSDavis_B - LoadEmptyORTSDavis_B ) * TempMassDiffRatio ) + LoadEmptyORTSDavis_B ;
@@ -3204,6 +3300,12 @@ private void UpdateTenderLoad()
32043300 // Update brake parameters
32053301 MaxBrakeForceN = ( ( LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN ) * TempTenderMassDiffRatio ) + LoadEmptyMaxBrakeForceN ;
32063302 MaxHandbrakeForceN = ( ( LoadFullMaxHandbrakeForceN - LoadEmptyMaxHandbrakeForceN ) * TempTenderMassDiffRatio ) + LoadEmptyMaxHandbrakeForceN ;
3303+ // Not sensible to vary the relay valve ratio continouously; instead, it changes to loaded if more than 25% cargo is present
3304+ if ( BrakeSystem is AirSinglePipe brakes )
3305+ {
3306+ brakes . RelayValveRatio = TempTenderMassDiffRatio > 0.25f ? LoadFullRelayValveRatio : LoadEmptyRelayValveRatio ;
3307+ brakes . RelayValveInshotPSI = TempTenderMassDiffRatio > 0.25f ? LoadFullInshotPSI : LoadEmptyInshotPSI ;
3308+ }
32073309 // Update friction related parameters
32083310 DavisAN = ( ( LoadFullORTSDavis_A - LoadEmptyORTSDavis_A ) * TempTenderMassDiffRatio ) + LoadEmptyORTSDavis_A ;
32093311 DavisBNSpM = ( ( LoadFullORTSDavis_B - LoadEmptyORTSDavis_B ) * TempTenderMassDiffRatio ) + LoadEmptyORTSDavis_B ;
@@ -3237,6 +3339,12 @@ private void UpdateTenderLoad()
32373339 // Update brake parameters
32383340 MaxBrakeForceN = ( ( LoadFullMaxBrakeForceN - LoadEmptyMaxBrakeForceN ) * TempTenderMassDiffRatio ) + LoadEmptyMaxBrakeForceN ;
32393341 MaxHandbrakeForceN = ( ( LoadFullMaxHandbrakeForceN - LoadEmptyMaxHandbrakeForceN ) * TempTenderMassDiffRatio ) + LoadEmptyMaxHandbrakeForceN ;
3342+ // Not sensible to vary the relay valve ratio continouously; instead, it changes to loaded if more than 25% cargo is present
3343+ if ( BrakeSystem is AirSinglePipe brakes )
3344+ {
3345+ brakes . RelayValveRatio = TempTenderMassDiffRatio > 0.25f ? LoadFullRelayValveRatio : LoadEmptyRelayValveRatio ;
3346+ brakes . RelayValveInshotPSI = TempTenderMassDiffRatio > 0.25f ? LoadFullInshotPSI : LoadEmptyInshotPSI ;
3347+ }
32403348 // Update friction related parameters
32413349 DavisAN = ( ( LoadFullORTSDavis_A - LoadEmptyORTSDavis_A ) * TempTenderMassDiffRatio ) + LoadEmptyORTSDavis_A ;
32423350 DavisBNSpM = ( ( LoadFullORTSDavis_B - LoadEmptyORTSDavis_B ) * TempTenderMassDiffRatio ) + LoadEmptyORTSDavis_B ;
0 commit comments