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()
            });
        }
Ejemplo n.º 5
0
        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;
 }
Ejemplo n.º 7
0
 public ShiftpointRange GetRangeFor(ResponsivenessMode responsivenessMode, AggressivenessLevel aggressivenessLevel)
 => _rangeForMode[responsivenessMode].AsModifiedBy(_bumpPercentageForAggressivenessLevel[aggressivenessLevel]);