ecs #58

Merged
raphael merged 70 commits from ecs into main 2023-11-03 15:29:36 +00:00
Showing only changes of commit 67f4e3cf7b - Show all commits

View file

@ -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):