REFACTOR settings into controller and renderer
This commit is contained in:
18
controllers/settings_controller.py
Normal file
18
controllers/settings_controller.py
Normal 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)
|
||||||
39
render/settings_menu_renderer.py
Normal file
39
render/settings_menu_renderer.py
Normal 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)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user