Added Shuffle and Next Function fro music

This commit is contained in:
Adastram 2024-01-09 11:27:11 +01:00
parent b9a81ba12e
commit 490b5c46ba

View file

@ -1,4 +1,5 @@
from src.engine.entity import Entity from src.engine.entity import Entity
from random import randint
from pygame import mixer from pygame import mixer
from math import sqrt from math import sqrt
from time import time from time import time
@ -13,6 +14,8 @@ class SoundManager:
self.music_current_song = "" self.music_current_song = ""
self.music_play_playlist = False self.music_play_playlist = False
self.music_current_index = 0 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(music_base_volume)
self.music_before_pause_pos = 0 self.music_before_pause_pos = 0
@ -43,21 +46,41 @@ class SoundManager:
self.sound_global_currently_playing.pop(key) self.sound_global_currently_playing.pop(key)
if self.music_play_playlist and not self.music_is_paused: # Musique de fond if self.music_play_playlist and not self.music_is_paused: # Musique de fond
if not mixer.music.get_busy(): 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 len(self.music_playlist) == 0: if len(self.music_playlist) == 0:
pass pass
elif self.music_current_song == "": elif self.music_current_song == "":
self.__music_play(self.music_playlist[0]) self.__music_play(self.music_playlist[0])
else: else:
if self.music_current_song in self.music_playlist:
just_played_index = self.music_playlist.index(self.music_current_song) 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
if self.music_shuffle_playlist and len(self.music_playlist) != 1:
while True:
new_index = randint(0, len(self.music_playlist) - 1)
if new_index != just_played_index:
break
self.music_current_index = new_index
self.__music_play(self.music_playlist[new_index])
elif 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_current_index = 0
self.__music_play(self.music_playlist[0]) # Recommence depuis le début de la playlist self.__music_play(self.music_playlist[0]) # Recommence depuis le début de la playlist
else: else:
self.music_current_index = just_played_index + 1 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 self.__music_play(self.music_playlist[self.music_current_index]) # Joue la musique suivante dans la playlist
else: # Song removed from playlist, no idea what was the index, starting again from start or from random index if playlist_shuffle = True
new_index = randint(0, len(self.music_playlist) - 1)
self.music_current_index = new_index
self.__music_play(self.music_playlist[new_index])
def music_get_volume(self): def music_get_volume(self):
return mixer.music.get_volume() * 100 return mixer.music.get_volume() * 100
@ -109,6 +132,12 @@ class SoundManager:
def music_stop_playlist(self): def music_stop_playlist(self):
self.music_play_playlist = False self.music_play_playlist = False
def music_playlist_set_shuffle(self, shuffle: bool):
self.music_shuffle_playlist = shuffle
def music_next(self):
self.music_next_request = True
def sound_link_hears(self, entity: Entity): def sound_link_hears(self, entity: Entity):
self.sound_hears_anchor = entity self.sound_hears_anchor = entity