gfolf2/src/characters/character_controller.gd

38 lines
1.0 KiB
GDScript

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