44using ETS2LA . Telemetry ;
55using ETS2LA . Settings . Global ;
66using ETS2LA . Game ;
7- using ETS2LA . Notifications ;
7+ using ETS2LA . Logging ;
88
99namespace ETS2LA . State ;
1010
@@ -151,6 +151,31 @@ private void RoundToNearestUnit()
151151 DesiredSpeed = ( float ) Math . Round ( DesiredSpeed ) ; // Round to nearest m/s
152152 break ;
153153 }
154+
155+ if ( DesiredSpeed < 0 )
156+ DesiredSpeed = 0 ;
157+ }
158+
159+ private float SnapTo10s ( float increase )
160+ {
161+ if ( ! stateSettings . SnapTo10s )
162+ return DesiredSpeed + increase ;
163+
164+ float currentSpeedInDisplayUnits = UnitConversions . FromScientificUnits ( UnitType . Speed , DesiredSpeed , DisplayUnits ) ;
165+ float newSpeedInDisplayUnits = currentSpeedInDisplayUnits + UnitConversions . FromScientificUnits ( UnitType . Speed , increase , DisplayUnits ) ;
166+ // When increasing by 2 from 37 we go:
167+ // 37 -> 39 -> 40 -> 42 -> 44
168+ float currentSpeed10s = ( float ) ( Math . Floor ( ( currentSpeedInDisplayUnits + 0.1f ) / 10 ) * 10 ) ;
169+ float newSpeed10s = ( float ) ( Math . Floor ( ( newSpeedInDisplayUnits + 0.1f ) / 10 ) * 10 ) ;
170+
171+ if ( currentSpeed10s != newSpeed10s && newSpeed10s > currentSpeed10s )
172+ {
173+ return UnitConversions . ToScientificUnits ( UnitType . Speed , newSpeed10s , DisplayUnits ) ;
174+ }
175+ else
176+ {
177+ return DesiredSpeed + increase ;
178+ }
154179 }
155180
156181 private void HandleSet ( object sender , ControlChangeEventArgs e )
@@ -191,13 +216,15 @@ private void HandleIncrease(object sender, ControlChangeEventArgs e)
191216 switch ( DisplayUnits )
192217 {
193218 case Units . Metric :
194- DesiredSpeed += UnitConversions . ToScientificUnits ( UnitType . Speed , 1.0f , Units . Metric ) ; // 1 km/h in m/s
219+ float increaseMetric = UnitConversions . ToScientificUnits ( UnitType . Speed , stateSettings . SpeedControlStepSize , Units . Metric ) ;
220+ DesiredSpeed = SnapTo10s ( increaseMetric ) ;
195221 break ;
196222 case Units . Imperial :
197- DesiredSpeed += UnitConversions . ToScientificUnits ( UnitType . Speed , 1.0f , Units . Imperial ) ; // 1 mph in m/s
223+ float increaseImperial = UnitConversions . ToScientificUnits ( UnitType . Speed , stateSettings . SpeedControlStepSize , Units . Imperial ) ;
224+ DesiredSpeed = SnapTo10s ( increaseImperial ) ;
198225 break ;
199226 case Units . Scientific :
200- DesiredSpeed += 1f ; // 1 m/s
227+ DesiredSpeed += stateSettings . SpeedControlStepSize ;
201228 break ;
202229 }
203230
@@ -219,13 +246,15 @@ private void HandleDecrease(object sender, ControlChangeEventArgs e)
219246 switch ( DisplayUnits )
220247 {
221248 case Units . Metric :
222- DesiredSpeed -= UnitConversions . ToScientificUnits ( UnitType . Speed , 1.0f , Units . Metric ) ; // 1 km/h in m/s
249+ float decreaseMetric = UnitConversions . ToScientificUnits ( UnitType . Speed , stateSettings . SpeedControlStepSize , Units . Metric ) ;
250+ DesiredSpeed = SnapTo10s ( - decreaseMetric ) ;
223251 break ;
224252 case Units . Imperial :
225- DesiredSpeed -= UnitConversions . ToScientificUnits ( UnitType . Speed , 1.0f , Units . Imperial ) ; // 1 mph in m/s
253+ float decreaseImperial = UnitConversions . ToScientificUnits ( UnitType . Speed , stateSettings . SpeedControlStepSize , Units . Imperial ) ;
254+ DesiredSpeed = SnapTo10s ( - decreaseImperial ) ;
226255 break ;
227256 case Units . Scientific :
228- DesiredSpeed -= 1f ; // 1 m/s
257+ DesiredSpeed -= stateSettings . SpeedControlStepSize ;
229258 break ;
230259 }
231260
0 commit comments