72 lines
1.8 KiB
GDScript
72 lines
1.8 KiB
GDScript
extends Node2D
|
|
|
|
var _blinking = null:
|
|
set = _set_blinking
|
|
@onready var _animation_player: AnimationPlayer = $AnimationPlayer
|
|
@onready var _blinking_timer: Timer = $BlinkTimer
|
|
@onready var _closed_eyes_timer: Timer = $ClosedTimer
|
|
@onready var _left_eye: Sprite2D = $LeftEye
|
|
@onready var _right_eye: Sprite2D = $RightEye
|
|
|
|
var eyes_textures = {
|
|
"open": preload("./texture/parts/eye_open.png"),
|
|
"closed": preload("./texture/parts/eye_close.png"),
|
|
}
|
|
|
|
var current_face = null:
|
|
set = _set_face
|
|
|
|
|
|
func _ready() -> void:
|
|
_blinking_timer.timeout.connect(_on_blink_timer_timeout)
|
|
_set_blinking(true)
|
|
current_face = "default"
|
|
|
|
|
|
func _set_blinking(value: bool) -> void:
|
|
_blinking = value
|
|
if _blinking:
|
|
_blinking_timer.start()
|
|
else:
|
|
_blinking_timer.stop()
|
|
|
|
|
|
func _on_blink_timer_timeout() -> void:
|
|
# Play secondary action rather than blink
|
|
if randf_range(0.0, 1.0) > 0.9:
|
|
_animation_player.play("look_around")
|
|
await _animation_player.animation_finished
|
|
else:
|
|
# Close eyes
|
|
_set_eyes("closed")
|
|
_closed_eyes_timer.start(randf_range(0.1, 0.25))
|
|
await _closed_eyes_timer.timeout
|
|
# Return to current eyes
|
|
_set_eyes("open")
|
|
if randf_range(0.0, 1.0) > 0.8:
|
|
_blinking_timer.wait_time = randf_range(0.1, 0.15)
|
|
else:
|
|
_blinking_timer.wait_time = randf_range(1.0, 4.0)
|
|
_blinking_timer.start()
|
|
|
|
|
|
func _set_eyes(eyes_name: String) -> void:
|
|
_left_eye.texture = eyes_textures[eyes_name]
|
|
_right_eye.texture = eyes_textures[eyes_name]
|
|
|
|
|
|
func _set_face(face_name: String) -> void:
|
|
if current_face == face_name:
|
|
return
|
|
current_face = face_name
|
|
_animation_player.play("RESET")
|
|
_animation_player.seek(0.0, true)
|
|
if face_name == "default":
|
|
_set_blinking(true)
|
|
return
|
|
_set_blinking(false)
|
|
if !_animation_player.has_animation(face_name):
|
|
push_error("Can't set GDBot's face to: '" + face_name + "'")
|
|
return
|
|
_animation_player.play(face_name)
|