28 lines
785 B
GDScript3
Raw Normal View History

2024-02-07 23:04:19 +01:00
class_name RotationComponent
2024-02-27 21:05:55 +01:00
extends CharacterComponent
2024-02-07 23:04:19 +01:00
@export var root: Node3D
2024-02-23 20:13:46 +01:00
@export var rotation_speed: float = 15.0
2024-02-07 23:04:19 +01:00
var direction: Vector3
var angle: float
func _ready():
2024-02-27 21:05:55 +01:00
assert(root, "rotation root needs to be set")
assert(rotation_speed > 0, "rotation speed must be greater than zero")
character.controlled.connect(on_controlled)
2024-02-07 23:04:19 +01:00
2024-02-27 23:21:44 +01:00
func _process(delta: float):
2024-02-26 23:50:56 +01:00
if absf(angle_difference(root.rotation.y, angle)) < 0.001:
return
2024-02-16 12:51:05 +01:00
root.rotation.y = Math.damp_angle(root.rotation.y, angle, rotation_speed * delta)
2024-02-07 23:04:19 +01:00
2024-02-24 15:30:41 +01:00
func on_controlled(controller: Controller):
controller.direction_changed.connect(on_direction_changed)
2024-02-07 23:04:19 +01:00
func on_direction_changed(new_direction: Vector3):
2024-02-15 16:28:27 +01:00
direction = new_direction
if direction != Vector3.ZERO:
angle = atan2(direction.x, direction.z)