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_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
|
||||
|
||||
12
config.py
12
config.py
@@ -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
|
||||
25
controls.py
25
controls.py
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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",
|
||||
|
||||
|
||||
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)}")
|
||||
|
||||
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)}")
|
||||
Reference in New Issue
Block a user