gohud

Ваш собственный пресет — один файл

← Темы

Раньше добавить тему означало вручную править четыре места — палитру сборщика, форму, скин и ресурс пресета. Теперь одна команда расставляет их все.

python3 addons/gohud/tools/new_theme.py neon --from scifi_dark --title "Neon"
python3 addons/gohud/tools/make_theme.py neon      # тема .tres + графика элементов управления
godot --headless --path . --import                  # один раз импортировать новую графику
GoUi.use_preset(&"neon")                             # готово — он появится и в списке выбора

Первая строка пишет themes/palettes/neon.json и themes/presets/neon.tres. JSON несёт каждое значение темы, от которой он наследуется, полностью расписанным, поэтому он заодно служит списком того, что можно поменять: удалите ключ — сохранится значение родителя, впишите его — оно будет переопределено. Пресеты находятся сканированием themes/presets/, так что никакого кода реестра править не нужно — выпадающий список в настройках проекта подхватит его сам.

Что можно менять — на одной странице

ГдеЧтоКак
fromродительская темаdark · light · scifi_dark · medieval_dark · … либо другая JSON-тема. Пропущенные ключи наследуют её значения; цикл наследования приводит к ошибке
paletteфон · три поверхности · граница · три оттенка текста · акцент · четыре цвета состояний · scrim · тень · жёлоб полосы"#RRGGBB", альфа — как "#RRGGBB@0.35"
насыщенные цвета только для заливки *_vividсохраняют полосы сочными даже тогда, когда цвету текста приходится темнеть; пропустите один — и сборщик об этом скажет
читаемостьруками не настраивается. Текст, границы, акцент и подпись на нём сборщик подтягивает сам, пока они не пройдут пороги, — меняйте только акцент, и проверки всё равно пройдут
shapekindflat (скруглённые) · cut (срезанные углы) · medieval (кованые рамки)
размерыradius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — токены едут следом, поэтому панели и расчёты виджетов никогда не расходятся
только для cutcut_ratio · cut_max · corners (diagonal|all) · glow · edge
только для medievalmaterial (0 железо · 1 кожа · 2 пергамент) · grain_alpha · ornament_scale · bevel_strength · fontstitle, subtitle, caption, body, button, сопоставленные со шрифтами res:// внутри аддона
skinbase — семейство для тех мест, которые код рисует сам (стик, слоты, значки, кольцо обучающей подсказки, чипы, разделители)default · scifi · medieval
dialsчисла этих мест: ширина и подкраска рамки слота, отступы значка, непрозрачность чипов и оповещений, ширина и непрозрачность кольца стика, размеры sci-fi фасок, свечение и скобкаКаждое родительское значение расписано в JSON. Сборщик пишет их в themes/skins/gohud_skin_<id>.tresкод скина при этом не трогается. Менять сами рисунки нужно лишь через --new-skin, который создаёт заготовку подкласса GoSkin
iconsнабор иконокпуть res:// к ресурсу GoIconSet — при пропуске сохраняется от родительской JSON-темы
dark · titleкак его показывает список выборалогическое значение · строка

Все регуляторы

Таблицу ниже заполняет tools/make_site.py прямо из строк @export в скриптах скинов — добавьте регулятор или поменяйте значение по умолчанию, и таблица поедет следом. Используйте эти имена под skin.dials в JSON. Регулятор, чьё значение по умолчанию записано как 14, — целое число, а записанное как 10.0 — число с плавающей точкой; пишите в JSON любую форму, сборщик приведёт её к типу скрипта.

Default skin GoSkin — 17

РегуляторПо умолчаниюЧто задаёт
chip_fill_alpha0.16Непрозрачность заливки панели чипа.
chip_edge_alpha0.45Непрозрачность грани панели чипа.
alert_tint0.1Насколько сильно панель оповещения подкрашена в цвет своего состояния.
slot_tint_lit0.24Акцентная подкраска панели быстрого слота, пока идёт его перезарядка.
slot_tint_idle0.08Акцентная подкраска панели быстрого слота в покое.
slot_border_lit2Ширина рамки быстрого слота (dp), пока идёт его перезарядка.
slot_border_idle1Ширина рамки быстрого слота (dp) в покое.
badge_pad_x5Внутренний отступ значка по горизонтали (dp) — количество, оставшееся время.
badge_pad_y1Внутренний отступ значка по вертикали (dp).
badge_edge_alpha0.6Непрозрачность грани панели значка.
float_shadow_alpha0.45Непрозрачность тени плавающих карточек (обучающая подсказка, карточка вопроса).
float_shadow_size14Размытие тени плавающих карточек (dp).
float_shadow_lift4Смещение тени плавающей карточки вниз (dp).
float_glow_size10.0Дальность свечения (dp) плавающей панели, которая светится вместо того, чтобы отбрасывать тень, — как панель со срезанными углами в sci-fi.
joystick_base_alpha0.42Непрозрачность базового диска стика.
joystick_ring_alpha0.45Непрозрачность кольца стика.
joystick_ring_width2.0Ширина кольца стика (dp).

Sci-fi skin GoSkinSciFi — 10

РегуляторПо умолчаниюЧто задаёт
cut_chip7.0Размер фаски (dp) у панели чипа.
cut_skeleton5.0Размер фаски (dp) у панели-скелетона.
cut_alert8.0Размер фаски (dp) у блока оповещения.
cut_segment8.0Размер фаски (dp) у сегментированного переключателя.
cut_slot6.0Размер фаски (dp) у панели быстрого слота.
cut_disc_ratio0.24Фаска аватаров и дисков = диаметр × это отношение.
slot_glow_alpha0.45Непрозрачность свечения слота, у которого идёт перезарядка.
slot_glow_size6.0Дальность свечения (dp) слота, у которого идёт перезарядка.
bracket_arm12.0Длина плеча (dp) прицельной скобки обучающей подсказки.
bracket_thickness2.0Толщина линии (dp) прицельной скобки обучающей подсказки.

Medieval skin GoSkinMedieval — 5

РегуляторПо умолчаниюЧто задаёт
slot_radius4.0Радиус угла (dp) средневековой рамки быстрого слота.
leather_grain_alpha0.035Непрозрачность едва заметной кожаной фактуры внутри быстрых слотов.
ornament_scale1.0Масштаб металлических украшений по углам быстрых слотов. Рамки меню используют shape.ornament_scale.
bevel_strength0.18Сила металлического блика вдоль граней быстрого слота.
slot_rivets1Показывать ли маленькие металлические заклёпки на быстрых слотах: 0 — скрыть, 1 — показать.

Наследовать скин (по желанию)

В скине живёт только то, до чего не дотягиваются тема и форма, — шестиугольник стика, значки слотов, прицельная скобка обучающей подсказки. Наследуйте GoSkin, переопределите лишь эти методы и укажите в JSON на этот ресурс через skin. Теме, меняющей только цвет, этот шаг не нужен.

Обещание держит проверка. tools/check_scaffold.sh при каждом запуске создаёт одноразовую тему — меняет акцент, ставит радиус 4 — и убеждается в успешной генерации, распространении токенов и чистом проходе по контрасту, после чего удаляет её. Первый же запуск обнаружил, что тема, в которой изменён только акцент, проваливает 8 пар: сборщик подтягивал цвета текста, но брал акцент как написано. Теперь он подтягивает и акцент, и подпись на нём.