@@ -152,6 +152,7 @@ public class MSTSSteamLocomotive : MSTSLocomotive
152152 float BoosterCylinderExhaustOpenFactor;
153153 float BoosterEngineSpeedRpM;
154154 bool BoosterAirisLow = false;
155+ int BoosterEngineNumber;
155156
156157 /// <summary>
157158 /// Grate limit of locomotive exceedeed?
@@ -1585,6 +1586,8 @@ public override void Initialize()
15851586 float Tractiveratio = 0.2629f * SteamEngines[i].BoosterCutoff + 0.5971f;
15861587
15871588 SteamEngines[i].MaxTractiveEffortLbf = Tractiveratio * MaxBoilerPressurePSI * Me.ToIn(SteamEngines[i].CylindersDiameterM) * Me.ToIn(SteamEngines[i].CylindersDiameterM) * Me.ToIn(SteamEngines[i].CylindersStrokeM) * SteamEngines[i].BoosterGearRatio / (Me.ToIn(SteamEngines[i].AttachedAxle.WheelRadiusM) * 2.0f);
1589+
1590+ BoosterEngineNumber = i;
15881591 }
15891592 }
15901593
@@ -2593,12 +2596,11 @@ private void UpdateFX(float elapsedClockSeconds)
25932596 TotalNumberCyindersEng1 = SteamEngines[0].NumberCylinders;
25942597 }
25952598
2596- // Engine #1
2597- // Find
2599+ // Engine #1
25982600 for (int i = 0; i < TotalNumberCyindersEng1; i++)
25992601 {
26002602 var crankAngleDiffRad = WheelCrankAngleDiffRad[i];
2601- float normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2603+ float normalisedCrankAngleRad = NormalisedCrankAngle(0, i, crankAngleDiffRad);
26022604
26032605 // Exhaust crank angle
26042606 float exhaustCrankAngleRad = 0;
@@ -2820,14 +2822,13 @@ private void UpdateFX(float elapsedClockSeconds)
28202822
28212823 if (SteamEngines.Count > 1)
28222824 {
2823- var TotalNumberCyindersEng2 = SteamEngines[1].NumberCylinders + SteamEngines[1].LPNumberCylinders;
2825+ var TotalNumberCyindersEng2 = SteamEngines[1].NumberCylinders; // currently assume 2nd engine is non-compound
28242826
2825- // Engine #2
2826- // Find
2827+ // Engine #2
28272828 for (int i = 0; i < TotalNumberCyindersEng2; i++)
28282829 {
28292830 var crankAngleDiffRad = WheelCrankAngleDiffEng2Rad[i];
2830- float normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2831+ float normalisedCrankAngleRad = NormalisedCrankAngle(1, i, crankAngleDiffRad);
28312832
28322833 // Exhaust crank angle
28332834 float exhaustCrankAngleRad = 0;
@@ -2943,7 +2944,7 @@ private void UpdateFX(float elapsedClockSeconds)
29432944
29442945 if (BoosterGearsEngaged)
29452946 {
2946- normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2947+ normalisedCrankAngleRad = NormalisedCrankAngle(BoosterEngineNumber, i, crankAngleDiffRad);
29472948 }
29482949 else
29492950 {
@@ -2993,7 +2994,7 @@ private void UpdateFX(float elapsedClockSeconds)
29932994
29942995 if (BoosterGearsEngaged)
29952996 {
2996- normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2997+ normalisedCrankAngleRad = NormalisedCrankAngle(BoosterEngineNumber, i, crankAngleDiffRad);
29972998 }
29982999 else
29993000 {
@@ -5763,7 +5764,7 @@ private void UpdateSteamTractiveForce(float elapsedClockSeconds, float locomotiv
57635764 }
57645765
57655766 var crankAngleDiffRad = WheelCrankAngleDiffRad[i];
5766- float normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
5767+ float normalisedCrankAngleRad = NormalisedCrankAngle(numberofengine, i, crankAngleDiffRad);
57675768
57685769 // Crank angles
57695770 float sin = (float)Math.Sin(crankAngleRad);
@@ -6299,9 +6300,9 @@ private float NormalisedBoosterIdleCrankAngle(int cylinderNumber, float crankAng
62996300 /// <summary>
63006301 /// Normalise crank angle so that it is a value between 0 and 360 starting at the real crank angle difference
63016302 /// </summary>
6302- private float NormalisedCrankAngle(int cylinderNumber, float crankAngleRad)
6303+ private float NormalisedCrankAngle(int enginenumber, int cylinderNumber, float crankAngleRad)
63036304 {
6304- float normalisedCrankAngleRad = (float)MathHelper.WrapAngle((float)LocomotiveAxles[0 ].AxlePositionRad + crankAngleRad);
6305+ float normalisedCrankAngleRad = (float)MathHelper.WrapAngle((float)LocomotiveAxles[enginenumber ].AxlePositionRad + crankAngleRad);
63056306
63066307 if (normalisedCrankAngleRad < 0)
63076308 {
0 commit comments