2d platformer movement - lock direction change when jumping

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By vegajoestar93

Hi, I am doing a 2d platformer tutorial by GDQuest. I am having a trouble modifying the code, so that my character would not change direction at all whatever is being input when jumping (like jumping in real world).
The base class is this one:

extends KinematicBody2D
class_name Actor

const FLOOR_NORMAL = Vector2.UP

export var speed := Vector2(400.0, 1000.0)
export var gravity := 3000.0

var velocity := Vector2.ZERO

And the Player class extends it:

extends Actor

func _physics_process(delta: float) -> void:
var is_jump_interrupted := Input.is_action_just_released("jump") and velocity.y < 0
var direction := get_direction()
velocity = calculate_move_velocity(velocity, speed, direction, is_jump_interrupted)
velocity = move_and_slide(velocity, FLOOR_NORMAL)


func get_direction() -> Vector2:
var x : float
var y = -1.0 if Input.is_action_just_pressed("jump") and is_on_floor() else 0.0
var jump_right : bool
var jump_left : bool
var jump_in_place : bool
if Input.is_action_pressed("move_right") and is_on_floor():
	x = 1.0
	if Input.is_action_just_pressed("jump"):
		jump_right = true
elif Input.is_action_pressed("move_left") and is_on_floor():
	x = -1.0
	if Input.is_action_just_pressed("jump"):
		jump_left = true
var no_horizontal_direction_pressed_on_floor := not Input.is_action_pressed("move_right") and not Input.is_action_pressed("move_left") and is_on_floor() 
var both_horizontal_direction_pressed_on_floor := Input.is_action_pressed("move_right") and Input.is_action_pressed("move_left") and is_on_floor()
if no_horizontal_direction_pressed_on_floor or both_horizontal_direction_pressed_on_floor:
	x = 0.0
	if Input.is_action_just_pressed("jump"):
		jump_in_place = true
if not is_on_floor():
	if jump_right:
		return Vector2(1.0, y)
	if jump_left:
		return Vector2(1.0, y)
	if jump_in_place:
		return Vector2(0.0, y)
if is_on_floor():
	jump_right = false
	jump_left = false
	jump_in_place = false

return Vector2(
	x,
	y
)


func calculate_move_velocity(
linear_velocity: Vector2,
speed: Vector2,
direction: Vector2,
is_jump_interrupted: bool
) -> Vector2:
var new_velocity := linear_velocity
new_velocity.x = speed.x * direction.x
new_velocity.y += gravity * get_physics_process_delta_time()
if direction.y == -1.0:
	new_velocity.y = speed.y * direction.y
if is_jump_interrupted:
	new_velocity.y = 0.0
return new_velocity
	

my character only jumps in place, meaning that when jumping it does not move horizontally at all and I don’t know why it is so… Hope any of You guys can help me with it

did you ever find an answer to your problem . im stuck on the same problem

chris33556 | 2022-08-22 18:40