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],
|
def register_slider_area(self, size: tuple[float | int, float | int],
|
||||||
motion_rect: tuple[float | int, float | int, float | int, float | int],
|
motion_rect: tuple[float | int, float | int, float | int, float | int],
|
||||||
motion_axes: tuple[bool, bool],
|
motion_axes: tuple[bool, bool],
|
||||||
|
name: str,
|
||||||
is_window_relative: int = -1,
|
is_window_relative: int = -1,
|
||||||
clicked_callback: FunctionType | classmethod | staticmethod = None,
|
clicked_callback: FunctionType | classmethod | staticmethod = None,
|
||||||
released_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."""
|
"""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),
|
self.sliders_area.append([[motion_rect[0], motion_rect[1], *size], is_window_relative, False, (0, 0),
|
||||||
motion_axes, motion_rect,
|
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
|
# 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
|
@staticmethod
|
||||||
def get_slider_area_values(slider: list):
|
def get_slider_area_values(slider: list):
|
||||||
"""Donne la valeur de la zone de slider donnée."""
|
"""Donne la valeur de la zone de slider donnée."""
|
||||||
|
|
|
@ -32,11 +32,13 @@ class Slider(Widget):
|
||||||
width: int | float,
|
width: int | float,
|
||||||
base_image: pygame.Surface,
|
base_image: pygame.Surface,
|
||||||
hover_image: pygame.Surface,
|
hover_image: pygame.Surface,
|
||||||
|
rail_image: pygame.Surface,
|
||||||
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)
|
||||||
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.area_name = area_name
|
self.area_name = area_name
|
||||||
self.hovered = False
|
self.hovered = False
|
||||||
self.follow_mouse = False
|
self.follow_mouse = False
|
||||||
|
@ -117,6 +119,7 @@ class MenuManager:
|
||||||
elif isinstance(widget, Slider):
|
elif isinstance(widget, Slider):
|
||||||
self.engine.event_handler.register_slider_area(widget.cursor_size,
|
self.engine.event_handler.register_slider_area(widget.cursor_size,
|
||||||
(widget.x, widget.y, widget.width, 1), (True, False),
|
(widget.x, widget.y, widget.width, 1), (True, False),
|
||||||
|
widget.area_name,
|
||||||
widget.is_window_relative,
|
widget.is_window_relative,
|
||||||
hover_callback=widget.set_hover_state,
|
hover_callback=widget.set_hover_state,
|
||||||
motion_callback=widget.set_value)
|
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_width()*window_size[0]/self.window_size[0],
|
||||||
slider_image.get_height()*window_size[1]/self.window_size[1]))
|
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,
|
self.window.blit(slider_image, (x+widget.value*widget.width-slider_image.get_width()//2,
|
||||||
y-slider_image.get_height()//2))
|
y-slider_image.get_height()//2))
|
||||||
|
|
||||||
|
|
||||||
def render_dialogs_box(self):
|
def render_dialogs_box(self):
|
||||||
"""Rend la boite de dialogue lorsqu'un dialogue est lancé."""
|
"""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 = Menu()
|
||||||
menu.add_widget(Label(0.5, 0.1, "The Forest's Secret", 0.1, (0, 0, 0), True, 0))
|
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()
|
btn_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_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))
|
slider_base_image = pygame.image.load("assets/textures/GUI/slider_cursor_1.png").convert_alpha()
|
||||||
menu.add_widget(Slider((50, 50), (100, 300), 100, base_image, hover_image))
|
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.register_menu(menu, "main")
|
||||||
|
|
||||||
self.menu_manager.show("main")
|
self.menu_manager.show("main")
|
||||||
|
|
Loading…
Reference in a new issue