Раньше добавить тему означало вручную править четыре места — палитру сборщика, форму, скин и ресурс пресета. Теперь одна команда расставляет их все.
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 | сохраняют полосы сочными даже тогда, когда цвету текста приходится темнеть; пропустите один — и сборщик об этом скажет | |
| читаемость | руками не настраивается. Текст, границы, акцент и подпись на нём сборщик подтягивает сам, пока они не пройдут пороги, — меняйте только акцент, и проверки всё равно пройдут | |
shape | kind | flat (скруглённые) · cut (срезанные углы) · medieval (кованые рамки) |
| размеры | radius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — токены едут следом, поэтому панели и расчёты виджетов никогда не расходятся | |
только для cut | cut_ratio · cut_max · corners (diagonal|all) · glow · edge | |
только для medieval | material (0 железо · 1 кожа · 2 пергамент) · grain_alpha · ornament_scale · bevel_strength · fonts — title, subtitle, caption, body, button, сопоставленные со шрифтами res:// внутри аддона | |
skin | base — семейство для тех мест, которые код рисует сам (стик, слоты, значки, кольцо обучающей подсказки, чипы, разделители) | 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_alpha | 0.16 | Непрозрачность заливки панели чипа. |
chip_edge_alpha | 0.45 | Непрозрачность грани панели чипа. |
alert_tint | 0.1 | Насколько сильно панель оповещения подкрашена в цвет своего состояния. |
slot_tint_lit | 0.24 | Акцентная подкраска панели быстрого слота, пока идёт его перезарядка. |
slot_tint_idle | 0.08 | Акцентная подкраска панели быстрого слота в покое. |
slot_border_lit | 2 | Ширина рамки быстрого слота (dp), пока идёт его перезарядка. |
slot_border_idle | 1 | Ширина рамки быстрого слота (dp) в покое. |
badge_pad_x | 5 | Внутренний отступ значка по горизонтали (dp) — количество, оставшееся время. |
badge_pad_y | 1 | Внутренний отступ значка по вертикали (dp). |
badge_edge_alpha | 0.6 | Непрозрачность грани панели значка. |
float_shadow_alpha | 0.45 | Непрозрачность тени плавающих карточек (обучающая подсказка, карточка вопроса). |
float_shadow_size | 14 | Размытие тени плавающих карточек (dp). |
float_shadow_lift | 4 | Смещение тени плавающей карточки вниз (dp). |
float_glow_size | 10.0 | Дальность свечения (dp) плавающей панели, которая светится вместо того, чтобы отбрасывать тень, — как панель со срезанными углами в sci-fi. |
joystick_base_alpha | 0.42 | Непрозрачность базового диска стика. |
joystick_ring_alpha | 0.45 | Непрозрачность кольца стика. |
joystick_ring_width | 2.0 | Ширина кольца стика (dp). |
Sci-fi skin GoSkinSciFi — 10
| Регулятор | По умолчанию | Что задаёт |
|---|---|---|
cut_chip | 7.0 | Размер фаски (dp) у панели чипа. |
cut_skeleton | 5.0 | Размер фаски (dp) у панели-скелетона. |
cut_alert | 8.0 | Размер фаски (dp) у блока оповещения. |
cut_segment | 8.0 | Размер фаски (dp) у сегментированного переключателя. |
cut_slot | 6.0 | Размер фаски (dp) у панели быстрого слота. |
cut_disc_ratio | 0.24 | Фаска аватаров и дисков = диаметр × это отношение. |
slot_glow_alpha | 0.45 | Непрозрачность свечения слота, у которого идёт перезарядка. |
slot_glow_size | 6.0 | Дальность свечения (dp) слота, у которого идёт перезарядка. |
bracket_arm | 12.0 | Длина плеча (dp) прицельной скобки обучающей подсказки. |
bracket_thickness | 2.0 | Толщина линии (dp) прицельной скобки обучающей подсказки. |
Medieval skin GoSkinMedieval — 5
| Регулятор | По умолчанию | Что задаёт |
|---|---|---|
slot_radius | 4.0 | Радиус угла (dp) средневековой рамки быстрого слота. |
leather_grain_alpha | 0.035 | Непрозрачность едва заметной кожаной фактуры внутри быстрых слотов. |
ornament_scale | 1.0 | Масштаб металлических украшений по углам быстрых слотов. Рамки меню используют shape.ornament_scale. |
bevel_strength | 0.18 | Сила металлического блика вдоль граней быстрого слота. |
slot_rivets | 1 | Показывать ли маленькие металлические заклёпки на быстрых слотах: 0 — скрыть, 1 — показать. |
Наследовать скин (по желанию)
В скине живёт только то, до чего не дотягиваются тема и форма, — шестиугольник стика, значки слотов,
прицельная скобка обучающей подсказки. Наследуйте GoSkin, переопределите лишь эти методы и укажите
в JSON на этот ресурс через skin. Теме, меняющей только цвет, этот шаг не нужен.
tools/check_scaffold.sh при каждом запуске создаёт одноразовую тему —
меняет акцент, ставит радиус 4 — и убеждается в успешной генерации, распространении токенов и чистом проходе
по контрасту, после чего удаляет её. Первый же запуск обнаружил, что тема, в которой изменён только акцент,
проваливает 8 пар: сборщик подтягивал цвета текста, но брал акцент как написано. Теперь он подтягивает
и акцент, и подпись на нём.