Настройка
Для начала познакомимся с основными нодами фреймворка. Medusa полностью построена на стандартной системе Control (UI) движка Godot, но привносит собственный дата-ориентированный физический движок и логику рендеринга, чтобы сделать интерфейс динамичным и «живым».
Для создания дерева навыков или интерактивной сети вы будете использовать три основные ноды.
1) Graph (Центральный контроллер)
Нода Graph — это сердце системы. Она выступает в роли пространства для симуляции физики, обработчика ввода и холста для отрисовки линий соединений.
Tip
Любое дерево навыков или сеть должны иметь ноду Graph в качестве родителя или главного контейнера. Она координирует поведение всех дочерних элементов.
- Физический движок: Запускает симуляцию (гравитация, отталкивание, пружины) в реальном времени. Вся математика оптимизирована для работы с UI-элементами.
- Границы и сетка: В группе
Boundary & Gridвы можете ограничить перемещение элементов, используяboundary_shape(Прямоугольник, Эллипс или Кастомная форма). ПараметрUse Grid Snapпозволяет атомам «прилипать» к сетке при перетаскивании. - Выбор и Фокус: Управляет тем, какой элемент сейчас выбран или находится под курсором. Medusa поддерживает как мышь, так и навигацию с геймпада через параметр
FocusSystem. - Отрисовка линий: Граф автоматически проходит по всем связям и рисует линии, используя ресурсы
GraphLine.
Базовая настройка:
- Стиль линий: Назначьте ресурс в поле
graph_lines. Вы можете использовать готовые стили или создать свой, унаследовавшись от GraphLine. - Система фокуса: Выберите
Medusa(система плагина работающая по заготовленным ключам навигации) илиGodot(стандартная автоматическая система движка, работающая на анализе пространства). Вы также можете назначитьinitial_focus_atom, который автоматически получит фокус при запуске. - Множественное выделение: В режиме
Selection Mode(Solo/Multiple) настройте поведение кликов. Для множественного выбора укажите действие-модифиактор: наприимерmulti_select_action(Действие вы можете создать в настрйоках проекта в разделе спсиок действий). - Курсор: Если вам нужен указатель внутри графа, заполните поле
cursor_texture. При запуске Граф создаст внутреннюю ноду текстуры. Вы можете обратиться к ней через код и получить полный контролль над этим компонентом.
Warning
Обратите внимание, что по умолчанию граница отсутствует. Если вы определяете границу с помощью определенного стиля, не забудьте задать параметр anchor_preset и учесть размеры графика: все его элементы должны точно помещаться в пределах этой границы.
Физика:
Физика Medusa работает на основе списка сил (Physics Forces). Medusa предоставляет базовую физику прямо из коробки.
Для стабильного поведения рекомендуется добавлять их в следующем порядке:
- Inertia: Придает узлам массу (тяжелые узлы сложнее сдвинуть).
- Repulsion: Расталкивает все атомы, не давая им слипаться.
- ClusterRepulsion: Специальная сила для сложных структур, расталкивающая целые ветви графа.
- Spring: Создает «пружины» между связанными атомами, удерживая их на определенном расстоянии.
- Gravity: Тянет атомы к центру графа или к их родительским ветвям.
Вы также можете добавить любую другую физику если этого требует поставленная задача (для этого смотрите Physics) Дальнейшая конфигурация тривиальная и сводится к подробной настройке каждого параметра с целью получить более специфическое поведение.
2) Atom (Элемент сети)
Нода Atom (Атом) представляет собой единичную функциональную единицу: навык, предмет, технологию или квест.
Атомы — это динамические Control ноды с круговым физическим представлением. Их физический размер определяется параметром radius, а визуальный — иконкой или отрисовкой в _draw.
Соединение Атомов
Связывание происходит в инспекторе:
- Connected Paths: Список путей к другим атомам. Это создает физическую связь (силу пружины) и визуальную линию.
- Navigation Paths: Словарь, определяющий соседей для навигации кнопками (
ui_up,ui_rightи т.д.).
Система Статусов
Параметр status определяет логическое состояние атома:
LOCKED: Заблокирован.AVAILABLE: Доступен для покупки.UNLOCKED: Разблокирован/куплен.HIDDEN: Невидим (скрыт туманом войны).DISABLED: Навсегда отключен.
Каждый статус переключает активную библиотеку анимаций, заданную в параметрах атома или в его данных (AtomData).
Анимирование и Состояния
Визуальный отклик атома (наведение, нажатие, выбор) управляется через Реестр Состояний (_state_registry).
Tip
Чтобы настроить анимации:
1. Добавьте AnimationPlayer как временное дитя атома.
2. Создайте анимации с именами: NORMAL, HOVER, PRESSED, FOCUSED.
3. Сохраните библиотеку анимаций (.tres файл) и назначьте её в соответствующий слот статуса в инспекторе атома. (для этого сохраните tres в файловую систему из параметра libraries анимационного плеера)
4. При запуске атом сам создаст внутренний плеер и будет проигрывать нужные анимации при смене состояний.
3) GraphBranch (Группировка и Хабы)
Нода GraphBranch (Ветвь) — это контейнер, действующий как локальный центр гравитации для группы атомов.
Используйте ветви для организации структуры вашего древа:
- Локальная гравитация: Атомы внутри ветви притягиваются к её центру, а не к центру всего графа.
- Сворачивание: Методы
collapse()иexpand()позволяют скрывать или раскрывать целые ветки навыков с плавной анимацией. - Групповое перемещение: При включенном
drag_branch_inputвы можете перемещать всю группу атомов сразу, потянув за фон ветви.


