gohud

불투명도 — 패널 뒤의 게임

← 테마

떠 있는 창, 확인창, 시트, 카드, HUD 패널, 알림 상자, 스낵바는 면을 80% 불투명도로 그린다. 확인창 뒤에서 전투는 계속되고, 인벤토리 시트 아래로 지도가 비친다. 게임에서 이것은 장식이 아니다 — 플레이어가 자기 자리를 놓치지 않게 붙드는 것이다. 꽉 찬 패널은 창이 열리는 순간 그가 서 있던 자리를 지워 버린다.

옅어지는 것은 면뿐이다. 글자·아이콘·버튼·배지·퀵슬롯은 또렷하게 남고, 테두리와 그림자도 그대로다. 반투명한 패널이 유리로 읽히는 것은 윤곽이 날카로울 때뿐이다 — 윤곽까지 옅게 하면 패널이 어디서 끝나는지 알 수 없다. 내용까지 옅게 하면 UI 는 아예 읽히지 않는다. 그건 투명한 창이 아니라 버그다. 이 값을 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 에 띄우기도 하는데, 거기서는 OS 가 게임과 합성하지 않는다 — 반투명이 비쳐 보이는 대신 검게 나온다. 서브 창을 게임 안에 품는 프로젝트(gui_embed_subwindows)에서만 낮춘다.

실제 화면에서 나온 세 가지

직접 그리는 면도 옅어진다 — 말없이 깨지는 자리가 여기다

모서리를 자른 패널(GoStyleBoxCut)과 단조 프레임(GoStyleBoxMedieval)은 StyleBoxFlat 이 아니다. 스스로 그린다. 불투명도를 flat 분기에만 넣어 두면 이 테마들은 말없이 그것을 무시하는데, 값을 재는 검사는 하나도 빠짐없이 통과한다. 둘 다 배경만 옅게 하고 발광·리벳· 모서리 각인·베벨은 제 세기로 남긴다 — 중세 면의 질감과 베벨은 원래부터 배경 알파에 비례했으므로 패널을 따라 함께 옅어진다.

여기서 더 넓은 이야기가 나온다. bg_color.a == 0.8 은 숫자다. 세계가 비쳐 보이고 글자는 여전히 읽힌다 가 요구다. gohud 는 앞의 것을 헤드리스 검사 스위트로 재고, 뒤의 것은 가상 모니터에서 사선 줄무늬 위에 패널을 그려 확인한다(tests/gohud_alpha_shot.gd) — flat 면·자른 면·단조 면 각각, 어두운 테마와 밝은 테마 양쪽에서.