gohud

Непрозорість — гра за панеллю

← Оформлення

Спливні вікна, діалоги, аркуші, картки, панелі HUD, сповіщення та снекбари малюють свій лицьовий бік із непрозорістю 80%. Бій триває за діалогом підтвердження; карта проглядає з-під аркуша інвентаря. У грі це не оздоба — це те, що тримає гравця зорієнтованим. Повністю щільна панель стирає місце, де він стояв, тієї ж миті, коли відкривається вікно.

Тоншає лише лицьовий бік. Текст, іконки, кнопки, бейджі та швидкі слоти лишаються чіткими, і так само рамки й тіні. Напівпрозора панель читається як скло, лише поки її обрис різкий; приглушіть обрис — і годі сказати, де панель закінчується. Приглушіть вміст — і інтерфейс узагалі не прочитати: це не прозоре вікно, це помилка. Саме тому значення ніколи не застосовують через modulate.a.

П'ять шарів, найконкретніший перший

ПорядокДеОдиницяОхоплення
аргумент у самому виклику — surface.alpha, GoStyle.card(…, alpha)частка 0.0–1.0одне вікно
GoConfig.container_alpha_overrides[kind]частка 0.0–1.0один вид панелі, на весь проєкт
GoConfig.metric_overrides[<kind>_alpha]відсотокпроєкти, які тримають усі розміри в одному місці
GoConfig.container_alphaчастка 0.0–1.0усі панелі відразу
GoHud/constants/<kind>_alpha у темівідсотокте, що вирішує образ, — джерело правди

Якщо не задано жодного з них, значення дорівнює 100, тож у старішій темі не змінюється нічого.

Непрозорість усюди частка — окрім теми. Кожне поле alpha й кожен аргумент беруть 0.0–1.0, ті самі одиниці, що Color.a та modulate.a, а від'ємне значення означає «не задано». Єдиний виняток — константи теми, бо константа Theme не вміє тримати дробове: їх і той канал, що їх заміщує (metric_overrides, який поділяє з темою її назви та цілий тип), пишуть як 80. Більше ніде.
# Лише одне вікно — діалог підтвердження, який не має ховати бій за собою
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9                          # поля @export теж частки
drawer.alpha = 0.7
GoPopover.open(slot, body, {"alpha": 0.9})
var glass := GoStyle.card(Color.TRANSPARENT, -1.0, -1.0, -1.0, 0.5)

# За видом — HUD лишаємо майже щільним, бо його текст лежить просто над світом
GoUi.config.container_alpha_overrides = {
    GoTheme.BOX_PANEL: 0.7,                   # діалоги та аркуші можуть дихати
    GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh()                               # перемальовує вже відкриті віджети

# Весь проєкт — насичений світ хоче, щоб його панелі знову стали щільними
GoUi.config.container_alpha = 1.0
GoUi.refresh()

GoUi.surface_alpha(GoTheme.BOX_PANEL)        # обчислена частка, напр. 0.8

Що йде за значенням, а що ні

Іде за ним — контейнериІгнорує його — те, що натискають, і позначки
GoSurface (єдина оболонка за діалогами, аркушами та випадними списками) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole кожна кнопка · GoSlot (швидкі слоти) · GoBadge · сегментовані контроли · комірки вибору · чипи · диски та аватари
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() увесь текст та іконки

Кнопка, чий стан вицвів, більше не каже, що вона таке, а бейдж існує, щоб два символи лишалися розбірливими, — жодне з них не контейнер, тож жодне за значенням і не йде.

Спливні меню лишаються щільними (popup_alpha 100). Рушій може тримати PopupMenu у власному Window, а там ОС не змішує його з грою: напівпрозорість виходить чорною, а не наскрізною. Знижуйте його лише в проєктах, які вбудовують свої підвікна (gui_embed_subwindows).

Три подробиці, які взялися зі справжніх екранів

Власні лицьові боки теж приглушуються — і саме це ламається мовчки

Панель зі зрізаними кутами (GoStyleBoxCut) і кована рама (GoStyleBoxMedieval) — не StyleBoxFlat; вони малюють себе самі. Покладіть непрозорість лише в пласку гілку — і ці теми тихо її проігнорують, тоді як усі тести за значеннями далі проходитимуть. Обидві приглушують своє тло й тримають сяйво, заклепки, кутове гравіювання та фаски на повній силі, — а зернистість і фаска середньовічного лиця завжди були пропорційні альфі його тла, тож вони тоншають разом із панеллю.

А ширша думка ось яка: bg_color.a == 0.8 — це число. Світ проглядає крізь панель, і текст досі розбірливий — ось вимога. Перше gohud перевіряє у своєму безвіконному наборі тестів, а друге — малюючи панелі поверх діагональних смуг на віртуальному моніторі (tests/gohud_alpha_shot.gd): на пласкому, зрізаному та кованому лиці, і в темній темі, і у світлій.