diff options
Diffstat (limited to 'src/match_up/controller.py')
| -rw-r--r-- | src/match_up/controller.py | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/src/match_up/controller.py b/src/match_up/controller.py index 4c7119f..b00bf6b 100644 --- a/src/match_up/controller.py +++ b/src/match_up/controller.py @@ -2,7 +2,14 @@ from typing import Tuple from operator import attrgetter from match_up.data import Game, PLAYER_PER_COURT from match_up.model import Player, PlayerList, CourtList -from match_up.utilities import _create_placeholders, _select_players, _create_shuffle_games, _create_team_games +from match_up.utilities import ( + _create_placeholders, + _select_players, + _create_shuffle_games, + _create_team_games, + separate_teams_and_players, + split_courts, +) class RoundGenerator: @@ -37,33 +44,20 @@ class RoundGenerator: required_player_count = len(used_courts) * PLAYER_PER_COURT active_players = self.players.get_players() if group_by_team: - unique_team_id = {player.team for player in active_players} - grouped_players_by_team = {team_id: [] for team_id in unique_team_id} - for player in active_players: - team = player.team - grouped_players_by_team[team].append(player) - active_teams = {} - players_without_team = [] - for team_id in grouped_players_by_team: - if team_id == 0: - players_without_team += [player for player in grouped_players_by_team[team_id]] - else: - if len(grouped_players_by_team[team_id]) >= 4: - active_teams[team_id] = grouped_players_by_team[team_id] - else: - players_without_team += [player for player in grouped_players_by_team[team_id]] - - regular_courts = len(used_courts) - len(active_teams) - reg_courts = {A:N for (A,N) in [x for x in used_courts.items()][:regular_courts]} - team_courts = {A:N for (A,N) in [x for x in used_courts.items()][regular_courts:]} - - required_player_count = required_player_count - (PLAYER_PER_COURT * len(active_teams)) - selected_players_without_team = _select_players(players_without_team, required_player_count) - regular_games = _create_shuffle_games(reg_courts, selected_players_without_team, total_levels) - - team_games, selected_players_with_team = _create_team_games(team_courts, active_teams) - - selected_players = selected_players_without_team + selected_players_with_team + active_teams, team_less_players = separate_teams_and_players(active_players) + regular_court_count = len(used_courts) - len(active_teams) + regular_courts, team_courts = split_courts(used_courts, regular_court_count) + new_player_count = required_player_count - ( + PLAYER_PER_COURT * len(active_teams) + ) + regular_players = _select_players(team_less_players, new_player_count) + regular_games = _create_shuffle_games( + regular_courts, regular_players, total_levels + ) + team_games, selected_team_players = _create_team_games( + team_courts, active_teams + ) + selected_players = regular_players + selected_team_players games = regular_games + team_games else: selected_players = _select_players(active_players, required_player_count) @@ -80,7 +74,9 @@ class RoundGenerator: def propose(self, levels: int, group_by_team: bool) -> list[Game]: inactive_games = self._create_inactive_games() - active_games, selected_players = self._create_active_games(levels, group_by_team) + active_games, selected_players = self._create_active_games( + levels, group_by_team + ) games = active_games + inactive_games games.sort(key=attrgetter("court")) self.proposed_games = games |
