Advertisement
Guest User

Untitled

a guest
Mar 19th, 2014
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.68 KB | None | 0 0
  1. public static Dictionary<uint, Dictionary<uint, List<GpoControlPoint>>> ParseRoutes(IEnumerable<GpoControlPoint> controlPoints)
  2. {
  3.     Dictionary<uint, Dictionary<uint, List<GpoControlPoint>>> routes = new Dictionary<uint, Dictionary<uint, List<GpoControlPoint>>>();
  4.     Dictionary<uint, List<GpoControlPoint>> allRouteFlags = new Dictionary<uint, List<GpoControlPoint>>();
  5.     List<GpoControlPoint> noSgidFlags = new List<GpoControlPoint>();
  6.     bool hasRoutes = false;
  7.  
  8.     foreach (var controlPoint in controlPoints) {
  9.         if (controlPoint.UnableToChangeTeam)
  10.             controlPoint.SupplyGroupId = 0;
  11.  
  12.         uint group = 0, random = 0, route = 0;
  13.         if (controlPoint.SupplyGroupId > 0) {
  14.             string s = controlPoint.SupplyGroupId.ToString();
  15.             if (s.Length >= 1)
  16.                 group = UInt32.Parse(s.Substring(0, 1), CultureInfo.InvariantCulture);
  17.             if (s.Length >= 2)
  18.                 random = UInt32.Parse(s.Substring(1, 1), CultureInfo.InvariantCulture);
  19.             if (s.Length >= 3)
  20.                 route = UInt32.Parse(s.Substring(2, 1), CultureInfo.InvariantCulture);
  21.  
  22.             if (route == 0) {
  23.                 if (allRouteFlags.ContainsKey(group))
  24.                     allRouteFlags[group].Add(controlPoint);
  25.                 else
  26.                     allRouteFlags.Add(group, new List<GpoControlPoint>() { controlPoint });
  27.  
  28.                 continue;
  29.             } else {
  30.                 hasRoutes = true;
  31.             }
  32.  
  33.             if (routes.ContainsKey(route)) {
  34.                 if (routes[route].ContainsKey(group)) {
  35.                     routes[route][group].Add(controlPoint);
  36.                 } else {
  37.                     routes[route].Add(group, new List<GpoControlPoint>() { controlPoint });
  38.                 }
  39.             } else {
  40.                 routes.Add(route, new Dictionary<uint, List<GpoControlPoint>>());
  41.                 routes[route].Add(group, new List<GpoControlPoint>() { controlPoint });
  42.             }
  43.         } else {
  44.             noSgidFlags.Add(controlPoint);
  45.         }
  46.     }
  47.  
  48.     if (!hasRoutes) {
  49.         routes.Add(1, new Dictionary<uint, List<GpoControlPoint>>());
  50.     }
  51.  
  52.     foreach (var kvr in routes.ToDictionary(x => x.Key, x => x.Value)) {
  53.         foreach (var kv in allRouteFlags) {
  54.             if (routes[kvr.Key].ContainsKey(kv.Key))
  55.                 routes[kvr.Key][kv.Key].AddRange(kv.Value);
  56.             else
  57.                 routes[kvr.Key].Add(kv.Key, kv.Value);
  58.         }
  59.     }
  60.  
  61.     foreach (var kvr in routes.ToDictionary(x => x.Key, x => x.Value)) {
  62.         uint lastIndex = 0;
  63.         if (kvr.Value.Count > 0)
  64.             lastIndex = kvr.Value.Select(x => x.Key).OrderBy(x => x).Last() + 1;
  65.  
  66.         foreach (var flag in noSgidFlags) {
  67.             if (flag.Team == 2) {
  68.                 if (routes[kvr.Key].ContainsKey(lastIndex))
  69.                     routes[kvr.Key][lastIndex].Add(flag);
  70.                 else
  71.                     routes[kvr.Key].Add(lastIndex, new List<GpoControlPoint>() { flag });
  72.             } else {
  73.                 if (routes[kvr.Key].ContainsKey(0))
  74.                     routes[kvr.Key][0].Add(flag);
  75.                 else
  76.                     routes[kvr.Key].Add(0, new List<GpoControlPoint>() { flag });
  77.             }
  78.         }
  79.     }
  80.  
  81.     return routes;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement