gohud

Три слоя

← Темы

Пресет связывает все три. Поля, оставленные пустыми, откатываются к значениям по умолчанию.

СлойРешаетКак это менять
Theme Цвета, размеры, масштаб текста и форму всего, что рисует движок, — панелей кнопок, полей ввода, вкладок, графики переключателей Напишите .tres вручную или создайте его через tools/make_theme.py
GoSkin Форму всего, что рисует код, — стика, лицевых панелей быстрых слотов, кольца обучающей подсказки, чипов, скелетонов, разделителей, заголовков секций Наследуйте его и переопределяйте только нужные методы
GoIconSet Иконки по имени — 84 рисунка по умолчанию либо 16 гравированных рисунков средневекового набора поверх них. Текстурный пак или иконочный шрифт; вызывающий код в обоих случаях одинаков Подайте свой набор или переопределите лишь несколько имён
Почему одной Theme мало. У StyleBoxFlat угол бывает только скруглённым: поставьте радиус в ноль — получите прямой угол; промежуточного нет. Диагонально срезанные углы, одна утолщённая грань, внешнее свечение — движок не рисует ничего из этого. А стик и обучающая подсказка рисуются в _draw(), куда тема не дотягивается вовсе.

Как выбрать

GoUi.use_preset(GoThemePresets.SCIFI_DARK)

Эта одна строка меняет тему, скин и иконки. Из редактора это делается через Project Settings → Gohud → Theme → Preset, из ресурса настроек — через GoConfig.preset.

Оставить одно поле своим

GoUi.use_preset(GoThemePresets.SCIFI_DARK)
GoUi.config.icons = my_icons     # ваши иконки, всё остальное — из пресета

Явно заданные theme, skin или icons берут верх над пресетом.

Четырнадцать встроенных пресетов

ПресетПанелиСкин · иконки
default_dark · default_lightСкруглённые панели StyleBoxFlat на градуированной шкале теней; основные кнопки поднимаются и проседают при нажатииGoSkin · 84 иконки по умолчанию
scifi_dark · scifi_lightПанели GoStyleBoxCut со срезанными углами, неоновой гранью и свечением; фокусные метки GoStyleBoxBracketGoSkinSciFi — шестиугольный стик · иконки по умолчанию
medieval_dark · medieval_lightКованые рамки GoStyleBoxMedieval — железо и кожа либо пергамент — с заклёпками и угловыми орнаментами на менюGoSkinMedieval · 16 гравированных иконок поверх стандартных
material_light · material_dark НовоеMaterial 3 Expressive для экранов приложений — кнопки-пилюли 40dp внутри области касания 48dp, диалоги 28dp, заливные карточки, поля с контуром, ползунок Expressive; компоненты приложений (панель навигации, верхняя панель, FAB, строка поиска, чипы, прогресс, выбор даты) следуют токенам компонентов M3GoSkinMaterial · стандартные иконки
kids_light · kids_dark НовоеДля детей — коробка с игрушками: толстые контуры и плотный бортик под каждой клавишей, которая проседает при нажатии; утопленные поля ввода, вкладки-пузыри, желейные полосы; у каждого вида элементов свой цвет мелка, слоты-конфеты, значки-наклейки, радужный джойстик и разноцветные диаграммы. Размеры и шрифт проекта не меняются.GoSkinKids · стандартные иконки
arcade_light · arcade_dark НовоеИгровой автомат, нарисованный GoStyleBoxArcade: каждая клавиша раскрашена градиентом сверху вниз, белым бликом и бортиком, который проседает при нажатии, всё в тёмно-синем чернильном контуре, а подпись белая с чернильным контуром — зелёный основной цвет, синие клавиши, красная опасность, лавандовые маленькие клавиши. Толстые панели с цветной рамкой вокруг светлой середины; золотая лента заголовка и круглая красная клавиша закрытия у окон.GoSkinArcade · стандартные иконки
comic_light · comic_dark НовоеКадры комикса, которые рисует GoStyleBoxComic: жирный чернильный контур и жёсткая тень на каждой панели, которая исчезает при нажатии; обведённые чернилами переключатели, флажки и ручки ползунков, жёлтая плашка заголовка у окон. Толщина контура, размер тени и то, видны ли тени вообще, — настройки GoConfig.GoSkinComic · стандартные иконки

Все четырнадцать рядом

Один и тот же экран галереи, где поменялось только имя пресета, — код виджетов не отличается ни на строку. Каждый снимок — телефон в книжной ориентации, 390×844.

Галерея виджетов gohud с пресетом default_dark
default_dark
Галерея виджетов gohud с пресетом default_light
default_light
Галерея виджетов gohud с пресетом scifi_dark
scifi_dark
Галерея виджетов gohud с пресетом scifi_light
scifi_light
Галерея виджетов gohud с пресетом medieval_dark
medieval_dark
Галерея виджетов gohud с пресетом medieval_light
medieval_light
Галерея виджетов gohud с пресетом material_light
material_light
Галерея виджетов gohud с пресетом material_dark
material_dark
Галерея виджетов gohud с пресетом kids_light
kids_light
Галерея виджетов gohud с пресетом kids_dark
kids_dark
Галерея виджетов gohud с пресетом comic_light
comic_light
Галерея виджетов gohud с пресетом comic_dark
comic_dark
Галерея виджетов gohud с пресетом arcade_light
arcade_light
Галерея виджетов gohud с пресетом arcade_dark
arcade_dark

Средневековье: железо, кожа и пергамент

medieval_dark соединяет тёмное железо и кожу со старым золотом. medieval_light берёт пергамент и чернила. Оба используют GoSkinMedieval, те же виджеты и 16 оригинальных иконок с гравировкой; иконки навигации откатываются к исходному набору.

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)
# Или: GoUi.use_preset(GoThemePresets.MEDIEVAL_LIGHT)

Выбирайте пресет до создания интерфейса. Явные переопределения GoConfig.theme, skin или icons по-прежнему имеют приоритет. Откройте res://addons/gohud/examples/medieval/medieval.tscn и нажмите F6 — увидите рабочий лист персонажа, сумку и журнал заданий. Его кнопки переключают варианты и открывают описание предмета.

Средневековый железный вариант — интерфейсы персонажа, инвентаря и заданий
Железо и кожа
Средневековый пергаментный вариант — интерфейсы персонажа, инвентаря и заданий
Пергамент и чернила

У рамок меню есть заклёпка и небольшой угловой орнамент; всегда видимый HUD сохраняет сдержанную грань. Здоровье, мана и выносливость заливаются красным, синим и оливковым. Cinzel ограничен заголовками и подзаголовками; основной текст сохраняет шрифт проекта или шрифт по умолчанию. Лицензия встроенного шрифта лежит в assets/fonts/cinzel/OFL.txt.

Гравированный набор перерисовывает bag, book, box, coin, crown, flag, heart, key, map, potion, shield, star, sword и user, а также добавляет scroll и seal. Любое другое имя откатывается к набору по умолчанию, поэтому close и settings сохраняют свои стандартные рисунки в любом пресете. Cinzel покрывает латиницу; для локализованных заголовков задайте собственный шрифт через shape.fonts.

Что набор тестов проверяет для обоих вариантов. Что выбран средневековый скин; что панели меню и HUD — кованые рамки, причём орнамент только на меню; что заголовки идут шрифтом Cinzel, а основной текст сохраняет унаследованный шрифт; что гравированные иконки импортируются как DPITexture; что настоящий быстрый слот использует скин; что изменение регуляторов у копии скина доходит до слота, не трогая пресет; и что обратное переключение восстанавливает геометрию стандартного и sci-fi вариантов.

Сделайте собственное королевство

python3 addons/gohud/tools/new_theme.py kingdom --from medieval_dark
# Отредактируйте themes/palettes/kingdom.json, затем:
python3 addons/gohud/tools/make_theme.py kingdom
godot --headless --path . --import
# В GDScript, до создания виджетов:
GoUi.use_preset(&"kingdom")

JSON-темы могут наследовать другие JSON-темы. Пропущенные значения сохраняют настройки родителя; циклическое наследование отвергается. Сгенерированный пресет сохраняет набор иконок родителя.

НастройкаДействие
shape.material0: железо · 1: кожа · 2: пергамент. Управляет фактурой поверхности.
shape.grain_alphaНепрозрачность фактуры. Поставьте 0 для чистой поверхности.
shape.ornament_scale · shape.bevel_strengthРазмер углового орнамента меню и сила фасочного блика.
shape.fontsСопоставляет роли title, subtitle, caption, body и button со шрифтами res:// внутри аддона. Пропущенные роли сохраняют унаследованный шрифт.
skin.dialsРадиус быстрого слота, видимость заклёпок, фактура и блик. Полная таблица ниже перечисляет каждый регулятор.

Material 3: облик для экранов приложений Новое

material_light и material_dark приносят в gohud Material 3 Expressive — формы, размеры и типографику компонентов M3, где каждое число взято из официального набора токенов M3 (material-web, tokens/versions/latest). Берите их там, где экран должен ощущаться как приложение, а не как игровое меню: магазины, почта, страницы аккаунта и настроек, таблицы лидеров, приложение-компаньон.

GoUi.use_preset(GoThemePresets.MATERIAL_LIGHT)
# Или: GoUi.use_preset(GoThemePresets.MATERIAL_DARK)
Галерея gohud в material_light — кнопки-пилюли, заливные карточки и поля с контуром
material_light
Галерея gohud в material_dark
material_dark
Диалог подтверждения в material_light поверх игры — углы 28dp и кнопки-пилюли
GoDialogs · material_light
Диалог подтверждения в material_dark поверх игры
GoDialogs · material_dark

Что меняется

ЧастьВ Material 3
КнопкиПилюли (полное скругление углов). Плашка высотой 40dp стоит по центру области касания 48dp, поэтому область нажатия не уменьшается; у компактной кнопки плашка 32dp. Подписи набраны Roboto с насыщенностью 500.
Диалоги и листыУглы 28dp (extra-large), отступы 24dp и заголовок 24sp — GoDialogs, GoSurface, GoSheet и все всплывающие окна, построенные на них.
КарточкиЗаливные карточки с углами 12dp и отступами 16dp.
Поля и ползункиТекстовые поля с контуром; ползунок Expressive с высокой ручкой.
Чипы и сегментыУглы 8dp (small).
Компоненты приложенийGoNavBar, GoAppBar, GoFab, GoSearchBar, чипы, GoProgress и GoDatePicker следуют токенам компонентов M3.
ШрифтВстроенный Roboto — для заголовков, подзаголовков, подписей и кнопок. Основной текст сохраняет шрифт вашего проекта, поэтому корейский, японский, китайский или арабский текст по-прежнему отображается.
НепрозрачностьВсе панели непрозрачны — поверхности M3 сплошные. (Панели обычного, sci-fi и средневекового обликов непрозрачны на 80%, так что игра просвечивает.)
СкинGoSkinMaterial: боковая панель — модальный боковой лист M3, лицевая панель консоли — плавающая панель инструментов M3, баннеры лежат на surface_container_low.
Где спецификация уступает читаемости. M3 приглушает подпись неактивного элемента до 38%; gohud держит её на 4.5:1, чтобы её по-прежнему можно было прочитать. Снекбары сохраняют светлую плашку, потому что цвет их текста — токен, который выбирает сам виджет: инверсная плашка дала бы тёмный текст на тёмном. tools/check_contrast.py измеряет оба облика, как и все остальные.

Roboto распространяется по SIL Open Font License 1.1 (assets/fonts/roboto/OFL.txt) и используется только пресетами Material.

Детский облик: коробка с игрушками Новое

kids_light (кремовый и персиковый с виноградным основным цветом) и kids_dark (черничный фон, солнечно-жёлтый основной цвет, мятные пилюли) — облик для детских игр и обучающих приложений: пухлый, яркий и мягкий, из тех, что маленькому пальцу так и хочется нажать.

GoUi.use_preset(&"kids_light")
# Или: GoUi.use_preset(&"kids_dark")
Галерея gohud в kids_light — кнопки-желейные конфеты цветов мелков
kids_light
Галерея gohud в kids_dark — коробка с игрушками на ночно-синей странице
kids_dark
Диалог подтверждения в kids_light — солнечная лента заголовка и круглая кнопка закрытия-конфета
GoDialogs · kids_light
Диалог подтверждения в kids_dark — мятная лента заголовка и кнопка закрытия-конфета
GoDialogs · kids_dark

Что меняется

ЧастьВ детских обликах
Каждая лицевая панельЖелейная конфета, которую рисует GoStyleBoxJelly: толстый контур, плотный бортик под всем, что нажимается, тело светлее сверху и темнее снизу и белый блик слева вверху. Её носят клавиши, строки списков, сворачиваемые заголовки, поля, полосы, ползунки и панели.
НажатиеБортик исчезает, и лицевая панель опускается на его место, затем желейное сплющивание — на миг широкое и плоское, потом упругий отскок назад. Работает на каждой кнопке, которую создаёт gohud; reduce_motion его выключает.
Поля, вкладки, полосыТекстовое поле — то же желе, вывернутое внутрь: утопленная лунка. Вкладки — пузыри, у полос желейный блик.
ЦветУ каждого вида элементов свой цвет мелка, подобранный тем же генератором, что и в любом облике, поэтому все пороги контраста по-прежнему соблюдаются.
ОкнаСолнечная лента (ночью мятная) за заголовком окна — заголовок уменьшается, вплоть до 15, чтобы остаться в одну строку, — и круглая кнопка закрытия-конфета «опасного» цвета мелка с белым крестиком.
Части скинаGoSkinKids: быстрые слоты — конфетные кубики, которые проседают во время перезарядки, значки — наклейки, чипы и пилюля навигации — маленькие желейки, аватары — круглые конфеты, стик — радуга, диаграммы раскрашены мелками, оповещения и уведомления — записки-наклейки с плотным ободком.
НепрозрачностьПанели, карточки, уведомления и всплывающие окна непрозрачны.
Размеры не меняются. Контур и бортик рисуются внутри прямоугольника каждого элемента, а каждая лицевая панель сохраняет отступы, которые дала ей тема, поэтому экран, разложенный в другом облике, сохраняет свою раскладку, а проект-хозяин, который сам закрепляет размеры, измеряет те же части. Шрифт вашего проекта тоже сохраняется, поэтому нелатинские письменности по-прежнему отображаются.
Быстрые слоты, стик и чип в каждом скине — обычном, детском, Material, средневековом и sci-fi
Части, которые рисует скин, — детский ряд второй

Сделайте собственную коробку с игрушками

python3 addons/gohud/tools/new_theme.py candy --from kids_light
# Отредактируйте themes/palettes/candy.json, затем:
python3 addons/gohud/tools/make_theme.py candy
GoUi.use_preset(&"candy")

Комикс: жирные чернила Новое

comic_light (белые панели на странице цвета кремовой бумаги, кобальтовый основной цвет) и comic_dark (сланцевые панели на ночной странице, кремовые контуры, жёлтый основной цвет) рисуют каждую панель как кадр комикса — жирный чернильный контур с жёсткой тенью позади.

GoUi.use_preset(&"comic_light")
# Или: GoUi.use_preset(&"comic_dark")
Галерея gohud в comic_light — обведённые чернилами клавиши, строки и полосы с жёсткими тенями
comic_light
Галерея gohud в comic_dark — кремовые чернила на ночной странице
comic_dark
Диалог подтверждения в comic_light — жёлтая плашка заголовка и круглая кнопка закрытия, обведённая чернилами
GoDialogs · comic_light
Диалог подтверждения в comic_dark — жёлтая плашка на сланцевой карточке
GoDialogs · comic_dark

Что меняется

ЧастьВ обликах комикса
Каждая лицевая панельЕё рисует GoStyleBoxComic: цвет поверхности внутри жирного контура цвета чернил и жёсткая тень вниз и вправо. Её носят клавиши, строки списков, поля, вкладки, полосы, ползунки, панели и всплывающие окна.
НажатиеТень исчезает, и лицевая панель опускается на её место.
Элементы управленияПереключатели, флажки, радиокнопки и ручки ползунков тоже обведены чернилами, и у каждого своя маленькая тень.
ОкнаЖёлтая плашка за заголовком окна и круглая кнопка закрытия, обведённая чернилами.
Части скинаGoSkinComic: быстрые слоты, чипы, значки, аватары, уведомления, панель навигации, FAB и ячейки дат обведены чернилами; ручка стика отбрасывает тень; диаграммы раскрашены яркими основными цветами.
НепрозрачностьПанели, карточки, уведомления и всплывающие окна непрозрачны; карточки HUD непрозрачны на 92%.

Настройки чернил и тени

Три настройки GoConfig меняют все панели комикса разом. Ничего не перестраивается — экран перерисовывается, как только вы их задаёте.

GoUi.config.comic_border_width = 2.0   # контур (dp) — по умолчанию 3
GoUi.config.comic_shadow_size = 6.0    # тень (dp) — по умолчанию 4
GoUi.config.comic_shadow = false       # нигде никаких теней

Отдельный виджет может пойти своим путём, что бы ни говорила настройка:

GoStyle.comic_shadow(skip_button, false)     # эта кнопка лежит плоско
GoStyle.comic_shadow(card, true, true)       # эта карточка и всё в ней сохраняют тень
GoStyle.comic_border(title, 5.0)             # у этого элемента контур толще
Размеры не меняются. Контур и тень рисуются внутри прямоугольника каждого элемента, а каждая лицевая панель сохраняет отступы, которые дала ей тема, поэтому экран, разложенный в другом облике, сохраняет свою раскладку. Шрифт вашего проекта тоже сохраняется.
Быстрые слоты, стик и чип в исполнении скина комикса
Части, которые рисует скин комикса

Сделайте собственный комикс

python3 addons/gohud/tools/new_theme.py inked --from comic_light
# Отредактируйте themes/palettes/inked.json, затем:
python3 addons/gohud/tools/make_theme.py inked
GoUi.use_preset(&"inked")

Аркада: раскрашенные клавиши и толстые панели Новое

arcade_light (белые панели на небесно-голубой странице) и arcade_dark (тёмно-синие панели на ночной странице) одевают каждый экран как игровой автомат: каждая клавиша раскрашена — градиент от светлого верха к более насыщенному низу, белый штрих блика и бортик, который проседает при нажатии, внутри тёмно-синего чернильного контура, — а каждая панель толстая: цветная рамка вокруг светлой середины.

GoUi.use_preset(&"arcade_light")
# Или: GoUi.use_preset(&"arcade_dark")
Галерея gohud в arcade_light — зелёные, синие, красные и лавандовые раскрашенные клавиши и панель HUD в синей рамке на небесно-голубой странице
arcade_light
Галерея gohud в arcade_dark — те же яркие клавиши на ночной странице
arcade_dark
Диалог подтверждения в arcade_light — золотая лента заголовка, круглая красная клавиша закрытия и синие и зелёные раскрашенные клавиши на панели в рамке
GoDialogs · arcade_light
Диалог подтверждения в arcade_dark — золотая лента на тёмно-синей панели
GoDialogs · arcade_dark

Что меняется

ЧастьВ аркадных обликах
КлавишиИх рисует GoStyleBoxArcade: тело с градиентом, белый блик у левого верхнего угла, более тёмный бортик и тёмно-синий чернильный контур. Основная клавиша зелёная, обычные клавиши и выбранная вкладка синие, опасные — коралловые и красные, маленькие клавиши и остальные вкладки лавандовые.
ПодписиБелые с чернильным контуром на каждой раскрашенной клавише. Каждая краска сдвигается, пока эта подпись не станет читаемой на любой высоте её градиента — 4,6:1 или больше, причём контур, как и в WCAG, считается частью буквы.
НажатиеБортик исчезает, клавиша опускается на своё место и выпрыгивает обратно.
ПанелиПанели, карточки, карточки HUD и всплывающие окна толстые: цветная рамка (6dp вокруг окна, 4 вокруг карточки или карточки HUD, 3 вокруг меню или уведомления) с собственным бликом и бортиком вокруг светлой середины с чернильной линией. Их отступы немного растут, чтобы её вместить, так что текст никогда не касается рамки.
Поля и полосыПоля ввода и желобки полос — утопленные углубления; заливка полосы — глянцевая раскрашенная трубка яркого оттенка её цвета.
ОкнаЗолотая лента с белым заголовком в чернильном контуре и круглая красная клавиша закрытия с белым крестиком.
Части скинаGoSkinArcade: быстрые слоты и чипы — колпачки клавиш, слот на перезарядке загорается золотой окантовкой, значки — светлые плашки, оповещения обрамлены своим цветом, выбранная карточка загорается золотой окантовкой, FAB — золотая клавиша, а стик — глянцевая площадка с четырьмя стрелками.
НепрозрачностьПанели, карточки, уведомления и всплывающие окна непрозрачны; карточки HUD непрозрачны на 94%.

Раскрасьте отдельную клавишу своим цветом

Тема раскрашивает клавиши по их виду. Меню, где каждой клавише нужен свой цвет, раскрашивает их по одной — при наведении лицевая сторона становится чуть светлее, при нажатии чуть темнее, а отключённая остаётся приглушённой:

menu.add_child(GoStyle.arcade_paint(GoStyle.button("Resume", _resume, GoStyle.Tone.PRIMARY), Color("#4ACB3E")))
menu.add_child(GoStyle.arcade_paint(GoStyle.button("Shop", _shop), Color("#FF8A1E")))
GoStyle.arcade_paint(stage_card, Color("#E3343D"), true)   # рамка панели и все клавиши внутри неё
Подпись всегда читается. Краску, на которой белая подпись не читалась бы, осветляют или затемняют, пока она не станет читаемой, так что переданный вами цвет — лишь отправная точка. В других обликах arcade_paint() ничего не делает.
Клавиши сохраняют размер. Бортик и блик рисуются внутри прямоугольника каждой клавиши, поэтому экран, разложенный в другом облике, сохраняет свою раскладку. Панели дают содержимому чуть больше отступа (12dp у карточки и карточки HUD, 15 снизу), чтобы текст никогда не касался рамки. Шрифт вашего проекта тоже сохраняется.
Быстрые слоты, стик и чип в исполнении аркадного скина — глянцевые колпачки клавиш и площадка с четырьмя стрелками
Части, которые рисует аркадный скин

Сделайте собственную аркаду

python3 addons/gohud/tools/new_theme.py cabinet --from arcade_light
# Отредактируйте themes/palettes/cabinet.json — цвета *_vivid и есть краски, — затем:
python3 addons/gohud/tools/make_theme.py cabinet
GoUi.use_preset(&"cabinet")