class_name RotationComponent extends Node @export var root: Node3D @export var rotation_speed: float = 20.0 var direction: Vector3 var angle: float func _ready(): assert(root, "Rotation root needs to be set") owner.controller.direction_changed.connect(on_direction_changed) func _process(delta): root.rotation.y = lerp_angle(root.rotation.y, angle, rotation_speed * delta) func on_direction_changed(new_direction: Vector3): direction = new_direction if direction != Vector3.ZERO: angle = atan2(direction.x, direction.z)