sliders #32
|
@ -7,17 +7,18 @@ import src.engine.engine
|
||||||
|
|
||||||
class Widget:
|
class Widget:
|
||||||
"""Classe parente des widgets de menu."""
|
"""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.x = x
|
||||||
self.y = y
|
self.y = y
|
||||||
self.is_window_relative = is_window_relative
|
self.is_window_relative = is_window_relative
|
||||||
|
self.widget_name = widget_name
|
||||||
|
|
||||||
|
|
||||||
class Label(Widget):
|
class Label(Widget):
|
||||||
"""Un widget de texte."""
|
"""Un widget de texte."""
|
||||||
def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int],
|
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):
|
widget_name: str, centered: bool = False, is_window_relative: int = -1):
|
||||||
super().__init__(x, y, is_window_relative)
|
super().__init__(x, y, is_window_relative, widget_name)
|
||||||
self.text = text
|
self.text = text
|
||||||
self.size = size
|
self.size = size
|
||||||
self.centered = centered
|
self.centered = centered
|
||||||
|
@ -33,13 +34,16 @@ class Slider(Widget):
|
||||||
base_image: pygame.Surface,
|
base_image: pygame.Surface,
|
||||||
hover_image: pygame.Surface,
|
hover_image: pygame.Surface,
|
||||||
rail_image: pygame.Surface,
|
rail_image: pygame.Surface,
|
||||||
|
widget_name: str,
|
||||||
|
value_changed_callback: FunctionType | classmethod | staticmethod | None = None,
|
||||||
is_window_relative: int = -1,
|
is_window_relative: int = -1,
|
||||||
area_name: str = "menu_slider"):
|
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.base_image = base_image
|
||||||
self.hover_image = hover_image
|
self.hover_image = hover_image
|
||||||
self.rail_image = rail_image
|
self.rail_image = rail_image
|
||||||
self.area_name = area_name
|
self.area_name = area_name
|
||||||
|
self.value_changed_callback = value_changed_callback
|
||||||
self.hovered = False
|
self.hovered = False
|
||||||
self.follow_mouse = False
|
self.follow_mouse = False
|
||||||
self.cursor_size = cursor_size
|
self.cursor_size = cursor_size
|
||||||
|
@ -52,16 +56,25 @@ class Slider(Widget):
|
||||||
|
|
||||||
def set_value(self, values: tuple[float, float]):
|
def set_value(self, values: tuple[float, float]):
|
||||||
"""Appelée lorsque la valeur du slider est modifiée."""
|
"""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):
|
class Button(Widget):
|
||||||
"""Un widget de bouton."""
|
"""Un widget de bouton."""
|
||||||
def __init__(self, x: int | float, y: int | float, text: str, size: int | float, color: tuple[int, int, int],
|
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,
|
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"):
|
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.text = text
|
||||||
self.size = size
|
self.size = size
|
||||||
self.color = color
|
self.color = color
|
||||||
|
@ -99,6 +112,17 @@ class MenuManager:
|
||||||
"""Ajoute le menu donné au manager de menu avec le nom donné."""
|
"""Ajoute le menu donné au manager de menu avec le nom donné."""
|
||||||
self.menus[name] = menu
|
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):
|
def show(self, name: str):
|
||||||
"""Affiche le menu au nom donné."""
|
"""Affiche le menu au nom donné."""
|
||||||
self.active_menu = self.menus[name]
|
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_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()
|
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(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))
|
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.register_menu(menu, "main")
|
||||||
|
|
||||||
self.menu_manager.show("main")
|
self.menu_manager.show("main")
|
||||||
|
|
Loading…
Reference in a new issue