gohud

Opacidad — el juego detrás del panel

← Temas

Los emergentes, los diálogos, las hojas, las tarjetas, los paneles del HUD, las alertas y los snackbars dibujan su cara al 80 % de opacidad. El combate sigue detrás de un diálogo de confirmación; el mapa se ve bajo una hoja de inventario. En un juego esto no es decoración — es lo que mantiene orientado al jugador. Un panel totalmente sólido borra el lugar donde el jugador estaba en el instante en que se abre una ventana.

Solo la cara pierde opacidad. El texto, los iconos, los botones, las insignias y las ranuras rápidas siguen nítidos, y también los bordes y las sombras. Un panel translúcido se lee como cristal solo mientras su contorno está limpio; atenúa el contorno y ya no se sabe dónde termina el panel. Atenúa el contenido y la interfaz no se puede leer en absoluto — eso no es una ventana transparente, es un fallo. Por eso el valor nunca se aplica mediante modulate.a.

Cinco capas, la más específica primero

OrdenDóndeUnidadAlcance
el argumento en esa llamada — surface.alpha, GoStyle.card(…, alpha)proporción 0.0–1.0una ventana
GoConfig.container_alpha_overrides[kind]proporción 0.0–1.0un tipo de panel, en todo el proyecto
GoConfig.metric_overrides[<kind>_alpha]porcentajeproyectos que guardan todas sus medidas en un solo lugar
GoConfig.container_alphaproporción 0.0–1.0todos los paneles a la vez
el GoHud/constants/<kind>_alpha del temaporcentajelo que decide el aspecto — la fuente de verdad

Sin ninguna de ellas definida el valor es 100, así que nada cambia en un tema anterior.

La opacidad es una proporción en todas partes — excepto en el tema. Todos los campos y argumentos alpha toman 0.0–1.0, las mismas unidades que Color.a y modulate.a, y un valor negativo significa "sin definir". La única excepción son las constantes del tema, porque una constante de Theme no puede guardar un decimal: esas y el canal que las sobrescribe (metric_overrides, que comparte los nombres y el tipo entero del tema) se escriben como 80. Nada más.
# Solo una ventana — un diálogo de confirmación que no debe ocultar el combate que hay detrás
surface.alpha = 0.6
sheet.alpha = 0.7
dialogs.alpha = 0.9                          # los campos @export también son proporciones
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 — mantén el HUD casi sólido, porque su texto se apoya directamente sobre el mundo
GoUi.config.container_alpha_overrides = {
    GoTheme.BOX_PANEL: 0.7,                   # los diálogos y las hojas pueden respirar
    GoTheme.BOX_HUD: 0.95,
}
GoUi.refresh()                               # redibuja los widgets que ya están abiertos

# Todo el proyecto — un mundo recargado quiere sus paneles sólidos otra vez
GoUi.config.container_alpha = 1.0
GoUi.refresh()

GoUi.surface_alpha(GoTheme.BOX_PANEL)        # la proporción resuelta, p. ej. 0.8

Qué sigue el valor y qué no

Lo sigue — los contenedoresLo ignora — lo que se pulsa, y los marcadores
GoSurface (el único armazón detrás de los diálogos, las hojas y los desplegables) · GoSheet · GoDialogs · GoDrawer · GoPopover · GoNotice · GoSnackbar · GoPromptCard · GoCoachMark · GoConsole todos los botones · GoSlot (ranuras rápidas) · GoBadge · controles segmentados · celdas de elección · chips · discos y avatares
GoStyle.card() · hud_panel() · overlay_panel() · alert() · plate() · edge_card_panel() · style_notice_panel() · floating() · box() · surface() todo el texto y los iconos

Un botón con el estado deslavado ya no dice lo que es, y una insignia existe para hacer legibles dos caracteres — ninguno es un contenedor, así que ninguno sigue el valor.

Los menús emergentes se mantienen sólidos (popup_alpha 100). El motor puede alojar un PopupMenu en su propia Window, y ahí el sistema operativo no lo compone con el juego: la translucidez sale negra en vez de transparente. Bájalo solo en proyectos que incrustan sus subventanas (gui_embed_subwindows).

Tres detalles que vienen de pantallas reales

Las caras personalizadas también se atenúan — y esa es la parte que se rompe en silencio

El panel de esquinas cortadas (GoStyleBoxCut) y el marco forjado (GoStyleBoxMedieval) no son StyleBoxFlat; se dibujan solos. Pon la opacidad únicamente en la rama plana y estos temas la ignoran sin decir nada mientras todas las pruebas basadas en valores siguen pasando. Ambos atenúan su fondo y mantienen a plena intensidad el resplandor, los remaches, el grabado de las esquinas y los biseles — y el grano y el bisel de la cara medieval siempre fueron proporcionales al alfa de su fondo, así que se aclaran junto con el panel.

Que es el punto más amplio: bg_color.a == 0.8 es un número. El mundo se ve a través y el texto sigue siendo legible es el requisito. gohud comprueba lo primero en su conjunto de pruebas sin ventana y lo segundo dibujando paneles sobre franjas diagonales en un monitor virtual (tests/gohud_alpha_shot.gd) — sobre la cara plana, la cortada y la forjada, en el tema oscuro y en el claro.