Перейти к содержанию

Автоматизация

Программное создание графа разделено на четыре этапа: Создание данных, Регистрация в ядре, Выстраивание топологии и Логическая синхронизация.

Основы

Атом не может существовать без ресурса AtomData. Это его «паспорт», по которому системы ProgressDB и GraphLogic узнают объект. При генерации через код вы должны либо загрузить готовый ресурс, либо создать новый экземпляр:

var new_data = AtomData.new()
new_data.id = &"skill_fireball" # Уникальный ID обязателен
new_data.title = "Огненный шар"

1. Регистрация Атома (add_atom)

Warning

Вы не должны использовать стандартный add_child(). Вместо этого используйте метод graph.add_atom(node, branch).

  • Нода добавляется в дерево сцены Godot.
  • Создается AtomContext — объект в физическом движке графа.
  • Атому назначаются масса, температура и индекс для быстрых вычислений.
  • Если у атома есть AtomData, он автоматически регистрируется в глобальной MedusaDB.
var atom = atom_template.instantiate()
atom.data = new_data
graph.add_atom(atom) # Регистрируем атом в системе

2. Выстраивание топологии (connect_atoms)

В Medusa связи (линии) — это не просто визуальный эффект. Это объекты, которые управляют физикой и логикой доступности. Метод graph.connect_atoms(source, target) выполняет три функции:

  1. Физика: Создает невидимую «пружину» (SpringForce) между узлами.
  2. Логика: Записывает target в список детей source, а source — в список родителей target. Это критично для ConnectionsLogic.
  3. Визуал: Сообщает GraphLine, что между этими точками нужно рисовать линию.
graph.connect_atoms(parent_atom, child_atom)

3. Синхронизация состояний (sync_with_progress)

После того как вы построили «паутину» из атомов и связей, их статус по умолчанию — LOCKED (Заблокировано). Чтобы дерево ожило и проверило, какие навыки теперь доступны игроку, нужно запустить цикл проверки логики.

Метод graph.sync_with_progress(progress_db) заставляет граф пройтись по всем правилам GraphLogic и обновить status каждого атома.


Автоматизация и управление

  • При создании «стартовых» навыков через код добавляйте им тег &"root".
  • Настройте в Графе TagLogic, который разрешает статус AVAILABLE для всех атомов с тегом &"root".
  • Теперь после вызова sync_with_progress() ваши стартовые навыки подсветятся сами, без лишних строчек кода.

Динамическая манипуляция (Связи и разрывы)

Если в вашей игре связи между узлами могут меняться (например, динамическая сеть отношений), используйте связку методов:

  • graph.disconnect_atoms(a, b) — мгновенно удаляет связь и обновляет логические карты.
  • graph.wake_up_atom(a) — принудительно выводит атом из «спячки». Это полезно после изменения связей, чтобы физика сразу начала расталкивать узлы, а не ждала случайного наведения мыши.

Мониторинг фокуса

Для создания редакторов или детальных панелей информации используйте переменную graph._focused_atom.

  • Это ссылка на последний выбранный пользователем атом.
  • С помощью неё можно легко реализовать контекстное меню (как в демо): panel.position = graph._focused_atom.position + offset.