Support de la redimension automatique des boutons
This commit is contained in:
parent
f2fa0dd81f
commit
48611ef4e9
|
@ -1,7 +1,7 @@
|
||||||
import math
|
import math
|
||||||
from types import FunctionType
|
from types import FunctionType
|
||||||
|
|
||||||
from pygame import event
|
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
|
||||||
|
@ -16,14 +16,30 @@ class EventHandler:
|
||||||
self.buttons_area = []
|
self.buttons_area = []
|
||||||
|
|
||||||
@staticmethod
|
@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."""
|
"""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]
|
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
|
"""Enregistre une zone comme bouton. La fonction donnée sera donc executé lorsque la zone sur la fenêtre
|
||||||
sera cliqué."""
|
sera cliqué. is_window_relative doit être 0 pour que le rect soit multipliée par la largeur de la fenêtre et 1
|
||||||
self.buttons_area.append((rect, callback))
|
pour qu'elle soit multipliée par la hauteur"""
|
||||||
|
self.buttons_area.append((rect, callback, is_window_relative))
|
||||||
|
|
||||||
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."""
|
||||||
|
@ -41,7 +57,7 @@ class EventHandler:
|
||||||
# Vérifie si une des zones enregistrées comme bouton n'a pas été cliqué
|
# Vérifie si une des zones enregistrées comme bouton n'a pas été cliqué
|
||||||
if e.button == 1:
|
if e.button == 1:
|
||||||
for area in self.buttons_area:
|
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]()
|
area[1]()
|
||||||
|
|
||||||
if self.engine.entity_manager.player_entity_name:
|
if self.engine.entity_manager.player_entity_name:
|
||||||
|
|
Loading…
Reference in a new issue