private double GetAverageTicketLossRate(int team, bool verbose)
{
if (team < 1 || team > 2) return 0;
double rate = 0;
try {
PerModeSettings perMode = GetPerModeSettings();
if (perMode.TicketLossSampleCount < MIN_SAMPLE_COUNT) return 0;
List<double> copy = null;
lock (fAverageTicketLoss) {
while (fAverageTicketLoss[team].Count > perMode.TicketLossSampleCount) {
fAverageTicketLoss[team].Dequeue();
}
copy = new List<double>(fAverageTicketLoss[team].ToArray());
}
// If not enough samples, force average to 0
if (copy.Count < perMode.TicketLossSampleCount) return 0;
String debug = null;
foreach (double sample in copy) {
rate = rate + sample;
if (verbose) {
if (debug == null) {
debug = "[" + sample.ToString("F2");
} else {
debug = debug + "," + sample.ToString("F2");
}
}
}
double actual = Math.Max(1.0, copy.Count);
rate = (rate / actual) * 60.0; // loss per minute
if (verbose) {
if (debug != null) DebugWrite("^7" + GetTeamName(team) + " (" + copy.Count + ") = " + debug + "]", 8);
}
} catch (Exception e) {
ConsoleException(e);
}
return rate;
}