Aller au contenu principal

Menus

RadialMenuUI offre des structures avancées qui dépassent les simples roues à 8 boutons : disposition des tranches, sous-menus imbriqués, et roue qui reste ouverte après une confirmation.


1. Coordonnées des tranches

Les tranches sont ordonnées dans le sens horaire, en partant de 0 en haut (12 h) :

Disposition d'une roue radiale à 8 secteurs

  • Toute tranche omise reste vide.
  • Laisser la tranche du bas vide (ex. la tranche 4 d'une roue à 8) est un pattern UX GTA recommandé : cela donne au joueur une cible intuitive pour annuler sans rien sélectionner.
var menu = new RadialMenuDef("actions", 8);
menu.AddEntry(new RadialEntryDef("top_action", 0) { Label = "Top Action" });
menu.AddEntry(new RadialEntryDef("right_action", 2) { Label = "Right Action" });
// Les tranches 1, 3, 4, 5, 6, 7 restent vides

2. Sous-menus imbriqués

Vous pouvez attacher un menu enfant à n'importe quelle entrée via .WithSubmenu() :

// 1. Créer le menu parent
var mainMenu = new RadialMenuDef("main", 4);

// 2. Créer le sous-menu enfant (peut avoir un nombre de tranches différent !)
var teleportSubmenu = new RadialMenuDef("tp_menu", 4);
teleportSubmenu.AddEntry(new RadialEntryDef("tp_airport", 0) { Label = "LS Airport" });
teleportSubmenu.AddEntry(new RadialEntryDef("tp_pier", 1) { Label = "Del Perro Pier" });
teleportSubmenu.AddEntry(new RadialEntryDef("tp_chiliad", 2) { Label = "Mount Chiliad" });

// 3. Attacher le sous-menu à la tranche 0 du menu principal
var tpEntry = new RadialEntryDef("teleport", 0) { Label = "Teleport..." };
tpEntry.WithSubmenu(teleportSubmenu);
mainMenu.AddEntry(tpEntry);
  • Entrer dans un sous-menu : survolez la tranche parente et appuyez sur Carré / X (ou cliquez).
  • Revenir au parent : appuyez sur L2 / LT (ou clic droit) pour remonter d'un niveau. À la racine, la roue se referme à la place.

3. Garder la roue ouverte après confirmation

Pour les actions à déclenchement répété (ex. contrôle du volume, usage rapide d'objets), utilisez .KeepOpenAfterConfirm() :

var entry = new RadialEntryDef("volume_up", 2) { Label = "Volume +" };
entry.KeepOpenAfterConfirm();
entry.OnConfirmed(result => AudioSystem.IncreaseVolume());
menu.AddEntry(entry);

Pour une tranche unique qui fait défiler plusieurs choix sans ouvrir de sous-menu, voir Variantes.