For the complete documentation index, see llms.txt. This page is also available as Markdown.

Игровой UI-kit UIDoc

Оформите готовые экраны UIDoc с помощью рисованного от руки игрового UI-kit движка: механизм @import, справочник классов, правила компоновки и примеры с разбором.


UI-набор Game UI — это нарисованный вручную набор интерфейса команды художников ($AO/ui/kit/Game UI/**): модальные окна, кнопки, вкладки, полосы прогресса, баннеры, иллюминаторы, слоты предметов, флажки и переключатели. Движок поставляет соответствующий stylesheet, так что любой ресурс UIDoc может принять внешний вид набора без копирования CSS.

Применяйте набор как финальный этап стилизации. Сначала постройте экран — разметку, привязки, события, поведение viewport — проверьте, что всё работает, и только потом оформляйте его. Стилизация набора — это краска и отступы; она никогда не должна быть средством исправления разметки.

Включение набора

Добавьте одну строку в index.css:

@import "game-ui-kit";

Во время bake-этапа движок подставляет res/ui/kit/kit.css вместо импорта, поэтому ставьте импорт первым, а свои правила — ниже него: ваши правила выигрывают при равенстве в каскаде. Импорт сочетается с утилитами Tailwind. Изменение stylesheet движка заново выпекает импортирующие ресурсы при следующей сборке; UIDoc всё ещё не делает hot reload в запущенной игре.

Единственный паттерн, который нужно знать

У UIDoc нет bitmap CSS-фонов, поэтому арткит попадает через обычные img элементы. Каждый контейнер набора — это позиционированный элемент, у которого первый дочерний элемент — .kit-bg изображение; div отвечает за форму и разметку, изображение только рисует, с девятисрезом через настройки ресурса, которые идут в комплекте с набором:

<div class="kit-modal">
  <img class="kit-bg kit-bg--shadow" src="$AO/ui/kit/Game UI/Modals/Basic Modals/modal_simple_grey1.png">
  <!-- content -->
</div>

.kit-bg это object-fit: fill для арта с девятисрезом (модальные окна, кнопки, вкладки, полосы, баннеры). Арт с фиксированным соотношением сторон (флажки, переключатели, иллюминаторы, иконки слотов) использует .kit-bg--contain и собственные width/height контейнера.

Используйте .kit-bg--shadow на самом подложечном изображении img когда арт должен отбрасывать тень. Он использует учитывающий альфу drop-shadow(...), так что прозрачные углы и результат девятисреза, нарисованный в изображении, определяют силуэт. А box-shadow вместо этого следует за прямоугольной рамкой контейнера, тогда как размещение drop-shadow(...) на контейнере также включит в тень его текст и других потомков.

Помещайте видимый текст кнопки/вкладки на передний план, в элемент-метку после арта. Сырой текст, принадлежащий контейнеру, может рисоваться под его дочерним изображением:

Набор оптически опускает прямые подписи кнопок на 5px, чтобы они совпадали с артом. Для составного foreground, например иконки плюс цена, оберните весь foreground в .kit-btn-content чтобы иконка и текст двигались вместе:

Справочник классов

Класс
Используйте

.kit-bg, .kit-bg--contain, .kit-bg--shadow

Изображение подложки арта, fit с фиксированным соотношением сторон и учитывающая альфу тень изображения

.kit-fg

Общий слой foreground над .kit-bg

.kit-modal

Позиционированная панель flex-column с отступами набора

.kit-modal-header

Центрированная безопасная зона заголовка, по 72px зарезервировано с каждой стороны

.kit-modal-title

Центрированная строка заголовка; сочетайте с .kit-text-header

.kit-title-banner

pointy_banner_* подложка за заголовком модального окна, полностью внутри модалки

.kit-header-band

modal_header_* полоса поперёк верхнего края, нарисованного у модалки

.kit-dim

Затемнение на весь экран позади модалки

.kit-btn, .kit-btn-label, .kit-btn-content, .kit-btn--<colour>

Арт кнопки плюс оптически опущенная метка/группа foreground с контуром в цвет кнопки

.kit-tab-row, .kit-tab, .kit-tab-label, .kit-tab--active

Строка навигации из табов-пилюль с метками на переднем плане

.kit-progress, .kit-progress-fill, .kit-progress--N, .kit-progress--compact

Дорожка плюс привязанный fill; модификатор семейства выравнивает fill, а compact выбирает масштаб 30px

.kit-card, .kit-list-row

Структурные контейнеры для карточек и строк на основе арта

.kit-close

Элемент закрытия на переднем плане, абсолютно закреплённый в правом верхнем углу модалки

.kit-slot, .kit-slot-icon, .kit-slot-qty

Квадрат инвентаря/магазина с иконкой и количеством

.kit-porthole

Круглая рамка; укладывайте *_back.png под *_ring.png

.kit-checkbox, .kit-toggle

Элементы управления состоянием с фиксированным соотношением сторон

.kit-text-header/body/body-dark/info

Четыре утверждённых текстовых стиля из art doc

Размеры текста соответствуют art doc (65/55/45/40) при стандартном логическом viewport; переопределяйте в ресурсе, когда экрану нужен другой масштаб.

Правила сборки

Это взято из документации Game UI команды художников и устоявшейся практики; классы кодируют большую часть из них, а шаблоны разметки покрывают остальное.

  • Заголовки: белый, Heavy, чёрная обводка, тень (.kit-text-header), задавайте либо прямо на модалке, либо на .kit-title-banner (тёмная подложка-баннер, полностью внутри модалки — избегайте коричневого "yellow" pointy banner), либо на .kit-header-band если сочетание цветов работает: насыщенная полоса на светлой модалке (красный на белом) читается хорошо; приглушённое на приглушённом (золото на сером) — нет. Если сомневаетесь, обычный текст заголовка всегда безопасен.

  • Заголовки модалок с кнопкой закрытия: держите .kit-close как прямого потомка .kit-modal, где он остаётся абсолютно закреплённым в правом верхнем углу. Поместите заголовок или баннер заголовка внутрь .kit-modal-header; его симметричные боковые резервы по 72px визуально центрируют заголовок и держат его вдали от кнопки закрытия. Планируйте ширину модалки как желаемую ширину заголовка/баннера плюс оба резерва по 72px плюс левый и правый padding панели. Это намеренно делает закрываемые модалки немного шире, чем плотно подогнанный body content.

  • Тени арта: box-shadow следует за прямоугольной рамкой. Для нерегулярного или девятисрезного арта набора поместите .kit-bg--shadow на самом подложечном изображении img чтобы тень следовала его нарисованной альфе. Не помещайте фильтр на .kit-modal, потому что тогда в силуэт тени попадут текст модалки и дочерний арт.

  • Кнопки: текст белый с цветной обводкой в тон арту кнопки — никогда не чёрной. Поместите обычную метку непосредственно в .kit-btn-label чтобы она рисовалась поверх арта и получала 5px оптического смещения базовой линии набора. Для контента с иконкой и текстом поместите оба элемента в прямого .kit-btn-content потомка, чтобы пара получила это смещение вместе. Используйте shiny_buttons для покупок и особых взаимодействий, basic_buttons для всего остального и давайте тексту щедрые отступы. Сероая кнопка — это вид в состоянии disabled.

  • Текст body: тонкая обводка с прозрачностью 20% (.kit-text-body) на цветных модалках; обычный тёмный текст (.kit-text-body-dark) на белых/серых модалках.

  • Вкладки: строка-пилюля внутри тела модалки, а не прикреплённая к верхнему краю. Помещайте текст в .kit-tab-label. Активная вкладка использует цветной вариант арта (например tabs_blue) с соответствующей цветной обводкой текста; неактивные вкладки используют tabs_black. Используйте tab_med.png или tab_large.png для динамических меток. Исходники tab_small.png непоследовательны, и некоторые содержат встроенные метки, поэтому они намеренно не девятисрезные.

  • Полосы прогресса: каждая progress_bar_N папка содержит пару backing.png с специально созданным fill_*.png, но внутренние отступы отличаются у разных семейств и часто асимметричны из-за нижнего обода/тени. Арт дорожки помещается в .kit-bg; соответствующий fill семейства — в .kit-progress-fill, который использует object-fit: fill; добавьте соответствующий .kit-progress--N модификатор к контейнеру и привяжите data-style-image-fill-amount. Не подставляйте окрашенную иконку или декоративное прозрачное изображение: tint сохраняет исходную альфу, а cover может обрезать квадратный арт до щелей или диагональных клиньев на тонкой дорожке. Просматривайте полосу при 0, 0.25, 0.5, и 1; текущая диагностика не определяет неподходящую альфу текстуры. Компонент по умолчанию имеет толщину 40px; добавьте .kit-progress--compact для пропорционально масштабированной формы 30px. Для пользовательской толщины задайте одинаковые font-size и height значения на контейнере, чтобы его семейство внутренних отступов на основе em масштабировалось вместе с ним. Дорожки набора используют flex-shrink: 0; выбирайте толщину явно, а не полагайтесь на flex-родителя, который сожмёт дорожку, потому что тогда дорожка и её fill могут вычислиться в разных размерах.

  • Слоты предметов: цветные квадраты (inv_square_<colour>1.png) для заполненных слотов; inv_square_empty2.png — это задуманное состояние EMPTY.

  • Арт семейства модалок использует один масштаб (углы 37px, обводка 6px в исходных пикселях — уже поставляемые insets slice это учитывают). Элементы, которые должны композироваться, например полоска заголовка поверх модалки, выравниваются, потому что рисуются в одном масштабе; не редактируйте вручную отдельные значения slice.

Пример: модалка настроек

Модалки с полосой (modal_stripe_*) имеют более тёмную нижнюю полосу — размещайте на ней ряд действий, оставляя его последним flow-потомком.

Пример: диалог подтверждения (боевой запрос)

Насыщенная полоса заголовка на светлой модалке, тёмный текст body и пара кнопок принятия/отклонения жёлтого/красного цвета.

Пример: ежедневная награда

Заголовок на баннерной подложке на серой модалке, слоты наград, полоса серии и блестящая кнопка получения.

Заполненные слоты привязывают reward.back к $AO/ui/kit/Game UI/Item Backs/inventory_squares_1/inv_square_blue1.png (или другому цвету); пустые слоты используют inv_square_empty2.png без иконки.

Покрытие арта

Отступы для девятисреза поставляются в res/ui/kit/Game UI/.asset_settings для: Basic Modals (simple, stripe, headers), basic и shiny buttons, medium/large modal tab pills и trapezoids, горизонтальные backings/fills полос прогресса (кроме сегментных спрайтов и фиксированного bar 12), горизонтальные pointy banners и горизонтальные внутренние панели. Элементы с фиксированным соотношением сторон — включая квадраты инвентаря, флажки, слайдеры и переключатели, иллюминаторы, вспомогательные masks и highlights — не требуют срезов. Другие семейства (карточки, облачка речи, fancy banners, ranking backings) есть в наборе, но пока не имеют настроенных insets — измеряйте их перед нарезкой и держите композитные элементы в одном общем масштабе.

Последнее обновление