69 lines
1.4 KiB
GDScript
69 lines
1.4 KiB
GDScript
extends Node3D
|
|
|
|
@onready var animation_tree = %AnimationTree
|
|
@onready var state_machine: AnimationNodeStateMachinePlayback = animation_tree.get("parameters/StateMachine/playback")
|
|
@onready var move_tilt_path: String = "parameters/StateMachine/Move/tilt/add_amount"
|
|
|
|
var run_tilt = 0.0:
|
|
set = _set_run_tilt
|
|
|
|
@export var blink = true:
|
|
set = set_blink
|
|
@onready var blink_timer = %BlinkTimer
|
|
@onready var closed_eyes_timer = %ClosedEyesTimer
|
|
@onready var eye_mat = $sophia/rig/Skeleton3D/Sophia.get("surface_material_override/2")
|
|
|
|
|
|
func _ready() -> void:
|
|
blink_timer.timeout.connect(
|
|
func() -> void:
|
|
eye_mat.set("uv1_offset", Vector3(0.0, 0.5, 0.0))
|
|
closed_eyes_timer.start(0.2)
|
|
)
|
|
|
|
closed_eyes_timer.timeout.connect(
|
|
func() -> void:
|
|
eye_mat.set("uv1_offset", Vector3.ZERO)
|
|
blink_timer.start(randf_range(1.0, 4.0))
|
|
)
|
|
|
|
|
|
func set_blink(state: bool) -> void:
|
|
if blink == state:
|
|
return
|
|
blink = state
|
|
if blink:
|
|
blink_timer.start(0.2)
|
|
else:
|
|
blink_timer.stop()
|
|
closed_eyes_timer.stop()
|
|
|
|
|
|
func _set_run_tilt(value: float) -> void:
|
|
run_tilt = clamp(value, -1.0, 1.0)
|
|
animation_tree.set(move_tilt_path, run_tilt)
|
|
|
|
|
|
func idle() -> void:
|
|
state_machine.travel("Idle")
|
|
|
|
|
|
func move() -> void:
|
|
state_machine.travel("Move")
|
|
|
|
|
|
func fall() -> void:
|
|
state_machine.travel("Fall")
|
|
|
|
|
|
func jump() -> void:
|
|
state_machine.travel("Jump")
|
|
|
|
|
|
func edge_grab() -> void:
|
|
state_machine.travel("EdgeGrab")
|
|
|
|
|
|
func wall_slide() -> void:
|
|
state_machine.travel("WallSlide")
|