Ajout du chargement des sons dans les assets

This commit is contained in:
Tipragot 2023-11-01 04:25:43 +01:00
parent 67f4e3cf7b
commit affd93fd05
2 changed files with 35 additions and 1 deletions

BIN
assets/error.mp3 Normal file

Binary file not shown.

View file

@ -22,6 +22,9 @@ class Assets(KeepAlive):
pygame.draw.rect(error_texture, (255, 0, 255), (128, 128, 128, 128))
self.__error_texture = error_texture.convert()
# Chragement du son d'erreur
self.__error_sound = pygame.mixer.Sound("assets/error.mp3")
# Chargement des textures de chargement
self.__unloaded_texture = pygame.image.load("assets/unloaded.png").convert()
self.__loaded_texture = pygame.image.load("assets/loaded.png").convert()
@ -30,6 +33,7 @@ class Assets(KeepAlive):
self.__textures: dict[str, pygame.Surface] = {}
self.__fonts: dict[int, pygame.font.Font] = {}
self.__texts: dict[tuple[int, str], pygame.Surface] = {}
self.__sounds: dict[str, pygame.mixer.Sound] = {}
@property
def error_texture(self) -> pygame.Surface:
@ -40,6 +44,15 @@ class Assets(KeepAlive):
"""
return self.__error_texture
@property
def error_sound(self) -> pygame.mixer.Sound:
"""
Le son d'erreur.
Cette texture est utilisé lorsque le son demandé n'existe pas.
"""
return self.__error_sound
@property
def unloaded_texture(self) -> pygame.Surface:
"""
@ -100,6 +113,23 @@ class Assets(KeepAlive):
)
return surface
def load_sound(self, name: str, path: str) -> pygame.mixer.Sound:
"""
Charge un son et le renvoi. Si un son existe déja dans le cache,
il sera remplacé par le nouveau.
"""
sound = pygame.mixer.Sound(path)
self.__sounds[name] = sound
return sound
def get_sound(self, name: str) -> pygame.mixer.Sound:
"""
Renvoie le son demandé.
Si le son n'existe pas dans le cache, le son d'erreur sera renvoyé.
"""
return self.__sounds.get(name, self.__error_sound)
def clear_cache(self):
"""
Vide le cache des assets.
@ -109,6 +139,7 @@ class Assets(KeepAlive):
"""
self.__textures.clear()
self.__texts.clear()
self.__sounds.clear()
def __initialize(world: World):
@ -174,6 +205,7 @@ def loading_scene(target: Scene, name: str):
"""
Charge le fichier suivant de l'itérateur.
"""
assets = world[Assets]
asset_iterator = world[AssetIterator]
if len(asset_iterator.files) == 0:
world[CurrentScene] = target
@ -184,7 +216,9 @@ def loading_scene(target: Scene, name: str):
: -len(ressource_extension) - 1
]
if ressource_extension in ("png", "jpg"):
world[Assets].load_texture(ressource_name, file)
assets.load_texture(ressource_name, file)
if ressource_extension in ("mp3", "wav", "ogg"):
assets.load_sound(ressource_name, file)
class ProgessBar:
"""