Ajout de texte dans les assets

This commit is contained in:
Tipragot 2023-11-01 04:16:07 +01:00
parent e5078a10a1
commit 67f4e3cf7b

View file

@ -28,6 +28,8 @@ class Assets(KeepAlive):
# Cache des ressources # Cache des ressources
self.__textures: dict[str, pygame.Surface] = {} self.__textures: dict[str, pygame.Surface] = {}
self.__fonts: dict[int, pygame.font.Font] = {}
self.__texts: dict[tuple[int, str], pygame.Surface] = {}
@property @property
def error_texture(self) -> pygame.Surface: def error_texture(self) -> pygame.Surface:
@ -70,11 +72,43 @@ class Assets(KeepAlive):
""" """
return self.__textures.get(name, self.__error_texture) 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): def clear_cache(self):
""" """
Vide le cache des assets. 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.__textures.clear()
self.__texts.clear()
def __initialize(world: World): def __initialize(world: World):