Musique de fond fonctionnel

This commit is contained in:
Adastram 2024-01-07 21:21:26 +01:00
parent 2e712a954e
commit 81314a60a9
2 changed files with 44 additions and 43 deletions

View file

@ -114,15 +114,17 @@ class Renderer:
# Conteur de données (FPS, Coords, Volume) en mode DEBUG
if self.engine.DEBUG_MODE:
self.window.blit(font.SysFont("Arial", 20).render(f"FPS: {self.engine.clock.get_fps()}", True, (255, 0, 0)),
self.window.blit(font.SysFont("Arial", 20).render(f"FPS: {round(self.engine.clock.get_fps())}", True, (255, 0, 0)),
(0, 0))
player = self.engine.entity_manager.get_by_name('player')
self.window.blit(font.SysFont("Arial", 20).render(f"X: {player.x} Y:{player.y}",
self.window.blit(font.SysFont("Arial", 20).render(f"X: {round(player.x, 2)} Y:{round(player.y, 2)}",
True, (255, 0, 0)), (0, 30))
self.window.blit(font.SysFont("Arial", 20).render(f"Zoom: {self.engine.camera.zoom}",
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.get_music_volume()}",
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}",
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))
# Apres avoir tout rendu, on met à jour l'écran
display.update()

View file

@ -7,89 +7,88 @@ class SoundManager:
self.music_playlist = []
self.music_current_song = ""
self.play_music_playlist = False
self.music_play_playlist = False
self.music_current_index = 0
self.music_before_pause_pos = 0
self.music_before_pause_song = ""
self.music_is_paused = False
self.set_music_volume(music_base_volume)
self.music_pos_delay = 0
self.music_set_volume(music_base_volume)
self.add_to_music_playlist("C:\\Users\\kerri\\Downloads\\Code\\NSI-RPG\\assets\\OST\\Lost Woods - The Legend of Zelda Ocarina of Time.mp3")
self.add_to_music_playlist("C:\\Users\\kerri\\Downloads\\Code\\NSI-RPG\\assets\\OST\\Hyrule Field - The Legend of Zelda Ocarina of Time.mp3")
self.start_music_playlist()
self.do1 = True
self.do2 = True
def update(self, delta: float):
self.__tick += delta
self.tick = int(self.__tick / delta)
self.time = self.tick * delta
if self.play_music_playlist and not self.music_is_paused:
if self.music_play_playlist and not self.music_is_paused: # Musique de fond
if not mixer.music.get_busy():
current_song_index = self.music_playlist.index(self.music_current_song)
if len(self.music_playlist) == 0:
pass
elif len(self.music_playlist) - 1 <= current_song_index:
self.__play_music(self.music_playlist[0]) # Recommence depuis le début de la playlist
elif self.music_current_song == "":
self.__music_play(self.music_playlist[0])
else:
self.__play_music(self.music_playlist[current_song_index + 1]) # Joue la musique suivante dans la playlist
if self.time > 5 and self.do1:
self.do1 = False
self.pause_music(5)
if self.time > 15 and self.do2:
self.do2 = False
self.resume_music(5)
just_played_index = self.music_playlist.index(self.music_current_song)
if len(self.music_playlist) - 1 <= just_played_index: # Dernier son de la playlist / la playlist a rétréci entre temps
self.music_current_index = 0
self.__music_play(self.music_playlist[0]) # Recommence depuis le début de la playlist
else:
self.music_current_index = just_played_index + 1
self.__music_play(self.music_playlist[self.music_current_index]) # Joue la musique suivante dans la playlist
def get_music_volume(self):
def music_get_volume(self):
return mixer.music.get_volume() * 100
def set_music_volume(self, new_volume: float):
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)))
def pause_music(self, fade_s: float, restart_tolerance: float = 33):
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)"""
self.music_is_paused = True
self.music_before_pause_pos = mixer.music.get_pos() / 1000 + fade_s * restart_tolerance / 100 # Récupère la position a laquelle le son doit reprendre lors du .resume()
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()
self.music_before_pause_song = self.music_current_song
mixer.music.fadeout(fade_s * 1000)
def resume_music(self, fade_s: float):
self.__play(self.music_before_pause_song, fade_s, self.music_before_pause_pos)
def music_resume(self, fade_s: float):
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 = ""
def __play_music(self, song: str, fade_s: float = 0, start_at: float = 0):
def music_get_current_song_pos(self):
if mixer.music.get_busy():
return round(mixer.music.get_pos() /1000 + self.music_pos_delay, 3)
else:
return round(self.music_before_pause_pos, 3)
def __music_play(self, song: str, fade_s: float = 0, start_at: float = 0):
mixer.music.unload()
mixer.music.load(song)
mixer.music.play(0, start_at, fade_s * 1000)
self.music_is_paused = False
self.music_current_song = song
self.music_pos_delay = start_at
def add_to_music_playlist(self, song_path: str):
def music_add_to_playlist(self, song_path: str):
self.music_playlist.append(song_path)
def remove_from_music_playlist(self, song_path: str = None, index: int = None):
def music_remove_from_playlist(self, song_path: str = None, index: int = None):
if song_path:
index = self.music_playlist.index(song_path)
if index:
self.music_playlist.pop(index)
def start_music_playlist(self):
self.play_music_playlist = True
def music_start_playlist(self):
self.music_play_playlist = True
def stop_music_playlist(self):
self.play_music_playlist = False
def music_stop_playlist(self):
self.music_play_playlist = False