Godot 4.7 project for authoring, previewing, validating, and building Exchanger PCK themes. Includes the example and space-pixel themes, binding contracts, editor tooling, validation/build scripts, and project documentation.
5.6 KiB
Интеграция полносценовой темы в Exchanger
Этот документ описывает границу с основным приложением. Для локального цикла разработки используйте WORKFLOW.md, а для точной схемы контракта — BINDING_CONTRACT.md.
Граница ответственности
Exchanger монтирует один внешний PCK, проверяет manifest v2 и создаёт визуальный корень выбранного
экрана из ScreenScenes. C#-контроллер экрана остаётся в приложении. Он разрешает нужные тематические
узлы по exchanger_binding_id, подписывает кнопки и обновляет текст/состояния. Он не добавляет,
не удаляет, не переносит и не стилизует визуальные узлы ThemeView. Тема считается доверенной:
прикреплённый GDScript и её runtime-узлы исполняются как часть инстанцированной сцены.
App-owned C#-контроллеры оплаты, оборудования и настроек остаются вне ThemeView, но тема может
содержать собственные таймеры, аудио, сетевые запросы и другую вспомогательную логику.
PackedScene уже содержит root Theme, ThemeBackground и BackgroundDecoration; это тот же файл,
который открывается напрямую и показывается в builder preview. UiThemePath описывает Theme
самодостаточных сцен. BackgroundTexturePath и BackgroundDecorationPath у
самодостаточных тем пусты, поэтому общий background-layer Exchanger не дублирует визуальные слои
экранной сцены.
При любой ошибке PCK приложение использует единственную встроенную fallback-тему.
Установка
.\build-theme.ps1 -ThemeId space-pixel -InstallToDefaultUserPath
Пакет устанавливается в:
%APPDATA%\Godot\app_userdata\Exchanger\theme_dlc\active_theme.pck
Перед заменой PCK закройте Exchanger. После установки выполните полный перезапуск.
Контракт
Источником истины для автономной работы builder является contracts/screen_bindings.v2.json.
Он генерируется и при согласованной миграции синхронизируется с:
src/core/ThemeManager/ThemeSceneContract.cs;src/core/ThemeManager/ThemeBindingResolver.cs;- вызовами
GetNode(SafeMargin/...)в девяти C#-контроллерах экранов.
Путь, имя root, screen metadata, element metadata и тип каждого обязательного узла должны совпасть. Фактическая иерархия узлов внутри сцены темы свободна: приложение ищет их по metadata, а не NodePath.
Каждая тема включает точную байтовую копию каталога по каноническому runtime-пути
res://exchanger_theme_dlc/contracts/screen_bindings.v2.json. Host до создания ThemeView вычисляет
SHA-256 встроенного файла и сравнивает его с закреплённым хешем поддерживаемой версии контракта.
Несовпадение означает несовместимый или изменённый пакет и приводит к безопасной fallback-теме.
Проверка интеграции
- В журнале активирован ожидаемый
ThemeIdи manifest версии 2. - Все девять экранов созданы из соответствующих
ScreenScenes. - Кнопки навигации и оплаты реагируют на касание.
- Динамические Label, формы, PIN-клавиатуры и настройки обновляются через биндинги.
- Home находит готовые stock/connection/promo nodes без изменения дерева ThemeView.
- Технические панели остаются скрытыми/управляются host-логикой так же, как во fallback-сцене.
- В production PCK нет preview overlay, builder tooling,
source/и references; GDScript и runtime-ресурсы самой темы присутствуют и запускаются без ошибок. - При повреждённой сцене, неверном типе или отсутствующем binding-id активируется безопасный fallback.
Совместимость
Manifest v1 и VisualSlots относятся к прежней частичной модели. space-pixel пока сохраняет
старые English Advertisement* identifiers и VisualSlots для миграции, но новым темам следует
использовать v2 ScreenScenes. В пользовательском русском интерфейсе используются «промо» и
«промо-ролик».