Skip to content
Snippets Groups Projects
Commit 70317322 authored by Fabian Heinrich's avatar Fabian Heinrich
Browse files

Correct management of gui window sizes, cleaner button press management.

parent 056e5646
No related branches found
No related tags found
No related merge requests found
Pipeline #43053 failed
#QU#TNLB#
#_______M
#_______#
W________
#__A__A__
C________
C_______#
#_______X
#P#S+#S+#
\ No newline at end of file
#QU#T###NLB#
#__________M
#__________#
W___________
#__A_____A__
C___________
C__________#
#__________X
#P#S+####S+#
\ No newline at end of file
_____
_____
____P
____
APA_
____
\ No newline at end of file
......@@ -97,6 +97,7 @@ class PyGameGUI:
self.game_screen = None
self.FPS = 60
self.simulator: Simulator = simulator
self.running = True
self.player_names = player_names
self.player_keys = player_keys
......@@ -112,40 +113,51 @@ class PyGameGUI:
with open(ROOT_DIR / "gui_2d_vis" / "visualization.yaml", "r") as file:
self.visualization_config = yaml.safe_load(file)
if self.visualization_config["GameWindow"]["WhatIsFixed"] == "window_width":
self.world_width = self.visualization_config["GameWindow"]["size"]
kitchen_aspect_ratio = (
simulator.env.kitchen_height / simulator.env.kitchen_width
)
self.world_height = int(self.world_width * kitchen_aspect_ratio)
self.grid_size = int(self.world_width / simulator.env.kitchen_width)
elif self.visualization_config["GameWindow"]["WhatIsFixed"] == "grid":
self.grid_size = self.visualization_config["GameWindow"]["size"]
self.world_width, self.world_height = (
simulator.env.kitchen_width * self.grid_size,
simulator.env.kitchen_height * self.grid_size,
)
self.screen_margin = self.visualization_config["GameWindow"]["screen_margin"]
self.window_width = self.visualization_config["GameWindow"]["start_width"]
self.window_height = self.visualization_config["GameWindow"]["start_height"]
self.window_width, self.window_height = (
self.world_width + (2 * self.screen_margin),
self.world_height + (2 * self.screen_margin),
)
self.game_width, self.game_height = (
self.world_width,
self.world_height,
self.main_window = pygame.display.set_mode(
(
self.window_width,
self.window_height,
)
)
self.images_path = ROOT_DIR / "pygame_gui" / "images"
self.game_width, self.game_height = 0, 0
self.player_colors = self.create_player_colors()
self.images_path = ROOT_DIR / "pygame_gui" / "images"
self.image_cache_dict = {}
self.menu_state = MenuStates.Start
self.manager: pygame_gui.UIManager
def init_window_sizes(self):
if self.visualization_config["GameWindow"]["WhatIsFixed"] == "window_width":
game_width = self.visualization_config["GameWindow"]["size"]
kitchen_aspect_ratio = (
self.simulator.env.kitchen_height / self.simulator.env.kitchen_width
)
game_height = int(game_width * kitchen_aspect_ratio)
grid_size = int(game_width / self.simulator.env.kitchen_width)
elif self.visualization_config["GameWindow"]["WhatIsFixed"] == "grid":
grid_size = self.visualization_config["GameWindow"]["size"]
game_width, game_height = (
self.simulator.env.kitchen_width * grid_size,
self.simulator.env.kitchen_height * grid_size,
)
else:
game_width, game_height = 0, 0
grid_size = 0
window_width, window_height = (
game_width + (2 * self.screen_margin),
game_height + (2 * self.screen_margin),
)
return window_width, window_height, game_width, game_height, grid_size
def create_player_colors(self) -> list[Color]:
number_player = len(self.simulator.env.players)
hue_values = np.linspace(0, 1, number_player + 1)
......@@ -569,32 +581,66 @@ class PyGameGUI:
starting_option=layout_file_paths[-1],
)
def setup_windows(self):
(
self.window_width,
self.window_height,
self.game_width,
self.game_height,
self.grid_size,
) = self.init_window_sizes()
self.game_screen = pygame.Surface(
(
self.game_width,
self.game_height,
),
)
self.main_window = pygame.display.set_mode(
(
self.window_width,
self.window_height,
)
)
self.player_colors = self.create_player_colors()
def setup_simulation(self, config_path, layout_path):
self.simulator = Simulator(config_path, layout_path, 600)
number_player = len(self.player_names)
for i in range(number_player):
player_name = f"p{i}"
self.simulator.register_player(player_name)
self.simulator.start()
def change_to_start_window(self):
self.simulator.stop()
self.menu_state = MenuStates.Start
self.back_button.hide()
self.quit_button.show()
self.start_button.show()
self.score_label.hide()
self.finished_button.hide()
self.layout_selection.show()
def change_to_game_window(self):
def manage_button_visibility(self):
match self.menu_state:
case MenuStates.Start:
self.back_button.hide()
self.quit_button.show()
self.start_button.show()
self.score_label.hide()
self.finished_button.hide()
self.layout_selection.show()
case MenuStates.Game:
self.start_button.hide()
self.back_button.show()
self.score_label.hide()
self.finished_button.show()
self.layout_selection.hide()
case MenuStates.End:
self.start_button.hide()
self.back_button.show()
self.score_label.show()
self.score_label.set_text(
f"Your Score is {self.simulator.env.game_score.score}"
)
self.finished_button.hide()
self.layout_selection.hide()
def start_button_press(self):
self.menu_state = MenuStates.Game
self.start_button.hide()
self.back_button.show()
self.score_label.hide()
self.finished_button.show()
self.layout_selection.hide()
layout_path = (
ROOT_DIR
/ "game_content"
......@@ -602,19 +648,26 @@ class PyGameGUI:
/ self.layout_selection.selected_option
)
config_path = ROOT_DIR / "game_content" / "environment_config.yaml"
self.setup_simulation(config_path, layout_path)
self.setup_windows()
self.init_ui_elements()
log.debug("Pressed start button")
def back_button_press(self):
self.simulator.stop()
self.menu_state = MenuStates.Start
log.debug("Pressed back button")
def quit_button_press(self):
self.simulator.stop()
self.running = False
log.debug("Pressed quit button")
def change_to_end_window(self):
def finished_button_press(self):
self.simulator.stop()
self.menu_state = MenuStates.End
self.start_button.hide()
self.back_button.show()
self.score_label.show()
self.score_label.set_text(
f"Your Score is {self.simulator.env.game_score.score}"
)
self.finished_button.hide()
self.layout_selection.hide()
log.debug("Pressed finished button")
def start_pygame(self):
"""Starts pygame and the gui loop. Each frame the game state is visualized and keyboard inputs are read."""
......@@ -622,45 +675,36 @@ class PyGameGUI:
pygame.init()
pygame.font.init()
self.setup_windows()
self.init_ui_elements()
self.screen_margin = 100
self.main_window = pygame.display.set_mode(
(
self.window_width,
self.window_height,
)
)
self.game_screen = pygame.Surface(
(
self.game_width,
self.game_height,
),
)
pygame.display.set_caption("Simple Overcooked Simulator")
clock = pygame.time.Clock()
self.change_to_start_window()
self.manage_button_visibility()
# Game loop
running = True
while running:
self.running = True
while self.running:
try:
time_delta = clock.tick(self.FPS) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
self.running = False
if event.type == pygame_gui.UI_BUTTON_PRESSED:
if event.ui_element == self.start_button:
self.change_to_game_window()
if event.ui_element == self.back_button:
self.change_to_start_window()
if event.ui_element == self.finished_button:
self.change_to_end_window()
if event.ui_element == self.quit_button:
running = False
log.debug("Quitting game")
match event.ui_element:
case self.start_button:
self.start_button_press()
case self.back_button:
self.back_button_press()
case self.finished_button:
self.finished_button_press()
case self.quit_button:
self.quit_button_press()
self.manage_button_visibility()
if (
event.type in [pygame.KEYDOWN, pygame.KEYUP]
......
......@@ -2,8 +2,10 @@
GameWindow:
WhatIsFixed: window_width # entweder grid oder window_width
size: 500
size: 600
screen_margin: 100
start_width: 600
start_height: 600
Kitchen:
ground_tiles_color: sgigray76
......
......@@ -156,7 +156,7 @@ class Environment:
Args:
layout_file: Path to the layout file.
"""
current_y: float = 1.5
current_y: float = 0.5
counters: list[Counter] = []
designated_player_positions: list[npt.NDArray] = []
free_positions: list[npt.NDArray] = []
......@@ -169,7 +169,7 @@ class Environment:
for line in lines:
line = line.replace("\n", "").replace(" ", "") # remove newline char
current_x = 1.5
current_x = 0.5
for character in line:
character = character.capitalize()
pos = np.array([current_x, current_y])
......@@ -189,8 +189,7 @@ class Environment:
self.kitchen_width = current_x
current_y += 1
self.kitchen_height = int(self.kitchen_height + 2.5)
self.kitchen_width = int(self.kitchen_width + 0.5)
self.kitchen_width -= 0.5
return counters, designated_player_positions, free_positions
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment