Ajout de la detection de clics pour le passage au prochain dialogue

This commit is contained in:
Yannis 2024-01-06 19:49:19 +01:00
parent 707947fa1d
commit b1d7dc7a8b
3 changed files with 21 additions and 4 deletions

View file

@ -1,10 +1,14 @@
import json import json
from types import FunctionType from types import FunctionType
from src.engine.event_handler import EventHandler
class DialogsManager: class DialogsManager:
"""Classe qui gère la lecture des dialogues.""" """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_dialogs = []
self.current_dialog_id = -1 self.current_dialog_id = -1
self.dialogs = {} self.dialogs = {}
@ -46,6 +50,8 @@ class DialogsManager:
# Si un dialogue n'est pas déja lancé, on lance le dialogue au nom donné # Si un dialogue n'est pas déja lancé, on lance le dialogue au nom donné
if not self.reading_dialog: 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_dialogs = self.dialogs[name]
self.current_dialog_id = 0 self.current_dialog_id = 0
self.current_dialogue_letter_id = 0 self.current_dialogue_letter_id = 0

View file

@ -34,7 +34,7 @@ class Engine:
self.entity_manager = EntityManager(self.map_manager) self.entity_manager = EntityManager(self.map_manager)
self.boss_fight_manager = BossFightManager(self) self.boss_fight_manager = BossFightManager(self)
self.event_sheduler = EventSheduler(self) self.event_sheduler = EventSheduler(self)
self.dialogs_manager = DialogsManager() self.dialogs_manager = DialogsManager(self.event_handler)
def loop(self): def loop(self):
"""Fonction à lancer au début du programme et qui va lancer les updates dans une boucle. """Fonction à lancer au début du programme et qui va lancer les updates dans une boucle.

View file

@ -32,12 +32,23 @@ class EventHandler:
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[float | int, float | int, float | int, float | int], 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): 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é. is_window_relative doit être 0 pour que le rect soit multipliée par la largeur de la fenêtre et 1 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""" 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): 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."""