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

Настройка

Для начала познакомимся с основными нодами фреймворка. Medusa полностью построена на стандартной системе Control (UI) движка Godot, но привносит собственный дата-ориентированный физический движок и логику рендеринга, чтобы сделать интерфейс динамичным и «живым».

Для создания дерева навыков или интерактивной сети вы будете использовать три основные ноды.


1) Graph (Центральный контроллер)

graph.png

Нода Graph — это сердце системы. Она выступает в роли пространства для симуляции физики, обработчика ввода и холста для отрисовки линий соединений.

Tip

Любое дерево навыков или сеть должны иметь ноду Graph в качестве родителя или главного контейнера. Она координирует поведение всех дочерних элементов.

  • Физический движок: Запускает симуляцию (гравитация, отталкивание, пружины) в реальном времени. Вся математика оптимизирована для работы с UI-элементами.
  • Границы и сетка: В группе Boundary & Grid вы можете ограничить перемещение элементов, используя boundary_shape (Прямоугольник, Эллипс или Кастомная форма). Параметр Use Grid Snap позволяет атомам «прилипать» к сетке при перетаскивании.
  • Выбор и Фокус: Управляет тем, какой элемент сейчас выбран или находится под курсором. Medusa поддерживает как мышь, так и навигацию с геймпада через параметр FocusSystem.
  • Отрисовка линий: Граф автоматически проходит по всем связям и рисует линии, используя ресурсы GraphLine.

Базовая настройка:

  1. Стиль линий: Назначьте ресурс в поле graph_lines. Вы можете использовать готовые стили или создать свой, унаследовавшись от GraphLine.
  2. Система фокуса: Выберите Medusa (система плагина работающая по заготовленным ключам навигации) или Godot (стандартная автоматическая система движка, работающая на анализе пространства). Вы также можете назначить initial_focus_atom, который автоматически получит фокус при запуске.
  3. Множественное выделение: В режиме Selection Mode (Solo/Multiple) настройте поведение кликов. Для множественного выбора укажите действие-модифиактор: наприимер multi_select_action (Действие вы можете создать в настрйоках проекта в разделе спсиок действий).
  4. Курсор: Если вам нужен указатель внутри графа, заполните поле cursor_texture. При запуске Граф создаст внутреннюю ноду текстуры. Вы можете обратиться к ней через код и получить полный контролль над этим компонентом.

Warning

Обратите внимание, что по умолчанию граница отсутствует. Если вы определяете границу с помощью определенного стиля, не забудьте задать параметр anchor_preset и учесть размеры графика: все его элементы должны точно помещаться в пределах этой границы.

Физика:

Физика Medusa работает на основе списка сил (Physics Forces). Medusa предоставляет базовую физику прямо из коробки.

Для стабильного поведения рекомендуется добавлять их в следующем порядке:

  1. Inertia: Придает узлам массу (тяжелые узлы сложнее сдвинуть).
  2. Repulsion: Расталкивает все атомы, не давая им слипаться.
  3. ClusterRepulsion: Специальная сила для сложных структур, расталкивающая целые ветви графа.
  4. Spring: Создает «пружины» между связанными атомами, удерживая их на определенном расстоянии.
  5. Gravity: Тянет атомы к центру графа или к их родительским ветвям.

Вы также можете добавить любую другую физику если этого требует поставленная задача (для этого смотрите Physics) Дальнейшая конфигурация тривиальная и сводится к подробной настройке каждого параметра с целью получить более специфическое поведение.


2) Atom (Элемент сети)

atom.png

Нода 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 (Группировка и Хабы)

graph_branch.png

Нода GraphBranch (Ветвь) — это контейнер, действующий как локальный центр гравитации для группы атомов.

Используйте ветви для организации структуры вашего древа:

  • Локальная гравитация: Атомы внутри ветви притягиваются к её центру, а не к центру всего графа.
  • Сворачивание: Методы collapse() и expand() позволяют скрывать или раскрывать целые ветки навыков с плавной анимацией.
  • Групповое перемещение: При включенном drag_branch_input вы можете перемещать всю группу атомов сразу, потянув за фон ветви.