diff --git a/src/engine/animation.py b/src/engine/animation.py index 2282054..db011b8 100644 --- a/src/engine/animation.py +++ b/src/engine/animation.py @@ -1,7 +1,6 @@ # Classe animation adaptée depuis ESG Engine : # https://github.com/yannis300307/ESG_Engine/blob/main/ESG_Engine/client/animation.py import os - import pygame diff --git a/src/engine/engine.py b/src/engine/engine.py index 0abcc69..33432f6 100644 --- a/src/engine/engine.py +++ b/src/engine/engine.py @@ -38,7 +38,7 @@ class Engine: self.event_sheduler = EventSheduler(self) self.dialogs_manager = DialogsManager(self.event_handler) self.menu_manager = MenuManager(self) - self.sound_manager = SoundManager(60) + self.sound_manager = SoundManager() def loop(self): """Fonction à lancer au début du programme et qui va lancer les updates dans une boucle. @@ -57,7 +57,7 @@ class Engine: self.event_handler.update() self.event_sheduler.update() self.dialogs_manager.update(0.016666666) - self.sound_manager.update(1/60) + self.sound_manager.update(1/60, 100, 100, 100) def stop(self): """Arrête le programme.""" diff --git a/src/engine/renderer.py b/src/engine/renderer.py index 4a3389e..37b9805 100644 --- a/src/engine/renderer.py +++ b/src/engine/renderer.py @@ -124,7 +124,7 @@ class Renderer: True, (255, 0, 0)), (0, 30)) self.window.blit(font.SysFont("Arial", 20).render(f"Zoom: {round(self.engine.camera.zoom, 2)}", True, (255, 0, 0)), (0, 60)) - self.window.blit(font.SysFont("Arial", 20).render(f"Volume: {self.engine.sound_manager.music_get_volume()}, Pos: {self.engine.sound_manager.music_get_current_song_pos()}s, Index: {self.engine.sound_manager.music_current_index}, Paused: {self.engine.sound_manager.music_is_paused}", + self.window.blit(font.SysFont("Arial", 20).render(f"Volume: {self.engine.sound_manager.music_get_volume()}, Pos: {self.engine.sound_manager.music_get_current_song_pos()}s, Index: {self.engine.sound_manager.music_current_index}, Paused: {self.engine.sound_manager.music_is_paused}, Shuffled: {self.engine.sound_manager.music_shuffle_playlist}", True, (255, 0, 0)), (0, 90)) self.window.blit(font.SysFont("Arial", 20).render(f"Track: {self.engine.sound_manager.music_current_song}", True, (255, 0, 0)), (0, 120)) diff --git a/src/engine/sound_manager.py b/src/engine/sound_manager.py index 2f86468..b7be24f 100644 --- a/src/engine/sound_manager.py +++ b/src/engine/sound_manager.py @@ -5,10 +5,14 @@ from math import sqrt from time import time class SoundManager: - def __init__(self, music_base_volume: float): + def __init__(self): self.__tick = 0 # Compteur de la valeur d'un tick (Utilisé pour le comptage de tick) self.tick = 0 # Compteur de tick self.time = 0 # Temps local a la class (en s) + + self.music_master_volume = 60 + self.sound_global_master_volume = 100 + self.sound_master_volume = 100 self.music_playlist = [] self.music_current_song = "" @@ -16,7 +20,7 @@ class SoundManager: self.music_current_index = 0 self.music_shuffle_playlist = True self.music_next_request = False - self.music_set_volume(music_base_volume) + self.music_set_volume(self.music_master_volume) self.music_before_pause_pos = 0 self.music_before_pause_song = "" @@ -32,6 +36,16 @@ class SoundManager: self.sound_hears_anchor = None + self.do1 = True + self.do2 = True + self.do3 = True + self.do4 = True + self.music_add_to_playlist(".\\assets\\OST\\Vampire Killer.mp3") + self.music_add_to_playlist(".\\assets\\OST\\Hyrule Field - The Legend of Zelda Ocarina of Time.mp3") + self.music_add_to_playlist(".\\assets\\OST\\Lost Woods - The Legend of Zelda Ocarina of Time.mp3") + self.music_add_to_playlist(".\\assets\\OST\\Title Theme - The Legend of Zelda Ocarina of Time.mp3") + self.music_start_playlist() + def update(self, delta: float, music_master_volume: float, sound_global_master_volume: float, sound_master_volume: float): self.__tick += delta self.tick = int(self.__tick / delta) @@ -65,15 +79,13 @@ class SoundManager: sound.set_volume(max(0, int((round(sound_master_volume / 100 * max_volume / 100, 3)) - sqrt((pos_x - self.sound_hears_x) ** 2 + (pos_y - self.sound_hears_y) ** 2))) / (round(sound_master_volume / 100 * max_volume / 100, 3))) if self.music_play_playlist and not self.music_is_paused: # Musique de fond - if not mixer.music.get_busy() or self.music_next_request: - if self.music_next_request: - self.music_next_request = False - mixer.music.fadeout(1) - + if not mixer.music.get_busy(): if len(self.music_playlist) == 0: pass + elif self.music_current_song == "": self.__music_play(self.music_playlist[0]) + else: if self.music_current_song in self.music_playlist: just_played_index = self.music_playlist.index(self.music_current_song) @@ -100,6 +112,25 @@ class SoundManager: self.music_current_index = new_index self.__music_play(self.music_playlist[new_index]) + if self.music_next_request: + self.music_next_request = False + mixer.music.fadeout(1) + + if self.do1 and self.time > 5: + self.music_playlist_set_shuffle(False) + self.do1 = False + + if self.do2 and self.time > 15: + self.music_next() + self.do2 = False + + if self.do3 and self.time > 25: + self.music_pause() + self.do3 = False + + if self.do4 and self.time > 35: + self.music_next() + self.do4 = False def music_get_volume(self): return mixer.music.get_volume() * 100 @@ -108,7 +139,7 @@ class SoundManager: """Définit le nouveau volume de la musique""" mixer.music.set_volume((round(self.music_master_volume / 100 * new_volume / 100, 3))) - def music_pause(self, fade_s: float, restart_tolerance: float = 33): + def music_pause(self, fade_s: float = 0, restart_tolerance: float = 33): """Met en pause la musique, la musique reprendra à la fin de la musique moin la tolérance (en pourcentage)""" self.music_is_paused = True self.music_before_pause_pos = self.music_get_current_song_pos() + fade_s * restart_tolerance / 100 # Récupère la position a laquelle le son doit reprendre lors du .resume() @@ -116,7 +147,7 @@ class SoundManager: mixer.music.fadeout(fade_s * 1000) - def music_resume(self, fade_s: float): + def music_resume(self, fade_s: float = 0): self.__music_play(self.music_before_pause_song, fade_s, self.music_before_pause_pos) self.music_before_pause_pos = 0 self.music_before_pause_song = ""