From 163f1f0901ac57697405915b80fc613c3854f11a Mon Sep 17 00:00:00 2001 From: yannis300307 Date: Wed, 10 Jan 2024 20:39:11 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20d'une=20boite=20de=20limite=20de=20d?= =?UTF-8?q?=C3=A9placement=20pour=20les=20sliders=20area?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/engine/event_handler.py | 26 ++++++++++++++++++++------ src/engine/renderer.py | 12 +++++++++++- src/main.py | 2 +- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/engine/event_handler.py b/src/engine/event_handler.py index 6e78fe3..c07d46f 100644 --- a/src/engine/event_handler.py +++ b/src/engine/event_handler.py @@ -58,12 +58,13 @@ class EventHandler: self.buttons_area = cleared_list - def register_slider_area(self, rect: list[float | int, float | int, 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_axes: tuple[bool, bool], 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]) + self.sliders_area.append([[motion_axes[0], motion_axes[1]]+list(size), is_window_relative, False, (0, 0), motion_axes, motion_rect]) + print(self.sliders_area[0]) # Le premier booléen correspond à l'état de suivi de la souris def update(self): @@ -88,6 +89,7 @@ class EventHandler: for area in self.sliders_area: if self.get_click_collision(area[0], e.pos, area[1]): area[2] = True + area[3] = (e.pos[0] - area[0][0], e.pos[1] - area[0][1]) # add support for responsibility elif e.type == MOUSEBUTTONUP: for area in self.sliders_area: area[2] = False @@ -106,8 +108,20 @@ class EventHandler: for area in self.sliders_area: if area[2]: - area[0][0] = e.pos[0] - area[0][1] = e.pos[1] + if area[4][0]: + area[0][0] = e.pos[0]-area[3][0] + if area[4][1]: + area[0][1] = e.pos[1]-area[3][1] + + if area[0][0]+area[0][2]/2 < area[5][0]: + area[0][0] = area[5][0]-area[0][2]/2 + if area[0][0]+area[0][2]/2 > area[5][0]+area[5][2]: + area[0][0] = area[5][0]+area[5][2]-area[0][2]/2 + + if area[0][1]+area[0][3]/2 < area[5][1]: + area[0][1] = area[5][1]-area[0][3]/2 + if area[0][1]+area[0][3]/2 > area[5][1]+area[5][3]: + area[0][1] = area[5][1]+area[5][3]-area[0][3]/2 if self.engine.entity_manager.player_entity_name: if K_RIGHT in self.key_pressed: diff --git a/src/engine/renderer.py b/src/engine/renderer.py index 5268df3..fcc6a4f 100644 --- a/src/engine/renderer.py +++ b/src/engine/renderer.py @@ -150,22 +150,32 @@ class Renderer: area[0], width=1) for area in self.engine.event_handler.sliders_area: - print(area) if area[1] == 0: draw.rect(self.window, (0, 255, 20), (area[0][0] * window_size[0], area[0][1] * window_size[0], area[0][2] * window_size[0], area[0][3] * window_size[0]), width=1) + draw.rect(self.window, (0, 255, 200), + (area[5][0] * window_size[0], area[5][1] * window_size[0], + area[5][2] * window_size[0], area[5][3] * window_size[0]), width=1) elif area[1] == 1: draw.rect(self.window, (0, 255, 20), (area[0][0] * window_size[1], area[0][1] * window_size[1], area[0][2] * window_size[1], area[0][3] * window_size[1]), width=1) + draw.rect(self.window, (0, 255, 200), + (area[5][0] * window_size[1], area[5][1] * window_size[1], + area[5][2] * window_size[1], area[5][3] * window_size[1]), width=1) elif area[1] == 2: draw.rect(self.window, (0, 255, 20), (area[0][0] * window_size[0], area[0][1] * window_size[1], area[0][2] * window_size[0], area[0][3] * window_size[1]), width=1) + draw.rect(self.window, (0, 255, 200), + (area[5][0] * window_size[0], area[5][1] * window_size[1], + area[5][2] * window_size[0], area[5][3] * window_size[1]), width=1) else: draw.rect(self.window, (0, 255, 20), area[0], width=1) + draw.rect(self.window, (0, 255, 200), + area[5], width=1) # Rendu présent dans tous les types de jeu self.render_dialogs_box() diff --git a/src/main.py b/src/main.py index 35b7dc8..215334d 100644 --- a/src/main.py +++ b/src/main.py @@ -47,7 +47,7 @@ class Game(Engine): menu.add_widget(Slider(40, 200, base_image, hover_image)) self.menu_manager.register_menu(menu, "main") - self.event_handler.register_slider_area([10, 10, 50, 50]) + self.event_handler.register_slider_area((50, 50), (50, 300, 200, 200), (True, True)) self.menu_manager.show("main")