Ajout option pour desactiver la musique depuis le menu pause
This commit is contained in:
@@ -98,11 +98,16 @@ config.repeat_last_action = 0
|
|||||||
music_folder = os.path.join(config.APP_FOLDER, "assets", "music")
|
music_folder = os.path.join(config.APP_FOLDER, "assets", "music")
|
||||||
music_files = [f for f in os.listdir(music_folder) if f.lower().endswith(('.ogg', '.mp3'))]
|
music_files = [f for f in os.listdir(music_folder) if f.lower().endswith(('.ogg', '.mp3'))]
|
||||||
current_music = None # Variable pour suivre la musique en cours
|
current_music = None # Variable pour suivre la musique en cours
|
||||||
|
config.music_folder = music_folder
|
||||||
|
config.music_files = music_files
|
||||||
|
config.current_music = current_music
|
||||||
|
|
||||||
if music_files:
|
if music_files:
|
||||||
current_music = play_random_music(music_files, music_folder, current_music)
|
current_music = play_random_music(music_files, music_folder, current_music)
|
||||||
else:
|
else:
|
||||||
logger.debug("Aucune musique trouvée dans config.APP_FOLDER/assets/music")
|
logger.debug("Aucune musique trouvée dans config.APP_FOLDER/assets/music")
|
||||||
|
|
||||||
|
config.current_music = current_music # Met à jour la musique en cours dans config
|
||||||
|
|
||||||
# Chargement de l'historique
|
# Chargement de l'historique
|
||||||
config.history = load_history()
|
config.history = load_history()
|
||||||
@@ -133,6 +138,8 @@ if pygame.joystick.get_count() > 0:
|
|||||||
# Initialisation du mixer Pygame
|
# Initialisation du mixer Pygame
|
||||||
pygame.mixer.pre_init(44100, -16, 2, 4096)
|
pygame.mixer.pre_init(44100, -16, 2, 4096)
|
||||||
pygame.mixer.init()
|
pygame.mixer.init()
|
||||||
|
from utils import load_music_config
|
||||||
|
load_music_config()
|
||||||
|
|
||||||
|
|
||||||
# Boucle principale
|
# Boucle principale
|
||||||
|
|||||||
12
config.py
12
config.py
@@ -49,7 +49,6 @@ SYSTEM_FOLDER = get_system_root()
|
|||||||
APP_FOLDER = os.path.join(get_application_root(), "RGSX")
|
APP_FOLDER = os.path.join(get_application_root(), "RGSX")
|
||||||
ROMS_FOLDER = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(APP_FOLDER))), "roms")
|
ROMS_FOLDER = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(APP_FOLDER))), "roms")
|
||||||
SAVE_FOLDER = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(APP_FOLDER))), "saves", "ports", "rgsx")
|
SAVE_FOLDER = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(APP_FOLDER))), "saves", "ports", "rgsx")
|
||||||
|
|
||||||
# Configuration du logging
|
# Configuration du logging
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
log_dir = os.path.join(APP_FOLDER, "logs")
|
log_dir = os.path.join(APP_FOLDER, "logs")
|
||||||
@@ -64,8 +63,7 @@ CONTROLS_CONFIG_PATH = os.path.join(SAVE_FOLDER, "controls.json")
|
|||||||
HISTORY_PATH = os.path.join(SAVE_FOLDER, "history.json")
|
HISTORY_PATH = os.path.join(SAVE_FOLDER, "history.json")
|
||||||
LANGUAGE_CONFIG_PATH = os.path.join(SAVE_FOLDER, "language.json")
|
LANGUAGE_CONFIG_PATH = os.path.join(SAVE_FOLDER, "language.json")
|
||||||
JSON_EXTENSIONS = os.path.join(APP_FOLDER, "rom_extensions.json")
|
JSON_EXTENSIONS = os.path.join(APP_FOLDER, "rom_extensions.json")
|
||||||
|
MUSIC_CONFIG_PATH = os.path.join(SAVE_FOLDER, "music_config.json")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# URL
|
# URL
|
||||||
@@ -102,6 +100,7 @@ transition_state = "idle"
|
|||||||
transition_progress = 0.0
|
transition_progress = 0.0
|
||||||
transition_duration = 18
|
transition_duration = 18
|
||||||
games_count = {}
|
games_count = {}
|
||||||
|
music_enabled = True # Par défaut la musique est activée
|
||||||
API_KEY_1FICHIER = "" # Initialisation de la variable globale pour la clé API
|
API_KEY_1FICHIER = "" # Initialisation de la variable globale pour la clé API
|
||||||
|
|
||||||
# Variables pour la sélection de langue
|
# Variables pour la sélection de langue
|
||||||
@@ -205,9 +204,4 @@ def validate_resolution():
|
|||||||
if SCREEN_WIDTH > display_info.current_w or SCREEN_HEIGHT > display_info.current_h:
|
if SCREEN_WIDTH > display_info.current_w or SCREEN_HEIGHT > display_info.current_h:
|
||||||
logger.warning(f"Résolution {SCREEN_WIDTH}x{SCREEN_HEIGHT} dépasse les limites de l'écran")
|
logger.warning(f"Résolution {SCREEN_WIDTH}x{SCREEN_HEIGHT} dépasse les limites de l'écran")
|
||||||
return display_info.current_w, display_info.current_h
|
return display_info.current_w, display_info.current_h
|
||||||
return SCREEN_WIDTH, SCREEN_HEIGHT
|
return SCREEN_WIDTH, SCREEN_HEIGHT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
25
controls.py
25
controls.py
@@ -9,7 +9,7 @@ import json
|
|||||||
import os
|
import os
|
||||||
from display import draw_validation_transition
|
from display import draw_validation_transition
|
||||||
from network import download_rom, download_from_1fichier, is_1fichier_url
|
from network import download_rom, download_from_1fichier, is_1fichier_url
|
||||||
from utils import load_games, check_extension_before_download, is_extension_supported, load_extensions_json, sanitize_filename, load_api_key_1fichier
|
from utils import load_games, check_extension_before_download, is_extension_supported, load_extensions_json, play_random_music, sanitize_filename, load_api_key_1fichier, save_music_config
|
||||||
from history import load_history, clear_history, add_to_history, save_history
|
from history import load_history, clear_history, add_to_history, save_history
|
||||||
import logging
|
import logging
|
||||||
from language import _ # Import de la fonction de traduction
|
from language import _ # Import de la fonction de traduction
|
||||||
@@ -861,16 +861,11 @@ def handle_controls(event, sources, joystick, screen):
|
|||||||
#logger.debug(f"État pause_menu, selected_option={config.selected_option}, événement={event.type}, valeur={getattr(event, 'value', None)}")
|
#logger.debug(f"État pause_menu, selected_option={config.selected_option}, événement={event.type}, valeur={getattr(event, 'value', None)}")
|
||||||
if is_input_matched(event, "up"):
|
if is_input_matched(event, "up"):
|
||||||
config.selected_option = max(0, config.selected_option - 1)
|
config.selected_option = max(0, config.selected_option - 1)
|
||||||
# La répétition est gérée par update_key_state
|
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
#logger.debug(f"Navigation vers le haut: selected_option={config.selected_option}")
|
|
||||||
elif is_input_matched(event, "down"):
|
elif is_input_matched(event, "down"):
|
||||||
config.selected_option = min(6, config.selected_option + 1)
|
config.selected_option = min(7, config.selected_option + 1) # 7 options maintenant
|
||||||
# La répétition est gérée par update_key_state
|
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
#logger.debug(f"Navigation vers le bas: selected_option={config.selected_option}")
|
|
||||||
elif is_input_matched(event, "confirm"):
|
elif is_input_matched(event, "confirm"):
|
||||||
#logger.debug(f"Confirmation dans pause_menu avec selected_option={config.selected_option}")
|
|
||||||
if config.selected_option == 0: # Controls
|
if config.selected_option == 0: # Controls
|
||||||
config.previous_menu_state = validate_menu_state(config.previous_menu_state)
|
config.previous_menu_state = validate_menu_state(config.previous_menu_state)
|
||||||
config.menu_state = "controls_help"
|
config.menu_state = "controls_help"
|
||||||
@@ -914,7 +909,21 @@ def handle_controls(event, sources, joystick, screen):
|
|||||||
config.redownload_confirm_selection = 0
|
config.redownload_confirm_selection = 0
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
logger.debug(f"Passage à redownload_game_cache depuis pause_menu")
|
logger.debug(f"Passage à redownload_game_cache depuis pause_menu")
|
||||||
elif config.selected_option == 6: # Quit
|
elif config.selected_option == 6: # Music toggle
|
||||||
|
config.music_enabled = not config.music_enabled
|
||||||
|
save_music_config()
|
||||||
|
if config.music_enabled:
|
||||||
|
# Relancer la musique si activée
|
||||||
|
# Utilise les variables globales si elles existent
|
||||||
|
music_files = getattr(config, "music_files", None)
|
||||||
|
music_folder = getattr(config, "music_folder", None)
|
||||||
|
if music_files and music_folder:
|
||||||
|
config.current_music = play_random_music(music_files, music_folder, getattr(config, "current_music", None))
|
||||||
|
else:
|
||||||
|
pygame.mixer.music.stop()
|
||||||
|
config.needs_redraw = True
|
||||||
|
logger.info(f"Musique {'activée' if config.music_enabled else 'désactivée'} via menu pause")
|
||||||
|
elif config.selected_option == 7: # Quit
|
||||||
config.previous_menu_state = validate_menu_state(config.previous_menu_state)
|
config.previous_menu_state = validate_menu_state(config.previous_menu_state)
|
||||||
config.menu_state = "confirm_exit"
|
config.menu_state = "confirm_exit"
|
||||||
config.confirm_selection = 0
|
config.confirm_selection = 0
|
||||||
|
|||||||
@@ -1161,6 +1161,13 @@ def draw_pause_menu(screen, selected_option):
|
|||||||
"""Dessine le menu pause avec un style moderne."""
|
"""Dessine le menu pause avec un style moderne."""
|
||||||
screen.blit(OVERLAY, (0, 0))
|
screen.blit(OVERLAY, (0, 0))
|
||||||
|
|
||||||
|
# Option musique dynamique
|
||||||
|
if config.music_enabled:
|
||||||
|
music_name = config.current_music_name or ""
|
||||||
|
music_option = _("menu_music_enabled").format(music_name)
|
||||||
|
else:
|
||||||
|
music_option = _("menu_music_disabled")
|
||||||
|
|
||||||
options = [
|
options = [
|
||||||
_("menu_controls"),
|
_("menu_controls"),
|
||||||
_("menu_remap_controls"),
|
_("menu_remap_controls"),
|
||||||
@@ -1168,6 +1175,7 @@ def draw_pause_menu(screen, selected_option):
|
|||||||
_("menu_language"),
|
_("menu_language"),
|
||||||
_("menu_accessibility"),
|
_("menu_accessibility"),
|
||||||
_("menu_redownload_cache"),
|
_("menu_redownload_cache"),
|
||||||
|
music_option, # Ici l'option dynamique
|
||||||
_("menu_quit")
|
_("menu_quit")
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1290,6 +1298,7 @@ def draw_controls_help(screen, previous_state):
|
|||||||
|
|
||||||
control_columns = state_controls.get(previous_state, {})
|
control_columns = state_controls.get(previous_state, {})
|
||||||
if not control_columns:
|
if not control_columns:
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
screen.blit(OVERLAY, (0, 0))
|
screen.blit(OVERLAY, (0, 0))
|
||||||
|
|||||||
@@ -70,6 +70,9 @@
|
|||||||
"menu_accessibility": "Accessibilité",
|
"menu_accessibility": "Accessibilité",
|
||||||
"menu_redownload_cache": "Retélécharger le cache des jeux",
|
"menu_redownload_cache": "Retélécharger le cache des jeux",
|
||||||
"menu_quit": "Quitter",
|
"menu_quit": "Quitter",
|
||||||
|
"menu_music_toggle": "Activer/Désactiver la musique",
|
||||||
|
"menu_music_enabled": "Musique activée : {0}",
|
||||||
|
"menu_music_disabled": "Musique désactivée",
|
||||||
|
|
||||||
"button_yes": "Oui",
|
"button_yes": "Oui",
|
||||||
"button_no": "Non",
|
"button_no": "Non",
|
||||||
@@ -94,6 +97,7 @@
|
|||||||
"controls_action_delete": "Supprimer",
|
"controls_action_delete": "Supprimer",
|
||||||
"controls_action_space": "Espace",
|
"controls_action_space": "Espace",
|
||||||
"controls_action_start": "Aide / Réglages",
|
"controls_action_start": "Aide / Réglages",
|
||||||
|
"controls_action_music_toggle": "Musique On/Off",
|
||||||
|
|
||||||
"controls_desc_confirm": "Valider (ex: A, Entrée)",
|
"controls_desc_confirm": "Valider (ex: A, Entrée)",
|
||||||
"controls_desc_cancel": "Annuler/Retour (ex: B, RetourArrière)",
|
"controls_desc_cancel": "Annuler/Retour (ex: B, RetourArrière)",
|
||||||
@@ -109,6 +113,7 @@
|
|||||||
"controls_desc_delete": "Supprimer caractère (ex: LT, Suppr)",
|
"controls_desc_delete": "Supprimer caractère (ex: LT, Suppr)",
|
||||||
"controls_desc_space": "Ajouter espace (ex: RT, Espace)",
|
"controls_desc_space": "Ajouter espace (ex: RT, Espace)",
|
||||||
"controls_desc_start": "Ouvrir le menu pause (ex: Start, AltGr)",
|
"controls_desc_start": "Ouvrir le menu pause (ex: Start, AltGr)",
|
||||||
|
"controls_desc_music_toggle": "Active ou désactive la musique de fond",
|
||||||
|
|
||||||
"footer_version": "RGSX v{0} - {1} : Options - {2}: Historique - {3} : Filtrer",
|
"footer_version": "RGSX v{0} - {1} : Options - {2}: Historique - {3} : Filtrer",
|
||||||
|
|
||||||
|
|||||||
31
utils.py
31
utils.py
@@ -602,7 +602,9 @@ def extract_rar(rar_path, dest_dir, url):
|
|||||||
logger.error(f"Erreur lors de la suppression de {rar_path}: {str(e)}")
|
logger.error(f"Erreur lors de la suppression de {rar_path}: {str(e)}")
|
||||||
|
|
||||||
def play_random_music(music_files, music_folder, current_music=None):
|
def play_random_music(music_files, music_folder, current_music=None):
|
||||||
"""Joue une musique aléatoire et configure l'événement de fin de manière non-bloquante."""
|
if not getattr(config, "music_enabled", True):
|
||||||
|
pygame.mixer.music.stop()
|
||||||
|
return current_music
|
||||||
if music_files:
|
if music_files:
|
||||||
# Éviter de rejouer la même musique consécutivement
|
# Éviter de rejouer la même musique consécutivement
|
||||||
available_music = [f for f in music_files if f != current_music]
|
available_music = [f for f in music_files if f != current_music]
|
||||||
@@ -665,4 +667,29 @@ def load_api_key_1fichier():
|
|||||||
return api_key
|
return api_key
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
logger.error(f"Erreur lors de la lecture de la clé API : {e}")
|
logger.error(f"Erreur lors de la lecture de la clé API : {e}")
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def load_music_config():
|
||||||
|
"""Charge la configuration musique depuis music_config.json."""
|
||||||
|
path = config.MUSIC_CONFIG_PATH
|
||||||
|
try:
|
||||||
|
if os.path.exists(path):
|
||||||
|
with open(path, "r", encoding="utf-8") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
config.music_enabled = data.get("music_enabled", True)
|
||||||
|
return config.music_enabled
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Erreur lors du chargement de music_config.json: {str(e)}")
|
||||||
|
config.music_enabled = True
|
||||||
|
return True
|
||||||
|
|
||||||
|
def save_music_config():
|
||||||
|
"""Sauvegarde la configuration musique dans music_config.json."""
|
||||||
|
path = config.MUSIC_CONFIG_PATH
|
||||||
|
try:
|
||||||
|
os.makedirs(config.SAVE_FOLDER, exist_ok=True)
|
||||||
|
with open(path, "w", encoding="utf-8") as f:
|
||||||
|
json.dump({"music_enabled": config.music_enabled}, f, indent=2)
|
||||||
|
logger.debug(f"Configuration musique sauvegardée: {config.music_enabled}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Erreur lors de la sauvegarde de music_config.json: {str(e)}")
|
||||||
Reference in New Issue
Block a user