gohud

Opacidade — o jogo atrás do painel

← Temas

Popups, diálogos, folhas, cartões, painéis de HUD, alertas e snackbars desenham sua face com 80% de opacidade. A luta continua atrás de um diálogo de confirmação; o mapa aparece sob uma folha de inventário. Em um jogo isso não é enfeite — é o que mantém o jogador orientado. Um painel totalmente sólido apaga onde ele estava no instante em que uma janela abre.

Só a face fica mais fina. Texto, ícones, botões, badges e slots rápidos continuam nítidos, e as bordas e as sombras também. Um painel translúcido só é lido como vidro enquanto o contorno está firme; esmaeça o contorno e não dá para saber onde o painel termina. Esmaeça o conteúdo e a UI não pode mais ser lida — isso não é uma janela transparente, é um bug. É por isso que o valor nunca é aplicado por modulate.a.

Cinco camadas, da mais específica para a mais geral

OrdemOndeUnidadeAlcance
o argumento naquela chamada — surface.alpha, GoStyle.card(…, alpha)razão 0.0–1.0uma janela
GoConfig.container_alpha_overrides[kind]razão 0.0–1.0um tipo de painel, em todo o projeto
GoConfig.metric_overrides[<kind>_alpha]porcentagemprojetos que mantêm cada medida em um só lugar
GoConfig.container_alpharazão 0.0–1.0todos os painéis de uma vez
o GoHud/constants/<kind>_alpha do temaporcentagemo que o visual decide — a fonte da verdade

Sem nenhuma delas definida o valor é 100, então nada muda em um tema mais antigo.

A opacidade é uma razão em toda parte — exceto no tema. Todo campo e todo argumento alpha recebe 0.0–1.0, as mesmas unidades de Color.a e modulate.a, e um valor negativo significa "não definido". A única exceção são as constantes do tema, porque uma constante de Theme não guarda um float: elas e o canal que as sobrescreve (metric_overrides, que compartilha os nomes e o tipo inteiro do tema) são escritas como 80. Nada mais é.
# Só uma janela — um diálogo de confirmação que não pode esconder a luta atrás dele
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9                          # campos @export também são razões
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)

# Por tipo — mantenha o HUD quase sólido, porque o texto dele fica direto sobre o mundo
GoUi.config.container_alpha_overrides = {
    GoTheme.BOX_PANEL: 0.7,                   # diálogos e folhas podem respirar
    GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh()                               # redesenha os widgets que já estão abertos

# O projeto inteiro — um mundo carregado quer os painéis sólidos de novo
GoUi.config.container_alpha = 1.0
GoUi.refresh()

GoUi.surface_alpha(GoTheme.BOX_PANEL)        # a razão resolvida, p. ex. 0.8

O que segue o valor, e o que não segue

Segue — contêineresIgnora — o que se pressiona, e os marcadores
GoSurface (a casca única atrás de diálogos, folhas e listas suspensas) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole todo botão · GoSlot (slots rápidos) · GoBadge · controles segmentados · células de escolha · chips · discos e avatares
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() todo texto e todo ícone

Um botão com o estado lavado deixa de dizer o que é, e um badge existe para deixar dois caracteres legíveis — nenhum dos dois é um contêiner, então nenhum dos dois segue o valor.

Menus popup continuam sólidos (popup_alpha 100). A engine pode hospedar um PopupMenu em uma Window própria, e ali o sistema não o compõe com o jogo: a translucidez sai preta em vez de transparente. Baixe o valor só em projetos que embutem suas subjanelas (gui_embed_subwindows).

Três detalhes que vieram de telas reais

Faces personalizadas também esmaecem — e é aí que quebra em silêncio

O painel de cantos cortados (GoStyleBoxCut) e a moldura forjada (GoStyleBoxMedieval) não são StyleBoxFlat; elas se desenham sozinhas. Ponha a opacidade só no ramo flat e esses temas a ignoram caladamente enquanto todo teste baseado em valor continua passando. As duas esmaecem o fundo e mantêm brilho, rebites, gravação nos cantos e biséis com força total — e a textura e o bisel da face medieval sempre foram proporcionais ao alfa do fundo dela, então afinam junto com o painel.

O que leva ao ponto maior: bg_color.a == 0.8 é um número. O mundo aparece através e o texto continua legível é o requisito. O gohud verifica o primeiro na suíte headless e o segundo desenhando painéis sobre listras diagonais em um monitor virtual (tests/gohud_alpha_shot.gd) — na face flat, na cortada e na forjada, tanto no tema escuro quanto no claro.