]> Untitled Git - william-skin.git/blobdiff - william.gd
Added export config options for web, osx, windows, linux
[william-skin.git] / william.gd
index d4554c9162dee82263ad807a0592806ef6d02549..24dcd5b0170d540b26a7a447f889e7f97af47459 100644 (file)
@@ -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")