Character rotates in the longer direction

Godot Version

Godot 4.5.1

Question

How to make my character rotate the fastest way possible?
2026-01-14 11-58-55

Here’s my code:

extends CharacterBody2D

enum CharacterState {
	IDLE,
	ROTATING,
}

@export var rotation_speed: float = 1.0

var current_state: CharacterState = CharacterState.IDLE
var t: float = 0.0
var init_rot: float = 0.0
var end_rot = 0.0
var part = 0.0

func start_rotating(look_point: Vector2) -> void:
	t = 0.0
	init_rot = transform.get_rotation()
	end_rot = transform.looking_at(look_point).get_rotation()
	part = 1.0 / abs(end_rot - init_rot)
	current_state = CharacterState.ROTATING

func _physics_process(delta: float) -> void:
	if (Input.is_action_just_pressed("move_to")):
		start_rotating(get_global_mouse_position())
	
	match current_state:
		CharacterState.ROTATING:
			t = clampf(t + delta * part * rotation_speed, 0.0, 1.0)
			rotation = lerpf(init_rot, end_rot, t)
			if t == 1.0:
				current_state = CharacterState.IDLE

Try using @GlobalScope.lerp_angle() instead of lerpf()

3 Likes

Thank, but I also changed:

part = 1.0 / abs(end_rot - init_rot)

to

part = 1.0 / abs(wrapf(end_rot - init_rot, -PI, PI))

for constant speed.