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