Here is a part of my code for player movement :
func _physics_process(delta):
var direction = Input.get_vector("left", "right", "up", "down")
var hook_pressed = Input.is_action_pressed("hook")
var is_hook_linked = line2D.get_point_count() > 1
if hook_pressed and is_cube_in_range:
if global_position.distance_to(cube_position) < DISTANCE_THRESHOLD:
return
if is_hook_linked:
line2D.set_point_position(1, cube_position - self.position)
velocity = Steering.follow(
velocity,
global_position,
cube_position,
max_speed,
MASS
)
else:
line2D.add_point(cube_position - self.position)
velocity = speed * direction
else:
if line2D.get_point_count() > 1:
line2D.remove_point(1)
velocity = speed * direction
velocity /= GRAVITY
move_and_slide()