Как это выглядит в игре
Средневековый и sci-fi пресеты — лист персонажа, инвентарь и задания; формы, сетки и карточки вопросов; угловатые панели и сенсорное управление. Пресет переключается одной строкой кода.
Что он берёт на себя
Больше всего времени в игровом интерфейсе съедает не форма кнопки, а всё то, что расходится между устройствами. gohud держит это расхождение в одном месте.
Каждый размер — это токен
Отступы, углы и размеры текста вызываются по имени, а не пишутся числами. Смените тему — и весь экран поедет вместе с ней.
Видимый размер ≠ размер нажатия
Кнопка закрытия выглядит на 36dp, но её область нажатия — 48dp. Там, где тесно стоящие слоты перекрываются, нажатие получает тот, чей центр ближе.
Вырезы и клавиатуры
Элементы HUD остаются внутри безопасной области, а поле ввода поднимается над виртуальной клавиатурой, когда та появляется.
«Назад» закрывает одно
Escape и кнопка «Назад» на Android закрывают только самую верхнюю поверхность. Стопка окон не исчезает целиком.
Уведомления не перехватывают ввод
Нажмите сквозь снекбар — и кнопка под ним его получит. Фокус тоже не отбирается.
Иконки запрашиваются по имени
Виджеты знают только GoIconSet.CLOSE. Смените набор — и все рисунки поменяются, не тронув ни строки кода.
Шесть образов, одна строка
GoUi.use_preset() меняет тему, скин и иконки разом — скруглённые, срезанные sci-fi или кованые средневековые рамки.
Читаемость — по измерению
Каждая тема проверена по 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 | Пергамент, чернила и бронза с теми же коваными рамками |
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 | Кованая рамка с заклёпками, угловой гравировкой, фасочным бликом и фактурой материала |
Все три сериализуются в ресурс Theme — именно это и позволяет теме менять форму, а не только цвет.
GoSkinSciFi и GoSkinMedieval — подклассы, идущие в комплекте.
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 | консоль разработчика |
AI 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/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 публикует эту папку как корень сайта.