public string GetMostRoute(string homeSystem = null) { List <Mission> missions = missionMonitor.missions.ToList(); string mostSystem = null; decimal mostDistance = 0; string routeList = null; decimal routeDistance = 0; long mostCount = 0; List <long> missionids = new List <long>(); // List of mission IDs for the next system if (missions.Count > 0) { StarSystem curr = EDDI.Instance?.CurrentStarSystem; StarSystem dest = new StarSystem(); // Destination star system // Determine the number of missions per individual system List <string> systems = new List <string>(); // Mission systems List <int> systemsCount = new List <int>(); // Count of missions per system foreach (Mission mission in missions.Where(m => m.statusEDName == "Active").ToList()) { if (mission.destinationsystems != null && mission.destinationsystems.Any()) { foreach (DestinationSystem system in mission.destinationsystems) { int index = systems.IndexOf(system.name); if (index == -1) { systems.Add(system.name); systemsCount.Add(1); } else { systemsCount[index] += 1; } } } else if (mission.destinationsystem != string.Empty) { int index = systems.IndexOf(mission.destinationsystem); if (index == -1) { systems.Add(mission.destinationsystem); systemsCount.Add(1); } else { systemsCount[index] += 1; } } } // Sort the 'most' systems by distance SortedList <decimal, string> mostList = new SortedList <decimal, string>(); // List of 'most' systems, sorted by distance mostCount = systemsCount.Max(); for (int i = 0; i < systems.Count(); i++) { if (systemsCount[i] == mostCount) { dest = StarSystemSqLiteRepository.Instance.GetOrCreateStarSystem(systems[i], true); if (dest != null) { mostList.Add(CalculateDistance(curr, dest), systems[i]); } } } // Nearest 'most' system is first in the list mostSystem = mostList.Values.FirstOrDefault(); mostDistance = mostList.Keys.FirstOrDefault(); // Calculate the missions route using the 'Repetitive Nearest Neighbor' Algorithim (RNNA) mostList.Add(0, curr?.systemname); if (missionMonitor.CalculateRNNA(mostList.Values.ToList(), homeSystem)) { routeList = missionMonitor.missionsRouteList; routeDistance = missionMonitor.missionsRouteDistance; Logging.Debug("Calculated Route Selected = " + routeList + ", Total Distance = " + routeDistance); if (homeSystem != null) { mostSystem = routeList?.Split('_')[0]; mostDistance = mostList.Keys[mostList.Values.ToList().IndexOf(mostSystem)]; } // Set destination variables (route already set) missionMonitor.UpdateDestinationData(mostSystem, null, mostDistance); } else { routeList = mostSystem; routeDistance = mostDistance; Logging.Debug("Unable to meet missions route calculation criteria"); // Set route and destination variables missionMonitor.SetNavigationData(mostSystem, null, mostDistance); } // Get mission IDs for 'most' system missionids = missionMonitor.GetSystemMissionIds(mostSystem); } EDDI.Instance.enqueueEvent(new RouteDetailsEvent(DateTime.Now, "most", mostSystem, routeList, mostCount, mostDistance, routeDistance, missionids)); return(mostSystem); }