• 2D
  • Joystick based rotation

Hi, I have some issues with joystick-based rotation of sprite. In 2d topdown game I want to rotate turret using right gamepad stick. Turret should rotate in direction of stick, in every direction. The problem is, that because analog axes can have values -1 to 1, and rotation is based on Vector2 of axes, it turns smoothly only in 8 directions. Aiming in other angles (other than 0, 45, 90 etc) is possible but hard. Is this because of poor joystick support? Or I'm using wrong methods? if abs(Input.get_joy_axis(0, JOY_AXIS_3)) > deadZone or abs(Input.get_joy_axis(0, JOY_AXIS_2)) > deadZone: cannon_stick_dir = Vector2(Input.get_joy_axis(0, JOY_AXIS_3) * -1, Input.get_joy_axis(0, JOY_AXIS_2)) var cannon_position = $Cannon.get_rotation() * 0.85 if cannon_position != cannon_stick_dir.angle(): cannon_dir_vector = Vector2(cos($Cannon.get_rotation()), sin($Cannon.get_rotation())) * -1 if cannon_position != cannon_stick_dir.angle(): if cannon_dir_vector.angle_to(cannon_stick_dir) >= 0: rot_dir -= 1 $Cannon.rotation = (rot_speed * rot_dir * delta) elif cannon_dir_vector.angle_to(cannon_stick_dir) < 0: rot_dir += 1 $Cannon.rotation = (rot_speed * rot_dir * delta) else: rot_speed = 0

a year later

Have you seen this article ?

So basically Godot added another input function: Input.get_action_strength({ACTION}). With this you can get the full circle and apply the rotation of the vector to your character.

Hope i could help