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__
deDialogueScreen
pour 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
àDialogueScreen
pour 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 deDialogueScreen
dans__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 = 0
Ensuite, 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.