X-Git-Url: http://git.purplebirdman.com/william-skin.git/blobdiff_plain/e46d5d33366290dafdd7b1236fd52fce486e8898..c92b8f1fd53dee92846473ca69f62de008b07509:/william.gd diff --git a/william.gd b/william.gd index d4554c9..24dcd5b 100644 --- a/william.gd +++ b/william.gd @@ -1,11 +1,78 @@ +class_name WilliamSkin extends Node3D -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - pass # Replace with function body. +@export_category("Tracking") +@export var head_influence: float = 0.6 +@export var eye_influence: float = 1.0 -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: - pass +@onready var _animation_tree: AnimationTree = $AnimationTree +@onready var _head: TrackingBone3D_head = $base/rig/Skeleton3D/track_head +@onready var _eye_L: TrackingBone3D = $base/rig/Skeleton3D/track_eye_L +@onready var _eye_R: TrackingBone3D = $base/rig/Skeleton3D/track_eye_R +@onready var _default_target = $defaultTrackingTarget + + +func set_eyes_target(target: Node3D) -> void: + for eye in [ _eye_L, _eye_R ]: + eye.target = target if target != null else _default_target + eye.active = 1 + eye.influence = eye_influence + + +func set_head_target(target: Node3D) -> void: + _head.target = target if target != null else _default_target + _head.active = 1 + _head.tween_influence(0.0 if target == null else head_influence) + + +# manage talking and expressions +func talk() -> void: + _animation_tree.set("parameters/motion/transition_request", "talk") + + +# manage vectored movement +func current_state() -> String: + return _animation_tree.get("parameters/motion/current_state") + + +func set_hips_direction(direction: float) -> void: + _animation_tree.set("parameters/hips_direction/blend_position", clamp(direction, -PI / 2, PI / 2)) + + +func get_hips_direction() -> float: + return _animation_tree.get("parameters/hips_direction/blend_position") + + +func pose() -> void: + _animation_tree.set("parameters/motion/transition_request", "pose") + + +func idle() -> void: + _animation_tree.set("parameters/motion/transition_request", "idle") + + +func move_forward() -> void: + _animation_tree.set("parameters/motion/transition_request", "forward") + + +func move_backward() -> void: + _animation_tree.set("parameters/motion/transition_request", "backward") + + +func movement_speed(speed: float) -> void: + _animation_tree.set("parameters/forward/blend_position", speed) + _animation_tree.set("parameters/backward/blend_position", speed) + + +func jump() -> void: + _animation_tree.set("parameters/motion/transition_request", "fall") + + +func fall() -> void: + _animation_tree.set("parameters/motion/transition_request", "fall") + + +func landing() -> void: + _animation_tree.set("parameters/motion/transition_request", "landing")