diff --git a/princesse.gd b/princesse.gd index 31032c7..13f2df2 100644 --- a/princesse.gd +++ b/princesse.gd @@ -37,7 +37,8 @@ var walking_step: int = -1 @export var WALK_INCR_GROUND : int = 1 @export var WALK_INCR_AIR : int = 3 var walk_incr_reserve : int = 0 -var init_decel: bool = false +var init_decel: bool = true +var init_direction_change = true # variables d'état relatives au saut var jumping : bool = false @@ -66,6 +67,17 @@ func walk(direction:int) -> float: if is_on_wall(): walking_step = min(walking_step, 1) + # Un changement de direction implique de perdre la vélocité dans la direction + # précédente avant de repartir dans la direction que l'on veut. + # ça ne change rien pour le nombre de frames nécéssaires pour accélérer dans + # tous les cas. Mais le feeling est meilleur. + var direction_change: bool = (direction > 0 and velocity.x < 0) or (direction < 0 and velocity.x > 0) + if direction_change: + if init_direction_change: + init_direction_change = false + walking_step = -1 + else: + init_direction_change = true # Si le joueur décide de marcher alors, le compteur de pas doit s'incrémenter # Si le joueur ne veut plus marcher, alors, le compteur de pas décrémente @@ -97,7 +109,11 @@ func walk(direction:int) -> float: if walk_incr_reserve >= threshold: walk_incr_reserve = 0 walking_step-=1 - return speed * direction + if direction_change and walking: + # dans le cas du changement de direction, + return speed * direction + velocity.x + else: + return speed * direction return velocity.x