freinage: le personnage ne glisse plus

Dans un cas particulier où un saut emmenant la tête du personnage sur un
pan incliné lui donnait une vélocité en x différente de zéro et
qu'aucune command du joueur n'était envoyé via le controleur alors, la
princesse glissait à l'infi et l'au delà (surement même un peu plus). Il
en va donc de sa survie et de la santé mentale du joueur de limiter ces
comportements ératiques et qui semblent tout bien d'être une
fonctionalité pour certains. Je m'égare, je m'égare! En attendant
l'écureil, la princesse freinera. voilà.
This commit is contained in:
Thomas Lavocat
2023-04-29 17:28:32 +02:00
parent c23d9d3914
commit b47ce2316f

View File

@@ -100,6 +100,23 @@ func walk(direction:int) -> float:
walking_step = min(walking_step, X_SPEED_DECEL.size() - 1) walking_step = min(walking_step, X_SPEED_DECEL.size() - 1)
init_decel = false init_decel = false
# dans le cas où le personnage est propulsé par une force extérieure et
# qu'il n'y a pas d'input du joueur pour permettre au personnage de ralentir
# il va bien falloir s'y coller, sinon, il va glisser indéfiniment.
var abs_v_x = abs(velocity.x)
if abs_v_x != 0 and walking_step == -1:
# trouver l'indice le plus proche de la vitesse courante
for index in range(0, X_SPEED_DECEL.size()-1):
var speed_i = table[walking_step] * WALKING_SPEED
var speed_i1 = table[walking_step+1] * WALKING_SPEED
# lorsque l'on a trouvé l'indice le bon endroit dans le tableau, alors
# on renvoie l'indice trouvé
if abs_v_x > speed_i and abs_v_x <= speed_i1:
walking_step = index+1
# si rien n'est trouvé, alors on initialise l'indice au maximum possible
if walking_step == -1:
walking_step = X_SPEED_DECEL.size() - 1
# Si le compteur d'incrément est supérieur ou égal à zéro, c'est qu'il # Si le compteur d'incrément est supérieur ou égal à zéro, c'est qu'il
# faut bouger, donc il est nécéssaire en premier temps de récupérer la vitesse # faut bouger, donc il est nécéssaire en premier temps de récupérer la vitesse
# à l'indice courant. Puis si le joueur ne veut plus accélérer, alors, appliquer # à l'indice courant. Puis si le joueur ne veut plus accélérer, alors, appliquer