diff --git a/overcooked_simulator/game_content/layouts/test1.layout b/overcooked_simulator/game_content/layouts/test1.layout new file mode 100644 index 0000000000000000000000000000000000000000..8ccd0a1152692fd1c9a0a911b0bb677bab98cb95 --- /dev/null +++ b/overcooked_simulator/game_content/layouts/test1.layout @@ -0,0 +1 @@ +____A___P \ No newline at end of file diff --git a/overcooked_simulator/game_content/layouts/test2.layout b/overcooked_simulator/game_content/layouts/test2.layout new file mode 100644 index 0000000000000000000000000000000000000000..8cfae98af3e7748e2df2dcdaae2ffffbe8c4a074 --- /dev/null +++ b/overcooked_simulator/game_content/layouts/test2.layout @@ -0,0 +1,9 @@ +_ +_ +_ +A +_ +_ +_ +_ +P \ No newline at end of file diff --git a/overcooked_simulator/game_content/layouts/test3.layout b/overcooked_simulator/game_content/layouts/test3.layout new file mode 100644 index 0000000000000000000000000000000000000000..8847c681b18500df23abe068dac76fb4dfbdd6d2 --- /dev/null +++ b/overcooked_simulator/game_content/layouts/test3.layout @@ -0,0 +1,4 @@ +___ +_A_ +___ +__P \ No newline at end of file diff --git a/overcooked_simulator/game_content/layouts/test4.layout b/overcooked_simulator/game_content/layouts/test4.layout new file mode 100644 index 0000000000000000000000000000000000000000..09d7551fa64358eb61a97d4c562617dca82b9655 --- /dev/null +++ b/overcooked_simulator/game_content/layouts/test4.layout @@ -0,0 +1,3 @@ +____ +_A__ +___P \ No newline at end of file diff --git a/overcooked_simulator/game_content/layouts/basic.layout b/overcooked_simulator/game_content/layouts_backup/basic.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/basic.layout rename to overcooked_simulator/game_content/layouts_backup/basic.layout diff --git a/overcooked_simulator/game_content/layouts/empty.layout b/overcooked_simulator/game_content/layouts_backup/empty.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/empty.layout rename to overcooked_simulator/game_content/layouts_backup/empty.layout diff --git a/overcooked_simulator/game_content/layouts/godot_test_layout.layout b/overcooked_simulator/game_content/layouts_backup/godot_test_layout.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/godot_test_layout.layout rename to overcooked_simulator/game_content/layouts_backup/godot_test_layout.layout diff --git a/overcooked_simulator/game_content/layouts/large.layout b/overcooked_simulator/game_content/layouts_backup/large.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/large.layout rename to overcooked_simulator/game_content/layouts_backup/large.layout diff --git a/overcooked_simulator/game_content/layouts/large_t.layout b/overcooked_simulator/game_content/layouts_backup/large_t.layout similarity index 97% rename from overcooked_simulator/game_content/layouts/large_t.layout rename to overcooked_simulator/game_content/layouts_backup/large_t.layout index 304e6f7746f4e0c7510f69395b55c7f691de84f6..de56d63203bcd0740d8663c1a945025704afecf9 100644 --- a/overcooked_simulator/game_content/layouts/large_t.layout +++ b/overcooked_simulator/game_content/layouts_backup/large_t.layout @@ -4,7 +4,7 @@ #____________________________________# #____________________________________# #____________________________________K -W____________________________________I +$____________________________________I #____________________________________# #____________________________________# #__A_____A___________________________D diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/1-1-far-apart.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/1-1-far-apart.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/1-1-far-apart.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/1-1-far-apart.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/1-2-pedestrians.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/1-2-pedestrians.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/1-2-pedestrians.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/1-2-pedestrians.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/1-3-moving-counters.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/1-3-moving-counters.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/1-3-moving-counters.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/1-3-moving-counters.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/1-4-bottleneck.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/1-4-bottleneck.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/1-4-bottleneck.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/1-4-bottleneck.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/1-5-circle.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/1-5-circle.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/1-5-circle.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/1-5-circle.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/1-6-raising-platforms.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/1-6-raising-platforms.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/1-6-raising-platforms.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/1-6-raising-platforms.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/2-1-moving-trucks.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/2-1-moving-trucks.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/2-1-moving-trucks.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/2-1-moving-trucks.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/2-2-rats.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/2-2-rats.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/2-2-rats.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/2-2-rats.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/2-3-separated-conveyors.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/2-3-separated-conveyors.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/2-3-separated-conveyors.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/2-3-separated-conveyors.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/2-4-separated-2.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/2-4-separated-2.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/2-4-separated-2.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/2-4-separated-2.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/3-1-ice.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/3-1-ice.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/3-1-ice.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/3-1-ice.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/3-2-separated-moving-counters.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/3-2-separated-moving-counters.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/3-2-separated-moving-counters.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/3-2-separated-moving-counters.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/3-3-moving-trucks-2.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/3-3-moving-trucks-2.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/3-3-moving-trucks-2.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/3-3-moving-trucks-2.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/3-4-ice-moving-platforms.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/3-4-ice-moving-platforms.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/3-4-ice-moving-platforms.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/3-4-ice-moving-platforms.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/4-1-moving-counters.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/4-1-moving-counters.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/4-1-moving-counters.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/4-1-moving-counters.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/4-2-dark.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/4-2-dark.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/4-2-dark.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/4-2-dark.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/4-3-moving-counters.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/4-3-moving-counters.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/4-3-moving-counters.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/4-3-moving-counters.layout diff --git a/overcooked_simulator/game_content/layouts/overcooked-1/4-4-moving-counters-separated.layout b/overcooked_simulator/game_content/layouts_backup/overcooked-1/4-4-moving-counters-separated.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/overcooked-1/4-4-moving-counters-separated.layout rename to overcooked_simulator/game_content/layouts_backup/overcooked-1/4-4-moving-counters-separated.layout diff --git a/overcooked_simulator/game_content/layouts/rot_test.layout b/overcooked_simulator/game_content/layouts_backup/rot_test.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/rot_test.layout rename to overcooked_simulator/game_content/layouts_backup/rot_test.layout diff --git a/overcooked_simulator/game_content/layouts/split.layout b/overcooked_simulator/game_content/layouts_backup/split.layout similarity index 100% rename from overcooked_simulator/game_content/layouts/split.layout rename to overcooked_simulator/game_content/layouts_backup/split.layout diff --git a/overcooked_simulator/gui_2d_vis/overcooked_gui.py b/overcooked_simulator/gui_2d_vis/overcooked_gui.py index a537861748079b3b6aaefc828b4b7942d41483ba..3d9562357e6f209e462d7a247111900ff7f10a4d 100644 --- a/overcooked_simulator/gui_2d_vis/overcooked_gui.py +++ b/overcooked_simulator/gui_2d_vis/overcooked_gui.py @@ -1,13 +1,11 @@ import argparse import dataclasses -import glob import json import logging import random import sys import uuid from enum import Enum -from pathlib import Path from subprocess import Popen import numpy as np @@ -40,6 +38,7 @@ CONNECT_WITH_STUDY_SERVER = False class MenuStates(Enum): Start = "Start" Game = "Game" + GameTransition = "GameTransition" End = "End" @@ -155,49 +154,10 @@ class PyGameGUI: self.sub_processes = [] - def get_window_sizes_from_state(self, state: dict): - self.kitchen_width = state["kitchen"]["width"] - self.kitchen_height = state["kitchen"]["height"] - self.kitchen_aspect_ratio = self.kitchen_height / self.kitchen_width - game_width = self.visualization_config["GameWindow"]["min_width"] - ( - 2 * self.screen_margin + self.layout_file_paths = sorted( + (ROOT_DIR / "game_content" / "layouts").rglob("*.layout") ) - game_height = self.visualization_config["GameWindow"]["min_height"] - ( - 2 * self.screen_margin - ) - - if self.kitchen_width > game_width: - self.game_height = game_width * self.kitchen_aspect_ratio - self.grid_size = game_width / self.kitchen_width - else: - self.game_width = game_height / self.kitchen_aspect_ratio - self.grid_size = game_width / self.kitchen_width - - self.window_width_windowed = self.min_width - self.window_height_windowed = self.min_height - - def recalc_game_size(self): - log.debug("Resizing game screen") - max_width = self.window_width - (2 * self.screen_margin) - max_height = self.window_height - (2 * self.screen_margin) - if max_width < max_height: - self.game_width = max_width - self.game_height = max_width * self.kitchen_aspect_ratio - self.grid_size = int(self.game_height / self.kitchen_height) - - else: - self.game_height = max_height - self.game_width = max_height / self.kitchen_aspect_ratio - self.grid_size = int(self.game_width / self.kitchen_width) - - self.game_width = max(self.game_width, 100) - self.game_height = max(self.game_height, 100) - self.grid_size = max(self.grid_size, 1) - - residual_x = self.game_width - (self.kitchen_width * self.grid_size) - residual_y = self.game_height - (self.kitchen_height * self.grid_size) - self.game_width -= residual_x - self.game_height -= residual_y + self.current_layout_idx = 0 def setup_player_keys(self, n=1, disjunct=False): if n: @@ -286,6 +246,43 @@ class PyGameGUI: if event.type == pygame.KEYDOWN: key_set.next_player() + def set_game_size(self): + max_width = self.window_width - (2 * self.screen_margin) + max_height = self.window_height - (2 * self.screen_margin) + + self.kitchen_aspect_ratio = self.kitchen_height / self.kitchen_width + # + # if max_height > max_width: + # self.game_height = max_width * self.kitchen_aspect_ratio + # else: + # self.game_width = max_height / self.kitchen_aspect_ratio + + if self.kitchen_width > self.kitchen_height: + self.game_width = max_width + self.game_height = self.game_width * self.kitchen_aspect_ratio + + if self.game_height > max_height: + self.game_height = max_height + self.game_width = self.game_height / self.kitchen_aspect_ratio + else: + self.game_height = max_height + self.game_width = self.game_height / self.kitchen_aspect_ratio + + if self.game_width > max_width: + self.game_width = max_width + self.game_height = self.game_width * self.kitchen_aspect_ratio + + self.grid_size = int(self.game_width / self.kitchen_width) + + self.game_width = max(self.game_width, 100) + self.game_height = max(self.game_height, 100) + self.grid_size = max(self.grid_size, 1) + + residual_x = self.game_width - (self.kitchen_width * self.grid_size) + residual_y = self.game_height - (self.kitchen_height * self.grid_size) + self.game_width -= residual_x + self.game_height -= residual_y + def init_ui_elements(self): self.manager = pygame_gui.UIManager((self.window_width, self.window_height)) self.manager.get_theme().load_theme(ROOT_DIR / "gui_2d_vis" / "gui_theme.json") @@ -298,7 +295,6 @@ class PyGameGUI: manager=self.manager, anchors={"center": "center"}, ) - self.start_button.can_hover() quit_rect = pygame.Rect( ( @@ -315,7 +311,6 @@ class PyGameGUI: object_id="#quit_button", anchors={"right": "right", "top": "top"}, ) - self.quit_button.can_hover() fullscreen_button_rect = pygame.Rect( (0, 0), (self.buttons_width * 0.7, self.buttons_height) @@ -328,7 +323,6 @@ class PyGameGUI: object_id="#fullscreen_button", anchors={"right": "right", "top": "top"}, ) - self.fullscreen_button.can_hover() reset_button_rect = pygame.Rect((0, 0), (self.screen_margin * 0.75, 50)) reset_button_rect.topright = (0, 2 * self.buttons_height) @@ -339,7 +333,6 @@ class PyGameGUI: object_id="#reset_button", anchors={"right": "right", "top": "top"}, ) - self.reset_button.can_hover() self.finished_button = pygame_gui.elements.UIButton( relative_rect=pygame.Rect( @@ -352,7 +345,6 @@ class PyGameGUI: text="Finish round", manager=self.manager, ) - self.finished_button.can_hover() self.back_button = pygame_gui.elements.UIButton( relative_rect=pygame.Rect( @@ -365,42 +357,17 @@ class PyGameGUI: text="Back to menu", manager=self.manager, ) - self.back_button.can_hover() self.score_label = pygame_gui.elements.UILabel( text=f"Score: _", relative_rect=pygame.Rect( - ( - (0), - self.window_height - self.screen_margin, - ), + (0, self.window_height - self.screen_margin), (self.screen_margin * 2, self.screen_margin), ), manager=self.manager, object_id="#score_label", ) - self.layout_file_paths = { - str(p.name): p - for p in [Path(f) for f in sorted((ROOT_DIR / "game_content" / "layouts").rglob("*.layout"))] - } - - assert len(self.layout_file_paths) != 0, "No layout files." - dropdown_width, dropdown_height = 200, 40 - self.layout_selection = pygame_gui.elements.UIDropDownMenu( - relative_rect=pygame.Rect( - ( - 0, - 0, - ), - (dropdown_width, dropdown_height), - ), - manager=self.manager, - options_list=list(self.layout_file_paths.keys()), - starting_option="basic.layout" - if "basic.layout" in self.layout_file_paths - else random.choice(list(self.layout_file_paths.keys())), - ) self.timer_label = pygame_gui.elements.UILabel( text="GAMETIME", relative_rect=pygame.Rect( @@ -461,34 +428,28 @@ class PyGameGUI: anchors={"centerx": "centerx", "centery": "centery"}, object_id="#split_players_button", ) - if self.multiple_keysets: - self.split_players_button.show() - else: - self.split_players_button.hide() - xbox_controller_button_rect = pygame.Rect((0, 0), (190, 50)) - xbox_controller_button_rect.right = 0 - self.xbox_controller_button = pygame_gui.elements.UIButton( - relative_rect=xbox_controller_button_rect, + next_game_button_rect = pygame.Rect((0, 0), (190, 50)) + next_game_button_rect.centerx = self.buttons_width // 2 + 100 + self.next_game_button = pygame_gui.elements.UIButton( + relative_rect=next_game_button_rect, manager=self.manager, - container=self.player_selection_container, - text="Controller?", - anchors={"right": "right", "centery": "centery"}, - object_id="#controller_button", + text="Next game", + anchors={"centerx": "centerx", "centery": "centery"}, + object_id="#split_players_button", ) - ######## - # - # panel = pygame_gui.elements.UIPanel( - # pygame.Rect((50, 50), (700, 500)), - # manager=manager, - # anchors={ - # "left": "left", - # "right": "right", - # "top": "top", - # "bottom": "bottom", - # }, - # ) + retry_button_rect = pygame.Rect((0, 0), (190, 50)) + retry_button_rect.centerx = self.buttons_width // 2 - 100 + self.retry_button = pygame_gui.elements.UIButton( + relative_rect=retry_button_rect, + manager=self.manager, + text="Retry last game", + anchors={"centerx": "centerx", "centery": "centery"}, + object_id="#split_players_button", + ) + + ################### players_container_rect = pygame.Rect( (0, 0), @@ -552,7 +513,6 @@ class PyGameGUI: container=self.player_number_container, anchors={"right": "right", "centery": "centery"}, ) - self.add_human_player_button.can_hover() remove_player_button_rect = pygame.Rect((0, 0), (size, size)) remove_player_button_rect.left = 0 @@ -564,7 +524,6 @@ class PyGameGUI: container=self.player_number_container, anchors={"left": "left", "centery": "centery"}, ) - self.remove_human_button.can_hover() add_bot_button_rect = pygame.Rect((0, 0), (size, size)) add_bot_button_rect.right = 0 @@ -576,7 +535,6 @@ class PyGameGUI: container=self.bot_number_container, anchors={"right": "right", "centery": "centery"}, ) - self.add_bot_button.can_hover() remove_bot_button_rect = pygame.Rect((0, 0), (size, size)) remove_bot_button_rect.left = 0 @@ -588,7 +546,6 @@ class PyGameGUI: container=self.bot_number_container, anchors={"left": "left", "centery": "centery"}, ) - self.remove_bot_button.can_hover() def draw(self, state): """Main visualization function. @@ -671,7 +628,7 @@ class PyGameGUI: self.window_height, ), flags=flags, - display=0, + # display=0, ) def reset_window_size(self): @@ -689,12 +646,15 @@ class PyGameGUI: self.reset_button.hide() self.score_label.hide() self.finished_button.hide() - self.layout_selection.show() self.timer_label.hide() self.orders_label.hide() self.conclusion_label.hide() self.player_selection_container.show() + + self.next_game_button.hide() + self.retry_button.hide() + case MenuStates.Game: self.start_button.hide() self.back_button.hide() @@ -702,26 +662,45 @@ class PyGameGUI: self.reset_button.show() self.score_label.show() self.finished_button.show() - self.layout_selection.hide() self.timer_label.show() self.orders_label.show() self.conclusion_label.hide() self.player_selection_container.hide() + self.next_game_button.hide() + self.retry_button.hide() + + case MenuStates.GameTransition: + self.start_button.hide() + self.back_button.hide() + self.score_label.hide() + self.reset_button.hide() + self.finished_button.hide() + self.timer_label.hide() + self.orders_label.hide() + self.conclusion_label.hide() + + self.player_selection_container.hide() + + self.next_game_button.show() + self.retry_button.show() + case MenuStates.End: self.start_button.hide() self.back_button.show() self.score_label.hide() self.reset_button.hide() self.finished_button.hide() - self.layout_selection.hide() self.timer_label.hide() self.orders_label.hide() self.conclusion_label.show() self.player_selection_container.hide() + self.next_game_button.hide() + self.retry_button.hide() + def update_score_label(self, state): score = state["score"] self.score_label.set_text(f"Score {score}") @@ -747,7 +726,7 @@ class PyGameGUI: environment_config_path = ( ROOT_DIR / "game_content" / "environment_config.yaml" ) - layout_path = self.layout_file_paths[self.layout_selection.selected_option] + layout_path = self.layout_file_paths[self.current_layout_idx] item_info_path = ROOT_DIR / "game_content" / "item_info.yaml" with open(item_info_path, "r") as file: item_info = file.read() @@ -859,7 +838,8 @@ class PyGameGUI: ) state = json.loads(websocket.recv()) - self.get_window_sizes_from_state(state) + self.kitchen_width = state["kitchen"]["width"] + self.kitchen_height = state["kitchen"]["height"] def start_button_press(self): self.menu_state = MenuStates.Game @@ -880,7 +860,7 @@ class PyGameGUI: self.setup_environment() - self.recalc_game_size() + self.set_game_size() self.set_window_size() self.init_ui_elements() log.debug("Pressed start button") @@ -923,7 +903,7 @@ class PyGameGUI: "reason": "finish button pressed", }, ) - self.menu_state = MenuStates.End + self.menu_state = MenuStates.GameTransition self.reset_window_size() log.debug("Pressed finished button") @@ -1044,14 +1024,14 @@ class PyGameGUI: if event.type == pygame.QUIT: self.running = False - # elif event.type == pygame.VIDEORESIZE: - # # scrsize = event.size - # self.window_width_windowed = event.w - # self.window_height_windowed = event.h - # self.recalc_game_size() - # self.set_window_size() - # self.init_ui_elements() - # self.manage_button_visibility() + elif event.type == pygame.VIDEORESIZE: + # scrsize = event.size + self.window_width_windowed = event.w + self.window_height_windowed = event.h + self.set_game_size() + self.set_window_size() + self.init_ui_elements() + self.manage_button_visibility() if event.type == pygame_gui.UI_BUTTON_PRESSED: match event.ui_element: @@ -1102,8 +1082,21 @@ class PyGameGUI: else: self.player_minimum = 1 - case self.xbox_controller_button: - print("xbox_controller_button pressed.") + case self.retry_button: + self.start_button_press() + + case self.next_game_button: + self.current_layout_idx += 1 + if self.current_layout_idx == len( + self.layout_file_paths + ): + self.current_layout_idx = 0 + self.start_button_press() + else: + log.debug( + f"LEVEL: {self.layout_file_paths[self.current_layout_idx]}" + ) + self.start_button_press() case self.fullscreen_button: self.fullscreen = not self.fullscreen @@ -1113,7 +1106,7 @@ class PyGameGUI: else: self.window_width = self.window_width_windowed self.window_height = self.window_height_windowed - self.recalc_game_size() + self.set_game_size() self.set_window_size() self.init_ui_elements()