@@ -152,6 +152,7 @@ public class MSTSSteamLocomotive : MSTSLocomotive
152
152
float BoosterCylinderExhaustOpenFactor;
153
153
float BoosterEngineSpeedRpM;
154
154
bool BoosterAirisLow = false;
155
+ int BoosterEngineNumber;
155
156
156
157
/// <summary>
157
158
/// Grate limit of locomotive exceedeed?
@@ -1585,6 +1586,8 @@ public override void Initialize()
1585
1586
float Tractiveratio = 0.2629f * SteamEngines[i].BoosterCutoff + 0.5971f;
1586
1587
1587
1588
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;
1588
1591
}
1589
1592
}
1590
1593
@@ -2593,12 +2596,11 @@ private void UpdateFX(float elapsedClockSeconds)
2593
2596
TotalNumberCyindersEng1 = SteamEngines[0].NumberCylinders;
2594
2597
}
2595
2598
2596
- // Engine #1
2597
- // Find
2599
+ // Engine #1
2598
2600
for (int i = 0; i < TotalNumberCyindersEng1; i++)
2599
2601
{
2600
2602
var crankAngleDiffRad = WheelCrankAngleDiffRad[i];
2601
- float normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2603
+ float normalisedCrankAngleRad = NormalisedCrankAngle(0, i, crankAngleDiffRad);
2602
2604
2603
2605
// Exhaust crank angle
2604
2606
float exhaustCrankAngleRad = 0;
@@ -2820,14 +2822,13 @@ private void UpdateFX(float elapsedClockSeconds)
2820
2822
2821
2823
if (SteamEngines.Count > 1)
2822
2824
{
2823
- var TotalNumberCyindersEng2 = SteamEngines[1].NumberCylinders + SteamEngines[1].LPNumberCylinders;
2825
+ var TotalNumberCyindersEng2 = SteamEngines[1].NumberCylinders; // currently assume 2nd engine is non-compound
2824
2826
2825
- // Engine #2
2826
- // Find
2827
+ // Engine #2
2827
2828
for (int i = 0; i < TotalNumberCyindersEng2; i++)
2828
2829
{
2829
2830
var crankAngleDiffRad = WheelCrankAngleDiffEng2Rad[i];
2830
- float normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2831
+ float normalisedCrankAngleRad = NormalisedCrankAngle(1, i, crankAngleDiffRad);
2831
2832
2832
2833
// Exhaust crank angle
2833
2834
float exhaustCrankAngleRad = 0;
@@ -2943,7 +2944,7 @@ private void UpdateFX(float elapsedClockSeconds)
2943
2944
2944
2945
if (BoosterGearsEngaged)
2945
2946
{
2946
- normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2947
+ normalisedCrankAngleRad = NormalisedCrankAngle(BoosterEngineNumber, i, crankAngleDiffRad);
2947
2948
}
2948
2949
else
2949
2950
{
@@ -2993,7 +2994,7 @@ private void UpdateFX(float elapsedClockSeconds)
2993
2994
2994
2995
if (BoosterGearsEngaged)
2995
2996
{
2996
- normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
2997
+ normalisedCrankAngleRad = NormalisedCrankAngle(BoosterEngineNumber, i, crankAngleDiffRad);
2997
2998
}
2998
2999
else
2999
3000
{
@@ -5763,7 +5764,7 @@ private void UpdateSteamTractiveForce(float elapsedClockSeconds, float locomotiv
5763
5764
}
5764
5765
5765
5766
var crankAngleDiffRad = WheelCrankAngleDiffRad[i];
5766
- float normalisedCrankAngleRad = NormalisedCrankAngle(i, crankAngleDiffRad);
5767
+ float normalisedCrankAngleRad = NormalisedCrankAngle(numberofengine, i, crankAngleDiffRad);
5767
5768
5768
5769
// Crank angles
5769
5770
float sin = (float)Math.Sin(crankAngleRad);
@@ -6299,9 +6300,9 @@ private float NormalisedBoosterIdleCrankAngle(int cylinderNumber, float crankAng
6299
6300
/// <summary>
6300
6301
/// Normalise crank angle so that it is a value between 0 and 360 starting at the real crank angle difference
6301
6302
/// </summary>
6302
- private float NormalisedCrankAngle(int cylinderNumber, float crankAngleRad)
6303
+ private float NormalisedCrankAngle(int enginenumber, int cylinderNumber, float crankAngleRad)
6303
6304
{
6304
- float normalisedCrankAngleRad = (float)MathHelper.WrapAngle((float)LocomotiveAxles[0 ].AxlePositionRad + crankAngleRad);
6305
+ float normalisedCrankAngleRad = (float)MathHelper.WrapAngle((float)LocomotiveAxles[enginenumber ].AxlePositionRad + crankAngleRad);
6305
6306
6306
6307
if (normalisedCrankAngleRad < 0)
6307
6308
{
0 commit comments