Ajout d'une boite de limite de déplacement pour les sliders area

This commit is contained in:
Yannis 2024-01-10 20:39:11 +01:00
parent 8ab8eaba24
commit 163f1f0901
3 changed files with 32 additions and 8 deletions

View file

@ -58,12 +58,13 @@ class EventHandler:
self.buttons_area = cleared_list 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): is_window_relative: int = -1):
"""Enregistre une zone comme une zone déplaçable à l'écran.""" """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([[motion_axes[0], motion_axes[1]]+list(size), is_window_relative, False, (0, 0), motion_axes, motion_rect])
print(self.sliders_area[0])
self.sliders_area.append([rect, is_window_relative, False])
# 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 update(self): def update(self):
@ -88,6 +89,7 @@ class EventHandler:
for area in self.sliders_area: for area in self.sliders_area:
if self.get_click_collision(area[0], e.pos, area[1]): if self.get_click_collision(area[0], e.pos, area[1]):
area[2] = True 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: elif e.type == MOUSEBUTTONUP:
for area in self.sliders_area: for area in self.sliders_area:
area[2] = False area[2] = False
@ -106,8 +108,20 @@ class EventHandler:
for area in self.sliders_area: for area in self.sliders_area:
if area[2]: if area[2]:
area[0][0] = e.pos[0] if area[4][0]:
area[0][1] = e.pos[1] 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 self.engine.entity_manager.player_entity_name:
if K_RIGHT in self.key_pressed: if K_RIGHT in self.key_pressed:

View file

@ -150,22 +150,32 @@ class Renderer:
area[0], width=1) area[0], width=1)
for area in self.engine.event_handler.sliders_area: for area in self.engine.event_handler.sliders_area:
print(area)
if area[1] == 0: if area[1] == 0:
draw.rect(self.window, (0, 255, 20), draw.rect(self.window, (0, 255, 20),
(area[0][0] * window_size[0], area[0][1] * window_size[0], (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) 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: elif area[1] == 1:
draw.rect(self.window, (0, 255, 20), draw.rect(self.window, (0, 255, 20),
(area[0][0] * window_size[1], area[0][1] * window_size[1], (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) 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: elif area[1] == 2:
draw.rect(self.window, (0, 255, 20), draw.rect(self.window, (0, 255, 20),
(area[0][0] * window_size[0], area[0][1] * window_size[1], (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) 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: else:
draw.rect(self.window, (0, 255, 20), draw.rect(self.window, (0, 255, 20),
area[0], width=1) area[0], width=1)
draw.rect(self.window, (0, 255, 200),
area[5], width=1)
# Rendu présent dans tous les types de jeu # Rendu présent dans tous les types de jeu
self.render_dialogs_box() self.render_dialogs_box()

View file

@ -47,7 +47,7 @@ class Game(Engine):
menu.add_widget(Slider(40, 200, base_image, hover_image)) menu.add_widget(Slider(40, 200, base_image, hover_image))
self.menu_manager.register_menu(menu, "main") 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") self.menu_manager.show("main")