From 582060814e5bc652d33910faa5fde1d2cfd45d4e Mon Sep 17 00:00:00 2001 From: yannis300307 Date: Fri, 12 Jan 2024 18:42:06 +0100 Subject: [PATCH] Ajout du rendu du rail du slider --- assets/textures/GUI/slider_cursor_1.png | Bin 0 -> 1043 bytes assets/textures/GUI/slider_cursor_2.png | Bin 0 -> 1094 bytes assets/textures/GUI/slider_rail_1.png | Bin 0 -> 1689 bytes src/engine/event_handler.py | 14 +++++++++++++- src/engine/menu_manager.py | 3 +++ src/engine/renderer.py | 3 ++- src/main.py | 12 ++++++++---- 7 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 assets/textures/GUI/slider_cursor_1.png create mode 100644 assets/textures/GUI/slider_cursor_2.png create mode 100644 assets/textures/GUI/slider_rail_1.png diff --git a/assets/textures/GUI/slider_cursor_1.png b/assets/textures/GUI/slider_cursor_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5477fd3da152f8e5ccba86062dd5809faf1f99 GIT binary patch literal 1043 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qt-49qJ$T^vIy;@-|a?Jw*obG*HY-M5FGFLW_) zgz3ftqj?4&8Q32`=3AKii$BApk@?-Tn8! z7H7`9KkZt==F4~eKb?GY>Ft{{>#a9$KJ7C-bFRrA#`XlZWe+%KG`wBHRDW=O0qee& z^AGqdUVJ&A^Tcz{gx_4x6i(M@#I(mRDBEQ4TlACH-}Jsi>;b3msLCHo-k>_^gX|Tf zl8fIzsN`^k{gb|8R1|sbB-f#TyBYL@X9IXwzh8{K8d@L zFjIhK{r>&&y4Ah?3%IJQ-*WGJ{P=O)#)v7GTc-!De3H63ax0%{R5^Rx{>JUQIy*Vn z2dzAzd5HhCm8Ip%YpyBv0oT(kPh8~tQeQb;Yd`zxIj5gqvFfahaFu!CZUJ@h!vt!^LxV?zG&R_lPy)-IYHJwem_AzIhwHG)AxbWy!5o^DFxO3u;zv zeo(t__wML#cT^{O%-Fcm@aATTB!(Xz*#{l{mK)gE=tPT2vNfFlEGF}?l#7{}c~fd( zoAX1XEpcgY-n`jTTk(6pgS|k=bS~xt=MFIaZO9Nrt?=b!g3dl#r70t{T%h*sl{9mm|PFU+1bYm(00#?))C zlIQ#x* z&NZ9r-${gr?`@d=cP~SMQ2j5>^aMUWzFGI~-P`8B`ss&h$~JsOV&dYw?;_GlOGE8= zpBV4qVxE3xLhuG*ao>%1=ePMDRH$i*a?|_8X%_p__J)j{v##^>l-c=}4^wovFX;Ad znqHHTe_u;Rz2LzIu`G4&$ubW&uDMnl=RDu>jzr&l%d`hh-QFK`Z1`^fE$f`B>tuKC m^UA*0^X57I`{bK+M!q9d;*zUe!e?McX7F_Nb6Mw<&;$U+D%iFF literal 0 HcmV?d00001 diff --git a/assets/textures/GUI/slider_cursor_2.png b/assets/textures/GUI/slider_cursor_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb79992a4f01fcd22a332ad719bc976c28bd792 GIT binary patch literal 1094 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 literal 0 HcmV?d00001 diff --git a/src/engine/event_handler.py b/src/engine/event_handler.py index 4f4068a..df4b2ac 100644 --- a/src/engine/event_handler.py +++ b/src/engine/event_handler.py @@ -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.""" diff --git a/src/engine/menu_manager.py b/src/engine/menu_manager.py index 885cfaf..7006d9d 100644 --- a/src/engine/menu_manager.py +++ b/src/engine/menu_manager.py @@ -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) diff --git a/src/engine/renderer.py b/src/engine/renderer.py index 3703eb1..c1cadf8 100644 --- a/src/engine/renderer.py +++ b/src/engine/renderer.py @@ -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é.""" diff --git a/src/main.py b/src/main.py index 372ec48..c7b89b9 100644 --- a/src/main.py +++ b/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")