class_name CharacterController extends Node3D
## Controller class for character animations

@onready var animation_tree: AnimationTree = $AnimationTree
@onready
var animation_state: AnimationNodeStateMachinePlayback = animation_tree["parameters/playback"]

@onready var right_hand_grip: Node3D = %RightHandGrip
@onready var eye_animation: AnimationPlayer = %EyeAnimation


## Snap the given node to the character's right hand grip.
## Anything currently held in the right hand will be freed.
## If `node` is null, the character's right hand grip will just be cleared.
func hold_right(node: Node3D = null) -> void:
	for c: Node in right_hand_grip.get_children():
		c.queue_free()

	if node:
		right_hand_grip.add_child(node)
		node.transform = Transform3D.IDENTITY


## Set this character's color. Implementation-dependent.
func set_color(_color: Color) -> void:
	pass


func reset() -> void:
	animation_state.start("stand_to_idle")


func start_upswing() -> void:
	animation_state.travel("upswing")


func downswing() -> void:
	animation_state.travel("downswing")


func _on_blink_timer_timeout() -> void:
	eye_animation.play("blink")
