summaryrefslogtreecommitdiff
path: root/src/match_up/controller.py
diff options
context:
space:
mode:
authorKaran Jayachandra <mail@karanjayachandra.com>2024-12-02 19:50:15 +0000
committerKaran Jayachandra <mail@karanjayachandra.com>2024-12-02 19:50:15 +0000
commitfd03b6dd91be67b96356827a2ce4b7728d2e25ea (patch)
tree8d9cf47a6bbac47fe9eeffbc0d92a1eef4323572 /src/match_up/controller.py
parent7b7f8cdef5f035ccdab714059c1a6c54b80c4ba3 (diff)
parent662e0854a6c61503954aa659e1c932db69443a06 (diff)
Merge branch 'develop' into 'main'
Develop See merge request KaranJayachandra/match_up!12
Diffstat (limited to 'src/match_up/controller.py')
-rw-r--r--src/match_up/controller.py56
1 files changed, 39 insertions, 17 deletions
diff --git a/src/match_up/controller.py b/src/match_up/controller.py
index 0e08cae..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_games
+from match_up.utilities import (
+ _create_placeholders,
+ _select_players,
+ _create_shuffle_games,
+ _create_team_games,
+ separate_teams_and_players,
+ split_courts,
+)
class RoundGenerator:
@@ -30,21 +37,31 @@ class RoundGenerator:
return games
def _create_active_games(
- self, total_levels: int
+ self, total_levels: int, group_by_team: bool
) -> Tuple[list[Game], list[Player]]:
- active_courts, _ = self.courts.separate_courts()
- used_courts, _ = self._separate_courts(active_courts)
+ active_courts = self.courts.separate_courts()[0]
+ used_courts = self._separate_courts(active_courts)[0]
required_player_count = len(used_courts) * PLAYER_PER_COURT
active_players = self.players.get_players()
- selected_players = _select_players(active_players, required_player_count)
- games = _create_games(used_courts, selected_players, total_levels)
- return games, selected_players
-
- def _generate_proposal(self, total_levels: int) -> Tuple[list[Game], list[Player]]:
- inactive_games = self._create_inactive_games()
- active_games, selected_players = self._create_active_games(total_levels)
- games = active_games + inactive_games
- games.sort(key=attrgetter("court"))
+ if group_by_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)
+ games = _create_shuffle_games(used_courts, selected_players, total_levels)
return games, selected_players
def update_player_list(self, csv_location):
@@ -55,10 +72,15 @@ class RoundGenerator:
self.proposed_players = []
return self.games
- def propose(self, levels: int) -> list[Game]:
- proposal = self._generate_proposal(levels)
- self.proposed_games = proposal[0]
- self.proposed_players = proposal[1]
+ 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
+ )
+ games = active_games + inactive_games
+ games.sort(key=attrgetter("court"))
+ self.proposed_games = games
+ self.proposed_players = selected_players
return self.proposed_games
def confirm(self) -> list[Game]: