diff --git a/Source/Orts.Parsers.Msts/Interpolator.cs b/Source/Orts.Parsers.Msts/Interpolator.cs index c0e79a869..c46e26b94 100644 --- a/Source/Orts.Parsers.Msts/Interpolator.cs +++ b/Source/Orts.Parsers.Msts/Interpolator.cs @@ -28,7 +28,7 @@ namespace Orts.Parsers.Msts public class Interpolator { float[] X; // must be in increasing order - float[] Y; + public float[] Y; float[] Y2; int Size; // number of values populated int PrevIndex; // used to speed up repeated evaluations with similar x values diff --git a/Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/PowerSupplies/DieselEngine.cs b/Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/PowerSupplies/DieselEngine.cs index 60e8382e8..358d3d85d 100644 --- a/Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/PowerSupplies/DieselEngine.cs +++ b/Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/PowerSupplies/DieselEngine.cs @@ -864,7 +864,17 @@ public virtual void Parse(STFReader stf, MSTSDieselLocomotive loco) break; case "dieselpowertab": DieselPowerTab = new Interpolator(stf);initLevel |= SettingsFlags.DieselPowerTab; break; case "dieselconsumptiontab": DieselConsumptionTab = new Interpolator(stf);initLevel |= SettingsFlags.DieselConsumptionTab; break; - case "throttlerpmtab": ThrottleRPMTab = new Interpolator(stf); initLevel |= SettingsFlags.ThrottleRPMTab; break; + case "throttlerpmtab": + ThrottleRPMTab = new Interpolator(stf); + initLevel |= SettingsFlags.ThrottleRPMTab; + var size = ThrottleRPMTab.GetSize(); + var precY = ThrottleRPMTab.Y[0]; + for (int i = 1; i < size; i++) + { + if (ThrottleRPMTab.Y[i] <= precY) ThrottleRPMTab.Y[i] = precY + 1; + precY = ThrottleRPMTab.Y[i]; + } + break; case "dieseltorquetab": DieselTorqueTab = new Interpolator(stf); initLevel |= SettingsFlags.DieselTorqueTab; break; case "minoilpressure": DieselMinOilPressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, 0); initLevel |= SettingsFlags.MinOilPressure; break; case "maxoilpressure": DieselMaxOilPressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, 0); initLevel |= SettingsFlags.MaxOilPressure; break;