summaryrefslogtreecommitdiff
path: root/src/match_up/controller.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/match_up/controller.py')
-rw-r--r--src/match_up/controller.py54
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