Перейти к содержимому

Публичный API и внутренние объекты

Когда использовать стабильный editorAPI, как работать с внутренним editor и проверять зависимости плагина BDEngine.

window.editorAPI

window.editorAPI - стабильный, официально поддерживаемый интерфейс для плагинов. Он объединяет операции с интерфейсом, объектами, проектами, переводами, HeadPaint, окружением и отдельными параметрами анимации.

const api = window.editorAPI;
const selected = api.getSelectedObjects();
console.log('Selected objects:', selected.length);

Этот фрагмент выполняйте после готовности редактора. Существование editorAPI ещё не означает готовность GUI или сцены. Для установленного плагина точкой начала работы с ними служит событие bde:started.

Стабильность точки входа не превращает возвращаемые объекты в независимые копии. Например, getSelectedObjects() возвращает объекты самой сцены. Обращение к их внутренним полям требует знания модели объектов и может иметь отдельные ограничения.

window.editor

window.editor - экземпляр редактора с доступом к его внутренним подсистемам. Его можно изучать и использовать в своих плагинах, в том числе когда нужная возможность ещё не представлена в публичном API.

// Внутренняя зависимость: currentMode не является методом editorAPI.
console.log(window.editor.currentMode);

Методы, поля и связи внутри editor могут меняться без сохранения совместимости. Плагин, использующий их, нужно проверять при обновлениях BDEngine. Укажите такую зависимость в описании плагина и держите обращения к внутренней подсистеме в одном месте кода, чтобы её было проще адаптировать.

Поле editorAPI.editor тоже ведёт к внутреннему экземпляру редактора. Переход через него не меняет уровень гарантий: editorAPI.editor.gui остаётся внутренней зависимостью.

THREE, GLTFExporter, Selectable и gT

Редактор предоставляет несколько глобальных зависимостей:

Доступ Назначение
window.THREE Three.js из сборки редактора.
window.THREE.GLTFExporter Экспортёр glTF, добавленный к THREE; отдельного глобального GLTFExporter загрузчик не создаёт.
window.Selectable Базовый класс собственных объектов редактора.
window.gT Получение переведённой строки через локаль редактора.
window.libs.JSZip JSZip из сборки редактора.

Их наличие удобно для расширений, но не означает, что версии библиотек и вся внутренняя модель объектов зафиксированы навсегда. Особенно это важно для наследования от Selectable и работы с ресурсами Three.js. Контракты и ограничения разобраны в статье Собственные объекты и глобальные зависимости.

Публичное решение или эксперимент

Сначала найдите операцию в справочнике editorAPI. Например, встроенный дисплей создаётся через editorAPI.add(), а кнопка меню экспорта регистрируется через editorAPI.addButtonExportMenu().

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

Проверка наличия возможностей

Перед регистрацией инструмента проверяйте конкретный метод, от которого он зависит:

const api = window.editorAPI;
if (typeof api?.addButtonExportMenu !== 'function') {
console.warn('[my-useful-plugin] This BDEngine version lacks export menu actions.');
// Не регистрируйте недоступный инструмент.
}

Такую проверку нужно делать в нужный момент жизненного цикла. Например, editorAPI.headPaint создаётся при инициализации GUI: его отсутствие до bde:started не доказывает несовместимость версии.

Номер версии редактора помогает воспроизвести проблему, а проверка метода позволяет понятно обработать недоступную возможность. Оба подхода дополняют друг друга. Полный порядок проверки: Совместимость и обновления.