diff --git a/src/engine/event_handler.py b/src/engine/event_handler.py index 59d257c..905db38 100644 --- a/src/engine/event_handler.py +++ b/src/engine/event_handler.py @@ -1,7 +1,7 @@ import math from types import FunctionType -from pygame import event +from pygame import event, display from pygame.locals import * import src.engine.engine as engine @@ -16,14 +16,30 @@ class EventHandler: self.buttons_area = [] @staticmethod - def get_click_collision(rect: tuple[int, int, int, int], point: tuple[int, int]): + def get_click_collision(rect: tuple[float | int, float | int, float | int, float | int], point: tuple[int, int], + is_window_relative: int): """Vérifie si le point et le rectangle donné sont en collision.""" + window_size = display.get_window_size() + + if is_window_relative == 0: + return (rect[0]*window_size[0] < point[0]*window_size[0] < rect[0]*window_size[0] + rect[2]*window_size[0] + and rect[1]*window_size[0] < point[1]*window_size[0] < rect[1]*window_size[0] + rect[3]*window_size[0]) + + elif is_window_relative == 1: + return (rect[0] * window_size[1] < point[0] * window_size[1] < rect[0] * window_size[1] + rect[2] * + window_size[1] + and rect[1] * window_size[1] < point[1] * window_size[1] < rect[1] * window_size[1] + rect[3] * + window_size[1]) + return rect[0] < point[0] < rect[0] + rect[2] and rect[1] < point[1] < rect[1] + rect[3] - def register_button_area(self, rect: tuple[int, int, int, int], callback: FunctionType | classmethod | staticmethod): + def register_button_area(self, rect: tuple[float | int, float | int, float | int, float | int], + callback: FunctionType | classmethod | staticmethod, + is_window_relative: int = -1): """Enregistre une zone comme bouton. La fonction donnée sera donc executé lorsque la zone sur la fenêtre - sera cliqué.""" - self.buttons_area.append((rect, callback)) + sera cliqué. is_window_relative doit être 0 pour que le rect soit multipliée par la largeur de la fenêtre et 1 + pour qu'elle soit multipliée par la hauteur""" + self.buttons_area.append((rect, callback, is_window_relative)) def update(self): """Vérifie s'il y a de nouvelles interactions et les traites.""" @@ -41,7 +57,7 @@ class EventHandler: # Vérifie si une des zones enregistrées comme bouton n'a pas été cliqué if e.button == 1: for area in self.buttons_area: - if self.get_click_collision(area[0], e.pos): + if self.get_click_collision(area[0], e.pos, area[2]): area[1]() if self.engine.entity_manager.player_entity_name: