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")
));
}