Новое: аркада, комикс, Material 3 и облик для детей
К обычному, sci-fi и средневековому добавились четыре новых семейства — теперь четырнадцать встроенных обликов, каждый в тёмном и светлом варианте. Каждый виджет, всплывающее окно и элемент HUD принимает их без единого изменения в вашем коде: смените пресет — и весь экран последует за ним.

material_light
material_dark
kids_light
kids_dark
comic_light
comic_dark
arcade_light
arcade_darkMaterial 3 — для экранов приложений
Material 3 Expressive, выверенный по официальным токенам M3: кнопки-пилюли с плашкой 40dp внутри области касания 48dp, диалоги и листы с углами 28dp, заливные карточки, поля с контуром и ползунок Expressive. Компоненты приложений — панель навигации, верхняя панель, FAB, строка поиска, чипы, прогресс и выбор даты — следуют токенам компонентов M3, а заголовки набраны встроенным шрифтом Roboto. Для магазинов, настроек, почты и любого экрана, который должен ощущаться как приложение.
Детский облик — коробка с игрушками
Сделан для детей: каждая клавиша, строка и панель — желейная конфета с толстым контуром и плотным бортиком, который проседает при нажатии, а у каждого вида элементов свой цвет мелка. Быстрые слоты — конфетные кубики, значки — наклейки, стик — радуга, у окон солнечная лента заголовка и круглая кнопка закрытия-конфета, а нажатие сплющивает кнопку. Размеры и шрифт вашего проекта остаются точно такими же.
Комикс — жирные чернила
Каждая лицевая панель — кадр комикса: цвет поверхности внутри жирного чернильного контура, а за ним жёсткая тень, которая исчезает при нажатии. Одна настройка включает или выключает все тени, ещё две задают толщину контура и размер тени, а один вызов делает то же самое для отдельного виджета. У окон — жёлтая плашка заголовка.
Аркада — раскрашенные клавиши
Каждая клавиша раскрашена — градиент, белый блик и бортик, который проседает при нажатии, всё в тёмно-синем чернильном контуре, — а подпись на ней белая с чернильным контуром: зелёная — играть, синяя — всё остальное, красная — удалить. Панели толстые: цветная рамка вокруг светлой середины, а у окон золотая лента заголовка и круглая красная клавиша закрытия.
GoUi.use_preset(GoThemePresets.MATERIAL_LIGHT) # или MATERIAL_DARK
GoUi.use_preset(&"kids_light") # или &"kids_dark"
GoUi.use_preset(&"comic_light") # или &"comic_dark"
GoUi.use_preset(&"arcade_light") # или &"arcade_dark"
Material 3 подробно → · Детский облик подробно → · Аркада, виджет за виджетом ↓ · Комикс, виджет за виджетом ↓ · Одно и то же всплывающее окно во всех четырнадцати обликах →
Аркада: раскрашенные клавиши и толстые панели
Самый новый облик одевает каждый экран как игровой автомат. Каждая клавиша раскрашена — градиент от светлого верха
к более насыщенному низу, белый штрих блика и бортик, который проседает при нажатии, всё внутри тёмно-синего чернильного контура, — а подпись на ней
белая с чернильным контуром. Каждая панель толстая: цветная рамка с собственным бликом вокруг светлой середины.
arcade_light ставит белые панели на небесно-голубую страницу; arcade_dark — тёмно-синие панели на ночную страницу.
Каждая картинка ниже — настоящий экран gohud: тот же код, одна строка с пресетом.
GoUi.use_preset(&"arcade_light") # или &"arcade_dark"

arcade_light · галерея
arcade_dark · галерея
GoDialogs
GoSheet
GoCoachMark
GoDrawer
GoPopover
GoDialogs.alert()
GoSnackbarКаждая клавиша раскрашена

GoStyle.button()
GoStyle.tabs()


GoStyle.card()
GoForm
GoStyle.choice_grid()
GoSlotGrid

GoDatePicker
GoStyle.slider()
GoStyle.radio_group()
GoStyle.filter_chip()
GoSearchBar
GoStepper
GoTable
GoNavBar
GoTimePicker
GoCodeInput
GoWheelPickerНочью: arcade_dark
На тёмной странице чернила становятся самой страницей, только гораздо глубже, а краски остаются такими же яркими.

GoStyle.button() ночью
GoBar
GoStyle.hud_panel()
GoSlot
GoJoystick

GoFab
GoRewardCalendar

GoTabView
GoScroll

GoStyle.chip()
GoSlotGrid
GoRangeSlider
GoPagination
GoBadgeКак устроен аркадный облик
Лицевая сторона
Каждая клавиша и панель — это GoStyleBoxArcade: чернильный контур, тело с градиентом, бортик и блик, нарисованные
внутри собственного прямоугольника элемента, — клавиша сохраняет размер во всех состояниях, а нажатие лишь вдавливает её.
Подписи, которые читаются
Белая подпись с чернильным контуром читается на любой краске, от которой её отделяет контур, — WCAG считает контур частью буквы. Каждая краска сдвигается, пока её подпись не превысит 4,6:1 на любой высоте градиента.
Окна
Заголовок окна лежит на золотой ленте белыми буквами в чернильном контуре, рядом с круглой красной клавишей закрытия. Диалоги, листы, шторки и поповеры — толстые панели в рамке.
Отдельная клавиша может получить свой цвет — например, оранжевая клавиша магазина в меню паузы:
menu.add_child(GoStyle.arcade_paint(GoStyle.button("Shop", _shop), Color("#FF8A1E")))
Аркада подробно → · Одно и то же всплывающее окно во всех четырнадцати обликах →
Комикс: жирные чернила и жёсткая тень
Облик комикса рисует каждую лицевую панель как кадр комикса — цвет поверхности внутри жирного чернильного контура
и жёсткая сплошная тень, отброшенная вниз и вправо. comic_light рисует чёрными чернилами на странице цвета кремовой бумаги
с кобальтовым основным цветом; comic_dark — кремовыми чернилами на ночной странице с жёлтым основным цветом. Каждая картинка ниже —
настоящий экран gohud: тот же код, одна строка с пресетом.
GoUi.use_preset(&"comic_light") # или &"comic_dark"

comic_light · галерея
comic_dark · галерея
GoSheet
GoCoachMark
GoDrawer
GoPopoverКаждый виджет — в чернилах
Кнопки, переключатели, вкладки, ползунки, карточки, формы, таблицы, выбор даты и времени и чипы — все носят чернила; вам не нужно оформлять их по одному. Нажмите клавишу — и её тень исчезает: панель опускается на своё место, как штамп. Отключённые панели теряют тень и бледнеют, так что то, что можно нажать, отличается от того, что нельзя.

GoStyle.button() — все виды


GoStyle.tabs()

GoStyle.slider()

GoStyle.card()
GoForm

GoTable
GoDatePicker
GoTimePicker
GoStepper

GoNavBar
GoInputGroup
GoSplitButton
GoPaginationНочью: comic_dark
На тёмной странице чёрный контур пропал бы, поэтому comic_dark рисует его кремовым и отбрасывает бледную тень,
подкрашенную теми же чернилами. Элементы HUD — быстрые слоты, полосы, стик и календарь наград — следуют тем же правилам.

GoStyle.button() ночью
GoSlot
GoBar
GoJoystick

GoSlotGrid
GoRewardCalendar

GoRangeSlider
GoSearchBar
GoFabКак устроен облик комикса
Один StyleBox на каждую панель
Каждая лицевая панель — это GoStyleBoxComic: заливка, контур и тень, нарисованные внутри собственного прямоугольника элемента. Толщину контура и размер тени он читает из GoConfig при каждой отрисовке, поэтому одна настройка меняет весь экран сразу.
Нажата — значит плоская
Нажатая клавиша теряет тень и опускается на своё место. При наведении тень остаётся; фокус добавляет внутреннее чернильное кольцо, которое никогда не закрывает контур; отключённые панели теряют тень и бледнеют.
Остальное обводит скин
GoSkinComic обводит чернилами то, что рисует код: быстрые слоты, чипы, значки, аватары, уведомления, панель навигации, FAB, ячейки дат и стик, ручка которого отбрасывает тень.
У окон — плашка заголовка
Заголовок окна лежит на жёлтой плашке, как блок текста рассказчика в комиксе, рядом с круглой кнопкой закрытия в контуре. Диалоги, листы, шторки и поповеры — непрозрачные панели в чернильном контуре.
Читается днём и ночью
Обе палитры проходят те же проверки контраста WCAG, что и любой другой пресет, включая нажатые и отключённые клавиши. Если цвет плашки оказался бы слишком близок к цвету страницы, её контур переходит на цвет страницы.
Вёрстка не меняется
Контур и тень помещаются внутри каждого элемента, а отступы остаются такими, какими их задала тема, поэтому экран, свёрстанный в другом облике, сохраняет свою раскладку — и шрифт вашего проекта.
Три настройки и один вызов
Три настройки GoConfig меняют сразу все комиксовые панели. Ничего не пересобирается — экран перерисовывается, пока вы их задаёте.
GoUi.config.comic_border_width = 2.0 # контур (dp) — по умолчанию 3
GoUi.config.comic_shadow_size = 6.0 # тень (dp) — по умолчанию 4
GoUi.config.comic_shadow = false # нигде никаких теней
Отдельный виджет может пойти своим путём, что бы ни говорили настройки. Передайте true последним аргументом, чтобы захватить всё, что внутри него.
GoStyle.comic_shadow(skip_button, false) # эта кнопка лежит плоско
GoStyle.comic_shadow(card, true, true) # эта карточка и всё в ней сохраняют тень
GoStyle.comic_border(title, 5.0) # у этого — контур потолще
tools/new_theme.py inked --from comic_light копирует палитру; измените
цвета бумаги, чернил и основной цвет и запустите tools/make_theme.py inked. Чернила, тень и скин идут в комплекте.
Комикс подробно → · Одно и то же всплывающее окно во всех четырнадцати обликах →
Как это выглядит в игре
Средневековый и sci-fi пресеты — лист персонажа, инвентарь и задания; формы, сетки и карточки вопросов; угловатые панели и сенсорное управление. Пресет переключается одной строкой кода.
Что он берёт на себя
Больше всего времени в игровом интерфейсе съедает не форма кнопки, а всё то, что расходится между устройствами. gohud держит это расхождение в одном месте.
Каждый размер — это токен
Отступы, углы и размеры текста вызываются по имени, а не пишутся числами. Смените тему — и весь экран поедет вместе с ней.
Видимый размер ≠ размер нажатия
Кнопка закрытия выглядит на 36dp, но её область нажатия — 48dp. Там, где тесно стоящие слоты перекрываются, нажатие получает тот, чей центр ближе.
Вырезы и клавиатуры
Элементы HUD остаются внутри безопасной области, а поле ввода поднимается над виртуальной клавиатурой, когда та появляется.
«Назад» закрывает одно
Escape и кнопка «Назад» на Android закрывают только самую верхнюю поверхность. Стопка окон не исчезает целиком.
Уведомления не перехватывают ввод
Нажмите сквозь снекбар — и кнопка под ним его получит. Фокус тоже не отбирается.
Иконки запрашиваются по имени
Виджеты знают только GoIconSet.CLOSE. Смените набор — и все рисунки поменяются, не тронув ни строки кода. Иконки →
Четырнадцать образов, одна строка
GoUi.use_preset() меняет тему, скин и иконки разом — скруглённые, срезанные sci-fi, кованые средневековые рамки, компоненты приложений Material 3, детские желейные конфеты, чернила комикса или аркадные краски.
Читаемость — по измерению
Каждая тема проверена по WCAG, включая состояния кнопок и полупрозрачные панели HUD поверх чисто белого и чисто чёрного.
Установка gohud
Два пути. Поручите ИИ-агенту или положите папку в проект — больше настраивать нечего.
Быстрый старт
Пять строк выводят экран с темой. Полное прохождение — на странице установки.
Смена внешнего вида — цвета и форма
Theme может перерисовать только то, что рисует движок. Скруглённые углы — единственные, какие есть у StyleBoxFlat, а стик, быстрые слоты и обучающая подсказка рисуются кодом, поэтому одна лишь тема никогда не изменит их форму. Поэтому в gohud есть пресеты: тема, скин и набор иконок, выбранные как одно целое.
GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) # тема, скин и иконки разом
| Пресет | Вид |
|---|---|
default_dark | Исходный gohud — скруглённые углы, мягкий синий акцент |
default_light | Те же формы на светлой палитре |
scifi_dark | Срезанные углы, неоновые голубые грани и свечение, шестиугольный стик, прицельные скобки |
scifi_light | Те же угловатые формы в яркой «чертёжной» палитре |
medieval_dark | Тёмное железо и кожа, рамки под старое золото, заклёпки, гравированные иконки, заголовки шрифтом Cinzel |
medieval_light | Пергамент, чернила и бронза с теми же коваными рамками |
material_light Новое | Material 3 для экранов приложений — кнопки-пилюли, диалоги 28dp, заливные карточки, панель навигации, FAB и строка поиска приложения, Roboto |
material_dark Новое | Те же формы Material 3 на тёмной базовой схеме |
kids_light Новое | Коробка с игрушками для детей — клавиши-желейные конфеты с толстым контуром и бортиком, который проседает при нажатии, цвета мелков, солнечная страница |
kids_dark Новое | Та же коробка с игрушками на ночно-синей странице |
comic_light Новое | Кадры комикса — жирный чернильный контур и жёсткая тень на каждой панели, белые панели на странице цвета кремовой бумаги; тень, её размер и толщина контура — настройки |
comic_dark Новое | Те же чернила на ночной странице — кремовые контуры и жёлтый основной цвет |
arcade_light Новое | Игровой автомат — каждая клавиша раскрашена градиентом, бликом и бортиком, подпись белая с чернильным контуром; толстые панели в рамке на небесно-голубой странице, золотая лента заголовка у окон |
arcade_dark Новое | Те же яркие клавиши на тёмно-синих панелях и ночной странице |
default_dark — скруглённые углы, мягкий синий акцент
default_light — те же формы, светлая палитра
scifi_dark — срезанные углы, голубой неон
scifi_light — те же угловатые формы, «чертёжная» палитраВсе четыре — это один и тот же экран галереи. Не отличается ни строки кода, только имя пресета. Углы кнопок, формы переключателей, строки списка и рамки полей ввода едут вместе.
Средневековая коллекция
medieval_dark соединяет железо и кожу со старым золотом; medieval_light берёт пергамент
и чернила. На рамках меню есть заклёпка и небольшой угловой орнамент, а всегда видимый HUD остаётся сдержанным;
16 гравированных иконок перерисовывают названия предметов, и только заголовки и подзаголовки используют встроенный шрифт Cinzel.
medieval_dark — железо и кожа
medieval_light — пергамент и чернилаОба снимка — это examples/medieval/medieval.tscn, собранный из стандартных виджетов.
Руководство по средневековью и как сделать своё королевство →
Один и тот же экран на телефоне и на настольном компьютере
Снимки галереи сделаны на телефоне в книжной ориентации. Ниже — тот же код при 1280×800: содержимое останавливается на читаемой ширине (480dp) и центрируется, а HUD остаётся по углам. Форма обходит плавающие элементы HUD, но не двигается, если и так их не задевает: сдвиг ради сдвига увёл бы содержимое с центра широкого экрана.
default_dark · 1280×800
scifi_dark · 1280×800Тот же лист, другой вид
Выберите пресет в Project Settings → gohud → Theme → Preset или задайте GoConfig.preset.
Явно заполненные theme, skin или icons берут верх над
пресетом, так что можно взять пресет и переопределить лишь одно из трёх.
new_theme.py kingdom --from medieval_dark пишет палитру, в которой
расписано каждое унаследованное значение; make_theme.py kingdom собирает тему, графику элементов управления
и регуляторы скина, после чего пресет появляется в списке выбора. Все настройки и регуляторы →
Скины — там, куда Theme не дотягивается
Скину принадлежат стик, лицевые панели быстрых слотов, кольцо обучающей подсказки, чипы, скелетоны, оповещения, разделители и заголовки секций. Наследуйте его и переопределяйте только то, что хотите изменить.
class_name MySkin extends GoSkin
func slot_box(accent: Color, lit: bool) -> StyleBox:
var box := GoStyleBoxCut.new()
box.bg_color = accent
box.cut = 6.0
box.edge_color = accent
return box
| Класс | Какие формы умеет |
|---|---|
GoStyleBoxCut | Диагонально срезанные углы (фаска), одна утолщённая акцентная грань, внешнее свечение |
GoStyleBoxBracket | Только угловые метки, без замыкания содержимого в рамку |
GoStyleBoxMedieval | Кованая рамка с заклёпками, угловой гравировкой, фасочным бликом и фактурой материала |
GoStyleBoxJelly | Желейная конфета — толстый контур, плотный бортик, который проседает при нажатии, тело светлее сверху и белый блик |
GoStyleBoxComic | Кадр комикса — жирный чернильный контур и жёсткая отбрасываемая тень; размер обоих задаёт GoConfig прямо во время игры |
GoStyleBoxArcade | Аркадная клавиша или панель — тело с градиентом, белый блик, бортик, который проседает при нажатии, и чернильный контур; у панели вдобавок толстая цветная рамка вокруг светлой середины |
Все шесть сериализуются в ресурс Theme — именно это и позволяет теме менять форму, а не только цвет.
GoSkinSciFi, GoSkinMedieval, GoSkinMaterial, GoSkinKids, GoSkinComic и GoSkinArcade — подклассы, идущие в комплекте.



GoStyle.box() всегда возвращает StyleBoxFlat, потому что вызывающий код
получает его и правит bg_color или corner_radius. Если нестандартная форма должна
уцелеть, используйте GoStyle.surface().
Виджеты
Все части в одной таблице. Каждая подробно → · Каждый виджет с картинкой → · Всплывающие окна и диалоги — полное руководство →
| Класс | Базовый | Что делает |
|---|---|---|
GoSurface | Control | Оболочка плавающей карточки — размещение по центру, снизу или у элемента, закреплённые шапка и подвал, прокручиваемое тело, изменение размера перетаскиванием |
GoSheet | CanvasLayer | Страницы, поднимающиеся снизу, на собственном слое, поэтому они лежат поверх HUD |
GoDialogs | Node | Подтверждения и оповещения, которые можно await; destructive — для необратимых действий |
GoForm | MarginContainer | Формы с ограниченной шириной, обходящие виртуальную клавиатуру и, с avoid_hud, сам HUD |
GoScroll | ScrollContainer | Сенсорная прокрутка; полоса прокрутки прячется во внутренние отступы карточки |
GoNotice | PanelContainer | Снекбар, который не берёт ни ввод, ни фокус |
GoPromptCard | PanelContainer | Вопрос, который не блокирует игру |
GoCoachMark | Control | Обучающий тур, указывающий на настоящие элементы управления; нажатие на цель двигает тур дальше |
GoHudAnchor | Control | Прикрепляет элементы HUD к одной из девяти точек безопасной области |
GoBar | Control | Полосы здоровья, маны и опыта с плавным изменением |
GoSlot | Button | Быстрый слот — иконка, количество, перезарядка и горячая клавиша на одной лицевой панели |
GoJoystick | Control | Виртуальный стик в фиксированном, следящем или относительном режиме |
GoIconButton | Button | Выглядит маленькой, нажимается большой |
GoStyle | статический | Кнопки, строки списка, поля ввода, чипы, таблицы, вкладки и прочее, сделанные единым образом |
Ожидание, сообщения, счётчики
| Класс | Базовый | Что делает |
|---|---|---|
GoSnackbar | Node | сообщение, которое само встаёт на место |
GoSpinner | Control | ожидание без видимого конца |
GoBadge | PanelContainer | точка непрочитанного, метка НОВОЕ, 99+ |
Формы и списки
| Класс | Базовый | Что делает |
|---|---|---|
GoField | VBoxContainer | строка, которая может быть неверной |
GoInputGroup | HBoxContainer | поле ввода, сваренное со своей кнопкой |
GoCombobox | Button | выбор с поиском |
GoCodeInput | VBoxContainer | купоны и подарочные коды |
GoTable | VBoxContainer | сортируемые заголовки, выбираемые строки |
GoPagination | HBoxContainer | страницы или строка «Ещё» |
Формы, которые играм действительно нужны
| Класс | Базовый | Что делает |
|---|---|---|
GoRewardCalendar | VBoxContainer | ежедневный вход |
GoRadar · GoDonut | Control | характеристики с одного взгляда |
GoCarousel | VBoxContainer | баннеры и выбор персонажа |
GoKbd | HBoxContainer | подсказки клавиш, которые не врут |
Поверх экрана
| Класс | Базовый | Что делает |
|---|---|---|
GoDrawer | CanvasLayer | боковая панель |
GoPopover | RefCounted | карточка с привязкой |
GoContextMenu | RefCounted | долгое нажатие и правый клик |
GoConsole | CanvasLayer | консоль разработчика |
Go HUD Skill
В gohud входит ИИ-навык: весь API, готовые шаблоны и запуск предпросмотра. Вставьте один блок в своего агента — он установит gohud и будет знать, как им пользоваться.
Читаемость измеряют, а не прикидывают на глаз
«Красиво» — дело вкуса; «читаемо» можно измерить. Бледно-серый текст отлично смотрится на хорошем мониторе и исчезает на телефоне при дневном свете — выбор на глаз рано или поздно приводит именно к этому.
python3 addons/gohud/tools/check_contrast.py
Каждая пара цветов и подпись каждого состояния кнопки поверх панели, на которой она лежит, измеряется по WCAG во всех четырнадцати темах. Полупрозрачные цвета сначала накладываются на настоящий фон — если измерять их напрямую, коэффициент получается лучше, чем на экране.
Поэтому цвета текста выводятся, а не выбираются: сборщик берёт значение из палитры как отправную точку и поднимает его светлоту, пока оно не пройдёт порог на всех поверхностях, где может оказаться. Измените палитру — и контраст пойдёт следом. Правила и ловушки за ними →
Проверки, релизы и этот сайт
Одна точка входа запускает все проверки; каждая часть видит то, чего не видят остальные.
bash addons/gohud/tools/check_all.sh
| Проверка | Что ловит |
|---|---|
run_tests.sh на четырёх размерах экрана | Поведение и раскладку виджетов, позиции в RTL, фокус с клавиатуры, контраст скина во время работы, все пресеты |
new_project_check.sh | Скрытые зависимости от проекта-хозяина; с --zip — релиз в том виде, в каком он поставляется, с --export — сборку для Web |
check_contrast.py | Контраст по WCAG в каждом файле темы, включая состояния кнопок и полупрозрачные панели |
check_generated.py · check_scaffold.sh | Сгенерированные темы совпадают со своими палитрами; одноразовая тема собирается и проходит проверку контраста |
check_package.py | Версия из package.json, перенос записей в журнале изменений и содержимое ZIP — во временных копиях |
check_site.py | Ссылки этого сайта, якоря, язык страницы, глоссарий и таблицы регуляторов |
Версии релизов
cat addons/gohud/package.json # { "version": "1.1.0" }
bash addons/gohud/tools/release.sh # все проверки → ZIP → этот ZIP в пустом проекте
bash addons/gohud/tools/package.sh # 1.1.0 → builds/1.1.0/gohud-1.1.0.zip
Версия — та, что записана в package.json: упаковка её никогда не повышает. Чтобы выпустить новую
версию, сначала измените это число. Успешный прогон выставляет это значение в plugin.cfg и
GoUi.VERSION, а при первой упаковке этой версии переносит заметки из раздела Unreleased в
CHANGELOG.md в датированную запись. Повторная упаковка той же версии заново собирает её ZIP и
заменяет прежний. Неудачный прогон не меняет ничего. В ZIP не попадают этот сайт, тесты, инструменты и
package.json.
Этот сайт
python3 addons/gohud/tools/make_site.py # глоссарий и таблицы регуляторов скина, порождённые из исходников
python3 addons/gohud/tools/check_site.py # ссылки, якоря, язык, глоссарий, порождённые таблицы
bash addons/gohud/tools/site_shots.sh /tmp/shots # снимки каждой страницы для настольного экрана и телефона
Страницы — это обычный HTML в www/: английский в корне, корейский в ko/. Рабочий процесс
GitHub Actions публикует эту папку как корень сайта.