Référence de l'API
Répertoire complet des classes, structures et interfaces de RadialMenuUI.
1. RadialMenuDef
Représente la définition complète d'une roue radiale.
| Membre | Type | Description |
|---|---|---|
Id | string | Identifiant stable du menu. |
SlotCount | int | Nombre de secteurs (3 à 10, ou 12). |
Entries | List<RadialEntryDef> | Liste des entrées positionnées sur les secteurs. |
Theme | RadialMenuTheme | Thème spécifique optionnel pour ce menu. |
AddEntry(entry) | RadialMenuDef | Ajoute une entrée et retourne l'instance pour enchaînement. |
WithCenterRuntimeIcon(dict, tex) | RadialMenuDef | Affiche une texture GTA (ex. headshot) dans le moyeu. |
WithTheme(theme) | RadialMenuDef | Assigne un thème personnalisé. |
2. RadialEntryDef
Représente un secteur sélectionnable sur la roue.
| Membre | Type | Description |
|---|---|---|
Id | string | Identifiant stable retourné à la confirmation. |
SlotIndex | int | Numéro de tranche (0 = haut / 12h, sens horaire). |
Label | string | Texte affiché dans le moyeu au survol. |
IconKey | string | Clé d'icône résolue par le thème. |
IconFile | string | Chemin relatif direct vers un fichier PNG. |
Enabled | bool | Indique si l'entrée peut être survolée et validée. |
Variants | List<RadialVariantDef> | Liste des variantes sélectionnables sur ce secteur. |
Submenu | RadialMenuDef | Sous-menu enfant ouvert par cette entrée. |
WithIcon(key) | RadialEntryDef | Assigne la clé d'icône. |
WithIconScale(float) | RadialEntryDef | Multiplicateur d'échelle pour l'icône. |
WithSubmenu(submenu) | RadialEntryDef | Attache un sous-menu enfant. |
AddVariant(id, label) | RadialEntryDef | Ajoute une variante horizontale. |
KeepOpenAfterConfirm() | RadialEntryDef | Conserve la roue ouverte après validation. |
OnConfirmed(action) | RadialEntryDef | Définit une action de rappel locale pour cette entrée. |
3. RadialMenuController
Gère le cycle de vie, l'état, les survols, la pile de navigation et le rendu.
| Membre | Type | Description |
|---|---|---|
IsOpen | bool | Indique si la roue est actuellement ouverte à l'écran. |
HoveredSlot | int | Index de la tranche actuellement survolée (-1 si aucune). |
Current | RadialMenuDef | Définition de menu actuellement affichée. |
Open(def) | void | Ouvre une définition de menu. |
CancelAndClose() | void | Ferme le menu sans exécuter d'action. |
ConfirmAndClose(raiseEvent) | bool | Confirme l'entrée survolée et referme la roue. |
Update() | void | Traite les entrées, calcule les survols et dessine une frame. |
QueueWarmup(theme) | void | Enfile le préchargement progressif des textures. |
WarmupOneTexture() | void | Crée au maximum une texture ScriptHookV par appel. |
ResultConfirmed | event | Événement déclenché lors d'une sélection validée. |
SelectionChanged | event | Événement déclenché lorsque la tranche survolée change. |
4. RadialMenuResult
Transmis aux callbacks lors de la validation d'une action.
| Propriété | Type | Description |
|---|---|---|
MenuId | string | Identifiant du menu d'origine de l'action. |
EntryId | string | Identifiant de l'entrée validée. |
SlotIndex | int | Numéro de tranche de l'entrée validée. |
EntryLabel | string | Libellé de l'entrée validée. |
VariantId | string | Identifiant de la variante sélectionnée (ou null). |
VariantLabel | string | Libellé de la variante sélectionnée (ou null). |
5. Entrées & entrée personnalisée
Le contrôleur et le gameplay host ne consomment que IRadialMenuInput, jamais les contrôles GTA directement. Remplacer l'adaptateur modifie tous les bindings en laissant intactes la logique de navigation et l'ensemble des contrôles bloqués.
IRadialMenuInput
| Membre | Description |
|---|---|
BeginFrame() | Démarre une nouvelle image d'entrée et réinitialise l'état transitoire de l'adaptateur. |
ResetForOpen() | Recalibre l'entrée à l'ouverture d'une roue. |
TryGetDirection(out angleDegTopBased, out magnitude) | Lit la direction en degrés dans le sens horaire depuis le haut (0 = en haut) et sa magnitude ; retourne true quand l'entrée est active hors zone morte. |
NextVariantPressed() | True une fois quand la commande de variante suivante est pressée. |
PrevVariantPressed() | True une fois quand la commande de variante précédente est pressée. |
OpenSubmenuPressed() | True une fois quand la commande d'ouverture de sous-menu est pressée. |
BackToParentPressed() | True une fois quand la commande de retour au parent est pressée. |
ConfirmPressed() | True une fois quand une confirmation en mode clic est pressée. |
HoldPressed() | True tant que la commande maintien-pour-ouvrir reste pressée. |
ConfirmReleased() | True une fois quand la commande maintien-pour-ouvrir est relâchée. |
CancelPressed() | True une fois quand une annulation en mode clic est pressée. |
Bindings par défaut (GtaRadialMenuInput)
| Commande | Manette | Clavier / Souris |
|---|---|---|
| Direction du survol | Stick droit (ScriptRightAxisX/Y) | Curseur souris (canvas virtuel 1280×720) — le périphérique le plus récemment bougé garde la main |
| Confirmer (mode clic) | R2 / Attack, FrontendAccept | Entrée ou clic gauche |
| Confirmer (mode maintien) | Relâcher SelectWeapon (L1 / TAB) | Relâcher TAB |
| Maintenir pour ouvrir/fermer | Maintenir SelectWeapon (L1 / TAB) | Maintenir TAB |
| Ouvrir un sous-menu | Carré / X (Attack neutralisé) | Clic gauche |
| Retour au parent | L2 / LT (Aim neutralisé) | Clic droit |
| Variante suivante | RB, D-pad droite, SelectNextWeapon | Molette haut, → |
| Variante précédente | LB, D-pad gauche, SelectPrevWeapon | Molette bas, ← |
| Annuler (mode clic) | O / B (FrontendCancel) | Échap / Retour arrière |
Ces bindings sont codés en dur dans GtaRadialMenuInput et ne peuvent pas être reconfigurés via des flags de configuration. Pour changer les commandes, implémentez votre propre IRadialMenuInput (voir ci-dessous).
Exemple d'entrée personnalisée
L'exemple ci-dessous associe la navigation à des touches personnalisées au lieu des valeurs GTA par défaut — le contrôleur ne se soucie pas de quels contrôles produisent les commandes :
using System.Windows.Forms;
using GTA;
using RadialMenuUI;
public class CustomInput : IRadialMenuInput
{
public void BeginFrame() { }
public void ResetForOpen() { }
public bool TryGetDirection(out float angleDegTopBased, out float magnitude)
{
magnitude = 1f;
if (Game.IsKeyPressed(Keys.Up)) { angleDegTopBased = 0f; return true; }
if (Game.IsKeyPressed(Keys.Right)) { angleDegTopBased = 90f; return true; }
if (Game.IsKeyPressed(Keys.Down)) { angleDegTopBased = 180f; return true; }
if (Game.IsKeyPressed(Keys.Left)) { angleDegTopBased = 270f; return true; }
angleDegTopBased = 0f;
return false;
}
public bool NextVariantPressed() => Game.IsKeyJustPressed(Keys.E);
public bool PrevVariantPressed() => Game.IsKeyJustPressed(Keys.Q);
public bool OpenSubmenuPressed() => Game.IsKeyJustPressed(Keys.Enter);
public bool BackToParentPressed() => Game.IsKeyJustPressed(Keys.Back);
public bool ConfirmPressed() => Game.IsControlJustPressed(Control.FrontendAccept);
public bool HoldPressed() => false;
public bool ConfirmReleased() => false;
public bool CancelPressed() => Game.IsKeyJustPressed(Keys.Escape);
}
var controller = new RadialMenuController(new CustomInput());
6. RadialMenuGameplayHost
Wrapper clé en main associant RadialMenuController, ralenti cinématique et blocage des contrôles GTA.
| Membre | Description |
|---|---|
Process(canOpen, buildMenu) | Méthode d'actualisation par tick gérant ouverture, blocage et fermeture. |
Open(menu) | Ouvre un menu avec ralenti et blocage des commandes. |
Close() | Ferme le menu et restaure la vitesse normale du monde. |
IsOpen | Indique si le menu hébergé est visible. |