private int GetTeamDifference(ref int fromTeam, ref int toTeam)
{
// 0 vs 0 means assign the max team to fromTeam and min team to toTeam and return the difference
if (fromTeam < 0 || fromTeam > 4) return 0;
if (toTeam < 0 || toTeam > 4) return 0;
if (fromTeam != 0 && toTeam != 0 && fromTeam == toTeam) return 0;
if (fromTeam != 0 && toTeam != 0) {
List<PlayerModel> from = null;
List<PlayerModel> to = null;
from = GetTeam(fromTeam);
if (from == null) return 0;
to = GetTeam(toTeam);
if (to == null) return 0;
return (from.Count - to.Count);
}
// otherwise find min and max
List<TeamRoster> teams = new List<TeamRoster>();
int big = 1;
teams.Add(new TeamRoster(1, fTeam1));
teams.Add(new TeamRoster(2, fTeam2));
if (IsSQDM()) {
teams.Add(new TeamRoster(3, fTeam3));
teams.Add(new TeamRoster(4, fTeam4));
big = 3;
}
teams.Sort(delegate(TeamRoster lhs, TeamRoster rhs) {
// Sort ascending order by count
if (lhs == null || rhs == null) return 0;
if (lhs.Roster.Count < rhs.Roster.Count) return -1;
if (lhs.Roster.Count > rhs.Roster.Count) return 1;
return 0;
});
TeamRoster minTeam = teams[0];
TeamRoster maxTeam = teams[big];
// assert(fromTeam == 0 && toTeam == 0)
toTeam = minTeam.Team;
fromTeam = maxTeam.Team;
return (maxTeam.Roster.Count - minTeam.Roster.Count);
}