From 636e006e508237b265cd89b9f1da982d1df17c9b Mon Sep 17 00:00:00 2001 From: yannis300307 Date: Wed, 10 Jan 2024 15:57:46 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20de=20support=20de=20zones=20slider?= =?UTF-8?q?=20dans=20l'event=20handler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/engine/event_handler.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/engine/event_handler.py b/src/engine/event_handler.py index 1568ed0..6e78fe3 100644 --- a/src/engine/event_handler.py +++ b/src/engine/event_handler.py @@ -5,6 +5,7 @@ from pygame import event, display from pygame.locals import * import src.engine.engine as engine +from src.engine.menu_manager import Slider class EventHandler: @@ -15,6 +16,7 @@ class EventHandler: self.key_pressed = [] self.buttons_area = [] self.hovered_area = [] + self.sliders_area = [] @staticmethod def get_click_collision(rect: tuple[float | int, float | int, float | int, float | int], point: tuple[int, int], @@ -56,6 +58,14 @@ class EventHandler: self.buttons_area = cleared_list + def register_slider_area(self, rect: list[float | int, float | int, float | int, float | int], + is_window_relative: int = -1): + """Enregistre une zone comme une zone déplaçable à l'écran.""" + assert isinstance(rect, list) # utilisé pour empêcher les tuples + + self.sliders_area.append([rect, is_window_relative, False]) + # Le premier booléen correspond à l'état de suivi de la souris + def update(self): """Vérifie s'il y a de nouvelles interactions et les traites.""" @@ -74,6 +84,14 @@ class EventHandler: for area in self.buttons_area: if self.get_click_collision(area[0], e.pos, area[2]): area[1]() + + for area in self.sliders_area: + if self.get_click_collision(area[0], e.pos, area[1]): + area[2] = True + elif e.type == MOUSEBUTTONUP: + for area in self.sliders_area: + area[2] = False + elif e.type == MOUSEMOTION: for area in self.buttons_area: if area[4] is not None: @@ -86,6 +104,11 @@ class EventHandler: area[4](False) self.hovered_area.remove(area) + for area in self.sliders_area: + if area[2]: + area[0][0] = e.pos[0] + area[0][1] = e.pos[1] + if self.engine.entity_manager.player_entity_name: if K_RIGHT in self.key_pressed: self.engine.entity_manager.move_player_controls(1, 0)