Démarrage rapide
Ce guide vous montre comment créer une roue d'actions 4 secteurs fonctionnelle dans un script ScriptHookVDotNet.
Exemple Minimal
Créez une classe héritant de Script :
using System;
using System.Drawing;
using System.Windows.Forms;
using GTA;
using RadialMenuUI;
public class MonModRadial : Script
{
private readonly RadialMenuController _controller;
private readonly RadialMenuTheme _theme;
public MonModRadial()
{
// 1. Initialise le thème pointant vers les skins par défaut
_theme = new RadialMenuTheme("default")
{
BaseDirectory = @"RadialMenuUI\",
AssetRoot = @"skins\default",
IconRoot = @"skins\default\icons",
WheelTint = Color.White,
HoverTint = Color.FromArgb(255, 215, 0) // Surbrillance dorée
};
// Associe des clés stables d'icônes aux PNG fournis avec le thème par défaut.
_theme.RegisterIcon("repair", "wheel_support_backup.png");
_theme.RegisterIcon("heal", "wheel_category_support.png");
_theme.RegisterIcon("police", "wheel_police_routine_check.png");
// 2. Initialise l'adaptateur de contrôle (stick droit + souris)
var input = new GtaRadialMenuInput();
// 3. Crée le contrôleur
_controller = new RadialMenuController(input);
_controller.ResultConfirmed += OnActionConfirmed;
// 4. Préchauffage des textures en tâche de fond pour une première ouverture instantanée
_controller.QueueWarmup(_theme);
Tick += OnTick;
KeyUp += OnKeyUp;
}
private void OnKeyUp(object sender, KeyEventArgs e)
{
// Ouvre ou ferme la roue avec la touche F5
if (e.KeyCode == Keys.F5)
{
if (_controller.IsOpen)
{
_controller.CancelAndClose();
}
else
{
_controller.Open(CreateMainMenu());
}
}
}
private void OnTick(object sender, EventArgs e)
{
// Fait avancer le contrôleur à chaque frame
_controller.WarmupOneTexture();
if (_controller.IsOpen)
{
_controller.Update();
// Si la touche de confirmation (R2 / Clic / Entrée) est pressée
if (_controller.PressedThisFrame)
{
_controller.ConfirmAndClose();
}
}
}
private RadialMenuDef CreateMainMenu()
{
var menu = new RadialMenuDef("main", 4).WithTheme(_theme);
menu.AddEntry(new RadialEntryDef("repair", 0) { Label = "Réparer Véhicule" }.WithIcon("repair"));
menu.AddEntry(new RadialEntryDef("heal", 1) { Label = "Soigner Joueur" }.WithIcon("heal"));
menu.AddEntry(new RadialEntryDef("police", 2) { Label = "Effacer Police" }.WithIcon("police"));
// Slot 3 (en bas / 18h) laissé vide pour permettre d'annuler naturellement
return menu;
}
private void OnActionConfirmed(RadialMenuResult result)
{
Ped player = Game.Player.Character;
switch (result.EntryId)
{
case "repair":
player.CurrentVehicle?.Repair();
GTA.UI.Notification.PostTicker("~g~Véhicule réparé !", false, false);
break;
case "heal":
player.Health = player.MaxHealth;
player.Armor = 100;
GTA.UI.Notification.PostTicker("~g~Santé restaurée !", false, false);
break;
case "police":
Game.Player.Wanted.SetWantedLevel(0, false);
GTA.UI.Notification.PostTicker("~b~Indices de recherche effacés !", false, false);
break;
}
}
}
Explications
RadialMenuTheme: Définit les couleurs, chemins de textures et transparences.GtaRadialMenuInput: Lit les commandes GTA (stick droit, curseur souris et boutons).RadialMenuController: Gère l'ouverture, les survols, les sons frontend et déclencheResultConfirmed.RadialMenuDef: Déclare le nombre de secteurs (ex. 4 tranches) et les entrées.WarmupOneTexture(): Enregistre progressivement au démarrage une texture par frame pour éviter tout freeze à la première ouverture.