forked from Mirrors/RGSX
v1.9.7.4 corrections de bugs
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
39
display.py
39
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)
|
||||
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
|
||||
@@ -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",
|
||||
|
||||
@@ -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():
|
||||
|
||||
2
utils.py
2
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user