private async Task DeleteAirport(Airport airport) { if (Airports.Any() && Airports.Contains(airport)) { await AirportService.DeleteAirport(airport.Id, new System.Threading.CancellationToken()).ConfigureAwait(false); Airports.Remove(airport); } HasSavedItems = Airports != null && Airports.Any(); }
public FlightRoute FindShortestRoute(string startingAirport, string destinationAirport) { if (Airports.Contains(startingAirport) && Airports.Contains(destinationAirport)) { var result = new List <FlightRoute>(); var destinationList = Routes.Where(w => w.Item2 == destinationAirport); destinationList.ToList().ForEach(i => result.Add(new FlightRoute(i))); while (result.Where(w => !w.Complete).Count() > 0) { FlightRoute[] tResult = new FlightRoute[result.Count - 1]; result.CopyTo(tResult, 0); foreach (var cRoute in tResult.Where(w => !w.Complete)) { var connectingFlights = Routes.Where(w => cRoute.Flights.Last().Item1 == w.Item2).ToList(); for (var j = 0; j < connectingFlights.Count(); j++) { if (j == 1) { cRoute.Flights.Add(connectingFlights[j]); if (cRoute.Flights.Count(w => w.Item1 == startingAirport || w.Item2 == startingAirport) > 0) { cRoute.Complete = true; } } else { FlightRoute clone = (FlightRoute)cRoute.Clone(); clone.Flights.Add(connectingFlights[j]); if (clone.Flights.Count(w => w.Item1 == startingAirport || w.Item2 == startingAirport) > 0) { clone.Complete = true; } result.Add(clone); } } } } var finalResult = result.OrderBy(o => o.Flights.Count()).Where(w => w.Complete).First(); return(finalResult); } else { throw new Exception($"Airport {startingAirport} does not exist in listed airports!"); } }
private int MatchAirports(IEnumerable <airport> rgap) { int cUniqueAirports = 0; HashSet <string> hsThisFlight = new HashSet <string>(); foreach (airport ap in rgap) { // Dedupe as we go based on latitude/longitude, ignoring non-ports. // We don't actually need the facility name here - so we can just round off the latitude/longitude and distinguish by type code. // Note: this can differ slightly from Visited Airports counts because for achievements, we're ignoring flights in training devices; visited airports doesn't ignore them. if (ap.IsPort) { string szHash = ap.GeoHashKey; if (!Airports.Contains(szHash)) { Airports.Add(ap.GeoHashKey); cUniqueAirports++; } hsThisFlight.Add(szHash); string szCountry = ap.CountryDisplay; string szAdmin1 = ap.Admin1Display; // Keep track of visited countries/regions if (!String.IsNullOrWhiteSpace(szCountry)) { if (!GeoRegions.ContainsKey(szCountry)) { GeoRegions[szCountry] = new HashSet <string>(); } if (!String.IsNullOrWhiteSpace(szAdmin1) && !GeoRegions[szCountry].Contains(szAdmin1)) { GeoRegions[szCountry].Add(szAdmin1); } } } } return(hsThisFlight.Count); }
//returns if an airport is active (built) public static Boolean IsAirportActive(Airport airport) { return(airport.Profile.Period.From <= GameObject.GetInstance().GameTime&& airport.Profile.Period.To > GameObject.GetInstance().GameTime&& Airports.Contains(airport)); }
public override void ExamineFlight(ExaminerFlightRow cfr) { if (cfr == null) { throw new ArgumentNullException("cfr"); } DateTime dtFlight = cfr.dtFlight.Date; if (AutoDateRange) { StartDate = StartDate.EarlierDate(dtFlight); EndDate = EndDate.LaterDate(dtFlight); } // ignore anything not in a real aircraft or outside of our date range if (!cfr.fIsRealAircraft || dtFlight.CompareTo(StartDate) < 0 || dtFlight.CompareTo(EndDate) > 0) { return; } miFlightCount.AddEvent(1); string szDateKey = dtFlight.YMDString(); // Initialize the current streak, if needed if (FirstDayOfCurrentStreak == null || LastDayOfCurrentStreak == null) { FirstDayOfCurrentStreak = LastDayOfCurrentStreak = dtFlight; } // Extend the current streak if this flight is either on the first date or on a day before the first date; if it isn't one of those, then end the current streak if (dtFlight.CompareTo(FirstDayOfCurrentStreak.Value.Date) == 0 || dtFlight.CompareTo(FirstDayOfCurrentStreak.Value.AddDays(-1).Date) == 0) { FirstDayOfCurrentStreak = dtFlight; } else { FirstDayOfCurrentStreak = LastDayOfCurrentStreak = dtFlight; } int cDaysCurrentStreak = CurrentFlyingDayStreak; if (cDaysCurrentStreak > 1 && cDaysCurrentStreak > FlyingDayStreak) { FirstFlyingDayOfStreak = FirstDayOfCurrentStreak; LastFlyingDayOfStreak = LastDayOfCurrentStreak; } // Distinct flights on dates if (FlightDates.ContainsKey(szDateKey)) { FlightDates[szDateKey] = FlightDates[szDateKey] + 1; } else { FlightDates[szDateKey] = 1; } if (FlightDates[szDateKey] > MaxFlightsPerDay) { int cFlights = FlightDates[szDateKey]; MaxFlightsPerDay = cFlights; miMostFlightsInDay.Progress = cFlights; miMostFlightsInDay.MatchingEventText = String.Format(CultureInfo.InvariantCulture, Resources.Achievements.RecentAchievementMostFlightsInDay, cFlights, cfr.dtFlight); miMostFlightsInDay.Query = new FlightQuery(Username) { DateRange = FlightQuery.DateRanges.Custom, DateMin = cfr.dtFlight, DateMax = cfr.dtFlight }; } // Longest flight if (cfr.Total > LongestFlightLength) { LongestFlightLength = cfr.Total; miLongestFlight.Progress = 1; miLongestFlight.MatchingEventID = cfr.flightID; miLongestFlight.MatchingEventText = String.Format(CultureInfo.CurrentCulture, Resources.Achievements.RecentAchievementsLongestFlight, cfr.Total, dtFlight); } // Distinct aircraft/models DistinctAircraft.Add(cfr.idAircraft); DistinctModels.Add(cfr.idModel); DistinctICAO.Add(cfr.szFamily); // Furthest Flight & airport computations. AirportList al = AirportListOfRoutes.CloneSubset(cfr.Route, true); double distance = al.DistanceForRoute(); if (distance > FurthestFlightDistance) { FurthestFlightDistance = distance; miFurthestFlight.Progress = 1; miFurthestFlight.MatchingEventID = cfr.flightID; miFurthestFlight.MatchingEventText = String.Format(CultureInfo.CurrentCulture, Resources.Achievements.RecentAchievementsFurthestFlight, distance, dtFlight); } int cUniqueAirports = 0; HashSet <string> hsThisFlight = new HashSet <string>(); foreach (airport ap in al.UniqueAirports) { // Dedupe as we go based on latitude/longitude, ignoring non-ports. // We don't actually need the facility name here - so we can just round off the latitude/longitude and distinguish by type code. // Note: this can differ slightly from Visited Airports counts because for achievements, we're ignoring flights in training devices; visited airports doesn't ignore them. if (ap.IsPort) { string szHash = ap.GeoHashKey; if (!Airports.Contains(szHash)) { Airports.Add(ap.GeoHashKey); cUniqueAirports++; } hsThisFlight.Add(szHash); } } int cAirportsThisFlight = hsThisFlight.Count; if (cAirportsThisFlight > MostAirportsFlightCount) { MostAirportsFlightCount = cAirportsThisFlight; miMostAirportsFlight.MatchingEventID = cfr.flightID; miMostAirportsFlight.Progress = 1; miMostAirportsFlight.MatchingEventText = String.Format(CultureInfo.CurrentCulture, Resources.Achievements.RecentAchievementsAirportsOnFlight, cAirportsThisFlight, dtFlight.ToShortDateString()); miMostAirportsFlight.Query = new FlightQuery(Username) { DateRange = FlightQuery.DateRanges.Custom, DateMax = dtFlight, DateMin = dtFlight }; } }
public bool ContainsAirport(string name) { return(Airports.Contains(name)); }