private CitationSeverity CalculateSeverity(ITrafficState trafficState, ILegalEntity citee)
    {
        int speedDiff = trafficState.IncidentSpeed - trafficState.SpeedLimit;

        // If it's the citee's birthday, knock 5 MPH off of their speed diff.
        if (citee.BirthDate.Month == _calendar.CurrentDate.Month &&
            citee.BirthDate.Day == _calendar.CurrentDate.Day)
        {
            speedDiff -= 5;
        }

        CitationSeverity severity;

        if (speedDiff > 25)
        {
            severity = CitationSeverity.Large;
        }
        else if (speedDiff > 10)
        {
            severity = CitationSeverity.Medium;
        }
        else if (speedDiff > 0)
        {
            severity = CitationSeverity.Small;
        }
        else
        {
            severity = CitationSeverity.None;
        }

        return(severity);
    }
    public IEnumerable <ICitation> IssueCitations(ITrafficState trafficState, ILegalEntity citee)
    {
        List <ICitation> citations;

        citations = TrafficLaws
                    .Where(x => x.ShouldIssueCitation(trafficState, citee))
                    .Select(x => x.CreateCitation(trafficState, citee, this))
                    .ToList();

        return(citations);
    }
Example #3
0
 /// <summary>
 /// 檢查是否可以切換燈號
 /// </summary>
 /// <param name="state">目前燈號</param>
 /// <returns>是否可以切換</returns>
 public bool ChkContext(ITrafficState state)
 {
     return(state.GetMessage() == MessageEnum.Red);
 }
 public ICitation CreateCitation(ITrafficState trafficState, ILegalEntity citee, ITicketer issuer)
 {
     return(new SpeedingCitation(_calendar, issuer, citee, CalculateSeverity(trafficState, citee)));
 }
    public bool ShouldIssueCitation(ITrafficState trafficState, ILegalEntity citee)
    {
        var severity = CalculateSeverity(trafficState, citee);

        return(severity != CitationSeverity.None);
    }