Skip to content

Commit 47bb503

Browse files
committed
Automatic merge of T1.5.1-1689-g72674c98d and 15 pull requests
- Pull request #900 at 4629736: DMI in 3D cab + two more dials - Pull request #1030 at d3ae4a2: Refactor settings, in prep for settings exporter - Pull request #1045 at cc4d53c: Bugfix: Empty Start Time for Explore, and other issues loading from Menu Selection and Content Routes - Pull request #1052 at 5bbc476: Content Manager: Add axle count, and lowest derail force - Pull request #1062 at 3b18c48: Train Forces popup Window. - Pull request #1064 at 9b3415e: Add Train Info tab to Help window (F1) - Pull request #1066 at 62c89c1: Log derailment, using TraceInformation. - Pull request #892 at 1f5ba4c: Signal Function OPP_SIG_ID_TRAINPATH - Pull request #1000 at d8d9709: Locomotive operation from control car - Pull request #1029 at 92c74ef: Superelevation Follow Up Fixes - Pull request #1057 at d9791e2: Switchable brake system - Pull request #1065 at 409064d: Fix for PantographToggle sound event - Pull request #1068 at d6e1f83: Build for online-only documentation files - Pull request #1055 at 90bbcff: Route Based TTrack Sounds - Pull request #896 at f1681df: First implementation of https://blueprints.launchpad.net/or/+spec/specific-sounds-for-ai-trains
17 parents c8bc508 + 72674c9 + 4629736 + d3ae4a2 + cc4d53c + 5bbc476 + 3b18c48 + 9b3415e + 62c89c1 + 1f5ba4c + d8d9709 + 92c74ef + d9791e2 + 409064d + d6e1f83 + 90bbcff + f1681df commit 47bb503

File tree

7 files changed

+393
-39
lines changed

7 files changed

+393
-39
lines changed

Source/Orts.Formats.Msts/RouteFile.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ public Tr_RouteFile(STFReader stf)
126126
new STFReader.TokenProcessor("ortscurvesmsnumber", ()=>{ CurveSMSNumber = stf.ReadIntBlock(null); }),
127127
new STFReader.TokenProcessor("ortscurveswitchsmsnumber", ()=>{ CurveSwitchSMSNumber = stf.ReadIntBlock(null); }),
128128
new STFReader.TokenProcessor("ortsopendoorsinaitrains", ()=>{ OpenDoorsInAITrains = stf.ReadBoolBlock(false); }),
129-
129+
new STFReader.TokenProcessor("ortsplaytracksoundsbasecontinuous", ()=>{ TrackSoundDefaultContinuousPlay = stf.ReadBoolBlock(false); }),
130+
new STFReader.TokenProcessor("ortsdistancebetweentrackjoints", ()=>{ DistanceBetweenTrackJointsM = stf.ReadFloatBlock(STFReader.UNITS.Distance, null); }),
131+
new STFReader.TokenProcessor("ortsconcretesleepers", ()=>{ ConcreteSleepers = stf.ReadFloatBlock(STFReader.UNITS.None, null); }),
130132
});
131133
//TODO This should be changed to STFException.TraceError() with defaults values created
132134
if (RouteID == null) throw new STFException(stf, "Missing RouteID");
@@ -175,6 +177,11 @@ public Tr_RouteFile(STFReader stf)
175177
public float ForestClearDistance = 0;
176178
public bool RemoveForestTreesFromRoads = false;
177179

180+
// Track based sounds
181+
public bool TrackSoundDefaultContinuousPlay = false;
182+
public float DistanceBetweenTrackJointsM;
183+
public float ConcreteSleepers;
184+
178185
// images
179186
public string Thumbnail;
180187
public string LoadingScreen;

Source/Orts.Formats.Msts/SoundManagmentFile.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class SharedSMSFileManager
3838
public static int CurveSwitchSMSNumber;
3939
public static bool AutoTrackSound = false;
4040

41+
public static bool PlayDefaultTrackSoundsContinuous = false;
42+
public static float ConcreteSleepers;
43+
4144
public static SoundManagmentFile Get(string path)
4245
{
4346
if (!SharedSMSFiles.ContainsKey(path))
@@ -240,7 +243,7 @@ public struct CurvePoint
240243

241244
public class VolumeCurve
242245
{
243-
public enum Controls { None, DistanceControlled, SpeedControlled, Variable1Controlled, Variable1_2Controlled, Variable1_3Controlled, Variable1_4Controlled, Variable2Controlled, Variable2BoosterControlled, Variable3Controlled, BrakeCylControlled, CurveForceControlled };
246+
public enum Controls { None, DistanceControlled, SpeedControlled, Variable1Controlled, Variable1_2Controlled, Variable1_3Controlled, Variable1_4Controlled, Variable2Controlled, Variable2BoosterControlled, Variable3Controlled, BrakeCylControlled, CurveForceControlled, AngleofAttackControlled, CarFrictionControlled, WheelRpMControlled };
244247

245248
public Controls Control = Controls.None;
246249
public float Granularity = 1.0f;
@@ -264,6 +267,9 @@ public VolumeCurve(STFReader stf)
264267
case "variable3controlled": Control = Controls.Variable3Controlled; break;
265268
case "brakecylcontrolled": Control = Controls.BrakeCylControlled; break;
266269
case "curveforcecontrolled": Control = Controls.CurveForceControlled; break;
270+
case "angleofattackcontrolled": Control = Controls.AngleofAttackControlled; break;
271+
case "carfrictioncontrolled": Control = Controls.CarFrictionControlled; break;
272+
case "wheelrpmcontrolled": Control = Controls.WheelRpMControlled; break;
267273
default: STFException.TraceWarning(stf, "Crash expected: Skipped unknown VolumeCurve/Frequencycurve type " + type); stf.SkipRestOfBlock(); return;
268274
}
269275
stf.ParseBlock(new STFReader.TokenProcessor[] {
@@ -385,7 +391,8 @@ public Discrete_Trigger(STFReader f)
385391
public class Variable_Trigger : Trigger
386392
{
387393
public enum Events { Speed_Inc_Past, Speed_Dec_Past, Distance_Inc_Past, Distance_Dec_Past,
388-
Variable1_Inc_Past, Variable1_2_Inc_Past, Variable1_3_Inc_Past, Variable1_4_Inc_Past, Variable1_Dec_Past, Variable1_2_Dec_Past, Variable1_3_Dec_Past, Variable1_4_Dec_Past, Variable2_Inc_Past, Variable2_Dec_Past, Variable3_Inc_Past, Variable3_Dec_Past, BrakeCyl_Inc_Past, BrakeCyl_Dec_Past, CurveForce_Inc_Past, CurveForce_Dec_Past
394+
Variable1_Inc_Past, Variable1_2_Inc_Past, Variable1_3_Inc_Past, Variable1_4_Inc_Past, Variable1_Dec_Past, Variable1_2_Dec_Past, Variable1_3_Dec_Past, Variable1_4_Dec_Past, Variable2_Inc_Past, Variable2_Dec_Past, Variable3_Inc_Past, Variable3_Dec_Past, BrakeCyl_Inc_Past, BrakeCyl_Dec_Past, CurveForce_Inc_Past, CurveForce_Dec_Past, AngleofAttack_Inc_Past, AngleofAttack_Dec_Past, WheelRpM_Dec_Past, WheelRPM_Inc_Past, TrackJoints_Inc_Past, TrackJoints_Dec_Past, CarOnSwitch_Inc_Past, CarOnSwitch_Dec_Past, CarOnXover_Inc_Past, CarOnXover_Dec_Past, WagonAxles_Inc_Past, WagonAxles_Dec_Past,
395+
ConcreteSleepers_Inc_Past, ConcreteSleepers_Dec_Past, CarInTunnel_Inc_Past, CarInTunnel_Dec_Past
389396
};
390397

391398
public Events Event;
@@ -431,6 +438,23 @@ public Variable_Trigger(STFReader f)
431438
case "brakecyl_dec_past": Event = Events.BrakeCyl_Dec_Past; break;
432439
case "curveforce_inc_past": Event = Events.CurveForce_Inc_Past; break;
433440
case "curveforce_dec_past": Event = Events.CurveForce_Dec_Past; break;
441+
442+
case "angleofattack_inc_past": Event = Events.AngleofAttack_Inc_Past; break;
443+
case "angleofattack_dec_past": Event = Events.AngleofAttack_Dec_Past; break;
444+
case "wheelrpm_inc_past": Event = Events.WheelRPM_Inc_Past; break;
445+
case "wheelrpm_dec_past": Event = Events.WheelRpM_Dec_Past; break;
446+
case "trackjoints_inc_past": Event = Events.TrackJoints_Inc_Past; break;
447+
case "trackjoints_dec_past": Event = Events.TrackJoints_Dec_Past; break;
448+
case "wagonaxles_inc_past": Event = Events.WagonAxles_Inc_Past; break;
449+
case "wagonaxles_dec_past": Event = Events.WagonAxles_Dec_Past; break;
450+
case "caronswitch_inc_past": Event = Events.CarOnSwitch_Inc_Past; break;
451+
case "caronswitch_dec_past": Event = Events.CarOnSwitch_Dec_Past; break;
452+
case "caronxover_inc_past": Event = Events.CarOnXover_Inc_Past; break;
453+
case "caronxover_dec_past": Event = Events.CarOnXover_Dec_Past; break;
454+
case "concretesleepers_inc_past": Event = Events.ConcreteSleepers_Inc_Past; break;
455+
case "concretesleepers_dec_past": Event = Events.ConcreteSleepers_Dec_Past; break;
456+
case "carintunnel_inc_past": Event = Events.CarInTunnel_Inc_Past; break;
457+
case "carintunnel_dec_past": Event = Events.CarInTunnel_Dec_Past; break;
434458
}
435459

436460

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

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ public TrainCar LastCar
163163
public bool HuDIsWheelSlip;
164164
public bool IsBrakeSkid;
165165

166+
public bool TrackJointSoundSetupInitialise = true;
167+
166168
public bool HotBoxSetOnTrain = false;
167169
public int ActivityDurationS
168170
{
@@ -2004,6 +2006,95 @@ public virtual void Update(float elapsedClockSeconds, bool auxiliaryUpdate = tru
20042006
LogTrainSpeed(Simulator.ClockTime);
20052007
}
20062008

2009+
// Initialise track joint trigger points. Sets the trigger point for the track joint reletative to other cars.
2010+
// This is then reset every time a track joint is triggered, and positioned the same distance apart, hence reletative positions are maintained.
2011+
// Only runs once at start up.
2012+
if (TrackJointSoundSetupInitialise && (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM > 0 && Simulator.TRK.Tr_RouteFile.TrackSoundDefaultContinuousPlay)
2013+
{
2014+
var trackjointdistanceM = (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM;
2015+
var trainLengthM = 0.0f;
2016+
var cummulativeTrackJointDistanceM = 0.0f;
2017+
var remainDistanceM = (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM;
2018+
2019+
// Set values for printing
2020+
bool concretesleepers = false;
2021+
2022+
if ((float)Simulator.TRK.Tr_RouteFile.ConcreteSleepers == 1)
2023+
{
2024+
concretesleepers = true;
2025+
}
2026+
2027+
if (Simulator.Settings.VerboseConfigurationMessages && Simulator.TRK.Tr_RouteFile.TrackSoundDefaultContinuousPlay)
2028+
{
2029+
Trace.TraceInformation("======================================================================================================================");
2030+
Trace.TraceInformation("TType Track Sounds Initialisation - Concrete Sleepers = {0}, Track Joint Distance = {1} m", concretesleepers, (float)Simulator.TRK.Tr_RouteFile.DistanceBetweenTrackJointsM);
2031+
}
2032+
2033+
2034+
foreach (var car in Cars)
2035+
{
2036+
// Initialise from the next track joint
2037+
2038+
// if remain distance has gone negative then car has moved over the next track joint
2039+
if (trackjointdistanceM > car.CarLengthM)
2040+
{
2041+
2042+
car.realTimeTrackJointDistanceM = cummulativeTrackJointDistanceM;
2043+
trainLengthM += car.CarLengthM;
2044+
cummulativeTrackJointDistanceM += car.CarLengthM;
2045+
remainDistanceM -= car.CarLengthM;
2046+
2047+
2048+
// 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);
2049+
2050+
// the next track joint has been reached reset all parameters in preparation for the next pass
2051+
if (remainDistanceM < 0.0f)
2052+
{
2053+
cummulativeTrackJointDistanceM = Math.Abs(remainDistanceM);
2054+
remainDistanceM = trackjointdistanceM - cummulativeTrackJointDistanceM;
2055+
// Trace.TraceInformation("Reset> - Cum {0} Rem {1}", cummulativeTrackJointDistanceM, remainDistanceM);
2056+
}
2057+
2058+
}
2059+
// Trackjoint less then Car length
2060+
else if (trackjointdistanceM < car.CarLengthM)
2061+
{
2062+
2063+
car.realTimeTrackJointDistanceM = cummulativeTrackJointDistanceM;
2064+
trainLengthM += car.CarLengthM;
2065+
cummulativeTrackJointDistanceM += trackjointdistanceM;
2066+
remainDistanceM -= car.CarLengthM;
2067+
2068+
// 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);
2069+
2070+
if (remainDistanceM < 0.0f)
2071+
{
2072+
2073+
while (Math.Abs(remainDistanceM) > trackjointdistanceM)
2074+
{
2075+
remainDistanceM += trackjointdistanceM;
2076+
// Trace.TraceInformation("Reset Remain< - CarID {0}, remainDistanceM {1}", car.CarID, remainDistanceM);
2077+
}
2078+
2079+
cummulativeTrackJointDistanceM = Math.Abs(remainDistanceM);
2080+
remainDistanceM = trackjointdistanceM - cummulativeTrackJointDistanceM;
2081+
// Trace.TraceInformation("Reset< - Cum {0} Rem {1}", cummulativeTrackJointDistanceM, remainDistanceM);
2082+
}
2083+
2084+
}
2085+
2086+
if (Simulator.Settings.VerboseConfigurationMessages && Simulator.TRK.Tr_RouteFile.TrackSoundDefaultContinuousPlay)
2087+
{
2088+
Trace.TraceInformation("CarID {0}, Dist from Joint = {1} m, Car Length = {2} m, Train Length = {3} m, Axle Count = {4}", car.CarID, car.realTimeTrackJointDistanceM, car.CarLengthM, trainLengthM, car.SoundAxleCount);
2089+
}
2090+
2091+
}
2092+
2093+
Trace.TraceInformation("======================================================================================================================");
2094+
2095+
TrackJointSoundSetupInitialise = false;
2096+
}
2097+
20072098
} // end Update
20082099

20092100
//================================================================================================//

Source/Orts.Simulation/Simulation/RollingStocks/MSTSWagon.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,7 +2012,7 @@ public override void Save(BinaryWriter outf)
20122012

20132013
outf.Write(WheelBrakeSlideProtectionActive);
20142014
outf.Write(WheelBrakeSlideProtectionTimerS);
2015-
outf.Write(AngleOfAttackRad);
2015+
outf.Write(AngleOfAttackmRad);
20162016
outf.Write(DerailClimbDistanceM);
20172017
outf.Write(DerailPossible);
20182018
outf.Write(DerailExpected);
@@ -2070,7 +2070,7 @@ public override void Restore(BinaryReader inf)
20702070

20712071
WheelBrakeSlideProtectionActive = inf.ReadBoolean();
20722072
WheelBrakeSlideProtectionTimerS = inf.ReadInt32();
2073-
AngleOfAttackRad = inf.ReadSingle();
2073+
AngleOfAttackmRad = inf.ReadSingle();
20742074
DerailClimbDistanceM = inf.ReadSingle();
20752075
DerailPossible = inf.ReadBoolean();
20762076
DerailExpected = inf.ReadBoolean();

0 commit comments

Comments
 (0)