64 lines
2.1 KiB
GDScript
64 lines
2.1 KiB
GDScript
extends CanvasLayer
|
|
|
|
|
|
var is_textbox_visible: bool = false
|
|
var is_textbox_expanded: bool = false
|
|
|
|
func is_ready() -> bool:
|
|
return $AnimationPlayer.current_animation == "" or $AnimationPlayer.current_animation == "textbox_idle"
|
|
|
|
func is_idle() -> bool:
|
|
return $AnimationPlayer.current_animation == "textbox_idle"
|
|
|
|
func skip():
|
|
if $AnimationPlayer.current_animation == "write_text" or $AnimationPlayer.current_animation == "collapse_textbox" or $AnimationPlayer.current_animation == "expand_textbox":
|
|
$AnimationPlayer.seek(0.9999, true)
|
|
|
|
func await_pending_animations():
|
|
if not is_ready():
|
|
await $AnimationPlayer.animation_finished
|
|
|
|
func show_textbox():
|
|
# await await_pending_animations()
|
|
$AnimationPlayer.play("show_textbox")
|
|
await $AnimationPlayer.animation_finished
|
|
|
|
func hide_textbox():
|
|
# await await_pending_animations()
|
|
$AnimationPlayer.play_backwards("show_textbox")
|
|
await $AnimationPlayer.animation_finished
|
|
|
|
func expand_textbox():
|
|
# await await_pending_animations()
|
|
$AnimationPlayer.play("expand_textbox")
|
|
await $AnimationPlayer.animation_finished
|
|
|
|
func collapse_textbox():
|
|
# await await_pending_animations()
|
|
$AnimationPlayer.play("collapse_textbox")
|
|
await $AnimationPlayer.animation_finished
|
|
|
|
func ready_textbox():
|
|
$AnimationPlayer.play("textbox_idle")
|
|
|
|
func disable_textbox():
|
|
$AnimationPlayer.play("disable_textbox")
|
|
|
|
func enable_textbox():
|
|
if $AnimationPlayer.current_animation == "disable_textbox":
|
|
$AnimationPlayer.stop()
|
|
|
|
func write_text(speaker_text: String, speaker_name: String = ""):
|
|
var text_label: RichTextLabel = $MarginContainer/VBoxContainer/TextContainer/Text/TextLabel
|
|
text_label.visible_characters = 0
|
|
text_label.text = speaker_text
|
|
if speaker_name:
|
|
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = speaker_name
|
|
$MarginContainer/VBoxContainer/NameContainer.visible = true
|
|
else:
|
|
$MarginContainer/VBoxContainer/NameContainer.visible = false
|
|
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = ""
|
|
# Characters per second
|
|
var animation_speed = 48.0 / text_label.get_total_character_count()
|
|
$AnimationPlayer.play("write_text", -1, animation_speed)
|
|
await $AnimationPlayer.animation_finished
|