From a86d89c56384154ec6e0d998966b7a23f61a3df4 Mon Sep 17 00:00:00 2001 From: adastram Date: Tue, 9 Jan 2024 23:12:28 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20support=20du=20r=C3=A9glage=20de?= =?UTF-8?q?=20son=20dans=20le=20sound=5Fmanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/engine/sound_manager.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/engine/sound_manager.py b/src/engine/sound_manager.py index 20b3eb5..2f86468 100644 --- a/src/engine/sound_manager.py +++ b/src/engine/sound_manager.py @@ -5,7 +5,7 @@ from math import sqrt from time import time class SoundManager: - def __init__(self, music_base_volume: float, ): + def __init__(self, music_base_volume: float): 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) @@ -32,28 +32,37 @@ class SoundManager: self.sound_hears_anchor = None - def update(self, delta: float): + 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) self.time = self.tick * delta + self.music_master_volume = music_master_volume + self.sound_global_master_volume = sound_global_master_volume + self.sound_master_volume = sound_master_volume + + if self.sound_hears_anchor: # Update la position des "Oreilles" du joueur (Ou de l'entité séléctionné comme ancre pour les oreilles) self.sound_hears_x = self.sound_hears_anchor.x self.sound_hears_y = self.sound_hears_anchor.y for key in self.sound_global_currently_playing.keys(): # Son globaux - if self.sound_global_currently_playing[key][2] > self.time: + sound_container = self.sound_global_currently_playing[key] + if sound_container[2] > self.time: self.sound_global_currently_playing.pop(key) + else: + sound_container[0].set_volume(round(sound_global_master_volume / 100 * sound_container[1] / 100, 3)) for key in self.sound_currently_playing.keys(): # Son locaux - if self.sound_currently_playing[key][3] > self.time: # Timeout des sons + sound_container = self.sound_currently_playing[key] + if sound_container[3] > self.time: # Timeout des sons self.sound_currently_playing.pop(key) else: # Gère le volume en fonction de la position - sound = self.sound_currently_playing[key][0] - max_volume = self.sound_currently_playing[key][1] - pos_x, pos_y = self.sound_currently_playing[2] - sound.set_volume(max(0, int((max_volume / 100) - sqrt((pos_x - self.sound_hears_x) ** 2 + (pos_y - self.sound_hears_y) ** 2))) / (max_volume / 100)) + sound = sound_container[0] + max_volume = sound_container[1] + pos_x, pos_y = sound_container[2] + 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: @@ -97,7 +106,7 @@ class SoundManager: def music_set_volume(self, new_volume: float): """Définit le nouveau volume de la musique""" - mixer.music.set_volume((round(new_volume / 100, 3))) + 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): """Met en pause la musique, la musique reprendra à la fin de la musique moin la tolérance (en pourcentage)""" @@ -182,7 +191,6 @@ class SoundManager: def sound_global_play(self, name: str, volume: float): """Joue un son avec le même son dans tout le monde""" sound = self.sound_loaded[name] - sound.set_volume(round(volume / 100, 3)) stop_at = self.time + sound.get_length() unique_id = self.create_unique_id()