sliders #32
BIN
assets/textures/GUI/slider_cursor_1.png
Normal file
BIN
assets/textures/GUI/slider_cursor_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1 KiB |
BIN
assets/textures/GUI/slider_cursor_2.png
Normal file
BIN
assets/textures/GUI/slider_cursor_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/textures/GUI/slider_rail_1.png
Normal file
BIN
assets/textures/GUI/slider_rail_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
|
@ -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."""
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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é."""
|
||||
|
||||
|
|
12
src/main.py
12
src/main.py
|
@ -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")
|
||||
|
|
Loading…
Reference in a new issue