diff --git a/controllers/settings_controller.py b/controllers/settings_controller.py new file mode 100644 index 0000000..0ffd419 --- /dev/null +++ b/controllers/settings_controller.py @@ -0,0 +1,18 @@ +class SettingsController: + def __init__(self, settings_renderer, callback, context): + self.settings_renderer = settings_renderer + self.switch_state = callback + self.context = context + + self.show_yaw_button = settings_renderer.show_yaw_button + self.show_health_button = settings_renderer.show_health_button + self.show_names_button = settings_renderer.show_names_button + self.back_button = settings_renderer.back_button + self.back_button.set_action(lambda: self.switch_state(self.context["previous_states"].pop())) + + def update(self, event): + """Handles user inputs.""" + self.show_yaw_button.handle_event(event) + self.show_health_button.handle_event(event) + self.show_names_button.handle_event(event) + self.back_button.handle_event(event) \ No newline at end of file diff --git a/render/settings_menu_renderer.py b/render/settings_menu_renderer.py new file mode 100644 index 0000000..15e72d9 --- /dev/null +++ b/render/settings_menu_renderer.py @@ -0,0 +1,39 @@ +import pygame +from widgets.button import Button +from widgets.switch import Switch + +class SettingsMenuRenderer: + def __init__(self, screen, options, font): + self.screen = screen + self.options = options + self.font = font + self.text_start_x = 100 + self.widget_start_x = 500 + + # Text + self.show_yaw_text = self.font.render("Show Yaw: ", True, (255, 255, 255)) + self.show_health_text = self.font.render("Show Health: ", True, (255, 255, 255)) + self.show_names_text = self.font.render("Show Names: ", True, (255, 255, 255)) + + # Buttons + self.back_button = Button(10, 10, 50, 50, None) + self.back_button.set_image("assets/arrow.png") + + # Switches + self.show_yaw_button = Switch(self.widget_start_x, 100, 100, self.show_yaw_text.get_rect().height, self.options["show_yaw"]) + self.show_health_button = Switch(self.widget_start_x, 150, 100, self.show_health_text.get_rect().height, self.options["show_health"]) + self.show_names_button = Switch(self.widget_start_x, 200, 100, self.show_names_text.get_rect().height, self.options["show_names"]) + + def render(self): + """Renders the settings menu.""" + self.screen.fill((30, 30, 30)) # Clear screen + self.screen.blit(self.show_yaw_text, (self.text_start_x, self.show_yaw_button.y)) + self.show_yaw_button.draw(self.screen) + + self.screen.blit(self.show_health_text, (self.text_start_x, self.show_health_button.y)) + self.show_health_button.draw(self.screen) + + self.screen.blit(self.show_names_text, (self.text_start_x, self.show_names_button.y)) + self.show_names_button.draw(self.screen) + + self.back_button.draw(self.screen) diff --git a/states/game.py b/states/game.py index d5e4a6f..524e493 100644 --- a/states/game.py +++ b/states/game.py @@ -14,7 +14,7 @@ class Game(GameState): match_data_path = f"maps/{self.match.map_name}.json" match_image_path = f"maps/{self.match.map_name}.png" - # Map Coordinate Helper Class, + # Map Coordinate Helper Class self.map_coord_controller = MapCoordConverter(self.screen.get_width(), self.screen.get_height(), match_data_path, match_image_path) # Renderers diff --git a/states/settings_menu.py b/states/settings_menu.py index efc2ab3..2f499bd 100644 --- a/states/settings_menu.py +++ b/states/settings_menu.py @@ -1,52 +1,35 @@ from states.game_state import GameState from widgets.button import Button from widgets.switch import Switch +from controllers.settings_controller import SettingsController +from render.settings_menu_renderer import SettingsMenuRenderer import pygame class SettingsMenu(GameState): def __init__(self, switch_state_callback, context): super().__init__(switch_state_callback, context) - self.text_start_x = 100 - self.widget_start_x = 500 - - # Text - self.show_yaw_text = self.font.render("Show Yaw: ", True, (255, 255, 255)) - self.show_health_text = self.font.render("Show Health: ", True, (255, 255, 255)) - self.show_names_text = self.font.render("Show Names: ", True, (255, 255, 255)) - - # Buttons - self.back_button = Button(10, 10, 50, 50, lambda: self.switch_state(self.context["previous_states"].pop())) - self.back_button.set_image("assets/arrow.png") - - # Switches - self.show_yaw_button = Switch(self.widget_start_x, 100, 100, self.show_yaw_text.get_rect().height, self.options["show_yaw"]) - self.show_health_button = Switch(self.widget_start_x, 150, 100, self.show_health_text.get_rect().height, self.options["show_health"]) - self.show_names_button = Switch(self.widget_start_x, 200, 100, self.show_names_text.get_rect().height, self.options["show_names"]) + self.settings_renderer = SettingsMenuRenderer(self.screen, self.context["options"], self.font) + self.settings_controller = SettingsController(self.settings_renderer, self.switch_state, context) def handle_events(self, events): """Handles user inputs.""" for event in events: - if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: - self.switch_state("start_menu") - self.show_yaw_button.handle_event(event) - self.show_health_button.handle_event(event) - self.show_names_button.handle_event(event) - self.back_button.handle_event(event) + self.settings_controller.update(event) def update(self): """Updates settings based on user input.""" - if self.show_yaw_button.get_is_toggled(): + if self.settings_renderer.show_yaw_button.get_is_toggled(): self.options["show_yaw"] = True else: self.options["show_yaw"] = False - if self.show_health_button.get_is_toggled(): + if self.settings_renderer.show_health_button.get_is_toggled(): self.options["show_health"] = True else: self.options["show_health"] = False - if self.show_names_button.get_is_toggled(): + if self.settings_renderer.show_names_button.get_is_toggled(): self.options["show_names"] = True else: self.options["show_names"] = False @@ -56,16 +39,6 @@ class SettingsMenu(GameState): def draw(self): """Renders the settings menu.""" - self.screen.fill((30, 30, 30)) # Clear screen - self.screen.blit(self.show_yaw_text, (self.text_start_x, self.show_yaw_button.y)) - self.show_yaw_button.draw(self.screen) - - self.screen.blit(self.show_health_text, (self.text_start_x, self.show_health_button.y)) - self.show_health_button.draw(self.screen) - - self.screen.blit(self.show_names_text, (self.text_start_x, self.show_names_button.y)) - self.show_names_button.draw(self.screen) - - self.back_button.draw(self.screen) + self.settings_renderer.render()