Como fica dentro de um jogo
Os presets medieval e sci-fi — fichas de personagem, inventários e missões; formulários, grades e prompt cards; painéis angulares e controles de toque. Trocar de preset é uma linha de código.
O que ele tira das suas mãos
O que mais custa tempo em UI de jogo não é o formato de um botão — é tudo aquilo que se desencontra de um aparelho para outro. O gohud resolve esse desencontro em um só lugar.
Toda medida é um token
Espaçamentos, cantos e tamanhos de texto são chamados pelo nome, não escritos como números. Troque o tema e a tela inteira acompanha.
Tamanho visível ≠ tamanho de toque
Um botão de fechar aparenta 36dp, mas sua área de toque tem 48dp. Onde slots apertados se sobrepõem, o toque vai para aquele cujo centro está mais perto.
Notches e teclados
As peças do HUD ficam dentro da área segura, e um campo de entrada sobe acima do teclado virtual quando ele aparece.
Voltar fecha uma coisa só
Escape e o Voltar do Android fecham apenas a superfície mais acima. Janelas empilhadas não somem todas juntas.
Avisos nunca roubam o toque
Toque através de um snackbar e o botão embaixo dele recebe o toque. O foco também não é tomado.
Ícones são pedidos pelo nome
Os widgets só conhecem GoIconSet.CLOSE. Troque o conjunto e todos os desenhos mudam sem tocar em uma linha de código.
Seis visuais, uma linha
GoUi.use_preset() troca tema, skin e ícones de uma vez — molduras arredondadas, chanfradas sci-fi ou forjadas medievais.
Legível por medição
Todo tema é conferido contra a WCAG, incluindo os estados dos botões e os painéis de HUD translúcidos sobre branco puro e preto puro.
Instalar o gohud
Dois caminhos. Deixe o seu agente de IA fazer, ou solte a pasta no seu projeto — não há mais nada para configurar.
Início rápido
Cinco linhas colocam um ecrã com tema no visor. O percurso completo está na página de instalação.
Mude o visual — cores e forma
Um Theme só consegue reestilizar aquilo que a engine desenha. Cantos arredondados são os únicos cantos que o StyleBoxFlat tem, e o joystick, os slots rápidos e o coach mark são desenhados por código — então um tema sozinho nunca muda a forma deles. Por isso o gohud traz presets: um tema, uma skin e um conjunto de ícones escolhidos como uma unidade só.
GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) # tema, skin e ícones de uma vez
| Preset | Visual |
|---|---|
default_dark | O gohud original — cantos arredondados, destaque em azul suave |
default_light | As mesmas formas em uma paleta clara |
scifi_dark | Cantos chanfrados, bordas e brilho em neon ciano, joystick hexagonal, colchetes de mira |
scifi_light | As mesmas formas angulares em uma paleta clara de blueprint |
medieval_dark | Ferro escuro e couro, molduras de ouro envelhecido, rebites, ícones gravados, títulos em Cinzel |
medieval_light | Pergaminho, tinta e bronze com as mesmas molduras forjadas |
default_dark — cantos arredondados, destaque em azul suave
default_light — mesmas formas, paleta clara
scifi_dark — cantos chanfrados, neon ciano
scifi_light — mesmas formas angulares, paleta blueprintEssas quatro são a mesma tela de galeria. Não há uma linha de código de diferença — só o nome do preset. Cantos dos botões, formato dos interruptores, linhas de lista e bordas dos campos mudam todos juntos.
Coleção medieval
O medieval_dark combina ferro e couro com ouro envelhecido; o medieval_light usa
pergaminho e tinta. As molduras de menu levam um rebite e um pequeno ornamento de canto, enquanto o HUD sempre
visível fica discreto; 16 ícones gravados redesenham os nomes de itens, e só títulos e subtítulos usam a fonte
Cinzel que acompanha o pacote.
medieval_dark — ferro e couro
medieval_light — pergaminho e tintaAs duas capturas são examples/medieval/medieval.tscn, montadas com os widgets padrão.
O guia medieval e como criar o seu próprio reino →
A mesma tela no celular e no desktop
As capturas da galeria são de um celular em retrato. Abaixo está o mesmo código a 1280×800 — o conteúdo para em uma largura legível (480dp) e se centraliza, enquanto o HUD continua nos cantos. O formulário contorna as peças flutuantes do HUD, mas não se move quando já está livre delas: empurrar mesmo assim jogaria o conteúdo para fora do centro em uma tela larga.
default_dark · 1280×800
scifi_dark · 1280×800A mesma folha, outro visual
Escolha um em Configurações do Projeto → gohud → Theme → Preset ou defina GoConfig.preset.
Preencher theme, skin ou icons explicitamente vence o
preset, então você pode pegar um preset e sobrescrever só um deles.
new_theme.py kingdom --from medieval_dark escreve uma paleta
com todos os valores herdados escritos por extenso; make_theme.py kingdom monta o tema, a arte dos
controles e os dials da skin, e o preset aparece no seletor. Cada configuração e cada dial →
Skins — onde um Theme não alcança
Uma skin é dona do joystick, das faces dos slots rápidos, do anel do coach mark, dos chips, dos esqueletos de carregamento, dos alertas, dos divisores e dos títulos de seção. Crie uma subclasse e sobrescreva só o que quiser mudar.
class_name MySkin extends GoSkin
func slot_box(accent: Color, lit: bool) -> StyleBox:
var box := GoStyleBoxCut.new()
box.bg_color = accent
box.cut = 6.0
box.edge_color = accent
return box
| Classe | Formas que ela consegue fazer |
|---|---|
GoStyleBoxCut | Cantos cortados na diagonal (chanfro), uma borda de destaque mais grossa, um brilho externo |
GoStyleBoxBracket | Só as marcas de canto, sem cercar o conteúdo |
GoStyleBoxMedieval | Uma moldura forjada com rebites, gravação nos cantos, um realce de bisel e a textura do material |
As três serializam dentro de um recurso Theme — é isso que permite a um tema mudar a forma, não só a cor.
GoSkinSciFi e GoSkinMedieval são as subclasses que já vêm prontas.
GoStyle.box() sempre devolve um StyleBoxFlat, porque quem chama
recebe o objeto e ajusta bg_color ou corner_radius. Use
GoStyle.surface() quando uma forma personalizada precisa sobreviver.
Widgets
As peças, em uma tabela só. Cada uma em detalhe →
| Classe | Base | O que faz |
|---|---|---|
GoSurface | Control | Casca de cartão flutuante — posicionamento ao centro, embaixo ou ancorado, cabeçalho e rodapé fixos, corpo rolável, redimensionamento por arraste |
GoSheet | CanvasLayer | Páginas que sobem de baixo, em uma camada própria para ficarem acima do HUD |
GoDialogs | Node | Confirmações e alertas que você aguarda com await; destructive para ações irreversíveis |
GoForm | MarginContainer | Formulários com largura máxima que se desviam do teclado virtual e, com avoid_hud, do HUD |
GoScroll | ScrollContainer | Rolagem por toque; a barra de rolagem se encaixa no respiro do cartão |
GoNotice | PanelContainer | Um snackbar que não toma nem o toque nem o foco |
GoPromptCard | PanelContainer | Uma pergunta que não bloqueia o jogo |
GoCoachMark | Control | Um tour guiado que aponta para controles de verdade; tocar no alvo avança |
GoHudAnchor | Control | Fixa as peças do HUD em um dos nove pontos da área segura |
GoBar | Control | Barras de vida, mana e experiência com mudanças suavizadas |
GoSlot | Button | Um slot rápido — ícone, quantidade, cooldown e atalho em uma só face |
GoJoystick | Control | Stick virtual nos modos fixo, seguir ou relativo |
GoIconButton | Button | Parece pequeno, recebe toque grande |
GoStyle | estático | Botões, linhas de lista, campos, chips, tabelas, abas e mais, feitos sempre do mesmo jeito |
Esperando, avisando, contando
| Classe | Base | O que faz |
|---|---|---|
GoSnackbar | Node | a mensagem que se posiciona sozinha |
GoSpinner | Control | uma espera sem fim à vista |
GoBadge | PanelContainer | o pontinho de não lido, a etiqueta NOVO, o 99+ |
Formulários e listas
| Classe | Base | O que faz |
|---|---|---|
GoField | VBoxContainer | a linha que pode estar errada |
GoInputGroup | HBoxContainer | uma entrada soldada ao botão dela |
GoCombobox | Button | um seletor que busca |
GoCodeInput | VBoxContainer | códigos de cupom e de presente |
GoTable | VBoxContainer | cabeçalhos ordenáveis, linhas selecionáveis |
GoPagination | HBoxContainer | páginas, ou uma linha Mais |
Formas que os jogos realmente usam
| Classe | Base | O que faz |
|---|---|---|
GoRewardCalendar | VBoxContainer | presença diária |
GoRadar · GoDonut | Control | atributos de relance |
GoCarousel | VBoxContainer | banners e seleção de personagem |
GoKbd | HBoxContainer | dicas de tecla que não mentem |
Por cima da tela
| Classe | Base | O que faz |
|---|---|---|
GoDrawer | CanvasLayer | o painel lateral |
GoPopover | RefCounted | o cartão ancorado |
GoContextMenu | RefCounted | toque longo e clique direito |
GoConsole | CanvasLayer | o console de desenvolvimento |
AI SKILL
O gohud traz uma skill de IA: toda a API, modelos prontos a correr e um lançador de pré-visualização. Cole um bloco no seu agente e ele instala o gohud e sabe usá-lo.
A legibilidade é medida, não avaliada no olho
"Bonito" é gosto; "legível" dá para medir. Um texto cinza fraco fica bem em um bom monitor e some em um celular sob a luz do dia — escolher no olho garante que isso vai acontecer mais cedo ou mais tarde.
python3 addons/gohud/tools/check_contrast.py
Todo par de cores e o rótulo de cada estado de botão sobre o painel em que ele está são medidos contra a WCAG, nos seis temas. Cores translúcidas são primeiro compostas sobre o fundo real — medi-las direto relata uma razão melhor do que a tela mostra.
Por isso as cores de texto são derivadas, não escolhidas: o gerador toma a entrada da paleta como ponto de partida e empurra a luminosidade dela até passar do limite em toda superfície onde ela pode cair. Mude a paleta e o contraste acompanha. As regras e as armadilhas por trás delas →
Verificações, releases e este site
Um único ponto de entrada roda todas as verificações; cada parte enxerga algo que as outras não veem.
bash addons/gohud/tools/check_all.sh
| Verificação | O que ela pega |
|---|---|
run_tests.sh em quatro tamanhos de tela | Comportamento e layout dos widgets, posições em RTL, foco de teclado, contraste da skin em tempo de execução, todos os presets |
new_project_check.sh | Dependências escondidas de um projeto hospedeiro; com --zip, o release como ele é distribuído, com --export, um build Web |
check_contrast.py | Contraste WCAG de cada arquivo de tema, incluindo estados de botão e painéis translúcidos |
check_generated.py · check_scaffold.sh | Os temas gerados batem com suas paletas; um tema descartável é gerado e passa no contraste |
check_package.py | A versão lida do package.json, movimentação do changelog e conteúdo do ZIP, em cópias temporárias |
check_site.py | Os links deste site, as âncoras, o idioma da página, o glossário e as tabelas de dials |
Versões de release
cat addons/gohud/package.json # { "version": "1.1.0" }
bash addons/gohud/tools/package.sh # 1.1.0 → builds/1.1.0/gohud-1.1.0.zip
A versão é a que está escrita em package.json — o empacotamento nunca a incrementa. Para lançar uma
versão nova, mude primeiro esse número. Uma execução bem-sucedida ajusta plugin.cfg e
GoUi.VERSION a esse valor e, na primeira vez que essa versão é empacotada, move as notas de
Unreleased do CHANGELOG.md para uma entrada datada. Empacotar de novo a mesma versão reconstrói o
ZIP dela e substitui o anterior. Uma execução que falha não muda nada. O ZIP deixa de fora este site, os testes,
as ferramentas e o package.json.
Este site
python3 addons/gohud/tools/make_site.py # glossário e tabelas de dials das skins, gerados a partir do código
python3 addons/gohud/tools/check_site.py # links, âncoras, idioma, glossário, tabelas geradas
bash addons/gohud/tools/site_shots.sh /tmp/shots # capturas de desktop e de celular de todas as páginas
As páginas são HTML puro em www/ — inglês na raiz, coreano em ko/. Um workflow do
GitHub Actions publica essa pasta como raiz do site.