Skip to content

Commit 9cae984

Browse files
committed
Automatic merge of T1.5.1-870-ge0bf062eb and 16 pull requests
- Pull request #570 at 3539862: Experimental glTF 2.0 support with PBR lighting - Pull request #839 at d00beb9: First phase of https://blueprints.launchpad.net/or/+spec/additional-cruise-control-parameters - Pull request #876 at f92de76: docs: add source for documents previously on website to source Documentation folder - Pull request #882 at 9c456aa: Blueprint/train car operations UI window - Pull request #885 at 8f94333: feat: Add notifications to Menu - Pull request #886 at 6c0785b: Scene viewer extension to TrackViewer - Pull request #892 at 1f5ba4c: Signal Function OPP_SIG_ID_TRAINPATH - Pull request #896 at 5866028: First implementation of https://blueprints.launchpad.net/or/+spec/specific-sounds-for-ai-trains - Pull request #897 at 42f1dd9: feat: Improved system information collection - Pull request #903 at 0d6d045: Downloading route content (Github, zip) - Pull request #907 at 9b0b04f: Bug fix for https://bugs.launchpad.net/or/+bug/2047300 Dynamic tracks disappear after long tunnel - Pull request #911 at 6834af0: docs: Add refactoring as a special type of PR - Pull request #912 at 659396e: New Triple Valve Features Vol. 2 - Pull request #914 at 05d16ce: Adjustments to Duplex steam - Pull request #915 at 6d911d7: Correct calculation error with curve friction - Pull request #916 at 11ac52c: Distributed Power Air Brake Synchronization
18 parents 5e79e85 + e0bf062 + 3539862 + d00beb9 + f92de76 + 9c456aa + 8f94333 + 6c0785b + 1f5ba4c + 5866028 + 42f1dd9 + 0d6d045 + 9b0b04f + 6834af0 + 659396e + 05d16ce + 6d911d7 + 11ac52c commit 9cae984

File tree

2 files changed

+71
-37
lines changed

2 files changed

+71
-37
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs

Lines changed: 64 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,13 @@ public enum SlipControlType
251251

252252
// parameters for Track Sander based upon compressor air and abrasive table for 1/2" sand blasting nozzle @ 50psi
253253
public float MaxTrackSandBoxCapacityM3; // Capacity of sandbox
254+
public float TrackSanderAirComsumptionForwardM3pS;
255+
public float TrackSanderAirComsumptionReverseM3pS = 0;
256+
public float TrackSanderSandConsumptionForwardM3pS;
257+
public float CurrentTrackSanderAirConsumptionM3pS;
258+
public float CurrentTrackSanderSandConsumptionM3pS;
254259
public float CurrentTrackSandBoxCapacityM3;
255-
public float TrackSanderAirComsumptionM3pS;
256-
public float TrackSanderSandConsumptionM3pS;
260+
public float TrackSanderSandConsumptionReverseM3pS = 0;
257261
public float SandWeightKgpM3 = 1600; // One cubic metre of sand weighs about 1.54-1.78 tonnes.
258262
public float TrackSanderSteamConsumptionForwardLbpS;
259263
public float TrackSanderSteamConsumptionReverseLbpS;
@@ -1158,14 +1162,25 @@ public override void Parse(string lowercasetoken, STFReader stf)
11581162
case "engine(ortswaterscoopdepth": WaterScoopDepthM = stf.ReadFloatBlock(STFReader.UNITS.Distance, 0.0f); break;
11591163
case "engine(ortswaterscoopwidth": WaterScoopWidthM = stf.ReadFloatBlock(STFReader.UNITS.Distance, 0.0f); break;
11601164
// Convert the following default ft^3 to Me^3 units
1161-
case "engine(ortsmaxtracksanderboxcapacity": MaxTrackSandBoxCapacityM3 = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null);
1165+
case "engine(ortsmaxtracksanderboxcapacity":
1166+
MaxTrackSandBoxCapacityM3 = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null);
11621167
MaxTrackSandBoxCapacityM3 = Me3.FromFt3(MaxTrackSandBoxCapacityM3);
11631168
break;
1164-
case "engine(ortsmaxtracksandersandconsumption": Me3.FromFt3( TrackSanderSandConsumptionM3pS = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null) );
1165-
TrackSanderSandConsumptionM3pS = Me3.FromFt3(TrackSanderSandConsumptionM3pS);
1169+
case "engine(ortsmaxtracksandersandconsumptionforward":
1170+
Me3.FromFt3( TrackSanderSandConsumptionForwardM3pS = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null) );
1171+
TrackSanderSandConsumptionForwardM3pS = Me3.FromFt3(TrackSanderSandConsumptionForwardM3pS);
11661172
break;
1167-
case "engine(ortsmaxtracksanderairconsumption": Me3.FromFt3( TrackSanderAirComsumptionM3pS = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null) );
1168-
TrackSanderAirComsumptionM3pS = Me3.FromFt3(TrackSanderAirComsumptionM3pS);
1173+
case "engine(ortsmaxtracksandersandconsumptionreverse":
1174+
Me3.FromFt3(TrackSanderSandConsumptionReverseM3pS = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null));
1175+
TrackSanderSandConsumptionReverseM3pS = Me3.FromFt3(TrackSanderSandConsumptionReverseM3pS);
1176+
break;
1177+
case "engine(ortsmaxtracksanderairconsumptionforward":
1178+
Me3.FromFt3( TrackSanderAirComsumptionForwardM3pS = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null) );
1179+
TrackSanderAirComsumptionForwardM3pS = Me3.FromFt3(TrackSanderAirComsumptionForwardM3pS);
1180+
break;
1181+
case "engine(ortsmaxtracksanderairconsumptionreverse":
1182+
Me3.FromFt3(TrackSanderAirComsumptionReverseM3pS = stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null));
1183+
TrackSanderAirComsumptionReverseM3pS = Me3.FromFt3(TrackSanderAirComsumptionReverseM3pS);
11691184
break;
11701185
case "engine(ortscruisecontrol": SetUpCruiseControl(stf); break;
11711186
case "engine(ortsmultipositioncontroller": SetUpMPC(stf); break;
@@ -1223,8 +1238,10 @@ public override void Copy(MSTSWagon copy)
12231238
SanderSpeedEffectUpToMpS = locoCopy.SanderSpeedEffectUpToMpS;
12241239
SanderSpeedOfMpS = locoCopy.SanderSpeedOfMpS;
12251240
MaxTrackSandBoxCapacityM3 = locoCopy.MaxTrackSandBoxCapacityM3;
1226-
TrackSanderSandConsumptionM3pS = locoCopy.TrackSanderSandConsumptionM3pS;
1227-
TrackSanderAirComsumptionM3pS = locoCopy.TrackSanderAirComsumptionM3pS;
1241+
TrackSanderSandConsumptionForwardM3pS = locoCopy.TrackSanderSandConsumptionForwardM3pS;
1242+
TrackSanderSandConsumptionReverseM3pS = locoCopy.TrackSanderSandConsumptionReverseM3pS;
1243+
TrackSanderAirComsumptionForwardM3pS = locoCopy.TrackSanderAirComsumptionForwardM3pS;
1244+
TrackSanderAirComsumptionReverseM3pS = locoCopy.TrackSanderAirComsumptionReverseM3pS;
12281245
PowerOnDelayS = locoCopy.PowerOnDelayS;
12291246
DoesHornTriggerBell = locoCopy.DoesHornTriggerBell;
12301247
MaxSteamHeatPressurePSI = locoCopy.MaxSteamHeatPressurePSI;
@@ -1773,14 +1790,14 @@ public override void Initialize()
17731790
MaxTrackSandBoxCapacityM3 = Me3.FromFt3(40.0f); // Capacity of sandbox - assume 40.0 cu ft
17741791
}
17751792

1776-
if (TrackSanderAirComsumptionM3pS == 0)
1793+
if (TrackSanderAirComsumptionForwardM3pS == 0)
17771794
{
1778-
TrackSanderAirComsumptionM3pS = Me3.FromFt3(195.0f) / 60.0f; // Default value - cubic feet per min (CFM) 195 ft3/m
1795+
TrackSanderAirComsumptionForwardM3pS = Me3.FromFt3(56.0f) / 60.0f; // Default value - cubic feet per min (CFM) 28 ft3/m x 2 sanders @ 140 psi - convert to /sec values
17791796
}
17801797

1781-
if (TrackSanderSandConsumptionM3pS == 0)
1798+
if (TrackSanderSandConsumptionForwardM3pS == 0)
17821799
{
1783-
TrackSanderSandConsumptionM3pS = Me3.FromFt3(11.6f) / 3600.0f; // Default value - 11.6 ft3/h
1800+
TrackSanderSandConsumptionForwardM3pS = Me3.FromFt3(3.4f) / 3600.0f; // Default value - 1.7 ft3/h x 2 sanders @ 140 psi - convert to /sec values
17841801
}
17851802

17861803
if (TrackSanderSteamConsumptionForwardLbpS == 0 && SandingSystemType == SandingSystemTypes.Steam)
@@ -3276,18 +3293,6 @@ public void UpdateTrackSander(float elapsedClockSeconds)
32763293

32773294
if (Sander && AbsSpeedMpS < SanderSpeedOfMpS) // If sander switch is on, and not blocked by speed, adjust parameters
32783295
{
3279-
// Calculate sand consumption for sander
3280-
if (CurrentTrackSandBoxCapacityM3 > 0.0) // if sand still in sandbox then sanding is available
3281-
{
3282-
// Calculate consumption of sand, and drop in sand box level
3283-
float ActualSandConsumptionM3pS = pS.FrompH(TrackSanderSandConsumptionM3pS) * elapsedClockSeconds;
3284-
CurrentTrackSandBoxCapacityM3 -= ActualSandConsumptionM3pS;
3285-
CurrentTrackSandBoxCapacityM3 = MathHelper.Clamp(CurrentTrackSandBoxCapacityM3, 0.0f, MaxTrackSandBoxCapacityM3);
3286-
if (CurrentTrackSandBoxCapacityM3 == 0.0)
3287-
{
3288-
Simulator.Confirmer.Message(ConfirmLevel.Warning, Simulator.Catalog.GetString("Sand supply has been exhausted"));
3289-
}
3290-
}
32913296

32923297
// Calculate steam, air or gravity consumption for different sander modes
32933298
if (SandingSystemType == SandingSystemTypes.Steam)
@@ -3302,14 +3307,41 @@ public void UpdateTrackSander(float elapsedClockSeconds)
33023307
}
33033308

33043309
}
3305-
else
3310+
else // air consumption
33063311
{
3307-
// Calculate air consumption and change in main air reservoir pressure
3308-
float ActualAirConsumptionM3pS = pS.FrompM(TrackSanderAirComsumptionM3pS) * elapsedClockSeconds;
3309-
float SanderPressureDiffPSI = ActualAirConsumptionM3pS / Me3.ToFt3(MainResVolumeM3);
3310-
MainResPressurePSI -= SanderPressureDiffPSI;
3311-
MainResPressurePSI = MathHelper.Clamp(MainResPressurePSI, 0.001f, MaxMainResPressurePSI);
3312-
}
3312+
float sandingAirConsumptionM3pS = 0.0f;
3313+
float sandingSandConsumptionM3pS = 0.0f;
3314+
3315+
if (Direction == Direction.Reverse)
3316+
{
3317+
sandingAirConsumptionM3pS = TrackSanderAirComsumptionReverseM3pS;
3318+
sandingSandConsumptionM3pS = TrackSanderSandConsumptionReverseM3pS;
3319+
}
3320+
else
3321+
{
3322+
sandingAirConsumptionM3pS = TrackSanderAirComsumptionForwardM3pS;
3323+
sandingSandConsumptionM3pS = TrackSanderSandConsumptionForwardM3pS;
3324+
}
3325+
3326+
// Calculate air consumption and change in main air reservoir pressure
3327+
CurrentTrackSanderAirConsumptionM3pS = (MainResPressurePSI * MaxMainResPressurePSI) * pS.FrompM(sandingAirConsumptionM3pS) * elapsedClockSeconds;
3328+
float SanderPressureDiffPSI = CurrentTrackSanderAirConsumptionM3pS / Me3.ToFt3(MainResVolumeM3);
3329+
MainResPressurePSI -= SanderPressureDiffPSI;
3330+
MainResPressurePSI = MathHelper.Clamp(MainResPressurePSI, 0.001f, MaxMainResPressurePSI);
3331+
3332+
// Calculate sand consumption for sander
3333+
if (CurrentTrackSandBoxCapacityM3 > 0.0) // if sand still in sandbox then sanding is available
3334+
{
3335+
// Calculate consumption of sand, and drop in sand box level
3336+
CurrentTrackSanderSandConsumptionM3pS = (MainResPressurePSI * MaxMainResPressurePSI) * pS.FrompH(sandingSandConsumptionM3pS) * elapsedClockSeconds;
3337+
CurrentTrackSandBoxCapacityM3 -= CurrentTrackSanderSandConsumptionM3pS;
3338+
CurrentTrackSandBoxCapacityM3 = MathHelper.Clamp(CurrentTrackSandBoxCapacityM3, 0.0f, MaxTrackSandBoxCapacityM3);
3339+
if (CurrentTrackSandBoxCapacityM3 <= 0.0)
3340+
{
3341+
Simulator.Confirmer.Message(ConfirmLevel.Warning, Simulator.Catalog.GetString("Sand supply has been exhausted"));
3342+
}
3343+
}
3344+
}
33133345
}
33143346

33153347
}

Source/Orts.Simulation/Simulation/RollingStocks/MSTSSteamLocomotive.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8003,14 +8003,17 @@ public override string GetDebugStatus()
80038003
SteamEngines[i].CalculatedFactorOfAdhesion);
80048004
}
80058005

8006-
status.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4:N2}\t{5}\t{6:N2}\n",
8006+
status.AppendFormat("{0}\t{1}\t{2:N2}\t{3}\t{4:N8}/{9}\t\t{5}\t{6:N3}/{9}\t{7}\t{8:N1}\n",
80078007
Simulator.Catalog.GetString("Sand:"),
8008-
Simulator.Catalog.GetString("S/Use"),
8009-
FormatStrings.FormatVolume(TrackSanderSandConsumptionM3pS, IsMetric),
80108008
Simulator.Catalog.GetString("S/Box"),
80118009
FormatStrings.FormatVolume(CurrentTrackSandBoxCapacityM3, IsMetric),
8010+
Simulator.Catalog.GetString("S/Use"),
8011+
FormatStrings.FormatVolume(pS.TopM(CurrentTrackSanderSandConsumptionM3pS), IsMetric),
8012+
Simulator.Catalog.GetString("A/Use"),
8013+
FormatStrings.FormatVolume(pS.TopM(CurrentTrackSanderAirConsumptionM3pS), IsMetric),
80128014
Simulator.Catalog.GetString("M/Press"),
8013-
MainResPressurePSI);
8015+
MainResPressurePSI,
8016+
FormatStrings.min);
80148017

80158018
status.AppendFormat("\n{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\n",
80168019
Simulator.Catalog.GetString("CylE:"),
@@ -8023,7 +8026,6 @@ public override string GetDebugStatus()
80238026
Simulator.Catalog.GetString("#4"),
80248027
CylinderSteamExhaust4On ? Simulator.Catalog.GetString("Yes") : Simulator.Catalog.GetString("No")
80258028
);
8026-
80278029
}
80288030

80298031
#if DEBUG_STEAM_EFFECTS

0 commit comments

Comments
 (0)