gohud

Seu próprio preset — um arquivo

← Temas

Acrescentar um tema costumava significar editar quatro lugares na mão — a paleta do gerador, a forma, uma skin, um recurso de preset. Agora um comando coloca todos eles no lugar.

python3 addons/gohud/tools/new_theme.py neon --from scifi_dark --title "Neon"
python3 addons/gohud/tools/make_theme.py neon      # o .tres do tema + a arte dos controles
godot --headless --path . --import                  # importa a arte nova uma vez
GoUi.use_preset(&"neon")                             # pronto — ele também aparece no seletor

A primeira linha escreve themes/palettes/neon.json e themes/presets/neon.tres. O JSON carrega todos os valores do tema do qual ele herda, escritos por extenso, então ele serve também como a lista do que dá para mudar: apague uma chave para manter o valor do pai, escreva uma para sobrescrevê-lo. Os presets são encontrados varrendo themes/presets/, então nenhum código de registro muda — a lista suspensa da configuração de projeto também o reconhece.

O que dá para mudar — em uma página

OndeO quêComo
fromo tema paidark · light · scifi_dark · medieval_dark · … ou outro tema em JSON. As chaves omitidas herdam os valores dele; um ciclo de herança falha
palettefundo · três superfícies · borda · três tons de texto · destaque · quatro cores de estado · véu · sombra · trilho da barra"#RRGGBB", alfa como "#RRGGBB@0.35"
cores vivas só de preenchimento *_vividmantêm as barras saturadas mesmo quando a cor do texto precisa escurecer — deixe uma de fora e o gerador avisa
legibilidadenão é ajustada na mão. O texto, as bordas, o destaque e o rótulo sobre ele são empurrados pelo gerador até passarem dos limites — mude só o destaque e as verificações continuam passando
shapekindflat (arredondado) · cut (cantos chanfrados) · medieval (molduras forjadas)
tamanhosradius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — os tokens acompanham, então os painéis e as contas dos widgets nunca discordam
só para cutcut_ratio · cut_max · corners (diagonal|all) · glow · edge
só para medievalmaterial (0 ferro · 1 couro · 2 pergaminho) · grain_alpha · ornament_scale · bevel_strength · fontstitle, subtitle, caption, body, button mapeados para arquivos de fonte res:// internos ao add-on
skinbase — a família dos lugares em que o próprio código desenha (joystick, slots, badges, anel do coach mark, chips, divisores)default · scifi · medieval
dials — os números desses lugares: largura e tonalização da borda do slot, respiro do badge, opacidade de chips e alertas, largura e opacidade do anel do joystick, tamanhos de chanfro do sci-fi, brilho e colcheteTodo valor do pai vem escrito por extenso no JSON. O gerador os escreve em themes/skins/gohud_skin_<id>.tresnenhum código de skin é tocado. Só para mudar os desenhos em si é que você roda --new-skin, que cria o esqueleto de uma subclasse de GoSkin
iconso conjunto de íconesum caminho res:// para um recurso GoIconSet — herdado de um pai em JSON quando omitido
dark · titlecomo o seletor o exibebooleano · string

Cada dial

A tabela abaixo é preenchida pelo tools/make_site.py direto das linhas @export dos scripts das skins — acrescente um dial ou mude um valor padrão e a tabela acompanha. Use esses nomes sob skin.dials no JSON. Um dial cujo padrão aparece como 14 é um inteiro, um que aparece como 10.0 é um float — escreva qualquer uma das formas no JSON e o gerador converte para o tipo do script.

Skin padrão GoSkin — 17

DialPadrãoO que ele define
chip_fill_alpha0.16Opacidade do preenchimento do painel de um chip.
chip_edge_alpha0.45Opacidade da borda do painel de um chip.
alert_tint0.1O quanto o painel de uma caixa de alerta é puxado na direção da cor do estado dela.
slot_tint_lit0.24Tonalização de destaque do painel de um slot rápido enquanto o cooldown dele corre.
slot_tint_idle0.08Tonalização de destaque do painel de um slot rápido em repouso.
slot_border_lit2Largura da borda (dp) do slot rápido enquanto o cooldown dele corre.
slot_border_idle1Largura da borda (dp) do slot rápido em repouso.
badge_pad_x5Respiro interno horizontal (dp) de um badge (quantidade, tempo restante).
badge_pad_y1Respiro interno vertical (dp) de um badge.
badge_edge_alpha0.6Opacidade da borda do painel de um badge.
float_shadow_alpha0.45Opacidade da sombra dos cartões flutuantes (coach mark, prompt card).
float_shadow_size14Desfoque (dp) da sombra dos cartões flutuantes.
float_shadow_lift4Deslocamento para baixo (dp) da sombra de um cartão flutuante.
float_glow_size10.0Distância do brilho (dp) de um painel flutuante que brilha em vez de projetar sombra, como o painel chanfrado do sci-fi.
joystick_base_alpha0.42Opacidade do disco da base do joystick.
joystick_ring_alpha0.45Opacidade do anel do joystick.
joystick_ring_width2.0Largura (dp) do anel do joystick.

Skin sci-fi GoSkinSciFi — 10

DialPadrãoO que ele define
cut_chip7.0Tamanho do chanfro (dp) do painel de um chip.
cut_skeleton5.0Tamanho do chanfro (dp) de um painel de esqueleto de carregamento.
cut_alert8.0Tamanho do chanfro (dp) de uma caixa de alerta.
cut_segment8.0Tamanho do chanfro (dp) de um controle segmentado.
cut_slot6.0Tamanho do chanfro (dp) do painel de um slot rápido.
cut_disc_ratio0.24Chanfro de avatares e discos = diâmetro × esta proporção.
slot_glow_alpha0.45Opacidade do brilho de um slot cujo cooldown está correndo.
slot_glow_size6.0Distância do brilho (dp) de um slot cujo cooldown está correndo.
bracket_arm12.0Comprimento do braço (dp) do colchete de mira do coach mark.
bracket_thickness2.0Espessura da linha (dp) do colchete de mira do coach mark.

Skin medieval GoSkinMedieval — 5

DialPadrãoO que ele define
slot_radius4.0Raio dos cantos (dp) da moldura do slot rápido medieval.
leather_grain_alpha0.035Opacidade das marcas sutis de couro dentro dos slots rápidos.
ornament_scale1.0Escala das decorações de metal nos cantos dos slots rápidos. As molduras de menu usam shape.ornament_scale.
bevel_strength0.18Intensidade do realce metálico ao longo das bordas dos slots rápidos.
slot_rivets1Mostra pequenos rebites de metal nos slots rápidos: 0 esconde, 1 mostra.

Crie uma subclasse da skin (opcional)

Só o que o tema e a forma não alcançam — o hexágono do joystick, os badges dos slots, o colchete de mira do coach mark — vive em uma skin. Crie uma subclasse de GoSkin, sobrescreva apenas esses métodos e aponte o skin do JSON para esse recurso. Um tema que só muda cores pula esta etapa.

Uma verificação mantém a promessa. O tools/check_scaffold.sh cria um tema descartável a cada execução — muda o destaque, põe o raio em 4 — e confere a geração, a propagação dos tokens e uma passagem limpa de contraste antes de removê-lo. Na primeira execução, um tema com apenas o destaque alterado reprovou em 8 pares: o gerador empurrava as cores de texto, mas usava o destaque como estava escrito. Agora ele empurra também o destaque e o rótulo sobre ele.