From 011c7f4895fe7d083c0ae556686e9d6c3aeb634f Mon Sep 17 00:00:00 2001 From: Yannis300307 Date: Fri, 5 Jan 2024 19:17:50 +0100 Subject: [PATCH] Ajout de la lecture des dialogues --- assets/dialogs.json | 4 ++++ src/engine/dialogs_manager.py | 21 +++++++++++++++++++-- src/engine/engine.py | 2 ++ src/main.py | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 assets/dialogs.json diff --git a/assets/dialogs.json b/assets/dialogs.json new file mode 100644 index 0000000..4c15f5f --- /dev/null +++ b/assets/dialogs.json @@ -0,0 +1,4 @@ +{ + "test": ["test1", "test2", "test très long permettant de tester le retour à la ligne dans le renderer du jeu dans la fonction qui rend les dialogues et il faut éviter d'en faire des si long car ça pourrait dépacer en base de l'écran ! Bonne journée !"], + "test2": ["salut", "aurevoir"] +} \ No newline at end of file diff --git a/src/engine/dialogs_manager.py b/src/engine/dialogs_manager.py index bf15837..ecc94f9 100644 --- a/src/engine/dialogs_manager.py +++ b/src/engine/dialogs_manager.py @@ -4,10 +4,27 @@ import json class DialogsManager: """Classe qui gère la lecture des dialogues.""" def __init__(self): - self.current_dialog = [] + self.current_dialogs = [] + self.current_dialog_id = -1 self.dialogs = {} + def next_dialog(self): + """Passe au dialogue suivant. Renvoie True si le dialogue est fini.""" + self.current_dialog_id += 1 + if self.current_dialog_id == len(self.current_dialogs): + self.current_dialogs = [] + self.current_dialog_id = -1 + + def start_dialog(self, name: str): + """Lance le dialogue au nom donné.""" + self.current_dialogs = self.dialogs[name] + self.current_dialog_id = 0 + + def get_current_dialog_sentence(self) -> str: + """Renvoie la phrase actuelle du dialogue.""" + return self.current_dialogs[self.current_dialog_id] + def load_dialogs(self, file_path: str): """Charge les dialogues du jeu grave au fichier json donné.""" - with open(file_path, "r") as file: + with open(file_path, "r", encoding="utf-8") as file: self.dialogs = json.loads(file.read()) diff --git a/src/engine/engine.py b/src/engine/engine.py index ddea6c6..ca07190 100644 --- a/src/engine/engine.py +++ b/src/engine/engine.py @@ -1,5 +1,6 @@ from src.engine.boss_fight_manager import BossFightManager from src.engine.camera import Camera +from src.engine.dialogs_manager import DialogsManager from src.engine.entity_manager import EntityManager from src.engine.event_handler import EventHandler from src.engine.event_sheduler import EventSheduler @@ -33,6 +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() def loop(self): """Fonction à lancer au début du programme et qui va lancer les updates dans une boucle. diff --git a/src/main.py b/src/main.py index cacd8eb..eb753e1 100644 --- a/src/main.py +++ b/src/main.py @@ -12,6 +12,7 @@ class Game(Engine): self.map_manager.load_new("maps/map5.tmj") self.renderer.load_tile_set("assets/textures/tileset.png", 16) + self.dialogs_manager.load_dialogs("assets/dialogs.json") self.create_player_entity() self.load_boss_fight_assets()