1. **Создайте область взаимодействия (CollisionShape2D):**
- Убедитесь, что у каждого персонажа есть область взаимодействия, например, `Area2D`. Это позволит вам определить, когда игрок находится рядом с персонажем.
2. **Используйте сигнал для определения взаимодействия:**
- Подключите сигнал `body_entered` на `Area2D` каждого персонажа. Это позволит вам узнать, когда игрок входит в зону взаимодействия с персонажем.
3. **Определите, с каким персонажем взаимодействует игрок:**
- Создайте переменную, которая будет хранить текущего персонажа, с которым взаимодействует игрок. Например, `var current_npc`.
4. **Обработайте нажатие клавиши:**
- В функции `_input` проверьте, находится ли игрок в зоне взаимодействия и если да, запустите соответствующий таймлайн.
extends CharacterBody2D
# Переменная для хранения текущего персонажа
var current_npc: Node = null
# Функция обработки входных событий
func _input(event: InputEvent):
if Dialogic.current_timeline != null:
return
if event is InputEventKey and event.keycode == KEY_SPACE and event.pressed:
if current_npc != null:
if current_npc.name == "NPC1":
Dialogic.start('timeline1')
elif current_npc.name == "NPC2":
Dialogic.start('timeline2')
get_viewport().set_input_as_handled()
# Функция обработки входа в зону взаимодействия
func _on_area_entered(area: Area2D):
if area.is_in_group("NPC"):
current_npc = area
# Функция обработки выхода из зоны взаимодействия
func _on_area_exited(area: Area2D):
if area == current_npc:
current_npc = null
5. **Назначьте сигналы в редакторе:**
- Для каждого персонажа добавьте `Area2D`, убедитесь, что у него есть `CollisionShape2D`.
- Назначьте сигнал `body_entered` и `body_exited` к функциям `_on_area_entered` и `_on_area_exited`.
6. **Добавьте персонажей в группу:**
- Убедитесь, что все персонажи, с которыми можно взаимодействовать, находятся в одной группе, например, "NPC".
Этот подход позволит вам обрабатывать взаимодействие с разными персонажами и запускать соответствующие таймлайны в зависимости от того, с кем игрок взаимодействует.
Вот скрипт:
func _input(event: InputEvent):
# check if a dialog is already running
if Dialogic.current_timeline != null:
return
if event is InputEventKey and event.keycode == KEY_SPACE and event.pressed:
Dialogic.start('chapterA')
get_viewport().set_input_as_handled()
Всё что я смог сделать это то что я могу нажать пробел в любом месте и на экране запустится диалог, запускается последний сделанный timeline2.