Ajout option pour desactiver la musique depuis le menu pause

This commit is contained in:
skymike03
2025-07-31 14:14:58 +02:00
parent 4c9a1aa2b3
commit 2f67e5cab1
6 changed files with 70 additions and 19 deletions

View File

@@ -98,11 +98,16 @@ config.repeat_last_action = 0
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'))]
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:
current_music = play_random_music(music_files, music_folder, current_music)
else:
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
config.history = load_history()
@@ -133,6 +138,8 @@ if pygame.joystick.get_count() > 0:
# Initialisation du mixer Pygame
pygame.mixer.pre_init(44100, -16, 2, 4096)
pygame.mixer.init()
from utils import load_music_config
load_music_config()
# Boucle principale

View File

@@ -49,7 +49,6 @@ SYSTEM_FOLDER = get_system_root()
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")
SAVE_FOLDER = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(APP_FOLDER))), "saves", "ports", "rgsx")
# Configuration du logging
logger = logging.getLogger(__name__)
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")
LANGUAGE_CONFIG_PATH = os.path.join(SAVE_FOLDER, "language.json")
JSON_EXTENSIONS = os.path.join(APP_FOLDER, "rom_extensions.json")
MUSIC_CONFIG_PATH = os.path.join(SAVE_FOLDER, "music_config.json")
# URL
@@ -102,6 +100,7 @@ transition_state = "idle"
transition_progress = 0.0
transition_duration = 18
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
# 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:
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 SCREEN_WIDTH, SCREEN_HEIGHT
return SCREEN_WIDTH, SCREEN_HEIGHT

View File

@@ -9,7 +9,7 @@ import json
import os
from display import draw_validation_transition
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
import logging
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)}")
if is_input_matched(event, "up"):
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
#logger.debug(f"Navigation vers le haut: selected_option={config.selected_option}")
elif is_input_matched(event, "down"):
config.selected_option = min(6, config.selected_option + 1)
# La répétition est gérée par update_key_state
config.selected_option = min(7, config.selected_option + 1) # 7 options maintenant
config.needs_redraw = True
#logger.debug(f"Navigation vers le bas: selected_option={config.selected_option}")
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
config.previous_menu_state = validate_menu_state(config.previous_menu_state)
config.menu_state = "controls_help"
@@ -914,7 +909,21 @@ def handle_controls(event, sources, joystick, screen):
config.redownload_confirm_selection = 0
config.needs_redraw = True
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.menu_state = "confirm_exit"
config.confirm_selection = 0

View File

@@ -1161,6 +1161,13 @@ def draw_pause_menu(screen, selected_option):
"""Dessine le menu pause avec un style moderne."""
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 = [
_("menu_controls"),
_("menu_remap_controls"),
@@ -1168,6 +1175,7 @@ def draw_pause_menu(screen, selected_option):
_("menu_language"),
_("menu_accessibility"),
_("menu_redownload_cache"),
music_option, # Ici l'option dynamique
_("menu_quit")
]
@@ -1290,6 +1298,7 @@ def draw_controls_help(screen, previous_state):
control_columns = state_controls.get(previous_state, {})
if not control_columns:
return
screen.blit(OVERLAY, (0, 0))

View File

@@ -70,6 +70,9 @@
"menu_accessibility": "Accessibilité",
"menu_redownload_cache": "Retélécharger le cache des jeux",
"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_no": "Non",
@@ -94,6 +97,7 @@
"controls_action_delete": "Supprimer",
"controls_action_space": "Espace",
"controls_action_start": "Aide / Réglages",
"controls_action_music_toggle": "Musique On/Off",
"controls_desc_confirm": "Valider (ex: A, Entrée)",
"controls_desc_cancel": "Annuler/Retour (ex: B, RetourArrière)",
@@ -109,6 +113,7 @@
"controls_desc_delete": "Supprimer caractère (ex: LT, Suppr)",
"controls_desc_space": "Ajouter espace (ex: RT, Espace)",
"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",

View File

@@ -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)}")
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:
# Éviter de rejouer la même musique consécutivement
available_music = [f for f in music_files if f != current_music]
@@ -665,4 +667,29 @@ def load_api_key_1fichier():
return api_key
except OSError as 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)}")