exchanger-themes/docs/ARCHITECTURE.md
Danil Iarosh ca52efbedc Initial commit: Exchanger Theme DLC Builder
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.
2026-09-22 11:43:13 +03:00

93 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура и границы ответственности
## Общая модель
Theme Builder создаёт полные доверенные тематические сцены. Exchanger загружает PCK, проверяет
manifest и binding-контракт, создаёт тематическую сцену экрана и подключает свою C#-логику к
узлам по metadata. Фактическая иерархия, визуальные эффекты и GDScript-логика темы свободны, пока
соблюдены обязательные ID и типы.
```text
themes/<id>/package ───────────────> preview gallery + binding overlay
│
└── temporary build workspace/exchanger_theme_dlc
├── validator
└── export ──> build/<id>.pck ──install──> Exchanger userdata
```
## Дерево проекта
```text
themes/
├── example/
│ ├── source/ исходные материалы будущей темы
│ └── package/ полный безопасный шаблон v2
├── space-pixel/ текущая оформленная тема для preview
└── <theme-id>/
├── source/ оригиналы, лицензии, references
└── package/
├── manifest.json
├── contracts/screen_bindings.v2.json
├── scenes/ девять production-сцен
├── assets/ runtime-копии изображений/шрифтов/аудио
├── components/ вложенные сцены и runtime-компоненты темы
├── scripts/ GDScript доверенной темы
├── visuals/ необязательные визуальные фрагменты
├── ui_theme.tres
└── background_decoration.tscn
contracts/ авторитетная копия builder-контракта
tools/preview/ галерея, live reload и overlay
addons/exchanger_theme_manager/ EditorPlugin выбора/создания тем
build/ PCK, active-theme.json и временные build-workspaces
```
`themes_src/` и `preview_scenes/` — архив ранней partial-theme модели. Они не являются источником
новой разработки и не входят в PCK. Для новых задач используйте только `themes/` и
`tools/preview/`.
Каталоги тем не содержат `.gdignore` и всегда индексируются Godot, поэтому все исходники
`themes/<id>/package/` доступны в FileSystem. `Exchanger Theme Manager` использует те же видимые
каталоги для списка тем, а preview инстанцирует сцены выбранного package напрямую. Внутренние
зависимости package записываются относительными путями, поэтому каждая открытая сцена использует
ресурсы своей темы. Сгенерированные `.import`/`.uid` не копируются в новую тему. При сборке
обычные `.import` создаются заново, но sidecar-файлы шрифтов `.ttf`, `.otf`, `.woff` и `.woff2`
переносятся с заменой package-пути на runtime-путь: так сохраняются заданные автором antialiasing,
hinting, subpixel positioning и oversampling. Затем package временно копируется под namespace
`res://exchanger_theme_dlc/`; export preset включает только этот namespace и его зависимости.
Каждая production-сцена является полным визуальным корнем: на её root назначен package
`ui_theme.tres`, а фон и decoration-сцена находятся внутри её дерева перед
функциональным содержимым. Root помечен `exchanger_self_contained_visuals = true`. Preview не
назначает сцене Theme, не добавляет фон/декорации и не монтирует демонстрационные дочерние узлы —
только инстанцирует девять сцен во вкладки. `UiThemePath` остаётся описанием package Theme, а
legacy `BackgroundTexturePath` и `BackgroundDecorationPath` у
самодостаточной темы пусты, чтобы Exchanger не нарисовал тот же chrome второй раз.
## Что принадлежит Theme Builder
- композиция и стили девяти экранов;
- фон, анимации, шейдеры, частицы и другие визуальные эффекты;
- собственный GDScript и theme-owned runtime-компоненты;
- package-ресурсы и manifest;
- preview, binding overlay, validator и build scripts;
- локальные исходные материалы и документация темы.
## Что принадлежит Exchanger
- навигация и состояние пользовательского потока;
- оплата, выдача, COM-протокол и оборудование;
- сохранение и проверка настроек, PIN, таймеры и аудио-сервисы;
- управление данными готовых theme-owned Home-узлов: остаток жетонов, подключение и промо;
- загрузчик PCK, fallback-тема и авторитет поддерживаемой версии host-контракта.
Соседний Exchanger требуется только для обновления/проверки host-контракта и финального
интеграционного QA. Обычная визуальная разработка темы автономна.
## Доверенный PCK
В export preset перечислены только ресурсы временной package-копии и их зависимости. Production-
сцены не ограничены пассивными узлами: GDScript, `Timer`, `AudioStreamPlayer*`, `HTTPRequest`,
шейдеры и прочие стандартные возможности Godot разрешены. `source/`, references, docs, preview и
builder tooling не экспортируются. Host продолжает сверять SHA-256 package-копии контракта и при
ошибке структуры экранов или биндингов возвращается к встроенной fallback-теме.