Ajout du rendu du rail du slider

This commit is contained in:
Yannis 2024-01-12 18:42:06 +01:00
parent 4128f32d26
commit 582060814e
7 changed files with 26 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -63,6 +63,7 @@ class EventHandler:
def register_slider_area(self, size: tuple[float | int, float | int],
motion_rect: tuple[float | int, float | int, float | int, float | int],
motion_axes: tuple[bool, bool],
name: str,
is_window_relative: int = -1,
clicked_callback: FunctionType | classmethod | staticmethod = None,
released_callback: FunctionType | classmethod | staticmethod = None,
@ -71,9 +72,20 @@ class EventHandler:
"""Enregistre une zone comme une zone déplaçable à l'écran."""
self.sliders_area.append([[motion_rect[0], motion_rect[1], *size], is_window_relative, False, (0, 0),
motion_axes, motion_rect,
clicked_callback, released_callback, hover_callback, motion_callback])
clicked_callback, released_callback, hover_callback, motion_callback, name])
# Le premier booléen correspond à l'état de suivi de la souris
def remove_slider_area(self, name: str):
"""Supprime les sliders aux noms donnés."""
# On itère dans toute la liste et on ne garde que les éléments ne portant pas le nom cherché
cleared_list = []
for area in self.sliders_area:
if area[10] != name:
cleared_list.append(area)
self.sliders_area = cleared_list
@staticmethod
def get_slider_area_values(slider: list):
"""Donne la valeur de la zone de slider donnée."""

View file

@ -32,11 +32,13 @@ class Slider(Widget):
width: int | float,
base_image: pygame.Surface,
hover_image: pygame.Surface,
rail_image: pygame.Surface,
is_window_relative: int = -1,
area_name: str = "menu_slider"):
super().__init__(area_rect[0], area_rect[1], is_window_relative)
self.base_image = base_image
self.hover_image = hover_image
self.rail_image = rail_image
self.area_name = area_name
self.hovered = False
self.follow_mouse = False
@ -117,6 +119,7 @@ class MenuManager:
elif isinstance(widget, Slider):
self.engine.event_handler.register_slider_area(widget.cursor_size,
(widget.x, widget.y, widget.width, 1), (True, False),
widget.area_name,
widget.is_window_relative,
hover_callback=widget.set_hover_state,
motion_callback=widget.set_value)

View file

@ -308,10 +308,11 @@ class Renderer:
(slider_image.get_width()*window_size[0]/self.window_size[0],
slider_image.get_height()*window_size[1]/self.window_size[1]))
self.window.blit(widget.rail_image, (x+(widget.width-widget.rail_image.get_width()) // 2,
y - widget.rail_image.get_height() // 2))
self.window.blit(slider_image, (x+widget.value*widget.width-slider_image.get_width()//2,
y-slider_image.get_height()//2))
def render_dialogs_box(self):
"""Rend la boite de dialogue lorsqu'un dialogue est lancé."""

View file

@ -40,11 +40,15 @@ class Game(Engine):
menu = Menu()
menu.add_widget(Label(0.5, 0.1, "The Forest's Secret", 0.1, (0, 0, 0), True, 0))
base_image = pygame.image.load("assets/textures/GUI/button_1.png").convert_alpha()
hover_image = pygame.image.load("assets/textures/GUI/button_2.png").convert_alpha()
btn_base_image = pygame.image.load("assets/textures/GUI/button_1.png").convert_alpha()
btn_hover_image = pygame.image.load("assets/textures/GUI/button_2.png").convert_alpha()
menu.add_widget(Button(0.5, 0.3, "play", 0.08, (0, 0, 0), self.start_game, base_image, hover_image, True, 0))
menu.add_widget(Slider((50, 50), (100, 300), 100, base_image, hover_image))
slider_base_image = pygame.image.load("assets/textures/GUI/slider_cursor_1.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()
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))
self.menu_manager.register_menu(menu, "main")
self.menu_manager.show("main")