Ce que ça donne dans un jeu
Les préréglages médiéval et science-fiction — fiches de personnage, inventaires et quêtes ; formulaires, grilles et cartes d'invite ; panneaux anguleux et commandes tactiles. Changer de préréglage tient en une ligne de code.
Ce qu'il vous enlève des mains
Ce qui coûte le plus de temps dans une UI de jeu, ce n'est pas la forme d'un bouton — c'est tout ce qui diverge d'un appareil à l'autre. gohud traite cette dérive en un seul endroit.
Chaque mesure est un token
Les espacements, les coins et les tailles de texte sont appelés par leur nom, pas écrits en chiffres. Changez de thème et tout l'écran suit.
Taille visible ≠ taille pressable
Un bouton de fermeture paraît faire 36 dp alors que sa cible tactile en fait 48. Là où des emplacements serrés se chevauchent, c'est celui dont le centre est le plus proche qui reçoit l'appui.
Encoches et claviers
Les éléments du HUD restent dans la zone sûre, et un champ de saisie remonte au-dessus du clavier virtuel quand celui-ci apparaît.
Retour ne ferme qu'une chose
Échap et le bouton Retour d'Android ne ferment que la surface la plus haute. Des fenêtres empilées ne disparaissent pas d'un seul coup.
Les snackbars ne captent jamais la saisie
Appuyez à travers un snackbar et c'est le bouton en dessous qui reçoit l'appui. Le focus n'est pas pris non plus.
Les icônes se demandent par leur nom
Les widgets ne connaissent que GoIconSet.CLOSE. Changez de jeu et tous les dessins changent sans toucher une ligne de code.
Six apparences, une ligne
GoUi.use_preset() change d'un coup le thème, le skin et les icônes — cadres arrondis, chanfreinés science-fiction ou forgés médiévaux.
Lisibilité mesurée
Chaque thème est vérifié au regard des WCAG, y compris les états des boutons et les panneaux de HUD translucides sur blanc pur et noir pur.
Installer gohud
Deux chemins. Laissez votre agent IA le faire, ou déposez le dossier dans votre projet — il n'y a rien d'autre à configurer.
Démarrage rapide
Cinq lignes affichent un écran thématisé. Le parcours complet est sur la page d'installation.
Changer l'apparence — les couleurs et les formes
Un Theme ne peut restyler que ce que le moteur dessine. Les coins arrondis sont les seuls coins dont dispose StyleBoxFlat, et le joystick, les emplacements rapides et le repère guidé sont dessinés par du code — un thème seul ne peut donc jamais changer leur forme. gohud livre pour cela des préréglages : un thème, un skin et un jeu d'icônes choisis d'un seul tenant.
GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) # thème, skin et icônes d'un seul coup
| Préréglage | Apparence |
|---|---|
default_dark | Le gohud d'origine — coins arrondis, accent bleu doux |
default_light | Les mêmes formes sur une palette claire |
scifi_dark | Coins chanfreinés, arêtes néon cyan et halo, joystick hexagonal, crochets de visée |
scifi_light | Les mêmes formes anguleuses dans une palette claire de plan technique |
medieval_dark | Fer sombre et cuir, cadres d'or ancien, rivets, icônes gravées, titres en Cinzel |
medieval_light | Parchemin, encre et bronze avec les mêmes cadres forgés |
default_dark — coins arrondis, accent bleu doux
default_light — mêmes formes, palette claire
scifi_dark — coins chanfreinés, néon cyan
scifi_light — mêmes formes anguleuses, palette de plan techniqueCes quatre captures montrent le même écran de galerie. Pas une ligne de code ne diffère — seulement le nom du préréglage. Coins des boutons, formes des interrupteurs, rangées de liste et bordures des champs de saisie bougent ensemble.
Collection médiévale
medieval_dark associe le fer et le cuir à l'or ancien ; medieval_light emploie le
parchemin et l'encre. Les cadres de menu portent un rivet et un petit ornement d'angle tandis que le HUD,
toujours visible, reste discret ; 16 icônes gravées redessinent les noms d'objets, et seuls les titres et
sous-titres utilisent la police Cinzel fournie.
medieval_dark — fer et cuir
medieval_light — parchemin et encreLes deux captures viennent de examples/medieval/medieval.tscn, construit à partir des widgets standard.
Le guide médiéval et comment créer votre propre royaume →
Le même écran sur téléphone et sur ordinateur
Les captures de la galerie sont prises sur un téléphone en portrait. Ci-dessous, le même code en 1280×800 — le contenu s'arrête à une largeur lisible (480 dp) et se centre, tandis que le HUD reste dans les coins. Le formulaire contourne les éléments de HUD flottants, mais ne bouge pas lorsqu'il en est déjà à l'écart : le décaler quand même décentrerait le contenu sur un écran large.
default_dark · 1280×800
scifi_dark · 1280×800La même feuille, une autre apparence
Choisissez-en un dans Paramètres du projet → gohud → Theme → Preset, ou renseignez
GoConfig.preset. Remplir explicitement theme, skin ou icons
l'emporte sur le préréglage : vous pouvez donc partir d'un préréglage et n'en redéfinir qu'un seul.
new_theme.py kingdom --from medieval_dark écrit
une palette qui détaille chaque valeur héritée ; make_theme.py kingdom construit le thème, ses
illustrations de contrôles et les molettes de son skin, et le préréglage apparaît dans le sélecteur.
Chaque réglage et chaque molette →
Les skins — là où un Theme n'atteint pas
Un skin possède le joystick, la face des emplacements rapides, l'anneau du repère guidé, les puces, les squelettes de chargement, les alertes, les séparateurs et les en-têtes de section. Dérivez-le et ne redéfinissez que ce que vous voulez changer.
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 | Formes qu'elle peut produire |
|---|---|
GoStyleBoxCut | Coins coupés en diagonale (chanfrein), une arête d'accent épaissie, un halo extérieur |
GoStyleBoxBracket | Des marques d'angle seules, sans enfermer le contenu |
GoStyleBoxMedieval | Un cadre forgé avec rivets, gravure d'angle, un reflet biseauté et le grain du matériau |
Les trois se sérialisent dans une ressource Theme — c'est ce qui permet à un thème de changer la forme,
et pas seulement la couleur. GoSkinSciFi et GoSkinMedieval sont les sous-classes fournies.
GoStyle.box() renvoie toujours un StyleBoxFlat, parce que le code appelant le
reçoit et ajuste bg_color ou corner_radius. Utilisez
GoStyle.surface() lorsqu'une forme personnalisée doit survivre.
Widgets
Les pièces, en un tableau. Chacune en détail →
| Classe | Base | Rôle |
|---|---|---|
GoSurface | Control | Coque de carte flottante — placement au centre, en bas ou ancré, en-tête et pied fixes, corps défilant, redimensionnement par glissement |
GoSheet | CanvasLayer | Des pages qui montent depuis le bas, sur leur propre calque afin de passer au-dessus du HUD |
GoDialogs | Node | Confirmations et alertes que vous await ; destructive pour les actions irréversibles |
GoForm | MarginContainer | Formulaires à largeur plafonnée qui évitent le clavier virtuel et, avec avoid_hud, le HUD |
GoScroll | ScrollContainer | Défilement tactile ; la barre de défilement se loge dans la marge intérieure de la carte |
GoNotice | PanelContainer | Un snackbar qui ne prend ni la saisie ni le focus |
GoPromptCard | PanelContainer | Une question qui ne bloque pas le jeu |
GoCoachMark | Control | Une visite guidée qui désigne de vraies commandes ; appuyer sur la cible fait avancer |
GoHudAnchor | Control | Épingle les éléments de HUD à l'une des neuf positions de la zone sûre |
GoBar | Control | Barres de vie, de mana et d'expérience avec des variations amorties |
GoSlot | Button | Un emplacement rapide — icône, quantité, temps de recharge et raccourci sur une seule face |
GoJoystick | Control | Stick virtuel en mode fixe, suiveur ou relatif |
GoIconButton | Button | Paraît petit, s'appuie grand |
GoStyle | statique | Boutons, rangées de liste, champs de saisie, puces, tableaux, onglets et bien plus, fabriqués d'une seule manière cohérente |
Attendre, dire, compter
| Classe | Base | Rôle |
|---|---|---|
GoSnackbar | Node | le message qui se place tout seul |
GoSpinner | Control | une attente dont on ne voit pas la fin |
GoBadge | PanelContainer | la pastille de non-lu, l'étiquette NOUVEAU, le 99+ |
Formulaires et listes
| Classe | Base | Rôle |
|---|---|---|
GoField | VBoxContainer | la rangée qui peut être en erreur |
GoInputGroup | HBoxContainer | une saisie soudée à son bouton |
GoCombobox | Button | un sélecteur qui cherche |
GoCodeInput | VBoxContainer | codes promo et codes cadeaux |
GoTable | VBoxContainer | des en-têtes triables, des rangées sélectionnables |
GoPagination | HBoxContainer | des pages, ou une rangée « Voir plus » |
Les formes que les jeux utilisent vraiment
| Classe | Base | Rôle |
|---|---|---|
GoRewardCalendar | VBoxContainer | la présence quotidienne |
GoRadar · GoDonut | Control | les statistiques d'un coup d'œil |
GoCarousel | VBoxContainer | bannières et sélection de personnage |
GoKbd | HBoxContainer | des indications de touche qui ne mentent pas |
Par-dessus l'écran
| Classe | Base | Rôle |
|---|---|---|
GoDrawer | CanvasLayer | le panneau latéral |
GoPopover | RefCounted | la carte épinglée |
GoContextMenu | RefCounted | appui long et clic droit |
GoConsole | CanvasLayer | la console de développement |
AI SKILL
gohud embarque une compétence IA : toute l'API, des modèles exécutables et un lanceur d'aperçu. Collez un bloc dans votre agent : il installe gohud et sait s'en servir.
La lisibilité se mesure, elle ne s'estime pas à l'œil
« Joli » relève du goût ; « lisible » se mesure. Un gris pâle paraît très bien sur un bon écran et disparaît sur un téléphone en plein jour — choisir à l'œil finit toujours par y mener.
python3 addons/gohud/tools/check_contrast.py
Chaque paire de couleurs et le libellé de chaque état de bouton sur le panneau qui le porte sont mesurés au regard des WCAG, dans les six thèmes. Les couleurs translucides sont d'abord composées sur leur fond réel — les mesurer directement annonce un meilleur rapport que ce que l'écran montre.
Les couleurs de texte sont donc dérivées, pas choisies : le générateur part de l'entrée de la palette et pousse sa clarté jusqu'à ce qu'elle franchisse le seuil sur chaque surface où elle peut se poser. Changez la palette et le contraste suit. Les règles et les pièges qui les motivent →
Vérifications, versions et ce site
Un seul point d'entrée lance toutes les vérifications ; chaque partie voit ce que les autres ne voient pas.
bash addons/gohud/tools/check_all.sh
| Vérification | Ce qu'elle attrape |
|---|---|
run_tests.sh sur quatre tailles d'écran | Comportement et mise en page des widgets, positions en RTL, focus clavier, contraste du skin à l'exécution, chaque préréglage |
new_project_check.sh | Les dépendances cachées envers un projet hôte ; avec --zip la version telle qu'elle est livrée, avec --export une build Web |
check_contrast.py | Le contraste WCAG de chaque fichier de thème, états des boutons et panneaux translucides compris |
check_generated.py · check_scaffold.sh | Les thèmes générés correspondent à leurs palettes ; un thème jetable se construit et passe le contrôle de contraste |
check_package.py | La version reprise de package.json, les déplacements dans le changelog et le contenu du ZIP, sur des copies temporaires |
check_site.py | Les liens, les ancres, la langue des pages, le glossaire et les tableaux de molettes de ce site |
Publier des versions
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
La version est celle écrite dans package.json : l'empaquetage ne l'augmente jamais. Pour publier
une nouvelle version, changez d'abord ce numéro. Une exécution réussie aligne plugin.cfg et
GoUi.VERSION sur cette valeur et, la première fois que cette version est empaquetée, déplace les
notes Unreleased de CHANGELOG.md dans une entrée datée. Réempaqueter la même version reconstruit
son ZIP et remplace l'ancien. Une exécution qui échoue ne change rien. Le ZIP laisse de côté ce site, les tests,
les outils et package.json.
Ce site
python3 addons/gohud/tools/make_site.py # glossaire et tableaux de molettes de skin, générés depuis les sources
python3 addons/gohud/tools/check_site.py # liens, ancres, langue, glossaire, tableaux générés
bash addons/gohud/tools/site_shots.sh /tmp/shots # captures d'écran de chaque page, en version bureau et téléphone
Les pages sont du HTML simple dans www/ — l'anglais à la racine, le coréen dans ko/.
Un workflow GitHub Actions publie ce dossier comme racine du site.