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); }
/// <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); }