First Commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user