From 67f4e3cf7bb4ba860421c1de8f03c6157e3efcdd Mon Sep 17 00:00:00 2001 From: Tipragot Date: Wed, 1 Nov 2023 04:16:07 +0100 Subject: [PATCH] Ajout de texte dans les assets --- src/plugins/assets.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/plugins/assets.py b/src/plugins/assets.py index 4c831ca..06803a2 100644 --- a/src/plugins/assets.py +++ b/src/plugins/assets.py @@ -28,6 +28,8 @@ class Assets(KeepAlive): # Cache des ressources self.__textures: dict[str, pygame.Surface] = {} + self.__fonts: dict[int, pygame.font.Font] = {} + self.__texts: dict[tuple[int, str], pygame.Surface] = {} @property def error_texture(self) -> pygame.Surface: @@ -70,11 +72,43 @@ class Assets(KeepAlive): """ return self.__textures.get(name, self.__error_texture) + def get_font(self, size: int) -> pygame.font.Font: + """ + Renvoie la police d'ecriture du jeu avec la taille demandée. + + Cette fonction charge le fichier `assets/font.ttf` pour la taille demandée + et la met dans le cache. Si la police d'ecriture existe déjà dans le cache, + elle sera renvoyée directement. + """ + font = self.__fonts.get(size) + if font is None: + font = self.__fonts[size] = pygame.font.Font("assets/font.ttf", size) + return font + + def get_text(self, size: int, text: str, color: pygame.Color) -> pygame.Surface: + """ + Renvoie une image correspondant à la chaîne de caractères demandée avec + la taille de police demandée et la couleur demandée. + + Si l'image du texte demandé n'est pas dans le cache, elle sera créer + puis mis dans le cache et enfin renvoyée. + """ + surface = self.__texts.get((size, text)) + if surface is None: + surface = self.__texts[(size, text)] = self.get_font(size).render( + text, True, color + ) + return surface + def clear_cache(self): """ Vide le cache des assets. + + Les fonts ne sont pas effacés car ils n'y a normalement pas énormément + de taille de police différentes utilisées. """ self.__textures.clear() + self.__texts.clear() def __initialize(world: World):