forked from Mirrors/RGSX
Correction bug de mappage D-PAD qui considerait relacher comme une action
This commit is contained in:
@@ -200,6 +200,8 @@ MOUSE_BUTTON_NAMES = {
|
|||||||
# Durée de maintien pour valider une entrée (en millisecondes)
|
# Durée de maintien pour valider une entrée (en millisecondes)
|
||||||
HOLD_DURATION = 1000
|
HOLD_DURATION = 1000
|
||||||
|
|
||||||
|
JOYHAT_DEBOUNCE = 200 # Délai anti-rebond pour JOYHATMOTION (ms)
|
||||||
|
|
||||||
def load_controls_config():
|
def load_controls_config():
|
||||||
#Charge la configuration des contrôles depuis controls.json
|
#Charge la configuration des contrôles depuis controls.json
|
||||||
try:
|
try:
|
||||||
@@ -249,7 +251,7 @@ def map_controls(screen):
|
|||||||
while mapping:
|
while mapping:
|
||||||
clock.tick(100) # 100 FPS
|
clock.tick(100) # 100 FPS
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
#Interface de mappage des contrôles avec validation par maintien de 3 secondes
|
# Initialisation des variables de contrôle
|
||||||
controls_config = load_controls_config()
|
controls_config = load_controls_config()
|
||||||
current_action_index = 0
|
current_action_index = 0
|
||||||
current_input = None
|
current_input = None
|
||||||
@@ -257,6 +259,7 @@ def map_controls(screen):
|
|||||||
last_input_name = None
|
last_input_name = None
|
||||||
last_frame_time = pygame.time.get_ticks()
|
last_frame_time = pygame.time.get_ticks()
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
|
last_joyhat_time = 0 # Pour le débouncing des événements JOYHATMOTION
|
||||||
|
|
||||||
# Initialiser l'état des boutons et axes pour suivre les relâchements
|
# Initialiser l'état des boutons et axes pour suivre les relâchements
|
||||||
held_keys = set()
|
held_keys = set()
|
||||||
@@ -320,6 +323,7 @@ def map_controls(screen):
|
|||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
logger.debug(f"Axe relâché: {event.axis}")
|
logger.debug(f"Axe relâché: {event.axis}")
|
||||||
elif event.type == pygame.JOYHATMOTION:
|
elif event.type == pygame.JOYHATMOTION:
|
||||||
|
logger.debug(f"JOYHATMOTION détecté: hat={event.hat}, value={event.value}")
|
||||||
if event.value == (0, 0): # D-Pad revenu à la position neutre
|
if event.value == (0, 0): # D-Pad revenu à la position neutre
|
||||||
if event.hat in held_hats:
|
if event.hat in held_hats:
|
||||||
del held_hats[event.hat]
|
del held_hats[event.hat]
|
||||||
@@ -329,9 +333,18 @@ def map_controls(screen):
|
|||||||
last_input_name = None
|
last_input_name = None
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
logger.debug(f"D-Pad relâché: {event.hat}")
|
logger.debug(f"D-Pad relâché: {event.hat}")
|
||||||
|
continue # Ignorer les événements (0, 0) pour la détection des nouvelles entrées
|
||||||
|
|
||||||
# Détecter les nouvelles entrées
|
# Détecter les nouvelles entrées
|
||||||
if event.type in (pygame.KEYDOWN, pygame.JOYBUTTONDOWN, pygame.JOYAXISMOTION, pygame.JOYHATMOTION, pygame.MOUSEBUTTONDOWN):
|
if event.type in (pygame.KEYDOWN, pygame.JOYBUTTONDOWN, pygame.JOYAXISMOTION, pygame.JOYHATMOTION, pygame.MOUSEBUTTONDOWN):
|
||||||
|
# Appliquer le débouncing pour JOYHATMOTION
|
||||||
|
if event.type == pygame.JOYHATMOTION and (current_time - last_joyhat_time) < JOYHAT_DEBOUNCE:
|
||||||
|
logger.debug(f"Événement JOYHATMOTION ignoré (debounce): hat={event.hat}, value={event.value}")
|
||||||
|
continue
|
||||||
|
if event.type == pygame.JOYHATMOTION:
|
||||||
|
last_joyhat_time = current_time
|
||||||
|
|
||||||
|
|
||||||
input_name = get_readable_input_name(event)
|
input_name = get_readable_input_name(event)
|
||||||
if input_name != "Inconnu":
|
if input_name != "Inconnu":
|
||||||
input_type = {
|
input_type = {
|
||||||
@@ -401,6 +414,12 @@ def map_controls(screen):
|
|||||||
input_held_time = 0
|
input_held_time = 0
|
||||||
last_input_name = None
|
last_input_name = None
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
|
# Réinitialiser les entrées maintenues pour éviter les interférences
|
||||||
|
held_keys.clear()
|
||||||
|
held_buttons.clear()
|
||||||
|
held_axes.clear()
|
||||||
|
held_hats.clear()
|
||||||
|
held_mouse_buttons.clear()
|
||||||
config.needs_redraw = True
|
config.needs_redraw = True
|
||||||
|
|
||||||
pygame.time.wait(10)
|
pygame.time.wait(10)
|
||||||
|
|||||||
Reference in New Issue
Block a user