Автоматизация
Программное создание графа разделено на четыре этапа: Создание данных, Регистрация в ядре, Выстраивание топологии и Логическая синхронизация.
Основы
Атом не может существовать без ресурса 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) выполняет три функции:
- Физика: Создает невидимую «пружину» (
SpringForce) между узлами. - Логика: Записывает
targetв список детейsource, аsource— в список родителейtarget. Это критично дляConnectionsLogic. - Визуал: Сообщает
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.