Wyskakujące okna, okna dialogowe, arkusze, karty, panele HUD, alerty i snackbary rysują swoje lico z kryciem 80%. Walka toczy się dalej za oknem potwierdzenia; mapa prześwituje pod arkuszem ekwipunku. W grze to nie ozdoba — to właśnie trzyma gracza w orientacji. Panel do końca lity wymazuje miejsce, w którym gracz stał, w chwili otwarcia okna.
modulate.a.
Pięć warstw, od najbardziej szczegółowej
| Kolejność | Gdzie | Jednostka | Zasięg |
|---|---|---|---|
| ① | argument przy tym wywołaniu — surface.alpha, GoStyle.card(…, alpha) | ułamek 0.0–1.0 | jedno okno |
| ② | GoConfig.container_alpha_overrides[kind] | ułamek 0.0–1.0 | jeden rodzaj panelu, w całym projekcie |
| ③ | GoConfig.metric_overrides[<kind>_alpha] | procent | projekty, które trzymają wszystkie wymiary w jednym miejscu |
| ④ | GoConfig.container_alpha | ułamek 0.0–1.0 | wszystkie panele naraz |
| ⑤ | motywowe GoHud/constants/<kind>_alpha | procent | to, co rozstrzyga wygląd — źródło prawdy |
Gdy nie ustawiono żadnej z nich, wartość wynosi 100 — więc w starszym motywie nic się nie zmienia.
alpha
bierze 0.0–1.0, te same jednostki co Color.a i modulate.a, a wartość ujemna
znaczy „nie ustawiono”. Jedynym wyjątkiem są stałe motywu, bo stała Theme nie pomieści
liczby zmiennoprzecinkowej: one i kanał, który je nadpisuje (metric_overrides, dzielący
z motywem nazwy i całkowity typ), zapisuje się jako 80. Nic poza tym.
# Tylko jedno okno — okno potwierdzenia, które nie może zasłonić walki za nim
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9 # pola @export też są ułamkami
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)
# Na rodzaj — HUD zostaje prawie lity, bo jego tekst leży wprost na świecie
GoUi.config.container_alpha_overrides = {
GoTheme.BOX_PANEL: 0.7, # okna dialogowe i arkusze mogą odetchnąć
GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh() # przerysowuje widżety, które są już otwarte
# Cały projekt — zatłoczony świat chce paneli z powrotem litych
GoUi.config.container_alpha = 1.0
GoUi.refresh()
GoUi.surface_alpha(GoTheme.BOX_PANEL) # rozstrzygnięty ułamek, np. 0.8
Co idzie za wartością, a co nie
| Idzie za nią — kontenery | Ignoruje ją — to, co naciskasz, i znaczniki |
|---|---|
GoSurface (jedna powłoka za oknami dialogowymi, arkuszami i listami rozwijanymi) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole |
każdy przycisk · GoSlot (szybkie sloty) · GoBadge · kontrolki segmentowe · komórki wyboru · chipy · koła i awatary |
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() |
cały tekst i wszystkie ikony |
Przycisk, którego stan wyblakł, przestaje mówić, czym jest, a plakietka istnieje po to, żeby dwa znaki dały się odczytać — żadne z nich nie jest kontenerem, więc żadne nie idzie za wartością.
popup_alpha 100). Silnik może umieścić
PopupMenu we własnym Window, a tam system nie składa go z grą:
półprzezroczystość wychodzi czarna, nie prześwitująca. Obniżaj ją tylko w projektach, które osadzają
swoje podokna (gui_embed_subwindows).
Trzy szczegóły, które wzięły się z prawdziwych ekranów
-
Wartość mnoży, nie zastępuje. Domyślne lico HUD ma już alfę 0.92, więc
hud_alpha80 ląduje na 0.736 — motyw, który celowo zrobił lico półprzezroczystym, zachowuje tę decyzję. Druga strona: nałóż ją dwa razy, a panel zblednie dwa razy — dlatego alfa mnożona jest w dokładnie jednym miejscu (GoSkin.surface_box()), a każda inna funkcja lica przekazuje argument dalej, zamiast przygaszać własny wynik. -
Kolor, który podałeś, to kolor, który dostajesz.
GoStyle.plate(…, fill)trzyma jawne wypełnienie dokładnie takim, jakie dostało:Color(ink, 0.14)już podaje swoją alfę, a wmnożenie w nie krycia panelu przycięłoby zamiar wywołującego dwa razy.GoStyle.floating(…, opaque = true)ignoruje wartość z tego samego powodu — wypełnienie lica na lity to cały sens tej flagi. -
Panele, których gohud nie zbudował, dostają tę samą regułę.
GoStyle.fade_panel(node)— po tym, jak węzeł znajdzie się w drzewie, żeby odczytał motyw, który dziedziczy. Jest idempotentna: pierwotne lico zostaje zapisane i każde wywołanie liczy od niego na nowo, więc powtarzane przerysowania nigdy się nie sumują. Po podmianie motywuGoStyle.forget_face(node)kasuje tę pamięć, żeby kolejne wywołanie wzięło nowe lico.
Własne lica też bledną — i to jest ta część, która psuje się po cichu
Panel ze ściętymi narożnikami (GoStyleBoxCut) i kuta rama
(GoStyleBoxMedieval) nie są StyleBoxFlat; rysują się same. Włóż krycie tylko
w gałąź flat, a te motywy po cichu je zignorują, choć każdy test oparty na wartościach dalej
przechodzi. Obie przygaszają swoje tło i trzymają poświatę, nity, grawer w narożnikach oraz fazy na
pełnej sile — a faktura i faza średniowiecznego lica zawsze były proporcjonalne do alfy jego tła, więc
rzednieją razem z panelem.
A to szersza myśl: bg_color.a == 0.8 to liczba. Świat prześwituje, a tekst dalej da
się odczytać — to jest wymaganie. gohud sprawdza pierwsze w swoim bezokiennym zestawie testów,
a drugie rysując panele na ukośnych pasach na wirtualnym monitorze
(tests/gohud_alpha_shot.gd) — na licu płaskim, ściętym i kutym, w motywie ciemnym
i jasnym.