diff --git a/cooperative_cuisine/__main__.py b/cooperative_cuisine/__main__.py index 257ff656ae58f81e6ec88650132d910e091e8296..428f41ead855d5f4e2d64dafc1b8ff7de4035541 100644 --- a/cooperative_cuisine/__main__.py +++ b/cooperative_cuisine/__main__.py @@ -7,6 +7,7 @@ from cooperative_cuisine.utils import ( disable_websocket_logging_arguments, add_list_of_manager_ids_arguments, add_study_arguments, + add_gui_arguments, ) USE_STUDY_SERVER = True @@ -41,6 +42,7 @@ def start_pygame_gui(cli_args): cli_args.game_port, cli_args.manager_ids, CONNECT_WITH_STUDY_SERVER=USE_STUDY_SERVER, + debug=cli_args.debug, ) @@ -56,6 +58,7 @@ def main(cli_args=None): disable_websocket_logging_arguments(parser) add_list_of_manager_ids_arguments(parser) add_study_arguments(parser) + add_gui_arguments(parser) cli_args = parser.parse_args() diff --git a/cooperative_cuisine/pygame_2d_vis/gui.py b/cooperative_cuisine/pygame_2d_vis/gui.py index 9de8598ffba3c636f24c30e1240e123fa43f4ee4..9294b720e4574b899a1817cf60cad402acacce5d 100644 --- a/cooperative_cuisine/pygame_2d_vis/gui.py +++ b/cooperative_cuisine/pygame_2d_vis/gui.py @@ -33,6 +33,7 @@ from cooperative_cuisine.utils import ( disable_websocket_logging_arguments, add_list_of_manager_ids_arguments, setup_logging, + add_gui_arguments, ) @@ -118,10 +119,13 @@ class PyGameGUI: manager_ids: list[str], CONNECT_WITH_STUDY_SERVER: bool, USE_AAAMBOS_AGENT: bool, + debug: bool, ): self.CONNECT_WITH_STUDY_SERVER = CONNECT_WITH_STUDY_SERVER self.USE_AAAMBOS_AGENT = USE_AAAMBOS_AGENT + self.show_debug_elements = debug + pygame.init() pygame.display.set_icon( pygame.image.load(ROOT_DIR / "pygame_2d_vis" / "images" / "brain_icon.png") @@ -177,7 +181,7 @@ class PyGameGUI: self.images_path = ROOT_DIR / "pygame_gui" / "images" self.vis = Visualizer(self.visualization_config) - self.fullscreen = False + self.fullscreen = False if self.show_debug_elements else True self.menu_state = MenuStates.Start self.manager: pygame_gui.UIManager @@ -897,7 +901,7 @@ class PyGameGUI: ) rect = pygame.Rect((0, 0), (self.window_width * 0.9, self.window_height * 0.1)) text2 = pygame_gui.elements.UILabel( - text="Please signal the study supervisor the study is finished.", + text="Please signal the study supervisor that the study is finished.", relative_rect=rect, manager=self.manager, object_id="#score_label", @@ -907,20 +911,41 @@ class PyGameGUI: ######################################################################## - self.start_screen_elements = [ - self.start_button, - self.quit_button, - self.fullscreen_button, - self.player_selection_container, - self.bot_number_container, - self.press_a_image, - ] + if self.show_debug_elements: + self.start_screen_elements = [ + self.start_button, + self.quit_button, + self.fullscreen_button, + self.player_selection_container, + self.bot_number_container, + self.press_a_image, + ] + + self.on_all_screens = [ + self.fullscreen_button, + self.quit_button, + ] + + self.other_elements = [] + else: + self.start_screen_elements = [ + self.start_button, + self.press_a_image, + ] + + self.on_all_screens = [] + + self.other_elements = [ + self.player_selection_container, + self.bot_number_container, + self.press_a_image, + self.quit_button, + self.fullscreen_button, + ] self.tutorial_screen_elements = [ self.tutorial_image, self.continue_button, - self.quit_button, - self.fullscreen_button, self.tutorial_recipe_container, self.arrow_img, ] @@ -930,53 +955,42 @@ class PyGameGUI: self.text_recipes_label, self.scroll_space_recipes, self.continue_button, - self.quit_button, - self.fullscreen_button, ] self.game_screen_elements = [ self.orders_label, - self.quit_button, self.score_label, self.timer_label, self.wait_players_label, - self.fullscreen_button, ] self.postgame_screen_elements = [ self.score_conclusion, - self.quit_button, self.scroll_space_completed_meals, self.level_name_label, self.next_game_button, self.finish_study_button, self.completed_meals_text_label, - self.fullscreen_button, ] self.end_screen_elements = [ - self.fullscreen_button, - self.quit_button, final_text_container, ] - self.rest = [ - self.fullscreen_button, - self.quit_button, - ] - def show_screen_elements(self, elements: list): - for element in ( + all_elements = ( self.start_screen_elements + self.tutorial_screen_elements + self.pregame_screen_elements + self.game_screen_elements + self.postgame_screen_elements + self.end_screen_elements - + self.rest - ): + + self.on_all_screens + + self.other_elements + ) + for element in all_elements: element.hide() - for element in elements: + for element in elements + self.on_all_screens: element.show() def update_tutorial_screen(self): @@ -1873,7 +1887,8 @@ class PyGameGUI: self.next_game_button, ]: self.update_screen_elements() - + elif self.menu_state == MenuStates.Start: + self.update_selection_elements() if event.type in [ pygame.KEYDOWN, pygame.KEYUP, @@ -1926,6 +1941,7 @@ def main( manager_ids: list[str], CONNECT_WITH_STUDY_SERVER=False, USE_AAAMBOS_AGENT=False, + debug=False, ): setup_logging() gui = PyGameGUI( @@ -1936,6 +1952,7 @@ def main( manager_ids=manager_ids, CONNECT_WITH_STUDY_SERVER=CONNECT_WITH_STUDY_SERVER, USE_AAAMBOS_AGENT=USE_AAAMBOS_AGENT, + debug=debug, ) gui.start_pygame() @@ -1950,6 +1967,7 @@ if __name__ == "__main__": url_and_port_arguments(parser) disable_websocket_logging_arguments(parser) add_list_of_manager_ids_arguments(parser) + add_gui_arguments(parser) args = parser.parse_args() main( args.study_url, @@ -1958,4 +1976,5 @@ if __name__ == "__main__": args.game_port, args.manager_ids, CONNECT_WITH_STUDY_SERVER=True, + debug=args.debug, ) diff --git a/cooperative_cuisine/pygame_2d_vis/gui_images/continue_en.png b/cooperative_cuisine/pygame_2d_vis/gui_images/continue_en.png index 8a249e36fbab58f15550227268228b84d0e58099..8b418c44f968d72db6621a71e041bca13e55f5ec 100644 Binary files a/cooperative_cuisine/pygame_2d_vis/gui_images/continue_en.png and b/cooperative_cuisine/pygame_2d_vis/gui_images/continue_en.png differ diff --git a/cooperative_cuisine/utils.py b/cooperative_cuisine/utils.py index 1b28523bbc3a14f059ffcd15fa1dc3a0bce4269e..f102064f355a2cd836b7e1490b69480c72b2ef74 100644 --- a/cooperative_cuisine/utils.py +++ b/cooperative_cuisine/utils.py @@ -394,6 +394,29 @@ def add_study_arguments(parser): ) +def add_gui_arguments(parser): + """Adds the gui debug argument to the given argument parser. + If set, additional debug / admin elements are shown. + + Args: + parser (argparse.ArgumentParser): The argument parser object. + + + Example: + ```python + import argparse + parser = argparse.ArgumentParser() + add_gui_arguments(parser) + ``` + """ + parser.add_argument( + "--debug", + default=False, + help="Enable additional debug / admin elements.", + action="store_true", + ) + + class NumpyAndDataclassEncoder(json.JSONEncoder): """Special json encoder for numpy types"""