Skip to content

Commit 2b45594

Browse files
committed
Further adjustments to track joint initialisation
1 parent 1a01818 commit 2b45594

File tree

1 file changed

+53
-10
lines changed
  • Source/Orts.Simulation/Simulation/Physics

1 file changed

+53
-10
lines changed

Source/Orts.Simulation/Simulation/Physics/Train.cs

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public TrainCar LastCar
163163
public bool HuDIsWheelSlip;
164164
public bool IsBrakeSkid;
165165

166-
public bool SoundSetupInitialise = true;
166+
public bool TrackJointSoundSetupInitialise = true;
167167

168168
public bool HotBoxSetOnTrain = false;
169169
public int ActivityDurationS
@@ -2009,26 +2009,69 @@ public virtual void Update(float elapsedClockSeconds, bool auxiliaryUpdate = tru
20092009
// Initialise track joint trigger points. Sets the trigger point for the track joint reletative to other cars.
20102010
// This is then reset every time a track joint is triggered, and positioned the same distance apart, hence reletative positions are maintained.
20112011
// Only runs once at start up.
2012-
if (SoundSetupInitialise)
2012+
if (TrackJointSoundSetupInitialise)
20132013
{
20142014
var trackjointdistanceM = (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM;
2015-
float trainLengthM = 0;
2015+
var trainLengthM = 0.0f;
2016+
var cummulativeTrackJointDistanceM = 0.0f;
2017+
var remainDistanceM = (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM;
2018+
20162019

20172020
foreach (var car in Cars)
20182021
{
2019-
car.realTimeTrackJointDistanceM = trackjointdistanceM + trainLengthM;
2020-
trainLengthM += car.CarLengthM;
2022+
// Initialise from the next track joint
2023+
2024+
// if remain distance has gone negative then car has moved over the next track joint
2025+
if (trackjointdistanceM > car.CarLengthM)
2026+
{
2027+
2028+
car.realTimeTrackJointDistanceM = cummulativeTrackJointDistanceM;
2029+
trainLengthM += car.CarLengthM;
2030+
cummulativeTrackJointDistanceM += car.CarLengthM;
2031+
remainDistanceM -= car.CarLengthM;
2032+
20212033

2022-
// Track joint "reached" move car joint into next track joint sesction
2023-
if (trainLengthM > (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM)
2034+
// Trace.TraceInformation("Initialise Track Joints> - CarID {0} RealDistance {1} TrainLength {2} TRackJointDistance {3} CarLength {4} CumDistance {5} RemDistance {6}", car.CarID, car.realTimeTrackJointDistanceM, trainLengthM, trackjointdistanceM, car.CarLengthM, cummulativeTrackJointDistanceM, remainDistanceM);
2035+
2036+
// the next track joint has been reached reset all parameters in preparation for the next pass
2037+
if (remainDistanceM < 0.0f)
2038+
{
2039+
cummulativeTrackJointDistanceM = Math.Abs(remainDistanceM);
2040+
remainDistanceM = trackjointdistanceM - cummulativeTrackJointDistanceM;
2041+
// Trace.TraceInformation("Reset> - Cum {0} Rem {1}", cummulativeTrackJointDistanceM, remainDistanceM);
2042+
}
2043+
2044+
}
2045+
// Trackjoint less then Car length
2046+
else if (trackjointdistanceM < car.CarLengthM)
20242047
{
2025-
trainLengthM -= (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM;
2048+
2049+
car.realTimeTrackJointDistanceM = cummulativeTrackJointDistanceM;
2050+
trainLengthM += car.CarLengthM;
2051+
cummulativeTrackJointDistanceM += trackjointdistanceM;
2052+
remainDistanceM -= car.CarLengthM;
2053+
2054+
// Trace.TraceInformation("Initialise Track Joints< - CarID {0} RealDistance {1} TrainLength {2} TRackJointDistance {3} CarLength {4} CumDistance {5} RemDistance {6}", car.CarID, car.realTimeTrackJointDistanceM, trainLengthM, trackjointdistanceM, car.CarLengthM, cummulativeTrackJointDistanceM, remainDistanceM);
2055+
2056+
if (remainDistanceM < 0.0f)
2057+
{
2058+
2059+
while (Math.Abs(remainDistanceM) > trackjointdistanceM)
2060+
{
2061+
remainDistanceM += trackjointdistanceM;
2062+
// Trace.TraceInformation("Reset Remain< - CarID {0}, remainDistanceM {1}", car.CarID, remainDistanceM);
2063+
}
2064+
2065+
cummulativeTrackJointDistanceM = Math.Abs(remainDistanceM);
2066+
remainDistanceM = trackjointdistanceM - cummulativeTrackJointDistanceM;
2067+
// Trace.TraceInformation("Reset< - Cum {0} Rem {1}", cummulativeTrackJointDistanceM, remainDistanceM);
2068+
}
2069+
20262070
}
20272071

2028-
// Trace.TraceInformation("Initialise Track Joints - CarID {0} RealDistance {1} TrainLength {2}", car.CarID, car.realTimeTrackJointDistanceM, trainLengthM);
20292072
}
20302073

2031-
SoundSetupInitialise = false;
2074+
TrackJointSoundSetupInitialise = false;
20322075
}
20332076

20342077
} // end Update

0 commit comments

Comments
 (0)