sliders #32
|
@ -7,17 +7,18 @@ import src.engine.engine
|
|||
|
||||
class Widget:
|
||||
"""Classe parente des widgets de menu."""
|
||||
def __init__(self, x, y, is_window_relative):
|
||||
def __init__(self, x, y, is_window_relative, widget_name):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.is_window_relative = is_window_relative
|
||||
self.widget_name = widget_name
|
||||
|
||||
|
||||
class Label(Widget):
|
||||
"""Un widget de texte."""
|
||||
def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int],
|
||||
centered: bool = False, is_window_relative: int = -1):
|
||||
super().__init__(x, y, is_window_relative)
|
||||
widget_name: str, centered: bool = False, is_window_relative: int = -1):
|
||||
super().__init__(x, y, is_window_relative, widget_name)
|
||||
self.text = text
|
||||
self.size = size
|
||||
self.centered = centered
|
||||
|
@ -33,13 +34,16 @@ class Slider(Widget):
|
|||
base_image: pygame.Surface,
|
||||
hover_image: pygame.Surface,
|
||||
rail_image: pygame.Surface,
|
||||
widget_name: str,
|
||||
value_changed_callback: FunctionType | classmethod | staticmethod | None = None,
|
||||
is_window_relative: int = -1,
|
||||
area_name: str = "menu_slider"):
|
||||
super().__init__(area_rect[0], area_rect[1], is_window_relative)
|
||||
super().__init__(area_rect[0], area_rect[1], is_window_relative, widget_name)
|
||||
self.base_image = base_image
|
||||
self.hover_image = hover_image
|
||||
self.rail_image = rail_image
|
||||
self.area_name = area_name
|
||||
self.value_changed_callback = value_changed_callback
|
||||
self.hovered = False
|
||||
self.follow_mouse = False
|
||||
self.cursor_size = cursor_size
|
||||
|
@ -52,16 +56,25 @@ class Slider(Widget):
|
|||
|
||||
def set_value(self, values: tuple[float, float]):
|
||||
"""Appelée lorsque la valeur du slider est modifiée."""
|
||||
self.value = values[0]
|
||||
new_value = values[0]
|
||||
|
||||
if new_value != self.value:
|
||||
self.value = new_value
|
||||
if self.value_changed_callback is not None:
|
||||
self.value_changed_callback(self.value)
|
||||
|
||||
def get_value(self):
|
||||
"""Retourne la valeur entre 0.0 et 1.0 du slider."""
|
||||
return self.value
|
||||
|
||||
|
||||
class Button(Widget):
|
||||
"""Un widget de bouton."""
|
||||
def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int],
|
||||
callback: FunctionType | classmethod | staticmethod, base_image: pygame.Surface,
|
||||
hover_image: pygame.Surface, centered: bool = False, is_window_relative: int = -1,
|
||||
hover_image: pygame.Surface, widget_name: str, centered: bool = False, is_window_relative: int = -1,
|
||||
area_name: str = "menu_button"):
|
||||
super().__init__(x, y, is_window_relative)
|
||||
super().__init__(x, y, is_window_relative, widget_name)
|
||||
self.text = text
|
||||
self.size = size
|
||||
self.color = color
|
||||
|
@ -99,6 +112,17 @@ class MenuManager:
|
|||
"""Ajoute le menu donné au manager de menu avec le nom donné."""
|
||||
self.menus[name] = menu
|
||||
|
||||
def get_widgets_at_name(self, menu_name: str, widget_name: str):
|
||||
"""Donne le widget au nom donné dans le menu au nom donné."""
|
||||
menu = self.menus[menu_name]
|
||||
|
||||
found_sliders = []
|
||||
for widget in menu.widgets:
|
||||
if widget.widget_name == widget_name:
|
||||
found_sliders.append(widget)
|
||||
|
||||
return found_sliders
|
||||
|
||||
def show(self, name: str):
|
||||
"""Affiche le menu au nom donné."""
|
||||
self.active_menu = self.menus[name]
|
||||
|
|
|
@ -47,8 +47,8 @@ class Game(Engine):
|
|||
slider_hover_image = pygame.image.load("assets/textures/GUI/slider_cursor_2.png").convert_alpha()
|
||||
slider_rail_image = pygame.image.load("assets/textures/GUI/slider_rail_1.png").convert_alpha()
|
||||
|
||||
menu.add_widget(Button(0.5, 0.3, "play", 0.08, (0, 0, 0), self.start_game, btn_base_image, btn_hover_image, True, 0))
|
||||
menu.add_widget(Slider((50, 50), (100, 300), 136, slider_base_image, slider_hover_image, slider_rail_image))
|
||||
menu.add_widget(Button(0.5, 0.3, "play", 0.08, (0, 0, 0), self.start_game, btn_base_image, btn_hover_image, "play_button", True, 0))
|
||||
menu.add_widget(Slider((50, 50), (100, 300), 136, slider_base_image, slider_hover_image, slider_rail_image, "test_slider", value_changed_callback=print))
|
||||
self.menu_manager.register_menu(menu, "main")
|
||||
|
||||
self.menu_manager.show("main")
|
||||
|
|
Loading…
Reference in a new issue