Pour ajouter une animation aux orateurs, il faudra modifier le code source de dialogue.py.
- Pour ajouter une animation aux orateurs, il faudra modifier le
__init__deDialogueScreenpour ajouter un paramètrespeakers: list[str] = []qui contiendra les noms des orateurs qui ont déjà parlé.
Voilà à quoi ressemblera le __init__ de DialogueScreen après modification :
def __init__(self, screen: Screen, dialogue_data: DialogueData, speed: int = 0.5, speakers: list[str] = []):- Ensuite, il faudra ajouter un attribut
speakersàDialogueScreenpour stocker les noms des orateurs qui ont déjà parlé.
Voilà la ligne à ajouter à DialogueScreen :
self.speakers: list[str] = speakers- Enfin, il faudra ajouter le paramètre
speakersà l'appel deDialogueScreendans__init__deDialogue.
Voilà à quoi ressemblera l'appel de DialogueScreen dans __init__ de Dialogue après modification :
self.dialogue_screen = DialogueScreen(self.screen, dialogue_data=self.dialogue_data, speakers=self.speakers)- Ajouter les images des orateurs dans le dossier
assets/interfaces/characters/battlers.
Les assets que j'ai utilisés ne sont pas libres de droits, je ne peux donc pas les partager. Mais vous pouvez ajouter vos propres images.
Important
Il faudra que le nom de l'image de l'orateur corresponde à celui présent dans le dialogue.
Exemple : si le dialogue est: :[name=Pierre le champion;face=1010,300_big]:Bienvenue jeune dresseur., l'image devra être 300_big.png.
- Après avoir chargé le nom de l'orateur (
self.speaker_name = self.font.render(self.dialogue_data.speaker_name, True, (255, 255, 255))), il faudra charger l'image de l'orateur et du joueur.
Pour cela, il faudra ajouter ces lignes de code après le chargement du nom de l'orateur :
self.speaker_image = pygame.image.load(
f"../../assets/interfaces/characters/battlers/{self.dialogue_data.speaker_image[1]}.png").convert_alpha()
self.player_image = pygame.image.load(
f"../../assets/interfaces/characters/battlers/heros_swan_big.png").convert_alpha()- Enfin, il faudra afficher les images des orateurs et lancer l'animation si l'orateur n'a pas encore parlé.
Il faudra ajouter l'attribut self.speaker_offset = 0 à DialogueScreen pour stocker la position de l'animation de l'orateur.
Voilà la ligne à ajouter à DialogueScreen :
self.speaker_offset: int = 0Ensuite, il faudra ajouter ces lignes de code après la vérification que le dialogue est terminé :
if self.dialogue_data.speaker_name != "error":
if self.dialogue_data.speaker_name == "heros":
self.screen.display.blit(self.player_image, (-128, 78))
self.screen.display.blit(self.background_name, (-8, 480))
self.screen.display.blit(self.speaker_name, (
-8 + self.background_name.get_width() // 2 - self.speaker_name.get_width() // 2, 488))
else:
if self.dialogue_data.speaker_name not in self.speakers:
if self.speaker_offset > 128:
self.speakers.append(self.dialogue_data.speaker_name)
else:
self.speaker_offset += 1
self.screen.display.blit(self.speaker_image, (1280 - self.speaker_image.get_width() + 128 - self.speaker_offset,
78))
self.screen.display.blit(self.background_name,
(1280 - 124 - self.background_name.get_width() // 2, 480))
self.screen.display.blit(self.speaker_name, (
1280 - 124 - self.background_name.get_width() // 2 + self.background_name.get_width() // 2 - self.speaker_name.get_width() // 2,
488))Pour décrire ce code:
- On vérifie si le nom de l'orateur est "heros" pour afficher l'image du joueur.
- On vérifie si l'orateur n'a pas encore parlé pour afficher son image et lancer l'animation.
- On vérifie si l'animation de l'orateur est terminée pour ajouter son nom à la liste des orateurs qui ont déjà parlé.
Si vous avez des questions, n'hésitez pas à les poser dans les commentaires ou sur Discord.