Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static Dictionary<uint, Dictionary<uint, List<GpoControlPoint>>> ParseRoutes(IEnumerable<GpoControlPoint> controlPoints)
- {
- Dictionary<uint, Dictionary<uint, List<GpoControlPoint>>> routes = new Dictionary<uint, Dictionary<uint, List<GpoControlPoint>>>();
- Dictionary<uint, List<GpoControlPoint>> allRouteFlags = new Dictionary<uint, List<GpoControlPoint>>();
- List<GpoControlPoint> noSgidFlags = new List<GpoControlPoint>();
- bool hasRoutes = false;
- foreach (var controlPoint in controlPoints) {
- if (controlPoint.UnableToChangeTeam)
- controlPoint.SupplyGroupId = 0;
- uint group = 0, random = 0, route = 0;
- if (controlPoint.SupplyGroupId > 0) {
- string s = controlPoint.SupplyGroupId.ToString();
- if (s.Length >= 1)
- group = UInt32.Parse(s.Substring(0, 1), CultureInfo.InvariantCulture);
- if (s.Length >= 2)
- random = UInt32.Parse(s.Substring(1, 1), CultureInfo.InvariantCulture);
- if (s.Length >= 3)
- route = UInt32.Parse(s.Substring(2, 1), CultureInfo.InvariantCulture);
- if (route == 0) {
- if (allRouteFlags.ContainsKey(group))
- allRouteFlags[group].Add(controlPoint);
- else
- allRouteFlags.Add(group, new List<GpoControlPoint>() { controlPoint });
- continue;
- } else {
- hasRoutes = true;
- }
- if (routes.ContainsKey(route)) {
- if (routes[route].ContainsKey(group)) {
- routes[route][group].Add(controlPoint);
- } else {
- routes[route].Add(group, new List<GpoControlPoint>() { controlPoint });
- }
- } else {
- routes.Add(route, new Dictionary<uint, List<GpoControlPoint>>());
- routes[route].Add(group, new List<GpoControlPoint>() { controlPoint });
- }
- } else {
- noSgidFlags.Add(controlPoint);
- }
- }
- if (!hasRoutes) {
- routes.Add(1, new Dictionary<uint, List<GpoControlPoint>>());
- }
- foreach (var kvr in routes.ToDictionary(x => x.Key, x => x.Value)) {
- foreach (var kv in allRouteFlags) {
- if (routes[kvr.Key].ContainsKey(kv.Key))
- routes[kvr.Key][kv.Key].AddRange(kv.Value);
- else
- routes[kvr.Key].Add(kv.Key, kv.Value);
- }
- }
- foreach (var kvr in routes.ToDictionary(x => x.Key, x => x.Value)) {
- uint lastIndex = 0;
- if (kvr.Value.Count > 0)
- lastIndex = kvr.Value.Select(x => x.Key).OrderBy(x => x).Last() + 1;
- foreach (var flag in noSgidFlags) {
- if (flag.Team == 2) {
- if (routes[kvr.Key].ContainsKey(lastIndex))
- routes[kvr.Key][lastIndex].Add(flag);
- else
- routes[kvr.Key].Add(lastIndex, new List<GpoControlPoint>() { flag });
- } else {
- if (routes[kvr.Key].ContainsKey(0))
- routes[kvr.Key][0].Add(flag);
- else
- routes[kvr.Key].Add(0, new List<GpoControlPoint>() { flag });
- }
- }
- }
- return routes;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement