From b1d7dc7a8b523bb291803773fa67ad71e4f2a068 Mon Sep 17 00:00:00 2001 From: yannis300307 Date: Sat, 6 Jan 2024 19:49:19 +0100 Subject: [PATCH] Ajout de la detection de clics pour le passage au prochain dialogue --- src/engine/dialogs_manager.py | 8 +++++++- src/engine/engine.py | 2 +- src/engine/event_handler.py | 15 +++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/engine/dialogs_manager.py b/src/engine/dialogs_manager.py index cb6348e..7035b7d 100644 --- a/src/engine/dialogs_manager.py +++ b/src/engine/dialogs_manager.py @@ -1,10 +1,14 @@ import json from types import FunctionType +from src.engine.event_handler import EventHandler + class DialogsManager: """Classe qui gère la lecture des dialogues.""" - def __init__(self): + def __init__(self, event_handler: EventHandler): + self.event_handler = event_handler + self.current_dialogs = [] self.current_dialog_id = -1 self.dialogs = {} @@ -46,6 +50,8 @@ class DialogsManager: # Si un dialogue n'est pas déja lancé, on lance le dialogue au nom donné if not self.reading_dialog: + self.event_handler.register_button_area((0, 0, 1, 1), self.next_signal, "next_dialog", 0) + self.current_dialogs = self.dialogs[name] self.current_dialog_id = 0 self.current_dialogue_letter_id = 0 diff --git a/src/engine/engine.py b/src/engine/engine.py index 69fb4b2..0d67740 100644 --- a/src/engine/engine.py +++ b/src/engine/engine.py @@ -34,7 +34,7 @@ class Engine: self.entity_manager = EntityManager(self.map_manager) self.boss_fight_manager = BossFightManager(self) self.event_sheduler = EventSheduler(self) - self.dialogs_manager = DialogsManager() + self.dialogs_manager = DialogsManager(self.event_handler) def loop(self): """Fonction à lancer au début du programme et qui va lancer les updates dans une boucle. diff --git a/src/engine/event_handler.py b/src/engine/event_handler.py index b04858d..e14cf13 100644 --- a/src/engine/event_handler.py +++ b/src/engine/event_handler.py @@ -32,12 +32,23 @@ class EventHandler: 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[float | int, float | int, float | int, float | int], - callback: FunctionType | classmethod | staticmethod, + callback: FunctionType | classmethod | staticmethod, name: str, 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é. 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)) + self.buttons_area.append((rect, callback, is_window_relative, name)) + + def remove_button_area(self, name: str): + """Supprime les boutons aux noms donnés.""" + + # On itère dans toute la liste et on ne garde que les éléments ne portant pas le nom cherché + cleared_list = [] + for area in self.buttons_area: + if area[3] != name: + cleared_list.append(area) + + self.buttons_area = cleared_list def update(self): """Vérifie s'il y a de nouvelles interactions et les traites."""