REFACTOR settings into controller and renderer

This commit is contained in:
2025-04-22 17:38:04 +02:00
parent 5d1da9e299
commit 9d440f6f21
4 changed files with 67 additions and 37 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -14,7 +14,7 @@ class Game(GameState):
match_data_path = f"maps/{self.match.map_name}.json" match_data_path = f"maps/{self.match.map_name}.json"
match_image_path = f"maps/{self.match.map_name}.png" 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) self.map_coord_controller = MapCoordConverter(self.screen.get_width(), self.screen.get_height(), match_data_path, match_image_path)
# Renderers # Renderers

View File

@@ -1,52 +1,35 @@
from states.game_state import GameState from states.game_state import GameState
from widgets.button import Button from widgets.button import Button
from widgets.switch import Switch from widgets.switch import Switch
from controllers.settings_controller import SettingsController
from render.settings_menu_renderer import SettingsMenuRenderer
import pygame import pygame
class SettingsMenu(GameState): class SettingsMenu(GameState):
def __init__(self, switch_state_callback, context): def __init__(self, switch_state_callback, context):
super().__init__(switch_state_callback, context) super().__init__(switch_state_callback, context)
self.text_start_x = 100 self.settings_renderer = SettingsMenuRenderer(self.screen, self.context["options"], self.font)
self.widget_start_x = 500 self.settings_controller = SettingsController(self.settings_renderer, self.switch_state, context)
# 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"])
def handle_events(self, events): def handle_events(self, events):
"""Handles user inputs.""" """Handles user inputs."""
for event in events: for event in events:
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: self.settings_controller.update(event)
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)
def update(self): def update(self):
"""Updates settings based on user input.""" """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 self.options["show_yaw"] = True
else: else:
self.options["show_yaw"] = False 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 self.options["show_health"] = True
else: else:
self.options["show_health"] = False 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 self.options["show_names"] = True
else: else:
self.options["show_names"] = False self.options["show_names"] = False
@@ -56,16 +39,6 @@ class SettingsMenu(GameState):
def draw(self): def draw(self):
"""Renders the settings menu.""" """Renders the settings menu."""
self.screen.fill((30, 30, 30)) # Clear screen self.settings_renderer.render()
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)