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' скрыта.")