gohud

Formas que os jogos realmente usam

← Widgets

Formas conhecidas da web, refeitas em torno do que um jogo precisa delas.

GoRewardCalendar — presença diária

Um seletor de data quase nunca serve em um jogo. Uma forma de calendário serve — para recompensas de presença, onde o que importa é em que dia você está, não que data é hoje.

var attendance := GoRewardCalendar.make(days, claimed_until)
attendance.claimed.connect(func(day: int) -> void: server.claim_day(day))

Só a célula de hoje pode ser pressionada — um botão que não faz nada quando pressionado passa a impressão de coisa quebrada. Resgatado, hoje e futuro se diferenciam por três coisas ao mesmo tempo: um glifo de visto, uma borda de destaque e o escurecimento.

GoRadar e GoDonut — atributos de relance

var stats := GoRadar.make({"FOR": 0.85, "AGI": 0.5, "INT": 0.3, "VIT": 0.7, "SOR": 0.45})
stats.set_compare(with_new_sword)          # uma sobreposição tracejada

var share := GoDonut.make([{"label": "Físico", "value": 620}, {"label": "Mágico", "value": 340}])
card.add_child(share.legend())

Os valores do radar vão de 0 a 1 porque o que conta como cheio é uma decisão do jogo — 120 de força puros ao lado de 45 de inteligência desenhariam uma mentira. Os valores da rosca são brutos e ela faz a divisão por você; passando de cinco fatias, ela junta o resto, já que uma sexta fatia é um fiozinho que ninguém consegue ler. A linha de comparação é tracejada, não só de outra cor, e a legenda escreve a porcentagem em palavras.

GoCarousel — banners e seleção de personagem

banners.set_pages([promo, event, pack])
banners.autoplay_seconds = 5.0             # desligado por padrão

Ele não avança sozinho a não ser que você peça, e cinco segundos é o piso: um banner que muda a cada três leva o texto embora antes de ele ser lido. Tocar nele reinicia o cronômetro, e com o reduce_motion ligado ele nunca avança por conta própria. Os pontinhos são pressionáveis no mínimo de toque mesmo com o ponto desenhado sendo pequeno.

GoKbd — dicas de tecla que não mentem

hint.add_child(GoKbd.for_action(&"interact"))   # lê o atalho de verdade

Um "Aperte F" escrito na mão continua dizendo F depois que o jogador remapeia — a mentira mais comum de uma interface de PC. O for_action() lê o InputMap; se a ação estiver mapeada em um controle, ele devolve vazio e o widget se esconde, porque "Nenhuma" seria uma mentira em si. No Android e no iOS ele se esconde sozinho.