PRoConEvents.MULTIbalancer.ListSideBySide C# (CSharp) Method

ListSideBySide() private method

private ListSideBySide ( List us, List ru, bool useScrambledSquad, bool useSquadSort ) : void
us List
ru List
useScrambledSquad bool
useSquadSort bool
return void
        private void ListSideBySide(List<PlayerModel> us, List<PlayerModel> ru, bool useScrambledSquad, bool useSquadSort)
        {
            int max = Math.Max(us.Count, ru.Count);

            // Sort lists by specified metric, which might have changed by now, oh well
            List<PlayerModel> all = new List<PlayerModel>();
            PlayerModel player = null;
            double usTotal = 0;
            foreach (PlayerModel u in us) {
            String en = u.Name;
            player = u;
            if (player == null) continue;
            all.Add(player);
            double stat = GetPlayerStat(player, ScrambleBy);
            /*
            switch (ScrambleBy) {
            case DefineStrong.RoundScore:
                stat = player.ScoreRound;
                break;
            case DefineStrong.RoundSPM:
                stat = player.SPMRound;
                break;
            case DefineStrong.RoundKills:
                stat = player.KillsRound;
                break;
            case DefineStrong.RoundKDR:
                stat = player.KDRRound;
                break;
            case DefineStrong.PlayerRank:
                stat = player.Rank;
                break;
            case DefineStrong.RoundKPM:
                stat = player.KPMRound;
                break;
            case DefineStrong.BattlelogSPM:
                stat = ((player.StatsVerified) ? player.SPM :player.SPMRound);
                break;
            case DefineStrong.BattlelogKDR:
                stat = ((player.StatsVerified) ? player.KDR :player.KDRRound);
                break;
            case DefineStrong.BattlelogKPM:
                stat = ((player.StatsVerified) ? player.KPM :player.KPMRound);
                break;
            default:
                break;
            }
            */
            usTotal = usTotal + stat;
            }
            double usAvg = usTotal / Math.Max(1, us.Count);

            double ruTotal = 0;
            foreach (PlayerModel r in ru) {
            String en = r.Name;
            player = r;
            if (player == null) continue;
            all.Add(player);
            double stat = GetPlayerStat(player, ScrambleBy);
            /*
            switch (ScrambleBy) {
            case DefineStrong.RoundScore:
                stat = player.ScoreRound;
                break;
            case DefineStrong.RoundSPM:
                stat = player.SPMRound;
                break;
            case DefineStrong.RoundKills:
                stat = player.KillsRound;
                break;
            case DefineStrong.RoundKDR:
                stat = player.KDRRound;
                break;
            case DefineStrong.PlayerRank:
                stat = player.Rank;
                break;
            case DefineStrong.RoundKPM:
                stat = player.KPMRound;
                break;
            case DefineStrong.BattlelogSPM:
                stat = ((player.StatsVerified) ? player.SPM :player.SPMRound);
                break;
            case DefineStrong.BattlelogKDR:
                stat = ((player.StatsVerified) ? player.KDR :player.KDRRound);
                break;
            case DefineStrong.BattlelogKPM:
                stat = ((player.StatsVerified) ? player.KPM :player.KPMRound);
                break;
            default:
                break;
            }
            */
            ruTotal = ruTotal + stat;
            }
            double ruAvg = ruTotal / Math.Max(1, ru.Count);

            String kstat = "?";
            switch (ScrambleBy) {
            case DefineStrong.RoundScore:
            all.Sort(DescendingRoundScore);
            kstat = "S";
            break;
            case DefineStrong.RoundSPM:
            all.Sort(DescendingRoundSPM);
            kstat = "SPM";
            break;
            case DefineStrong.RoundKills:
            all.Sort(DescendingRoundKills);
            kstat = "K";
            break;
            case DefineStrong.RoundKDR:
            all.Sort(DescendingRoundKDR);
            kstat = "KDR";
            break;
            case DefineStrong.PlayerRank:
            all.Sort(DescendingPlayerRank);
            kstat = "R";
            break;
            case DefineStrong.RoundKPM:
            all.Sort(DescendingRoundKPM);
            kstat = "KPM";
            break;
            case DefineStrong.BattlelogSPM:
            all.Sort(DescendingSPM);
            kstat = "bSPM";
            break;
            case DefineStrong.BattlelogKDR:
            all.Sort(DescendingKDR);
            kstat = "bKDR";
            break;
            case DefineStrong.BattlelogKPM:
            all.Sort(DescendingKPM);
            kstat = "bKPM";
            break;
            default:
            all.Sort(DescendingRoundScore);
            break;
            }
            List<String> allNames = new List<String>();
            foreach (PlayerModel p in all) {
            allNames.Add(p.Name); // sorted name list
            }

            // Sort teams

            if (useSquadSort) {
            us.Sort(delegate(PlayerModel lhs, PlayerModel rhs) { // ascending squad id
            if (lhs == null && rhs == null) return 0;
            if (lhs == null) return -1;
            if (rhs == null) return 1;

            int l = (useScrambledSquad) ? lhs.ScrambledSquad : lhs.Squad;
            int r = (useScrambledSquad) ? rhs.ScrambledSquad : rhs.Squad;
            if (l == 0 && r == 0) return 0;
            if (l == 0) l = 999; // 0 sorts to end
            if (r == 0) r = 999;
            if (l < r) return -1;
            if (l > r) return 1;
            return 0;
            });
            ru.Sort(delegate(PlayerModel lhs, PlayerModel rhs) { // ascending squad id
            if (lhs == null && rhs == null) return 0;
            if (lhs == null) return -1;
            if (rhs == null) return 1;

            int l = (useScrambledSquad) ? lhs.ScrambledSquad : lhs.Squad;
            int r = (useScrambledSquad) ? rhs.ScrambledSquad : rhs.Squad;
            if (l == 0 && r == 0) return 0;
            if (l == 0) l = 999; // 0 sorts to end
            if (r == 0) r = 999;
            if (l < r) return -1;
            if (l > r) return 1;
            return 0;
            });
            } else {
            us.Sort(delegate(PlayerModel lhs, PlayerModel rhs) { // descending position in allNames
            if (lhs == null && rhs == null) return 0;
            if (lhs == null) return -1;
            if (rhs == null) return 1;

            int l = allNames.IndexOf(lhs.Name)+1;
            int r = allNames.IndexOf(rhs.Name)+1;
            if (l == 0 && r == 0) return 0;
            if (l == 0) return 1; // 0 sorts to end
            if (r == 0) return 1;
            if (l < r) return -1;
            if (l > r) return 1;
            return 0;
            });
            ru.Sort(delegate(PlayerModel lhs, PlayerModel rhs) { // descending position in allNames
            if (lhs == null && rhs == null) return 0;
            if (lhs == null) return -1;
            if (rhs == null) return 1;

            int l = allNames.IndexOf(lhs.Name)+1;
            int r = allNames.IndexOf(rhs.Name)+1;
            if (l == 0 && r == 0) return 0;
            if (l == 0) return 1; // 0 sorts to end
            if (r == 0) return 1;
            if (l < r) return -1;
            if (l > r) return 1;
            return 0;
            });
            }

            for (int i = 0; i < max; ++i) {
            String u = " ";
            String r = " ";
            String xt = "";
            int sq = 0;
            if (i < us.Count) {
            try {
                player = us[i];
                xt = ExtractTag(player);
                if (!String.IsNullOrEmpty(xt)) {
                    xt = "[" + xt + "]" + player.Name;
                } else {
                    xt = player.Name;
                }
                sq = Math.Max(0, Math.Min(((useScrambledSquad) ? player.ScrambledSquad : player.Squad), SQUAD_NAMES.Length - 1));
            } catch (Exception e) { ConsoleException (e); }
            //u = xt + " (" + SQUAD_NAMES[sq] + ", " + kstat + ":#" + (allNames.IndexOf(player.Name)+1) + ")";
            u = "(" + GetSquadName(sq) + ", " + kstat + ":#" + (allNames.IndexOf(player.Name)+1) + ") " + xt;
            }
            if (i < ru.Count) {
            try {
                player = ru[i];
                xt = ExtractTag(player);
                if (!String.IsNullOrEmpty(xt)) {
                    xt = "[" + xt + "]" + player.Name;
                } else {
                    xt = player.Name;
                }
                sq = Math.Max(0, Math.Min(((useScrambledSquad) ? player.ScrambledSquad : player.Squad), SQUAD_NAMES.Length - 1));
            } catch (Exception e) { ConsoleException(e); }
            r = xt + " (" + GetSquadName(sq) + ", " + kstat + ":#" + (allNames.IndexOf(player.Name)+1) + ")";
            }
            ConsoleDump(String.Format("{0,-40} - {1,40}", u, r));
            }
            String divider = "----------------------------------------";
            ConsoleDump(String.Format("{0,-40} - {1,40}", divider, divider));
            if (usAvg != 0 && ruAvg != 0) ConsoleDump(String.Format("{0,-40} - {1,40}",
            "US AVG " + kstat + ":" + usAvg.ToString("F2"),
            "RU AVG " + kstat + ":" + ruAvg.ToString("F2")
            ));
        }
MULTIbalancer