diff --git a/__main__.py b/__main__.py index 12e0c53..305ab21 100644 --- a/__main__.py +++ b/__main__.py @@ -570,6 +570,14 @@ async def main(): config.needs_redraw = True logger.error(f"État de menu non valide détecté: {config.menu_state}, retour à platform") draw_controls(screen, config.menu_state) + + # Afficher la popup de musique si nécessaire + if current_music_name and music_popup_start_time > 0: + from display import draw_music_popup + if not draw_music_popup(screen, current_music_name, music_popup_start_time): + current_music_name = None + music_popup_start_time = 0 + pygame.display.flip() config.needs_redraw = False diff --git a/config.py b/config.py index 2b218a0..4974410 100644 --- a/config.py +++ b/config.py @@ -5,8 +5,6 @@ import logging # Version actuelle de l'application app_version = "1.9.7.3" -# Langue par défaut -current_language = "fr" # Chemins de base @@ -85,7 +83,6 @@ download_tasks = {} # Dictionnaire pour les tâches de téléchargement download_result_message = "" download_result_error = False download_result_start_time = 0 -pending_download = None needs_redraw = False current_history_item = 0 history_scroll_offset = 0 # Offset pour le défilement de l'historique @@ -100,6 +97,8 @@ redownload_confirm_selection = 0 # Sélection pour la confirmation de redownloa popup_message = "" # Message à afficher dans les popups popup_timer = 0 # Temps restant pour le popup en millisecondes (0 = inactif) last_frame_time = pygame.time.get_ticks() +music_popup_start_time = 0 +current_music_name = "" GRID_COLS = 3 # Number of columns in the platform grid diff --git a/controls_mapper.py b/controls_mapper.py index d0fc120..03aa503 100644 --- a/controls_mapper.py +++ b/controls_mapper.py @@ -306,39 +306,6 @@ def save_controls_config(controls_config): except Exception as e: logger.error(f"Erreur lors de l'enregistrement de controls.json : {e}") -def validate_controls_config(controls_config): - """Valide la structure de la configuration des contrôles""" - required_actions = ["confirm", "cancel", "up", "down", "left", "right"] - - for action in required_actions: - if action not in controls_config: - logger.warning(f"Action {action} manquante dans la configuration") - return False - - mapping = controls_config[action] - if "type" not in mapping: - logger.warning(f"Type manquant pour l'action {action}") - return False - - input_type = mapping["type"] - if input_type == "key" and "key" not in mapping: - logger.warning(f"Clé 'key' manquante pour l'action {action}") - return False - elif input_type == "button" and "button" not in mapping: - logger.warning(f"Clé 'button' manquante pour l'action {action}") - return False - elif input_type == "axis" and ("axis" not in mapping or "direction" not in mapping): - logger.warning(f"Clés 'axis' ou 'direction' manquantes pour l'action {action}") - return False - elif input_type == "hat" and "value" not in mapping: - logger.warning(f"Clé 'value' manquante pour l'action {action}") - return False - elif input_type == "mouse" and "button" not in mapping: - logger.warning(f"Clé 'button' manquante pour l'action {action}") - return False - - return True - def get_readable_input_name(event): """Retourne un nom lisible pour une entrée (touche, bouton, axe, hat, ou souris)""" if event.type == pygame.KEYDOWN: diff --git a/display.py b/display.py index f86d2c2..290ee9e 100644 --- a/display.py +++ b/display.py @@ -1311,4 +1311,41 @@ def draw_popup(screen): countdown_text = _("popup_countdown").format(remaining_time, 's' if remaining_time != 1 else '') countdown_surface = config.small_font.render(countdown_text, True, THEME_COLORS["text"]) countdown_rect = countdown_surface.get_rect(center=(config.screen_width // 2, popup_y + margin_top_bottom + len(text_lines) * line_height + line_height // 2)) - screen.blit(countdown_surface, countdown_rect) \ No newline at end of file + screen.blit(countdown_surface, countdown_rect) + +def draw_music_popup(screen, music_name, start_time): + """Affiche une popup temporaire avec le nom de la musique en cours""" + current_time = pygame.time.get_ticks() / 1000 + elapsed = current_time - start_time + + # Afficher pendant 3 secondes + if elapsed > 3.0: + return False + + # Effet de fondu + alpha = 255 + if elapsed > 2.5: + alpha = int(255 * (3.0 - elapsed) / 0.5) + + # Dimensions de la popup + popup_width = 300 + popup_height = 60 + popup_x = config.screen_width - popup_width - 20 + popup_y = 20 + + # Surface avec transparence + popup_surface = pygame.Surface((popup_width, popup_height), pygame.SRCALPHA) + popup_surface.set_alpha(alpha) + + # Fond de la popup + pygame.draw.rect(popup_surface, THEME_COLORS["button_idle"], (0, 0, popup_width, popup_height), border_radius=10) + pygame.draw.rect(popup_surface, THEME_COLORS["border"], (0, 0, popup_width, popup_height), 2, border_radius=10) + + # Texte de la musique + text_surface = config.small_font.render(music_name, True, THEME_COLORS["text"]) + text_rect = text_surface.get_rect(center=(popup_width // 2, popup_height // 2)) + popup_surface.blit(text_surface, text_rect) + + # Afficher la popup + screen.blit(popup_surface, (popup_x, popup_y)) + return True \ No newline at end of file diff --git a/languages/fr.json b/languages/fr.json index 9d98258..e6ec00a 100644 --- a/languages/fr.json +++ b/languages/fr.json @@ -19,7 +19,7 @@ "error_controls_mapping": "Échec du mappage des contrôles", "error_download_data": "Échec du téléchargement/extraction du Dossier Data : {0}", "error_api_key": "Attention il faut renseigner sa clé API (premium only) dans le fichier {0}", - "error_api_key_extended": "Attention il faut renseigner sa clé API (premium only) dans le fichier /userdata/saves/ports/rgsx/1fichierAPI.txt à ouvrir dans un éditeur de texte et coller la clé API", + "error_api_key_extended": "Attention il faut renseigner sa clé API (premium only) dans le fichier /saves/ports/rgsx/1fichierAPI.txt à ouvrir dans un éditeur de texte et coller la clé API", "error_invalid_download_data": "Données de téléchargement invalides", "error_delete_sources": "Erreur lors de la suppression du fichier sources.json ou dossiers", "error_extension": "Extension non supportée ou erreur de téléchargement", diff --git a/update_gamelist.py b/update_gamelist.py index 24798d0..589480c 100644 --- a/update_gamelist.py +++ b/update_gamelist.py @@ -20,11 +20,7 @@ RGSX_ENTRY = { "rating": "1", "releasedate": "20250620T165718", "developer": "RetroGameSets.fr", - "genre": "Compilation, Various / Utilities", - "playcount": "666", - "lastplayed": "20250621T234656", - "gametime": "9999999", - "lang": "fr" + "genre": "Various / Utilities" } def update_gamelist(): diff --git a/utils.py b/utils.py index 479e515..cb0d5fc 100644 --- a/utils.py +++ b/utils.py @@ -11,9 +11,11 @@ import threading import zipfile import time import random +import random from config import JSON_EXTENSIONS, SAVE_FOLDER from history import save_history from language import _ # Import de la fonction de traduction +from datetime import datetime from datetime import datetime