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 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")