From a5f8c71d3a60f7a0dc1b4c7951571434d7d68e4b Mon Sep 17 00:00:00 2001 From: fheinrich <fheinrich@techfak.de> Date: Thu, 22 Feb 2024 16:08:25 +0100 Subject: [PATCH] If number of added player is more than study capacity: create new study --- overcooked_simulator/__main__.py | 20 +++++++++---------- overcooked_simulator/example_study_server.py | 19 +++++++++++++----- .../game_content/study/study_config.yaml | 2 +- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/overcooked_simulator/__main__.py b/overcooked_simulator/__main__.py index 339b8234..c5a6343f 100644 --- a/overcooked_simulator/__main__.py +++ b/overcooked_simulator/__main__.py @@ -88,16 +88,16 @@ def main(cli_args=None): print("Start PyGame GUI:") pygame_gui_2 = Process(target=start_pygame_gui, args=(cli_args,)) pygame_gui_2.start() - # - # print("Start PyGame GUI:") - # pygame_gui_3 = Process(target=start_pygame_gui, args=(cli_args,)) - # pygame_gui_3.start() - while ( - pygame_gui.is_alive() - and pygame_gui_2.is_alive() - # and pygame_gui_3.is_alive() - ): - time.sleep(1) + # # + print("Start PyGame GUI:") + pygame_gui_3 = Process(target=start_pygame_gui, args=(cli_args,)) + pygame_gui_3.start() + # while ( + # pygame_gui.is_alive() + # and pygame_gui_2.is_alive() + # # and pygame_gui_3.is_alive() + # ): + # time.sleep(1) while pygame_gui.is_alive(): time.sleep(1) diff --git a/overcooked_simulator/example_study_server.py b/overcooked_simulator/example_study_server.py index 5d24526d..4b7c82f4 100644 --- a/overcooked_simulator/example_study_server.py +++ b/overcooked_simulator/example_study_server.py @@ -101,9 +101,11 @@ class StudyState: len(self.participant_id_to_player_info) == self.study_config["num_players"] ) - def can_add_participant(self, participant_id: int) -> bool: - return len(self.participant_id_to_player_info) < self.study_config["num_players"] - + def can_add_participant(self, num_participants: int) -> bool: + filled = self.num_connected_players + num_participants <= self.study_config["num_players"] + print(self.num_connected_players, num_participants, self.study_config["num_players"]) + print("CAN ADD", self, filled) + return filled and not self.is_full def create_env(self, level): with open(ROOT_DIR / "game_content" / level["item_info_path"], "r") as file: item_info = file.read() @@ -239,6 +241,9 @@ class StudyState: for websocket in self.websockets.values(): websocket.close() + def __repr__(self): + return f"Study({self.current_running_env['env_id']})" + class StudyManager: def __init__(self): @@ -257,11 +262,14 @@ class StudyManager: def add_participant(self, participant_id: str, number_players: int): player_info = None - if all([s.is_full for s in self.running_studies]): + if not self.running_studies or all([not s.can_add_participant(number_players) for s in self.running_studies]): self.create_study() + print("all", self.running_studies) + for study in self.running_studies: - if not study.is_full: + if study.can_add_participant(number_players): + print("connect", study) player_info = study.add_participant(participant_id, number_players) self.participant_id_to_study_map[participant_id] = study return player_info @@ -271,6 +279,7 @@ class StudyManager: assigned_study.player_finished_level(participant_id) def get_participant_game_connection(self, participant_id: str): + print(self.participant_id_to_study_map) assigned_study = self.participant_id_to_study_map[participant_id] player_info, last_level = assigned_study.get_connection(participant_id) return player_info, last_level diff --git a/overcooked_simulator/game_content/study/study_config.yaml b/overcooked_simulator/game_content/study/study_config.yaml index 0f6b6e76..8fb376a1 100644 --- a/overcooked_simulator/game_content/study/study_config.yaml +++ b/overcooked_simulator/game_content/study/study_config.yaml @@ -20,5 +20,5 @@ levels: name: "Level 4-2: Dark" -num_players: 6 +num_players: 2 num_bots: 2 -- GitLab