public SuggestedKickdownAction GetActionFor(ResponsivenessMode responsivenessMode, PedalPressure pedalPressure, Rpm currentRpm) { switch (responsivenessMode) { case ResponsivenessMode.Comfort: if (pedalPressure.Value > SingularKickdownThresholdInComfortMode && currentRpm.Value >= SingularKickdownRpmInComfortMode) { return(SuggestedKickdownAction.Singular); } break; case ResponsivenessMode.Sport: if (pedalPressure.Value >= DoubleKickdownThresholdInSportsMode && currentRpm.Value >= DoubleKickdownRpmInSportMode) { return(SuggestedKickdownAction.Double); } else if (pedalPressure.Value >= SingularKickdownThresholdInSportsMode && currentRpm.Value >= SingularKickdownRpmInSportMode) { return(SuggestedKickdownAction.Singular); } break; } return(SuggestedKickdownAction.None); }
public void ReturnsProperRangeForModeAndAggressivenessLevel(ResponsivenessMode selectedMode, AggressivenessLevel selectedAggressiveness, double lowerShiftPoint, double upperShiftPoint) { var characteristics = new EngineCharacteristics(); var characteristicsRange = characteristics.GetRangeFor(selectedMode, selectedAggressiveness); Assert.AreEqual(lowerShiftPoint, characteristicsRange.LowerShiftPoint.Value); Assert.AreEqual(upperShiftPoint, characteristicsRange.UpperShiftPoint.Value); }
public IReadOnlyCollection <IEvent> EnterSport() { if (_currentMode == ResponsivenessMode.Sport) { throw new DomainRuleViolatedException("Sport mode was already selected"); } _currentMode = ResponsivenessMode.Sport; return(new List <IEvent> { new SportModeEntered() }); }
public IReadOnlyCollection <IEvent> EnterEconomic() { if (_currentMode == ResponsivenessMode.Economic) { throw new DomainRuleViolatedException("Economic mode was already selected"); } _currentMode = ResponsivenessMode.Economic; return(new List <IEvent> { new EconomicModeEntered() }); }
public void SetResponsivenessMode(ResponsivenessMode mode) { switch (mode) { case ResponsivenessMode.Comfort: _eventBus.SendEvent(_responsivenessModeSelector.EnterComfort()); break; case ResponsivenessMode.Sport: _eventBus.SendEvent(_responsivenessModeSelector.EnterSport()); break; case ResponsivenessMode.Economic: _eventBus.SendEvent(_responsivenessModeSelector.EnterEconomic()); break; } }
public ResponsivenessModeSelector() { _currentMode = ResponsivenessMode.Comfort; _currentAggressivenessLevel = AggressivenessLevel.First; }
public ShiftpointRange GetRangeFor(ResponsivenessMode responsivenessMode, AggressivenessLevel aggressivenessLevel) => _rangeForMode[responsivenessMode].AsModifiedBy(_bumpPercentageForAggressivenessLevel[aggressivenessLevel]);