PRoConEvents.MULTIbalancer.GetTeamDifference C# (CSharp) Method

GetTeamDifference() private method

private GetTeamDifference ( int &fromTeam, int &toTeam ) : int
fromTeam int
toTeam int
return int
        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);
        }
MULTIbalancer