diff --git a/assets/error.mp3 b/assets/error.mp3 new file mode 100644 index 0000000..a3679b4 Binary files /dev/null and b/assets/error.mp3 differ diff --git a/src/plugins/assets.py b/src/plugins/assets.py index 06803a2..0002a0a 100644 --- a/src/plugins/assets.py +++ b/src/plugins/assets.py @@ -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: """