gohud

Krycie — gra za panelem

← Motywy

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.

Rzednie tylko lico. Tekst, ikony, przyciski, plakietki i szybkie sloty zostają ostre, tak samo obramowania i cienie. Półprzezroczysty panel czyta się jako szkło tylko dopóki jego obrys jest wyraźny; przygaś obrys, a nie poznasz, gdzie panel się kończy. Przygaś treść, a interfejsu nie da się odczytać w ogóle — to nie jest przezroczyste okno, to błąd. Dlatego wartość nigdy nie jest nakładana przez modulate.a.

Pięć warstw, od najbardziej szczegółowej

KolejnośćGdzieJednostkaZasięg
argument przy tym wywołaniu — surface.alpha, GoStyle.card(…, alpha)ułamek 0.0–1.0jedno okno
GoConfig.container_alpha_overrides[kind]ułamek 0.0–1.0jeden rodzaj panelu, w całym projekcie
GoConfig.metric_overrides[<kind>_alpha]procentprojekty, które trzymają wszystkie wymiary w jednym miejscu
GoConfig.container_alphaułamek 0.0–1.0wszystkie panele naraz
motywowe GoHud/constants/<kind>_alphaprocentto, 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.

Krycie wszędzie jest ułamkiem — poza motywem. Każde pole i każdy argument 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ą — konteneryIgnoruje 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ą.

Menu wyskakujące zostają lite (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

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.