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

Создание вашей игры

Medusa разделяет контент на три уровня: Данные (ресурсы), Логику (правила) и Представление (ноды на сцене). Чтобы создать работающее древо навыков или интерактивный граф, нужно связать эти элементы воедино.

Tip

Всегда вызывайте await get_tree().process_frame в _ready(), прежде чем работать с графом. Системе нужно время, чтобы проиндексировать все связи.


1) Базы данных и Прогрессия

Система опирается на два типа БД. Это позволяет легко сохранять прогресс игрока, не затрагивая конфигурацию самих навыков.

MedusaDB (Глобальный каталог)

Это «склад» всех доступных в игре элементов.

  • Каждому объекту соответствует ресурс AtomData.
  • MedusaDB хранит ссылки на эти ресурсы и сопоставляет их с уникальными id (StringName).
  • Когда вы добавляете Atom на граф и назначаете ему AtomData, граф регистрирует этот ресурс в базе.
ProgressDB (Файл сохранения)

Это динамический словарь, который хранит прогресс игрока: id : уровень.

  • Если ID навыка есть в этой базе — значит, он разблокирован.
  • Метод progress_db.unlock(id) — это основной способ «покупки» навыка в коде.

Подробней смотрите раздел Data


2) Логика Графа (GraphLogics)

GraphLogic — это мощная система правил, которая автоматически управляет статусом атомов (LOCKED, AVAILABLE, UNLOCKED и т.д.). Вместо того чтобы вручную менять цвет каждой кнопки, вы задаете набор правил для всего Графа.

У Графа есть массив graph_logics. При вызове graph.sync_with_progress(), граф проходит по каждому атому и спрашивает каждое правило: «Можно ли разблокировать этот атом?». Правила возвращают три типа ответов:

  1. BLOCK (Запрет): Если хотя бы одно правило вернуло BLOCK, атом станет DISABLED или останется LOCKED.
  2. ALLOW (Разрешение): Если условие выполнено (например, куплен родительский навык).
  3. PASS (Нейтрально): Правило не имеет мнения (например, навык не имеет тегов, на которые настроено правило).

Встроенные типы логики:

  • ConnectionsLogic: Проверяет наличие открытых связей. В режиме ANY_PARENT навык станет доступен, если открыт хотя бы один «предок».
  • ProgressLogic: Проверяет, не куплен ли навык уже, чтобы перевести его в статус UNLOCKED.
  • TagLogic: Позволяет сделать «корневые» навыки (Root) доступными по умолчанию, просто назначив им соответствующий тег.
  • BlockLogic: Жестко блокирует ветки, если выполнены определенные условия.

Создание своей логики смотрите GraphLogics


3) Разработка: Динамические и статические графы

Medusa поддерживает два подхода к созданию деревьев:

А. Ручное создание (в Редакторе)

Вы расставляете ноды Atom и GraphBranch в интерфейсе Godot, настраиваете их Connected Paths и визуальные эффекты. Это идеально для небольших, фиксированных деревьев навыков.

Б. Программная генерация (API Графа)
  1. Спавн Атома: Используйте graph.add_atom(atom_node, branch). Это зарегистрирует атом в физической системе графа.
  2. Связывание: Метод graph.connect_atoms(parent, child) не просто рисует линию, он создает физическую пружину (SpringForce) между ними и выстраивает логическую иерархию (кто от кого зависит).
  3. Синхронизация: После любого изменения (добавление связи, удаление атома, покупка навыка) вызывайте graph.sync_with_progress(progress_db). Это заставляет GraphLogics мгновенно пересчитать состояния всех нод.
  4. Управление фокусом: Используйте graph._focused_atom, чтобы знать, на какой объект нажал пользователь. Это позволяет реализовать «плавающие» панели интерфейса (как ctx_panel в демо), которые следуют за выбранным элементом:
    ctx_panel.global_position = graph._focused_atom.global_position + offset
    
  5. Массовые операции: Благодаря graph._selected_atoms, вы можете связывать или удалять целые группы элементов одним кликом, что ускоряет процесс проектирования.

Подробней смотрите Автоматизацию