79 lines
1.9 KiB
GDScript3
79 lines
1.9 KiB
GDScript3
|
|
extends CanvasLayer
|
||
|
|
|
||
|
|
signal advanced
|
||
|
|
|
||
|
|
@onready var subtitle_panel: PanelContainer = $SubtitlePanel
|
||
|
|
@onready var who_label: Label = $SubtitlePanel/V/Who
|
||
|
|
@onready var text_label: Label = $SubtitlePanel/V/Text
|
||
|
|
@onready var hint_label: Label = $SubtitlePanel/V/Hint
|
||
|
|
|
||
|
|
@onready var note_overlay: Control = $NoteOverlay
|
||
|
|
@onready var note_text: Label = $NoteOverlay/Center/P/V2/Text
|
||
|
|
|
||
|
|
@onready var prompt_label: Label = $PromptLabel
|
||
|
|
@onready var hud_label: Label = $HudLabel
|
||
|
|
|
||
|
|
var _waiting: bool = false
|
||
|
|
|
||
|
|
|
||
|
|
func _ready() -> void:
|
||
|
|
subtitle_panel.visible = false
|
||
|
|
note_overlay.visible = false
|
||
|
|
prompt_label.visible = false
|
||
|
|
hud_label.visible = false
|
||
|
|
|
||
|
|
|
||
|
|
func say(who: String, line: String) -> Signal:
|
||
|
|
who_label.text = "[%s]" % who
|
||
|
|
text_label.text = line
|
||
|
|
hint_label.text = "ЛКМ или ПРОБЕЛ — дальше"
|
||
|
|
subtitle_panel.visible = true
|
||
|
|
note_overlay.visible = false
|
||
|
|
_waiting = true
|
||
|
|
return advanced
|
||
|
|
|
||
|
|
|
||
|
|
func think(line: String) -> Signal:
|
||
|
|
return say("Я", line)
|
||
|
|
|
||
|
|
|
||
|
|
func show_note(text: String) -> Signal:
|
||
|
|
note_text.text = text
|
||
|
|
note_overlay.visible = true
|
||
|
|
subtitle_panel.visible = false
|
||
|
|
_waiting = true
|
||
|
|
return advanced
|
||
|
|
|
||
|
|
|
||
|
|
func set_prompt(text: String) -> void:
|
||
|
|
if text == "":
|
||
|
|
prompt_label.visible = false
|
||
|
|
return
|
||
|
|
prompt_label.text = "[ЛКМ] %s" % text
|
||
|
|
prompt_label.visible = true
|
||
|
|
|
||
|
|
|
||
|
|
func clear_prompt() -> void:
|
||
|
|
prompt_label.visible = false
|
||
|
|
|
||
|
|
|
||
|
|
func set_hud(text: String) -> void:
|
||
|
|
hud_label.text = text
|
||
|
|
hud_label.visible = text != ""
|
||
|
|
|
||
|
|
|
||
|
|
func _input(event: InputEvent) -> void:
|
||
|
|
if not _waiting:
|
||
|
|
return
|
||
|
|
var advance: bool = false
|
||
|
|
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
|
||
|
|
advance = true
|
||
|
|
elif event is InputEventKey and event.pressed and (event.keycode == KEY_SPACE or event.keycode == KEY_ENTER):
|
||
|
|
advance = true
|
||
|
|
if advance:
|
||
|
|
get_viewport().set_input_as_handled()
|
||
|
|
subtitle_panel.visible = false
|
||
|
|
note_overlay.visible = false
|
||
|
|
_waiting = false
|
||
|
|
advanced.emit()
|