Який вигляд це має у грі
Середньовічний і сай-фай пресети — картка персонажа, інвентар і завдання; форми, сітки та картки-запити; кутасті панелі й сенсорне керування. Пресет перемикається одним рядком коду.
Що він знімає з ваших плечей
Найбільше часу в ігровому інтерфейсі з'їдає не форма кнопки — а все те, що розповзається між пристроями. gohud тримає це розповзання в одному місці.
Кожен розмір — це токен
Відступи, кути й розміри тексту звуться на ім'я, а не пишуться числами. Змініть тему — і весь екран рушить разом із нею.
Видимий розмір ≠ розмір натискання
Кнопка закриття виглядає на 36dp, але її область дотику — 48dp. Там, де тісні слоти перекриваються, натискання дістається тому, чий центр ближче.
Вирізи й клавіатури
Частини HUD сидять усередині безпечної зони, а поле вводу підіймається над віртуальною клавіатурою, коли та з'являється.
«Назад» закриває одне
Escape і апаратна кнопка «Назад» на Android закривають лише найверхнішу поверхню. Складені одне на одному вікна не зникають разом.
Сповіщення не крадуть ввід
Натисніть крізь снекбар — і кнопка під ним отримає натискання. Фокус теж не забирається.
Іконки запитують на ім'я
Віджети знають лише GoIconSet.CLOSE. Замініть набір — і всі малюнки зміняться, не чіпаючи жодного рядка коду.
Шість образів, один рядок
GoUi.use_preset() міняє тему, скін та іконки разом — заокруглені, зрізані сай-фай чи ковані середньовічні рами.
Розбірливість — виміряна
Кожна тема перевіряється за WCAG, разом зі станами кнопок і напівпрозорими панелями HUD над чисто білим і чисто чорним тлом.
Встановлення gohud
Два шляхи. Доручіть ШІ-агенту або покладіть теку у свій проєкт — більше нічого налаштовувати.
Швидкий старт
П'ять рядків виводять екран з темою. Повний шлях — на сторінці встановлення.
Змініть образ — кольори і форму
Тема може перестилізувати лише те, що малює рушій. Заокруглені кути — єдині, які має 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Той самий аркуш, інший образ
Виберіть один у Параметрах проєкту → gohud → Theme → Preset або задайте GoConfig.preset.
Явно заповнені theme, skin чи icons переважають над пресетом,
тож можна взяти пресет і перевизначити лише одне з них.
new_theme.py kingdom --from medieval_dark пише палітру, у
якій розписано кожне успадковане значення; make_theme.py kingdom збирає тему, її графіку для
контролів і регулятори скіна, і пресет з'являється у списку вибору. Кожен параметр і регулятор →
Скіни — там, куди темі не дістатися
Скіну належать стик, лицьові боки швидких слотів, кільце коуч-мітки, чипи, скелетони, сповіщення, роздільники та заголовки секцій. Успадкуйте його й перевизначте лише те, що хочете змінити.
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 | static | Кнопки, рядки списків, поля вводу, чипи, таблиці, вкладки та інше — зроблені одним послідовним способом |
Очікування, сповіщення, лічильники
| Клас | Основа | Що робить |
|---|---|---|
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 — вебзбірку |
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 публікує цю теку як корінь сайту.