ecs #58
|
@ -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):
|
||||
|
|
Loading…
Reference in a new issue