first commit
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
extends CanvasLayer
|
||||
|
||||
@onready var dialogue_box = $DialogueBox
|
||||
@onready var name_label = $DialogueBox/NameLabel
|
||||
@onready var text_label = $DialogueBox/TextLabel
|
||||
@onready var press_e_label = $PressE
|
||||
|
||||
var current_dialogue_lines: Array = []
|
||||
var current_line_index: int = 0
|
||||
|
||||
func _ready():
|
||||
# Изначально скрываем и окно диалога, и саму подсказку "Press E"
|
||||
dialogue_box.visible = false
|
||||
if press_e_label:
|
||||
press_e_label.visible = false
|
||||
|
||||
func start_dialogue(lines: Array):
|
||||
# Как только диалог начался — подсказку "Press E" нужно СРАЗУ убрать с экрана
|
||||
hide_prompt()
|
||||
|
||||
current_dialogue_lines = lines
|
||||
current_line_index = 0
|
||||
dialogue_box.visible = true
|
||||
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
show_current_line()
|
||||
|
||||
func show_current_line():
|
||||
if current_line_index < current_dialogue_lines.size():
|
||||
var line_data = current_dialogue_lines[current_line_index]
|
||||
name_label.text = line_data.get("name", "NPC")
|
||||
text_label.text = line_data.get("text", "")
|
||||
else:
|
||||
end_dialogue()
|
||||
|
||||
func _input(event):
|
||||
if dialogue_box.visible:
|
||||
var is_mouse_click = event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT
|
||||
var is_accept = event.is_action_pressed("ui_accept")
|
||||
var is_e_key = event is InputEventKey and event.pressed and event.keycode == KEY_E
|
||||
|
||||
if is_mouse_click or is_accept or is_e_key:
|
||||
current_line_index += 1
|
||||
show_current_line()
|
||||
# Перехватываем ввод, чтобы клики мыши при листании не вызывали стрельбу в шутере
|
||||
get_viewport().set_input_as_handled()
|
||||
|
||||
func end_dialogue():
|
||||
dialogue_box.visible = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
|
||||
# Функция для показа подсказки
|
||||
func show_prompt() -> void:
|
||||
if press_e_label and not dialogue_box.visible:
|
||||
press_e_label.visible = true
|
||||
print("[UI] Подсказка 'Press E' успешно включена на экране.")
|
||||
|
||||
# Функция для скрытия подсказки
|
||||
func hide_prompt() -> void:
|
||||
if press_e_label:
|
||||
press_e_label.visible = false
|
||||
print("[UI] Подсказка 'Press E' скрыта.")
|
||||
@@ -0,0 +1 @@
|
||||
uid://in2mxlslr7en
|
||||
Reference in New Issue
Block a user