sliders #32

Merged
yannis merged 19 commits from sliders into main 2024-01-12 22:29:33 +00:00
Showing only changes of commit 636e006e50 - Show all commits

View file

@ -5,6 +5,7 @@ from pygame import event, display
from pygame.locals import * from pygame.locals import *
import src.engine.engine as engine import src.engine.engine as engine
from src.engine.menu_manager import Slider
class EventHandler: class EventHandler:
@ -15,6 +16,7 @@ class EventHandler:
self.key_pressed = [] self.key_pressed = []
self.buttons_area = [] self.buttons_area = []
self.hovered_area = [] self.hovered_area = []
self.sliders_area = []
@staticmethod @staticmethod
def get_click_collision(rect: tuple[float | int, float | int, float | int, float | int], point: tuple[int, int], 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 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): def update(self):
"""Vérifie s'il y a de nouvelles interactions et les traites.""" """Vérifie s'il y a de nouvelles interactions et les traites."""
@ -74,6 +84,14 @@ class EventHandler:
for area in self.buttons_area: for area in self.buttons_area:
if self.get_click_collision(area[0], e.pos, area[2]): if self.get_click_collision(area[0], e.pos, area[2]):
area[1]() 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: elif e.type == MOUSEMOTION:
for area in self.buttons_area: for area in self.buttons_area:
if area[4] is not None: if area[4] is not None:
@ -86,6 +104,11 @@ class EventHandler:
area[4](False) area[4](False)
self.hovered_area.remove(area) 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 self.engine.entity_manager.player_entity_name:
if K_RIGHT in self.key_pressed: if K_RIGHT in self.key_pressed:
self.engine.entity_manager.move_player_controls(1, 0) self.engine.entity_manager.move_player_controls(1, 0)